C语言课程设计报告ATM机模拟操作附源码.docx
《C语言课程设计报告ATM机模拟操作附源码.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告ATM机模拟操作附源码.docx(21页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告ATM机模拟操作附源码
C语言-ATM机模拟操作
程序实现功能点:
a.查询:
查询XX的存款余额。
按任意键返回主菜单;
b.取款:
输入100、500、1000、2000、5000、其它金额为取款金额,取款金额不超过XX余额,操作后XX余额应相应减少,之后可返回主菜单;
c.存款:
输入100、500、1000、2000、5000、其它金额为存款金额,存款金额不超过20000元,操作后XX余额应相应增加。
之后可返回主菜单;
d.转帐:
输入一个XX号,程序判断与文件信息是否相符,储户确认无误后,再输入100、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过XX余额,操作后XX余额应相应减少。
之后可返回主菜单;
e.修改密码:
连续输入两次新密码(两次输入结果完全一样)后,新密码取代旧密码,并存放到XX信息文件中。
之后可返回主菜单;
f.退出:
退出系统;
g.帮助:
增加趣味性;
h.存款时,可正可负,正表示存款,负表示取款;
i.XX信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;(在目录下创立这两个文件)
j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用;
k.储户一天内输错密码的次数不能超过3次,否那么无法进入系统;
l.有效防止输入存款金额、取款金额为负数等异常情况的出现。
较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。
是否超过余额,是否不符合格式,是否为冲突操作。
〔2〕程序运行截图及说明〔每图限50到100字〕;
●进入程序,menu1可选择登录、注册功能。
●选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。
假设登录失败,那么重新选择。
●选择注册,输入账号密码,写入文件中。
●进入menu2,有五大功能选择,输入对应的序列号进入。
●余额查询功能输出账号所对应的余额。
●取款功能,需要安装要求取出格式化的金额。
●存款功能,选择金额,假设超过存款,自动报错。
存储成功后,在屏幕上显示余额并可在txt中看到对应数目的增加。
●修改密码功能,输入当前密码,输入新密码,并进展确认。
即修改成功。
●转账功能,输入对方卡号,核程序核对卡号是否存在,选择金额转账,对应存款的减少会反映在屏幕的余额上。
●退出功能,任意键退出程序。
●帮助功能,介绍了本程序的相关信息。
〔3〕采用的主要技术〔限150到200字〕;
答:
主要采用模块化管理代码。
使用构造体对文本信息进展操作、运用文件操作相关函数如fwrite()、fread()、fgets()、fputs()、fgetc()、fputc()、fopen()、fclose()......
并使用指针操作数值。
附:
程序代码
#include
#include
#include
#include
#include
#defineN3
voidenterzhanghao();//ATM账号输入函数
voidinputmima();//密码输入函数
voidmenu();//操作界面
voidWithdraw();//取款函数
voiddaly();//延时函数
voidyuer();//余额查询函数
voidDesposit();//存款函数
intquit();//退出界面函数
voidchange();//密码修改
voidread();//文件读取函数
voidwrite();//文件写入函数
voidwrite2(floath);//流水账函数
voidtran_account();//转账函数
voidenter();//登录函数
voidflesh();//注册函数
voidhelp();//帮助
typedefstruct
{
intnum;
intpassword;
doubleaccounte;
}atm;
atmATM[N]={{10001,111111,10000},{10002,222222,20000},{10003,333333,30000}};
typedefstruct
{
intyear;
intmonth;
intday;
}riqi;
intk;
intmain()
{
enterzhanghao();
}
//ATM账号输入函数
voidenterzhanghao()
{
read();
printf("\t\t\t\t\t**************************************\n");
printf("\t\t\t\t\t->欢送使用ATM机模拟操作的程序<-\n");
printf("\t\t\t\t\t->1、登录<-\n");
printf("\t\t\t\t\t->2、注册<-\n");
printf("\t\t\t\t\t**************************************\n");
printf("请输入对应序号:
");
intk;
scanf("%d",&k);
switch(k){
case1:
enter();break;
case2:
flesh();break;
}
}
voidenter()
{
system("cls");
intuser;
printf("请输入账号:
");
scanf("%d",&user);
if(user==0)
{
printf("\t\t\t\t\t*账号错误*\t\t\t\t\t\n");
enterzhanghao();
}
elseif(user!
=(ATM[k].num))
{
for(k=1;k{
if(user==(ATM[k].num))
inputmima();
}
system("cls");
printf("\t\t\t\t\t*账户不存在,请从新输入*\t\t\t\t\t\n");
enterzhanghao();
}
else
inputmima();
}
voidflesh()
{
system("cls");
printf("\t\t\t\t\t请输入账号:
");
scanf("%f",&ATM[k].num);
printf("\t\t\t\t\t请输入密码:
");
scanf("%f",&ATM[k].password);
write();
}
//密码输入函数
voidinputmima()
{
intcode;
inttemp=3;
read();
system("cls");
printf("\t\t\t\t\t*请输入密码*\t\t\t\t\n");
scanf("%d",&code);
while(code!
=ATM[k].password)
{
temp--;
system("cls");
printf("\t\t\t\t\t*密码错误,请重新输入*\t\t\t\t\n");
printf("\t\t\t\t\t*您还有:
");
printf("%d",temp);
printf("次时机*\n");
scanf("%d",&code);
if(temp==1)
{
system("cls");
printf("\t\t\t\t\t*您已经3次输入密码错误*\t\t\t\t\n");
printf("\t\t\t\t\t*系统将退出操作*\t\t\t\t\n");
daly();
enterzhanghao();
}
}
menu();
}
//操作界面
voidmenu()
{
system("cls");
inth=1,x;
while(h)
{
printf("\t\t\t\t\t----------------------\n");
printf("\n");
printf("\t\t\t\t\t1、\t查询余额\n");
printf("\t\t\t\t\t2、\t取款\n");
printf("\t\t\t\t\t3、\t存款\n");
printf("\t\t\t\t\t4、\t修改密码\n");
printf("\t\t\t\t\t5、\t转账\n");
printf("\t\t\t\t\t6、\t退出登录\n");
printf("\t\t\t\t\t7、\t帮助\n");
printf("\n");
printf("\t\t\t\t\t----------------------\n\n");
scanf("%d",&x);
switch(x)
{
case1:
yuer();break;
case2:
Withdraw();break;
case3:
Desposit();break;
case4:
change();break;
case5:
tran_account();break;
case6:
quit();h=quit();break;
case7:
help();break;
}
}
}
//取款函数
voidWithdraw()
{
system("cls");
floati;
inty;
printf("\t\t\t\t\t请输入你要取款的金额:
\n");
printf("\t\t\t\t\t----------------------\n");
printf("\n");
printf("\t\t\t\t\t1、\t100\n");
printf("\t\t\t\t\t2、\t200\n");
printf("\t\t\t\t\t3、\t500\n");
printf("\t\t\t\t\t4、\t1000\n");
printf("\t\t\t\t\t5、\t2000\n");
printf("\t\t\t\t\t6、\t其他金额\n");
printf("\n");
printf("\t\t\t\t\t----------------------\n");
printf("\t\t\t\t\t\t\t请输入对应序列号:
\n");
scanf("%d",&y);
system("cls");
switch(y)
{
case1:
i=100;break;
case2:
i=200;break;
case3:
i=500;break;
case4:
i=1000;break;
case5:
i=2000;break;
case6:
scanf("%f",&i);break;
default:
printf("\t\t\t\t\t請重新輸入");
Withdraw();
break;
}
if(i<=ATM[k].accounte&&i!
=0)
{
ATM[k].accounte=ATM[k].accounte-i;
printf("\t\t\t\t\t取款成功!
你的余额为:
");
printf("%f",ATM[k].accounte);
i=i*(-1);
write2(i);
}
else
printf("\t\t\t\t\t余额缺乏!
");
write();
}
//延时函数
voiddaly()
{
longinth;
intk;
for(h=600000;h>0;h--)
{
for(k=300;k>0;k--);
}
}
//余额查询函数
voidyuer()
{
system("cls");
printf("\t\t\t\t\t账号%4d,余额:
%.2lf\n\n\n\n\n",ATM[k].num,ATM[k].accounte);
}
//存款函数
voidDesposit()
{
system("cls");
inti;
printf("\t\t\t\t\t请将钞票整齐放入!
!
\n\n");
printf("\t\t\t\t\t请输入你要存的金额:
");
scanf("%d",&i);
if(i%100==0)
printf("\t\t\t\t\t存款成功!
");
else
{
printf("\t\t\t\t\t数额必须是100的整数倍!
请重新放入!
!
");
daly();
Desposit();
}
ATM[k].accounte=i+ATM[k].accounte;
printf("%f",ATM[k].accounte);
write();
write2(i);
}
//退出函数
intquit()
{
system("cls");
inti;
printf("\t\t\t\t\t谢谢你的使用!
!
!
\n\n");
i=0;
returni;
}
//密码修改
voidchange()
{
daly();
system("cls");
intpassword1,password2,password3;
printf("\t\t\t\t\t请输入旧密码:
");
scanf("%d",&password1);
printf("\n");
if(password1==ATM[k].password)
{
loop:
printf("\t\t\t\t\t请输入新的密码:
");
scanf("%d",&password2);
printf("\n");
printf("\t\t\t\t\t请再次输入新的密码:
");
scanf("%d",&password3);
if(password2==password3)
{
ATM[k].password=password2;
printf("\t\t\t\t\t\n密码修改成功!
\n");
}
else
{
printf("\t\t\t\t\t\n密码不一致!
\n");
printf("\t\t\t\t\t请重新输入!
!
\n");
gotoloop;
}
}
else
{
printf("\t\t\t\t\t输入错误\n");
change();
}
write();
}
//文件读取函数
voidread()
{
inti;
FILE*fp;
fp=fopen("accounts.txt","r");
if(fp==NULL)
{
printf("\t\t\t\t\t翻开文件失败\n");
return;
}
for(i=0;i{
fscanf(fp,"%d",&(ATM[i].num));
fscanf(fp,"%d",&(ATM[i].password));
fscanf(fp,"%lf\n",&(ATM[i].accounte));
}
fclose(fp);
}
//accounts文件写入函数
voidwrite()
{
inti;
FILE*fp;
fp=fopen("accounts.txt","w");
if(fp==NULL)
{
printf("\t\t\t\t\t翻开文件失败\n");
return;
}
for(i=0;i{
fprintf(fp,"%-8d",ATM[i].num);
fprintf(fp,"%-8d",ATM[i].password);
fprintf(fp,"%lf\n",ATM[i].accounte);
}
fclose(fp);
}
//records文件写入函数
voidwrite2(floath)
{
time_tt;
structtm*lt;
time(&t);//获取Unix时间戳。
lt=localtime(&t);//转为时间构造。
FILE*fp;
fp=fopen("records.txt","a");
if(fp==NULL)
{
printf("\t\t\t\t\t翻开文件失败\n");
return;
}
else
{
fprintf(fp,"%-5d",lt->tm_year+1900);
fprintf(fp,"%-3d",lt->tm_mon);
fprintf(fp,"%-3d",lt->tm_mday);
fprintf(fp,"%-5lf\n",h);
}
fclose(fp);
}
//转账函数
voidtran_account()
{
intother_num[10];
inti,c,q,tran;//c用来判断转账是否继续,q用来判断用户行为,tran用来存储转账金额
system("CLS");
printf("\n\t\t\t\t\t\t\t\t0.返回菜单");
printf("\n\n\n\n\n\n\t\t\t请输要对方的账号:
");
scanf("%d",other_num[10]);//输入对方账号
if(other_num[10]==ATM[k].num)//判断是否为自身账号
{
system("CLS");
printf("\n\n\n\n\n\n\n\n\t\t对不起,不能给自己转账,请重新输入账号!
\n");
printf("\n\n\n按任意键返回!
");
_getch();
system("CLS");
tran_account();//递归调用
}
else
while
(1)
{
for(i=0;i{
if(other_num[10]==ATM[i].num)//匹配用户
{
while
(1)
{
system("CLS");
printf("\t\t\t请输入对方账号:
%s",ATM[i].num);//显示对方信息
printf("\n\n\n\n\n\t\t0.返回菜单\t\t\t9.确认");
scanf("%d",&c);//输入9确认
if(c=='9')
{
system("CLS");
do
{
printf("\n\t\t\t\t\t\t\t\t0.返回菜单");
printf("\n\n\n\n\n\n\t\t请输入转账金额〔整百数〕:
");
scanf("%d",&q);getchar();
if(q)//q为非0时进入内层条件语句
{
tran=q;
if(tran>=100&&tran%100==0)//判断是否为整百//数并且大于100的数
{
if(tran<=ATM[k].accounte)//取款数是否不超过余额
{
if(tran<=3000)//判断是否超过3000
{
system("CLS");
ATM[k].accounte-=tran;
ATM[k].accounte+=tran;
menu();//调用save_info,存储信息
printf("\n\n\n\n\n\n\t\t\t交易成功!
\n");
printf("\n\n\n\n\n\t\t0.返回菜单\t\t\t9.继续转账");
c=_getch();
if(c=='9')//输入9就行转账
{
system("CLS");
}
else
if(c=='0')//c为0返回菜单
{
system("CLS");
menu();
}
else
{
printf("输入错误,请重新输入!
\n");
system("CLS");
}
}
else
{
system("CLS");
printf("\n\n\n\n\n\n\t\t对不起,一次最多能转账3000元,请重新输入!
");
printf("\n\n\n\n\n按任意键返回!
\n");
_getch();
system("CLS");
}
}
else
{
system("CLS");
printf("\n\n\n\n\n\n\t\t\t您的余额缺乏,请重新输入!
");
printf("\n\n\n\n\n按任意键返回!
\n");
_getch();
system("CLS");
}
}
else
{
system("CLS");
printf("\n\n\n\n\n\n\t\t\t请输入正确的金额!
请重新输入!
");
printf("\n\n\n\n\n按任意键返回!
\n");
_getch();
system("CLS");
}
}
else
{
system("CLS");
menu();
}
}while
(1);
}