<span style="font-size:18px;">/*文件名:test.c
*完成日期:2016.4.4
*目的:模拟ATM柜员机的操作
*初始账号及密码都是123456
*/
#include<stdio.h>
void chaxun(int a3) //查询账户余额函数
{
int b; //使用临时变量b,亦可修改原始数据a3
b=a3; //给存放临时金额的变量赋值
printf("您的账户余额为:%d\n",b); //输出当前账户余额
}
int qukuan(int a3) //取款函数
{
int a,b; //定义取款数据及余额的临时变量
printf("请输入您提取的金额:\n");
scanf("%d",&a); //输入取款金额
b=a3-a; //计算余额,a是取款后剩余的金额
if(b<0) //判断金额是否小于0,若是则提示不能取款
printf("您的余额不足\n");
else //a>0,即取款后卡里还有剩余
{
printf("请收好你的%d元现金\n",a);//取款成功
a3=a3-a; //取款后更新账户余额
}
return a3; //返回余额
}
int xiugai(int a2) //修改账户密码
{
int b,c=1,d,e=1;
while(e) //while循环,判断密码输入的密码是否正确
{
printf("请输入您的旧密码:");
scanf("%d",&d); //输入旧密码
if(d==a2)
e=0; //密码正确,跳出循环
else
{
e=1; //密码有误,循环继续
printf("你输入的密码有错误,请重新输入:");
}
}
while(c)
{
printf("请输入您的六位数新密码\n");
scanf("%d",&a2);
printf("请确认您的六位数新密码\n");
scanf("%d",&b);
if(a2==b)
{
if(b>100000&&b<999999&&b/(b/100000)!=111111) //判断输入的密码是否在限制的范围之内
{
c=0; //条件正确时,跳出循环
printf("密码修改成功\n");
}
else //if语句的条件不成立,输入的密码超出保存的范围
{
printf("您输入的密码不符合要求,请重新输入\n");
c=1; //c=1,修改不成功,循环继续
}
}
else //两次输入的密码不一致
{
c=1; //循环继续,重新开始第二个while函数
printf("您两次输入的密码不一致,请重新输入:\n");
}
}
return a2; //结束while函数,返回修改后的密码
}
int cunkuan(int a3) //取款函数
{
int k;
printf("请输入您要存入的金额\n");
scanf("%d",&k); //输入存入的金额
if(k<0)
{
printf("对不起,您输入的金额数值有误\n");
}
else
{
printf("\n您好,您已经存进了%d元\n",k); //存进k元
a3=a3+k; //更新余额值
}
return a3; //返回更新后的金额余额
}
int quka()
{
printf("\n提醒您\n");
printf("请收好您的卡,\n谢谢\n再见\n");
}
int main()
{
int b=1,c,j,k; //临时变量
int a1=123456,a2=123456,a3=1000; //a1:账户,a2:密码,a3:金额
printf("欢迎使用自动柜员机: \n\n\n");
while (b==1) //一直循环,直到用户输入退出操作,即,b=1时,进行循环,b不等于1时跳出循环
{
printf("请输入您的账号:\n");
scanf("%d",&j); //输入账号
printf("请输入您的密码:\n");
scanf("%d",&k); //输入密码
if (j==a1&&k==a2) //判断账号密码是否正确,若正确
{
b=0; //正确,账户允许操作标志0
printf("您的账户余额为:%d\n",a3); //输出当前账户金额
}
else
{
b=1; //账号密码错误,不允许操作权限1
printf("对不起,您的账号或密码输入错误,请重新输入\n");
}
}
do //输出菜单,等待用户按键操作
{
printf("\n请输入您要操作的服务项目:\n");
printf("1.查询余额\n");
printf("2.取款\n");
printf("3.修改密码\n");
printf("4.存款\n");
printf("5.取卡\n");
scanf("%d",&c); //按键输入选择哪项操作
switch (c) //对用户的按键操作做出相应的程序调用
{
case 1: chaxun(a3);break;
case 2: a3=qukuan(a3);break;
case 3: a2=xiugai(a2);break;
case 4: a3=cunkuan(a3);break;
case 5: quka();break;
}
}
while (c!=4); //循环条件,c不等于4
//先执行循环体中语句,再判断while语句中的条件是否为真,为真则执行
return 0;
}
</span>
<span style="font-size:18px;">后记:第7—12行实现了银行卡的查询余额功能,直接在主函数中调用(即输入参数)即可。</span>
<span style="font-size:18px;"> 第13—27行实现了取款功能;等待用户输入金额,并对取款金额与余额进行计算,判断是否满足取款条件。如果满足则取款,并计算取款后余额,更新余额值;否则提示余额不足。</span>
<span style="font-size:18px;"> 第28—69行实现了修改密码的功能。首先,检测旧密码的正确性,其次,检查两次输入的密码是否一致及是否在保存的范围内。</span>
<span style="font-size:18px;"> 第70—85行实现的是银行卡的存款功能,直接输入存款金额,判断是否为负,若否则更新账户余额并返回。</span>
<span style="font-size:18px;"> 第86—90行实现银行卡的取卡函数,直接输入参数调用函数即可。</span>
<span style="font-size:18px;"> 程序第91—135行是程序的主函数,通过两个循环实现了该ATM模拟程序,分成两个部分:</span>
<span style="font-size:18px;"> (1)对当前账户的正确性进行判断,使用的是if语句,并嵌套在while...do...函数里。</span>
<span style="font-size:18px;"> (2)等待该用户根据菜单操作并进行相应的程序调用,使用while..do...函数,判断账户是否正确,并进入菜单;根据菜单使用switch语句进行函数的调用。</span>