欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计报告(共45页).doc

    • 资源ID:5342208       资源大小:1.71MB        全文页数:45页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计报告(共45页).doc

    精选优质文档-倾情为你奉上仲恺农业工程学院工程实训报告ATM取款机 课程名称 C语言程序设计工程实训姓 名 林少烈院(系) 计算机科学与工程学院专业班级 计算机113班学 号 7指导教师 王成仲恺农业工程学院教务处制专心-专注-专业目 录1 需求分析所设计的取款机应具备以下功能:l 插入银行卡(用账号输入的方式代替);l 密码的输入;l 用户信息查询;l 用户余额查询;l 取款;l 转账;l 修改密码;l 退卡。2 系统总框图和功能模块说明2.1 系统总框图取款机输入用户账号输入账号密码查询用户信息查询账号余额转账取款修改密码退卡 信息读取 冻结账号图1 系统总框图2.2 功能模块说明Ø 输入用户账号模块:在运行时,完成用户账号的输入(代替插卡);Ø 输入账号密码模块:在输入账号之后,完成用户密码的输入;在修改密码的过程中,完成用户输入旧密码的功能;Ø 信息读取功能模块:完成用户信息的读取;Ø 冻结账号功能模块:当输入密码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_exist(char * num);/判断是否被冻结或不存在void existed(char * 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();/退出程序void lock();/冻结账号void save_info();/存储信息3.3 关键函数的流程图Ni+elsel=0;l=1;break;l=1i<12i=0读取文件信息printf("It cannot open !");1!feof(fp)打开文件intl=0,i=0;now_exited 函数流程图else调用input_pssword 函数s=1判断账号是否存在elses=0;i+ints=0,i;1i=0i<12s=1;break;用户不存在,重新输入冻结账号判断密码是否正确exited 函数流程图input_password 流程图choose 函数流程图draw_money 函数流程图iint i=0;打开文件关闭文件printf("It cannot open !");读取文件!feof(fp)input_new_password 函数流程图 读取文件数据函数流程图save_info 函数流程图lock 函数流程图i=0i<Ui+fclose(fp);randomi='0'int i;i=0i<12i+产生随机数打开文件进行写入printf("It cannot open !");4 系统调试首先运行程序,系统提示输入账号。(1)当输入错误账号,系统提示:用户不存在,请从新输入。,(2)当输入错误的密码时,系统提示:密码有误,请重新输入。(3)当输入正确账号与密码时,进入主页面。(4)主界面(5)在主界面选择数字1,进入查询余额界面,界面显示余额。按任意键返回。(6)在主页面选择数字2,进入取款界面,系统提示输入取款的金额,当输入不是整百数是,系统提示请输入正确的金额,请重新输入。(8)当输入负数时,系统提示:请输入正确的金额,请重新输入。(9)当输入超过卡里余额的数,系统会提示余额不足,请重新输入。2(10)当输入超过3000的数时,系统会提示:对不起,一次最多能取3000元,请重新输入。(11)当输入正确的金额时,系统提示:交易成功,按0返回主菜单,按9继续取款。(12)在主菜单界面选择数字3,进入修改密码界面,首先系统会提示:请输入旧密码。(13)当输入就密码正确时,系统提示:请输入新密码(6位数)。(14)当输入的新密码含有非数字时,系统提示:请输入正确的数字。(15)当输入的新密码不足六位时,系统提示:请输入六位的密码。(16)当两次输入的新密码不相同时,系统会提示:两次输入的密码不同,请重新输入。(17)当输入两次密码都正确时,系统提示:密码修改成功,请牢记新密码。(18)在主菜单界面选择数字4时,进入转账界面。系统提示:请输入对方的账号:(19)当输入的账号错误时,系统会提示:用户不存在,请重新输入。(20)当输入自己的账号时,系统会提示:不能给自己转账,请重新输入账号。(21)当输入正确的账号时,界面会显示对方的信息。按0返回菜单,按9确定转账。9(22)当确定转账时,系统会提示:请输入转账金额。(23)当输入转账的金额超过3000元时,系统会提示:对不起,一次转账不能超过3000元,请重新输入。(24)当输入正确的金额时,系统提示:交易成功。按0返回主菜单,按9继续转账。(25)在主菜单界面选择数字5,进入信息查询界面,界面将显示账号的信息。(26)在主界面选择数字0,进去取款界面,系统提示:感谢您的使用,请拿回卡。5 总结在确认了程序设计主题之后,首先第一步是画了大概的流程图,因为ATM取款机是我们经常接触的一个机器,所以相对来说话流程图比较容易。在画完流程图之后,就是进行代码的编写了,我采用自顶向下的方式来规划我的整个代码流程,首先是确定了大概需要哪些函数来实现所需的功能,在函数命名的时候,我并不是随便命名的,而是采用书上介绍的方法,用英文来命名。在命名过程中,由于英语功底不好的我遇到了小小的麻烦(有些单词不会拼),于是就用电子词典来解决这问题。刚开始我是把所有的自定义函数定义为void型函数。所有的函数申明写好之后就可以开始细化了,首先确定所需结构体,然后就是头文件的定义,最后确定了所有函数的编写顺序。由于这次程序设计是取款机,所有要用到文件的知识,但又没学过,所以只能先停止代码的编写来学习文件的知识。通过了两天的学习,虽然只是略学了皮毛,但是勉强看着书可以来自己新建文件并不数据存入文件中。所有的准备工作完成后,真正的可以进行代码编写了,首先把所有的函数都编写出来(内容为空),然后根据从易到难的顺序逐个功能的编写。其顺序依次是:input_num函数(用户账号输入),input_password函数(密码输入),lock函数(冻结用户账号),read_info函数(读取文件数据),now_exit函数(检查是账号是否存在且未被冻结),existed函数(检查账号是否被冻结),face函数(主菜单),choose函数(功能选择),balance_refer函数(余额查询),draw_money函数(取款),set_password函数(修改密码),input_new_password函数(输入新密码),tran_account函数(转账),info_refer函数(查询信息),out函数(退卡)。在写input_password函数时,没办法实现密文的输出,所以研究了很久,最后通过找资料和询问师兄才解决了这一难题,并从中学到了这一技巧。在写lock函数时,刚开始只是用空字符来覆盖原有的账号,但是在测试时发现这样冻结的方法行不通,因为这样子冻结的话虽然原账号没了,但是在输入账号时只要直接按Enter键就可以进入输入密码的程序,所以这又是一个难题。在晚上睡觉时突然想到了曾经在课外书上看到的产生随机数的函数(rand函数),于是,第二天这个所谓的难题也解决了。所有的函数编写完毕,想到了既然冻结了账号,肯定需要一个程序来解除冻结了的账号,所以,自己又摸索了如何解决这一问题,最后想到了一个方法:再新建一个文件(文件名为all uer information)作为后台来存储用户的信息,但这个文件存储的是所有未被冻结前和未被冻结的账号信息(即所有原始账号信息)。而解除的方法是:先读取all user information这个文件里的信息,然后把里面的信息覆盖到在前台操作的文件即可。当用户被冻结后想解除的话只需运行这个程序即可解除冻结。写了解除冻结账号的函数后,又想到需要写一个注册账号的程序,于是也顺利的完成了,最后,通过多次的调试,把整个程序代码给完成了。6 源程序清单6.1头文件/*头文件:user.h*/#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <time.h>struct User/用户数据char num20;char name10;char password7;float balance;void read_info();/用户信息读取void input_num(char * num);/输入账号void now_exist(char * num);/判断是否被冻结或不存在void existed(char * 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();/退出程序void lock();/冻结账号void save_info();/存储信息6.2主程序/*主程序:main*/*模拟ATM取款机*/#include "user.h"/自定义头文件#define U 8struct User userU;int f;/全局变量 f 是用来记录用户下标(即哪个用户)int main()char number20;/定义账号数组变量input_num(number);/调用input_num函数,输入用户账号return 0;/*函数功能:输入用户账号*/void input_num(char num12)read_info();/输入账号前先调用函数read_info读取所以用户信息,以便后面判/断账户是否存在以及密码是否正确system("cls");printf("nnnnnnnntt请输入您的账号:");gets(num);now_exist(num);/调用exist函数检查该账号是否存在/*函数功能:读取用户信息*/void read_info()int i=0;FILE * fp; if (fp=fopen("user information.dat","r")=NULL)/通过文件指针来读取用户数据信息(不包括被冻结用户信息)printf("It cannot open !");exit(0);while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;fclose(fp);/*函数功能:判断用户是否存在且未被冻结*/void now_exist(char * num)int s=0,i;/ s是用来判断用户是否存在的条件,如果存在s=1,不存在s=0;char *w="input"while(1)for(i=0;i<12;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);/如果用户不存在,则调用existed函数,判断是否账号被冻结/*函数功能:判断账号是否被冻结*/void existed(char * num)int l = 0, i = 0;/ s是用来判断用户账号是否被冻结的条件,l=1 被冻结,l=0 说明用户不存在;FILE * fp;if ( ( fp=fopen("all user information.dat","r") ) = NULL )printf("It cannot open !");/用文件指针读取所有用户数据(包括被冻结用户)exit(0);while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;while(1)for(i=0;i<12;i+)if ( strcmp(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);/*函数功能:输入密码*/void input_password(char * p_word,char * W )char password20;char ch;int i, ts = 1;/ts用来统计输入密码错误的次数doif (ts<=3)i = 0;printf("nntt请输入密码:t");ch = getch();while ( ch != 13)/输入字符ch不为回车键if ( ch = 8)/输入字符ch为退格键printf("%c %c",ch,ch); if ( i != 0 )i-; else printf("*");passwordi = ch;i+; ch = getch();/继续输入字符chpasswordi='0'if ( 0 = strcmp( W , "set" ) )if ( (strcmp (password,"0") )=0 )/输入0则返回主菜单system("CLS");face();if ( 0 = strcmp(p_word,password) )/密码相同if ( 0 = strcmp( W , "input" ) )system("CLS");face();/调用face函数进入主界面elseif ( 0 = strcmp( W , "set" ) )input_new_password( password );elseif ( 0 != strcmp(p_word,password) /密码不相同printf("ann您输入的密码有误,请重新输入!");ts+;printf("nnn按任意键继续!");getch();system("CLS");printf("nnnnnnn");elseprintf("nnnt 对不起,您已输入密码错误3次,您的账号已被冻结,请与客服联系!");lock();/输入3次错误,则提示用户账号被冻结,并调用lock函数。while(1);/*函数功能:主菜单界面*/void face()int ch;system("CLS");printf("n");printf("t-n");printf("t*n");printf("t*tt tttt *nt*tt 您好!欢迎使用XX银行tt *nt*tttttt *n");printf("t*n");printf("t*ttttttt*nt*ttttttt*n");printf("t*t1.查询余额ttt2.取款tt*nt*ttttttt*n");printf("t*ttttttt*nt*ttttttt*n");printf("t*t3.修改密码ttt4.转账tt*nt*ttttttt*n");printf("t*ttttttt*nt*ttttttt*n");printf("t*t5.信息查询ttt0.退卡tt*nt*ttttttt*n");printf("t*ttttttt*n");printf("t*n");printf("t-n");printf("ttt请选择:");scanf("%d",&ch);getchar();choose(ch);void choose(int c)while(1)switch (c)case 0: out();break;/退卡case 1:balance_refer();break;/余额查询case 2:draw_money();break;/取款case 3:set_password();break;/设置密码case 4:tran_account();break;/转账case 5: info_refer(); break;/信息查询default: system("CLS");printf("输入有误,请重新输入!n按任意键返回");getch();system("CLS");face();break;/*函数功能:查询余额*/void balance_refer()system("CLS");printf("nnnnnnnnttt您的余额是:%.2f¥n",userf.balance);printf("nn按任意键返回!n");getch();system("CLS");face();/*函数功能:取款*/void draw_money()int take,q,c;dosystem("CLS");printf("ntttttttt0.返回菜单");printf("nnnnnntt请输入取款金额(整百数):");scanf("%d",&q);getchar();if (q)take=q;if ( take>=100 && take%100=0 )/判断是否为整百数并且大于100的数if (take <= userf.balance)/判断取款数是否不超过余额if ( take <= 3000 )/判断是否超过3000system("CLS");userf.balance -=take;save_info();/调用save_info函数,存储信息printf("nnnnnnttt 交易成功,请提取现金!n");printf("nnnnntt0.返回菜单ttt9.继续取款");c=getch();if (c='9')/输入9继续取款system("CLS");elseif (c='0')/输入0返回菜单system("CLS");face();elseprintf("输入错误,请重新输入!n");elsesystem("CLS");printf("nnnnnntt对不起,一次最多能取3000元,请重新输入!");printf("nnnnn按任意键返回!n");getch();system("CLS");elsesystem("CLS");printf("nnnnnnttt您的余额不足,请重新输入!");printf("nnnnn按任意键返回!n");getch();system("CLS");elsesystem("CLS");printf("nnnnnnttt请输入正确的金额!请重新输入!");printf("nnnnn按任意键返回!n");getch();system("CLS");elsesystem("CLS");face();while(1);/*函数功能:修改密码*/void set_password()char *w="set"/w是为了在调用input_password函数时区分是哪个主调函数system("CLS");printf("ntttttttt0.返回菜单");printf("nnnnnnn");input_password( userf.password , w );/调用输入密码函数/*函数功能:输入新密码*/void input_new_password(char * old_password)int i,d;/ d用来判断用户新密码是否为6位数char new_password27,ch;doi = 0;system("CLS");printf("ntttttttt0.返回菜单");printf("nnnnnntt请输入新密码(6位数字): ");ch = getch();while ( ch != 13) /输入字符ch不为回车键if ( ch = 8) /输入字符ch为退格键printf("%c %c",ch,ch); if (i!=0)i-; else printf("*"); new_password0i = ch;i+; ch = getch(); /继续输入字符chnew_password0i='0'if ( (strcmp (new_password0,"0") )=0 )/输入0则返回主菜单system("CLS");face();for(d=0;new_password0d!=0;d+)if ( (new_password0d>'9') | (new_password0d<'0') )/判断密码是否是数字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_password0,"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-; else printf("*"); new_password1i = ch;i+; ch = getch(); /继续输入字符chnew_password1i='0'if ( (strcmp (new_password1,"0") )=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();else system("CLS");printf("您输入的两次密码不同,请重新输入!");printf("nnnnn按任意键返回!n");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

    注意事项

    本文(C语言程序设计报告(共45页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开