C语言课程设计ATM机模拟操作附源码.docx
- 文档编号:27641713
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:25
- 大小:146.84KB
C语言课程设计ATM机模拟操作附源码.docx
《C语言课程设计ATM机模拟操作附源码.docx》由会员分享,可在线阅读,更多相关《C语言课程设计ATM机模拟操作附源码.docx(25页珍藏版)》请在冰豆网上搜索。
C语言课程设计ATM机模拟操作附源码
C语言-ATM机模拟操作
程序实现功能点:
a.查询:
查询帐户的存款余额。
按任意键返回主菜单;
b.取款:
输入100、500、1000、2000、5000、其它金额为取款金额,取款金额不超过帐户余额,操作后帐户余额应相应减少,之后可返回主菜单;
c.存款:
输入100、500、1000、2000、5000、其它金额为存款金额,存款金额不超过20000元,操作后帐户余额应相应增加。
之后可返回主菜单;
d.转帐:
输入一个帐户号,程序判断与文件信息是否相符,储户确认无误后,再输入100、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过帐户余额,操作后帐户余额应相应减少。
之后可返回主菜单;
e.修改密码:
连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。
之后可返回主菜单;
f.退出:
退出系统;
g.帮助:
增加趣味性;
h.存款时,可正可负,正表示存款,负表示取款;
i.帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;(在目录下创建这两个文件)
j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用;
k.储户一天内输错密码的次数不能超过3次,否则无法进入系统;
l.有效避免输入存款金额、取款金额为负数等异常情况的出现。
较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。
是否超过余额,是否不符合格式,是否为冲突操作。
(2)程序运行截图及说明(每图限50到100字);
●进入程序,menu1可选择登录、注册功能。
●选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。
若登录失败,则重新选择。
●选择注册,输入账号密码,写入文件中。
●进入menu2,有五大功能选择,输入对应的序列号进入。
●余额查询功能输出账号所对应的余额。
●取款功能,需要安装要求取出格式化的金额。
●存款功能,选择金额,若超过存款,自动报错。
存储成功后,在屏幕上显示余额并可在txt中看到对应数目的增加。
●修改密码功能,输入当前密码,输入新密码,并进行确认。
即修改成功。
●转账功能,输入对方卡号,核程序核对卡号是否存在,选择金额转账,对应存款的减少会反映在屏幕的余额上。
●退出功能,任意键退出程序。
●帮助功能,介绍了本程序的相关信息。
(3)采用的主要技术(限150到200字);
答:
主要采用模块化管理代码。
使用结构体对文本信息进行操作、运用文件操作相关函数如fwrite()、fread()、fgets()、fputs()、fgetc()、fputc()、fopen()、fclose()......
并使用指针操作数值。
附:
程序代码
#include
#include
#include
#include
#include
#defineN3
voidenterzhanghao();//ATM账号输入函数
voidinputmima();//密码输入函数
voidmenu();//操作界面
voidWithdraw();//取款函数
voiddaly();//延时函数
voidyuer();//余额查询函数
voidDesposit();//存款函数
intquit();//退出界面函数
voidchange();//密码修改
voidread();//文件读取函数
voidwrite();//文件写入函数
voidwrite2(floath);//流水账函数
voidtran_account();//转账函数
voidenter();//登录函数
voidflesh();//注册函数
voidhelp();//帮助
typedefstruct
{
intnum;
intpassword;
doubleaccounte;
}atm;
atmATM[N]={{10001,111111,10000},{10002,222222,20000},{10003,333333,30000}};
typedefstruct
{
intyear;
intmonth;
intday;
}riqi;
intk;
intmain()
{
enterzhanghao();
}
//ATM账号输入函数
voidenterzhanghao()
{
read();
printf("\t\t\t\t\t**************************************\n");
printf("\t\t\t\t\t->欢迎使用ATM机模拟操作的程序<-\n");
printf("\t\t\t\t\t->1、登录<-\n");
printf("\t\t\t\t\t->2、注册<-\n");
printf("\t\t\t\t\t**************************************\n");
printf("请输入对应序号:
");
intk;
scanf("%d",&k);
switch(k){
case1:
enter();break;
case2:
flesh();break;
}
}
voidenter()
{
system("cls");
intuser;
printf("请输入账号:
");
scanf("%d",&user);
if(user==0)
{
printf("\t\t\t\t\t*账号错误*\t\t\t\t\t\n");
enterzhanghao();
}
elseif(user!
=(ATM[k].num))
{
for(k=1;k { if(user==(ATM[k].num)) inputmima(); } system("cls"); printf("\t\t\t\t\t*账户不存在,请从新输入*\t\t\t\t\t\n"); enterzhanghao(); } else inputmima(); } voidflesh() { system("cls"); printf("\t\t\t\t\t请输入账号: "); scanf("%f",&ATM[k].num); printf("\t\t\t\t\t请输入密码: "); scanf("%f",&ATM[k].password); write(); } //密码输入函数 voidinputmima() { intcode; inttemp=3; read(); system("cls"); printf("\t\t\t\t\t*请输入密码*\t\t\t\t\n"); scanf("%d",&code); while(code! =ATM[k].password) { temp--; system("cls"); printf("\t\t\t\t\t*密码错误,请重新输入*\t\t\t\t\n"); printf("\t\t\t\t\t*您还有: "); printf("%d",temp); printf("次机会*\n"); scanf("%d",&code); if(temp==1) { system("cls"); printf("\t\t\t\t\t*您已经3次输入密码错误*\t\t\t\t\n"); printf("\t\t\t\t\t*系统将退出操作*\t\t\t\t\n"); daly(); enterzhanghao(); } } menu(); } //操作界面 voidmenu() { system("cls"); inth=1,x; while(h) { printf("\t\t\t\t\t----------------------\n"); printf("\n"); printf("\t\t\t\t\t1、\t查询余额\n"); printf("\t\t\t\t\t2、\t取款\n"); printf("\t\t\t\t\t3、\t存款\n"); printf("\t\t\t\t\t4、\t修改密码\n"); printf("\t\t\t\t\t5、\t转账\n"); printf("\t\t\t\t\t6、\t退出登录\n"); printf("\t\t\t\t\t7、\t帮助\n"); printf("\n"); printf("\t\t\t\t\t----------------------\n\n"); scanf("%d",&x); switch(x) { case1: yuer();break; case2: Withdraw();break; case3: Desposit();break; case4: change();break; case5: tran_account();break; case6: quit();h=quit();break; case7: help();break; } } } //取款函数 voidWithdraw() { system("cls"); floati; inty; printf("\t\t\t\t\t请输入你要取款的金额: \n"); printf("\t\t\t\t\t----------------------\n"); printf("\n"); printf("\t\t\t\t\t1、\t100\n"); printf("\t\t\t\t\t2、\t200\n"); printf("\t\t\t\t\t3、\t500\n"); printf("\t\t\t\t\t4、\t1000\n"); printf("\t\t\t\t\t5、\t2000\n"); printf("\t\t\t\t\t6、\t其他金额\n"); printf("\n"); printf("\t\t\t\t\t----------------------\n"); printf("\t\t\t\t\t\t\t请输入对应序列号: \n"); scanf("%d",&y); system("cls"); switch(y) { case1: i=100;break; case2: i=200;break; case3: i=500;break; case4: i=1000;break; case5: i=2000;break; case6: scanf("%f",&i);break; default: printf("\t\t\t\t\t請重新輸入"); Withdraw(); break; } if(i<=ATM[k].accounte&&i! =0) { ATM[k].accounte=ATM[k].accounte-i; printf("\t\t\t\t\t取款成功! 你的余额为: "); printf("%f",ATM[k].accounte); i=i*(-1); write2(i); } else printf("\t\t\t\t\t余额不足! "); write(); } //延时函数 voiddaly() { longinth; intk; for(h=600000;h>0;h--) { for(k=300;k>0;k--); } } //余额查询函数 voidyuer() { system("cls"); printf("\t\t\t\t\t账号%4d,余额: %.2lf\n\n\n\n\n",ATM[k].num,ATM[k].accounte); } //存款函数 voidDesposit() { system("cls"); inti; printf("\t\t\t\t\t请将钞票整齐放入! ! \n\n"); printf("\t\t\t\t\t请输入你要存的金额: "); scanf("%d",&i); if(i%100==0) printf("\t\t\t\t\t存款成功! "); else { printf("\t\t\t\t\t数额必须是100的整数倍! 请重新放入! ! "); daly(); Desposit(); } ATM[k].accounte=i+ATM[k].accounte; printf("%f",ATM[k].accounte); write(); write2(i); } //退出函数 intquit() { system("cls"); inti; printf("\t\t\t\t\t谢谢你的使用! ! ! \n\n"); i=0; returni; } //密码修改 voidchange() { daly(); system("cls"); intpassword1,password2,password3; printf("\t\t\t\t\t请输入旧密码: "); scanf("%d",&password1); printf("\n"); if(password1==ATM[k].password) { loop: printf("\t\t\t\t\t请输入新的密码: "); scanf("%d",&password2); printf("\n"); printf("\t\t\t\t\t请再次输入新的密码: "); scanf("%d",&password3); if(password2==password3) { ATM[k].password=password2; printf("\t\t\t\t\t\n密码修改成功! \n"); } else { printf("\t\t\t\t\t\n密码不一致! \n"); printf("\t\t\t\t\t请重新输入! ! \n"); gotoloop; } } else { printf("\t\t\t\t\t输入错误\n"); change(); } write(); } //文件读取函数 voidread() { inti; FILE*fp; fp=fopen("accounts.txt","r"); if(fp==NULL) { printf("\t\t\t\t\t打开文件失败\n"); return; } for(i=0;i { fscanf(fp,"%d",&(ATM[i].num)); fscanf(fp,"%d",&(ATM[i].password)); fscanf(fp,"%lf\n",&(ATM[i].accounte)); } fclose(fp); } //accounts文件写入函数 voidwrite() { inti; FILE*fp; fp=fopen("accounts.txt","w"); if(fp==NULL) { printf("\t\t\t\t\t打开文件失败\n"); return; } for(i=0;i { fprintf(fp,"%-8d",ATM[i].num); fprintf(fp,"%-8d",ATM[i].password); fprintf(fp,"%lf\n",ATM[i].accounte); } fclose(fp); } //records文件写入函数 voidwrite2(floath) { time_tt; structtm*lt; time(&t);//获取Unix时间戳。 lt=localtime(&t);//转为时间结构。 FILE*fp; fp=fopen("records.txt","a"); if(fp==NULL) { printf("\t\t\t\t\t打开文件失败\n"); return; } else { fprintf(fp,"%-5d",lt->tm_year+1900); fprintf(fp,"%-3d",lt->tm_mon); fprintf(fp,"%-3d",lt->tm_mday); fprintf(fp,"%-5lf\n",h); } fclose(fp); } //转账函数 voidtran_account() { intother_num[10]; inti,c,q,tran;//c用来判断转账是否继续,q用来判断用户行为,tran用来存储转账金额 system("CLS"); printf("\n\t\t\t\t\t\t\t\t0.返回菜单"); printf("\n\n\n\n\n\n\t\t\t请输要对方的账号: "); scanf("%d",other_num[10]);//输入对方账号 if(other_num[10]==ATM[k].num)//判断是否为自身账号 { system("CLS"); printf("\n\n\n\n\n\n\n\n\t\t对不起,不能给自己转账,请重新输入账号! \n"); printf("\n\n\n按任意键返回! "); _getch(); system("CLS"); tran_account();//递归调用 } else while (1) { for(i=0;i { if(other_num[10]==ATM[i].num)//匹配用户 { while (1) { system("CLS"); printf("\t\t\t请输入对方账号: %s",ATM[i].num);//显示对方信息 printf("\n\n\n\n\n\t\t0.返回菜单\t\t\t9.确认"); scanf("%d",&c);//输入9确认 if(c=='9') { system("CLS"); do { printf("\n\t\t\t\t\t\t\t\t0.返回菜单"); printf("\n\n\n\n\n\n\t\t请输入转账金额(整百数): "); scanf("%d",&q);getchar(); if(q)//q为非0时进入内层条件语句 { tran=q; if(tran>=100&&tran%100==0)//判断是否为整百//数并且大于100的数 { if(tran<=ATM[k].accounte)//取款数是否不超过余额 { if(tran<=3000)//判断是否超过3000 { system("CLS"); ATM[k].accounte-=tran; ATM[k].accounte+=tran; menu();//调用save_info,存储信息 printf("\n\n\n\n\n\n\t\t\t交易成功! \n"); printf("\n\n\n\n\n\t\t0.返回菜单\t\t\t9.继续转账"); c=_getch(); if(c=='9')//输入9就行转账 { system("CLS"); } else if(c=='0')//c为0返回菜单 { system("CLS"); menu(); } else { printf("输入错误,请重新输入! \n"); system("CLS"); } } else { system("CLS"); printf("\n\n\n\n\n\n\t\t对不起,一次最多能转账3000元,请重新输入! "); printf("\n\n\n\n\n按任意键返回! \n"); _getch(); system("CLS"); } } else { system("CLS"); printf("\n\n\n\n\n\n\t\t\t您的余额不足,请重新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 ATM 模拟 操作 源码
![提示](https://static.bdocx.com/images/bang_tan.gif)