C语言程序设计报告模拟ATM取款机_第1页
已阅读1页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、仲恺农业工程学院工程实训报告ATM款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号2指导教师王成仲恺农业工程学院教务处制目录1需求分析12系统总框图与功能模块说明12、1系统总框图12、2功能模块说明13系统设计23、1主要结构体23、2主要功能函数23、3关键函数的流程图34系统调试105总结206源程序清单216、1头文件216、2主程序226、3解除被冻结用户366、4用户注册371需求分析所设计的ATM取款机应具备以下功能:插入银行卡(用账号输入的方式代替);密码的输入;用户信息查询;用户余额查询;取款;转账;修改密码;退卡。2系统总框

2、图与功能模块说明2、1系统总框图ATM取款机图1系统总框图2、2功能模块说明?输入用户账号模块:在运彳T时,完成用户账号的输入(代替插卡);?输入账号密码模块:在输入账号之后,完成用户密码的输入:在修改密码的过程中,完成用户输入旧密码的功能;?信息读取功能模块:完成用户信息的读取;冻结账号功能模块:当输入密码3次错误时,冻结用户账号?查询用户信息模块:完成用户的信息查询(不包括余额查询);?查询余额功能模块:完成用户余额的查询;?取款功能模块:完成取款功能模块:?转账功能模块:完成转职功能;?修改密码功能模块:完成用户修改密码功能;?退卡功能模块:完成退卡功能(即:退出程序功能)。3系统设计3

3、、1主要结构体用户账号、姓名、密码、余额structUser/用户数据charnum20;/用户账号charname10;/姓名charpassword7;/密码floatbalance;/余额;/用户信息读取/输入账号 /判断就是否被冻结或不存在/输入密码/界面显示/余额查询3、2主要功能函数voidread_info();voidinput_num(char*num);voidnow_exist(char*num);voidexisted(char*num);voidinput_password(char*p_word,char*W);voidface();voidbalance_refe

4、r();voidchoose(intc);/菜单选择voiddraw_money();/取款voidset_password();/修改密码voidinput_new_passwordChar*old_password);设置新密码voidtran_account();转账voidstamp();/打印单条voidinfo_refer();信息查询voidout();/退出程序voidlock();冻结账号voidsave_info();/存储信息3、3关键函数的流程图exited历数流程图now_exited函数流程图input_password流程图choose函数流程图draw_mone

5、y函数流程图ATM(款机n.prillipflfT-m*rvhOtfrriTTip(ne*gvaE#mid-flbvteml&tMirillrmeSS4rHii|Mnc-mur311HLlCn.ayMemf(3riiilnpjiriI:nrv|i45ei口pi事、C语言程序设计报告模拟1M|i-cixHi.dL,一,11input_new_password函数流程图inti;读取文件数据函数流程i=01土旭WL年inti=0;p).*fclose(fp);Ilock函数流程图4系统调试首先运行程序,系统提示输入账号。(1)当输入错误账号,系统提示:用户不存在,请从新输入(2)当输入错误的密码时

6、,系统提示:密码有误,请重新输入(3)当输入正确账号与密码时,进入主页面(4)主界面(5)在主界面选择数字1,进入查询余额界面,界面显示余额。按任意键返回(6)在主页面选择数字2,进入取款界面,系统提示输入取款的金额,当输入不就是整百数就是,系统提示请输入正确的金额,请重新输入。(8)当输入负数时,系统提示:请输入正确的金额,请重新输入(9)当输入超过卡里余额的数,系统会提示余额不足,请重新输入(10)当输入超过3000的数时,系统会提示:对不起,一次最多能取3000元,请重新输入(11)当输入正确的金额时,系统提示:交易成功,按0返回主菜单,按9继续取款。(12)在主菜单界面选择数字3,进入

7、修改密码界面,首先系统会提示:请输入旧密码(13)当输入就密码正确时,系统提示:请输入新密码(6位数)(14)当输入的新密码含有非数字时,系统提示:请输入正确的数字(15)当输入的新密码不足六位时,系统提示:请输入六位的密码(16)当两次输入的新密码不相同时,系统会提示:两次输入的密码不同,请重新输入(17)当输入两次密码都正确时,系统提示:密码修改成功,请牢记新密码(18)在主菜单界面选择数字4时,进入转账界面。系统提示:请输入对方的账号(19)当输入的账号错误时,系统会提示:用户不存在,请重新输入(20)当输入自己的账号时,系统会提示:不能给自己转账,请重新输入账号(21)当输入正确的账号

8、时,界面会显示对方的信息。按0返回菜单,按9确定转账(22)当确定转账时,系统会提示:请输入转账金额3000 元,(23)当输入转账的金额超过3000元时,系统会提示:对不起,一次转账不能超过 请重新输入。(24)当输入正确的金额时,系统提示:交易成功。按0返回主菜单,按9继续转账(25)在主菜单界面选择数字5,进入信息查询界面,界面将显示账号的信息(26)在主界面选择数字0,进去取款界面,系统提示:感谢您的使用,请拿回卡5总结在确认了程序设计主题之后,首先第一步就是画了大概的流程图,因为ATM取款机就是我们经常接触的一个机器,所以相对来说话流程图比较容易。在画完流程图之后,就就是进行代码的编

9、写了,我采用自顶向下的方式来规划我的整个代码流程,首先就是确定了大概需要哪些函数来实现所需的功能,在函数命名的时候,我并不就是随便命名的,而就是采用书上介绍的方法,用英文来命名。在命名过程中,由于英语功底不好的我遇到了小小的麻烦(有些单词不会拼),于就是就用电子词典来解决这问题。刚开始我就是把所有的自定义函数定义为void型函数。所有的函数中明写好之后就可以开始细化了,首先确定所需结构体,然后就就是头文件的定义,最后确定了所有函数的编写顺序。由于这次程序设计就是ATM取款机,所有要用到文件的知识,但又没学过,所以只能先停止代码的编写来学习文件的知识。通过了两天的学习,虽然只就是略学了皮毛,但就

10、是勉强瞧着书可以来自己新建文件并不数据存入文件中。所有的准备工作完成后,真正的可以进行代码编写了,首先把所有的函数都编写出来(内容为空),然后根据从易到难的顺序逐个功能的编写。其顺序依次就是:input_num函数(用户账号输入),input_password函数(密码输入),lock函数(冻结用户账号),read_info函数(读取文件数据),now_exit函数(检查就是账号就是否存在且未被冻结),existed函数(检查账号就是否被冻结),face函数(主菜单),choose函数(功能选择),balance_refer函数(余额查询),draw_money函数(取款),set_passw

11、ord数(修改密码),input_new_password函数(输入新密码),tran_account函数(转账),info_refer函数(查询信息),out函数(退卡)。在写input_password函数时,没办法实现密文的输出,所以研究了很久,最后通过找资料与询问师兄才解决了这一难题,并从中学到了这一技巧。在写lock函数时,刚开始只就是用空字符来覆盖原有的账号,但就是在测试时发现这样冻结的方法行不通,因为这样子冻结的话虽然原账号没了,但就是在输入账号时只要直接按Enter键就可以进入输入密码的程序,所以这又就是一个难题。在晚上睡觉时突然想到了曾经在课外书上瞧到的产生随机数的函数(ra

12、nd函数),于就是,第二天这个所谓的难题也解决了。所有的函数编写完毕,想到了既然冻结了账号,肯定需要一个程序来解除冻结了的账号,所以,自己又摸索了如何解决这一问题,最后想到了一个方法:再新建一个文件(文件名为allue门nformation)作为后台来存储用户的信息,但这个文件存储的就是所有未被冻结前与未被冻结的账号信息(即所有原始账号信息)。而解除的方法就是:先读取alluserinformation这个文件里的信息,然后把里面的信息覆盖到在前台操作的文件即可。当用户被冻结后想解除的话只需运行这个程序即可解除冻结。写了解除冻结账号的函数后,又想到需要写一个注册账号的程序,于就是也顺利的完成了

13、,最后,通过多次的调试,把整个程序代码给完成了。6源程序清单6、1头文件/*头文件:user、h*/#include#include#include#include/用户数据/用户信息读取/输入账号 /判断就是否被冻结或不存在char * W); /输入密码/界面显示/余额查询#includestructUsercharnum20;charname10;charpassword7;floatbalance;voidread_info();voidinput_num(char*num);voidnow_exist(char*num);voidexisted(char*num);voidinput

14、_password(char*p_word,voidface();voidbalance_refer();voidchoose(intc);/菜单选择voiddraw_money();/取款voidset_password();/设置密码voidinput_new_password(char*old_password);voidtran_account();/转账voidstamp();/打印单条voidinfo_refer();/信息查询voidout();/退出程序voidlock();/冻结账号voidsave_info();6、2主程序/存储信息/*主程序:main*/*模拟ATM取款

15、机*/自定义头文件/全局变量f 就是用来记录用户下标( 即哪个用户 )#includeuser、h#defineU8structUseruserU;intf;int main()char number20;input_num(number);return 0;/定义账号数组变量/调用input_num 函数 ,输入用户账号/*函数功能:输入用户账号*/void input_num( char num12) read_info();后面判system(cls);printf(nnnnnnnntt gets(num);now_exist(num);/*函数功能 :读取用户信息 */void rea

16、d_info()/输入账号前先调用函数read_info 读取所以用户信息 ,以便/断账户就是否存在以及密码就是否正确请输入您的账号:);/调用exist 函数检查该账号就是否存在inti=0;FILE*fp;if(fp=fopen(userinformation、dat,r)=NULL)/通过文件指针来读取用户数据信息(不包括被冻结用户信息)printf(Itcannotopen!);exit(0);while(!feof(fp)fread(&useri,sizeof(structUser),1,fp);i+;fclose(fp);/*函数功能:判断用户就是否存在且未被冻结*/voidnow

17、_exist(char*num)ints=0,i;s就是用来判断用户就是否存在的条件,如果存在s=1,不存在s=0;char*w=input;while(1)for(i=0;i12;i+)if(0=strcmp(num,useri、num)/匹配用户s=1;f=i;/如果用户存在则跳出循环,并用变量f记录用户下标,以便后面使用。break;elses=0;if(s=1)input_password(useri、password,w);/如果用户存在,则调用input_password函数/并把用户密码传递给它,/实现用户输入密码功能。elseexisted(num);/如果用户不存在,则调用e

18、xisted函数,判断就是否账号被冻结/*函数功能:判断账号就是否被冻结*/voidexisted(char*num)intl=0,i=0;/s就是用来判断用户账号就是否被冻结的条件,l=1被冻结,l=0说明用户不存在;FILE*fp;if(fp=fopen(alluserinformation、dat,r)=NULL)printf(Itcannotopen!);/用文件指针读取所有用户数据(包括被冻结用户)exit(0);while(!feof(fp)fread(&useri,sizeof(structUser),1,fp);i+;while(1)for(i=0;i12;i+)if(strc

19、mp(num,useri、num)=0)/判断输入的账号就是否存在l=1;break;elsel=0;if(l=1)printf(anntt对不起,您的账号已被冻结,请与客服联系!nnnn);exit(0);elseprintf(anntt用户账号不存在,请重新输入!n);printf(nnn按任意键返回!);getch();system(CLS);input_num(num);/*函数功能:输入密码*/voidinput_password(char*p_word,char*W)charpassword20;charch;/ts 用来统计输入密码错误的次inti,ts=1;doif(ts=10

20、0&take%100=0)大于100的数if(take=userf、balance)超过余额if(take9)|(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;/输入0 则返回主菜

21、if(strcmp(new_password0,0)=0)system(CLS);face();elseprintf(nnnnnntt请再次确认您的密码:t);i=0;ch = getch();while ( ch != 13)if ( ch = 8)printf(%c %c,ch,ch);if ( i != 0 ) i-;elseprintf(*);new_password1i = ch; i+;ch = getch();new_password1i=0;if ( (strcmp (new_password1,0) )=0 ) 单system(CLS);face();else/ 输入字符ch

22、 不为回车键/输入字符 ch 为退格键/ 继续输入字符ch/输入0 则返回主菜if(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);ge

23、tch();while(1);/*函数功能:转账*/voidtran_account()charother_num20;inti,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)/判断就是否为自身账号system(CLS);prin

24、tf(nnnnnnnntt对不起,不能给自己转账,请重新输入账号!n);printf(nnn按任意键返回!);getch();system(CLS);/递归调用tran_account();elsewhile(1)for(i=0;i=100&tran%100=0)/判断就是/数并if(tran=userf、balance)/取款数就是否if(tran=3000)/判断就是否超system(CLS);userf、balance-=tran;useri、balance+=tran;save_info();调用save_info,存储信printf(nnnnnnttt交易成printf(nnnnnt

25、t0、返回菜单);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);printf(nnnnnnttt您的余额不足请重新输入);printf(nnnnn按任意键返回n);getch();system(CLS

26、);elsesystem(CLS);printf(nnnnnnttt请输入正确的金额请重新输入);printf(nnnnn按任意键返回n);getch();system(CLS);elsesystem(CLS);face();while(1);elseif(c=0)face();system(CLS);printf(nnnnnnttt用户不存在!请重新输入!);printf(nnnnngetch();system(CLS);tran_account();按任意键返回!n);/递归调用/*函数功能:查询用户信息*/voidinfo_refer()system(CLS);printf(nnnnnn

27、nntttprintf(nn按任意键返回!getch();system(CLS);face();voidout()system(CLS);printf(nnnnnnnnttttprintf(tttt请取回卡!getch();exit(0);/*函数功能:冻结用户账号*/voidlock()/显示用户信息姓名:%snttt账号:%s,userf、name,userf、num);n);感谢您的使用!n);n);inti;FILE*fp;charrandom20;srand(unsigned)time(NULL);for(i=0;i12;i+)/随机器randomi=rand()%100;/产生12

28、个随机数randomi=0;/将产生的随即数替换用户的账号实现strcpy(userf、num,random);将用户账户冻结if(fp=fopen(userinformation、dat,wb)=NULL)/重写数据printf(Itcannotopen!);exit(0);for(i=0;iU;i+)fwrite(&useri,sizeof(structUser),1,fp);fclose(fp);getch();system(CLS);printf(nnnnnnnnntttt请取回卡!nnnnnnn);exit(0);voidsave_info()inti;FILE*fp;if(fp=f

29、open(userinformation、dat,wb)=NULL)/将信息保存到用户文件printf(Itcannotopen!);exit(0);for(i=0;iU;i+)fwrite(&useri,sizeof(structUser),1,fp);fclose(fp);if(fp=fopen(alluserinformation、dat,wb)=NULL)/将信息保存到所以用户文件printf(Itcannotopen!);exit(0);for(i=0;iU;i+)fwrite(&useri,sizeof(structUser),1,fp);fclose(fp);6、3解除被冻结用户

30、/*解除被冻结用户*/#include#include#defineN6structUsercharnum20;charname10;charpassword7;floatbalance;userN;intmain()inti;FILE*fp;if(fp=fopen(alluserinformation、dat,r)=NULL)printf(Itcannotopen!);exit(0);i=0;while(!feof(fp)fread(&useri,sizeof(structUser),1,fp);i+;i=i-1;fclose(fp);if(fp=fopen(userinformation、dat,wb)=NULL)printf(Itcannotopen!);exit(0);for(i=0;iN;i+)fwrite(&useri,sizeof(structUser),1,fp);fclose(fp);printf(nn);for(i=0;iN;i+)printf(num:%sn,useri、num);printf(name:%sn,useri、na

温馨提示

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

最新文档

评论

0/150

提交评论