C语言程序设计报告(模拟ATM取款机)
C自动取款机ATM课程设计报告解读
成绩:洛阳师范学院2013-2014 学期《C + +语言程序设计》课程设计报告设计名称:模拟自动取款机 ATM姓 名黄双双 学 号: 131124001 专业班级: 网络工程 学 院: 信息技术学院设计时间: 2014年6月设计地点: 宿舍指导教师评语:指导教师签字: _______________年 月 日1•课程设计目的 ............................................................... 3 2•课程设计任务与要求 ......................................................... 3 3•课程设计说明书 . (4)4•课程设计成果 (6)5•程序调试过程 (18)6•设计问题的不足和改进方案 (18)7•课程设计心得 (19)8•参考文献201 .课程设计目的《C++语言程序设计》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。
目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。
2. 课程设计任务与要求:3. 课程设计说明书⑴概要设计本案例涉及一个银行卡和ATM机之间的“对话”。
需要处理两个对象,即:ATM和银行卡,因此可以考虑定义两个类来解决这个问题。
(1)ATM机类:有“单笔取款最高限制”、“每日取款总金额限制”、“金额”等基本属性。
需要实现:“核对密码”、“修改密码”、“取款”、“查询信息”、“退出系统”、“锁机吞卡”等功能。
可以将这些操作定义为ATM 机类的成员函数。
(2)银行卡类:具有“用户姓名”、“用户密码”、“存款额”等特征。
需要实现“身份验证” 、“查询余额”、“修改密码”、“交易成功更改余额”等操作。
c模拟取款机课程设计
c 模拟取款机课程设计一、课程目标知识目标:1. 学生能够理解ATM机的基本工作原理和功能操作流程;2. 学生能够掌握运用编程语言进行ATM机模拟程序的设计;3. 学生能够运用基本的数学运算实现账户余额的查询、取款和存款功能。
技能目标:1. 学生能够运用所学知识,独立设计并编写一个简单的ATM取款机模拟程序;2. 学生能够通过编程解决实际问题,提高逻辑思维和问题解决能力;3. 学生能够通过团队协作,共同完成项目任务,提高沟通与协作能力。
情感态度价值观目标:1. 学生能够认识到编程在生活中的实际应用,增强学习信息技术的兴趣;2. 学生能够在项目实践中体会团队合作的重要性,培养合作精神;3. 学生能够通过解决实际问题,认识到学习知识可以改善生活,提高社会责任感。
分析课程性质、学生特点和教学要求,本课程旨在帮助学生在掌握ATM机基本知识的基础上,运用编程技能实现模拟程序的设计,培养学生解决实际问题的能力。
课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果,为后续的教学设计和评估提供依据。
二、教学内容1. 理论知识:- 了解ATM机的基本功能及其工作原理;- 学习编程语言的基本语法和结构;- 掌握条件语句、循环语句和函数的定义与使用。
2. 实践操作:- 设计并编写ATM机模拟程序;- 实现账户余额查询、取款、存款和退出功能;- 学习调试程序,解决编程过程中遇到的问题。
3. 教学大纲:- 第一周:ATM机基本功能介绍,学习编程语言基础;- 第二周:编写ATM机模拟程序,实现查询余额和取款功能;- 第三周:实现存款和退出功能,学习调试程序;- 第四周:项目展示与评价,总结反馈。
4. 教材章节:- 《信息技术》第三章:程序设计基础;- 《信息技术》第四章:算法与程序设计。
教学内容根据课程目标进行选择和组织,保证科学性和系统性。
教学大纲明确了教学内容的安排和进度,确保学生在学习过程中逐步掌握所需知识,为实践操作打下坚实基础。
C语言专周ATM模拟系统
C语言专周——ATM模拟系统实验报告指导老师:班级:学号:姓名:时间:一、实验目的:通过专周的学习和实践,认识到C语言是以函数为模块,让学生掌握基本常用的编程语句和方法,培养学生的动手能力,让学生在实践当中发现问题,解决问题,以及认识到自己的不足并且能够及时改正,从而起到提高学生水平的作用。
二、实验要求:1、要用函数调用语句;2、每执行完余额查询、密码修改、取款、转账要有是否继续语句;3、写出完整的ATM机运行程序;4、完成实验报告三、实验环境:编写程序的地方是学校的学生机房;所运用的编写软件是VC++6.0;四、程序的总体框架图ATM机系统余额查询密码修改取款转账五、部分模块流程图定义帐号密码佘额 r=0输入账号A判断账号是否正确 输入密码判断密码是否正确退出系统开始YESNO主函数:NOYES调用f1函数 调用f2函数调用f3函数 调用f4函数判断是否继续YES退出系统NOr++判断r 是否为3NO退出系统YES输出选择的语句调入佘额判断佘额是否为0调用f0看返回值是否为0调用f5进行返回佘额调用f0看返回值是否为0调用f0看返回值是否为0调用f5进行返回佘额调用f5进行返回佘额YESNO765 判断取款是否为50和100的倍数NONONOYESYES YESYES返回佘额NO取款函数:退出系统…………输出选择输入金额输出输入的金额不正确调入帐号佘额定义b 为当前帐号对应的佘额转账函数:判断输入的帐号是否为当前帐号YESNO判断输入的帐号是否存在YESNO判断2次输入的帐号是否相同YES输入转帐金额,调用f5函数进行佘额的返回判断返回的金额是否变化返回佘额YESNO输入帐号输出不能给自己转账输出确认对方帐号输出帐号错误输出两次帐号不一致输出转帐成功六、程序和对程序的具体分析 :#include <stdio.h> #include <stdlib.h> void f1(int a); int f2(int a);int f5(int g,int a); int f3(int g); int f0(int n); int m,q,w=0;int f4(int a0,int a1,int a2,int a3,int a4,int c0,int c1,int c2,int c3,int c4,int p,int a);void main () {int a[5]= {123451,123452,123453,123454,123455}; int b[5]={123451,123452,123453,123454,123455}; int c[5]={50000,50000,50000,50000,50000};int i,j;m=0; \*m 为控制运行一次程序取钱不超过20000的变量*\ printf("欢迎使用A**\n 进入系统请输入帐号\n");调入密码判断密码是否为六位数确认新密码密码修改函数:判断两次是否一致密码变为输入的值,输出密码修改成功返回密码YESYESNONO输入新密码输入密码错误(由于写标准的流程图不好写且对读程序的帮助不大,所以写成通俗的流程图)两次输入不一致scanf("%d",&i);int p;for(p=0;p<5;p++)if(i==a[p])break;if(p==5)exit(0); \*从for到这是找到帐号对应的a[]假如p会为5则退出*\int r=0; \*r是控制输入错误密码次数*\loop3: if(r==3) \*当r==3时为已输入错误密码3次退出糸统*\exit (0);elseprintf("请输入密码\n");scanf("%d",&j);if(j==b[p]) \*输入的密码正确执行下面语句*\{loop1: printf("************************************************\n1 查询余额\n2 密码修改\n3 取款\n4 转账\n************************************************\n"); scanf("%d",&i);switch(i){case 1:f1(c[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1; \*执行完f1后看是否继续(下一样)*\elseexit (0);case 2:b[p]=f2(b[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);case 3:c[p]=f3( c[p]);printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);case 4:c[p]=f4(a[0],a[1],a[2],a[3],a[4],c[0],c[1],c[2],c[3],c[4],a[p],c[p]);{for(j=0;j<5;j++) \* w是全局变量初值为0当执行f4后要是转帐成功后,为转入钱 if(a[j]==w) 的帐号for语句为找到帐号对应的余额*\c[j]=c[j]+q;}printf("\n是否继续?是请按0 不是请按1\n");scanf("%d",&i);if(i==0)goto loop1;elseexit (0);default:exit(0);}}else {r++;goto loop3;} \*当密码错误时r+1返回loop3*\}void f1(int a) \*查询余额*\{printf("您的当前余额是:%d",a);}int f2(int a) \*密码修改*\{int b,c;printf("请输入新密码\n");scanf("%d",&b);if(b<=999999&&b>=100000&&b!=a) \*密码要六位且首位不为0*\printf("确认新密码\n" );else{printf("输入新密码错误\n");goto loop2;}scanf("%d",&c);if(b!=c){printf ("密码错误!!!!\n两次输入的密码不同");loop2: return a;}else{printf ("密码修改成功\n");return b;}}int f5(int g,int a) \*钱额的减*\{{g=g-a;printf("交易成功!!!");}elseif(a==0)printf("输入错误\n");elseprintf("余额不足!!!!!");return g;}int f3(int g) \*取款*\{if(g==0){printf("余额为0!!!!!");return g;}int i,j;printf("**************************************************************\n");printf("1是100, 2是200, 3是300, 4是500, 5是1000, 6是2000, 7是其他金额\n");printf("**************************************************************\n");scanf("%d",&i);if(i==1){if(f0(100))return g;else \*取钱时先看取钱总是否超过20000,g=f5(g,100); 超过进行返回佘额,不运行f5佘额的减*\}else if(i==2){if(f0(200))return g;elseg=f5(g,200);}else if(i==3){if(f0(300))return g;elseg=f5(g,300);}else if(i==4){if(f0(500))return g;elseg=f5(g,500);}else if(i==5){if(f0(1000))return g;elseg=f5(g,1000);}else if(i==6){if(f0(2000))return g;elseg=f5(g,2000);}else if(i==7){printf("请输入金额");scanf("%d",&j);if(j%50==0&&j<=g&&j<=5000){if(f0(j))return g;elseg=f5(g,j);}elseprintf("\n您输入的金额不正确\n ");return g;}elseexit (0);return g;}int f0(int n) \*控制运行一次程序取钱不超过20000,超过20000返回为1,不{ 超过20000返回为0*\int x=0;m=m+n;if(m>20000){printf("取钱不能超过20000!!!!!");x=1;}return x;}int f4(int a0,int a1,int a2,int a3,int a4,int c0,int c1,int c2,int c3,int c4,int p,int a) \* 转账*\{int i,j,b=a,k;printf("请输入对方帐号");scanf("%d",&i);if(i==p)printf("不能给自己转账"); \*先排除给自己转账*\else{if(i==a0||i==a1||i==a2||i==a3||i==a4){printf("再次确认对方帐号");scanf("%d",&j);if(j==i){printf("输入转账金额\n");scanf("%d",&q);a=f5(a,q);if(a!=b){w=j;printf("转账成功\n");} \* w为全局变量,当a不等于b时为转账成功w变为转入的帐号*\}elseprintf("两次帐号不一致\n");}elseprintf("帐号错误");}return a;}实验心得:这次专周使我更加明白C语言特点是以函数为模块和学会了怎样编大型程序的方法,一开始我一下子编了一大堆和序出来然后进行调试,发现一大堆错误,后来不知怎搞的把程序搞没了,我下午来的时候只能重新编。
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语言课程设计自动取款机
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语言课程设计…………银行自动存取款机模拟
printf("log in successfully,please select operation\n");
fprintf(fg,"log in successfully,please select operation\n");
dljm();Biblioteka break;}else
{
printf("password input error\n");
printf("enter password again!");
fprintf(fg,"password input error\n");
fprintf(fg,"enter password again!\n");
scanf("%d",&password);
fprintf(fg,"%d\n",password);
{fputs(b,fp);
fclose(fp);}
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力通根保1据过护生管高产线中工敷资艺设料高技试中术卷资0配不料置仅试技可卷术以要是解求指决,机吊对组顶电在层气进配设行置备继不进电规行保范空护高载高中与中资带资料负料试荷试卷下卷问高总题中体2资2配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,卷.编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试写5交、卷重底电保要。气护设管设装备线备置4高敷、调动中设电试作资技气高,料术课中并3试、中件资且卷管包中料拒试路含调试绝验敷线试卷动方设槽技作案技、术,以术管来及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内 故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
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语言课程设计…………银行自动存取款机模拟
需求分析: 本程序设计的任务为银行自助存取款机,程序要求实 现 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("======================");
c语言程序设计课程设计atm
c语言程序设计课程设计atm一、教学目标本课程的目标是让学生掌握C语言程序设计的基本知识和技能,能够运用C语言编写简单的ATM(自动柜员机)模拟程序。
通过本课程的学习,学生应达到以下具体目标:1.知识目标:•理解C语言的基本语法和数据类型;•掌握函数的定义和调用;•了解结构体和指针的概念;•理解文件操作的基本方法。
2.技能目标:•能够使用C语言编写简单的程序;•能够运用结构体和指针处理复杂的数据结构;•能够进行文件的操作和管理;•能够运用C语言实现ATM的基本功能。
3.情感态度价值观目标:•培养学生的编程兴趣和自主学习能力;•培养学生解决问题的能力和团队合作精神;•培养学生对计算机科学的热爱和追求卓越的态度。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.C语言基础:介绍C语言的基本语法和数据类型,包括变量、常量、运算符、控制语句等。
2.函数和编程结构:讲解函数的定义和调用,包括主函数、参数传递、返回值等,以及顺序结构、选择结构和循环结构的使用。
3.数据结构和指针:介绍结构体的概念和使用方法,讲解指针的定义和运用,包括指针的声明、指针的运算、指针与数组、指针与函数等。
4.文件操作:讲解文件的基本操作方法,包括文件的打开、关闭、读写等。
5.ATM模拟程序:通过综合运用前面的知识,编写一个简单的ATM模拟程序,包括账户管理、存取款操作、查询余额等功能。
三、教学方法为了达到课程目标,本课程将采用多种教学方法,包括:1.讲授法:通过教师的讲解,让学生掌握C语言的基本语法和数据类型,以及函数、结构体和文件操作等相关知识。
2.案例分析法:通过分析典型的ATM模拟程序案例,让学生理解并掌握如何运用C语言实现ATM的基本功能。
3.实验法:通过上机实验,让学生动手编写C语言程序,培养学生的编程能力和问题解决能力。
4.小组讨论法:通过小组合作讨论,让学生分享学习心得和解决问题的经验,培养学生的团队合作精神和沟通能力。
C语言程序设计报告(模拟ATM取款机)
仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号 4317指导教师王成仲恺农业工程学院教务处制目录1 需求分析........................................................... 错误!未定义书签。
2 系统总框图和功能模块说明........................................... 错误!未定义书签。
系统总框图...................................................... 错误!未定义书签。
功能模块说明.................................................... 错误!未定义书签。
3 系统设计........................................................... 错误!未定义书签。
主要结构体....................................................... 错误!未定义书签。
主要功能函数...................................................... 错误!未定义书签。
关键函数的流程图................................................. 错误!未定义书签。
4 系统调试........................................................... 错误!未定义书签。
5 总结............................................................... 错误!未定义书签。
6 源程序清单......................................................... 错误!未定义书签。
C语言ATM程序设计
..C语言程序实践实验报告. .word.zl.一、实验目的1.函数的调用2.构造体的使用3.文件的应用:翻开、关闭、输入、输出等4.宏定义二、实验容与实验步骤实验容、原理分析1.给出数据构造或函数定义构造体:struct clients{long int card_number,card_password;char name[20];float money;}yonghu[3];card_number:银行卡号card_password:密码name:用户名money:卡金额自定义函数:void fuction(float,int);用于登陆后的操作2.用流程图表示出来程序设计的思想3.给出具体实验步骤#include <stdio.h>#include <stdlib.h>#define N 3 /*用户人数*/struct clients{long int card_number,card_password;char name[20];float money;}yonghu[N];FILE *fp;int i;void fuction(float,int);void main(){int j,number,password,times1=3,times2=3;printf(" 欢送使用中国建立银行自动取款机!\n");fp = fopen("clients.txt","a+");if(getw(fp)==EOF){printf("用户文件未设置!\n");for(i=0;i<N;i++) /*文件不存在时,输入用户信息*/{printf("请输入第%d位用户的信息:\n",i+1);printf("银行卡号密码用户名卡金额\n");scanf("%d %d %s %f",&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yo nghu[i].money);if(i==1){while((yonghu[i].card_number==yonghu[i-1].card_number)||(yonghu[i].card_password==yonghu[i-1].card_password)){printf("输入信息有重复!请重新输入\n");printf("请输入第%d位用户的信息:\n",i+1);printf("银行卡号密码用户名卡金额\n");scanf("%d %d %s %f",&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yo nghu[i].money);}}if(i==2){while((yonghu[i].card_number==yonghu[i-1].card_number)||(yonghu[i].card_password==yonghu [i-1].card_password)||(yonghu[i].card_number==yonghu[i-2].card_number)||(yonghu[i].card_passw ord==yonghu[i-2].card_password)){printf("输入信息有重复!请重新输入\n");printf("请输入第%d位用户的信息:\n",i+1);printf("银行卡号密码用户名卡金额\n");scanf("%d %d %s %f",&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yo nghu[i].money);}}fprintf(fp,"%d %d %s %f",yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yon ghu[i].money);putc('\n',fp);}}fclose(fp);printf("\n\n 请登录系统\n"); /*登录系统,输入卡号和密码*/printf("请输入您的银行卡号:\n");scanf("%d",&number);printf("请输入您的密码:\n");scanf("%d",&password);fp = fopen("clients.txt","r+");for(i=0;i<N;i++){fscanf(fp,"%d %d %s %f",&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yonghu[i].money);}fclose(fp);for(i=0;i<N;i++)/*判断卡号及密码是否匹配*/{if((number!=yonghu[0].card_number)&&(number!=yonghu[1].card_number)&&(number!=yongh u[2].card_number)){if((times1-1)!=0){printf("该用户不存在!您还有%d次尝试时机\n",times1-1);printf("请输入您的银行卡号:\n");scanf("%d",&number);printf("请输入您的密码:\n");scanf("%d",&password);i=-1;}else{printf("尝试失败!请按任意键退出:\n");exit(0);}times1--;}else{if(number==yonghu[i].card_number){if(password==yonghu[i].card_password){printf(" %s登陆成功!请继续您的操作\n",yonghu[i].name);j=i;i=5;/*登陆成功,退出循环*/}else{if((times2-1)!=0){printf("密码输入错误!您还有%d次尝试时机\n",times2-1);printf("请输入您的密码:\n");scanf("%d",&password);i=-1;}else{printf("尝试失败!请按任意键退出:\n");exit(0);}times2--;}}}}fuction(yonghu[j].money,j);}void fuction(float m,int k){float saved_money,fetched_money,payment;int phone_num,x,old_password,new_password;while(1){printf("1.存款.\n2.取款.\n3.充话费.\n4.修改密码.\n5.显示菜单.\n0.退出系统.\n");scanf("%d",&x);switch(x){case 0:printf("退出系统!");exit(0);case 1:printf("卡金额: %f\n",m);printf("请输入存款金额:\n");scanf("%f",&saved_money);while(saved_money<0){printf("输入有误!请重新输入!\n");printf("请输入存款金额:\n");scanf("%f",&saved_money);}m += saved_money;printf("操作成功!卡余额为: %f\n",m);yonghu[k].money = m;fp = fopen("clients.txt","w+");for(i=0;i<N;i++){fprintf(fp,"%d %d %s %f",yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yon ghu[i].money);putc('\n',fp);}fclose(fp);break;case 2:printf("卡金额: %f\n",m);printf("请输入取款金额:\n");scanf("%f",&fetched_money);m -= fetched_money;while((fetched_money<0)||(m<0)){printf("输入有误!请重新输入!\n");m += fetched_money;printf("请输入取款金额:\n");scanf("%f",&fetched_money);m -= fetched_money;}printf("操作成功!卡余额为: %f\n",m);yonghu[k].money = m;fp = fopen("clients.txt","w+");for(i=0;i<N;i++){fprintf(fp,"%d %d %s %f",yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yon ghu[i].money);putc('\n',fp);}fclose(fp);break;case 3:printf("卡金额: %f\n",m);printf("请输入:\n");scanf("%d",&phone_num);printf("请输入所交话费金额:\n");scanf("%f",&payment);m -= payment;while((payment<0)||(m<0)){printf("输入有误!请重新输入!\n");m += payment;printf("请输入所交话费金额:\n");scanf("%f",&payment);m -= payment;}printf("操作成功!卡余额为: %f\n",m);yonghu[k].money = m;fp = fopen("clients.txt","w+");for(i=0;i<N;i++){fprintf(fp,"%d %d %s %f",yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yon ghu[i].money);putc('\n',fp);}fclose(fp);break;case 4:while(1){printf("请输入原密码:\n");scanf("%d",&old_password);if(old_password==yonghu[k].card_password){printf("请输入新密码:\n");scanf("%d",&new_password);printf("密码修改成功!\n");yonghu[k].card_password = new_password;fp = fopen("clients.txt","w+");for(i=0;i<N;i++){fprintf(fp,"%d %d %s %f",yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yon ghu[i].money);putc('\n',fp);}fclose(fp);break;}elseprintf("密码输入错误!\n");}break;case 5:break;default:printf("输入有误!请重新输入!\n");break;}}}三、实验过程与结果分析1.现象:输入用户信息后,在登录系统时,输入第一个用户的信息,提示该用户不存在解决方法:fp = fopen("clients.txt","r+");for(i=0;i<N;i++){fscanf(fp,"%d %d %s %f",&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name, &yonghu[i].money);}fclose(fp);2.现象:登录系统时,输入卡号或密码超过3次错误后,仍能输入解决方法:增加变量times1=3〔卡号输入错误的次数〕,times2=3〔密码输入错误的次数〕,当times-1>0时,提示剩余尝试时机,当times-1=0时,退出程序3.现象:存取款或充话费时,输入负数仍能运行解决方法:增加循环:while(saved_money<0){printf("输入有误!请重新输入!\n");printf("请输入存款金额:\n");scanf("%f",&saved_money);}while((fetched_money<0)||(m<0)){printf("输入有误!请重新输入!\n");m += fetched_money;printf("请输入取款金额:\n");scanf("%f",&fetched_money);m -= fetched_money;}while((payment<0)||(m<0)){printf("输入有误!请重新输入!\n");m += payment;printf("请输入所交话费金额:\n");scanf("%f",&payment);m -= payment;}四、实验结果总结五、创新的局部1.输入用户信息时,卡号与密码不可重复2.登录系统时,如果卡号或密码输入错误达三次,那么自动退出程序3.为手机充话费时,要求输入..4.存款、取款、充话费时,输入钱数不能为负数,且当取款或充话费的金额超过卡余额时,制止此操作5.增加了修改密码的功能六、对实验的意见与建议1.心得体会:实验过程中应反复调试,不断发现问题,解决问题2.缺乏:输入用户信息或输入x值时,如果格式不正确,就会陷入死循环. .word.zl.。
C语言模拟ATM提款机
C语言模拟ATM提款机1.运用结构体2.运用文件调用源代码:#include "stdio.h"#include "stdlib.h"#include "conio.h"#define N 200void zhanghao(); //账号void xuanzhe(); //选择函数void enter_ATM(); //账号输入函数void input_code(); //密码输入函数void caozuo(); //基本操作界面void qukuan(); //取款函数void success(); //操作成功函数void delay(); //延时函数void YU_E(); //余额查询函数void cunkuan(); //存款函数void panduan(double z); //判断取款是否合法函数void exit(); //退出界面函数void mima(); //密码修改void zhuanzhang(); //转账函数void read(); //文件写入函数void write(); //文件读取函数void guanli(); //管理员函数void tequancode(); //管理员密码void hu(); //户void xinxi(); //信息void gmima(); //管理员改密void CAOZUO(); //管理员操作函数void yinghang(); //银行账户查询函数void jia(); //账户添加函数void shanchu(); //账户删除函数typedef struct{long int zhanghao;int mima;double yu_e;}atm;atm guan[N];int k;////////////////////////////////////////////////////////////主函数void main(){xuanzhe();}////////////////////////////////////////////////////////////功能选择函数void xuanzhe(){system("cls");printf("* 请选择功能*\n");printf("* 1.管理员 2.用户*\n");switch(getch()){case '1':tequancode();break;case '2':enter_ATM();break;default:{printf("\a非法输入");delay();system("cls");xuanzhe();};break;}}///////////////////////////////////////////////////////////柜台机账号输入函数void enter_ATM(){delay();system("cls");read();printf("* 欢迎使用ATM 柜台机*\n");printf("* 请输入卡号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误*\n");enter_ATM();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))input_code( );}system("cls");printf("* 账户不存在,请从新输入*\n");enter_ATM();}elseinput_code( );}////////////////////////////////////////////////////////////////密码输入函数void input_code( ){long int code;int temp=3;read();system("cls");printf("* 请输入密码*\n");scanf("%d",&code);while(code!=guan[k].mima){temp--;system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);if(temp==1){system("cls");printf("* 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();enter_ATM();}}caozuo();}//////////////////////////////////////////////////////////////////主操作界面函数void caozuo( ){system("cls");printf("********************************\n");printf("* 1.修改密码*\n");printf("* 2.查询余额*\n");printf("* 3.取款*\n");printf("* 4.存款*\n");printf("* 5.转账*\n");printf("* 6.退出*\n");printf("********************************\n");switch(getch( )){case '1': mima(); break;case '2': YU_E(); break;case '3': qukuan(); break;case '4': cunkuan(); break;case '5': zhuanzhang();break;case '6': exit(); break;default:{printf("\a非法操作\n");caozuo();};}}//////////////////////////////////////////////////////////////////////密码修改函数void mima(){long int mm1,mm2,mm3;int temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();mima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");delay();mima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );mima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );mima();}if(mm3=mm2){guan[k].mima=mm3;write();success();}}////////////////////////////////////////////////////////////////////余额查询函数void YU_E(){read();system("cls");printf("你的余额为:%lf\n",(guan[k].yu_e));printf("1.返回 2.退出\n");switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}/////////////////////////////////////////////////////////////////////////取款函数void qukuan(){double temp;system("cls");printf(" 请选择您要取款的金额\n");printf(" 1.100 2.200 \n");printf(" 3.500 4.800 \n");printf(" 5.1000 6.其它\n");printf(" \n");printf(" 7.返回8.退出\n");switch(getch()){case '1': panduan(100); break;case '2': panduan(200); break;case '3': panduan(500); break;case '4': panduan(800); break;case '5': panduan(1000); break;case '6':system("cls");printf("请输入您要取款的金额:");scanf("%lf",&temp);panduan(temp); break;case '7':caozuo(); break;case '8':exit(); break;}}///////////////////////////////////////////////////////////////////判断取款是否合法函数void panduan(double z){int beishu;if(z>(guan[k].yu_e)){system("cls");printf(" 余额不足!\n");printf(" 请重新操作\n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}beishu=(int)z%100;if(beishu!=0){system("cls");delay( );printf(" 本ATM机只支持100 的人民币\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}if(z==5000.00||z>5000.00){system("cls");printf(" 每次取款不能超过5000 元\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}(guan[k].yu_e)-=z;write();success();}/////////////////////////////////////////////////////////////////存款函数void cunkuan( ){double cun;system("cls");printf(" 请放入人民币:");scanf("%lf",&cun);while(cun<0){system("cls");printf(" 非法存款\n");printf(" 请重新放入人民币\n");scanf("%lf",&cun);}(guan[k].yu_e)+=cun;write();success();}/////////////////////////////////////////////////////////////////转账号函数void zhuanzhang(){int i,hao;double money;long int a=2109999999;system("cls");delay();read();printf("* 请输入账号*\n");scanf("%d",&hao);printf("* 请输入金额*\n");scanf("%lf",&money);if(hao<1000000000||hao>a){printf("* 账号错误,操作取消*\n");delay();delay();caozuo();}else if(money>guan[k].yu_e||money<0){printf("* 金额错误,操作取消*\n");delay();delay();caozuo();}else{read();for(i=1;i<N;i++){if(guan[i].zhanghao==hao)break;}guan[k].yu_e-=money;guan[i].yu_e+=money;write();success();}}///////////////////////////////////////////////////////延时函数void delay( ){long int bl1;int bl2;for(bl1=600000;bl1>0;bl1--){for(bl2=300;bl2>0;bl2--);}}/////////////////////////////////////////////////操作成功函数void success( ){system("cls");printf(" 操作已成功\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1':caozuo(); break;case '2':exit(); break;}}//////////////////////////////////////////////系统退出函数void exit(){system("cls");printf("* 欢迎您的再次使用*\n");printf("* 系统正在退出... *\n");delay();xuanzhe();}////////////////////////////////////////////////////文件读取函数void read(){int i;FILE *fp;fp=fopen("xinxi.txt","r");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fscanf(fp,"%d ",&(guan[i].zhanghao));fscanf(fp,"%d ",&(guan[i].mima));fscanf(fp,"%lf\n",&(guan[i].yu_e));}fclose(fp);}/////////////////////////////////////////////////////////////文件写入函数void write(){int i;FILE *fp;fp=fopen("xinxi.txt","w");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fprintf(fp,"%d ",guan[i].zhanghao);fprintf(fp,"%d ",guan[i].mima);fprintf(fp,"%lf\n",guan[i].yu_e);}fclose(fp);}void tequancode( ){long int code;int temp=2;read();system("cls");printf("* 请输入管理员密码*\n");scanf("%d",&code);while(code!=guan[0].mima){system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);temp--;if(temp==0){system("cls");printf("*\a 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();xuanzhe();}}guanli();}////////////////////////////////////////////////////////////////管理员函数void guanli(){system("cls");delay();printf("* 1.信息查询*\n");printf("* 2.操作*\n");printf("* 3.退出*\n");switch(getch()){case '1':zhanghao();break;case '2':CAOZUO();break;case '3':exit();break;default:{printf("\a非法操作");guanli();};}}/////////////////////////////////////账号void zhanghao(){system("cls");read();printf(" 请输入账号\n");long int user;scanf("%d",&user);if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))hu();}system("cls");printf("* 账户不存在,请从新输入*\n");delay();guanli();}else{delay();hu( );}}////////////////////////////////////////////////账户void hu(){system("cls");printf("* 1.信息 2.改密码*\n");printf("* 3.返回 4.退出*\n");switch(getch()){case '1':xinxi();break;case '2':gmima();break;case '3':zhanghao();break;case '4':guanli();break;default:{printf("\a非法操作\n");hu();};}}///////////////////////////////////////////////信息void xinxi(){system("cls");read();printf("*账号密码余额*\n");printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf \n",guan[k].yu_e);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':hu();break;case '2':guanli();break;}}///////////////////////////////////////////管理员改密void gmima(){long int mm1,mm2,mm3;char temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();gmima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入!\n");delay();gmima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );gmima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );gmima();}if(mm3=mm2){guan[k].mima=mm3;write();hu();}}///////////////////////////////////////////管理员操作函数void CAOZUO(){system("cls");delay();printf("* 1.查询所有账户*\n");printf("* 2.添加账户*\n");printf("* 3.删除账户*\n");printf("* 4.返回 5.退出*\n");switch(getch()){case '1':yinghang();break;case '2':jia();break;case '3':shanchu();break;case '4':guanli();break;case '5':xuanzhe();break;default:{printf("\a非法操作\n");CAOZUO();};}}//////////////////////////////////////////银行账户查询函数void yinghang(){system("cls");delay();read();printf("*账号密码余额*\n");for(;k<N;k++){if(guan[k].zhanghao!=0&&guan[k].zhanghao>0){printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf\n",guan[k].yu_e);}}printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}//////////////////////////////////////////账户添加函数void jia(){int mm1,mm2;int temp;system("cls");delay();read();printf("* 请输入密码*\n");scanf("%d",&mm1);if(mm1<100000||mm1>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入: \n");delay();scanf("%d",&mm1);}temp=mm1%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入: \n");delay( );scanf("%d",&mm1);}printf("\n");printf("确认密码:\n");scanf("%d",&mm2);if(mm1!=mm2){system("cls");printf("确认密码不一致,操作取消\n");delay( );CAOZUO();}if(mm1=mm2){for(;k<N;k++){if(guan[k].zhanghao==0){guan[k].zhanghao=guan[k-1].zhanghao+1;guan[k].mima=mm2;write();break;}}printf("账号创建成功!\n");printf("您的账号是%d,请妥善保管!\n",guan[k].zhanghao);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}/////////////////////////////////////////账户删除函数void shanchu(){system("cls");delay();read();printf("* 请输入账号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误,操作取消*\n");CAOZUO();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao)){for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}system("cls");printf("* 账户不存在*\n");delay();CAOZUO();}else{for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}。
c语言模拟ATM机程序
case 4: Xiugai(&a[6]);break;
case 5: Cunkuan(&Y);break;
case 6: exit(0);break;
default:printf("输入错误,请重新输入\n");
}
lp2:printf("继续操作请按1,退卡请按2\n");
else
{printf("非法操作,强制退出\n");
}
}
void Qukuan()
{
int i,j;
printf("1、100\t2、200\t3、500\t4、800\t5、请输入金额\n");
scanf("%d",&i);
switch(i)
{
case 1: panduan(100);break;
printf请选择服务项目n1取款t2查询服务t3转账服务t4修改密码t5存款t6退卡n
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
long int Y=100000;int c=0;char a[6]={'1','2','3','4','5','6'};
else
lp4:{
printf("请输入新密码:\n");
k=getch();
while(k!='\r'&&l<6)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仲恺农业工程学院工程实训报告ATM取款机课程名称C语言程序设计工程实训姓名林少烈院(系)计算机科学与工程学院专业班级计算机113班学号************指导教师王成仲恺农业工程学院教务处制目录1 需求分析 (1)2 系统总框图和功能模块说明 (1)2.1 系统总框图 (1)2.2 功能模块说明 (1)3 系统设计 (2)3.1 主要结构体 (2)3.2主要功能函数 (2)3.3 关键函数的流程图 (3)4 系统调试 (11)5 总结 (21)6 源程序清单 (23)6.1头文件 (23)6.2主程序 (23)6.3 解除被冻结用户 (40)6.4 用户注册 (41)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记录用户下标,以便后面使用。