c语言银行自动存取款机模拟.docx
沈阳航空航天大学课程设计学号以班级04070101姓名王翰一指导教师畅煦2011年9月28日沈阳航空航天大学课程设计任务书学院:自动化学院专业:测控技术与仪器班级:学号,21题目:自动存取款机模拟一、课程设计时间20112第1学期第4周,共计1周,20学时.二、课程设计内容请你模仿自动存取款机系统,用C语言编写软件完成以下任务:1 .登陆功能:某个用户输入账户名和密码,可以登陆ATM。注意:应有多个用户,并把信息保存在文件中。2 .查询功能:登陆后,可以查询存款余额。3 .存款功能:登陆后,可以向账户中存款.4 .取款功能:登砧后,可以取款。注意:取款金额不能超过存款金额。提示:用户(账号、密码、存款余额、利率、开户银行)三、课程设计要求1.程序质量: 贯彻结构化的程序设计思想. 用户界面友好,功能明确,操作方便。 用户界面中的菜单至少应包括、“数据输入”、"数据保存”、"信息查询”、"数据修改”、“退出”5项。 代码应适当缩进,并给出必要的注择,以增强程序的可读性2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板.四、指导教师和学生签字指导教酊:学生筌名:五、成绩六、教师评语目录一、需求分析1二、设计分析2三、主要界面截图3四、技术要点4五、个人总结6六、参考文献6七、源程序6一、需求分析根据任务书给定的''课程设计内容”和“课程设计要求”作如下的需求分析。该系统是一个较典型的银行存取款模拟系统,其使用者被假定为银行信用卡用户,系统应该具有平安、稳定、功能齐全的特点。1 .平安性分析银行存取款机的数据涉及到取款机内储存的所有用户,数据量较大且对保密性的需求很高,所以要通过设置密码等手段确保数据不能被随意的删减和修改。2 .楞定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。3 .主要功能分析(1)账号及密码输入:允许用户输入账号、密码,对用户由于疏忽录入的非法数据,能够及时提示并更正。(2)登陆成功界面:共有三个选项,查询余额、取款、退出分别对应1、2、3选项,若序号输入不正确会予以提示。(3)余额查询:选定1后,进入查询界面,用户输入查询条件,系统规则地在界面显示查询结果,且显示的数据尽量全面。当输入卡号时,系统需要输入对应的密码(若密码错误则会有相应提示)密码与卡号相对应可查询到该用户的姓名、余额。(3)取款:选定2后,进入取款界面,用户输入取款金额,若取款金额大于存款金额则会提示“余额缺乏”,若小于则会在原余额上扣除取款金额。(4)退出:选定3后,进入退出界面,系统会延迟3-4秒重新跳回登陆界面,供其他用户使用。二、设计分析主要有5个功能模块,每个模块对应一个C语言子函数。这些函数原型及其功能简述如下:voidd1.JmO;登陆成功后出现的界面voidd1.();登陆voidex();查询voidqk();取款voidtk();退卡1、程序总体结构图2、主要功能模块框图三、主要界面截图图1登陆成功后的操作图2查询及取款四、技术要点1、结构体的应用定义了结构体用来描述用户的姓名、卡号、密码以及金额。具体的定义如下:structatm/ATM自助银行(charname10;intaccount:卡号shortpassword:密码f1.oatmoney:金额at10=Zhao1.in1.,h4000.*MaFang*,2,2,7000),(wWangMing",3,3,5888,"MaJiu”,4,4,7543,*HangHan*,5,5,10000,*ZhangHu*,6,6,4087),"MaFang”,7,7,2765,*Zhou1.i*,8,8,4530,(*HongShan*,9,9,5693,*Yu1.i*,10,10,7543);所定义的结构体主要用于定义数组。2、循环语句与选择性分支语句的嵌套whi1.e(z!=-1.)(Prin1.f("nn请输入操作序号:");SCanf(飞d”,&z):switch(三)case1:cx();break;查询余额case2:qk();break:取款case3:tk();break;退卡defau1.t:Printf("操作序号不合法!");return;)3、关于延迟清屏时间for(i=0;i<1000000000;i+);延缓显示时间system(*c1.s*):清屏main();回初始界面,供其他用户使用此for循环语句可以使清屏函数延缓3-4秒执行,后调用main函数,完成整个操作过程后重新供其他用户登陆。五、个人总结在此次课设过程中,我遇到了许多困难,例如如何在没有用户注册的程序中直接能完成登陆,只需建立一个结构体数组,还有如何能做到像ATM机那样一个用户用完之后还能供其他用户使用,这些都是经过查找书籍和上网查找相关资料才得以解决。所以这次课设对我的帮助很大。六、参考文献1谭浩强C程序设计.北京:清华大学出版社,20052角红霞,visua1.c+6.0程序设计,西安:西安电子科技大学出版社,2009七、源程序ftinc1.ude<stdio.h>4inc1.ude<std1.ib.h>intX:记录下标d1.jm();登录成功后出现的界面voidvoidvoidvoidvoidd1.():ex0;qk:tk():structatm/ATM自助银行登录查询取款/退卡卡号密码金额charname10;intaccount;shortpassword;f1.oatmoney;at10=*Zhao1.in1,1.,4000),*MaFang*,2,2,7000),(Wa11Min,3,3,5888,"MaJiu”,4,4,7543),CHangHan”,5,5,10000,"ZhangHu”,6,6,1087),GaFang”,7,7,2765,("ZhOU1.i”,8,S,4530.CbngShan”,9,9,5693,"Yu1.i”,10,10,7543):主函数voidnain()(Printf("*欢送使用自动取款机*n"):printf("*n");d1.();)登录函数voidd1.0(inta:临时记录下标intaccount;卡号shortpassword:密码Printfc请输入卡号scanf(%d*.iaccount):for(a=0:a<=9;a+)(if(account=ata.account)(x=a;将临时变址下标值存储到全局下标变量中Prin1.f("请输入密码:");SCanf(",password);if(password=ata.password)(Prin1.f("*丫丫银行欢送您的登录*n"):printf(*11*);Printf("登录成功,请选择操作n”):d1.jm();登录成功界面break;)e1.seIPrintfr密码输入错误n");d1.():递归(调用自己,再来一次)登录界面voidd1.jm()intz;Printf("查询余额1.n*):Printf("取款2n*);Prin1.f("退卡311a,);whi1.e(1)(printf(nn请输入操作序号:”);scanf(%d*,ftz);switch(三)(case1:cx();break:查询余额CaSe2:qkO;break;取款case3:tk():break;/退卡defau1.t:Printf("操作序号不合法!”):return;)查询余额voidex0(Printf(飞S您卡上余额为%7.2f元",atx.name,atx.money);)/取款voidqk()(1.oata;Printf("谙输入取款金额:”);scanfC,%f*,fta):if(a>atx.money)PrinIfr你的余额缺乏”);e1.se(Printf(.您已取款17.2f元",a):atx.monev=atx1.money-a:)1退卡voidtk()(inti;Printf("请取回您的卡n"):for(i-():i<1.000000000;i+):延缓显示时间system(*c1.s"):清屏main();回初始界面,供其他用户使用