版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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语句的准确掌握;2
4、) 通过设计,加强我们对计算机软件软件基础知识的理解和运用;3) 通过设计,掌握设计软件一般方法,了解软件设计的一般思路;4) 通过设计,锻炼撰写报告的水平三、运行环境及工具软件3.1硬件环境设备:采用Intel应用服务器 运行时内存要求:1MB;安装所需硬盘:2MB;3.2软件环境操作系统:Win dows 2000/XPista工具软件:MyTC四、系统设计4.1 系统总体设计此银行帐目管理系统包括六个模块,分别为创建一个空账目、显示账目信息、添加新 账目、删除账目信息、修改账目信息、查找所需账目信息。其中添加新账目包含姓名、身 份证号、金额、日期四个数据的输入。修改账目信息还包含了借款、
5、存款、取款功能。查 询功能包含查询所存有的账户个数、查询最大存款户、查询最大借款户。功能模块图如图 1所示。银行帐目管理系统创显建示空账账目目信 息姓 名身 份 证 号 码账 户 个 数删 除 账 目最大存款户最 大 借 款 户图1银行帐目管理系统模块图4.2程序设计组成框图、流程图开始4.3 各模块具体设计本程序按要求设计一个账目管理系统,编译器为: myTC程序源文件名为zhangmu.c。 程 序 入 口 为 main() 函 数 : 先 由 fopen() 函 数 创 建 一 个 存 储 账 目 信 息 的 文 档 : fopen("D:account.txt",&
6、quot;r+");由于进行的“叶“操作,首先在 D盘创建一个 account.txt文件。4.3.1 主函数模块设计主函数用到函数为:fopen (打开文件)相关函数 open, fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长
7、度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件, 若文件存在则文件长度清为零, 即该文件内容会 消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保 留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件, 如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会 被保留。由于Dos窗口显示有限,所以限制账目数量为 15个本程序包含 6 大功能模块:0-创建一个空账目;1-显示账目信息;2-添加新账目;3-4-删除账目信息;修改账目信息;5-6-查
8、找所需账目信息;推出程序;为了管理账户,设置两个单链表:一是账户基本信息,包括账户的账号、姓名、身份证号、建账日期等信息;另一个是账户余额,包括账户的账号和当前余额两项数据。本程序只创建了一个单链表:struct bankdata /*定义一个结构体 */int num;/*账户的账号 */char name20; /*姓名*/char person_num19; /*身份证号 */float balance; /*金额*/int establishtime; /*日期*/所以在对账户的余额的操作功能上有教大的欠缺,日后定将进一步完善此项功能。4.3.2 创建函数模块0- create(FIL
9、E *ptr)/* 创建具有结构体的空文档 */struct bankdata data=-1,"NONAME","NONUM",0,0; 对结构体进行初始化操作,即创建 一个空账目。for(num=0;num<=15;num+) 通过 for 循环限制账目数量。 本功能模块用到的函数有:fseek (移动文件流的读写位置)相关函数 rewind , ftell , fgetpos , fsetpos , lseek表头文件 #include<stdio.h>定义函数 int fseek(FILE * stream,long offse
10、t,int whence);函数说明 fseek() 用来移动文件流的读写位置。参数 stream 为已 打开的文件指针,参数offset为根据参数whenee来移 动读写位置的位移数。参数whenee为下列其中一种:SEEK_SE从距文件开头offset位移量为新的读写位置。SEEK_CU以目前的读写位置往后增加offset个位移 量。SEEK_EN将读写位置指向文件尾后再增加offset个位移量。当 whenee值为 SEEK_CU或 SEEK_EN时,参数 offset 允许负值的出现。下列是较特别的使用方式 :1) 欲将读写位置移动到文件开头时 :fseek(FILE*stream,0
11、,SEEK_SET);2) 欲将读写位置移动到文件尾时 :fseek(FILE*stream,0,0SEEK_END);返回值 当调用成功时则返回 0,若有错误则返回 -1, errno 会存 放错误代码。附加说明 fseek() 不像 lseek() 会返回读写位置,因此必须使用 ftell() 来取得目前读写的位置。fwrite将数据写至文件流)相关函数 fopen , fread , fseek , fseanf表头文件 #inelude<stdio.h>定义函数 size_t fwrite(eonst void * ptr,size_t size,size_tnmemb,F
12、ILE * stream);函数说明 fwrite() 用来将数据写入文件流中。参数 stream 为已打开 的文件指针,参数 ptr 指向欲写入的数据地址,总共写入 的字符数以参数 size*nmemb 来决定。 Fwrite() 会返回实际 写入的nmem数目。返回值返回实际写入的nmem数目。433查看函数模块1- view(FILE *ptr)/* 查看文档内容 */ 本功能模块用到的函数有:fseek (FILE * stream,long offset,int whence);fread (从文件流读取数据)相关函数 fopen ,fwrite ,fseek ,fscanf表头文件
13、 #include<stdio.h>定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE* stream);函数说明 fread() 用来从文件流中读取数据。参数 stream 为已打开的 文件指针,参数 ptr 指向欲存放读取进来的数据空间,读取 的字符数以参数size*nmemb来决定。Fread()会返回实际读 取到的nmem数目,如果此值比参数nmemb来得小,贝M弋表 可能读到了文件尾或有错误发生,这时必须用 feof() 或 ferror() 来决定发生什么情况。返回值返回实际读取到的nmem数目。4.3.
14、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*sizeof(struct bankdata),SEEK_SET);
15、fwrite(&data,sizeof(struct bankdata),1,ptr);实现对数据的输入,及存储。 通过函数嵌套操作实现对用户身份证号码的格式化操作。getperson_num(char *person_num) /* 函数功能:读取用户身份证号码 (15 位 或者 18 位 )*/图3开户功能模块流程图435销户函数模块3- delete(FILE *ptr)/*删除一个帐目 */通过本功能实现销户操作,销户条件为用户姓名。for(num=0; num <=15; nu m+)fseek(ptr,num*(sizeof(struct bankdata)+size
16、of(int),SEEK_SET); fread(name2,20,1,ptr);if(strcmp(name1,name2)=0) num1num=num; 对输入用户进行查找,并与账目内容进行比较。通过对 num2 的值进行判断,实现对不同账号下的同一用户进行操作,对未找到用户 的提示。4.3.6 修改帐目函数模块4- modify(FILE *ptr)/* 修改帐目 */ 程序设计要求:本程序能够执行账户的借款、还款、存款操作。 由于单链表在功能实现上的限制,只能通过本功能对三项操作实现同一数据的修改操作。 输入余额为负数表示借款额,为正数表示存款额。本功能对程序的综合能力要求较高,时间
17、有限,待以后进一步完善。图4修改账目功能模块流程图437查询函数模块5- research(FILE *ptr)/*对所需账目内容进行查询*/模块功能流图如下结束图5查询模功能模块流程图打开界面,进入查询操作:图6查询系统界面查询功能包含三项子功能:"O-countn"/*查询所存有的账户个数*/"1-The max. depositor accountn"/* 查询最大存款户 */"2-The max. borrowing accountn"/* 查询最大借款户 */"3-quiten"/* 退出查询 */能够实
18、现对账户信息的查询统计功能、按借款户的余额从大到小排序功能、按存款户 的余额从大到小排序功能和按开户日期从小到大排序功能等。能够按账号查询账户的基本信息和当前余额,能够列出最大借款额账户和最大存款额账户的基本信息和当前余额。当前借款总额、当前还款总额以及借款总额与存款总额的差额。本程序通过函数嵌套操作,应该可以很好的实现大部分功能,但是,由于指针参数传递过 程中,程序调用总出现问题,个人对指针的学习掌握还不够熟练,所以通过在同一模块下 的判断语句进行选项操作1-操作和2-操作都是用选择排序法,分别找出最大存款户和最大借款户。在冒泡排序、选择排序、快速排序、插入排序等当中选择排序最易理解,运行速
19、度也比较 快。所以用选择排序法进行查找操做。五、源程序设计#i nclude<stdio.h>定义一个结构体*/#i nclude<stri ng.h> struct ban kdata /* int num;/* 账户的账号 */char name20;/* 姓名 */char person_num19;/* 身份证号 */float balance;/*金额 */int establishtime;/*日期 */create(FILE *ptr)/* 创建具有结构体的空文档 */int num;struct bankdata data=-1,"NONAME
20、","NONUM",0,0;for(num=0;num<=15;num+)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET);fwrite(&data,sizeof(struct bankdata),1,ptr);printf("Blank accounts have been created completen");view(FILE *ptr)/* 查看文档内容 */int num;struct bankdata data;clrscr();/* 功 能 : 清除文本模式窗口 清屏的
21、意思 就是把之前显示出的文字字符去掉 */printf("the accountnum, the account person_name, the person_num, the blankdata, the estableshtimen");for(num=0;num<15;num+)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET);fread(&data,sizeof(struct bankdata),1,ptr);printf("%-10d%-16s%-20s%-10f %-15dn",d
22、ata.num,,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);fseek(ptr,num*sizeof(struct bankdata),SEEK_SET);fread(&data,sizeof(struct bankdata),1,ptr)
23、;if(data.num!=-1)printf("Account %d already contains informaton.n",num);elseprintf("Enter name.n");scanf("%s",);printf("please put into the person_num: ");getperson_num(data.person_num);printf("Enter balance.n");scanf("%f",&dat
24、a.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 位 )*/doint i,mark;char c
25、h;for(i=0;i+) /* 输入有效性判断 (只能是数字 )*/ if(ch=getchar()!='n')if(ch<='9'&&ch>='0')person_numi=ch;elsebreak;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 sh
26、ould be a num!n");elsebreak;while(1); /* 循环以保证读入数据有效 */delete(FILE *ptr)/* 删除一个帐目 */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 del
27、ete name.n");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) num1num=num;for(num=0,num2=0;num<=15;num+)if(num1num!=-1)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&
28、;data,sizeof(struct bankdata),1,ptr);printf("%-10d%-16s%-20s%-15f%-15dn",data.num,,data.person_num,data. balance,data.establishtime);num2+;if(num2>1) printf("Which account do you want to delete?n");scanf("%d",&num); fseek(ptr,num*sizeof(struct bankdata),
29、SEEK_SET); fwrite(&blankdata,sizeof(struct bankdata),1,ptr); if(num2=1) fseek(ptr,data.num*sizeof(struct bankdata),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
30、,-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");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) nu
31、m3num=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,,data.balance,data.establis htime);num2+;printf("%dn",num2);if(num2>1)print
32、f("Which account do you want to modify?n");scanf("%d",&num);fseek(ptr,num*sizeof(struct bankdata),SEEK_SET);fread(&data,sizeof(struct bankdata),1,ptr);printf("Enter charge(+) or payment(-)n");scanf("%f",&num1);data.balance+=num1;fseek(ptr,num*sizeo
33、f(struct bankdata),SEEK_SET);fwrite(&data,sizeof(struct bankdata),1,ptr);if(num2=1)printf("Enter charge(+) or payment(-)n");scanf("%f",&num1);data.balance+=num1;fseek(ptr,data.num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr);if(num2=0
34、) printf("There is no your name.n");/*/research(FILE *ptr)/*查询 */FILE *refptr;int num,num2;int count=0;int res_choice=0;int arraydata15;int pData15;int i,j,x=0;int n=0;int iTemp;int iPos;struct bankdata data; clrscr();while(res_choice!=3)printf("nEnter your res_choicen"/*菜单 */&qu
35、ot;0-countn" /* 账户个数 */* 最大存款户 */* 最大借款户 */"1-The max. depositor accountn" "2-The max. borrowing accountn" "3-quiten" /* 退出查询 */ );scanf("%d",&res_choice);if(res_choice=0)for(num=0;num<=15;num+)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread
36、(&data,sizeof(struct bankdata),1,ptr);if(data.num!=-1) count+;printf(">>);printf("The account number is %dn",count); else if(res_choice=1) for(num=0;num<15;num+)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET);fread(&data,sizeof(struct bankdata),1,ptr);if(data.balance&
37、gt;0) arraydatan=data.balance; n+; /* 编程过程测试用 printf("arraydata0="); printf("%10dn",arraydata0); printf("arraydata1="); printf("%10dn",arraydatan-1);*/for(i=0;i<n;i+) printf("%10dn",arraydatai); for(x=0;x<n;x+) iTemp=arraydata0; iPos=x; for(j=x
38、+1;j<n;j+) if(arraydataj>iTemp) iTemp=arraydataj;iPos=j; arraydataiPos=arraydata0; arraydata0=iTemp;if(arraydata0>0)printf("The max. depositor account is"); printf("%10dn",arraydata0);elseprintf("There is no the max. depositor account");else if(res_choice=2)for
39、(num=0;num<15;num+)fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr);if(data.balance<0) arraydatan=data.balance; n+; elsebreak;for(x=0;x<n;x+)iTemp=arraydata0;iPos=x;for(j=x+1;j<n;j+)if(arraydataj<iTemp)iTemp=arraydataj;iPos=j;arraydataiPo
40、s=arraydata0;arraydata0=iTemp;if(arraydatax-1<0)printf(">>);printf("The max. borrowing account is");printf("%10dn",arraydatax-1);elseprintf("There is no the max. borrowing account");/*while 循环结束标记 */*/ main()FILE *fptr;int choice=0;if(fptr=fopen("D:ac
41、count.txt","r+")=NULL)printf("File couldn't be opened.n");elsewhile(choice!=6)printf("nEnter your choicen"/*菜单 */"0-create accountn""1-view accountn""2-add accountn""3-delete accountn""4-modify accountn""5-
42、research accountn""6-quitn");scanf("%d",&choice);switch(choice)case 0:create(fptr);break;case 1:view(fptr);break;case 2:add(fptr);break;case 3:delete(fptr);break;case 4:modify(fptr);break;case 5:research(fptr);break; fclose(fptr);return(0);六、实验调试结果首先在D盘创建一个account.txt文件,
43、将程序输入到 MyTC中,对源程序进行编译,运行程序:c:vd: ITDOCE lt cbiBrun. ezeFr>ter ynin*0ci'eate account 1 uiew acconnt2- add account3- delete account4- nodify account5- reseai'ch account bquit首次运行,需先进行0操作,创建一个空的账目cr d:WTDOCU*l-tcbinrun_ eseEnt炉 youi* choipo0ci*eate account1 uiew account2 add account3 delete
44、acdoumt4 nodify accouot5 research account6 quitIBlank accounts Jiaue been created completeEnter your choice0credits acuuurntluiew accountZ-add account3 delete accouiit4 modif y account5 research account6 quit创建空账目后,进行1-操作:小 d: XMlDOCU8* 1 t cbin run.eze 口 X-1NONfiMEHONUH0俪腼腼fi-1NONAMENONUH0.B3B00S8-
45、1NOHAMfNO NUN0.00B0B00-1NONAMEHONUM0.03S0000hlNONAMEHONUHD-1NOHAMENONUH0.0300000-1NONAMENONUH0-丽00000-1NONAMENONUH0-丽00000-1NONAM£NONUM3.O3S0000hlNONAMEHONUM0-1NOHAMENONUH0.03000001NONAMENONUN0.03BQB80klNONAMENONUM8-1NONAMENONUM0.09300001NONAMENONUM0.09QQ000Enteyoui* choice!0-create accountL-ylewaccoiuLini t2-addaccounl:3-doloto iGcount4-modiFy account&-reseai*ch accountGb-quit开户时,进行2-操作:2Enter neu account nunbei*(®-15?:1EritEF name.yi*please put into the jperson_nuE: ID number ca» only he 15, or lU-bittlie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 来电来访奖惩制度
- 农村保洁奖惩制度
- 供电局员工奖惩制度
- 叉车损坏奖惩制度
- 工地电气奖惩制度
- 4人小团队奖惩制度
- 员工就餐奖惩制度
- 校园纪律奖惩制度
- 植物养护奖惩制度
- 汽服门店奖惩制度
- 中国航空油料集团有限公司2026 届校园招聘笔试备考题库及答案解析
- XX区实验初级中学2026年春季学期校园意识形态工作方案
- 基于遥感技术的生态监测智能方案
- 2026黑龙江省交通运输厅所属事业单位招聘86人考试参考题库及答案解析
- 2026及未来5年中国银行资产托管行业市场运营态势及投资前景研判报告
- 城市供水管网巡检与维修操作手册(标准版)
- 2026年荆门市急需紧缺人才引进1502人笔试备考题库及答案解析
- 2026年春季北师大版小学数学二年级下册教学计划(含进度表)
- 工艺报警考核制度
- 2025年泰州职业技术学院单招职业倾向性考试题库带答案解析
- (新教材)2026年春期人教版三年级下册数学教学计划+教学进度表
评论
0/150
提交评论