版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、银行ATM机存取款系统程序设计任课教师:蒋 安 珩小组成员:何慧冬 14212114国际经济与贸易贡怡敏 14Y12114 国际经济与贸易(全英)徐唯一 14512125 金融学 2013-09-08银行ATM机存取款系统程序设计一 案例描述1. 总体描述 银行ATM机存取款系统业务描述如下:银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登录ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。本系统各个业务有如下注意点:(1) 登录系统用户登录之前,必须在登录界面输入其银行账户,通过其正确输入的
2、银行账户登录系统。(2) 开户业务要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。(3) 存款业务客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。(4) 取款业务客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但其取款金额必须大于目前的账户余额。(5) 查询业务客户登陆系统后,可以选择查询业务,查询账户余额。(6) 转账业务客户登陆系统后,可以选择转账业务进行转账。注意的是转账的目的账户必须是本系统已经存在的银行账户。(7) 修改密码
3、客户登陆系统后,可以选择修改密码,进行密码修改。二 界面设计用户根据需要进行登录和开户的选择。三 模块化设计方案1系统主要函数及功能1)chaxun函数:用以查询客户个人余额2)kaihu函数:用以开户3)denglu函数:客户登录4)caidan函数:向客户展示银行业务菜单,办理存取款、查询等5)qukuan函数:客户取款6)xgmm函数:进行密码修改7)cunkuan函数:客户存款8)zhuanzhang函数:客户转账9)tuichu函数:退出系统2主函数调用各功能函数流程F退出E存款C转账 B查询A取款输入密码输入卡号1、登录设置银行卡密码设置卡号输入姓名2、开户D修改密码用户菜单界面打
4、开文件,载入信息开始四 数据结构描述struct per /*定义结构体*/ char name20; /*姓名*/ char ID20;/*卡号*/ int money;/*金额*/ char code6;/*密码*/ struct per *next; /*定义指针*/;typedef struct person struct per kehu ; struct person *next; L; 该数据结构为链表,是一种动态进行存储分配的结构。链表的每一个一个节点中包含了一个指针变量,用它存放下一个结点的地址,环环相扣。五 算法设计开始输入姓名输入卡号输入银行密码链表中添加该记录结束1、开
5、户开始结束输入密码输入卡号进入用户菜单界面与原密码是否相同错误次数是否小于三 否 是 是 否结束是否大于存款金额链表中添加该记录成功取出输入取款金额余额不足开始 是 否开始结束输入存款金额链表中添加该记录开始结束链表中添加该记录输入密码输入卡号输入新密码与原密码是否相同 否 是输入转入卡号开始结束是否大于存款金额链表中添加该记录成功转入再次输入转入卡号输入转账金额余额不足 是 否开始结束输出余额六 程序运行结果5、查询7、修改密码8、存款9、退出退出系统。七 总结1. 分工情况何慧冬:程序框架的搭建和运行调试后的修改贡怡敏:界面处理和函数内容的补充徐唯一:算法设计和流程图的制作2. 心得体会何
6、慧冬:这次对银行ATM机的程序编写过程中,遇到了不少困难。首先是经过一个暑假,小组成员对之前学的C程序设计内容掌握程度不像上学期那么高,加上短学期接触到了C+的相关内容,对新知识点的理解和运用也不是很熟练,所以一开始比较难上手。其次是对结构体、指针等重点难点内容的运用不是很擅长。在弄清楚各个函数的使用后,把各个函数的功能镶嵌起来比较花功夫。在设计上面,我们觉得“密码最多允许输错三次”这个环节比较考验人。尤其是不断地调试,要把组员们各自编译的函数搭建起来完美运行并不是件容易的事,需要三个人一起分析和探讨,在调试的过程中不断修改,直至完美运行。过程是艰辛的,结果是可喜的。程序的完美呈现,离不开三个
7、人的共同努力。自己需要做好自己的那一部分,而团队合作便是成功的核心。贡怡敏:通过这次小组合作程序设计,真是让我受益匪浅。银行ATM机的程序编写,不仅很好地让我们运用起所学的C语言的相关知识,也与我们的经济学专业相衔接,这与平时的做题有很大的不同。虽然对于界面的设计看似较容易上手,但我们的程序构思却是和这界面设计有着莫大的联系,丝毫不能马虎的。在调试运行我们的程序时,每一个步骤都不能省略,才能保证我们的程序是否真的完美运行没有差错。在操作过程中的轻松,背后是我们小组齐心协力的智慧的结晶。当然我们的程序在细节和人性化角度还存在着一些问题,比如说想要转账的,但是如果不小心摁到了取款,没有直接退出的环
8、节,只能先“将错就错”后再退出,然后转到原本想操作的“转账”上面。徐唯一:这次银行ATM机程序编写对我来说真是一次巨大的考验。整个程序的算法设计,逻辑思维能力是关键性因素。为了能够使我们的程序精益求精,少不了反复构思,返工的情况也是很常见的。好不容易把整个思路构想出来,却因为某些瑕疵而全部推翻,很是郁闷。不过功夫不负有心人,三人的智慧加在一起,没有什么做不到的。共同思考,达成共识,没有合理的设计,也就不能编写出合适的程序。不过因为我们的能力有限,还是存在一些遗憾,就比如我最在意的点错不能及时退出这一细节。当然我们相信,在今后的学习过程中,我们能更加掌握好C语言的相关知识,将我们的程序完善,使其
9、更具人性化。3. 自评得分何慧冬:97贡怡敏:96徐唯一:98附页(源代码附加注释)#include<stdio.h> #include<string.h>#include<stdlib.h>struct per /*定义结构体*/ char name20; char ID20; int money; char code6; struct per *next;typedef struct person struct per kehu ; struct person *next; L; void chaxun(struct per *head); /*各个函数
10、的声明*/void kaihu(struct per *head);void denglu(struct per *head);void caidan(struct per *head);void qukuan(struct per *head);void xgmm(struct per *head);void cunkuan(struct per *head);void zhuanzhang(struct per *head);void tuichu();/*主函数*/void main() char x; char choose; /*choose为定义输入选择的变量*/ int flag
11、=1; struct person *Phead=NULL; /*r为定义二层头指针*/ struct per *head=NULL; /*head为定义一层头指针*/ printf(" *n"); printf(" * 欢迎使用ATM自动取款机系统 *n"); printf(" *nnnn"); printf("-n");printf("| 请选择您的需求 |n");printf("-n"); printf("| 1 开户 |n"); printf(&q
12、uot;-n"); printf("| 2 登录 |n"); printf("-n"); scanf("%s",&x); system("cls"); switch(x) case '1':system("cls"); kaihu(head); /*调用开户函数*/ break; case '2':system("cls"); denglu(head); /*调用登陆函数*/ break; /*开户函数*/void kaihu
13、(struct per *head) head=NULL; FILE *fp; /*定义文件指针*/ per *p1=NULL,*p2=NULL; /*p1,p1为定义链表指针*/ p1=(per*)malloc(sizeof(per); /*开辟内存单元*/printf("请输入您的姓名:n"); /*将数据输入链表中*/ scanf("%s",p1->name ); printf("请设置您的卡号:n"); scanf("%s",p1->ID); printf("请设置您银行卡密码:n&q
14、uot;); scanf("%s",p1->code); p1->money=0; p1->next =NULL; printf("您的个人信息为n"); printf("姓名:%s n卡号:%s n余额:%4dn",p1->name ,p1->ID,p1->money ); if(NULL=head) /*为新增客户开辟内存单元*/ head=(per *)malloc(sizeof(per); head->next =p1; else /*为新增客户开辟内存单元*/ for(p2=head
15、;p2->next!=NULL;p2=p2->next); p2->next=p1; if(fp=fopen("save.txt","ab+")=NULL) /*打开文件*/ printf("cannot open filen"); return; if(fwrite(p1,sizeof(per),1,fp)!=1) /*将链表信息写入文件中*/ printf("file write errorn"); fclose(fp); printf("n"); printf("
16、;恭喜您开户成功,请登录n"); system("pause"); system("cls"); denglu(head); /*登陆函数*/ void denglu(struct per *head) char d20; char code20; int i,j; FILE *fp; /*定义文件指针*/ per *p,*q=NULL; if(fp=fopen("save.txt","rb+")=NULL) /*打开一个二进制文件,为读方式*/ printf("不能打开文件n");
17、/*如不能打开,则结束程序*/ p=(per*)malloc(sizeof(per); /*申请空间*/ head=p; while(!feof(fp) /*循环读数据直到文件尾结束*/ if(1!=fread(p,sizeof(per),1,fp) break; /*如果没读到数据,跳出循环*/ p->next=(per *)malloc(sizeof(per);/*为下一个结点申请空间*/ q=p; /*保存当前结点的指针,作为下一结点的前驱*/ p=p->next; /*指针后移,新读入数据链到当前表尾*/ q->next=NULL; /*最后一个结点的后继指针为空*/
18、 fclose(fp); printf(" *n"); printf(" * 欢迎来到建设银行 *n"); printf(" *n"); for(j=1;j<4;j+) /*限制卡号输入的次数的循环*/ printf("请您输入卡号n"); scanf("%s",d);for(q=head;q!=NULL;q=q->next) /*便利链表*/ if(strcmp(q->ID,d)!=0) /*核对账号*/ continue; else for(i=1;i<4;i+) /
19、*限制密码输入的次数的循环*/ printf("nn请输入您的密码n"); scanf("%s",code); if(strcmp(q->code,code)!=0) /*核对密码*/ printf("密码不正确,请重新输入密码n"); system("pause"); system("cls"); continue; /*若密码不对,跳出循环*/ else system("cls"); caidan(head); /*调用菜单函数*/ printf("nnn
20、您输入密码三次错误,谢谢光临n"); system("pause"); system("cls"); exit(0); printf("nnn您输入的卡号有误,请重试n"); system("pause"); system("cls"); printf("您的卡号三次输入错误,谢谢使用"); exit(0); /*银行菜单函数*/void caidan(struct per *head) head=NULL; int i; /*i为客户选择输入的变量*/ while
21、(1) printf("请选择您需要的业务n"); /*银行业务菜单*/ printf("*n"); printf("* 1取款 * 2查询 *n"); printf("*n"); printf("* 3转账 * 4修改密码*n"); printf("*n"); printf("* 5存款 * 6退出 *n"); printf("*nnn"); scanf("%d",&i); if(i<6|i>0
22、) switch(i) case 1:qukuan(head); /*调用银行取款函数*/ system("pause"); system("cls"); break; case 2: system("cls"); chaxun(head); /*调用银行查询函数*/ break; case 3:system("cls"); zhuanzhang(head); /*调用银行转账函数*/ break; case 4:system("cls"); xgmm(head); /*调用银行修改密码函数*/
23、 break; case 5:system("cls"); cunkuan(head); /*调用银行存款函数*/ break; case 6:system("cls"); tuichu(); /*调用银行退出函数*/ break; else printf("您的输入有误n"); system("pause"); system("cls"); /*银行取款函数函数*/void qukuan(struct per *head) head=NULL;per *p; /*链表头指针*/int i;FI
24、LE *fp; /*文件头指针*/fp=fopen("save.txt","rb+"); /*开辟空间*/p=(per*)malloc(sizeof(per);fread(p,sizeof(per),1,fp); fclose(fp);system("cls"); printf("请按要求选择您要取款的金额n");printf("*n");printf("* 1: 100元 * 2: 200元 *n");printf("*n");printf("
25、* 3: 300元 * 4: 400元 *n");printf("*n");printf("* 5: 500元 * 6: 600元 *n");printf("*n"); scanf("%d",&i); if(i>6|i<=0) printf("对不起,您的输入有误nn"); return; else i=100*i; if(i>p->money ) printf("对不起,您的余额不足n"); system("pause&q
26、uot;); system("cls"); caidan(head); else p->money-=i; if(fp=fopen("save.txt","wb+")=NULL) /*打开文件*/ printf("cannot open filen"); return; if(fwrite(p,sizeof(per),1,fp)!=1) /*将修改的信息重新写入文件*/ printf("file write errorn"); printf("您已成功走取%d元n",i
27、); p->next=NULL; fclose(fp); /*关闭文件*/*银行转账函数*/void zhuanzhang(struct per *head) head=NULL;per *p;FILE *fp; fp=fopen("save.txt","rb+");p=(per*)malloc(sizeof(per);fread(p,sizeof(per),1,fp); fclose(fp);int i,j,k;printf("请输入转账号码n"); scanf("%d",&i);printf(&q
28、uot;请再次输入转账号码n"); scanf("%d",&j); if(i!=j) printf("两次账号不相同,请重新输入n"); zhuanzhang(head); else system("cls"); printf("请输入转账金额n");printf("*n");printf("* 1: 100元 * 2: 200元 *n");printf("*n");printf("* 3: 300元 * 4: 400元 *n&
29、quot;);printf("*n");printf("* 5: 500元 * 6: 600元 *n");printf("*n"); scanf("%d",&k); if(k>6|k<=0) printf("对不起,您的输入有误nn"); return; else k=k*100; if(k>p->money ) printf("对不起,您的余额不足n"); system("pause"); system("cls
30、"); caidan(head); else printf("您已成功转账%d元n",k); p->money-=k; if(fp=fopen("save.txt","wb+")=NULL) printf("cannot open filen"); return; if(fwrite(p,sizeof(per),1,fp)!=1) printf("file write errorn"); p->next=NULL; fclose(fp); p->next=NULL;
31、system("pause"); system("cls"); /*银行查询函数*/void chaxun(struct per *head) head=NULL; /*链表头指针*/ per *p; /*文件头指针*/ FILE *fp; fp=fopen("save.txt","rb+"); /*打开文件*/ p=(per*)malloc(sizeof(per); fread(p,sizeof(per),1,fp); /*将信息从文件中读出来*/ fclose(fp); printf("您卡上原有余额
32、为%d元nn",p->money); system("pause"); system("cls");/*银行修改密码函数*/void xgmm(struct per *head) head=NULL; /*链表头指针*/ per *p; char code20; FILE *fp; /*文件头指针*/ fp=fopen("save.txt","rb+"); /*开辟内存*/ p=(per*)malloc(sizeof(per); /*打开文件*/ fread(p,sizeof(per),1,fp);
33、 /*将信息从文件中读出来*/ fclose(fp); printf("请输入您的原密码n"); scanf("%s",code); if(strcmp(p->code,code)=0) /*核对密码*/ printf("密码正确n"); printf("请输入您的新密码:n"); scanf("%s",p->code); if(fp=fopen("save.txt","wb+")=NULL) /*文件头指针*/ printf("cannot open filen"); return; if(fwrite(p,sizeof(per),1,fp)!=1) /*将修改的密码重新写入文件*/ printf("file write errorn"); fclose(fp); printf("密码修改成功nnnnn"); else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洞见趋势 解码未来福利-2023年企业福利策略和管理趋势调研报告
- 防震知识课件教学课件
- 设计营销课件教学课件
- 股份置换协议书(2篇)
- 南京工业大学浦江学院《税务稽查》2022-2023学年第一学期期末试卷
- 集控化验办公楼施工组织设计
- 防灾减灾说课稿
- 宿淮高速收费大棚施工组织设计
- 《轴对称》说课稿
- 【初中化学】化石能源的合理利用课件-2024-2025学年九年级化学人教版(2024)上册
- 【道法】认识生命 课件-2024-2025学年统编版道德与法治七年级上册
- 贵州省建筑与装饰工程计价定额(2016版)
- JGT 486-2015 混凝土用复合掺合料
- 世界急救日常见的急救基本知识科普讲座课件
- 乡村振兴民宿产业项目可行性研究报告
- 某县纪委书记在整顿农村三资管理工作会议上的讲话
- DL∕T 1736-2017 光纤光栅仪器基本技术条件
- 茶艺上课教案
- 中秋国庆灯会彩灯设计方案
- 人教版部编语文一年级上册全册教学课件
- 外汇交易居间合同范本
评论
0/150
提交评论