您的当前位置:首页正文

C语言ATM程序设计

2024-02-01 来源:步旅网
欧阳学文创编

C语言程序实践

欧阳学文 实验报告

姓 名 班 级 开 设 学 期 开 设 时 间 实实验验题日目 期 评 定 日 期 学 号 指 导 教 师 自动取款机程序设计 评定人签字 评 定 成 绩 欧阳学文创编

欧阳学文创编

一、实验目的

1.函数的调用 2.结构体的使用

3.文件的应用:打开、关闭、输入、输出等 4.宏定义

二、实验内容与实验步骤

实验内容、原理分析 1. 给出数据结构或函数定义 结构体: struct clients {

longintcard_number,card_password; char name[20]; float money; }yonghu[3];

card_number:银行卡号 card_password:密码 name:用户名 money:卡内金额 自定义函数:

voidfuction(float,int); 用于登陆后的操作

2. 用流程图表示出来程序设计的思想

开始 欧阳学文创编

欧阳学文创编

3.给出具体实验步骤 #include #include

存款 输入1 信息是否重复 输入卡号和密码 输入用户信息 用户文件是否存在 创建文件 输入信息是否正确 错误是否超过三次 输入2 取款 输入3 充话费 输入4 显示菜单 输入5 修改密码 输入其他 输入错误 输入0 结束 欧阳学文创编

欧阳学文创编

#define N 3 /*用户人数*/ struct clients {

longintcard_number,card_password; char name[20]; float money; }yonghu[N]; FILE *fp; inti;

voidfuction(float,int); void main() {

int j,number,password,times1=3,times2=3;

printf(\" 欢迎使用中国建设银行自动取款机!\\n\"); fp = fopen(\"clients.txt\ if(getw(fp)==EOF)

{

printf(\"用户文件未设置!\\n\"); */

{

for(i=0;iprintf(\"请输入第%d位用户的信息:\\n\ printf(\"银行卡号密码用户名卡内金额\\n\");

scanf(\"%d%d %s %f\

欧阳学文创编

欧阳学文创编

nghu[i].money); if(i==1)

{

while((yonghu[i].card_number==yonghu[i1].card_number)||(yonghu[i].card_password==yonghu[i1].card_password))

{

printf(\"输入信息有重复!请重新输入\\n\"); printf(\"请输入第%d位用户的信息:\\n\ printf(\"银行卡号密码用户名卡内金额\\n\");

scanf(\"%d %d %s %f\nghu[i].money);

} }

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位用户的信息:\\n\ printf(\"银行卡号密码用户名卡内金额\\n\");

scanf(\"%d %d %s %f\nghu[i].money);

}

欧阳学文创编

欧阳学文创编

}

fprintf(fp,\"%d %d %s %f\hu[i].money); putc('\\n',fp);

} }

fclose(fp);

printf(\"\\n\\n 请登录系统\\n\"); /*登录系统,输入卡号和密码*/ printf(\"请输入您的银行卡号:\\n\"); scanf(\"%d\ printf(\"请输入您的密码:\\n\"); scanf(\"%d\ fp = fopen(\"clients.txt\ for(i=0;i{

fscanf(fp,\"%d %d %s %f\&yonghu[i].money);

}

fclose(fp);

for(i=0;iif((number!=yonghu[0].card_number)&&(number!=yonghu[1].card_number)&&(number

!=yonghu[2].card_number))

{

if((times11)!=0)

欧阳学文创编

欧阳学文创编

{

printf(\"该用户不存在!您还有%d次尝试机会\\n\ printf(\"请输入您的银行卡号:\\n\"); scanf(\"%d\ printf(\"请输入您的密码:\\n\"); scanf(\"%d\ i=1; else

{ }

printf(\"尝试失败!请按任意键退出:\\n\"); exit(0); times1; else

{ } }

if(number==yonghu[i].card_number)

{

if(password==yonghu[i].card_password)

{

printf(\" %s登陆成功!请继续您的操作\\n\

j=i;

i=5; /*登陆成功,退出循环*/

欧阳学文创编

欧阳学文创编

else

}

{

if((times21)!=0)

{

printf(\"密码输入错误!您还有%d次尝试机会\\n\ printf(\"请输入您的密码:\\n\"); scanf(\"%d\ i=1; else

{ }

printf(\"尝试失败!请按任意键退出:\\n\"); exit(0); times2;

} } } } }

fuction(yonghu[j].money,j); }

voidfuction(float m,int k) {

欧阳学文创编

欧阳学文创编

floatsaved_money,fetched_money,payment; intphone_num,x,old_password,new_password; while(1)

{

printf(\"1.存款.\\n2.取款.\\n3.充话费.\\n4.修改密码.\\n5.显示菜单.\\n0.退出系统.\\n\"); scanf(\"%d\ switch(x) case 0:

printf(\"退出系统!\"); exit(0); case 1:

printf(\"卡内金额: %f\\n\ printf(\"请输入存款金额:\\n\"); scanf(\"%f\ while(saved_money<0)

{ {

printf(\"输入有误!请重新输入!\\n\"); printf(\"请输入存款金额:\\n\"); scanf(\"%f\

}

m += saved_money;

printf(\"操作成功!卡内余额为: %f\\n\ yonghu[k].money = m;

欧阳学文创编

欧阳学文创编

fp = fopen(\"clients.txt\ for(i=0;i{

fprintf(fp,\"%d %d %s %f\hu[i].money); putc('\\n',fp);

}

fclose(fp); break; case 2:

printf(\"卡内金额: %f\\n\ printf(\"请输入取款金额:\\n\"); scanf(\"%f\

m = fetched_money;

while((fetched_money<0)||(m<0))

{

printf(\"输入有误!请重新输入!\\n\");

m += fetched_money;

printf(\"请输入取款金额:\\n\"); scanf(\"%f\ m = fetched_money;

}

printf(\"操作成功!卡内余额为: %f\\n\ yonghu[k].money = m;

欧阳学文创编

欧阳学文创编

fp = fopen(\"clients.txt\ for(i=0;i{

fprintf(fp,\"%d %d %s %f\hu[i].money); putc('\\n',fp);

}

fclose(fp); break; case 3:

printf(\"卡内金额: %f\\n\ printf(\"请输入电话号码:\\n\"); scanf(\"%d\ printf(\"请输入所交话费金额:\\n\"); scanf(\"%f\

m = payment;

while((payment<0)||(m<0))

{

printf(\"输入有误!请重新输入!\\n\");

m += payment;

printf(\"请输入所交话费金额:\\n\"); scanf(\"%f\ m = payment;

}

欧阳学文创编

欧阳学文创编

printf(\"操作成功!卡内余额为: %f\\n\ yonghu[k].money = m; fp = fopen(\"clients.txt\ for(i=0;i{

fprintf(fp,\"%d %d %s %f\hu[i].money); putc('\\n',fp);

}

fclose(fp); break; case 4: while(1)

{

printf(\"请输入原密码:\\n\"); scanf(\"%d\

if(old_password==yonghu[k].card_password)

{

printf(\"请输入新密码:\\n\"); scanf(\"%d\ printf(\"密码修改成功!\\n\");

yonghu[k].card_password = new_password; fp = fopen(\"clients.txt\ for(i=0;i欧阳学文创编

欧阳学文创编

{

fprintf(fp,\"%d %d %s %f\hu[i].money); putc('\\n',fp);

}

fclose(fp); break; else

printf(\"密码输入错误!\\n\"); break; case 5: break; default:

printf(\"输入有误!请重新输入!\\n\"); break; }

三、实验过程与结果分析

1.现象:输入用户信息后,在登录系统时,输入第一个用户的信息,提示该用户不存在 解决方法:

fp = fopen(\"clients.txt\ } } } }

欧阳学文创编

欧阳学文创编

for(i=0;ifscanf(fp,\"%d %d %s %f\ame,&yonghu[i].money);

} fclose(fp);

2.现象:登录系统时,输入卡号或密码超过3次错误后,仍能输入 解决方法:

增加变量times1=3(卡号输入错误的次数),times2=3(密码输入错误的次数),当times1>0时,提示剩余尝试机会,当times1=0时,退出程序

3.现象:存取款或充话费时,输入负数仍能运行 解决方法: 增加循环: while(saved_money<0) {

printf(\"输入有误!请重新输入!\\n\"); printf(\"请输入存款金额:\\n\"); scanf(\"%f\ }

while((fetched_money<0)||(m<0)) {

printf(\"输入有误!请重新输入!\\n\"); m += fetched_money; printf(\"请输入取款金额:\\n\");

欧阳学文创编

欧阳学文创编

scanf(\"%f\ m = fetched_money; }

while((payment<0)||(m<0)) {

printf(\"输入有误!请重新输入!\\n\"); m += payment;

printf(\"请输入所交话费金额:\\n\"); scanf(\"%f\ m = payment; }

四、实验结果总结

欧阳学文创编

欧阳学文创编

欧阳学文创编

欧阳学文创编

欧阳学文创编

欧阳学文创编

五、创新的部分

1.输入用户信息时,卡号与密码不可重复

2.登录系统时,如果卡号或密码输入错误达三次,则自动退出程序 3.为手机充话费时,要求输入电话号码

4.存款、取款、充话费时,输入钱数不能为负数,且当取款或充话费的金额超过卡内余额时,禁止此操作

5.增加了修改密码的功能

六、对实验的意见与建议

1.心得体会:实验过程中应反复调试,不断发现问题,解决问题 2.不足:输入用户信息或输入x值时,如果格式不正确,就会陷入死循环

欧阳学文创编

因篇幅问题不能全部显示,请点此查看更多更全内容