#include<stdlib.h>
#include <stdio.h>
void main()
{
long int a,b,c,d,e,f,g,k,i,m,n,o,p,h,x,y,v;
x=62170042; //x是银行卡账号62170042(8位数)
y=00000000; //y:身份证号(8位数)
n=0;h=5000; //h是银行账户余额,原本余额为5000
k=111111; //默认银行卡密码111111(6位数)
key: //做标记,程序开始执行,验证密码是否正确
printf("\t\t\t 欢迎使用!\n\n");
printf("插入银行卡之后,输入密码,若三次密码输入错误,将终止程序:\n");
scanf("%ld",&i);
if(k==i) //此时的i指的是用户输入的银行卡密码,密码输入正确(k=i)才能有后续操作
{
menu: //做标记,选择操作继续执行
printf("密码正确,请输入所选择的操作类型:\n");
printf("请在0-4进行选择:\n");
printf(" 1:转账\n\t 2:查询\n\t 3:取款\n\t 4:修改密码\n\t 0:退卡\n\t");
scanf("%ld",&a);
switch(a)
{
case 1: printf("请输入转账账号:\n");
scanf("%d",&o); //o是指银行卡账号
printf("请输入你需要转账的金额:\n"); //p:转账金额
scanf("%d",&p);
printf("请输入你选择的操作类型:\n");
printf("请输入0或1进行选择:\n");
printf(" 1:确认\n\t 0:返回上一层\n\t");
h=5000-p; //h:账户余额
scanf("%ld",&b);
switch(b)
{
case 1:
if(p<h)
printf("\n转账%d元成功!\n\n",p);
else
printf("转账金额大于存款\n");
goto menu;break;
case 0:goto menu;break;
default :printf("\n没有设定此种操作!\n\n");goto menu;
}break;
select: //做标记,查询
case 2:printf("请输入你选择的操作类型:\n");
printf("在0-2进行选择:\n");
printf(" 1:查询余额\n\t 0:返回上一层\n\t");
scanf("%ld",&c);
switch(c) //查询功能
{
case 1:
printf("账单如下: \n");
printf("姓名:张三 \n"); //用户姓名为张三
printf("\n银行卡账号: %1d \n\n",x); //银行卡账号为62170042
printf("\n此时此刻银行卡余额为: %5d元 \n\n",h);
goto select;break;
case 0:goto menu;
default:printf("\n此操作无效!\n\n");goto select;
}
break;
output: // 做标记,取款操作
case 3:printf("请输入你选择的操作类型:\n");
printf("请输入0-5进行选择:\n");
printf(" 1:100元\n\t 2:500元\n\t 3:1000元\n\t 4:2000元\n\t 5:输入金额\n\t 0:返回上一层\n\t");
scanf("%ld",&d);
switch(d) //选择取款金额
{
case 0:goto menu;break;
case 1:h-=100; printf("\n取款100成功!\n\n");goto check;break;
case 2:h-=500; printf("\n取款500成功!\n\n");goto check;break;
case 3:h-=1000;printf("\n取款1000成功!\n\n");goto check;break;
case 4:h-=2000;printf("\n取款2000成功!\n\n");goto check;break;
case 5:
printf("输入取款金额为100的倍数,单次金额最大为2000元: \n");
scanf("%ld",&f);
while(f%100!=0)
{
printf("\n输入取款金额应为100的倍数,请重新输入\n\n");
scanf("%ld",&f);
break;
}
while(f<=2000)
{
h-=f;
printf("\n取款成功!\n\n");break;
}
goto check;break;
default:printf("\n此操作无效!\n\n");goto output;
}
modity: //做标记,修改密码
case 4: printf("请输入你选择的操作类型:\n");
printf("请在0或1中进行选择:\n");
printf(" 1:修改密码\n\t 0:返回上一层\n\t");
scanf("%ld",&m);
switch(m)
{
case 1:
printf("请输入原始密码:\n");//如果输入的密码正确,则验证成功,可以进行修改密码的操作
scanf("%ld",&g);
if(k==g)
{
printf("请输入新密码:\n");
scanf("%ld",&g);
k=g;
printf("\n密码修改成功!\n\n");
}
else
{
printf("密码输入错误!\n");
printf("请输入身份证号码进行验证:\n");
scanf("%ld",&v);
if(y==v)
{
printf("\n身份验证成功!\n\n");
printf("请输入新密码: \n");
scanf("%ld",&g);
printf("\n密码修改成功!\n\n");goto menu;
}
else
{
printf("\n验证失败!无法修改密码!\n\n");
goto modity;
}
goto menu;break;
}
goto menu;break;
case 0: goto menu;break;
default:printf("\n密码无法修改!\n\n");
goto modity; }break;
case 5: printf("\n退卡成功!\n\n");
goto key;break;
default: printf("\退卡成功!\n\n");goto key;
}
check: //凭条
printf("请输入你选择的操作编号:\n");
printf("请输入0-3进行选择:\n");
printf(" 1:显示余额\n\t 2:打印凭条\n\t 3:继续\n\t 0:退卡\n\t");
scanf("%ld",&e);
switch(e)
{
case 1:printf("\n你的余额为:%d元!\n\n",h); goto menu;break;
case 2:printf("\n谢谢使用!您的凭条打印如下所示:!\n\n");
printf("姓名:张三 \n"); //用户姓名为张三
printf("银行卡账号:123456789\n"); //银行卡账号为123456789
printf("\n银行卡余额为: %5d元 \n\n",h);
goto menu;break;
case 3:goto output;break;
case 0:goto key;
default:printf("\n无效操作,请重新选择操作!\n\n");goto check;
}
}
else
{
printf("输入原密码错误,请重新输入:\n");
n++; //n:输入密码错误,三次错误密码之后程序将无法执行
if(n<=2)
goto key;
}
scanf("%ld",&c);
}
思路:
在我的ATM程序设计中,设计所存入的金额原始值(h)为5000元;在程序设计中,原始金额可以根据用户需求自行更改;
用户姓名:张三;
身份证号码:00000000
银行卡账号:123456789
插入银行卡之后,输入密码,密码初始值设为111111(可以进行更改);
密码若连续输入错误三次,程序退出;
取款金额应该为100的整数倍,且取款金额应该少于卡内余额;
单次取款金额应该小于等于2000元;
修改密码时,如果忘记原密码,可以使用身份证号码进行身份验证,验证成功任然可以进行密码修改;
运行结果展示;