ATM取款机模拟系统程序设计报告完成版Word格式.docx
《ATM取款机模拟系统程序设计报告完成版Word格式.docx》由会员分享,可在线阅读,更多相关《ATM取款机模拟系统程序设计报告完成版Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
![ATM取款机模拟系统程序设计报告完成版Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/30/824fdb11-5262-418d-b7b7-aaa5f9860084/824fdb11-5262-418d-b7b7-aaa5f98600841.gif)
(1)数据分析(描述定义的各主要变量的作用及意义);
charzhanghao[16];
/*用户账号*/
charxingming[9];
/*用户姓名*/
charmima[7];
/*账户密码*/
charshengfenzheng[19];
/*用户身份证号*/
floatyue;
/*账户余额*/
charkaihushijian[50];
/*开户时间*/
charzhanghao[16];
/*交易的账号*/
charjiaoyishijian[50];
/*交易时间*/
charleixing[5];
/*交易类型*/
floatjiaoyijine;
/*交易金额*/
floatjiaoyiyue;
/*交易后的余额*/
charduifangzhanghao[12];
/*交易时的对方账号*/
intzhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;
/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/
注册函数:
intbaiwei,shiwei,gewei,len;
/*定义账号的后三位*/
charmima2[7];
/*注册时第二次输入的密码*/
登录函数:
charzhanghao[16],mima[7];
/*登录时输入的账号和密码*/
装载和保存文件函数:
FILE*fp;
/*定义文件指针*/
charwenjianming[13];
/*定义输入的文件名*/
存、取款,转账函数:
floatjine;
/*输入的存、取款,转账金额*/
chart[30];
/*把取得的存、取款,转账时间赋给该数组*/
转账函数:
charduifangzhanghao[16],c;
/*输入的对方账号赋给该数组。
在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/
修改密码函数:
charmima[7],xinmima1[7],xinmima2[7];
/*旧密码,第一次输入的新密码,第二次输入的新密码*/
(2)程序流程分析(描述主程序的基本构成、函数设计、函数的调用关系、各部分的流程图等。
)
主程序的基本构成:
:
structZhanghu
{};
/*账户的结构体*/
typedefstruct
{}Jiaoyi;
/*交易记录的结构体*/
intmenu();
/*主菜单函数*/
voidzhuce();
/*主菜单功能函数—注册函数*/
voiddenglu();
/*主菜单功能函数登录函数*/
voidzhuangzai();
/*主菜单功能函数装载数据函数*/
voidbaocun();
/*主菜单功能函数保存数据函数*/
intdenglu_menu();
/*登录菜单函数*/
voidcunkuan();
/*登录菜单功能函数—存款函数*/
voidqukuan();
/*登录菜单功能函数—取款函数*/
voidzhuanzhang();
/*登录菜单功能函数—转账函数*/
voidchaxun();
/*登录菜单功能函数—查询函数*/
voidxiugaimima();
/*登录菜单功能函数—修改密码函数*/
intchaxun_menu();
/*查询菜单函数*/
voidchaxun_yue();
/*查询菜单功能函数—查询余额函数*/
voidchaxun_mingxi();
/*查询菜单功能函数—查询明细函数*/
voidchaxun_cunkuan();
/*查询菜单功能函数—查询存款函数*/
voidchaxun_qukuan();
/*查询菜单功能函数—查询取款函数*/
voidchaxun_zhuanzhang();
/*查询菜单功能函数—查询转账函数*/
函数设计:
本程序在函数设计上采用结构化程序设计方法,自顶向下,逐步根据功能设计函数,逐步细化设计,由浅入深,模块化设计,保证了程序的可读性和质量。
先设计主菜单(一级菜单)的功能函数,再设计二级菜单的功能函数,自顶而下,逐步细化。
如图示意:
(顶层设计)
(第二层
设计)
二级菜单
(第三层设计)
函数调用关系:
注册函数的流程图:
N
Y
登录函数的流程图:
修改密码函数的流程图:
Y
存款函数的流程图:
取款函数的流程图:
转账函数的流程图:
装载函数的流程图:
保存函数的流程图:
3、编码及调试
#include<
stdio.h>
stdlib.h>
string.h>
time.h>
conio.h>
#defineZHANGHUSHU100
{
};
typedefstruct/*交易记录的结构体*/
}Jiaoyi;
structZhanghuzhanghu[100];
/*定义账户的结构体数组,可以注册100个账户*/
intzhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;
Jiaoyijiaoyi[1000];
/*定义交易记录的结构体数组,可以保存1000条交易记录*/
/*声明主菜单函数*/
/*声明注册函数*/
/*声明登录函数*/
/*声明装载数据函数*/
/*声明保存数据函数*/
/*声明登录菜单函数*/
/*声明存款函数*/
/*声明取款函数*/
/*声明转账函数*/
/*声明查询函数*/
/*声明修改密码函数*/
/*声明查询菜单函数*/
/*声明查询余额函数*/
/*声明查询明细函数*/
/*声明查询存款函数*/
/*声明查询取款函数*/
/*声明查询转账函数*/
voidmain()/*主函数*/
{
system("
color1F"
);
/*设置运行界面的背景颜色为蓝色*/
printf("
\n\n\n\n\n\n\n\n\t\t\t欢迎使用ATM终端机!
\n\n\n\t\t\t"
pause"
/*暂停功能*/
cls"
/*清屏*/
for(;
;
)/*空循环语句*/
{
switch(menu())/*主菜单选择判断*/
case1:
zhuce();
/*调用注册函数*/
printf("
\t\t\t"
break;
case2:
denglu();
/*调用登录函数*/
case3:
zhuangzai();
/*调用装载数据的函数*/
case4:
baocun();
/*调用保存数据的函数*/
case0:
\t\t\t欢迎使用ATM终端机管理系统。
谢谢!
\n"
/*结束程序*/
exit(0);
}
}
intmenu()/*定义主菜单函数*/
charc;
do
{
/*每次选择运行前清屏*/
printf("
\n\n\n\n\t\t------------------------------------------\n"
\t\t********ATM终端机管理系统主菜单********\n"
/*主菜单选择*/
\t\t------------------------------------------\n"
\t\t*|1.注册|\n"
\t\t*|2.登录|\n"
\t\t*|3.装载数据|\n"
\t\t*|4.保存数据|\n"
\t\t*|0.退出|\n"
\t\t*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*\n"
\t\t\t请作出选择(0-4):
"
c=getchar();
/*读入选择*/
}while(c<
'
0'
||c>
4'
return(c-'
/*c变为空后返回重新选择*/
/***************定义主菜单里的各功能函数函数**********************/
voidzhuce()/*定义注册函数*/
intbaiwei,shiwei,gewei,len;
chart[30];
inti,j=0;
time_trawtime;
structtm*timeinfo;
time(&
rawtime);
/*调用时间函数,取得开户时间*/
timeinfo=localtime(&
strcpy(t,asctime(timeinfo));
for(i=0;
i<
strlen(t);
i++)
if(t[i]=='
\n'
{
t[i]='
\0'
break;
}
baiwei=zhanghuxuhao/100;
shiwei=zhanghuxuhao/10%10;
gewei=zhanghuxuhao%10;
zhanghu[zhanghuxuhao].zhanghao[12]=baiwei+'
zhanghu[zhanghuxuhao].zhanghao[13]=shiwei+'
zhanghu[zhanghuxuhao].zhanghao[14]=gewei+'
zhanghu[zhanghuxuhao].zhanghao[15]='
/*运行前清屏*/
\n\n\n\t\t\t注册功能————ZHUCEGONGNENG\n\n\n"
\t\t请输入姓名:
fflush(stdin);
/*消耗输入字符后的回车操作*/
scanf("
%s"
zhanghu[zhanghuxuhao].xingming);
\t\t请输入6位数密码:
fflush(stdin);
scanf("
zhanghu[zhanghuxuhao].mima);
len=strlen(zhanghu[zhanghuxuhao].mima);
if(len!
=6)/*判断密码是否为6位*/
{
\t\t您的密码不是6位数!
system("
return;
}
//此处用字符串长度函数来判断密码的位数
\t\t请再次输入密码:
mima2);
if(strcmp(zhanghu[zhanghuxuhao].mima,mima2)!
=0)/*判断两次密码输入是否相同*/
j++;
printf("
\t\t您的密码输入错误!
您还有%d次机会输入密码!
3-j);
if(j==3)/*密码输入错误不得超过三次*/
system("
while(strcmp(zhanghu[zhanghuxuhao].mima,mima2)!
=0);
\t\t请输入身份证号:
zhanghu[zhanghuxuhao].shengfenzheng);
len=strlen(zhanghu[zhanghuxuhao].shengfenzheng);
=18&
&
len!
=15)/*判断身份证号位数是否为15位或18位*/
身份证号错误!
请输入15位或18位身份证号!
}while(len!
=15);
\t\t请输入存入金额:
%f"
&
zhanghu[zhanghuxuhao].yue);
if((int)zhanghu[zhanghuxuhao].yue%50!
=0)/*存款金额必须为50的整数倍*/
本终端机只接受50元或100元面值的存款!
system("
return;
strcpy(zhanghu[zhanghuxuhao].kaihushijian,t);
/*复制开户时间*/
strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[zhanghuxuhao].zhanghao);
/**/
strcpy(jiaoyi[jiaoyixuhao].leixing,"
存"
/*复制交易类型*/
strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);
/*复制交易时间*/
jiaoyi[jiaoyixuhao].jiaoyijine=zhanghu[zhanghuxuhao].yue;
/*第一次交易的账户余额值赋给交易经额的值*/
jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue;
/*第一次交易的账户余额值赋给交易余额的值*/
\n\t\t开户成功!
\t"
//输出账户第一次交易的数据清单
\n\n账号\t\t交易类型\t交易金额\t余额\t\t交易时间\n"
%s\t"
zhanghu[zhanghuxuhao].zhanghao);
%s"
jiaoyi[jiaoyixuhao].leixing);
\t\t%.2f"
zhanghu[zhanghuxuhao].yue);
\t%.2f"
%s\t\n\n"
zhanghu[zhanghuxuhao].kaihushijian);
zhanghuxuhao++;
/*账户序号加一*/
jiaoyixuhao++;
/*交易序号加一*/
\t\t\t\t"
/*暂停*/
voiddenglu()/******定义登录函数*******/
inti=0,j=0;
\n\n\n\t\t\t登录功能————DENGLUGONGNENG\n\n\n"
/*进入登录得功能界面*/
\t\t输入账号:
zhanghao);
/*输入账号*/
for(i=0;
zhanghuxuhao;
i++)/*在已注册的账号中依次寻找该账号*/
if(strcmp(zhanghao,zhanghu[i].zhanghao)==0)
dangqianxiabiao=i;
/*若找到,则跳出循环*/
if(i==zhanghuxuhao)/*注册的账号中没输入的账号*/
\t\t当前账号不存在!
\n\t\t输入密码:
mima);
if(strcmp(mima,zhanghu[i].mima)!
=0)
\n\n"
{system("
}while(strcmp(mima,zhanghu[i].mima)!
switch(denglu_menu())/***登陆界面选择判断***/
cunkuan();
/*调用存款函数*/
qukuan();
/*调用取款函数*/
zhuanzhang();
/*调用转账函数*/
chaxun();
/*调用查询函数*/
case5:
xiugaimima();
/*调用修改密码函数*/
return;
/*返回上一级菜单界面*/
intdenglu_menu()/**********************定义登录菜单函数**************************/
\n\n\n\t\t*********欢迎进入登录界面!
*********\n\n"
/*登录界面菜单选择*/
\t\t*|1.存款|\n"
\t\t*|2.取款|\n"
\t\t*|3.转账|\n