目的
通过这个模拟ATM取款机demo可以练习使用条件控制语句和函数。
方法
方法一:
先用for语句以及if语句进行密码输入及判断,main函数内用switch语句将代码分成若干个部分来分别实现不同功能,再用for语句进行密码正确之后的内容的整体循环。
方法二:
大体与方法一相同,只是把switch里面每一个分支中的功能单独交给一个函数去实现,使得main函数只搭框架,从而变得更加简洁,易懂。
具体实现
注意:
1.在写代码的时候一定要及时并准确定义变量
2.记得声明函数
方法一
- 首先用户需要输入密码登录,密码错误三次即显示错误次数太多,请联系客服。
- 其次用户登录后出现菜单界面,进行功能选择。
- 第三在每次进行一次操作后用户将选择继续或者退出。
用户输入密码
- for循环
先提示用户输入密码
然后第一个if语句判断密码是否输入正确,正确则break,跳出for循环。不正确则判断再进入第二个目的是控制操作次数的if语句,未满三次则继续for循环,如果次数达到三次,则会显示‘错误次数太多,请联系客服’的字样并且退出循环。
菜单界面
密码输入正确后,弹出菜单界面,用户进行功能选择,此时就要想到switch分支语句实现不同功能的。
-
首先显示菜单页面
首先让用户输入选项
scanf("%d", &choice);
然后开始switch语句
case 2: //取款
int temp2;
for(;1<2;){
printf("输入取款金额:");
scanf("%d", &temp2);
if(temp2 > total){
printf("余额不足 ");
}else{
total -= temp2;
printf("取款成功 余额为%d\n",total);
break;
}
}
break;
case 3: //查询余额
printf("当前余额为:%d\n",total);
break;
case 4: //更改密码
break;
default://退出
exit(EXIT_SUCCESS);
//exit(EXIT_FAILURE);
break;
}
以上是将全部代码写在switch语句里面的方法一,对于这部分,如果使用函数,即使用方法二,将会使switch语句以及main函数更加简洁易懂,所以接下来运用函数来简化主函数
方法二
(由于方法一和方法二的变量定义稍有不同,所以下面将会重新列出)
声明函数:在练习初期尽量使用简单的函数名,方便快速辨认。
-
声明函数并定义全局变量
-
主函数内定义局部变量
-
用户输入密码并判断正误
- 菜单页面与方法一相同
- 用户输入选项后(scanf("%d",&num);),
进入switch语句
switch(num){
case 1:
cunkuan();
break;
case 2:
qukuan();
break;
case 3:
genggai();
break;
case 4:
printf("%d\n",num1);
break;
default:
printf("谢谢使用\n");
exit(EXIT_SUCCESS);
break;
}
注意
调用函数的格式为:函数名();
一定要记得末尾加分号
存款
存款的内容很简单,只要将存入的金额与原来的本金相加即可,故不做赘述。
取款
- 在取款功能中出现了fflush(stdin);这一语句
这是因为当上一次有输入的情况下必须要将上一次缓冲区里面的内容清空
要清空缓冲区有如下两种方式
方式一:
getchar(); //直接拿走内容
(getchar();从终端接收一个字符)
方式二:
fflush(stdin);//刷新输入流 - 在取款函数中还要用一个for循环来判断用户输入的取款金额是否超过了本金,如果超过则重新输入
更改密码
这个函数的作用是更改账户密码,首次输入新密码后,须再次输入相同密码才能设置成功,可用一个for循环来实现。
查询余额
只要用一条语句来输出余额即可
退出
使用这一条语句即可实现这一功能exit(EXIT_SUCCESS);
在一次操作结束后,需要询问用户是否继续,所以在switch语句之后要用一个for循环来实现
此时这个for循环中出现了getchar();
所以意味着在这个循环里也要在再次输入之前将上一次缓冲区里面的内容清空
然而在第一个if语句中,如果输入的为y,则跳出for循环,但是用户选择y就是要继续进行操作,那跳出了这个for循环又要怎么重新弹出菜单界面进行再次操作呢?
所以,再次运用for循环,将switch语句和目的是选择是否继续的for循环全部包含在一个新的for循环里,并且放在输入密码的for循环下面,从而达到目的;
新的for循环: for(;1 < 2;){}
至此,这个demo就完成了
反思
- 对定义变量的能力还不够好
- 还没有熟练掌握何时需要清空缓冲区
- 在之前重复引用函数造成了bug。即
qukuan();
printf("%d",qukuan()); - 还有重复声明函数出现bug,即
int qukuan():
(以上两点皆是因为对于函数的运用还不熟练)
收获
- 慢慢学会如何去写代码
- 在写这个demo的过程中也学到了新知识,也就是实践兼学习。
- 学会了不懂就多问,不管是问其他人还是百度,都要及时解决疑惑。