数据结构课程设计活期储蓄账目管理.doc

上传人:仙人指路1688 文档编号:3816249 上传时间:2023-03-23 格式:DOC 页数:33 大小:372KB
返回 下载 相关 举报
数据结构课程设计活期储蓄账目管理.doc_第1页
第1页 / 共33页
数据结构课程设计活期储蓄账目管理.doc_第2页
第2页 / 共33页
数据结构课程设计活期储蓄账目管理.doc_第3页
第3页 / 共33页
数据结构课程设计活期储蓄账目管理.doc_第4页
第4页 / 共33页
数据结构课程设计活期储蓄账目管理.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《数据结构课程设计活期储蓄账目管理.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计活期储蓄账目管理.doc(33页珍藏版)》请在三一办公上搜索。

1、活期储蓄账目管理一 目的满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求。能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账;能比较简单,迅速地实现插入和删除,以实现开户和销户的需要;熟练使用 C 语言编写程序,解决实际问题;学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。二 需求分析1、数据需求1.需先进行储户开户才可进行之后的所有的操作。2.开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成。3.销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账号及密码验证

2、后方可进行交易。2、基本功能需求基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步也可看见交易后的信息)、显示所有储户信息。3、 非功能性需求 系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。三 概要设计1、数据结构设计用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,采用数组类型的存储结构。2、储存结构体设计本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统”中的信息。其中,结构体由5个分量构成:用户账号、用户姓名、用户身份证号码、用户密码、开户金额。3、 模块设计活期储蓄账目管理

3、显示菜单选择功能 1.新建储户 2.查询储户信息3.显示所有储户信息4.删除储户5.存款 6.取款 7.退出账目管理。void add()函数实现新建储户功能void select_id()函数实现查询储户信息功能void display()函数实现显示所有储户信息功能void del()函数实现删除储户功能void save_money() 函数实现存款功能void get_money()函数实现取款功能void print()函数用于显示菜单void main()函数用于实现菜单中的功能四 详细设计1、结构体的详细定义struct user /用户类型(账号,姓名,身份证号,存款)int

4、id;char name20;char person_num19;char password6;double money;2、系统函数详细介绍void add()函数实现新建储户功能void add() /添加用户printf(%45sn,*新建储户*);printf(-nn);struct user getuser();struct user temp;int count(); /函数目的:计算文件中的记录数目 以生成自动账号FILE *fp;int number;if(fp=fopen(file,ab)=NULL)printf(Can not open file!n);exit(1);te

5、mp=getuser(); /读取用户名number=count();temp.id=number+1; /生成自动账号fwrite(&temp,sizeof(struct user),1,fp);printf(添加用户成功!n);fclose(fp);void select_id()函数实现查询储户信息功能void select_id() /查询储户信息int count();void getpassword(char *password);printf(%45sn,*查询储户信息*);printf(-n);printf(%s %15s %15s %15sn,编号,用户姓名,身份证号码,存款

6、余额);printf(-nn);FILE *fp;struct user temp;int i,maxnum;char password8;bool flag=false;if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);maxnum=count();printf(输入要查询账号:); scanf(%d,&i);if(imaxnum)printf(你要查询的账号不存在!);return;printf(输入账号密码:);scanf(%s,&password);while(fread(&temp,sizeof(struct u

7、ser),1,fp) /循环读取每一条记录 判断是否为要查看的记录if(temp.id=i&strcmp(temp.password,password)=0)printf(NO.%d %8s %25s %.2fn,temp.id,temp.name,temp.person_num,temp.money);flag=true;break;if(flag=false) /判断密码是否正确printf(您输入的密码不正确!n);return;fclose(fp);void display()函数实现显示所有储户信息功能void display() /显示所有储户信息printf(%45sn,*显示所

8、有储户信息*);printf(-n);printf(%s %15s %15s %15sn,账号,用户姓名,身份证号码,存款余额);printf(-n);FILE *fp;struct user temp;if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);while(fread(&temp,sizeof(struct user),1,fp)printf(NO.%d %10s %23s %.2fn,temp.id,temp.name,temp.person_num,temp.money);fclose(fp);void del

9、()函数实现删除储户功能void del() /删除储户printf(%45sn,*删除储户*);printf(-n);printf(%s %15s %15s %10sn,账号,用户姓名,身份证号码,存款余额);printf(-n);int count();void getname(char *name);void getperson_num(char *person_num);void getpassword(char *password);FILE *fp;int i,num,mark;char password6;bool flag=false;struct user *temp;num

10、=count();/根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user);if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);for(i=0;inum;i+)/读取文件内容fread(&tempi,sizeof(struct user),1,fp);fclose(fp);printf(输入要需要注销的账号:);scanf(%d,&mark);if(inum)printf(你要注销的账号不存在!);return;printf(输入账号密码: );scanf(%s

11、,&password);if(fp=fopen(file,wb)=NULL) /写方式打开文件,覆盖原文件中的内容printf(cannot open file!n);exit(1);for(i=0;inum;i+) /无效账户信息全部置为0if(tempi.id=mark&strcmp(tempi.password,password)=0&tempi.money=0.00) strcpy(tempi.person_num,0);strcpy(tempi.name,0);strcpy(tempi.password,0);flag=true;fwrite(&tempi,sizeof(struct

12、 user),1,fp);fclose(fp);free(temp);if(flag=false)printf(您输入的密码不正确或是余额不为零!n);elseprintf(储户注销成功!n);void save_money() 函数实现存款功能void save_money() /函数功能:存款printf(%45sn,*用户存款业务*);printf(-nn);int count();void getpassword(char *password);FILE *fp;int i,num,mark;bool flag=false;struct user *temp;char password

13、6;num=count(); temp=(struct user *)malloc(num*sizeof(struct user); /根据记录数申请空间if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);for(i=0;inum;i+) /将文件内容存入数组fread(&tempi,sizeof(struct user),1,fp);fclose(fp);printf(输入要存款账号:); /读取存款账号scanf(%d,&mark);if(inum)printf(你要查询的账号不存在!);return;printf(输入

14、账号密码: );scanf(%s,&password);if(fp=fopen(file,wb)=NULL) /写方式打开文件,覆盖原文件中的内容printf(cannot open file!n);exit(1);for(i=0;inum;i+)if(tempi.id=mark&strcmp(tempi.password,password)=0)double money=0;printf(输入要存入的金额:);scanf(%lf,&money);while(1)if(money=0)printf(只能为正数!n);money=0;printf(输入要存入的金额:);scanf(%lf,&mo

15、ney);elsebreak;tempi.money +=money; flag=true;fwrite(&tempi,sizeof(struct user),1,fp); /修改该用户的信息fclose(fp);free(temp);if(flag=false)printf(您输入的密码不正确!n);elseprintf(你存款业务已办妥!n);void get_money()函数实现取款功能void get_money() /函数功能:用户取款printf(%45sn,*用户取款业务*);printf(-nn);int count();FILE *fp;int i,num,mark;cha

16、r password6;bool flag=false;struct user *temp;num=count();/根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user);if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);for(i=0;inum;i+)/读取文件内容fread(&tempi,sizeof(struct user),1,fp);fclose(fp);printf(输入要取款账号:);scanf(%d,&mark);if(inum)printf

17、(你要查询的账号不存在!);return;printf(输入账号密码: );scanf(%s,&password);if(fp=fopen(file,wb)=NULL) /写方式打开文件,覆盖原文件中的内容printf(cannot open file!n);exit(1);for(i=0;inum;i+) if(tempi.id=mark&strcmp(tempi.password,password)=0) double money=0;printf(输入要取出的金额:);scanf(%lf,&money);if(moneytempi.money)printf(你的余额不足!n);money

18、=0;tempi.money -=money;flag=true;fwrite(&tempi,sizeof(struct user),1,fp);fclose(fp);free(temp);if(flag=false)printf(您输入的密码不正确!n);elseprintf(你取款业务已办妥!n);void print()函数用于显示菜单void print()/函数功能:输出界面printf(%48sn,*活期储蓄帐目管理系统*);printf(-nn);printf(%8s,%-20sn,1,新建储户);printf(%8s,%-20sn,2,查询储户信息);printf(%8s,%-

19、20sn,3,显示所有储户信息);printf(%8s,%-20sn,4,删除储户);printf(%8s,%-20sn,5,存款);printf(%8s,%-20sn,6,取款);printf(%8s,%-20sn,7,退出);printf(n请选择功能(17):);void main()函数用于实现菜单中的功能,主函数void main()char choose;doprint();scanf( %c,&choose);/读取功能标号,根据标号选择不同的函数fflush(stdin);system(cls);switch(choose)case 1:add();break;case 2:s

20、elect_id();break;case 3:display();break;case 4:del();break;case 5:save_money();break;case 6:get_money();break;case 7:exit(1);default:printf(对不起,你所选择的功能不存在!n); getch();/暂停功能(读取任意键继续)(conio.h) system(cls);/清除屏幕显示(stdlib.h)while(1);五 调试分析 系统运行主界面如图所示,各子功能测试运行结果如下: 每个方面实现一个功能。定义一个包含有五个变量的结构体数组,并存入文件中。定义

21、一个计数函数,贯穿整个程序。然后每个函数实现一个功能,共有六个功能。添加用户时会使用到录入姓名和录入身份证号码两个函数。查询只需要比较字符串,然后输出即可实现。显示全部储户信息只需将结构体数组依次输出即可实现。储户的存款和取款按找账号依次从文件中查找到匹配的账号,然后加上或减去存取的金额即可实现。销户时将储户除账号外信息全部置0即可。六 测试结果1.主界面截图 2.新建储户 3.查询储户信息 4.显示所有储户信息 5.存款 6.取款 7.删除储户七 用户使用说明 (1) 本程序执行文件为”活期储蓄.exe”. (2) 进入本系统后,随即显示系统主菜单页面,用户可在该界面下输入各子菜单前对应的数

22、字并按回车键,执行相应子菜单命令。 (3) 账号或密码输入不正确时,会出现提示信息,然后按任意键退出。八 课程设计总结这次课程设计中遇到了一些问题与同学一起讨论解决,从其他人身上学到了很多。 这个课程设计并不完美,还有很多要改善的地方,在删除储户时不能将储户信息从文件中删除,只能将储户信息全部置0了。还有一些没想到的细节。虽然不是很完美,但发现不足之处并在以后的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现我们的不完美,并想办法去改进这些不完美。通过这次课程设计学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了理论和时间结合是很重要的。让我进一步了解了C+程序设计方法

23、,并且对这门课产生了浓厚的兴趣。更重要的是培养了自己耐心、细心、用心的良好品质。同时也非常感谢同学的帮助及老师的建议与指导。源程序:#include#include#include#include#define file temp.txt /数据储存文件名struct user /用户类型(账号,姓名,身份证号,存款)int id;char name20;char person_num19;char password6;double money;void add() /添加用户printf(%45sn,*新建储户*);printf(-nn);struct user getuser();stru

24、ct user temp;int count(); /函数目的:计算文件中的记录数目 以生成自动账号FILE *fp;int number;if(fp=fopen(file,ab)=NULL)printf(Can not open file!n);exit(1);temp=getuser(); /读取用户名number=count();temp.id=number+1; /生成自动账号fwrite(&temp,sizeof(struct user),1,fp);printf(添加用户成功!n);fclose(fp);int count() /函数目的:计算文件中的记录总数FILE *fp;in

25、t num;struct user temp;num=0;if(fp=fopen(file,rb)=NULL)printf(Can not open file!n);exit(1);while(fread(&temp,sizeof(struct user),1,fp)num+;fclose(fp);return num;struct user getuser()void getname(char *name);void getperson_num(char *person_num);void getpassword(char *password);struct user temp;printf

26、(请输入用户姓名(字符数=100)doscanf(%lf,&temp.money);fflush(stdin);if(temp.money100.00)printf(开户金额不能小于100n);elsebreak;printf(重新输入开户金额: );while(1);return temp;void getname(char *name) /函数功能:读取用户姓名(字数=20)printf(姓名不能超过20个字符!n);else break;printf(重新输入姓名: ); /while循环,直到姓名输入有效while(1);void getperson_num(char *person_

27、num)doint i,mark;char ch;for(i=0,mark=0;i+)if(ch=getchar()!=n)if(ch=0)person_numi=ch;elseprintf(身份证号码只能是数字!n);mark=1;break;elsebreak;person_numi=0;if(mark=1)continue;if(strlen(person_num)!=18)printf(身份证号码只能是18位!n);elsebreak;printf(重新输入身份证号码: );while(1);void getpassword(char *password) do int i,j; ch

28、ar ch; for(i=0,j=0; i+) if(ch=getchar()!=n) if(ch=0) passwordi=ch; else printf(密码只能是数字!n); j=1; break; else break; passwordi=0; if(j=1) continue; if(strlen(password)!=6) printf(密码只能是6位!n); else break; printf(重新输入密码: ); while(1);void select_id() /查询储户信息int count();void getpassword(char *password);pri

29、ntf(%45sn,*查询储户信息*);printf(-n);printf(%s %15s %15s %15sn,编号,用户姓名,身份证号码,存款余额);printf(-nn);FILE *fp;struct user temp;int i,maxnum;char password8;bool flag=false;if(fp=fopen(file,rb)=NULL)printf(cannot open file!n);exit(1);maxnum=count();printf(输入要查询账号:); scanf(%d,&i);if(imaxnum)printf(你要查询的账号不存在!);ret

30、urn;printf(输入账号密码:);scanf(%s,&password);while(fread(&temp,sizeof(struct user),1,fp) /循环读取每一条记录 判断是否为要查看的记录if(temp.id=i&strcmp(temp.password,password)=0)printf(NO.%d %8s %25s %.2fn,temp.id,temp.name,temp.person_num,temp.money);flag=true;break;if(flag=false) /判断密码是否正确printf(您输入的密码不正确!n);return;fclose(fp);void display() /显

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号