概述
一、实验目的及要求
1、学会函数的嵌套调用、函数的递归调用的用法。
2、学会局部变量、全局变量的用法。
二、实验内容
1、学会C-FREE5环境中利用嵌套调用、函数的递归调用解决程序中的问题。
三、实验指导
使用ATM的流程包含如下几个部分:
- 用户插卡即显示待机界面,提示用户插入磁卡;
- 密码验证即用户插入磁卡后,提示用户输入密码并进行密码的验证。若用户输入密码正确,则显示服务信息。反之,则提示用户重复输入。当用户的输入超过3次时,提示吞卡。
- 功能选择提示即显示服务的信息;
- 选择功能即用户按照显示的服务信息进行选择,从而完成不同的操作;
- 查余额即用户可以完成查询余额操作;
- 取款即用户可以完成取款操作;
- 快速取款即用户可以完成快速取款操作;
- 退卡即用户可以退出服务界面;
为了提高程序的可维护性,使用模块化方法完成模拟ATM工作流程程序的设计。针对以上8个部分分别写出8个函数,main()函数中按工作过程调用相应的函数完成操作。
1. 待机函数welcome()
当没有用户使用ATM时,ATM显示待机界面。待机界面的功能是提醒用户插入磁卡。本模拟系统中,用户按下任意键来模拟磁卡的插入,即只要接收到键盘上输入的一个字符,就表示插入了磁卡。使用getchar()函数可以读入键盘上的输入字符。待机函数没有返回值。
待机函数对应的代码:
void welcome()
{
printf("-----------ATM取款机----------n");
printf("请插入磁卡(按任意键完成)n");
getchar();
}
2. 验证密码函数pass()
用户输入密码的次数要小于等于3次。由于要多次进行密码的验证,因此需要使用循环结构实现。循环变量n即为用户输入的次数。当用户第一次输入密码,即n等于1时,界面上应显示的信息是“请输入密码(最多可输入3次)”,而当用户第2次和第3次输入时,表示用户前面输入的密码不正确,所以界面上应显示的信息为“密码错误请重新输入!”。每次显示完提示信息后,都要接收用户输入的密码并进行密码的匹配。若密码匹配成功,则退出循环即可。循环退出后,可以根据用户的输入次数n来判断执行什么样的操作。若n>3,则提示吞卡信息,并结束整个程序。
验证密码函数对应的代码:
void pass()
{
int n,p;
for(n=1;n<=3;n++){
printf("请输入密码:");
scanf("%d",&p);
if(p=123456){
printf("密码输入正确n");
break;
}
else{
printf("密码输入错误,请重新输入:");
}
}
if(n>3){
printf("密码错误超过三次,卡被吞,联系前台n");
exit(0);
}
}
3. 显示服务信息函数 service()
当密码匹配成功后,表示用户已经通过身份验证,此时显示服务信息。即向屏幕输出提示信息即可。信息的内容参考一般的ATM服务界面,在此将其进行简化,只保留查询余额、取款、快速取款和退出等四个功能。显示完毕,需要用户根据服务信息进行选择。用户在键盘上输入相应的数字,service()函数返回用户的输入,以便根据输入执行下一步的操作。
显示服务信息函数对应的代码:
int service()
{
int select;
printf("查询余额*************1n");
printf("取款操作*************2n");
printf("快速取款*************3n");
printf("退出系统*************0n");
printf("请输入你的选择:n");
scanf("%d",&select);
return select;
}
4. 查询余额函数selectmoney()
从前面的分析可以看出有多个函数会访问账户余额信息,因此将账户余额total定义为全局变量。在本函数中直接返回该全局变量的值即可。
查询余额函数对应的代码:
void selectmoney(int a)
{
}
由于是使用的是全局变量,因此函数也可以不指定参数,写成以下的形式:
void selectmoney()//查询余额
{
printf("您的余额为%lf元n",total);
}
当selectmoney()函数没有参数时,对应的函数调用中也要把参数去掉。以上两种函数的区别是:前者在函数调用时把全局变量total作为实参使用,将账户余额传递给了形式参数a,然后使用形式参数做处理,函数体中显示的是a的数值;后者直接在函数体中访问并显示total的值。
5. 取款函数getmoney()
用户取款时,需要首先提示用户输入取款的金额。系统接收到用户的输入后,要将该输入与用户账户余额进行比较,只有当账户余额大于用户提款金额时,才能够正确执行提款操作,即修改账户余额信息,提示用户取走现金,同时询问用户是否需要打印凭证。若用户的余额不足,则进行相关提示。
取款函数对应的代码如下:
void getmoney()
{
float m;
printf("请输入取款金额:n");
scanf("%f",&m);
total=total-m;
if(total>=0){
printf("卡内所剩余额为%lfn",total);
}
else{
printf("余额不足n");
}
}
6. 快速取款函数quickgetmoney()
快速取款函数的思想和取款函数类似,不同的是取款函数中,取款的金额由用户在键盘上输入,而在快速取款函数中,该金额以选项的形式体现。执行该函数时,首先需要显示不同输入对应的金额,然后用户在键盘上输入选项值,该值有4种有效输入,分别是“1”,“2”,“3”,“4”,根据不同的选项来为要取的金额number赋值。所以,适合使用switch语句来实现。
快速取款函数的代码如下:
void quickgetmoney()//快速取款
{
int sel,num;
printf("请输入您的选择:");
printf("tt100.00(1)tt200.00(2)n");
printf("tttt500.00(3)tt1000.00(4)n");
scanf("%d",&sel);
switch(sel){
case 1:num=100.00;break;
case 2:num=200.00;break;
case 3:num=500.00;break;
case 4:num=1000.00;break;
}
printf("取走%d元n",num);
printf("卡内所剩余额为%lfn",total-num);
}
该函数中输出打印凭证判断部分的代码与取款函数不同。取款函数通过一个变量flag来实现该判断,当flag=1时,输出提款信息。而快速取款函数中将flag设置为字符型的变量。可以使用cin.get(flag)来从键盘上获取一个字符并赋给flag。由于字符有大小写之分,调用toupper()函数将其转换为大写字母后才进行判断。toupper(char a)函数的作用是将字符a转换为大写字母。
7. 退出函数exitatm()
退出函数的作用是提示用户取走磁卡,并结束程序。
退出函数的代码:
void exitatm()
{
printf("请取走您的磁卡,谢谢,欢迎下次光迎!n");
exit(0);
}
8. 选择服务函数selectservice()
service()函数提供了一个用户的选择值,系统要根据这个选择值去执行不同的操作。由于选择值存在多种取值,不同取值对应不同的函数调用,因此这是一个多路选择问题,适合使用switch语句来实现。switch语句的判断表达式即service语句的返回值。根据service函数的显示信息可知,该返回值有4中有效的取值,分别是“1”,“2”,“3”,“0”。
选择服务函数对应的代码:
void selectservice( int select )
{
switch(select){
case 1:selectmoney();
break;
case 2:getmoney();
break;
case 3:quickgetmoney();
break;
case 0:exitatm();
break;
default:printf("非法操作!");
}
}
9. 主函数
main()中要做的是顺次的去调用各个函数。用户通过密码验证后,要执行的操作可能不止一次,因此需要将服务信息显示函数和用户选择服务函数放在一个循环中。由于用户选择服务的次数不确定,因此该循环是一个无限循环,循环的条件永远成立。只有当用户选择了退出服务后,才能够关闭整个程序。
主函数的代码:
#include<stdio.h>
#include<string.h>
double total=1000;
void main()
{
int select;
welcome();
pass();
do{
select=service();
selectservice(select);
}while(1);
}
最后
以上就是无奈时光为你收集整理的用C语言实现ATM机的功能(初学者必备)的全部内容,希望文章能够帮你解决用C语言实现ATM机的功能(初学者必备)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复