1、四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为九个模块,每一个模块对应一个函数。在这些函数当中,储户开户函数,余额查询函数,储户销户函数,密码查询函数的实现严格按照题目的要求,而更改数据函数和显示函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。1. 储户开户函数 主要实现程序最初运行时储户信息的录入以及其后的运行中储户信息的追加功能;2. 余额查询函数 允许按照账号和密码对储户的余额进行查询;3. 储户销户函数 实现的功能是按照账号和密码对
2、储户的信息进行删除;4. 储户密码修改函数 可以实现对储户的密码进行修改;5. 显示函数 实现的是显示目前所有的有效储户记录信息。除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个储户记录都包含账号,姓名,密码,身份证号和余额,在程序当中,将储户记录类型定义为结构体类型,添加以及追加的储户信息直接写入E盘的account.dat文件中,其它函数每次对储户记录的访问,其数据来源都是account.dat文件,这样做不但可以保证储户信息的一致性,而且可以对储户信息进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1
3、. 程序总体结构图图1程序总体结构图2. 具体功能框图(1)储户开户函数add图2 添加储户信息函数(2)读取储户信息函数reads图3读取储户信息(3)储户销户函数del图4 删除储户记录三、核心技术的实现说明及相应程序段本程序主要由九个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加储户开户函数、余额查询函数和储户销户函数是程序中较为核心的部分,下面分别进行说明。1. 储户开户函数开户分为两种情况,其一是在储户文件(account.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的储户信息写入该文件当中;其二是在储户文件(a
4、ccount.dat)已经存在的情况下,此时文件以追加的方式打开,这样才可以保证以前已经存在的信息不丢失。具体的程序段如下:if(fp=fopen(account.dat,a)=NULL) /如果文件已经存在,可以追加储户信息 if(fp=fopen(w)=NULL) / 文件不存在时,创建新文件,输入储户信息 printf(用户不存在!n); return ; printf(n请输入储户帐号,并按回车键确认: scanf(%s,dep.num); fprintf(fp,n%sn n请输入储户姓名,并用回车键确认: n,dep.name);n请输入储户身份证号,并用回车键确认:,dep.per
5、);n请输入储户密码,并用回车键确认:%f,&dep.sec);n%fn,dep.sec);n请输入储户金额,并按回车键确认:dep.mon);,dep.mon);n *开户成功*n fclose(fp);2. 余额查询函数 对储户的余额查询首先调用reads函数将文件中的储户信息读入数组当中,并由用户输入待查询储户的账号和密码,而后按照该账号和密码进行查找,如果文件中存在该储户的信息,则采用查询函数进行查询,否则输出输入错误的提示信息。具体程序段如下:n=reads(dep);n请用户输入账号,密码,用空格隔开,按回车键确认:%s %f,s,&t); for(i=0;i=n | t!=dep
6、i.sec) n 输入错误 n return ; else printf(*储户的余额如下*n 余额 nn %11.2f n, depi.mon);*n 3. 储户销户函数该函数的核心内容是删除算法以及最终对源文件的更新。该函数执行时,首先调用reads函数将文件中的储户信息读入数组当中,并由用户输入待删除储户的账号和密码,而后按照该账号和密码进行查找,如果文件中存在该储户的信息,则采用删除算法删除,否则输出储户信息不存在的提示信息。对储户信息的具体删除算法是在结构体数组中实现的,当储户的信息被找到后,位于数组中该储户后面的储户记录依次向前移动一个元素的位置,这些操作完成后,要删除的储户信息就
7、被后面的数组元素覆盖掉了,也就实现了删除。在数组中删除储户信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。n请输入要删除储户账号,密码,用空格隔开,按回车键确认:,number,&i+) if(strcmp(number,depi.num)=0&t=depi.sec) break; if(i=n|t!=depi.sec)没有找到该储户信息! return; else for(j=i+1;jj+) depj-1=depj; save(dep,n-1);销户成功!四、课设总结 本次课设,我感受很多。深刻地懂得了理论联系实际的重要性。在课设过程中,我发现了自己有很多欠缺的地方,比如:
8、涉及的相关知识不全面,知识学得不够透彻,在课设时就会遇到重重困难,它启示着我在以后的学习中要精益求精,对有用的知识要做到深入研究。 我很感谢指导老师,和在课设过程中帮助过我的同学,他们能在我困难的时候,帮我从困境中解脱出来,让我能顺利地在有限的时间里,完成任务。本次课设,不仅深化了我对课本内容的理解,而且拓宽了我的知识面。我的程序按照指导任务书的要求顺利地完成了任务,实现了所有的功能,整个程序采用模块化设计方法,在程序界面,以菜单的形式调用各功能函数;程序可读性强,界面友好;输出形式美观。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京
9、:中国铁道出版社,2006六、源程序#includestring.hstdlib.h#includeconio.h#define N 20struct depositorchar num20; char name20; char per20; float sec; float mon;void menu();int reads(struct depositor depN);void save(struct depositor depN,int n);void add();void del();void change();void show();void main() int n; while(
10、1) menu();n 请输入您要选择的操作序号,按回车键确认:%dn); switch(n) case 1: add();break; case 2: show(); case 3: del(); case 4: change(); case 5: exit(0); default:输入错误,请输入列表中存在的序号!n void menu() % n * 银行个人账户管理系统* n 1 储户开户n 2 余额查询n 3 储户销户n 4 密码修改n 5 退出n * n % int reads(struct depositor depN) / 读取储户内容 FILE *fp; int i=0;r)
11、=NULL)文件打开失败! return 0;!feof(fp); fscanf(fp,n%s %s %s %f %fn,depi.num,depi.name,depi.per,&depi.sec,&depi.mon); return i;void save(struct depositor depN,int n) / 储户保存后信息,depi.num,depi.name,depi.per,depi.sec,depi.mon );void add()/*储户开户*/ struct depositor dep;void show() /余额查询 struct depositor depN; int i,n ; char s20; float t ; n=reads(dep);void del() /*储户信息删除函数*/ char number20; float t; int n,i,j;void change() /储户密码更改 int n,i;n请输入要更改密码的储户账号,密码,用空格隔开,按回车键确认:t=depi.sec) break; if(i无此储户信息!n请输入更改后密码,按回车键确认:depi.sec); save(dep,n);n修改成功n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1