C语言ATM程序设计.docx

上传人:b****3 文档编号:5520206 上传时间:2022-12-18 格式:DOCX 页数:15 大小:121.42KB
下载 相关 举报
C语言ATM程序设计.docx_第1页
第1页 / 共15页
C语言ATM程序设计.docx_第2页
第2页 / 共15页
C语言ATM程序设计.docx_第3页
第3页 / 共15页
C语言ATM程序设计.docx_第4页
第4页 / 共15页
C语言ATM程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言ATM程序设计.docx

《C语言ATM程序设计.docx》由会员分享,可在线阅读,更多相关《C语言ATM程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

C语言ATM程序设计.docx

C语言ATM程序设计

 

C语言程序实践

实验报告

 

姓名

学号

班级

指导教师

开设学期

开设时间

实验题目

自动取款机程序设计

实验日期

评定成绩

评定人签字

评定日期

一、实验目的

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.用流程图表示出来程序设计的思想

 

 

 

3.给出具体实验步骤

#include

#include

#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)

{

printf("用户文件未设置!

\n");

for(i=0;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==yonghu[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+");

for(i=0;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

{

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");

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);

}

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("退出系统!

");

exit(0);

case1:

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

{

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);

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

{

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");

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

{

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)

{

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

{

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;

}

else

printf("密码输入错误!

\n");

}

break;

case5:

break;

default:

printf("输入有误!

请重新输入!

\n");

break;

}

}

}

三、实验过程与结果分析

1.现象:

输入用户信息后,在登录系统时,输入第一个用户的信息,提示该用户不存在

解决方法:

fp=fopen("clients.txt","r+");

for(i=0;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值时,如果格式不正确,就会陷入死循环

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1