1、C语言程序实践实验报告姓 名学 号班 级指 导 教 师开 设 学 期开 设 时 间实验题目自动取款机程序设计实验日期评 定 成 绩评定人签字评 定 日 期一、实验目得1、函数得调用2、结构体得使用3、文件得应用:打开、关闭、输入、输出等4、宏定义二、实验内容与实验步骤实验内容、原理分析1. 给出数据结构或函数定义结构体:struct clientslong int card_number,card_password;char name20;float money;yonghu3;card_number:银行卡号card_password:密码name:用户名money:卡内金额自定义函数:vo
2、id fuction(float,int);用于登陆后得操作2. 用流程图表示出来程序设计得思想开始用户文件就是否存在创建文件输入用户信息信息就是否重复输入卡号与密码错误就是否超过三次输入信息就是否正确输入0输入其她输入5输入4输入3输入2存款输入1输入错误修改密码显示菜单充话费取款结束3.给出具体实验步骤#include #include #define N 3 /*用户人数*/struct clientslong int card_number,card_password;char name20;float money;yonghuN;FILE *fp;int i;void fuction
3、(float,int);void mainint j,number,password,times1=3,times2=3;printf( 欢迎使用中国建设银行自动取款机!n);fp = fopen(clients、txt,a+);if(getw(fp)=EOF)printf(用户文件未设置!n);for(i=0;iN;i+) /*文件不存在时,输入用户信息*/printf(请输入第%d位用户得信息:n,i+1);printf(银行卡号密码用户名卡内金额n);scanf(%d %d %s %f,&yonghui、card_number,&yonghui、card_password,yonghui
4、、name,&yonghui、money);if(i=1)while(yonghui、card_number=yonghui1、card_number)|(yonghui、card_password=yonghui1、card_password)printf(输入信息有重复!请重新输入n);printf(请输入第%d位用户得信息:n,i+1);printf(银行卡号密码用户名卡内金额n);scanf(%d %d %s %f,&yonghui、card_number,&yonghui、card_password,yonghui、name,&yonghui、money);if(i=2)while(
5、yonghui、card_number=yonghui1、card_number)|(yonghui、card_password=yonghui1、card_password)|(yonghui、card_number=yonghui2、card_number)|(yonghui、card_password=yonghui2、card_password)printf(输入信息有重复!请重新输入n);printf(请输入第%d位用户得信息:n,i+1);printf(银行卡号密码用户名卡内金额n);scanf(%d %d %s %f,&yonghui、card_number,&yonghui、c
6、ard_password,yonghui、name,&yonghui、money);fprintf(fp,%d %d %s %f,yonghui、card_number,yonghui、card_password,yonghui、name,yonghui、money);putc(n,fp);fclose(fp);printf(nn 请登录系统n); /*登录系统,输入卡号与密码*/printf(请输入您得银行卡号:n);scanf(%d,&number);printf(请输入您得密码:n);scanf(%d,&password);fp = fopen(clients、txt,r+);for(i
7、=0;iN;i+)fscanf(fp,%d %d %s %f,&yonghui、card_number,&yonghui、card_password,yonghui、name,&yonghui、money);fclose(fp);for(i=0;iN;i+) /*判断卡号及密码就是否匹配*/if(number!=yonghu0、card_number)&(number!=yonghu1、card_number)&(number!=yonghu2、card_number)if(times11)!=0)printf(该用户不存在!您还有%d次尝试机会n,times11);printf(请输入您得银
8、行卡号:n);scanf(%d,&number);printf(请输入您得密码:n);scanf(%d,&password);i=1;elseprintf(尝试失败!请按任意键退出:n);exit(0);times1;elseif(number=yonghui、card_number)if(password=yonghui、card_password)printf( %s登陆成功!请继续您得操作n,yonghui、name);j=i;i=5; /*登陆成功,退出循环*/elseif(times21)!=0)printf(密码输入错误!您还有%d次尝试机会n,times21);printf(请输
9、入您得密码:n);scanf(%d,&password);i=1;elseprintf(尝试失败!请按任意键退出:n);exit(0);times2;fuction(yonghuj、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:pr
10、intf(退出系统!);exit(0);case 1:printf(卡内金额: %fn,m);printf(请输入存款金额:n);scanf(%f,&saved_money);while(saved_money0)printf(输入有误!请重新输入!n);printf(请输入存款金额:n);scanf(%f,&saved_money);m += saved_money;printf(操作成功!卡内余额为: %fn,m);yonghuk、money = m;fp = fopen(clients、txt,w+);for(i=0;iN;i+)fprintf(fp,%d %d %s %f,yonghu
11、i、card_number,yonghui、card_password,yonghui、name,yonghui、money);putc(n,fp);fclose(fp);break;case 2:printf(卡内金额: %fn,m);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
12、_money;printf(操作成功!卡内余额为: %fn,m);yonghuk、money = m;fp = fopen(clients、txt,w+);for(i=0;iN;i+)fprintf(fp,%d %d %s %f,yonghui、card_number,yonghui、card_password,yonghui、name,yonghui、money);putc(n,fp);fclose(fp);break;case 3:printf(卡内金额: %fn,m);printf(请输入电话号码:n);scanf(%d,&phone_num);printf(请输入所交话费金额:n);s
13、canf(%f,&payment);m = payment;while(payment0)|(m0)printf(输入有误!请重新输入!n);m += payment;printf(请输入所交话费金额:n);scanf(%f,&payment);m = payment;printf(操作成功!卡内余额为: %fn,m);yonghuk、money = m;fp = fopen(clients、txt,w+);for(i=0;iN;i+)fprintf(fp,%d %d %s %f,yonghui、card_number,yonghui、card_password,yonghui、name,yo
14、nghui、money);putc(n,fp);fclose(fp);break;case 4:while(1)printf(请输入原密码:n);scanf(%d,&old_password);if(old_password=yonghuk、card_password)printf(请输入新密码:n);scanf(%d,&new_password);printf(密码修改成功!n);yonghuk、card_password = new_password;fp = fopen(clients、txt,w+);for(i=0;iN;i+)fprintf(fp,%d %d %s %f,yonghu
15、i、card_number,yonghui、card_password,yonghui、name,yonghui、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;i0时,提示剩余尝试机会,当times1=0时,退出程序3、现象:存取款或充话费时,输
16、入负数仍能运行解决方法:增加循环:while(saved_money0)printf(输入有误!请重新输入!n);printf(请输入存款金额:n);scanf(%f,&saved_money);while(fetched_money0)|(m0)printf(输入有误!请重新输入!n);m += fetched_money;printf(请输入取款金额:n);scanf(%f,&fetched_money);m = fetched_money;while(payment0)|(m0)printf(输入有误!请重新输入!n);m += payment;printf(请输入所交话费金额:n);scanf(%f,&payment);m = payment;四、实验结果总结五、创新得部分1、输入用户信息时,卡号与密码不可重复2、登录系统时,如果卡号或密码输入错误达三次,则自动退出程序3、为手机充话费时,要求输入电话号码4、存款、取款、充话费时,输入钱数不能为负数,且当取款或充话费得金额超过卡内余额时,禁止此操作5、增加了修改密码得功能六、对实验得意见与建议1、心得体会:实验过程中应反复调试,不断发现问题,解决问题2、不足:输入用户信息或输入x值时,如果格式不正确,就会陷入死循环