好文档 - 专业文书写作范文服务资料分享网站

ATM取款机模拟系统程序设计报告完成版

天下 分享 时间: 加入收藏 我要投稿 点赞

ATM取款机模拟系统程序

设计报告完成版

Revised by Liu Jing on January 12, 2021

目录

三、编程题部分(银行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) 数据分析(描述定义的各主要变量的作用及意义);

char zhanghao[16];/*用户账号*/ char xingming[9];/*用户姓名*/ char mima[7];/*账户密码*/

char shengfenzheng[19];/*用户身份证号*/ float yue;/*账户余额*/

char kaihushijian[50];/*开户时间*/

char zhanghao[16];/*交易的账号*/

char jiaoyishijian[50];/*交易时间*/ char leixing[5];/*交易类型*/ float jiaoyijine;/*交易金额*/

float jiaoyiyue;/*交易后的余额*/

char duifangzhanghao[12];/*交易时的对方账号*/

int

zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/ 注册函数:

int baiwei,shiwei,gewei,len;/*定义账号的后三位*/

char mima2[7];/*注册时第二次输入的密码*/ 登录函数:

char zhanghao[16],mima[7];/*登录时输入的账号和密码*/ 装载和保存文件函数: FILE *fp;/*定义文件指针*/

char wenjianming[13];/*定义输入的文件名*/

存、取款,转账函数:

float jine;/*输入的存、取款,转账金额*/

char t[30];/*把取得的存、取款,转账时间赋给该数组*/ 转账函数:

char duifangzhanghao[16],c;/*输入的对方账号赋给该数组。在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/ 修改密码函数:

char mima[7],xinmima1[7],xinmima2[7];/*旧密码,第一次输入的新密码,第二次输入的新密码*/

(2)程序流程分析(描述主程序的基本构成、函数设计、函数的调用关系、各部分的流程图等。) 主程序的基本构成:: struct Zhanghu {};/*账户的结构体*/ typedef struct

{}Jiaoyi;/*交易记录的结构体*/ int menu(); /*主菜单函数*/

void zhuce(); /*主菜单功能函数—注册函数*/ void denglu(); /*主菜单功能函数登录函数*/ void zhuangzai(); /*主菜单功能函数装载数据函数*/ void baocun(); /*主菜单功能函数保存数据函数*/ int denglu_menu(); /*登录菜单函数*/

void cunkuan(); /*登录菜单功能函数—存款函数*/ void qukuan(); /*登录菜单功能函数—取款函数*/ void zhuanzhang(); /*登录菜单功能函数—转账函数*/ void chaxun(); /*登录菜单功能函数—查询函数*/ void xiugaimima(); /*登录菜单功能函数—修改密码函数*/ int chaxun_menu(); /*查询菜单函数*/

void chaxun_yue(); /*查询菜单功能函数—查询余额函数*/

void chaxun_mingxi(); /*查询菜单功能函数—查询明细函数*/ void chaxun_cunkuan(); /*查询菜单功能函数—查询存款函数*/ void chaxun_qukuan(); /*查询菜单功能函数—查询取款函数*/ void chaxun_zhuanzhang();/*查询菜单功能函数—查询转账函数*/ 函数设计:

本程序在函数设计上采用结构化程序设计方法,自顶向下,逐步根据功能设计函数,逐步细化设计,由浅入深,模块化设计,保证了程序的可读性和质量。先设计主菜单(一级菜单)的功能函数,再设计二级菜单的功能函数,自顶而下,逐步细化。如图示意:

(顶层设计) 注

主菜单功能 登录存款取款转账查询装载怎样保存怎样(第二层

设计) 二级菜单

册怎样注(第三层设计) 函数调用关系:

mai strczhucstrlstrcstrccunkudengqukuazhuangzhdenglu_menchaxun_yue strcpchaxun_menu strcm

chaxuxiugaimima fopen fscanf fgets chaxun_mingxi chaxun_cunkuan chaxun_qukuan chaxun_zhuanzhang zhuangfopen fclose fprint baocufclose menu 注册函数的流程图:

开始 定义数据变量,调用时间函数,设置账号的随输入姓名 输入两次密两次密码相 N Y

输入身份证 Y 号位数既不为 N

输入存款金输出账户和第一结束 登录函数的流程图: 开始 定义个变量,i=0

输入账 N i

输入的账号和i++ 输入密 N 密码错密码输 Y

进入登陆界面 N

执行switch功能 Y

N 输入选项数数字为0 return根据选项执行语 Y

退出 修改密码函数的流程图:

输入账输入旧密 N 密码正return; Y

输入两次新 N

N 次数为3 两次密码 Y

Y

return;

密码修改成功 结束 存款函数的流程图: 开始结束 system(\ 返回

输入存款金额jine Y jineP!=0||jine<=0jineP!=0||jine< return调用时间函数 ; N调用strcpy函数复制账号、类型、时间。计算余 存款成功 输出存款的交易记录 取款函数的流程图:

结束开始 返回 system(\ 输入取款金额jine Y 取款金额大于账户余额 N YjineP!= 输出提示, retur调用时间函数 return; 调用strcpy函数复制账号、类型、时间。计算输出存款的交易记录 转账函数的流程图:

开始 输入对方账 Y 是否与当前return; N

N return; i

Y i=zhanghuxu输入的账号与 N

输出对方账号的i++; N

是否继return; Y

Y

输入转账金额jine大于账户return; N

jine<=Y

N

显示警告信息 Nreturn; 是否继 Y 执行转账语装载函数的流程图: 开始 输出转账交易记

输入要读入结束 Y找不到该

N 返回 N Ni

Y从文件中读入账户的

i++ 从文件中读入交易记录 i++

关闭文保存函数的流程图: 结束

开始 输入要保存 Y 新建该文

N 返回 N i

i

i++ 把交易记录的数据信息i++ 关闭文结束 3、编码及调试 #include #include #include #include #include #define ZHANGHUSHU 100 /*账户的结构体*/ struct Zhanghu {

char zhanghao[16];/*用户账号*/

};

char xingming[9];/*用户姓名*/ char mima[7];/*账户密码*/

char shengfenzheng[19];/*用户身份证号*/ float yue;/*账户余额*/

char kaihushijian[50];/*开户时间*/

typedef struct /*交易记录的结构体*/ {

char zhanghao[16];/*交易的账号*/ char jiaoyishijian[50];/*交易时间*/ char leixing[5];/*交易类型*/ float jiaoyijine;/*交易金额*/ float jiaoyiyue;/*交易后的余额*/

char duifangzhanghao[12];/*交易时的对方账号*/

} Jiaoyi;

struct Zhanghu zhanghu[100];/*定义账户的结构体数组,可以注册100个账户*/ int

zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/

Jiaoyi jiaoyi[1000];/*定义交易记录的结构体数组,可以保存1000条交易记录*/

int menu(); /*声明 主菜单 函数*/ void zhuce(); /*声明 注册 函数*/ void denglu(); /*声明 登录 函数*/ void zhuangzai(); /*声明 装载数据 函数*/ void baocun(); /*声明 保存数据 函数*/ int denglu_menu(); /*声明 登录菜单 函数*/ void cunkuan(); /*声明 存款 函数*/ void qukuan(); /*声明 取款 函数*/ void zhuanzhang(); /*声明 转账 函数*/ void chaxun(); /*声明 查询 函数*/

void xiugaimima(); /*声明 修改密码 函数*/ int chaxun_menu(); /*声明 查询菜单 函数*/ void chaxun_yue(); /*声明 查询余额 函数*/ void chaxun_mingxi(); /*声明 查询明细 函数*/ void chaxun_cunkuan(); /*声明 查询存款 函数*/ void chaxun_qukuan(); /*声明 查询取款 函数*/ void chaxun_zhuanzhang();/*声明 查询转账 函数*/ void main()/*主函数*/ {

system(\设置运行界面的背景颜色为蓝色*/

printf(\欢迎使用ATM终端

机!\\n\\n\\n\\t\\t\\t\

system(\暂停功能*/ {

switch(menu()) /*主菜单选择判断*/ {

case 1:zhuce();/*调用注册函数*/

printf(\

system(\清屏*/ for(;;)/*空循环语句*/

break;

case 2:denglu();/*调用登录函数*/ printf(\ break;

case 3:zhuangzai();/*调用装载数据的函数*/

printf(\

break;

case 4:baocun();/*调用保存数据的函数*/

printf(\

break; case 0:

printf(\欢迎使用ATM终端机管理系统。谢谢!\\n\结束程序*/

printf(\ system(\ exit(0); } } }

int menu() /*定义主菜单函数*/ {

char c; do {

system(\每次选择运行前清屏*/

printf(\

-----------\\n\

printf(\终端机管理系统主菜单********\\n\主菜单选择*/

printf(\

---\\n\

printf(\注册|\\n\ printf(\登录|\\n\

printf(\装载数据|\\n\ printf(\保存数据 |\\n\ printf(\退出 |\\n\

printf(\\\n\

printf(\

printf(\

---\\n\

printf(\请作出选择(0-4):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'4');

return(c-'0'); /*c变为空后返回重新选择*/ }

/***************定义主菜单里的各功能函数函数**********************/

void zhuce() /*定义注册函数*/ {

int baiwei,shiwei,gewei,len;/*定义账号的后三位*/ char mima2[7];/*注册时第二次输入的密码*/ char t[30];/*开户时间*/ int i,j=0;

time_t rawtime; struct tm *timeinfo;

time(&rawtime);/*调用时间函数,取得开户时间*/ timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i

if(t[i]=='\\n') { }

t[i]='\\0'; break;

baiwei=zhanghuxuhao/100; shiwei=zhanghuxuhao/10; gewei=zhanghuxuhao;

zhanghu[zhanghuxuhao].zhanghao[12]=baiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[13]=shiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[14]=gewei+'0'; zhanghu[zhanghuxuhao].zhanghao[15]='\\0';

system(\运行前清屏*/

printf(\注册功能————ZHUCE GONGNENG\\n\\n\\n\

printf(\请输入姓名:\

fflush(stdin);/*消耗输入字符后的回车操作*/

scanf(\ do {

printf(\请输入6位数密码:\ fflush(stdin);

scanf(\ len=strlen(zhanghu[zhanghuxuhao].mima); if(len!=6)/*判断密码是否为6位*/

{

printf(\您的密码不是6位数!\ system(\

return; }

//此处用字符串长度函数来判断密码的位数 printf(\请再次输入密码:\ fflush(stdin); scanf(\

if(strcmp(zhanghu[zhanghuxuhao].mima,mima2)!=0)/*判

断两次密码输入是否相同*/

{

j++;

printf(\您的密码输入错误!您还有%d次机会输

入密码!\\n\ }

}

while (strcmp(zhanghu[zhanghuxuhao].mima,mima2)!=0);

if(j==3)/*密码输入错误不得超过三次*/ { }

system(\ return;

do

{

printf(\请输入身份证号:\ fflush(stdin);

scanf(\ len=strlen(zhanghu[zhanghuxuhao].shengfenzheng); if(len!=18&&len!=15)/*判断身份证号位数是否为15位或

18 位*/

printf(\身份证号错误!请输入15位或18位身份证

号!\\n\

}while(len!=18&&len!=15); printf(\请输入存入金额:\

fflush(stdin);

scanf(\

if((int)zhanghu[zhanghuxuhao].yueP!=0)/*存款金额必须为50的整数倍*/ { } 间*/

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[zhanghuxuhao].zhanghao);/**/ */

jiaoyi[jiaoyixuhao].jiaoyijine=zhanghu[zhanghuxuhao].yue;/strcpy(jiaoyi[jiaoyixuhao].leixing,\存\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间strcpy(zhanghu[zhanghuxuhao].kaihushijian,t);/*复制开户时

printf(\本终端机只接受50元或100元面值的存款!\ system(\ return;

*第一次交易的账户余额值赋给交易经额的值*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue;/*第一次交易的账户余额值赋给交易余额的值*/

printf(\开户成功!\\t\ system(\暂停功能*/ //输出账户第一次交易的数据清单

printf(\账号\\t\\t交易类型\\t交易金额\\t余额\\t\\t交易时

间\\n\

printf(\ printf(\ printf(\ printf(\

printf(\ zhanghuxuhao++;/*账户序号加一*/ jiaoyixuhao++;/*交易序号加一*/ printf(\

system(\暂停*/ }

void denglu() /******定义登录函数*******/ {

char zhanghao[16],mima[7];/*登录时输入的账号和密码*/ int i=0,j=0;

system(\清屏*/

printf(\登录功能————DENGLU GONGNENG\\n\\n\\n\进入登录得功能界面*/

号*/

printf(\输入账号:\

scanf(\输入账号*/

for( i=0;i

if(strcmp(zhanghao,zhanghu[i].zhanghao)==0) {

dangqianxiabiao=i;/*若找到,则跳出循环*/

break; }

if(i==zhanghuxuhao)/*注册的账号中没输入的账号*/ do {

{ }

printf(\当前账号不存在!\ system(\ return;

printf(\输入密码:\

scanf(\

if(strcmp(mima,zhanghu[i].mima)!=0)

{

j++;

printf(\您的密码输入错误!您还有%d次机会输

入密码!\\n\\n\ }

if(j==3)/*密码输入错误不得超过三次*/ { system(\ }

return;

}while(strcmp(mima,zhanghu[i].mima)!=0); {

switch(denglu_menu()) /***登陆界面选择判断***/ {

case 1:cunkuan();/*调用存款函数*/

printf(\

for(;;)/*空循环语句*/

break;

case 2:qukuan();/*调用取款函数*/ printf(\ break;

case 3:zhuanzhang();/*调用转账函数*/

printf(\

break;

case 4:chaxun();/*调用查询函数*/

printf(\

break;

case 5:xiugaimima();/*调用修改密码函数*/

printf(\

break; case 0:

return;/*返回上一级菜单界面*/ } }

int denglu_menu()/**********************定义登录菜单函数**************************/ {

char c; }

do {

system(\每次选择运行前清屏*/

printf(\欢迎进入 登录界面!*********\\n\\n\登录界面菜单选择*/ printf(\存款|\\n\ printf(\取款|\\n\ printf(\转账|\\n\

printf(\查询 |\\n\

printf(\修改密码 |\\n\

printf(\返回 |\\n\

printf(\ printf(\请作出选择(0-5):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'5');

return(c-'0'); /*c变为空后返回重新选择*/ }

void zhuangzai() /*定义装载函数*/ {

FILE *fp;/*定义文件指针*/ */

{

printf(\无法打开该文件!\ int i;

char wenjianming[13];/*定义输入的文件名*/ printf(\请输入打开的文件名(文件名.txt):\ fflush(stdin);

scanf(\输入要读入数据的文件名*/

if ((fp=fopen(wenjianming,\找不到输入的文件名

\\n\ */

}

system(\ return;

fscanf(fp,\

fscanf(fp,\账号\\t\\t姓名\\t密码\\t身份证号\\t余额\\t开户时间

for(i=0;i

{ }

fscanf(fp,\

fscanf(fp,\账号\\t\\t交易时间\\t\\t\\t交易类型 交易金额 交易

fscanf(fp,\ zhanghu[i].xingming,zhanghu[i].mima, zhanghu[i].shengfenzheng,&zhanghu[i].yue); fgets(zhanghu[i].kaihushijian,30,fp); fscanf(fp,\

余额\\t对方账号\\n\

for(i=0;i

fscanf(fp,\ fgets(jiaoyi[i].jiaoyishijian,30,fp);

}

fscanf(fp,\ &jiaoyi[i].jiaoyijine,&jiaoyi[i].jiaoyiyue); fgets(jiaoyi[i].duifangzhanghao,16,fp); fscanf(fp,\

fclose(fp);/*关闭文件*/

printf(\读入成功!\\n\\n\ printf(\

system(\ }

void baocun() /***定义保存函数***/ {

FILE *fp;/*文件指针*/ int i;

char wenjianming[13];

printf(\请输入文件名(输入格式为:文件名.txt):\ fflush(stdin);

scanf(\输入要保存的文件名*/ if((fp=fopen(wenjianming,\ {

printf(\无法打开文件!\\n\\t\\t\\t\ system(\

}

return;

fprintf(fp,\

fprintf(fp,\账号\\t\\t姓名 \\t密码\\t身份证号\\t\\t\\t余额

\\t\\t\\t开户时间\\n\ */

fprintf(fp,\for(i=0;i

30s\\n\

zhanghu[i].shengfenzheng,zhanghu[i].yue,zhanghu[i].kaihush

zhanghu[i].xingming,zhanghu[i].mima,

ijian);

fprintf(fp,\

fprintf(fp,\账号\\t\\t交易时间\\t\\t\\t交易类型\\t交易金额\\t交

易余额\\t\\t对方账号\\n\

for(i=0;i

文件*/

fprintf(fp,\

16s\\n\

jiaoyi[i].jiaoyishijian,

jiaoyi[i].leixing,

jiaoyi[i].jiaoyijine,jiaoyi[i].jiaoyiyue,jiaoyi[i].duifangzhanghao); }

void cunkuan() /*************************定义存款函数***********************/ {

float jine;/*输入的存款金额*/

char t[30];/*把取得的存款时间赋给该数组*/ int i;

time_t rawtime; struct tm *timeinfo; system(\清屏*/ fclose(fp);/*关闭文件*/

printf(\保存成功!\\n\ printf(\ system(\

printf(\存款功能————CUNKUAN GONGNENG\\n\\n\\n\进入存款功能界面*/

printf(\本终端机只接收50元或100元币值人民币!

\\n\\n\\t\\t\\t请输入存款金额:\提示信息*/

scanf(\输入存款金额*/

if((int)jineP!=0||jine<=0)/*存款金额必须为50的整数倍且

为正数*/

{

printf(\请输入面值为50或100的存款金额!请勿输

入负数或0!\\n\\t\\t\\t\ system(\

}

else/*调用时间函数,把取得的存款时间赋给t数组*/ {

return;

time(&rawtime);

timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo));

for(i=0;i

t[i]='\\0'; break;

}

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前登录账号复制给交易记录里的账号*/ */

jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*把存款金额赋给交易金额*/

zhanghu[dangqianxiabiao].yue+=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算存款后的账户余额*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yuestrcpy(jiaoyi[jiaoyixuhao].leixing,\存\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间

;/*交易后的余额等于账户余额*/

printf(\存款成功!\\t\\t\ system(\

printf(\账号\\t\\t交易类型\\t交易金额\\t交易余额\\t\\t交易时间\\n\输出账户存款交易的数据清单

printf(\ printf(\ printf(\ printf(\ printf(\

jiaoyixuhao++;/*交易序号加一*/

printf(\

system(\ }

void qukuan() /***********************定义取款函数**************************/ {

float jine;/*定义取款金额*/

char t[30];/*把取得的取款时间赋给该数组*/ int i;

time_t rawtime; struct tm *timeinfo; system(\清屏*/

printf(\取款功能————QUKUAN GONGNENG\\n\\n\\n\进入取款功能界面*/

printf(\本终端机只可取50或100元币值人民币!

\\n\\n\\t\\t\\t请输入取款金额:\

scanf(\

/*输入取款金额*/

if(jine> zhanghu[dangqianxiabiao].yue)/*账户余额是否

足够取款*/

{

printf(\您的余额不足!\

}

system(\ return;

if((int)jineP!=0||jine<=0)/*取款金额必须为50的整数倍且

为正数*/

{

printf(\请输入面值为50或100的存款金额!请勿输

入负数或0!\\n\\t\\t\\t\ system(\

}

else/*调用时间函数,把取得的交易时间赋给t数组*/ {

return;

time(&rawtime);

timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo));

for(i=0;i

t[i]='\\0'; break;

}

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前登录账号复制给交易记录里的账号*/ */

jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*取款金额值赋给交易金额*/

zhanghu[dangqianxiabiao].yue-=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算取款后的账户余额*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yuestrcpy(jiaoyi[jiaoyixuhao].leixing,\取\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间

;/*取款后余额等于账户余额*/

printf(\取款成功!\\t\\t\ system(\

printf(\账号\\t\\t交易类型\\t交易金额\\t交易余额\\t\\t交易

时间\\n\输出账户和交易的数据清单

printf(\ printf(\ printf(\ printf(\ printf(\

jiaoyixuhao++;/*交易序号加一*/ }

void zhuanzhang() /******************************定义转账函数********************************/ {

char t[30];/*时间数组*/ int i;

time_t rawtime; struct tm *timeinfo; float jine;/*转账金额*/ printf(\ system(\

char duifangzhanghao[16],c;/*输入的对方账号赋给该数组。在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/

system(\清屏*/

printf(\转账功能————ZHUANZHANG GONGNENG\\n\\n\\n\进入转账功能界面*/

if(strcmp(zhanghu[dangqianxiabiao].zhanghao,duifangzhanghao)==0)/*判断输入的账号是否与当前用户的账号相同*/

printf(\请输入对方账号:\

scanf(\输入对方账号*/

{

printf(\对不起!用户不能给自己转账!\\t\

system(\

return; }

for( i=0;i

if(strcmp(duifangzhanghao,zhanghu[i].zhanghao)==0)/*在

已注册账号里依次寻找对方账号*/

{

duifangzhanghuxiabiao=i;/*若找到,跳出该循环语句*/

break;

}

if(i==zhanghuxuhao)/*若在已注册账号里没找到输入的对方账

号,返回*/

{ }

else/*调用时间函数,把取得的转账交易时间赋给t数组*/ {

printf(\当前账号不存在!\\t\ system(\ return;

time(&rawtime);

timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo));

for(i=0;i

t[i]='\\0'; break;

}

printf(\对方姓名:

*%s\只显示出对方用户的名,不显示出姓*/

printf(\是否继续(Y/N): \ fflush(stdin);

scanf(\读入选择*/

if(c!='y'&&c!='Y') {

printf(\退出转账功能!欢迎使用其它功能!\\t\

system(\

} else

return;

do

{

printf(\请输入转账金额:\ scanf(\

if(jine<=0)/*转账金额不得为非正数*/

{

printf(\请不要输入负数或0!\

system(\

}

if(jine>zhanghu[dangqianxiabiao].yue)/*转账金额在账户

余额范围内*/

{

printf(\对不起!您的余额不足,请在余额范围内进行转账。\\n\\t\\t\

system(\

return; }

}while(jine<=0);

printf(\请用户谨慎考虑,以防受骗!\提示谨慎信息*/ printf(\是否确定转账(Y/N): \

fflush(stdin);

scanf(\读入选择*/

if(c!='y'&&c!='Y') {

printf(\退出转账功能!欢迎使用其它功能!\

system(\

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前用户账号复制给此次交易记录的账号*/ */

strcpy(jiaoyi[jiaoyixuhao].duifangzhanghao,zhanghu[duifangstrcpy(jiaoyi[jiaoyixuhao].leixing,\转出\复制交易类型 }

return;

zhanghuxiabiao].zhanghao);/*复制交易的对方账号*/ */

jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*复制交易金额*/ zhanghu[dangqianxiabiao].yue-=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算转账后的账户余额*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue; strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间

jiaoyixuhao++;

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[duifangzhanghu

xiabiao].zhanghao);/*复制接受转帐金额的用户账号*/

strcpy(jiaoyi[jiaoyixuhao].leixing,\转入\

strcpy(jiaoyi[jiaoyixuhao].duifangzhanghao,zhanghu[dangqia

nxiabiao].zhanghao);/*复制转账的用户账号*/ 间*/

jiaoyi[jiaoyixuhao].jiaoyijine=jine;

zhanghu[duifangzhanghuxiabiao].yue+=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算金额转入后的账户余额*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[duifangzhanghuxiabiastrcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制转账的时

o].yue;/*账户余额值赋给交易后的余额值*/ jiaoyixuhao++;

printf(\恭喜您!转账成功!\\t\\t\

system(\

printf(\账号\\t\\t交易类型\\t转出金额\\t余额\\t交易时间

\\n\输出账户和交易的数据清单

printf(\ printf(\ printf(\ printf(\ printf(\

printf(\对方账

号:%s\\n\输出对方用户的账号*/ }

void xiugaimima() /****************************定义 修改密码 函数****************************/ {

char mima[7],xinmima1[7],xinmima2[7]; int j=0;

printf(\请输入原来的密码:\ scanf(\输入旧密码*/ printf(\ system(\

if(strcmp(mima,zhanghu[dangqianxiabiao].mima)!=0)/*判断旧密码正确与否*/

{

printf(\您的密码输入错误!\ system(\

return; }

do {

printf(\请输入新密码:\ */

scanf(\

if(strcmp(xinmima1,xinmima2)!=0)/*判断输入的两次新密 scanf(\

printf(\请再一次输入新密码:\输入两次新密码

码是否相等*/

{

j++;

printf(\您的密码输入错误!您还有%d次机会

输入密码!\\n\ }

if(j==3)/*新密码输入错误不得超过三次*/

{

system(\ return; }

}while(strcmp(xinmima1,xinmima2)!=0);

strcpy(zhanghu[dangqianxiabiao].mima,xinmima1);/*拷贝新密

码到账户信息里*/

printf(\您的密码修改成功!\ system(\

}

return;

void chaxun() /***定义查询函数***/ { {

switch(chaxun_menu()) /*查询界面选择判断*/ {

case 1:chaxun_yue();/*调用查询余额函数*/

printf(\

for(;;)/*空循环语句*/

break;

case 2:chaxun_mingxi(); /*调用查询明细函数*/ printf(\ break;

case 3:chaxun_cunkuan(); /*调用查询存款函数*/

printf(\

break;

case 4:chaxun_qukuan(); /*调用查询取款函数*/

printf(\

break;

case 5:chaxun_zhuanzhang(); /*调用查询转账函数*/

printf(\

break; case 0: return; } }

int chaxun_menu()/*定义查询菜单函数*/ {

char c; }

do {

system(\每次选择运行前清屏*/

printf(\欢迎进入 查询界面!*********\\n\\n\查询界面菜单选择*/ printf(\查询余额|\\n\ printf(\查询明细|\\n\ printf(\查询存款|\\n\ printf(\查询取款|\\n\ printf(\查询转账|\\n\

printf(\返回|\\n\

printf(\

printf(\请作出选择(0-5):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'5');

return(c-'0'); /*c变为空后返回重新选择*/ }

void chaxun_yue() /*定义查询余额函数*/ {

printf(\这是查询余额功能\\n\\n\\t\\t\\t\ printf(\您的账户余额

为:%.2f\\n\\n\\t\\t\\t\输出账户余额*/ }

void chaxun_mingxi() /*定义查询明细函数*/ {

int i;

system(\清屏*/ system(\

printf(\查询明细————CHAXUN MINGXI\\n\\n\\t\\t\\t\进入查询明细界面*/

printf(\您的账

号:%s\

printf(\交易类型 交易金额 交易余额\\t\\t交易时间\\t对

方账号\\n\输出账户和交易的数据清单 for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0)

{

printf(\ printf(\

printf(\ printf(\

}

printf(\

printf(\ system(\ }

void chaxun_cunkuan() /*定义查询存款函数*/ {

int i;

system(\

printf(\查询存款————CHAXUN CUNKUAN\\n\\n\\t\\t\\t\

printf(\您的账

号:%s\

printf(\交易类型\\t交易金额\\t交易余额\\t\\t交易时间

\\n\输出账户和交易的数据清单 for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(jiaoyi[i].leixing,\存\

{

printf(\ printf(\ }

void chaxun_qukuan() /*定义查询取款函数*/ {

int i;

system(\

printf(\ printf(\

}

printf(\ system(\

printf(\查询取款————CHAXUN QUKUAN\\n\\n\\t\\t\\t\

printf(\您的账

号:%s\

printf(\交易类型\\t交易金额\\t交易余额\\t\\t交易时间

\\n\输出账户和交易的数据清单

for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(jiaoyi[i].leixing,\取\

{

printf(\ printf(\ }

void chaxun_zhuanzhang() /*定义查询转账函数*/ {

int i;

printf(\ printf(\

}

printf(\ system(\

char leixing[5];

system(\

printf(\查询转账————CHAXUN ZHUANZHANG\\n\\n\\t\\t\\t\

printf(\您的账

号:%s\

printf(\交易类型 交易金额 交易余额\\t交易时间\\t对方

账号\\n\输出账户和交易的数据清单

for(i=0;i

{

strcpy(leixing,jiaoyi[i].leixing);

leixing[2]='\\0';/*强制去除第二个字符的元素*/

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(leixing,\转\判断为当前用户的转账记录*/

{

printf(\ printf(\

printf(\ printf(\

}

printf(\

}

}

printf(\ system(\

4、程序运行截图

四、 总结与体会

思想“备战” 心情忐忑

暑假之前就在想,收假回来就要进行C语言程序设计课程设计,上个学期C语言学得那么……考试还可以,让我去做两周的程序设计还不崩溃。而且听说还要独立完成一个比较大的程序设计,一想到这心里就弄得心慌慌的。于是,考完试后,痛下决心,带C语言的课本回家,整个暑假啃这本书,还拿不下它吗!

整个暑假……

事实是,书本“浏览”一遍后,就被我于心不忍的留在了房间的角落里。返校之前,找到C语言课本,擦掉上面的灰尘,发出感叹:“这书白带回来了,那两周该怎么过啊……”

无奈,回到学校,上课前一晚,简单的回顾了一下课本。第二天,怀着忐忑不安的心情,踏上了通往机房的“崎岖路途”。

课程设计第一天

上课第一天,心情总算舒缓下来。讲解了一个贪吃蛇游戏的程序,体验了20分钟的游戏过程,还好,能听得懂,没想象的那么难。可是,“好戏”总是在后头,暗暗跟自己说“加油吧!时间足够的!”,上课

比较认真的听了,课下的安排也挺松的,又随便看了下课本。好吧,青春总是要有挑战的,虽然这算不上什么挑战。一个星期只上三天课,时间足够自己安排。那就发挥“悬梁刺股”的奋斗精神,事实上,虽然还没到达这种地步,这两周过的确实挺辛苦的。早上一起床就打开电脑(当然不是玩电脑,很专注的编程),除了吃饭和上课几乎不离开宿舍。好几次,电脑还没崩溃,我就想崩溃了…… 课程设计第一周完——开始有一点点成就感

不得不说,老师们很尽职尽责,讲解的很详细。好几次,找了很多次都不知道错在哪里,一头雾水,经老师这么一点拨,豁然开朗。大一上学期学完C语言还懵懵懂懂的,现在才过了一周,连我都感到很惊讶,自己对C程序的编程思路变得比以前清晰了不少,编程能力也提高了不少。这一改变让我很欣喜,在编程上更有自信了。说实话,经过这一周,课程设计已经把我对C语言编程的胃口完全吊起来了,对编程的“恐惧”和乏味早就丢到 天边的哪一个角落里去啦。 课程设计第二周(上):充满自信的开始——收获

虽然说编程能力确实提高了不少,但也不是编程总是一帆风顺的。在宿舍里调试程序时,有时候总是编译出错,检查后又找不出错误,总是急的心烦意乱。实在编不下去了,走出宿舍,在校园里随便走走。回来后,心平气和,再看程序,多看几遍,就发现了错误。因此,编程的时候,心情愉悦也是很重要的,至少能少犯错,提高编程效率。另外,每当自己编程打结的时候,就和做同一个程序设计的同学互相讨论,总是能发现一些意外之处,能很好的完善程序。互相交流,都能受益。让我

认识到,编程真的是需要互相借鉴,互相学习,互相交流的一件事。在编程想法和编程思路上,自己想不到的别人想得到,或者别人想不到的自己有想到了。因此,跟同学多交流,多学习,也是提高自己编程能力的方法之一。

课程设计第二周(下)——成果

课程设计已经快要接近尾声了,程序功能也在完善中。无数次运行程序,测试ATM模拟系统程序的功能。看着调试后的程序无误的运行结果,心里很高兴。

无数次代码的翻滚让眼睛疲累,无数次的手指在键盘上快速的敲打,无数次的调试,终于能见成效。很感谢老师的帮助,没老师的指导帮助,确实是很困难的。

课程设计——尾声

两周的时间,在专注忙碌的调试程序中就要过去。两周的学习,两周的改变,两周的提高,在这两周所收获的,比一个学期都要多。两周,把C语言课本的十章都融会贯通。一个学期学完还比较迷茫的知识,现在已豁然开朗。当然,没一个学期的系统学习也是不行的,毕竟,两周的提高都是建立在对基础知识的了解和掌握上。奋斗了十多个日日夜夜,今天终于要交出自己的劳动成果了。感慨啊,虽然不希望常常这样辛苦,却不得不说,这十多个日日夜夜,真的很过瘾。

呐喊:青春,让我流汗,让我不要忘记奋斗的乐趣

短短的两周,不仅是编程能力的改变,还有认识上的提高。高考以后,好久没有体会这种在学习中奋斗的感觉了。高考已过,这两周也即

将结束,然而对于奋斗的历程确还只是开始,我希望不要让安逸的生活渐渐磨灭我奋斗的斗志,我渴望能在年纪尚未老去前多流汗,我渴望奋斗的乐趣不会随着岁月的流逝而流失,我渴望奋斗到身体衰老以致不能行走,只为一个念想……

在调试程序中收获的编程小心得和小技巧:

(1) 在VC++6.0中编译时,若用到for循环语句,不要在for语句

内定义i,不然肯定会编译出错;

(2) 编完程序,要仔细检查圆括号和大括号有没有配对齐; (3) 一些有用的库函数:system(\每次运行前清屏*/

system(\暂停功能,可以让运行界面暂停,昂任

意键在继续

system(\设置运行界面的背景颜色,数字为字体颜色的代号,大写字母为背景颜色的代号*/

另外,在调用system(\类函数时,要写预处理指令

#include

fflush(stdin);/*放在scanf函数前,消耗输入字符后的回

车字符,起保险作用*/

exit(0);/*直接终止程序*/

五、 参考文献

谭浩强着. C程序设计(第四版). 北京:清华大学出版社,2010

谭浩强着. C程序设计(第四版)学习辅导. 北京:清华大学出版社,2010

谭浩强着. C程序设计教程. 北京:清华大学出版社,2007 谭浩强着. C++程序设计. 北京:清华大学出版社,2011

ATM取款机模拟系统程序设计报告完成版

ATM取款机模拟系统程序设计报告完成版RevisedbyLiuJingonJanuary12,2021目录三、编程题部分(银行ATM模拟存取系统)1、设计内容…………………………………………第2页2、
推荐度:
点击下载文档文档为doc格式
30txj8edyp77xpo5846y5ap1c1kz8f00qd2
领取福利

微信扫码领取福利

微信扫码分享