目的
用函数的方法来实现ATM机的功能
代码的逻辑结构
搭建框架 不做具体的事情。具体的事情交给每一个函数去实现
技术
建立函数
技术使用
1.搭建基本框架
int _tmain(int argc, _TCHAR* argv[])
{
//登陆界面
welcome();
//输入密码
bool result = passwordLogin();
if (result == false)
{
exitATM(EXIT_FAILURE);
}
//显示菜单
menu();
//选择操作并执行
while (1)
{
int choice = chooseChoice();
switch (choice)
{
case 1:
//取款
withdraw();
break;
case 2:
//存款
deposit();
break;
case 3:
//更改密码
changePassword();
break;
default:
//退出
exitATM(EXIT_SUCCESS);
break;
}
}
system("pause");
return 0;
}
以上是实现这个功能的基本框架 然后可以看到框架分为几个部分
- 登陆界面
- 输入密码
- 显示菜单
- 选择操作并执行
因此开始第二步
2.自定义函数
-
登陆界面
void welcome(void){ printf("***********\n"); printf(" 欢迎使用!\n"); printf("***********\n"); }
-
输入密码
bool passwordLogin(void){
int inputPassword = 0;
int wrongTime = 0;
printf("请输入密码:");
while (1)
{
scanf("%d", &inputPassword);
if (inputPassword == passWord)
{
return true;
}
else
{
wrongTime++;
if (wrongTime == 4)
{
printf("密码错误次数过多,此卡已冻结,有问题请联系客服\n");
return false;
}
else
{
printf("密码错误,请重新输入密码:");
}
}
}
}
由上面的代码可以看出,输入密码分三种情况:密码输入正确、密码输入错误,但重输密码4次内正确、密码输入4次都错误
第一二种情况,函数返回值为 true
第三种情况为false
在主框架中可以看到,会判断返回值,如果为true,进行下一步操作。为false,则程序终止。
退出程序的过程也可以编写一个函数
void exitATM(int status){
printf("感谢您的使用,再见\n");
system("pause");
exit(status);
}
-
显示菜单
void menu(void){ printf("1.取款\n"); printf("2.存款\n"); printf("3.更改密码\n"); printf("4.退出\n"); }
-
用户选择操作
int chooseChoice(void){ int choice; printf("请选择你想要的操作:"); while (1) { scanf("%d", &choice); if (choice >=1 && choice <= 4) { return choice; } else { printf("选择不合法,请重新选择:"); } } }
-
执行操作
由于在取款中会有是否继续的程序,所以也定义一个函数
bool wetherCountinue(void){
int choice;
printf("是否继续?1.继续/0.退出");
scanf("%d", &choice);
if (choice == 0)
{
return false;
}
else
{
return true;
}
}
1.取款
void withdraw(void){
int money;
int answer;
while (1)
{
printf("请输入取款金额:");
scanf("%d", &money);
if (money > 0 && money <= oglMoney)
{
oglMoney = oglMoney - money;
printf("取款成功,当前余额为:%d\n", oglMoney);
int reslut = wetherCountinue();
if (reslut == 0)
{
return;
}
}
else
{
printf("卡上余额不足,");
int result1 = wetherCountinue();
if (result1 == 0)
{
return;
}
}
}
}
2.存款
void deposit(void){
int inputMoney;
printf("请输入存款金额:");
scanf("%d",&inputMoney);
oglMoney = oglMoney + inputMoney;
printf("存款成功,当前余额为:%d",oglMoney);
}
3.更改密码
void changePassword(void){
bool result = passwordLogin();
if (result == false)
{
exitATM(EXIT_FAILURE);
}
int newPassword1, newPassword2;
while (1)
{
printf("请输入新的密码:");
scanf("%d", &newPassword1);
printf("请确认密码:");
scanf("%d", &newPassword2);
if (newPassword1 == newPassword2)
{
passWord = newPassword1;
printf("更改密码成功!");
break;
}
else
{
printf("两次密码不同,请重新输入.\n");
}
}
}
4.退出
void exitATM(int status){
printf("感谢您的使用,再见\n");
system("pause");
exit(status);
实战
在使用每一个函数时,一定要声明!
#include "stdafx.h"
#include <stdlib.h>
#include "iostream"
void welcome(void);
bool passwordLogin(void);
void exitATM(int status);
void menu(void);
int chooseChoice(void);
void withdraw(void);
void deposit(void);
void changePassword(void);
//passWord 和 oglMoney在函数定义中使用了多次,所以定义两个全局变量
int passWord = 1212;
int oglMoney = 2000;
int _tmain(int argc, _TCHAR* argv[])
{
//登陆界面
welcome();
//输入密码
bool result = passwordLogin();
if (result == false)
{
exitATM(EXIT_FAILURE);
}
//显示菜单
menu();
//选择操作并执行
while (1)
{
int choice = chooseChoice();
switch (choice)
{
case 1:
//取款
withdraw();
break;
case 2:
//存款
deposit();
break;
case 3:
//更改密码
changePassword();
break;
default:
//退出
exitATM(EXIT_SUCCESS);
break;
}
}
system("pause");
return 0;
}
void welcome(void){
printf("***********\n");
printf(" 欢迎使用!\n");
printf("***********\n");
}
void exitATM(int status){
printf("感谢您的使用,再见\n");
system("pause");
exit(status);
}
bool passwordLogin(void){
int inputPassword = 0;
int wrongTime = 0;
printf("请输入密码:");
while (1)
{
scanf("%d", &inputPassword);
if (inputPassword == passWord)
{
return true;
}
else
{
wrongTime++;
if (wrongTime == 4)
{
printf("密码错误次数过多,此卡已冻结,有问题请联系客服\n");
return false;
}
else
{
printf("密码错误,请重新输入密码:");
}
}
}
}
void menu(void){
printf("1.取款\n");
printf("2.存款\n");
printf("3.更改密码\n");
printf("4.退出\n");
}
int chooseChoice(void){
int choice;
printf("请选择你想要的操作:");
while (1)
{
scanf("%d", &choice);
if (choice >=1 && choice <= 4)
{
return choice;
}
else
{
printf("选择不合法,请重新选择:");
}
}
}
bool wetherCountinue(void){
int choice;
printf("是否继续?1.继续/0.退出");
scanf("%d", &choice);
if (choice == 0)
{
return false;
}
else
{
return true;
}
}
void withdraw(void){
int money;
int answer;
while (1)
{
printf("请输入取款金额:");
scanf("%d", &money);
if (money > 0 && money <= oglMoney)
{
oglMoney = oglMoney - money;
printf("取款成功,当前余额为:%d\n", oglMoney);
int reslut = wetherCountinue();
if (reslut == 0)
{
return;
}
}
else
{
printf("卡上余额不足,");
int result1 = wetherCountinue();
if (result1 == 0)
{
return;
}
}
}
}
void deposit(void){
int inputMoney;
printf("请输入存款金额:");
scanf("%d",&inputMoney);
oglMoney = oglMoney + inputMoney;
printf("存款成功,当前余额为:%d",oglMoney);
}
void changePassword(void){
bool result = passwordLogin();
if (result == false)
{
exitATM(EXIT_FAILURE);
}
int newPassword1, newPassword2;
while (1)
{
printf("请输入新的密码:");
scanf("%d", &newPassword1);
printf("请确认密码:");
scanf("%d", &newPassword2);
if (newPassword1 == newPassword2)
{
passWord = newPassword1;
printf("更改密码成功!");
break;
}
else
{
printf("两次密码不同,请重新输入.\n");
}
}
}
心得
使用函数使代码结构简单,方便阅读,利于移植。只是在定义函数的时候,会思考很多方面,就比如定义bool类型,一开始会觉得直接定义一个void,直接实现登陆密码,但这样在主函数里面,程序的写法看起来不够清楚,而且那样做运行起来也有一点漏洞。总的来说使用函数让框架更加清晰明了,也很锻炼自己的逻辑思维能力,所以在后面的学习过程中,在用函数实现更加清晰的情况下,尽量多使用函数。
网友评论