ATM取款机模拟系统程序设计报告完成版1资料.docx
- 文档编号:9214495
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:53
- 大小:90.45KB
ATM取款机模拟系统程序设计报告完成版1资料.docx
《ATM取款机模拟系统程序设计报告完成版1资料.docx》由会员分享,可在线阅读,更多相关《ATM取款机模拟系统程序设计报告完成版1资料.docx(53页珍藏版)》请在冰豆网上搜索。
ATM取款机模拟系统程序设计报告完成版1资料
三、编程题部分(银行ATM模拟存取系统)
1、设计内容…………………………………………第2页
2、设计………………………………………………第2页
(1)数据分析…………………………………………第2页
(2)程序流程分析……………………………………第3页
3、编码及调试………………………………………第13页
4、程序运行截图……………………………………第32页
四、总结与体会………………………………………第37页
五、参考文献…………………………………………第39页
三、编程题部分
1、设计内容
完成一个管理类的综合型设计:
银行ATM模拟存取系统。
要求学生进行数据结构的设计、对函数进行模块化结构化设计、并灵活运用数组、结构体、指针、文件等多种数据类型设计开发系统。
通过写程序,学生应掌握用计算机程序设计语言解决实际问题的方法、步骤。
该系统应该具有以下功能:
1)账户管理功能
a)开户:
完成账户注册的功能。
即输入账户的相关信息。
要求账户号长度12位,密码长度不得低于6位,必须使用暗码,账户信息保存到数组中,账户信息最后保存到相关文件中;
b)账户登录:
输入账户、密码,验证是否能够登录该系统;
c)密码修改:
输入两次相同的密码方可修改。
2)账务管理功能
a)存款:
每笔存款金额大于0元小于等于1000元,以50元为基本单位。
需记录交易日期和时间。
b)取款:
每笔取款金额大于等于100元小于等于2000元,以50元为基本单位。
需记录交易日期和时间。
c)转账:
每笔转账金额大于等于100元小于等于5000元。
需记录交易日期和时间。
3)查询功能
a)存款记录查询
b)取款记录查询
c)转账记录查询
d)余额查询
4)文件功能及其它功能:
数据都应保存在相关文件中。
2、设计
(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();/*查询菜单功能函数—查询转账函数*/
函数设计:
本程序在函数设计上采用结构化程序设计方法,自顶向下,逐步根据功能设计函数,逐步细化设计,由浅入深,模块化设计,保证了程序的可读性和质量。
先设计主菜单(一级菜单)的功能函数,再设计二级菜单的功能函数,自顶而下,逐步细化。
如图示意:
主菜单功能
注册
登录
装载
保存
(顶层设计)
怎样注册
怎样保存
怎样读入
查询
转账
取款
存款
(第二层
设计)
二级菜单
(第三层设计)
函数调用关系:
strcpy
zhuce
strlen
strcmp
strcmp
cunkuan
strcmp
qukuan
denglu
strcpy
zhuangzhang
chaxun_menu
main
denglu_menu
chaxun_yue
chaxun
chaxun_mingxi
xiugaimima
chaxun_cunkuan
fopen
chaxun_qukuan
fscanf
chaxun_zhuanzhang
zhuangzai
fgets
fopen
fclose
fprint
baocun
fclose
menu
注册函数的流程图:
开始
定义数据变量,调用时间函数,设置账号的随机分配
输入姓名
输入两次密码
两次密码相同
N
Y
输入身份证号
号位数既不为15也不为18
Y
N
输入存款金额
输出账户和第一次交易的数据清单
结束
登录函数的流程图:
开始
定义个变量,i=0
输入账号
i N Y 输入的账号和已注册的某一账号相同 i++ 输入密码 密码错误 N 密码输入次数为3 Y 进入登陆界面 执行switch功能语句 N Y return; 输入选项数字 数字为0 N 根据选项执行语句 退出 Y 修改密码函数的流程图: 输入账号 输入旧密码 密码正确 return; N Y 输入两次新密码 N 次数为3 两次密码输入相同 N Y return; Y 密码修改成功 结束 开始 开始system("cls"); 结束返回 存款函数的流程图: 输入存款金额jine jine%50! =0||jine<=0 jine%50! =0||jine<=0 YN return; 调用时间函数 调用strcpy函数复制账号、类型、时间。 计算余额 存款成功 输出存款的交易记录 取款函数的流程图: 结束返回 开始system("cls"); 输入取款金额jine 取款金额大于账户余额 YN 输出提示, return; jine%50! =0||jine<=0 NY 调用时间函数 return; 调用strcpy函数复制账号、类型、时间。 计算余额 输出存款的交易记录 转账函数的流程图: 开始 输入对方账号 是否与当前登录账号相同 return; Y N i return; N Y 输入的账号与已注册的某一账号相同 i=zhanghuxuhao Y 输出对方账号的姓名 N i++; 是否继续 N return; Y 输入转账金额jine jine大于账户余额 Y return; N jine<=0 Y N 显示警告信息 是否继续 return; N 执行转账语句 Y 装载函数的流程图: 输出转账交易记录 开始 结束 输入要读入数据的文件名 找不到该文件名 Y 返回 N i N i N Y 从文件中读入账户的数据 Y 从文件中读入交易记录的数据信息 i++ i++ 关闭文件 结束 保存函数的流程图: 开始 输入要保存数据的文件名 新建该文件,若打不开文件 Y 返回 N i N i N Y 把账户的数据输出到文件 Y 把交易记录的数据信息输出到保存文件 i++ i++ 关闭文件 结束 3、编码及调试 #include #include #include #include #include #defineZHANGHUSHU100 /*账户的结构体*/ structZhanghu { charzhanghao[16];/*用户账号*/ charxingming[9];/*用户姓名*/ charmima[7];/*账户密码*/ charshengfenzheng[19];/*用户身份证号*/ floatyue;/*账户余额*/ charkaihushijian[50];/*开户时间*/ }; typedefstruct/*交易记录的结构体*/ { charzhanghao[16];/*交易的账号*/ charjiaoyishijian[50];/*交易时间*/ charleixing[5];/*交易类型*/ floatjiaoyijine;/*交易金额*/ floatjiaoyiyue;/*交易后的余额*/ charduifangzhanghao[12];/*交易时的对方账号*/ }Jiaoyi; structZhanghuzhanghu[100];/*定义账户的结构体数组,可以注册100个账户*/ intzhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/ Jiaoyijiaoyi[1000];/*定义交易记录的结构体数组,可以保存1000条交易记录*/ intmenu();/*声明主菜单函数*/ voidzhuce();/*声明注册函数*/ voiddenglu();/*声明登录函数*/ voidzhuangzai();/*声明装载数据函数*/ voidbaocun();/*声明保存数据函数*/ intdenglu_menu();/*声明登录菜单函数*/ voidcunkuan();/*声明存款函数*/ voidqukuan();/*声明取款函数*/ voidzhuanzhang();/*声明转账函数*/ voidchaxun();/*声明查询函数*/ voidxiugaimima();/*声明修改密码函数*/ intchaxun_menu();/*声明查询菜单函数*/ voidchaxun_yue();/*声明查询余额函数*/ voidchaxun_mingxi();/*声明查询明细函数*/ voidchaxun_cunkuan();/*声明查询存款函数*/ voidchaxun_qukuan();/*声明查询取款函数*/ voidchaxun_zhuanzhang();/*声明查询转账函数*/ voidmain()/*主函数*/ { system("color1F");/*设置运行界面的背景颜色为蓝色*/ printf("\n\n\n\n\n\n\n\n\t\t\t欢迎使用ATM终端机! \n\n\n\t\t\t"); system("pause");/*暂停功能*/ system("cls");/*清屏*/ for(;;)/*空循环语句*/ { switch(menu())/*主菜单选择判断*/ { case1: zhuce();/*调用注册函数*/ printf("\t\t\t"); break; case2: denglu();/*调用登录函数*/ printf("\t\t\t"); break; case3: zhuangzai();/*调用装载数据的函数*/ printf("\t\t\t"); break; case4: baocun();/*调用保存数据的函数*/ printf("\t\t\t"); break; case0: printf("\t\t\t欢迎使用ATM终端机管理系统。 谢谢! \n");/*结束程序*/ printf("\t\t\t"); system("pause"); exit(0); } } } intmenu()/*定义主菜单函数*/ { charc; do { system("cls");/*每次选择运行前清屏*/ printf("\n\n\n\n\t\t------------------------------------------\n"); printf("\t\t********ATM终端机管理系统主菜单********\n");/*主菜单选择*/ printf("\t\t------------------------------------------\n"); printf("\t\t*|1.注册|\n"); printf("\t\t*|2.登录|\n"); printf("\t\t*|3.装载数据|\n"); printf("\t\t*|4.保存数据|\n"); printf("\t\t*|0.退出|\n"); printf("\t\t------------------------------------------\n"); printf("\t\t*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*^_^*\n"); printf("\t\t------------------------------------------\n"); printf("\t\t\t请作出选择(0-4): "); c=getchar();/*读入选择*/ }while(c<'0'||c>'4'); return(c-'0');/*c变为空后返回重新选择*/ } /***************定义主菜单里的各功能函数函数**********************/ voidzhuce()/*定义注册函数*/ { intbaiwei,shiwei,gewei,len;/*定义账号的后三位*/ charmima2[7];/*注册时第二次输入的密码*/ chart[30];/*开户时间*/ inti,j=0; time_trawtime; structtm*timeinfo; time(&rawtime);/*调用时间函数,取得开户时间*/ timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i if(t[i]=='\n') { t[i]='\0'; break; } strcpy(zhanghu[zhanghuxuhao].zhanghao,"625301234567");/*复制账号的前12位*/ baiwei=zhanghuxuhao/100; shiwei=zhanghuxuhao/10%10; gewei=zhanghuxuhao%10; zhanghu[zhanghuxuhao].zhanghao[12]=baiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[13]=shiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[14]=gewei+'0'; zhanghu[zhanghuxuhao].zhanghao[15]='\0'; system("cls");/*运行前清屏*/ printf("\n\n\n\t\t\t注册功能————ZHUCEGONGNENG\n\n\n"); printf("\t\t请输入姓名: "); fflush(stdin);/*消耗输入字符后的回车操作*/ scanf("%s",zhanghu[zhanghuxuhao].xingming); do { printf("\t\t请输入6位数密码: "); fflush(stdin); scanf("%s",zhanghu[zhanghuxuhao].mima); len=strlen(zhanghu[zhanghuxuhao].mima); if(len! =6)/*判断密码是否为6位*/ { printf("\t\t您的密码不是6位数! "); system("pause"); return; } //此处用字符串长度函数来判断密码的位数 printf("\t\t请再次输入密码: "); fflush(stdin); scanf("%s",mima2); if(strcmp(zhanghu[zhanghuxuhao].mima,mima2)! =0)/*判断两次密码输入是否相同*/ { j++; printf("\t\t您的密码输入错误! 您还有%d次机会输入密码! \n",3-j); } if(j==3)/*密码输入错误不得超过三次*/ { system("pause"); return; } } while(strcmp(zhanghu[zhanghuxuhao].mima,mima2)! =0); do { printf("\t\t请输入身份证号: "); fflush(stdin); scanf("%s",zhanghu[zhanghuxuhao].shengfenzheng); len=strlen(zhanghu[zhanghuxuhao].shengfenzheng); if(len! =18&&len! =15)/*判断身份证号位数是否为15位或18位*/ printf("身份证号错误! 请输入15位或18位身份证号! \n"); }while(len! =18&&len! =15); printf("\t\t请输入存入金额: "); fflush(stdin); scanf("%f",&zhanghu[zhanghuxuhao].yue); if((int)zhanghu[zhanghuxuhao].yue%50! =0)/*存款金额必须为50的整数倍*/ { printf("本终端机只接受50元或100元面值的存款! "); system("pause"); 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;/*第一次交易的账户余额值赋给交易余额的值*/ printf("\n\t\t开户成功! \t"); system("pause");/*暂停功能*/ //输出账户第一次交易的数据清单 printf("\n\n账号\t\t交易类型\t交易金额\t余额\t\t交易时间\n"); printf("%s\t",zhanghu[zhanghuxuhao].zhanghao); printf("%s",jiaoyi[jiaoyixuhao].leixing); printf("\t\t%.2f",zhanghu[zhanghuxuhao].yue); printf("\t%.2f",zhanghu[zhanghuxuhao].yue); printf("%s\t\n\n",zhanghu[zhanghuxuhao].kaihushijian); zhanghuxuhao++;/*账户序号加一*/ jiaoyixuhao++;/*交易序号加一*/ printf("\t\t\t\t");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ATM 取款 模拟 系统 程序设计 报告 完成 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)