1、C语言程序实践 实验报告 姓 名 学 号 班 级 指 导 教 师 开 设 学 期 开 设 时 间 实验题目 自动取款机程序设计 实验日期 评 定 成 绩 评定人签字 评 定 日 期 一、实验目得 1、函数得调用 2、结构体得使用 3、文件得应用:打开、关闭、输入、输出等 4、宏定义 二、实验内容与实验步骤 实验内容、原理分析 1. 给出数据结构或函数定义 结构体: struct clients { long int card_number,card_pa
2、ssword; char name[20]; float money; }yonghu[3]; card_number:银行卡号 card_password:密码 name:用户名 money:卡内金额 自定义函数: void fuction(float,int); 用于登陆后得操作 2. 用流程图表示出来程序设计得思想 开始 用户文件就是否存在 创建文件 输入用户信息 信息就是否重复 输入卡号与密码 错误就是否超过三次 输入信息就是否正确 输入0 输入其她 输入5 输入4
3、输入3
输入2
存款
输入1
输入错误
修改密码
显示菜单
充话费
取款
结束
3.给出具体实验步骤
#include
4、y;
}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 5、 /*文件不存在时,输入用户信息*/
{
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[i1] 6、card_number)||(yonghu[i]、card_password==yonghu[i1]、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);
}
7、}
if(i==2)
{
while((yonghu[i]、card_number==yonghu[i1]、card_number)||(yonghu[i]、card_password==yonghu[i1]、card_password)||(yonghu[i]、card_number==yonghu[i2]、card_number)||(yonghu[i]、card_password==yonghu[i2]、card_password))
{
printf("输入信息有重复!请重新输入\n");
printf("请输入第%d位用户得 8、信息:\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);
9、}
}
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 10、ard_number,&yonghu[i]、card_password,yonghu[i]、name,&yonghu[i]、money);
}
fclose(fp);
for(i=0;i 11、
if((times11)!=0)
{
printf("该用户不存在!您还有%d次尝试机会\n",times11);
printf("请输入您得银行卡号:\n");
scanf("%d",&number);
printf("请输入您得密码:\n");
scanf("%d",&password);
i=1;
}
else
{
printf("尝试失败!请按任意键退出:\n");
exit(0);
}
times1;
}
else
{
i 12、f(number==yonghu[i]、card_number)
{
if(password==yonghu[i]、card_password)
{
printf(" %s登陆成功!请继续您得操作\n",yonghu[i]、name);
j=i;
i=5; /*登陆成功,退出循环*/
}
else
{
if((times2 13、1)!=0)
{
printf("密码输入错误!您还有%d次尝试机会\n",times21);
printf("请输入您得密码:\n");
scanf("%d",&password);
i=1;
}
else
{
printf("尝试失败!请按任意键退出:\n");
exit(0);
}
times2;
}
}
}
}
fuction(yonghu[j]、money,j);
}
void fuction( 14、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 15、",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+ 16、");
for(i=0;i 17、tched_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+");
f 18、or(i=0;i 19、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" 20、"w+");
for(i=0;i 21、sword==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 22、u[i]、card_password,yonghu[i]、name,yonghu[i]、money);
putc('\n',fp);
}
fclose(fp);
break;
}
else
printf("密码输入错误!\n");
}
break;
case 5:
break;
default:
printf("输入有误!请重新输入!\n");
break;
}
}
}
三、实验过程与结果分析
1、现象:输入用户信息后,在登录系统时,输入第一个用 23、户得信息,提示该用户不存在
解决方法:
fp = fopen("clients、txt","r+");
for(i=0;i 24、示剩余尝试机会,当times1=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("请输入取款金额:\ 25、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值时,如果格式不正确,就会陷入死循环
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818