您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言ATM程序设计
C语言程序实践实验报告姓名学号班级指导教师开设学期开设时间实验题目自动取款机程序设计实验日期评定成绩评定人签字评定日期(C语言)实验报告第2页共18页一、实验目的1.函数的调用2.结构体的使用3.文件的应用:打开、关闭、输入、输出等4.宏定义二、实验内容与实验步骤实验内容、原理分析1.给出数据结构或函数定义结构体:structclients{longintcard_number,card_password;charname[20];floatmoney;}yonghu[3];card_number:银行卡号card_password:密码name:用户名money:卡内金额自定义函数:voidfuction(float,int);用于登陆后的操作2.用流程图表示出来程序设计的思想开始(C语言)实验报告第3页共18页用户文件是否存在创建文件输入用户信息信息是否重复输入卡号和密码输入信息是否正确错误是否超过三次输入1输入2输入3输入4输入5输入其他输入0存款取款充话费显示菜单修改密码输入错误结束(C语言)实验报告第4页共18页3.给出具体实验步骤#includestdio.h#includestdlib.h#defineN3/*用户人数*/structclients{longintcard_number,card_password;charname[20];floatmoney;}yonghu[N];FILE*fp;inti;voidfuction(float,int);voidmain(){intj,number,password,times1=3,times2=3;printf(欢迎使用中国建设银行自动取款机!\n);fp=fopen(clients.txt,a+);if(getw(fp)==EOF){(C语言)实验报告第5页共18页printf(用户文件未设置!\n);for(i=0;iN;i++)/*文件不存在时,输入用户信息*/{printf(请输入第%d位用户的信息:\n,i+1);printf(银行卡号密码用户名卡内金额\n);scanf(%d%d%s%f,&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yonghu[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,&yonghu[i].money);}}if(i==2){while((yonghu[i].card_number==yonghu[i-1].card_number)||(yonghu[i].card_password==yong(C语言)实验报告第6页共18页hu[i-1].card_password)||(yonghu[i].card_number==yonghu[i-2].card_number)||(yonghu[i].card_password==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,&yonghu[i].money);}}fprintf(fp,%d%d%s%f,yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yonghu[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+);(C语言)实验报告第7页共18页for(i=0;iN;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;iN;i++)/*判断卡号及密码是否匹配*/{if((number!=yonghu[0].card_number)&&(number!=yonghu[1].card_number)&&(number!=yonghu[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);(C语言)实验报告第8页共18页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(C语言)实验报告第9页共18页{printf(尝试失败!请按任意键退出:\n);exit(0);}times2--;}}}}fuction(yonghu[j].money,j);}voidfuction(floatm,intk){floatsaved_money,fetched_money,payment;intphone_num,x,old_password,new_password;while(1){printf(1.存款.\n2.取款.\n3.充话费.\n4.修改密码.\n5.显示菜单.\n0.退出系统.\n);scanf(%d,&x);switch(x){case0:printf(退出系统!);(C语言)实验报告第10页共18页exit(0);case1:printf(卡内金额:%f\n,m);printf(请输入存款金额:\n);scanf(%f,&saved_money);while(saved_money0){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;iN;i++){fprintf(fp,%d%d%s%f,yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yonghu[i].money);putc('\n',fp);}fclose(fp);break;case2:printf(卡内金额:%f\n,m);(C语言)实验报告第11页共18页printf(请输入取款金额:\n);scanf(%f,&fetched_money);m-=fetched_money;while((fetched_money0)||(m0)){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;iN;i++){fprintf(fp,%d%d%s%f,yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yonghu[i].money);putc('\n',fp);}fclose(fp);break;case3:printf(卡内金额:%f\n,m);printf(请输入电话号码:\n);(C语言)实验报告第12页共18页scanf(%d,&phone_num);printf(请输入所交话费金额:\n);scanf(%f,&payment);m-=payment;while((payment0)||(m0)){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;iN;i++){fprintf(fp,%d%d%s%f,yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yonghu[i].money);putc('\n',fp);}fclose(fp);break;case4:while(1)(C语言)实验报告第13页共18页{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;iN;i++){fprintf(fp,%d%d%s%f,yonghu[i].card_number,yonghu[i].card_password,yonghu[i].name,yonghu[i].money);putc('\n',fp);}fclose(fp);break;}elseprintf(密码输入错误!\n);}break;case5:break;(C语言)实验报告第14页共18页default:printf(输入有误!请重新输入!\n);break;}}}三、实验过程与结果分析1.现象:输入用户信息后,在登录系统时,输入第一个用户的信息,提示该用户不存在解决方法:fp=fopen(clients.txt,r+);for(i=0;iN;i++){fscanf(fp,%d%d%s%f,&yonghu[i].card_number,&yonghu[i].card_password,yonghu[i].name,&yonghu[i].money);}fclo
本文标题:C语言ATM程序设计
链接地址:https://www.777doc.com/doc-5086792 .html