版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计 目录三、编程题部分(银行ATM模拟存取系统)1、设计内容第2页2、设计 第2页(1)数据分析 第2页(2)程序流程分析 第3页3、编码及调试 第13页4、程序运行截图 第32页四、总结与体会 第37页五、参考文献 第39页三、编程题部分1、设计内容完成一个管理类的综合型设计:银行ATM模拟存取系统。要求学生进行数据结构的设计、对函数进行模块化结构化设计、并灵活运用数组、结构体、指针、文件等多种数据类型设计开发系统。通过写程序,学生应掌握用计算机程序设计语言解决实际问题的方法、步骤。该系统应该具有以下功能:1)账户管理功能a)
2、开户:完成账户注册的功能。即输入账户的相关信息。要求账户号长度12位,密码长度不得低于6位,必须使用暗码,账户信息保存到数组中,账户信息最后保存到相关文件中;b) 账户登录:输入账户、密码,验证是否能够登录该系统;c)密码修改:输入两次相同的密码方可修改。2)账务管理功能a) 存款:每笔存款金额大于0元小于等于1000元,以50元为基本单位。需记录交易日期和时间。b) 取款:每笔取款金额大于等于100元小于等于2000元,以50元为基本单位。需记录交易日期和时间。c) 转账:每笔转账金额大于等于100元小于等于5000元。需记录交易日期和时间。3)查询功能a) 存款记录查询b) 取款记录查询c
3、) 转账记录查询d) 余额查询4)文件功能及其它功能:数据都应保存在相关文件中。2、设计(1) 数据分析(描述定义的各主要变量的作用及意义);char zhanghao16;/*用户账号*/char xingming9;/*用户姓名*/char mima7;/*账户密码*/char shengfenzheng19;/*用户身份证号*/float yue;/*账户余额*/char kaihushijian50;/*开户时间*/ char zhanghao16;/*交易的账号*/char jiaoyishijian50;/*交易时间*/char leixing5;/*交易类型*/float jia
4、oyijine;/*交易金额*/float jiaoyiyue;/*交易后的余额*/char duifangzhanghao12;/*交易时的对方账号*/ int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/注册函数: int baiwei,shiwei,gewei,len;/*定义账号的后三位*/char mima27;/*注册时第二次输入的密码*/登录函数:char zhanghao16,mima7;/*登录时输入的账号和密码
5、*/装载和保存文件函数: FILE *fp;/*定义文件指针*/ char wenjianming13;/*定义输入的文件名*/存、取款,转账函数: float jine;/*输入的存、取款,转账金额*/char t30;/*把取得的存、取款,转账时间赋给该数组*/转账函数:char duifangzhanghao16,c;/*输入的对方账号赋给该数组。在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/修改密码函数:char mima7,xinmima17,xinmima27;/*旧密码,第一次输入的新密码,第二次输入的新密码*/(2)程序流程分析(描述主程序的基本构成、函数设计、函
6、数的调用关系、各部分的流程图等。)主程序的基本构成:struct Zhanghu;/*账户的结构体*/typedef struct Jiaoyi;/*交易记录的结构体*/int menu(); /*主菜单函数*/void zhuce(); /*主菜单功能函数注册函数*/void denglu(); /*主菜单功能函数登录函数*/void zhuangzai(); /*主菜单功能函数装载数据函数*/void baocun(); /*主菜单功能函数保存数据函数*/int denglu_menu(); /*登录菜单函数*/void cunkuan(); /*登录菜单功能函数存款函数*/void qu
7、kuan(); /*登录菜单功能函数取款函数*/void zhuanzhang(); /*登录菜单功能函数转账函数*/void chaxun(); /*登录菜单功能函数查询函数*/void xiugaimima(); /*登录菜单功能函数修改密码函数*/int chaxun_menu(); /*查询菜单函数*/void chaxun_yue(); /*查询菜单功能函数查询余额函数*/void chaxun_mingxi(); /*查询菜单功能函数查询明细函数*/void chaxun_cunkuan(); /*查询菜单功能函数查询存款函数*/void chaxun_qukuan(); /*查询
8、菜单功能函数查询取款函数*/void chaxun_zhuanzhang();/*查询菜单功能函数查询转账函数*/函数设计:本程序在函数设计上采用结构化程序设计方法,自顶向下,逐步根据功能设计函数,逐步细化设计,由浅入深,模块化设计,保证了程序的可读性和质量。先设计主菜单(一级菜单)的功能函数,再设计二级菜单的功能函数,自顶而下,逐步细化。如图示意:主菜单功能注册登录装载保存(顶层设计)怎样注册怎样保存怎样读入查询转账取款存款(第二层设计)二级菜单(第三层设计)函数调用关系:strcpyzhucestrlenstrcmpstrcmpcunkuanstrcmpqukuandenglustrcpy
9、zhuangzhangchaxun_menumaindenglu_menuchaxun_yuechaxunchaxun_mingxixiugaimimachaxun_cunkuanfopenchaxun_qukuanfscanfchaxun_zhuanzhangzhuangzaifgetsfopenfclosefprintbaocunfclosemenu注册函数的流程图:开始定义数据变量,调用时间函数,设置账号的随机分配输入姓名输入两次密码两次密码相同 N Y输入身份证号号位数既不为15也不为18 Y N输入存款金额输出账户和第一次交易的数据清单结束登录函数的流程图:开始定义个变量,i=0输入
10、账号i<zhanghuxuhao N Y输入的账号和已注册的某一账号相同i+输入密码密码错误 N密码输入次数为3 Y进入登陆界面执行switch功能语句 N Yreturn;输入选项数字数字为0 N根据选项执行语句退出 Y修改密码函数的流程图:输入账号输入旧密码密码正确return; N Y输入两次新密码 N次数为3两次密码输入相同 N Yreturn; Y 密码修改成功结束开始 开始 system("cls");结束 返回 存款函数的流程图: 输入存款金额jinejine%50!=0|jine<=0jine%50!=0|jine<=0 Y N retur
11、n;调用时间函数调用strcpy函数复制账号、类型、时间。计算余额 存款成功 输出存款的交易记录取款函数的流程图: 结束 返回 开始 system("cls"); 输入取款金额jine取款金额大于账户余额 Y N输出提示, return;jine%50!=0| jine<=0 N Y调用时间函数return;调用strcpy函数复制账号、类型、时间。计算余额 输出存款的交易记录转账函数的流程图:开始输入对方账号是否与当前登录账号相同return; Y Ni<zhanghuxuhaoreturn; N Y输入的账号与已注册的某一账号相同i=zhanghuxuhao
12、 Y输出对方账号的姓名 Ni+;是否继续 Nreturn; Y输入转账金额jinejine大于账户余额 Yreturn; Njine<=0 Y N显示警告信息是否继续return; N执行转账语句 Y装载函数的流程图:输出转账交易记录开始结束输入要读入数据的文件名找不到该文件名 Y返回 Ni<zhanghuxuhao Ni<jiaoyixuhao N Y从文件中读入账户的数据 Y从文件中读入交易记录的数据信息 i+i+关闭文件结束保存函数的流程图:开始输入要保存数据的文件名新建该文件,若打不开文件 Y返回 Ni<zhanghuxuhao Ni<jiaoyixuha
13、o N Y把账户的数据输出到文件 Y把交易记录的数据信息输出到保存文件 i+i+关闭文件结束3、编码及调试#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<conio.h>#define ZHANGHUSHU 100/*账户的结构体*/struct Zhanghuchar zhanghao16;/*用户账号*/char xingming9;/*用户姓名*/char mima7;/*账户密码*/char shengfenzheng1
14、9;/*用户身份证号*/float yue;/*账户余额*/char kaihushijian50;/*开户时间*/;typedef struct /*交易记录的结构体*/char zhanghao16;/*交易的账号*/char jiaoyishijian50;/*交易时间*/char leixing5;/*交易类型*/float jiaoyijine;/*交易金额*/float jiaoyiyue;/*交易后的余额*/char duifangzhanghao12;/*交易时的对方账号*/ Jiaoyi;struct Zhanghu zhanghu100;/*定义账户的结构体数组,可以注册1
15、00个账户*/int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/Jiaoyi jiaoyi1000;/*定义交易记录的结构体数组,可以保存1000条交易记录*/int menu(); /*声明 主菜单 函数*/void zhuce(); /*声明 注册 函数*/void denglu(); /*声明 登录 函数*/void zhuangzai(); /*声明 装载数据 函数*/void baocun(); /*声明 保存数据 函
16、数*/int denglu_menu(); /*声明 登录菜单 函数*/void cunkuan(); /*声明 存款 函数*/void qukuan(); /*声明 取款 函数*/void zhuanzhang(); /*声明 转账 函数*/void chaxun(); /*声明 查询 函数*/void xiugaimima(); /*声明 修改密码 函数*/int chaxun_menu(); /*声明 查询菜单 函数*/void chaxun_yue(); /*声明 查询余额 函数*/void chaxun_mingxi(); /*声明 查询明细 函数*/void chaxun_cunk
17、uan(); /*声明 查询存款 函数*/void chaxun_qukuan(); /*声明 查询取款 函数*/void chaxun_zhuanzhang();/*声明 查询转账 函数*/void main()/*主函数*/ system("color 1F");/*设置运行界面的背景颜色为蓝色*/printf("nnnnnnnnttt欢迎使用ATM终端机!nnnttt"); system("pause");/*暂停功能*/system("cls");/*清屏*/for(;)/*空循环语句*/ switch(m
18、enu() /*主菜单选择判断*/ case 1:zhuce();/*调用注册函数*/ printf("ttt"); break; case 2:denglu();/*调用登录函数*/ printf("ttt"); break; case 3:zhuangzai();/*调用装载数据的函数*/ printf("ttt"); break; case 4:baocun();/*调用保存数据的函数*/ printf("ttt"); break; case 0: printf("ttt欢迎使用ATM终端机管理系统
19、。谢谢!n"); /*结束程序*/ printf("ttt"); system("pause"); exit(0); int menu() /*定义主菜单函数*/ char c; do system("cls"); /*每次选择运行前清屏*/ printf("nnnntt-n"); printf("tt *ATM终端机管理系统主菜单*n"); /*主菜单选择*/ printf("tt-n"); printf("tt *| 1. 注册|n"); p
20、rintf("tt *| 2. 登录|n"); printf("tt *| 3. 装载数据|n"); printf("tt *| 4. 保存数据 |n"); printf("tt *| 0. 退出 |n"); printf("tt-n"); printf("tt*_*_*_*_*_*_*_*_*_*_*n"); printf("tt-n"); printf("ttt请作出选择(0-4):"); c=getchar(); /*读入选择*/
21、 while(c<'0'|c>'4'); return(c-'0'); /*c变为空后返回重新选择*/*定义主菜单里的各功能函数函数*/void zhuce() /*定义注册函数*/int baiwei,shiwei,gewei,len;/*定义账号的后三位*/char mima27;/*注册时第二次输入的密码*/char t30;/*开户时间*/int i,j=0;time_t rawtime;struct tm *timeinfo;time(&rawtime);/*调用时间函数,取得开户时间*/timeinfo=local
22、time(&rawtime);strcpy(t,asctime(timeinfo);for(i=0;i<strlen(t);i+)if(ti='n')ti='0'break;strcpy(zhanghuzhanghuxuhao.zhanghao,"625301234567");/*复制账号的前12位*/baiwei=zhanghuxuhao/100;shiwei=zhanghuxuhao/10%10;gewei=zhanghuxuhao%10;zhanghuzhanghuxuhao.zhanghao12=baiwei+'
23、0'zhanghuzhanghuxuhao.zhanghao13=shiwei+'0'zhanghuzhanghuxuhao.zhanghao14=gewei+'0'zhanghuzhanghuxuhao.zhanghao15='0' system("cls");/*运行前清屏*/ printf("nnnttt注册功能ZHUCE GONGNENGnnn");printf("tt请输入姓名:");fflush(stdin);/*消耗输入字符后的回车操作*/scanf("%
24、s",zhanghuzhanghuxuhao.xingming);doprintf("tt请输入6位数密码:");fflush(stdin);scanf("%s",zhanghuzhanghuxuhao.mima);len=strlen(zhanghuzhanghuxuhao.mima);if(len!=6)/*判断密码是否为6位*/printf("tt您的密码不是6位数!");system("pause"); return; /此处用字符串长度函数来判断密码的位数printf("tt请再次输入
25、密码:");fflush(stdin);scanf("%s",mima2);if(strcmp(zhanghuzhanghuxuhao.mima,mima2)!=0)/*判断两次密码输入是否相同*/ j+;printf("tt您的密码输入错误!您还有%d次机会输入密码!n",3-j); if(j=3)/*密码输入错误不得超过三次*/system("pause");return;while (strcmp(zhanghuzhanghuxuhao.mima,mima2)!=0); doprintf("tt请输入身份证号
26、:");fflush(stdin);scanf("%s",zhanghuzhanghuxuhao.shengfenzheng);len=strlen(zhanghuzhanghuxuhao.shengfenzheng);if(len!=18&&len!=15)/*判断身份证号位数是否为15位或18 位*/printf("身份证号错误!请输入15位或18位身份证号!n");while(len!=18&&len!=15);printf("tt请输入存入金额:");fflush(stdin);sca
27、nf("%f",&zhanghuzhanghuxuhao.yue); if(int)zhanghuzhanghuxuhao.yue%50!=0)/*存款金额必须为50的整数倍*/ printf("本终端机只接受50元或100元面值的存款!");system("pause");return; strcpy(zhanghuzhanghuxuhao.kaihushijian,t);/*复制开户时间*/ strcpy(jiaoyijiaoyixuhao.zhanghao,zhanghuzhanghuxuhao.zhanghao);/*
28、/strcpy(jiaoyijiaoyixuhao.leixing,"存");/*复制交易类型*/strcpy(jiaoyijiaoyixuhao.jiaoyishijian,t);/*复制交易时间*/jiaoyijiaoyixuhao.jiaoyijine=zhanghuzhanghuxuhao.yue;/*第一次交易的账户余额值赋给交易经额的值*/ jiaoyijiaoyixuhao.jiaoyiyue=zhanghudangqianxiabiao.yue;/*第一次交易的账户余额值赋给交易余额的值*/ printf("ntt开户成功!t");sys
29、tem("pause");/*暂停功能*/输出账户第一次交易的数据清单printf("nn账号tt交易类型t交易金额t余额tt交易时间n");printf("%st",zhanghuzhanghuxuhao.zhanghao);printf(" %s",jiaoyijiaoyixuhao.leixing); printf("tt%.2f",zhanghuzhanghuxuhao.yue); printf("t %.2f",zhanghuzhanghuxuhao.yue); p
30、rintf(" %stnn",zhanghuzhanghuxuhao.kaihushijian);zhanghuxuhao+;/*账户序号加一*/jiaoyixuhao+;/*交易序号加一*/printf("tttt"); system("pause");/*暂停*/void denglu() /*定义登录函数*/char zhanghao16,mima7;/*登录时输入的账号和密码*/int i=0,j=0;system("cls");/*清屏*/ printf("nnnttt登录功能DENGLU GO
31、NGNENGnnn");/*进入登录得功能界面*/printf("tt输入账号:");scanf("%s",zhanghao);/*输入账号*/for( i=0;i<zhanghuxuhao;i+)/*在已注册的账号中依次寻找该账号*/if(strcmp(zhanghao,zhanghui.zhanghao)=0)dangqianxiabiao=i;/*若找到,则跳出循环*/ break;if(i=zhanghuxuhao)/*注册的账号中没输入的账号*/printf("tt当前账号不存在!");system(&quo
32、t;pause");return;do printf("ntt输入密码:"); scanf("%s",mima); if(strcmp(mima,zhanghui.mima)!=0) j+;printf("tt您的密码输入错误!您还有%d次机会输入密码!nn",3-j); if(j=3)/*密码输入错误不得超过三次*/ system("pause");return; while(strcmp(mima,zhanghui.mima)!=0); for(;)/*空循环语句*/ switch(denglu_me
33、nu() /*登陆界面选择判断*/ case 1:cunkuan();/*调用存款函数*/ printf("ttt"); break; case 2:qukuan();/*调用取款函数*/ printf("ttt"); break; case 3:zhuanzhang();/*调用转账函数*/ printf("ttt"); break; case 4:chaxun();/*调用查询函数*/ printf("ttt"); break;case 5:xiugaimima();/*调用修改密码函数*/ printf(&q
34、uot;ttt"); break; case 0: return;/*返回上一级菜单界面*/ int denglu_menu()/*定义登录菜单函数*/char c; do system("cls"); /*每次选择运行前清屏*/ printf("nnntt *欢迎进入 登录界面!*nn"); /*登录界面菜单选择*/ printf("tt *| 1. 存款|n"); printf("tt *| 2. 取款|n"); printf("tt *| 3. 转账|n"); printf(&q
35、uot;tt *| 4. 查询 |n"); printf("tt *| 5. 修改密码 |n"); printf("tt *| 0. 返回 |n"); printf("tt*n"); printf("ttt请作出选择(0-5):"); c=getchar(); /*读入选择*/ while(c<'0'|c>'5'); return(c-'0'); /*c变为空后返回重新选择*/void zhuangzai() /*定义装载函数*/ FILE *f
36、p;/*定义文件指针*/int i;char wenjianming13;/*定义输入的文件名*/printf("tt请输入打开的文件名(文件名.txt):");fflush(stdin);scanf("%s",wenjianming);/*输入要读入数据的文件名*/if (fp=fopen(wenjianming,"r")=NULL)/*找不到输入的文件名*/printf("tt无法打开该文件!");system("pause");return;fscanf(fp,"%dn"
37、;,&zhanghuxuhao);fscanf(fp,"账号tt姓名t密码t身份证号t余额t开户时间n");for(i=0;i<zhanghuxuhao;i+)/*依次从文件读入注册账户的信息*/fscanf(fp,"%16s%9s%7s%19s%12f",zhanghui.zhanghao,zhanghui.xingming,zhanghui.mima,zhanghui.shengfenzheng,&zhanghui.yue);fgets(zhanghui.kaihushijian,30,fp);fscanf(fp,"n
38、");fscanf(fp,"%dn",&jiaoyixuhao);fscanf(fp,"账号tt交易时间ttt交易类型 交易金额 交易余额t对方账号n");for(i=0;i<jiaoyixuhao;i+)/*依次从文件读入交易记录的信息*/fscanf(fp,"%16s",jiaoyii.zhanghao);fgets(jiaoyii.jiaoyishijian,30,fp);fscanf(fp,"%5s%12f%12f",jiaoyii.leixing,&jiaoyii.jiao
39、yijine,&jiaoyii.jiaoyiyue);fgets(jiaoyii.duifangzhanghao,16,fp);fscanf(fp,"n");fclose(fp);/*关闭文件*/printf("ttt读入成功!nn");printf("ttt"); system("pause");void baocun() /*定义保存函数*/FILE *fp;/*文件指针*/int i;char wenjianming13;printf("tt请输入文件名(输入格式为:文件名.txt):&qu
40、ot;);fflush(stdin);scanf("%s",wenjianming);/*输入要保存的文件名*/if(fp=fopen(wenjianming,"w")=NULL)printf("nttt无法打开文件!nttt");system("pause");return;fprintf(fp,"%dn",zhanghuxuhao);fprintf(fp,"账号tt姓名 t密码t身份证号ttt余额ttt开户时间n");for(i=0;i<zhanghuxuhao;i
41、+)/*把账户信息依次输出到指定文件*/fprintf(fp,"%-16s%-9s%-7s%-19s%-12.2f%-30sn",zhanghui.zhanghao,zhanghui.xingming,zhanghui.mima,zhanghui.shengfenzheng,zhanghui.yue,zhanghui.kaihushijian);fprintf(fp,"%dn",jiaoyixuhao);fprintf(fp,"账号tt交易时间ttt交易类型t交易金额t交易余额tt对方账号n");for(i=0;i<jiaoyi
42、xuhao;i+)/*把交易记录的信息依次输出到指定文件*/fprintf(fp,"%-16s%-30s%-5s%-12.2f%-12.2f%-16sn",jiaoyii.zhanghao, jiaoyii.jiaoyishijian, jiaoyii.leixing, jiaoyii.jiaoyijine,jiaoyii.jiaoyiyue,jiaoyii.duifangzhanghao);fclose(fp);/*关闭文件*/printf("tttt保存成功!n");printf("ntttt");system("pau
43、se");void cunkuan() /*定义存款函数*/float jine;/*输入的存款金额*/char t30;/*把取得的存款时间赋给该数组*/int i;time_t rawtime;struct tm *timeinfo;system("cls");/*清屏*/ printf("nnnttt存款功能CUNKUAN GONGNENGnnn");/*进入存款功能界面*/printf("tt本终端机只接收50元或100元币值人民币!nnttt请输入存款金额:");/*提示信息*/scanf("%f",&jine);/*输入存款金额*/if(int)jine%50!=0|jine<=0)/*存款金额必须为50的整数倍且为正数*/printf("ntt请输入面值为50或100的存款金额!请勿输入负数或0!nttt"); system(&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年多伦县教师招聘考试备考题库及答案解析
- 2026广西百色学院招聘高层次人才46人笔试备考试题及答案解析
- 2027中国邮政储蓄银行贵州省分行校园招聘考试备考题库及答案解析
- 2026广东汕头市濠江区农业农村和水务局下属事业单位招聘工作人员5人考试备考试题及答案解析
- 2026石林彝族自治县第十期城镇公益性岗位招聘3人笔试参考题库及答案解析
- 2026年琼结县教师招聘笔试备考题库及答案解析
- 2026年喜德县教师招聘笔试备考题库及答案解析
- 2026黑龙江省海林林业局有限公司公开招聘8人考试备考试题及答案解析
- 2026黑龙江省东方红林业局有限公司公开招聘22人考试备考题库及答案解析
- 2026年左权县教师招聘考试参考题库及答案解析
- 2026年宿迁泗阳县公开招聘城市社区工作者17人笔试备考试题及答案解析
- 转科交接登记制度、流程及身份识别措施
- 2026年卫生健康委系统岗位招聘考试笔试试题(含答案)
- 译林版七年级英语上册知识清单
- 2026秋冀少版新教材七年级上册生物学每课知识点清单
- 2026年四川省高考历史真题试卷
- 中国重症患者液体管理专家共识(2026版)
- (2026)过敏性休克紧急处置课件
- 建筑电气设计统一技术措施-2021
- 2026年四川省拟任县处级领导干部理论(任职资格考试)全真模拟试题及答案
- 楼板拆除工程专项方案实施保证措施
评论
0/150
提交评论