ATM取款机模拟系统程序设计报告完成版1资料.docx

上传人:b****7 文档编号:9214495 上传时间:2023-02-03 格式:DOCX 页数:53 大小:90.45KB
下载 相关 举报
ATM取款机模拟系统程序设计报告完成版1资料.docx_第1页
第1页 / 共53页
ATM取款机模拟系统程序设计报告完成版1资料.docx_第2页
第2页 / 共53页
ATM取款机模拟系统程序设计报告完成版1资料.docx_第3页
第3页 / 共53页
ATM取款机模拟系统程序设计报告完成版1资料.docx_第4页
第4页 / 共53页
ATM取款机模拟系统程序设计报告完成版1资料.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

ATM取款机模拟系统程序设计报告完成版1资料.docx

《ATM取款机模拟系统程序设计报告完成版1资料.docx》由会员分享,可在线阅读,更多相关《ATM取款机模拟系统程序设计报告完成版1资料.docx(53页珍藏版)》请在冰豆网上搜索。

ATM取款机模拟系统程序设计报告完成版1资料.docx

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

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

当前位置:首页 > 工作范文 > 行政公文

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

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