C语言程序设计报告模拟ATM取款机
c++ATM机仿真设计实验报告

一、实验名称:ATM机仿真程序设计二、实验目的:实验目的使学生掌握类的简单设计及实现三、实验仪器:PC机,人手一机四、实验原理及内容4.1 实验设计:运用C++语言描述ATM机类和银行卡类,每个类均包含数据成员和成员函数,并运用对象的引用和友元类的知识。
注重面向对象程序设计理论知识的理解与实际的动手编程能力。
运用面向对象的理念实现模拟自动取款机使用过程中的界面和用户交互过程。
实验预定要求:1)正确性和健壮性:即此程序对一切合法的的操作都得能满足规格说明要求的结果,对不合法的操作也要有正确的处理措施,使程序严谨,保证用户的信息和财产安全;2)可读性:程序要尽量简明扼要,便与相关人员调试和修改;3)效率性:要求本程序执行时间尽可能短,占用的内存空间尽可能的少。
4.2 ATM系统实现:1)核对用户卡号、密码:核对用户输入的密码与卡号是否对应正确;2)修改密码:修改银行卡密码;3)取款功能4)存款功能5)查询账户信息:显示用户名、卡号、余额信息;6)退出终端系统:操作完成,退出;7)锁机吞卡:操作不当,密码输入错误超过三次,退出系统。
4.3系统分工:4.4 函数流程图:登录终端界面(主程序)流程图输入卡号、密码开始判断卡号密码是否正确进入账号操作菜单卡号密码输入是否超过3次关闭终端退出1.修改密码2.取款功能3.存款功能4.查询余额0.退出系统NYNY修改密码(核心算法)流程图:取款功能(核心算法)流程图:开始N输入取款金额是否为负数Y是否>5000Y是否为100的倍数Y账户中余额是否足够Y更新账户信息存款操作成功结束实验源代码清单:#include <iostream>#include<iomanip>#include<string>#include <cstring>#include <stdio.h>#include <stdlib.h>using namespace std;class consumer //用户定义{public:friend class ATM;consumer(char Name[],char Num[], float Money,char Password[]); protected:char* get_name();char* get_kahao();char* get_passwd();float get_money();void set_passwd(char pwd[]);void set_money(float m);void set_money2(float a);private:char passwd[10]; //用户密码char name[20]; //用户姓名char kahao[20]; //用户卡号float money; //用户余额};class ATM //ATM终端定义{public:A TM(consumer & cn):cnsm(cn){}void welcome(); //登陆终端界面bool check_passwd(char n[],char pwd[]); //核对用户密码void change_passwd(); //修改用户密码void fetchmoney(); //取款功能void deposit(); //存款功能void information(); //查询信息void exitATM(); //退出终端系统void functionshow(); //功能界面void lock(); //输入错误,退出终端private:int times; //记录密码输入次数consumer &cnsm;};int main(){consumer one("wangrunke","22889350248",10000.00F,"666666"); //构造一位用户,信息包//括:用户姓名、用户卡号、用户账户余额、用户密码A TM atm(one);atm.welcome();return 0;}consumer::consumer(char Name[],char Kahao[], float Money,char Password[])//构造函数,建立账户{strcpy(name,Name);strcpy(kahao,Kahao);money=Money;strcpy(passwd,Password);}float consumer::get_money() //获取余额{return money;}char*consumer::get_name() //获取用户名{return name;}char*consumer::get_kahao() //获取用户卡号{return kahao;}char*consumer::get_passwd() //获取用户密码{return passwd;}void consumer::set_passwd(char pwd[])//设置用户密码{strcpy(passwd,pwd);}void ATM::welcome() //登录用户界面{times=0;cout<<"\n\n\n\t\t*欢迎使用银行ATM自动取款机*\n\n"<<endl;char pwd[6],num[20],ch;int i=0;do{i=0;cout<<endl<<"\t\t请输入卡号:";do{cin.get(ch);num[i++]=ch;}while(ch!='\n');num[i-1]='\0';i=0;cout<<"\t\t请输入密码:";do{cin.get(ch);pwd[i++]=ch;}while(ch!='\n');pwd[i-1]='\0';if(!check_passwd(num,pwd)){cout<<"\n\t\t你输入的卡号或密码有误,请重新输入!"<<endl;times++;}elsefunctionshow();}while(times<3);lock();}bool ATM::check_passwd(char num[],char pwd[]){if(strcmp(num,cnsm.get_kahao())==0&&strcmp(pwd,cnsm.get_passwd())==0) return true;elsereturn false;}void ATM::functionshow(){system("cls"); //每次执行一次操作进行清屏int n;do{cout <<endl<<"\n\n\n\t\t******欢迎进入用户界面******\t\t "<<endl;cout<<"\n\n\t\t*1.修改密码*"<<endl<<"\t\t*2.取款功能*"<<endl<<"\t\t*3.存款功能*"<<endl<<"\t\t*4.查询余额*"<<endl<<"\t\t*0.退出系统*"<<endl;cout<<"\t\t 功能选项(0-3):";cin>>n;while(n<0||n>4){cout<<"\t\t请在范围内输入功能选项!"<<endl;cout<<"\t\t 功能选项(0-4):";cin>>n;}switch(n){case 0: exitA TM();break;case 1: change_passwd();break;case 2: fetchmoney();break;case 3: deposit();break;case 4: information();break;}}while(true);}void ATM::change_passwd(){system("cls");char pwd[6],repwd[6];times=0;do{cout<<"\n\n\n\t\t******修改密码******"<<"\n\t\t请输入原密码:";cin>>pwd;if(!check_passwd(cnsm.get_kahao(),pwd))times++;elsebreak;}while(times<3);if(times==3)lock();int k=0;int t=0;do{k=0;cout<<"\n\t\t请输入新密码:";cin>>pwd;int g=0;int v=0;g=strlen(pwd);if(g!=6){k=1;cout<<"\n\t\t密码为6位数字!"<<endl;}for(int i=0;i<g-1;i++){if(pwd[i]==pwd[i+1])v=v+1;}if(v==g){k=1;cout<<"\t\t原密码与新密码不能一致!"<<endl;}if(g==6&&v!=g){cout<<"\n\t\t请再次输入新密码(两次保持一致):";cin>>repwd;if((t=strcmp(pwd,repwd))!=0)cout<<"\t\t你输入的两次密码不一样,请重新输入!"<<endl;}}while(t!=0||k==1);cnsm.set_passwd(pwd);cout<<"\n\n\t\t温馨提示:密码修改成功"<<endl;cout<<"\n\n\t\t";system("pause");system("cls");}void ATM::fetchmoney(){system("cls");float m;char ch;do{cout<<"\n\n\n\t\t ******取款功能******"<<"\n\t\t本ATM终端机只能取出面值为100元的人民币"<<endl<<"\t\t温馨提示:取款金额为100的倍数"<<endl<<"\t\t 每次最多取款5000元"<<"\n\n\t\t 请输入取款金额:";cin>>m;while(m<=0){cout<<"\n\t\t请不要输入负数或0!"<<endl;cout<<"\t\t" ;system("pause");cout<<"\n\t\t 请重新输入取款金额:" ;cin>>m;}if(m>5000){cout<<"\n\t\t对不起,本A TM终端机一次最多取5000元"<<endl;cout<<"\t\t 若金额超过1万元请在柜台取款" <<endl;cout<<"\t\t 如果给您带来不便,还请谅解";}else{if((int)m%100!=0){cout<<"\n\t\t对不起,取款金额为100的倍数"<<endl;}else{if(cnsm.get_money()-m<0){cout<<"\t\t对不起,你的账户余额不足!"<<endl;}else{cout<< endl<<"\t\t *操作成功,请取回款" <<endl;cnsm.set_money( m );}}}cout<<"\n\t\t ***账户现有余额: "<<cnsm.get_money()<<endl;cout<<"\n\t\t是否要继续该项操作(Y/N):";cin>>ch;while(ch!='n'&&ch!='Y'&&ch!='y'){cout<<"(Y/N):";cin>>ch;}}while(ch=='y'||ch=='Y');system("cls");}void ATM::deposit(){system("cls");float a;char b;do{cout<<"\n\n\n\t\t ******存款功能******"<<"\n\t\t本ATM终端机只能存入面值为50或100元的人民币"<<endl<<"\t\t温馨提示:存款金额为50的倍数"<<endl<<"\t\t 每次最多存款5000元"<<"\n\n\t\t 请输入存款金额:";cin>>a;while(a<=0){cout<<"\n\t\t请不要输入负数或0!"<<endl;cout<<"\t\t" ;system("pause");cout<<"\n\t\t 请重新输入存款金额:" ;cin>>a;}if(a>5000){cout<<"\n\t\t对不起,本A TM终端机一次最多存5000元"<<endl;cout<<"\t\t 若金额超过1万元请在柜台存款" <<endl;cout<<"\t\t 如果给您带来不便,还请谅解";}else{if((int)a%50!=0)cout<<"\n\t\t对不起,存款金额为50的倍数"<<endl;else{cout<< endl<<"\t\t *操作成功,存款完成" <<endl;cnsm.set_money2 (a);}}cout<<"\n\t\t ***账户现有余额: "<<cnsm.get_money()<<endl;cout<<"\n\t\t是否要继续该项操作(Y/N):";cin>>b;while(b!='n'&&b!='Y'&&b!='y'){cout<<"(Y/N):";cin>>b;}}while(b=='y'||b=='Y');system("cls");}void ATM::information(){system("cls");cout<<"\n\n\n\t\t******************账户信息****************"<<endl;cout<<"\n\n\t\t 用户姓名"<<" 卡号"<<" 余额"<<endl;cout<<"\t\t"<<cnsm.get_name()<<" "<<cnsm.get_kahao()<<" "<<cnsm.get_money()<<endl;cout<<"\n\n\t\t******************************************"<<endl;cout<<"\n\n\t\t";system("pause");system("cls");}void ATM::lock(){system("cls");cout<<endl<<"\n\n\n\t\t感谢使用本ATM终端机!"<< "\n\t\t请取回您的银行卡......."<<endl;}void ATM::exitATM(){system("cls");cout<<"\n\n\n\t\t成功退出ATM终端系统!欢迎使用!"<<endl;exit(0);}void consumer::set_money (float m){money=money-m;}void consumer::set_money2 (float a){money=money+a;}五、实验结果(实验数据、曲线等)5.1 登录用户界面:三次密码输入错误,执行lock 函数,退出终端。
【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,有五大功能选择,输入对应的序列号进入。
●余额查询功能输出账号所对应的余额。
●取款功能,需要安装要求取出格式化的金额。
C语言课程设计自动取款机

C语言程序设计课程设计(论文)题目:自动取款机院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(报告)任务及评语院(系):软件学院教研室:软件教研窒学号学生姓名专业班级程序设计(报告)题目自动取款机程序程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩成绩:指导教师签字:2011 年 12 月 22 日目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (3)2.2.2数据结构设计及用法说明 (3)2.2.3程序结构(流程图) (4)2.2.4各模块的功能及程序说明 (6)2.2.5程序结果 (7)2.3程序源代码及注释 (10)参考资料 (16)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。
C语言模拟ATM机的编写程序

C语言模拟ATM机的编写程序#include <stdio.h>void main(){long int a,b,c,d,e,f,g,k,l,m,n,o,p,h;n=0;h=10000;k=123456;loop0: printf("\t\t\t欢迎使用中国邮政ATM取款机!\n\n");printf("请插入你的银行卡,并输入你的密码,三次密码输入错误,将终止程序:\n");scanf("%ld",&l);if(k==l){loop1: printf("请输入你选择的操作类型:\n");printf("请输入0-4进行选择:\n");printf("1:<转账>\t2:<查询>\t3:<取款>\t4:<修改密码>\t0:<取卡>\n");scanf("%ld",&a);switch(a){case 1: printf("请输入转账账号:\n");scanf("%d",&o);printf("请输入你需要转账的金额:\n");scanf("%d",&p);printf("请输入你选择的操作类型:\n");printf("请输入0或1进行选择:\n");printf("1:<确认>\t0:<返回>\n");h=10000-p;scanf("%ld",&b);switch(b){case 1:printf("\n转账%d元人民币成功!\n\n",p);goto loop1;break;case 0:goto loop1;break;default :printf("\n无此操作项!\n\n");goto loop1;}break;loop4:case 2:printf("请输入你选择的操作类型:\n");printf("请输入0-2进行选择:\n");printf("1:<查询余额>\t2:<查询明细>\t0:<返回>\n");scanf("%ld",&c);switch(c){case 1:printf("\n你的余额为:%5d\n\n",h);goto loop1;break;case 2:printf("\n你的账单为:******。
自动取款机(ATM)模拟程序(C#控制台应用程序)

自动取款机(ATM)模拟程序一、需求我们需要设计一个具备如下功能的ATM模拟程序。
●开户:用户能够通过ATM来开设帐号,开户需要设置密码。
●登录:用户能够登录到已经开设的帐号上,登录需要验证密码。
●管理帐号:用户登录到帐号上后,能够进行如下的操作。
■存款:将指定的款项存到帐号中。
■取款:从帐号中取出指定的款项。
■查询余额:查询帐号的余额。
■修改密码:修改帐号的密码。
二、分析面向对象编程的第一步是进行面向对象分析。
面向对象分析的目标是建立问题领域的模型,包括如下模型。
●功能模型:即画出每一个功能要求的用例图。
●对象模型:对用例模型进行分析,把系统分解成互相协作的类,通过类图/对象图描述对象、对象的属性、对象间的关系。
●动态模型:描述系统的动态行为,通过序列图来描述对象的交互,以揭示对象间如何写作来完成每个具体的用例,单个对象的状态变化和动态行为可以通过状态图来表达。
1.功能模型根据我们的需求,可以很容易地画出A TM模拟程序的用例图:可以看出,用户可以开户和登录帐号,开户或者登录帐号之后就能管理帐号。
要管理账号,就必须首先登录帐号或者开户。
管理帐号的功能包括存款、取款、查询余额和修改密码。
2.对象模型ATM是银行相连的设备,因此银行是A TM模拟程序的相关对象,所有的操作都是针对帐号的,因此帐号是其中的核心对象。
此外,需要一个程序来启动ATM。
因此,在ATM模拟程序中,我们需要处理四个类,或者说四类对象:启动程序、A TM、银行及帐号。
1)帐号类Account帐号类Account包含所有的帐号信息负责所有的帐号操作。
基本的帐号信息包括:●帐号名name●帐号密码password●帐号余额balance主要的帐号操作包括:●登录Login●存款Deposit●取款Withdraw●查询余额Get_Balance●修改密码ChangePassword2)银行类Bank银行类Bank的本质就是一组帐号的组合,并负责管理帐号。
[VIP专享]C语言课程设计…………银行自动存取款机模拟
![[VIP专享]C语言课程设计…………银行自动存取款机模拟](https://img.taocdn.com/s3/m/bcf188a987c24028905fc30d.png)
需求分析: 本程序设计的任务为银行自助存取款机,程序要求实 现 atm 机的基本功能,如 开户.查询.存款.取款.转账. 容而生成操作日志。 2.概要设计: 数据类型:int,char,FILE. 主程序流程:int main () 1:进入 dl()函数。 2:核对输入账户与密码。 3.核对成功则进入 dljm()函数。 4.选择操作功能。 5.完成操作,回到功能选择一栏。 6.可选择退卡以结束所有操作。 标准函数名称和自定义名称:
Void dl ()
Void dljm ()
int level(BinTreeNodlesevt}r*Beutsl,icnBt(rtrTuiontrcaoTetgtert,_eyapNnpetg)oy;oeN_pddinoeeodtd;fde*esreafc*ttrphsB*au{l)ti;cilrn/duh/tT;ciB/lr/tdo1eiTt;u1ea//NcnrNgoto_loiu(fdn(dtnbe*oetpivdlt{(roe(e}TbidpEititrcfrl(ero!-pbmu>tintrTvritgaey-l(>hlpbulteeie,rtrf=xdt)e,=apr{xkextta,)rt;ru{;k,kr)sd+n;tra+;u1t;ac}0txyBpieTNxv},ooidi{ndet&m*lkac)hi}nil(de)}l;s/e/ js+tr}+uj;cBf+BtoB.+Bid.r.L(;+adikTe+taanN=;t[agojB]e[tdkh=l.se+L+eA1e*+]nr.i;dfc=g(d.-[d;{aiB]1a/it;f/a.;t(dkaA[}ia[]>.kBtdB<}=a];aii.T[BLjt+;aNke.+d[Loni;-]aed-g>t)netahg,B[jt*]+h.)wBd+]{avhi;T=otilareiAedi[n(Be.i{dtm;.<Laive=etAoarngi.0[dLgie],e;jt2Ch=n(o{Sg-0ut9q1h,n/kAL])/t)/iL/[;2s1/e1AtA…aABBmf"…,.S(h+Bq"mniLT6m+irsnet8]e&mhBTen),amidn+dtn&a2Ot*acx(7o10u)n+t)0x{11*ixf=0( nT+o1)d*{ex2i_1f c(+(o!uT2/xn/-*10>tx+l2+cxh=1il;+dnx)o&2/d/h&e=tt_(pn!c:To0o//-duw>1enrw*_c2t/wchx-oi0.1ldu;xon)/)1c*t;cinx6o42.1ucleonfmtt+d/+5ap;t-a5//r7iLg9Cihs4ot8lNuet5nmof9ttdreLp4iegme.=h*ap3tMfAmBol(a[aTrTlit]ex(-;(><i2)nAlccetl[ha0i]}ise=l=ds1,0}A…Tc;[yoine2pu<-nT6ein=-yH>12tp)(]Te;v;enn[Co1-A-ti1o3m1d[u]nA)pHin-[/;in(tv-kL21]ene;]1reyais=A+)nef=[+(t-nm(k1Ta])eAT-p){y>nyA;r-p%c2eh…1iAld3e[2,1]3c,2e1oi20Vn0(u3e=bt×n4i{)n3t1a5)B0);,5b20A}{7,B(2ce[2a150,(l0)ds0cn(a20e,a)]×ie[13j1)1cnr2,a17Af2e0A4,i58g2jtB]b1u(B03}(a5r4,21[En)]06a1B;=07A51([}{0]b937S<A/3)56/HaL([06C0c,sT1b3)]uo[A.>81A0c5u,493]cBn<B0.]=taC5H[L8(0,A1De(4g]k/,Aa5>2EBef0,[)Fy,<]*4C[G)G]b[=2B1,,DHk)g+[]e>,I1AEJy,/[<(,81%C1c]-[8,a5bD1)]C>3C]B,D1<[D1]2Bd62,GFc3E>=41A,V5</1I5EdH475,Gf1231>01+0*J5,91<420G4+0e*30G241,7W1d+*787>13P031,4*9<1L74=41f=0+,515a24953>**/546,17<5+15=0g37413,2*0c5572>/4+517,5<6451*g524,0d+3>956,*5<0315f9+2,3e5W12>14P,12*<3L157g+=56,52f13053>105*693}64*1,{73+80217+9596510*77046873+1*71249264+*9503182+79012*176208590=*2092+8123169831731237*793}W2+531P352L5*0313173+s3T3125158*,21T2052=5,2…915W063…303P5,LTS Tini k1i(2i={a1b,2c,d…e…fg}S0)1,1k10in1i011k11k10n+1kk1Pn21>r+0ikm…00…11+1k0s1=0n11+n21K…ru…snkas1l ns,s=nk,nk a11a121a02K1)aru2s2kaa=2l203*:9(a1i+03/1jA2-03aB(3a131+Aa12=3B+42[…0+]3A…+a3aij1+n3inn149-+iH10-41au+jnfi84+fnm4+16a5B8n+58F1544):52=5706305306.986,2T76:0150,D811:00148110683171,F10ST6:06D413S024H515,1H12:007412101402H*1291u60+22f{f7m4*63a2+n58307*71836+21102*72306+722774*0674128+493}*()4+86*312=513219 5:13/5671(130+7822+6261+p03a1+341352+401143,41)p0=83,21a.8425,913,,p66331:121,0A1a24B13G,,CP4pJ9AD3KG21EHD12AFDaJ3GBH,EPaDHKBApGIBM3J2HEKIF1AJMCKCAEFCMFIIM
c语言银行自动存取款机模拟

C语言银行自动存取款机模拟介绍本文档将介绍如何使用C语言编写一个简单的银行自动存取款机模拟程序。
该程序可以模拟银行客户进行存款和取款操作,并实时更新账户余额。
功能此银行自动存取款机模拟程序具有以下功能:•登录功能:用户可以输入账号和密码进行登录。
•存款功能:用户可以输入存款金额进行存款,存款成功后会更新账户余额。
•取款功能:用户可以输入取款金额进行取款,取款成功后会更新账户余额。
•查询余额功能:用户可以查看账户余额。
•退出功能:用户可以选择退出程序。
程序设计数据结构在程序中,需要定义一个结构体来表示银行客户的账户信息。
每个账户包含账号、密码和余额:struct Account {int accountNumber;char password[20];double balance;};登录功能首先,用户需要输入账号和密码进行登录。
可以定义一个函数来实现登录功能:int login(struct Account *accounts, int numAccounts, int accountNumber, char *password) {for (int i = 0; i < numAccounts; i++) {if (accounts[i].accountNumber == accountNumber && strcmp(accounts[i].password, password) == 0) {return i; // 返回账号在数组中的索引}}return -1; // 登录失败,返回-1}存款和取款功能存款和取款功能可以分别定义两个函数来实现。
存款函数会增加账户余额,取款函数会减少账户余额。
```c void deposit(struct Account *account, double amount) { account->balance += amount; }void withdraw(struct Account *account, double amount) { if (account->balance >= amount) { account->balance -= amount; printf(。
ATM(自动柜员机)界面设计

项目目标
知识目标 了解函数的概念,掌握函数定义与说明的方法,掌握函数调用中参数的传递方法,掌握函数的调用方法,熟悉函数的编程与使用方法。能力目标 培养学生使用集成开发环境进行软件开发、调试的综合能力。素质目标 使学生养成良好的编程习惯,具有团结协作的团队精神,具备岗位需要的职业能力。
分析:实现ATM机上的普通功能,当进入柜员机界面后,程序由main主函数、Query查询余额函数、Get Money取款函数、Save Money存款函数和返回Return函数组成。
任务三:ATM查询功能:Query()
case '1':system("cls");puts("================================");puts("| Your Query balance is$%6d |\n",x);puts("| Press any key to return... |");puts("================================");ge务一:ATM密码验证功能:PassWord()任务二:ATM自动柜员机操作主界面任务三:ATM查询功能:Query()任务四:ATM取款功能:Get Money()任务五:ATM存款功能:Save Money()任务六:ATM退出功能:Return()
任务一:ATM密码验证功能:PassWord()
分析:使用Query语句实现查询功能。
任务四:ATM取款功能:Get Money()
case '2':do{system("cls");puts("========================");puts("| Please select GetMoney: |");puts("| 1. $100 |");puts("| 2. $200 |");puts("| 3. other |");puts("| 4. Return |");puts("========================");GetMoney = getch(); }while(GetMoney!='1'&&GetMoney!='2'&&GetMoney!='3' && GetMoney!='4');switch(GetMoney){ case '1':system("cls"); puts("======================"); puts("| Your GetMoney is $100,Thank you! |"); puts("| Press any key to return... |"); puts("======================");
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号201110214317指导教师王成仲恺农业工程学院教务处制目录1 需求分析 (1)2 系统总框图和功能模块说明 (1)2.1 系统总框图 (1)2.2 功能模块说明 (1)3 系统设计 (2)3.1 主要结构体 (2)3.2主要功能函数 (2)3.3 关键函数的流程图 (3)4 系统调试 (12)5 总结 (25)6 源程序清单 (28)6.1头文件 (28)6.2主程序 (29)6.3 解除被冻结用户 (64)6.4 用户注册 (66)1 需求分析所设计的ATM取款机应具备以下功能:●插入银行卡(用账号输入的方式代替);●密码的输入;●用户信息查询;●用户余额查询;●取款;●转账;●修改密码;●退卡。
2 系统总框图和功能模块说明2.1 系统总框图图1 系统总框图2.2 功能模块说明➢输入用户账号模块:在运行时,完成用户账号的输入(代替插卡);➢输入账号密码模块:①在输入账号之后,完成用户密码的输入;②在修改密码的过程中,完成用户输入旧密码的功能;➢信息读取功能模块:完成用户信息的读取;➢冻结账号功能模块:当输入密码3次错误时,冻结用户账号:➢查询用户信息模块:完成用户的信息查询(不包括余额查询);➢查询余额功能模块:完成用户余额的查询;➢取款功能模块:完成取款功能模块:➢转账功能模块:完成转职功能;➢修改密码功能模块:完成用户修改密码功能;➢退卡功能模块:完成退卡功能(即:退出程序功能)。
3 系统设计3.1 主要结构体用户账号、、密码、余额struct User //用户数据{char num[20]; //用户账号char name[10]; //char password[7]; //密码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 关键函数的流程图Nnow_exited 函数流程图input_password 流程图choose 函数流程图draw_money 函数流程图int i=0;打开文件printf("It cannot open !");!feof(fp)读取文件关闭文件读取文件数据函数流程input_new_password 函数流程图int i;i=0i<12产生随机数i++random[i]='\0';打开文件进行写入printf("It cannot open !");i=0i<Ui++fclose(fp);lock 函数流程图save_info 函数流程图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型函数。
所有的函数申明写好之后就可以开始细化了,首先确定所需结构体,然后就是头文件的定义,最后确定了所有函数的编写顺序。
由于这次程序设计是ATM取款机,所有要用到文件的知识,但又没学过,所以只能先停止代码的编写来学习文件的知识。
通过了两天的学习,虽然只是略学了皮毛,但是勉强看着书可以来自己新建文件并不数据存入文件中。
所有的准备工作完成后,真正的可以进行代码编写了,首先把所有的函数都编写出来(容为空),然后根据从易到难的顺序逐个功能的编写。
其顺序依次是: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 in for mation)作为后台来存储用户的信息,但这个文件存储的是所有未被冻结前和未被冻结的账号信息(即所有原始账号信息)。
而解除的方法是:先读取all user in for mation这个文件里的信息,然后把里面的信息覆盖到在前台操作的文件即可。
当用户被冻结后想解除的话只需运行这个程序即可解除冻结。
写了解除冻结账号的函数后,又想到需要写一个注册账号的程序,于是也顺利的完成了,最后,通过多次的调试,把整个程序代码给完成了。
6 源程序清单6.1头文件/*头文件:user.h*/#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <time.h>struct User //用户数据{char num[20];char name[10];char password[7];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 user[U];int f; //全局变量f 是用来记录用户下标(即哪个用户)int main(){char number[20]; //定义账号数组变量input_num(number); //调用input_num函数,输入用户账号return 0;}/*函数功能:输入用户账号*/void input_num(char num[12]){read_info(); //输入账号前先调用函数read_info读取所以用户信息,以便后面判//断账户是否存在以及密码是否正确system("cls");printf("\n\n\n\n\n\n\n\n\t\t请输入您的账号:");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(&user[i],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, user[i].num ) ) //匹配用户{s=1;f=i; //如果用户存在则跳出循环,并用变量f记录用户下标,以便后面使用。