ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:252.77KB ,
资源ID:9609332      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9609332.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(帐目管理系统的设计与实现.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

帐目管理系统的设计与实现.docx

1、帐目管理系统的设计与实现一 设计要求 2二 设计作用与目的 2三 运行环境及工具软件 23.1 硬件环境 33.2 软件环境 3四 系统设计 34.1 系统总体设计 34.2 程序设计组成框图、流程图 34.3 各模块具体设计 54.3.1 主函数模块设计 54.3.2 创建函数模块 64.3.3 查看函数模块 84.3.4 开户函数模块 84.3.5 销户函数模块 104.3.6修改帐目函数模块 114.3.7 查询函数模块 12五 源程序设计 14六 实验调试结果 26七 设计中的问题及解决方法 29八 设计心得 29九 参考文献 30帐目管理系统的设计与实现一、 设计要求此处的账目管理是

2、整个银行业务中的一小部分,主要包括借款、还款、存款业务。同时,通过帐目管理系统的设计,运用计算机软件软件基础所学的知识,提高编程兴趣与编程思路,合理的运用资料,实现理论与实际相结合。(1) 为了管理账户,设置两个单链表:一是账户基本信息,包括账户的账号、姓名、身份证号、建账日期等信息;另一个是账户余额,包括账户的账号和当前余额两项数据。(2) 本程序能够执行账户的开户、借款、还款、存款、清户(删除)等操作,而且能够实现对账户信息的查询统计功能、按借款户的余额从大到小排序功能、按存款户的余额从大到小排序功能和按开户日期从小到大排序功能等。(3) 开新户时,用户只输入姓名、身份证号、金额、日期四个

3、数据,由程序自动生成帐号并通知用户,并将相关数据同时插入上述两个链表中;(4) 余额为负数表示借款额,为正数表示存款额。(5) 能够按账号查询账户的基本信息和当前余额,能够列出最大借款额账户和最大存款额账户的基本信息和当前余额。(6) 程序能够统计当前帐户个数,当前借款总额、当前还款总额以及借款总额与存款总额的差额。(7)收集资料,全面分析课题,分解问题,形成总体编程思路;(8)深入分析各个小问题,编写各部分程序模块;(9)对于设计中用到的关键函数,要联系问题进行具体介绍;(10)上机调试,确保程序能正确运行,完成设计报告,并进行答辩。二、设计作用与目的 (1)通过设计,强化C语言的运用及C语

4、句的准确掌握; (2)通过设计,加强我们对计算机软件软件基础知识的理解和运用; (3)通过设计,掌握设计软件一般方法,了解软件设计的一般思路;(4)通过设计,锻炼撰写报告的水平。三、运行环境及工具软件3.1 硬件环境设备:采用Intel 应用服务器运行时内存要求:1MB;安装所需硬盘:2MB;3.2 软件环境操作系统:Windows 2000/XPista工具软件:MyTC四、系统设计4.1 系统总体设计此银行帐目管理系统包括六个模块,分别为创建一个空账目、显示账目信息、添加新账目、删除账目信息、修改账目信息、查找所需账目信息。其中添加新账目包含姓名、身份证号、金额、日期四个数据的输入。修改账

5、目信息还包含了借款、存款、取款功能。查询功能包含查询所存有的账户个数、查询最大存款户、查询最大借款户。功能模块图如图1所示。4.2 程序设计组成框图、流程图 4.3 各模块具体设计本程序按要求设计一个账目管理系统,编译器为:myTC。程序源文件名为zhangmu.c。程序入口为main()函数:先由fopen()函数创建一个存储账目信息的文档:fopen(D:account.txt,r+);由于进行的“r+“操作,首先在D盘创建一个account.txt文件。4.3.1 主函数模块设计主函数用到函数为:fopen(打开文件) 相关函数 open,fclose表头文件 #include定义函数

6、FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容

7、会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。由于Dos窗口显示有限,所以限制账目数量为15个。本程序包含6大功能模块:1- 创建一个空账目;2- 显示账目信息;3- 添加新账目;4- 删除账目信息;5- 修改账目信息;6- 查找所需账目信息;6- 推出程序;为了管理账户,设置两个单链表:一是账户基本信息,包括账户的账号、姓名、身份证号、建账日期等信息;另一个是账户余额,包括账户的账号和当前余额两项数据。本程序只创建了一个单链表:struct bankdata /*定义一个结构体*/int num;

8、 /*账户的账号*/char name20; /*姓名*/char person_num19; /*身份证号*/float balance; /*金额*/int establishtime; /*日期*/所以在对账户的余额的操作功能上有教大的欠缺,日后定将进一步完善此项功能。4.3.2 创建函数模块1- create(FILE *ptr)/*创建具有结构体的空文档*/struct bankdata data=-1,NONAME,NONUM,0,0;对结构体进行初始化操作,即创建一个空账目。for(num=0;num=15;num+) 通过for循环限制账目数量。本功能模块用到的函数有:fsee

9、k(移动文件流的读写位置) 相关函数 rewind,ftell,fgetpos,fsetpos,lseek表头文件 #include定义函数 int fseek(FILE * stream,long offset,int whence);函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。参数 whence为下列其中一种:SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。SEEK_END将读写位置指向文件尾后再增加offse

10、t个位移量。当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。下列是较特别的使用方式:1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf表头

11、文件 #include定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。返回值 返回实际写入的nmemb数目。4.3.3 查看函数模块1- view(FILE *ptr)/*查看文档内容*/本功能模块用到的函数有:fseek (FILE * stream,long offset,

12、int whence);fread(从文件流读取数据) 相关函数 fopen,fwrite,fseek,fscanf表头文件 #include定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或fer

13、ror()来决定发生什么情况。返回值 返回实际读取到的nmemb数目。4.3.4 开户函数模块2- add(FILE *ptr)/*添加一个帐目*/添加账目,输入用户操作, 程序设计要求:开新户时,用户只输入姓名、身份证号、金额、日期四个数据,由程序自动生成帐号并通知用户,并将相关数据同时插入上述两个链表中;本程序账号由人工手动输入。其余项目也有人工输入。fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); Scanf();fseek(ptr,data.num*s

14、izeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr);实现对数据的输入,及存储。通过函数嵌套操作实现对用户身份证号码的格式化操作。getperson_num(char *person_num) /*函数功能:读取用户身份证号码(15位 或者 18位 )*/4.3.5 销户函数模块 3-delete(FILE *ptr)/*删除一个帐目*/通过本功能实现销户操作,销户条件为用户姓名。for(num=0;num=15;num+) fseek(ptr,num*(sizeof(struct bankd

15、ata)+sizeof(int),SEEK_SET); fread(name2,20,1,ptr); if(strcmp(name1,name2)=0) num1num=num;对输入用户进行查找,并与账目内容进行比较。通过对num2的值进行判断,实现对不同账号下的同一用户进行操作,对未找到用户的提示。4.3.6修改帐目函数模块4-modify(FILE *ptr)/*修改帐目*/程序设计要求:本程序能够执行账户的借款、还款、存款操作。由于单链表在功能实现上的限制,只能通过本功能对三项操作实现同一数据的修改操作。输入余额为负数表示借款额,为正数表示存款额。本功能对程序的综合能力要求较高,时间有

16、限,待以后进一步完善。4.3.7 查询函数模块5- research(FILE *ptr)/*对所需账目内容进行查询*/模块功能流图如下打开界面,进入查询操作: 图6 查询系统界面查询功能包含三项子功能: 0-countn /*查询所存有的账户个数*/ 1-The max. depositor accountn /*查询最大存款户*/ 2-The max. borrowing accountn /*查询最大借款户*/ 3-quiten /*退出查询*/能够实现对账户信息的查询统计功能、按借款户的余额从大到小排序功能、按存款户的余额从大到小排序功能和按开户日期从小到大排序功能等。 能够按账号查询

17、账户的基本信息和当前余额,能够列出最大借款额账户和最大存款额账户的基本信息和当前余额。当前借款总额、当前还款总额以及借款总额与存款总额的差额。本程序通过函数嵌套操作,应该可以很好的实现大部分功能,但是,由于指针参数传递过程中,程序调用总出现问题,个人对指针的学习掌握还不够熟练,所以通过在同一模块下的判断语句进行选项操作1-操作和2-操作都是用选择排序法,分别找出最大存款户和最大借款户。在冒泡排序、选择排序、快速排序、插入排序等当中选择排序最易理解,运行速度也比较快。所以用选择排序法进行查找操做。五、源程序设计#include#includestruct bankdata /*定义一个结构体*/

18、int num;/*账户的账号*/char name20;/*姓名*/char person_num19;/*身份证号*/float balance;/*金额*/int establishtime;/*日期*/create(FILE *ptr)/*创建具有结构体的空文档*/ int num; struct bankdata data=-1,NONAME,NONUM,0,0; for(num=0;num=15;num+) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,

19、ptr); printf(Blank accounts have been created completen); view(FILE *ptr)/*查看文档内容*/ int num; struct bankdata data; clrscr();/*功 能: 清除文本模式窗口 清屏的意思 就是把之前显示出的文字字符去掉*/ printf(the accountnum, the account person_name, the person_num, the blankdata, the estableshtimen); for(num=0;num15;num+) fseek(ptr,num*

20、sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); printf(%-10d%-16s%-20s%-10f %-15dn,data.num,data.name,data.person_num,data.balance,data.establishtime); add(FILE *ptr)/*添加一个帐目*/ int num; struct bankdata data; printf(Enter new account number(0-15):n); scanf(%d,&num); fse

21、ek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); if(data.num!=-1) printf(Account %d already contains informaton.n,num); else printf(Enter name.n); scanf(%s,data.name); printf(please put into the person_num: ); getperson_num(data.person_num); printf(Enter bala

22、nce.n); scanf(%f,&data.balance); printf(Enter establishtime.n); scanf(%d,&data.establishtime); data.num=num; fseek(ptr,data.num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr); getperson_num(char *person_num) /*函数功能:读取用户身份证号码(15位 或者 18位 )*/ do int i,mark; char ch; for(

23、i=0;i+) /*输入有效性判断(只能是数字)*/ if(ch=getchar()!=n) if(ch=0) person_numi=ch; else break; else break; person_numi=0; if(strlen(person_num)!=15&strlen(person_num)!=18) printf(ID number can only be 15, or 18-bit,the person_num should be a num!n); else break; while(1); /*循环以保证读入数据有效*/delete(FILE *ptr)/*删除一个帐

24、目*/ int num,num2; int num116=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1; char name120; char name220; struct bankdata blankdata=-1,NONAME,NONUM,0,0; struct bankdata data; printf(Enter delete name.n); scanf(%s,name1); for(num=0;num=15;num+) fseek(ptr,num*(sizeof(struct bankdata)+sizeof(int),SEEK_

25、SET); fread(name2,20,1,ptr); if(strcmp(name1,name2)=0) num1num=num; for(num=0,num2=0;num1) printf(Which account do you want to delete?n); scanf(%d,&num); fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fwrite(&blankdata,sizeof(struct bankdata),1,ptr); if(num2=1) fseek(ptr,data.num*sizeof(struct ban

26、kdata),SEEK_SET); fwrite(&blankdata,sizeof(struct bankdata),1,ptr); if(num2=0) printf(There is no your name.n);modify(FILE *ptr)/*修改帐目*/ int num,num2; int num316=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1; float num1; char name120; char name220; struct bankdata data; printf(Enter modify name.n)

27、; scanf(%s,name1); for(num=0;num=15;num+) fseek(ptr,num*(sizeof(struct bankdata)+sizeof(int),SEEK_SET); fread(name2,20,1,ptr); if(strcmp(name1,name2)=0) num3num=num; for(num=0,num2=0;num=15;num+) if(num3num!=-1) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); printf(%-10d%-16s%-10f%-10dn,data.num,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1