《数据结构课程设计报告--活期储蓄账目管理.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告--活期储蓄账目管理.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、活期储蓄账目管理一目的满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求。能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账;能比较简单,迅速地实现插入和删除,以实现开户和销户的需要;熟练使用c语言编写程序,解决实际问题;学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编 程分析解决综合性实际问题的初步能力。二需求分析1、数据需求1 .需先进行储户开户才可进行之后的所有的操作。2 .开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成。3 .销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账 号及密码验
2、证后方可进行交易。2、基本功能需求基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步 也可看见交易后的信息)、显示所有储户信息。3、非功能性需求系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进 行。三概要设计1、数据结构设计用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关 知识将更改的数据写入文件中,采用数组类型的存储结构。2、储存结构体设计本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统”中的信息。其 中,结构体由5个分量构成:用户账号、用户姓名、用户身份证号码、用户密码、开户金 额。3、模块设计printf
3、(”45srJ*火*用户存款业务*大*”);printf(nn);int count();void getpassword(char *password);FILE *fp;int i,num,mark;bool flag=false;struct user *temp;char password6;num=count();temp二(struct user *)malloc(num*sizeof(struct user);根据记录数申请空间if(fp=fopen(file,rb)= = NULL)(printf(cannot open file!n);exit(l);)for(i=0;inu
4、m;i +)将文件内容存入数组fread(&tempi,sizeof(struct user),l,fp);fclose(fp);printf(”输入要存款账号:”);读取存款账号scanf(%d,&mark);if(inum)printf(你要查询的账号不存在!”);return;printf(输入账号密码:);scanf(%s,&password);if(fp=fopen(file,wb)= = NULL)写方式打开文件,覆盖原文件中的内容(printf(cannot open file!n);exit(l);)for(i=0;inum;i +) |if(tempi.id = = mark
5、&strcmp(tempi.password,password)=0)(double money=0;printf(输入要存入的金额scanf(%lf,&money);while(l)if(money=0)printf(”只能为正数!n);money = 0;printf(输入要存入的金额:); scanf(%lf,&money);)elsebreak;tempi.money + 二 money;flag=true;fwrite(&tempi,sizeof(struct user),l,fp);修改该用户的信息)fclose(fp);free(temp);if(flag=false)prin甘
6、(您输入的密码不正确!rT);elseprin甘(你存款业务已办妥!n);)void getjnoney。函数实现取款功能void get_money() 函数功能:用户取款printf(叫45snJ*用户取款业务 *);printf(nn);int count();FILE *fp;int i,num,mark;char password6;bool flag=false;struct user *temp;num二count。;根据记录数申请空间temp二(struct user *)malloc(num*sizeof(struct user);if(fp=fopen(file,rb)=
7、= NULL)(printf(cannot open file!n);exit(l);)for(i=0;inum;i+)读取文件内容fread(&tempi,sizeof(struct user),l,fp);fclose(fp);printf(输入要取款账号款scanf(%d,&mark);if(inum)printf(”你要查询的账号不存在!);return;)printf(输入账号密码:scanf(%s,&password);if(fp=fopen(file,wb)= = NULL)写方式打开文件,覆盖原文件中的内容(prin甘(cannot open file!n);exit(l);)
8、for(i=0;inum;i+)(if(tempi,id = = mark&strcmp(tempi.password,password)=0)(double money=0;prin甘(”输入要取出的金额scanf(%lf,&money);if(moneytempi.money)(printf(你的余额不足!n);money = 0;tempi,money -=money;flag = true;fwrite(&tempi,sizeof(struct user),l,fp);)fclose(fp);free(temp);if(flag 二二 false)(printf(您输入的密码不正确!n
9、);)elseprintf(你取款业务已办妥!n);)void print。函数用于显示菜单void printQ 函数功能:输出界面printf(”%48srT J*活期储蓄帐目管理系统*”);printf(nn);printf(”%8s,%-20srT:T :新建储户)printf(”%8s,%-20sn12:查询储户信息)printf(”%8s,%-20srTJ3”J显示所有储户信息)printf(%8s,%-20srTJ47删除储户)printf(映8s,%-20sn”J57 存款)printf(”8s,%-20srTJ6”J 取款)printf(”8s,%-20srTJ77 退出)p
10、rintf(n 请选择功能)void main。函数用于实现菜单中的功能,主函数void main()char choose;doprint();scanf( %c,&choose);读取功能标号,根据标号选择不同的函数 fflush(stdin);systemCcls);switch(choose)(case 1:add();break;case 2:select_id();break;case 3:displayQ;break;case 4:del();break;case 5:save_money();break;case 6:get_money();break;case 7:exit(
11、l);default:printf(对不起,你所选择的功能不存在所);getch();暂停功能(读取任意键继续乂 conio.h)清除屏幕显示(stdlib.h)systemCcls);while(l);五调试分析系统运行主界面如图所示,各子功能测试运行结果如下:每个方面实现一个功能。定义一个包含有五个变量的结构体数组,并存入文件中。定义 一个计数函数,贯穿整个程序。然后每个函数实现一个功能,共有六个功能。添加用户时 会使用到录入姓名和录入身份证号码两个函数。查询只需要比较字符串,然后输出即可实 现。显示全部储户信息只需将结构体数组依次输出即可实现。储户的存款和取款按找账号 依次从文件中查找到
12、匹配的账号,然后加上或减去存取的金额即可实现。销户时将储户除 账号外信息全部置0即可。六测试结果1.主界面截图 D:Visual+C + + +6.0+完整傩版新建文彳牛夹33Debug30.exe回汉2 .新建储户I o LhzU 公XD:Visual+C+ +6.0+完整版新建文件夹33Debug30.exe-3 .查询储尸信息/D:Visual+C + +6.0+完整绿色版新建文件夹33Debug3O.exe又兴兴查询储户信息又兴兴编号用户姓名身份证号码存款余额输入要查询账号:1输入账号密码:123456N0.1 李三1000.00半:void add()函数实现新建储户功能void s
13、elect_id()函数实现查询储户信息功能void display。函数实现显示所有储户信息功能void del()函数实现删除储户功能void save_money()函数实现存款功能void getjnoney。函数实现取款功能void print。函数用于显示菜单void main()函数用于实现菜单中的功能U!详细设计1、结构体的详细定义struct userint id;char name20;用户类型(账号,姓名,身份证号,存款)4 .显示所有储尸信息D:Visual+C + + +6.0+完整养版新建文件夹33Debug30.exe兴兴兴显示所有储户信息兴兴兴账号 用户姓名身份
14、证号码存款余额N0.1李三 1000.00半:5.存款D:Visual+C+ +6.0+完整 版新建文彳牛夹33Debug30.exe*用户存款业务又打输入要存款账号:1 输入账号密码:123456 输入要存入的金额:1000 你存款业务已办妥!*兴*显示所有储户信息*账号 用户姓名 身份证号码 存款余额N0.1 李三 2000.00半:6 .取款,D:Visual+C+ +6.0+完整绿色版新建文件夹33Debug3O.exe”兴兴兴用户取款业务又兴兴输入要取款账号:1 输入账号密码:123456 输入要取出的金额:2。00 你取款业务已办妥!半:*兴*显示所有储户信息*W*账号 用户姓名
15、身份证号码 存款余额N0.1李三 半:7 .删除储户 J D:Visual+C+ +6.U+完整版新建文1牛夹33Debug3U.exe兴兴兴删除储户兴兴兴账号 用户姓名身份证号码存款余额 输入要需要注销的账号:1 输入账号密码:123456 储户注销成功,半:七用户使用说明本程序执行文件为”活期储蓄.exe” .(2)进入本系统后,随即显示系统主菜单页面,用户可在该界面下输入各子菜单前对 应的数字并按回车键,执行相应子菜单命令。(3)账号或密码输入不正确时,会出现提示信息,然后按任意键退出。八课程设计总结这次课程设计中遇到了一些问题与同学一起讨论解决,从其他人身上学到了很多。这 个课程设计并
16、不完美,还有很多要改善的地方,在删除储户时不能将储户信息从文件中删 除,只能将储户信息全部置0 了。还有一些没想到的细节。虽然不是很完美,但发现不足 之处并在以后的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现 我们的不完美,并想办法去改进这些不完美。通过这次课程设计学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了 理论和时间结合是很重要的。让我进一步了解了 C+程序设计方法,并且对这门课产生了 浓厚的兴趣。更重要的是培养了自己耐心、细心、用心的良好品质。同时也非常感谢同学 的帮助及老师的建议与指导。源程序:#include#include#include#incl
17、ude数据储存文件名#define file temp.txtstruct user用户类型(账号,姓名,身份证号,存款)(int id;char name20;char person_num19;char password6;double money;);void add()添加用户( printf(”%45srT J火 火火新建储户*”); printf(nn);struct user getuser();函数目的:计算文件中的记录数目以生成struct user temp; int count();自动账号FILE *fp; int number;if(fp=fopen(file,ab)
18、= = NULL)printf(Can not open file!n);exit(l);)temp=getuser();读取用户名number=count();temp.id=number+l;生成自动账号fwrite(&temp,sizeof(struct user),l,fp);printf(添加用户成功!n);fclose(fp);)int count()函数目的:计算文件中的记录总数(FILE *fp;int num;struct user temp;num=0;if(fp=fopen(file,rb)= = NULL) printf(Can not open file!n);exi
19、t(l);)while(fread(&temp,sizeof(struct user),l,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(”请输入用户姓名(字符数20): );getname(temp.name);printf(”请输入用户身份证号码:getperson_num(temp.per
20、son_num);printf(“请输入账户密码:); getpassword(temp.password);printf(输入开户金额:);判断开户金额(=100)do ( scanf(%lf,&temp.money); fflush(stdin);if(temp.money 100,00)printf(开户金额不能小于100n); elsebreak;prin甘(重新输入开户金额:); while(l);return temp;)void getname(char *name)函数功能:读取用户姓名(字数=20)printf(姓名不能超过20个字符!n); else break;print
21、f(”重新输入姓名:);/while循环,直到姓名输入有效while(l);)void getperson_num(char *person_num)(doint i,mark; char ch;for(i=0,mark=0;i + 4-) if(ch=getchar()! = n) (if(ch = 101) person_numi=ch;else (printf(”身份证号码只能是数字!n); mark=l;break;) elsebreak;person_numi = 0;if(mark= = l) continue;if(strlen(person_num)! = 18)print/身
22、份证号码只能是18位!n) elsebreak;printf(重新输入身份证号码:while(l);)void getpassword(char *password)doint ij;char ch;for(i=0J=0; i +)if(ch=getchar()! = n)if(ch = ,01) passwordi=ch;elseprintf(”密码只能是数字!n”);j = 1;break;elsebreak;passwordi=0;if(j=l)continue;if(strlen(password)!=6)printf(密码只能是6位!n“);elsebreak;printf(”重新输
23、入密码:”);while(l);)void select_id()查询储户信息(int countQ;void getpassword(char *password);printfC,%45snT,* 查询储户信息 *”);printf(n);printf(%s %15s %15s %15sn”J编号”用户姓名身份证号码;存款余额)printf(nnM);FILE *fp;struct user temp;int i,maxnum;char password8;bool flag=false;if(fp=fopen(file,rb)= = NULL)printf(cannot open fil
24、e!n); exit(l);maxnum=count();printf(”输入要查询账号scanf(%d,&i);if(imaxnum)(printf(”你要查询的账号不存在不 return; printf(输入账号密码scanf(%s,&password);while(fread(&temp,sizeof(struct user),l,fp)循环读取每一条记录判断是否为要查看的记录(if(temp.id = = i&strcmp(temp.password,password)=0)printf(NO.%d %8s %25s%.2fn,temp,id,temp.name,temp.person
25、_num,temp.money);flag=true;break;)if(flag=false)判断密码是否正确printf(您输入的密码不正确!n”);return;)fclose(fp);void displayQ显示所有储户信息 char person_num19;char password6; double money;);2、系统函数详细介绍void add()函数实现新建储户功能void add()添加用户printf(%45srTJ* 新建储户 *”);printf(nn);struct user getuser();struct user temp;int count();函数
26、目的:计算文件中的记录数目 以生成自动账号FILE *fp;int number;if(fp=fopen(file,ab)= = NULL)(printf(Can not open file!n);exit ;)temp=getuser();读取用户名number=count();temp.id=number+l;生成自动账号fwrite(&temp,sizeof(struct user),l,fp);printf(”添加用户成功!rT);fclose(fp);)void select_id()函数实现查询储户信息功能printf(”%45srTJ*火*显示所有储户信息*);printf(n)
27、;printf(%s %15s %15s %15srTJ账号二用户姓名身份证号码;存款余额)printf(n);FILE *fp;struct user temp;if(fp=fopen(file,rb)= = NULL)(printf(cannot open file!n);exit(l);)while(fread(&temp,sizeof(struct user),l,fp)(printf(NO.%d %10s %23s%.2fn,temp.id,temp.name,temp.person_num,temp.money);)fclose(fp);)void save_money()函数功能
28、:存款(printf(”%45srTJ*用户存款业务 *”);printf(nn);int countQ;void getpassword(char *password);FILE *fp;int i,num,mark;bool flag=false;struct user *temp;char password6;num=count();temp=(struct user *)malloc(num*sizeof(struct user);根据记录数申请空间if(fp=fopen(file,rb)= = NULL)printf(cannot open file!n);exit(l);)for(
29、i=0;inum;i +)将文件内容存入数组fread(&tempi,sizeof(struct user),l,fp);fclose(fp);prin甘(”输入要存款账号读取存款账号scanf(%d,&mark);if(inum)(printf(”你要查询的账号不存在!) return;)printf(输入账号密码:scanf(%s,&password);if(fp=fopen(file,wb)= = NULL)写方式打开文件,覆盖原文件中的内容(prin甘(“cannot open file!n);exit(l);)for(i=0;inum;i+)(if(tempi.id = = mark
30、&strcmp(tempi.password,password)=0)double money=0;printf(输入要存入的金额scanfClf.&money);while(l)if(money=0) (printf(只能为正数!rT);money=0;printf(输入要存入的金额 scanf(%lf,&money); else break;tempi.money + = money;flag=true;) 、fwrite(&tempi,sizeof(struct user),l,fp);修改该用户的信息)fclose(fp);free(temp);if(flag=false)(print
31、f(”您输入的密码不正确!n”);)elseprint/你存款业务已办妥!n);)void get_money() 函数功能:用户取款(printf(%45sn”J* 用户取款业务 *);printf(nn);int count();FILE *fp;int i,num,mark;char password6;bool flag=false;struct user *temp;num二count。;根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user);if(fp=fopen(file,rb)= = NULL)printf(can
32、not open file!n); exit(l);)for(i=0;inum;i +) 读取文件内容 fread(&tempi,sizeof(struct user),l,fp);fclose(fp);printf(输入要取款账号scanf(%d,&mark);if(inum)(printf(你要查询的账号不存在不 return;)printf(”输入账号密码:scanf(%s,&password);if(fp=fopen(file,wb)= = NULL)写方式打开文件,覆盖原文件中的内容(printf(cannot open file!n);exit(l);)for(i=0;inum;i
33、+) if(tempi.id = = mark&strcmp(tempi,passwordjpassword)=0)double money=0;prints输入要取出的金额scanf(%lf,&money);if(moneytempi,money)(printf(“你的余额不足!rT); money=0;)tempi.money - = money;flag=true;fwrite(&tempi,sizeof(struct user),l,fp);)fclose(fp);free(temp);if(flag 二二 false)printf(您输入的密码不正确的”);)elseprintf(“
34、你取款业务已办妥!n) void del() 删除储户 (print-%45srTJ*删除储户 *”);printf(n);printf(%s %15s %15s %10sn”J账号”用户姓名身份证号码;存款余额)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
35、二count。;根据记录数申请空间temp=(struct user *)malloc(num*sizeof(struct user);if(fp=fopen(file,rb)=NULL) printf(cannot open file!n); exit(l);)for(i=0;inum;i+)读取文件内容fread(&tempi,sizeof(struct user),l,fp);fclose(fp);prin甘(”输入要需要注销的账号:);scanf(%d,&mark);if(inum)( printf(”你要注销的账号不存在不 return;)printf(输入账号密码:scanf(%s
36、,&password);if(fp=fopen(file,wb)= = NULL)写方式打开文件,覆盖原文件中的内容(printf(cannot open file!n);exit(l);for(i=0;inum;i +)无效账户信息全部置为0if(tempi.id = = mark&strcmp(tempi.password,password)=0&tempi. money 二二 0.00)strcpyemptO.person.num/O);strcpy(tempi.name/O);strcpy(tempi.password,0);flag=true;)fwrite(&tempi,sizeo
37、f(struct user),l,fp);)fclose(fp);free(temp);if(flag=false)(printf(您输入的密码不正确或是余额不为零!rT);)elseprintf(储户注销成功!rT);)void print() 函数功能:输出界面(printf(”%48sn” ,“*活期储蓄帐目管理系统*”);printf(nn);printf(”%8s,%-20sn”,T :新建储户)printf(”%8s,%-20snT2 ;查询储户信息)printf(叫8s,%-20snT3 ;显示所有储户信息”);printf(”%8s,%-20sn”J47 删除储户)printf
38、C%8s,%-20sn15:存款)printf(”%8s,%-20srTJ6”J 取款)printf(”8s,%-20srr:7”J 退出)printf(n请选择功能(17):)void main()(char choose;do print();scanf( %c”,&choose);读取功能标号,根据标号选择不同的函数 fflush(stdin);system(cls);switch(choose)(case 1:add();break;select_id();break;displayQ;break;case 4:del();break;case 5:save_money();break
39、;case 6:get_money();break;case 7:exit(l);default:printf(”对不起,你所选择的功能不存在!n”);getch();暂停功能(读取任意键继续)(conio.h)system(cls);清除屏幕显示(stdlib.h)while(l);查询储户信息void select_id()int count();void getpassword(char *password);printf(”%45sn”J* 查询储户信息 *”);printf(n);printf(%s %15s %15s %15sn”J编号用户姓名“J身份证号码;存款余额)printf
40、(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(l);)maxnum=count();prin甘(”输入要查询账号:);scanf(%d,&i);if(imaxnum)printf(”你要查询的账号不存在!。return;)printf(“输入账号密码号scanf(H%s,&password);while(fread(&temp,sizeof(struct user),l,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 displayQ显示所有储户信息(