用函数构建简单的ATM
目的
- 能够灵活构造函数来使得我们的c语言程序更加简便,提高程序的可读性
- 创造函数能够更有利于我们函数的移植,一个函数即可以在;一个程序里面重复使用,也可以移到其它程序当中使用
技术
- 创立单独的代码块,从而编一个独立的函数,格式为:返回值 函数名称(参数,参数){},返回值可以是空的
- 函数的使用,要先声明后实现,因为c语言程序是自上而下运行的
- Main函数里面是代码的逻辑结构,搭框架 不做具体的事情 具体的事情给每一个函数去实现
- 函数的定义不可以嵌套,但是调用可以嵌套
每个技术如何使用
比如在ATM中我们取完钱或者存款完毕的时候会问到我们是否继续,这时候我们就要编一个独立的函数,大括号里面的就是代码块,代码引用
bool iscontinue(){
printf("是否继续,(Y/N):");
getchar();
char ch=getchar();
if(ch=='N'){
return false;
}else{
return true;
}
}
这个函数如果要使用,就必须在main函数前面声明一下,并且我们的这个函数时可以在其它函数中调用,比如就可以在我们写的取款的函数里面调用
代码引用
void withdraw(){
int outmoney=0;
while(1){
printf("请输入取款金额:");
scanf("%d",&outmoney);
if(outmoney>0&&outmoney<=totalmoney){
totalmoney-=outmoney;
printf("取款成功,剩余%d元\n",totalmoney);
bool ch=iscontinue();
if(ch==false){
return ;
}
}else{
printf("余额不足");
}
}
}
实际使用
我们取款首先要有一个欢迎界面,而main函数里面主要是代码的逻辑结构
从而要写一个单独的函数。
代码引用
void welcome(){
printf("*************\n");
printf("欢迎光临\n");
printf("*************\n");
}
然后我们开始要输入密码,对密码的输入次数也有限制
代码引用
bool loginATM() {
int password;
int wrongtime=0;
while(1){
printf("请输入密码:");
scanf("%d",&password);
if(password==initialpassword){
return true;}
else {wrongtime++;
if(wrongtime==4){
exit(EXIT_FAILURE);
}else{printf("输入密码错误,已经错误%d次",wrongtime);
}
}
}
}
接下来就是欢迎界面和选择进行的操作,就是两个函数
函数引用
void showmenu(){
printf("1.开始取款\n");
printf("2.开始存款\n");
printf("3.设置密码\n");
printf("4.退出\n");
printf("*************");
}
char getchoice(void){
char ch[20]={};
while(1){
scanf("%s",ch);
int count=strlen(ch);
if(count!=1){
printf("输入不合法");
}else{
char dh=ch[0];
if(dh=='1'||dh=='2'||dh=='3'||dh=='4'){
return dh;
}else{
printf("输入不合法");
}
}
}
}
然后就是取款操作,在里面要嵌套一个是否继续进行操作的函数
代码引用
void withdraw(){
int outmoney=0;
while(1){
printf("请输入取款金额:");
scanf("%d",&outmoney);
if(outmoney>0&&outmoney<=totalmoney){
totalmoney-=outmoney;
printf("取款成功,剩余%d元\n",totalmoney);
bool ch=iscontinue();
if(ch==false){
return ;
}
}else{
printf("余额不足");
}
}
}
bool iscontinue(){
printf("是否继续,(Y/N):");
getchar();
char ch=getchar();
if(ch=='N'){
return false;
}else{
return true;
}
}
void deposit(void){
int inputmoney=0;
while(1){
printf("请输入存款金额:");
scanf("%d",&inputmoney);
totalmoney+=inputmoney;
printf("存款成功,余额为:%d\n",totalmoney);
bool ch=iscontinue();
if(ch==false){
return;}
}
}
bool iscontinue(){
printf("是否继续,(Y/N):");
getchar();
char ch=getchar();
if(ch=='N'){
return false;
}else{
return true;
}
}
要注意到这里面的继续函数是bool类型的,而且要用getchar()去掉enter键字符,然后才能选择是否进行操作。
后面的两个操作就是存款和更改密码了,都是要用函数表示的。
函数引用
void deposit(void){
int inputmoney=0;
while(1){
printf("请输入存款金额:");
scanf("%d",&inputmoney);
totalmoney+=inputmoney;
printf("存款成功,余额为:%d\n",totalmoney);
bool ch=iscontinue();
if(ch==false){
return;}
}
}
void setpassword(void){
int newpwd1;
int newpwd2;
while(1){
bool result=loginATM();
printf("请输入新密码:");
scanf("%d",&newpwd1);
printf("请确认密码:");
scanf("%d",&newpwd2);
if(newpwd1==newpwd2){
printf("设置密码成功!\n");
return;
}else{
printf("两次密码不一致");
}
}
}
使用完毕后我们都会有一个退出界面,所以有一个退出界面的函数。
函数引用
void exitATM(int status){
printf("********************\n");
printf(" 感谢你的使用 ");
printf("********************\n");
exit(status);
注意这些函数都是要在main函数之前声明的,而在main函数里面使用这些函数,main函数里面的引用是这样的。
代码引用
main{
welcome();
bool result=loginATM();
if(result==false){
exitATM(EXIT_FAILURE);
}
while(1){
showmenu();
char choice=getchoice();
switch(choice){
case'1':
printf("开始取款\n");
withdraw();
break;
case'2':
printf("开始存款\n");
deposit();
break;
case'3':
printf("更改密码\n");
setpassword();
break;
defalut:
exit(EXIT_SUCCESS);
break;
}
}
使用我们函数构造ATM就是这个样子