1、课程设计 银行个人账户管理的实验报告西安郵電大学C语言课程设计报告题 目: 个人银行账户管理系统院系名称: 计算机学院专业名称: 计算机科学与技术班 级: 1106 学生姓名: 高 丹学号(8位): 04111196指导教师: 王春梅设计起止时间:2012年06月06日2012年06月15日一、 设计目的1、学会用C语言编程实现小区管理系统; 能熟练的掌握各个功能函数的熟练编写和理解。2、本次课程设计我设计的是一个银行个人账户管理系统。由于大学生日常生活开支以及钱的来源都需要详细的记录下来,所以我设计了这个系统,目的是希望通过这个系统来让大家养成良好的记账习惯,慢慢学会理财,并且可以对自己记录
2、的数据进行简单的分析(通过其中的排序系统),达到更合理的利用自己的金钱资源的目的。二、 设计内容经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,每一个模块对应一个或多个函数。在这些函数当中,储户注册函数,登录函数,储户信息录入函数,储户信息显示函数,信息插入函数,信息修改函数,信息排序函数以及信息删除的实现严格按照题目的要求,而储户密码的修改属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。内容如下:1、 用户登录系统(包括用户以及管理员的注册,登录界面,其中有注册函数和登录函数)。2、 系统以菜单的模式打开并工作(有储户
3、界面和管理员界面)。3、 储户信息的录入(保存函数)。4、 储户信息的读出并显示出来(信息读出并打印函数)。5、 储户信息的查询系统,包括按月份查询和按日期查询(用过查询函数来实现)。6、 储户信息的修改系统,包括修改月份,修改日期,修改进账数目和出账数目(通过修改函数来实现)。7、 修改密码系统(修改密码函数实现储户对账户密码的修改)。8、 退出(退出到主界面和上一界面)。每一个储户记录都包含账户编号,月份,日期,进账数目,出账数目。在程序当中,将储户记录类型定义为结构体类型,添加以及追加的储户信息直接写入D盘的account.txt文件中,其它函数每次对储户记录的访问,其数据来源都是acc
4、ount.txt文件,这样做不但可以保证储户信息的一致性,而且可以对储户信息进行永久保存,保证每次运行程序都可以采用原来的数据。三、 概要设计功能模块图2.各个模块的详细功能 1. 储户注册函数(void regist()) 主要实现程序最初储户注册自己的账户名和密码,只有注册了账户名和密码才可以进入账户管理系统并且操作自己的信息。2. 登录函数 (int load()) 储户和管理员通过此登录系统进入各自的页面对信息进行操作。3用户登陆界面(void menu())以及管理员登录界面(void menu_1())通过界面来选择想要操作的内容。4. 储户信息录入函数,包括链表的建立和信息的保存
5、(linklist creat()、save(linklist h)) 实现储户信息以链表的形式录入并保存到文件中,即我们所说的记账。5. 储户信息读出函(Node *show()) 实现的功能是按照账号和密码对储户所存储的信息从所存文件中读出。6储户信息的查询函数,包括按月份查询和按日期查询。(Node *search()) 实现用户针对自己信息的查询,可以查询当月的账户信息,也可以查询当天的账户信息。7. 储户信息插入函数,包括两个函数,一个是单纯实现插入功能,另一个是在此系统中实现的插入功能。(linklist insert()、Insert(linklist h)) 实现储户信息插到原
6、信息并且显示出来的功能。8. 信息修改函数,包括两个函数,一个是单纯实现修改,另一个是在此系统中实现对信息的修改功能(linklist recr(linklist h)、void Recr()) 通过该函数管理员可以对储户的数据信息进行修改。9. 信息排序函数,包括两个函数,一个是单纯实现排序,另一个是在此系统中实现对信息的排序。(在此只举按月份查询的例子linklist sort_mon(linklist head)、void Sort_M()) 该函数实现的功能是对储户信息中各个项目按一定的顺序进行排序(默认为升序)。10. 信息删除函数,包括两个函数,一个是单纯实现修改功能,另一个是在此
7、系统上实现对信息修改的功能。(linklist recr(linklist h)、void Recr()) 该函数可以对储户过期的信息进行删除操作。11. 储户密码修改函数 (int res()) 可以实现对储户的密码进行修改;12. 显示函数 (Node *print(linklist h)) 实现的是显示目前所有的有效储户记录信息。除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。四、详细设计1.功能函数的调用关系图2、功能函数流程(1)信息录入函数(2)、信息查询函数(3)、信息修改函数(4)信息删除函数(5)信息插入函数(6
8、)信息排序函数3、重点设计及其代码1、链表的创建 linklist creat()/链表创建 linklist head; Node *r,*p; int x; head=(linklist)malloc(sizeof(Node);/尾插法 head-next=NULL; r=head; do p=(Node *)malloc(sizeof(Node); printf(请输入账户编号 :n); scanf(%s,p-num); printf(请输入月份:); scanf(%d,&p-Date.mon); printf(请输入日期:); scanf(%d,&p-Date.day); printf
9、(请输入进账数目:); scanf(%f,&p-inacc); printf(请输入出账数目:); scanf(%f,&p-outacc); r-next=p; r=p; printf(是否继续录入?);/利用x来判断是否再次录入 flushall(); scanf(%d,&x); while(x); r-next=NULL; return head;2、信息保存于文件 void save(linklist h) / 储户信息保存 FILE *fp; Node *j; if(fp=fopen(D:/account.txt,wt)=NULL) printf(文件打开失败!按任意键退出!n); g
10、etch(); exit(1); for(j=h-next;j!=NULL;j=j-next) fprintf(fp,%s %d %d %f %fn,j-num,j-Date.mon,j-Date.day,j-inacc,j-outacc); fclose(fp); printf(文件保存成功!按任意键返回); getch();3、信息从文件中读出 linklist head; Node *r,*s; FILE *fp; int n; if(fp=fopen(D:/account.txt,rt)=NULL) printf(读出文件出错!按任意键退出!); getch(); exit(1); h
11、ead=(linklist)malloc(sizeof(Node); r=head; while(!feof(fp) s=(Node *)malloc(sizeof(Node); fscanf(fp,%s %d %d %f %fn,s-num,&s-Date.mon,&s-Date.day,&s-inacc,&s-outacc); r-next=s; r=s; r-next=NULL; fclose(fp); printf(n文件中信息已经正确读出!n); return head;4、信息显示Node *print(linklist h)/储户信息显示 Node *q; printf(账户信息
12、为:n); printf( 账户编号 月份 日期 进账 出账n); for(q=h-next;q!=NULL;q=q-next) printf(t%st%dt%dt%ft%fn,q-num,q-Date.mon,q-Date.day,q-inacc,q-outacc); return h;5、信息查询 Node *h,*p; int date,x; h=show(); p=h-next; printf( *n); printf( 1 按月份查询 n); printf( 2 按日期查询 n); printf( *n); printf(请输入1or2 n); scanf(%d,&x); switc
13、h(x) case 1:printf(请输入您要查询的月份:n); scanf(%d,&date); while(p!=NULL) if(p-Date.mon=date) return p; else p=p-next; case 2:printf(请输入您要查询的日期:n); scanf(%d,&date); while(p!=NULL) if(p-Date.day=date) return p; else p=p-next; return NULL;5、信息插入 FILE *fp; Node *j; fp=fopen(D:/account.txt,at+); if(fp=NULL) pri
14、ntf(插入失败!按任意键退出!n); getch(); exit(1); for(j=h-next;j!=NULL;j=j-next) fprintf(fp,%s %d %d %f %fn,j-num,j-Date.mon,j-Date.day,j-inacc,j-outacc); fclose(fp); printf(插入成功!按任意键返回); getch();6、信息修改 int x; char num20; int inf; float acc; Node *p; p=h-next; printf(请输入您要修改的账户信息编号:n); flushall(); scanf(%s,num)
15、; if(p=NULL) printf(信息为空,无法修改!n); while(p!=NULL) if(strcmp(p-num,num)=0) printf( *n); printf( 1 修改月份n); printf( 2 修改日期n); printf( 3 修改进账数目n); printf( 4 修改出账数目n); printf( *n); printf(请按1-4选择n); scanf(%d,&x); switch(x) case 1:printf(请输入新月份:n); scanf(%d,&inf); p-Date.mon=inf; return h; break; case 2:pr
16、intf(请输入新日期:n); scanf(%d,&inf); p-Date.day=inf; return h; break; case 3:printf(请输入您修改后的进账数目:n); scanf(%f,&acc); p-inacc=acc; return h; break; case 4:printf(请输入您修改后的出账数目:n); scanf(%f,&acc); p-outacc=acc; return h; break; p=p-next; return h;7、信息排序,在此仅拿按照月份排序举例。 Node *pri, *mid, *tai, *p; p=head-next;
17、while(p != NULL) mid = head-next; if(head-Date.mon head-next-Date.mon) head-next = mid-next; mid-next = head; head = mid; pri=head; mid=head-next; tai=mid-next; while(mid-next!=NULL) if(mid-Date.montai-Date.mon) pri-next=mid-next; mid-next=tai-next; tai-next=mid; pri=pri-next; mid=pri-next; tai=mid-
18、next; p=p-next; return head;8、信息删除 char num20; Node *q,*r; q=p-next; r=p; if(q=NULL) return 0; printf(请输入需要删除的账户编号:n); scanf(%s,num); while(q!=NULL) if(strcmp(q-num,num)=0) r-next=q-next; free(q); return p; r=q; q=q-next; return p;9. 密码修改 FILE *fp; char pkey20; char nkey20; char rnkey20; char name20
19、; int x; fp=fopen(D:/key.txt,wt); printf(请输入您的注册名:n); scanf(%s,name); fprintf(fp,%s,name); printf(请输入原始密码:n); scanf(%s,pkey); flushall(); printf(请输入修改后密码:n); scanf(%s,nkey); if(fp=NULL) printf(文件打开失败,按任意键推出!); getch(); exit(1); printf(请再次输入修改后密码:n); scanf(%s,rnkey); fprintf(fp,%sn,rnkey); printf(修改密
20、码成功!按任意键返回n); getch(); fclose(fp); printf(请选择1:重新登录,0:退出系统); scanf(%d,&x); system(cls); if(x) char n_name10; char n_key20; printf( n); printf( n); printf( * n); printf( n); printf( 欢迎登录银行个人账户管理系统 n); printf( n); printf( * n); printf( n); printf( n); printf( 请输入您的姓名:n); flushall(); scanf(%s,n_name);
21、fscanf(fp,%s,name); printf( 请输入您的密码:n); scanf(%s,n_key); fscanf(fp,%s,rnkey);/从文件中读出,若和输入的相同则修改成功,若不相同,则修改失败! if(strcmp(rnkey,n_key)=0&strcmp(name,n_name)=0) printf(成功登录!n); menu(); return 1; else printf(输入密码错误!退出系统); return 0; Return0;五测试数据及运行结果一、用户登录数据演示1.直接登录的情况下注册的情况下2.用户登录成功后可进入选择界面3.数据录入4.信息显示
22、5.信息查询,分按月份查询和按日期查询查询月份,5月按日期查询6.修改密码修改密码后重新登录7.退出二、管理员登录数据演示进入管理员界面1. 显示用户的信息2. 对用户信息进行追加,也就是插入3.对用户信息进行排序,按月份排序 按日期排序 按进账数目进行排序 按出账数目进行排序4. 信息删除 5.信息修改,分为修改月份 修改日期 修改进账数目 修改出账数目错误数据演示:1.用户名或密码错误时2.查询输入错误数据时3. 所删除的信息不存在时六、调试情况,设计技巧及体会1. 这个系统是第一次做,对于一些基本功能的需求都可以实现,这也加强了我对C语言这学期所学到的知识的理解和应用,果然要讲理论知识应
23、用到实际中是一件很有挑战性的事。对于这个系统我觉得做的特别粗糙,作为一个课件来演示的话还可以,但是真正应用到实际生活中缺陷很大,比如没有设置余额查询系统,这是这个系统最大的缺陷,由于我的有些知识还未掌握熟练,所以没有做这个系统,很是遗憾。2. 本次课设,我感受很多。深刻地懂得了理论联系实际的重要性。在课设过程中,我发现了自己有很多欠缺的地方,比如:涉及的相关知识不全面,知识学得不够透彻,在课设时就会遇到重重困难,它启示着我在以后的学习中要精益求精,对有用的知识要做到深入研究。在本次课程设计中,要感谢老师对我的指导,对于一些自己无法修正的错误通过老师的讲解让我对于C语言的理解更加透彻,也体会到细
24、节决定成败,一个很小的错误可能导致整个程序无法运行。同时要十分感谢两个同学,杨文鹏和冯鹏飞同学,对我的帮助特别大,尤其是杨文鹏同学教会我函数功能放到系统中如何实现的方法,给我打通了一条写C语言程序的思路,让我将学来的知识能够灵活运用,还有冯鹏飞同学为我耐心讲解链表的插入方法,以及帮我改正一些语法和逻辑上的错误,这些都是我通过这次课程设计而收获到的宝贵财富。通过这次课程设计,我发现用一些字母下划线等组合起来的小小程序可以实现强大的功能是一件特别让人惊喜的事情,提升了我对C语言学习的兴趣,在以后的学习中,我相信自己会更加努力,彻底学好C语言这门课程。七、参考文献 C程序设计实例教程金林樵主编 机械
25、工业出版社C程序设计(第三版)谭浩强 清华大学出版社 C语言课程设计案例精编郭翠英 中国水利水电出版社八、附录(源代码)#include#include#includeconio.h#include/*int load();/登录系统void menu();/用户登录菜单void menu_1();/管理员登陆菜单linklist creat();/链表创建void save(linklist h);/ 储户信息保存Node *show();/储户信息的读出Node *print(linklist h);/储户信息显示Node *search();/进行信息查询/linklist insert();/插入系统/void Insert()/大插入,完成功能的实现res();/密码修改系统功能linklist recr();/信息修改系统功能void Recr();/信息修改系统功能实现过程/linklist sort(linklist head)/排序/void Sort();/大排序Node *del(Node *p);/信息删除系统功能void Del();/信息删除系统功能实现过程*/struct date int mon; int day;typedef struct basic_inf char num20; struct date Date; float ina
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1