C语言程序设计报告模拟ATM取款机

上传人:无*** 文档编号:89262662 上传时间:2022-05-12 格式:DOC 页数:29 大小:534.50KB
收藏 版权申诉 举报 下载
C语言程序设计报告模拟ATM取款机_第1页
第1页 / 共29页
C语言程序设计报告模拟ATM取款机_第2页
第2页 / 共29页
C语言程序设计报告模拟ATM取款机_第3页
第3页 / 共29页
资源描述:

《C语言程序设计报告模拟ATM取款机》由会员分享,可在线阅读,更多相关《C语言程序设计报告模拟ATM取款机(29页珍藏版)》请在装配图网上搜索。

1、.仲恺农业工程学院工程实训报告ATM取款机课程名称 C语言程序设计工程实训姓 名林少烈院系 计算机科学与工程学院专业班级计算机113班学 号201110214317指导教师王成仲恺农业工程学院教务处制. .目录1 需求分析12 系统总框图和功能模块说明12.1 系统总框图12.2 功能模块说明13 系统设计23.1 主要构造体23.2主要功能函数23.3 关键函数的流程图34 系统调试115 总结216 源程序清单236.1头文件236.2主程序236.3 解除被冻结用户406.4 用户注册41. .1需求分析所设计的取款机应具备以下功能:l 插入银行卡用账号输入的方式代替;l 密码的输入;l

2、 用户信息查询;l 用户余额查询;l 取款;l 转账;l 修改密码;l 退卡。2系统总框图和功能模块说明2.1系统总框图取款机输入用户账号输入账号密码查询用户信息查询账号余额转账取款修改密码退卡 信息读取 冻结账号图1 系统总框图2.2功能模块说明 输入用户账号模块:在运行时,完成用户账号的输入代替插卡; 输入账号密码模块:在输入账号之后,完成用户密码的输入;在修改密码的过程中,完成用户输入旧密码的功能; 信息读取功能模块:完成用户信息的读取; 冻结账号功能模块:当输入密码3次错误时,冻结用户账号: 查询用户信息模块:完成用户的信息查询不包括余额查询; 查询余额功能模块:完成用户余额的查询;

3、取款功能模块:完成取款功能模块: 转账功能模块:完成转职功能; 修改密码功能模块:完成用户修改密码功能; 退卡功能模块:完成退卡功能即:退出程序功能。3系统设计3.1 主要构造体用户账号、密码、余额struct User/用户数据char num20;/用户账号char name10;/char password7;/密码float balance;/余额;3.2主要功能函数void read_info();/用户信息读取void input_num(char * num);/输入账号void now_e*ist(char * num);/判断是否被冻结或不存在void e*isted(cha

4、r * num);void input_password(char * p_word,char * W);/输入密码void face();/界面显示void balance_refer();/余额查询void choose(int c);/菜单项选择择void draw_money();/取款void set_password();/修改密码void input_new_password(char * old_password);/设置新密码void tran_account();/转账void stamp();/打印单条void info_refer();/信息查询void out();/

5、退出程序void lock();/冻结账号void save_info();/存储信息3.3关键函数的流程图Ni+elsel=0;l=1;break;l=1i12i=0读取文件信息printf(It cannot open !);1!feof(fp)翻开文件intl=0,i=0;now_e*ited 函数流程图else调用input_pssword 函数s=1判断账号是否存在elses=0;i+ints=0,i;1i=0i12s=1;break;用户不存在,重新输入冻结账号判断密码是否正确e*ited 函数流程图input_password 流程图choose 函数流程图draw_money

6、函数流程图iint i=0;翻开文件关闭文件printf(It cannot open !);读取文件!feof(fp)input_new_password 函数流程图 读取文件数据函数流程图save_info 函数流程图lock 函数流程图i=0iUi+fclose(fp);randomi=0;int i;i=0i12i+产生随机数翻开文件进展写入printf(It cannot open !);4系统调试首先运行程序,系统提示输入账号。1当输入错误账号,系统提示:用户不存在,请从新输入。,2当输入错误的密码时,系统提示:密码有误,请重新输入。3当输入正确账号与密码时,进入主页面。4主界面5

7、在主界面选择数字1,进入查询余额界面,界面显示余额。按任意键返回。6在主页面选择数字2,进入取款界面,系统提示输入取款的金额,当输入不是整百数是,系统提示请输入正确的金额,请重新输入。8当输入负数时,系统提示:请输入正确的金额,请重新输入。9当输入超过卡里余额的数,系统会提示余额缺乏,请重新输入。210当输入超过3000的数时,系统会提示:对不起,一次最多能取3000元,请重新输入。11当输入正确的金额时,系统提示:交易成功,按0返回主菜单,按9继续取款。12在主菜单界面选择数字3,进入修改密码界面,首先系统会提示:请输入旧密码。13当输入就密码正确时,系统提示:请输入新密码6位数。14当输入

8、的新密码含有非数字时,系统提示:请输入正确的数字。15当输入的新密码缺乏六位时,系统提示:请输入六位的密码。16当两次输入的新密码不一样时,系统会提示:两次输入的密码不同,请重新输入。17当输入两次密码都正确时,系统提示:密码修改成功,请牢记新密码。18在主菜单界面选择数字4时,进入转账界面。系统提示:请输入对方的账号:19当输入的账号错误时,系统会提示:用户不存在,请重新输入。20当输入自己的账号时,系统会提示:不能给自己转账,请重新输入账号。21当输入正确的账号时,界面会显示对方的信息。按0返回菜单,按9确定转账。922当确定转账时,系统会提示:请输入转账金额。23当输入转账的金额超过30

9、00元时,系统会提示:对不起,一次转账不能超过3000元,请重新输入。24当输入正确的金额时,系统提示:交易成功。按0返回主菜单,按9继续转账。25在主菜单界面选择数字5,进入信息查询界面,界面将显示账号的信息。26在主界面选择数字0,进去取款界面,系统提示:感您的使用,请拿回卡。5总结在确认了程序设计主题之后,首先第一步是画了大概的流程图,因为ATM取款机是我们经常接触的一个机器,所以相对来说话流程图比拟容易。在画完流程图之后,就是进展代码的编写了,我采用自顶向下的方式来规划我的整个代码流程,首先是确定了大概需要哪些函数来实现所需的功能,在函数命名的时候,我并不是随便命名的,而是采用书上介绍

10、的方法,用英文来命名。在命名过程中,由于英语功底不好的我遇到了小小的麻烦有些单词不会拼,于是就用电子词典来解决这问题。刚开场我是把所有的自定义函数定义为void型函数。所有的函数申明写好之后就可以开场细化了,首先确定所需构造体,然后就是头文件的定义,最后确定了所有函数的编写顺序。由于这次程序设计是取款机,所有要用到文件的知识,但又没学过,所以只能先停顿代码的编写来学习文件的知识。通过了两天的学习,虽然只是略学了皮毛,但是勉强看着书可以来自己新建文件并不数据存入文件中。所有的准备工作完成后,真正的可以进展代码编写了,首先把所有的函数都编写出来容为空,然后根据从易到难的顺序逐个功能的编写。其顺序依

11、次是:input_num函数用户账号输入,input_password函数密码输入,lock函数冻结用户账号,read_info函数读取文件数据,now_e*it函数检查是账号是否存在且未被冻结,e*isted函数检查账号是否被冻结,face函数主菜单,choose函数功能选择,balance_refer函数余额查询,draw_money函数取款,set_password函数修改密码,input_new_password函数输入新密码,tran_account函数转账,info_refer函数查询信息,out函数退卡。在写input_password函数时,没方法实现密文的输出,所以研究了很久

12、,最后通过找资料和询问师兄才解决了这一难题,并从中学到了这一技巧。在写lock函数时,刚开场只是用空字符来覆盖原有的账号,但是在测试时发现这样冻结的方法行不通,因为这样子冻结的话虽然原账号没了,但是在输入账号时只要直接按Enter键就可以进入输入密码的程序,所以这又是一个难题。在晚上睡觉时突然想到了曾经在课外书上看到的产生随机数的函数rand函数,于是,第二天这个所谓的难题也解决了。所有的函数编写完毕,想到了既然冻结了账号,肯定需要一个程序来解除冻结了的账号,所以,自己又摸索了如何解决这一问题,最后想到了一个方法:再新建一个文件文件名为all uer information作为后台来存储用户的

13、信息,但这个文件存储的是所有未被冻结前和未被冻结的账号信息即所有原始账号信息。而解除的方法是:先读取all user information这个文件里的信息,然后把里面的信息覆盖到在前台操作的文件即可。当用户被冻结后想解除的话只需运行这个程序即可解除冻结。写了解除冻结账号的函数后,又想到需要写一个注册账号的程序,于是也顺利的完成了,最后,通过屡次的调试,把整个程序代码给完成了。6源程序清单6.1头文件/*头文件:user.h*/#include #include #include #include #include struct User/用户数据char num20;char name10;

14、char password7;float balance;void read_info();/用户信息读取void input_num(char * num);/输入账号void now_e*ist(char * num);/判断是否被冻结或不存在void e*isted(char * num);void input_password(char * p_word,char * W);/输入密码void face();/界面显示void balance_refer();/余额查询void choose(int c);/菜单项选择择void draw_money();/取款void set_pas

15、sword();/设置密码void input_new_password(char * old_password);void tran_account();/转账void stamp();/打印单条void info_refer();/信息查询void out();/退出程序void lock();/冻结账号void save_info();/存储信息6.2主程序/*主程序:main*/*模拟ATM取款机*/#include user.h/自定义头文件#define U 8struct User userU;int f;/全局变量 f 是用来记录用户下标即哪个用户int main()char

16、number20;/定义账号数组变量input_num(number);/调用input_num函数,输入用户账号return 0;/*函数功能:输入用户账号*/void input_num(char num12)read_info();/输入账号前先调用函数read_info读取所以用户信息,以便后面判/断账户是否存在以及密码是否正确system(cls);printf(nnnnnnnntt请输入您的账号:);gets(num);now_e*ist(num);/调用e*ist函数检查该账号是否存在/*函数功能:读取用户信息*/void read_info()int i=0;FILE * fp

17、;if (fp=fopen(user information.dat,r)=NULL)/通过文件指针来读取用户数据信息不包括被冻结用户信息printf(It cannot open !);e*it(0);while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;fclose(fp);/*函数功能:判断用户是否存在且未被冻结*/void now_e*ist(char * num)int s=0,i;/ s是用来判断用户是否存在的条件,如果存在s=1,不存在s=0;char *w=input;while(1)for(i=0;i12;i+)if

18、 ( 0 = strcmp( num, useri.num ) )/匹配用户s=1;f=i;/如果用户存在则跳出循环,并用变量f记录用户下标,以便后面使用。break;elses=0;if (s=1)input_password( useri.password, w );/如果用户存在,则调用input_password函数/并把用户密码传递给它,/实现用户输入密码功能。elsee*isted(num);/如果用户不存在,则调用e*isted函数,判断是否账号被冻结/*函数功能:判断账号是否被冻结*/void e*isted(char * num)int l = 0, i = 0;/ s是用来

19、判断用户账号是否被冻结的条件,l=1 被冻结,l=0 说明用户不存在;FILE * fp;if ( ( fp=fopen(all user information.dat,r) ) = NULL )printf(It cannot open !);/用文件指针读取所有用户数据包括被冻结用户e*it(0);while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;while(1)for(i=0;i12;i+)if ( strcmp(num,useri.num)=0 )/判断输入的账号是否存在l=1;break;elsel=0;if ( l

20、= 1 )printf(anntt对不起,您的账号已被冻结,请与客服联系!nnnn);e*it(0);elseprintf(anntt用户账号不存在,请重新输入!n);printf(nnn按任意键返回!);getch();system(CLS);input_num(num);/*函数功能:输入密码*/void input_password(char * p_word,char * W )char password20;char ch;int i, ts = 1;/ts用来统计输入密码错误的次数doif (ts=100 & take%100=0 )/判断是否为整百数并且大于100的数if (ta

21、ke = userf.balance)/判断取款数是否不超过余额if ( take 9) | (new_password0d0) )/判断密码是否是数字system(CLS);printf(nnnnnnttt请输入数字,!n);printf(nnnnn按任意键返回!n);getch();input_new_password(old_password);if (d!=6)/判断密码是否为6位数system(CLS);printf(nnnnnnttt请输入6位的密码,!n);printf(nnnnn按任意键返回!n);getch();continue;if ( (strcmp (new_passw

22、ord0,0) ) = 0 )/输入0则返回主菜单system(CLS);face();elseprintf(nnnnnntt请再次确认您的密码:t );i = 0;ch = getch();while ( ch != 13) /输入字符ch不为回车键if ( ch = 8) /输入字符ch为退格键printf(%c %c,ch,ch); if ( i != 0 )i-; elseprintf(*); new_password1i = ch;i+; ch = getch(); /继续输入字符chnew_password1i=0;if ( (strcmp (new_password1,0) )=

23、0 )/输入0则返回主菜单system(CLS);face();elseif ( (strcmp (new_password0,new_password1) )=0 )/判断输入两次密码是否一致strcpy(userf.password,new_password1);save_info();/调用save_info函数,存储信息printf(nnntt密码修改成功,请牢记!);printf(nn按任意键返回菜单!);getch();system(CLS);face();elsesystem(CLS);printf(您输入的两次密码不同,请重新输入!);printf(nnnnn按任意键返回!n)

24、;getch();while(1);/*函数功能:转账*/void tran_account()char other_num20;int i,c,q,tran;/c用来判断转账是否继续,q用来判断用户行为,tran用来存储转账金额system(CLS);printf(ntttttttt0.返回菜单);printf(nnnnnnttt请输要对方的账号: );gets(other_num);/输入对方账号if ( strcmp(other_num,0)=0 )/输入0返回菜单face();elseif ( strcmp(other_num,userf.num)=0 )/判断是否为自身账号syste

25、m(CLS);printf(nnnnnnnn tt对不起,不能给自己转账,请重新输入账号!n);printf(nnn按任意键返回!);getch();system(CLS);tran_account();/递归调用elsewhile(1)for(i=0;i=100 & tran%100=0 )/判断是否为整百/数并且大于100的数if (tran = userf.balance)/取款数是否不超过余额if ( tran = 3000 )/判断是否超过3000system(CLS);userf.balance -=tran;useri.balance +=tran;save_info();/调用

26、save_info,存储信息printf(nnnnnnttt 交易成功!n);printf(nnnnntt0.返回菜单ttt9.继续转账);c=getch();if (c=9)/输入9就行转账system(CLS);elseif (c =0)/c为0返回菜单system(CLS);face();elseprintf(输入错误,请重新输入!n);system(CLS);elsesystem(CLS);printf(nnnnnntt对不起,一次最多能转账3000元,请重新输入!);printf(nnnnn按任意键返回!n);getch();system(CLS);elsesystem(CLS);p

27、rintf(nnnnnnttt您的余额缺乏,请重新输入!);printf(nnnnn按任意键返回!n);getch();system(CLS);elsesystem(CLS);printf(nnnnnnttt请输入正确的金额!请重新输入!);printf(nnnnn按任意键返回!n);getch();system(CLS);elsesystem(CLS);face();while(1);elseif (c=0)face();system(CLS);printf(nnnnnnttt用户不存在!请重新输入!);printf(nnnnn按任意键返回!n);getch();system(CLS);tr

28、an_account();/递归调用/*函数功能:查询用户信息*/void info_refer()system(CLS);/显示用户信息printf(nnnnnnnnttt:%snttt账号:%s,userf.name,userf.num);printf(nn按任意键返回!n);getch();system(CLS);face();void out()system(CLS);printf(nnnnnnnntttt感您的使用!n);printf(tttt 请取回卡!n);getch();e*it(0);/*函数功能:冻结用户账号*/void lock()int i;FILE * fp;char

29、 random20;srand( (unsigned) time(NULL) );/随机器for(i=0; i12; i+)randomi=rand()%100;/产生12个随机数randomi=0;strcpy(userf.num,random);/将产生的随即数替换用户的账号实现将用户账户冻结if (fp=fopen(user information.dat,wb)=NULL)/重写数据printf(It cannot open !);e*it(0);for(i=0; iU; i+)fwrite(&useri,sizeof(struct User),1,fp);fclose(fp);get

30、ch();system(CLS);printf(nnnnnnnnntttt 请取回卡!nnnnnnn);e*it(0);void save_info()int i;FILE * fp;if (fp=fopen(user information.dat,wb)=NULL)/将信息保存到用户文件printf(It cannot open !);e*it(0);for(i=0;iU;i+)fwrite(&useri,sizeof(struct User),1,fp);fclose(fp);if (fp=fopen(all user information.dat,wb)=NULL)/将信息保存到所以

31、用户文件printf(It cannot open !);e*it(0);for(i=0;iU;i+)fwrite(&useri,sizeof(struct User),1,fp);fclose(fp);6.3 解除被冻结用户/*解除被冻结用户*/#include#include#define N 6struct Userchar num20;char name10;char password7;float balance;userN;int main()int i;FILE * fp;if(fp=fopen(all user information.dat,r)=NULL)printf(It

32、 cannot open !);e*it(0);i=0;while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;i=i-1; fclose(fp);if(fp=fopen(user information.dat,wb)=NULL)printf(It cannot open !);e*it(0);for(i=0;iN;i+)fwrite(&useri,sizeof(struct User),1,fp);fclose(fp);printf(nn);for(i=0;iN;i+)printf(num :%sn,useri.num);print

33、f(name :%sn,useri.name);printf(password :%sn,useri.password);printf(balance :%.2fn,useri.balance);return 0;6.4 用户注册/*用户注册文件*/#include#include#define N 1struct Userchar num20;char name10;char password7;float balance;userN;int main()int i;FILE * fp;/输入注册信息for(i=0;iN;i+)printf(input num & name & passwo

34、rd &balance: n); printf(num: );gets(useri.num); printf(name: );gets(useri.name); printf(password: );gets(useri.password); printf(balance: );scanf(%f,&useri.balance);getchar();if(fp=fopen(all user information.dat,ab)=NULL)printf(It cannot open !);for(i=0;iN;i+)fwrite(&user0,sizeof(struct User),1,fp); fclose(fp);if(fp=fopen(user inf

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!