当前位置:文档之家› 数据结构课程设计--活期储蓄账目管理

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

数据结构课程设计--活期储蓄账目管理活期储蓄账目管理一目的满足活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求。

①能比较迅速地找到储户的帐户进而显示储户信息,以实现存款、取款记账;②能比较简单,迅速地实现插入和删除,以实现开户和销户的需要;③熟练使用 C 语言编写程序,解决实际问题;学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。

二需求分析1、数据需求1.需先进行储户开户才可进行之后的所有的操作。

2.开户时需要的数据有姓名、身份证号码、联系电话、密码、账号会自动生成。

3.销户时,需用输入账号与密码(两者都正确后)方可销户;存取款时,也需进行账号及密码验证后方可进行交易。

2、基本功能需求基本的功能有新建储户(开户)、删除储户(销户)、存取款、查询储户信息(此步也可看见交易后的信息)、显示所有储户信息。

3、非功能性需求系统以菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。

三概要设计1、数据结构设计用结构体来定义其数据类型,然后将数据按照该数据结构存储,之后运用文件的相关知识将更改的数据写入文件中,采用数组类型的存储结构。

2、储存结构体设计本系统主要用线性表表结构类型来存储在“活期储蓄账目管理系统”中的信息。

其中,结构体由5个分量构成:用户账号、用户姓名、用户身份证号码、用户密码、开户金额。

3、模块设计void add()函数实现新建储户功能void select_id()函数实现查询储户信息功能void display()函数实现显示所有储户信息功能void del()函数实现删除储户功能void save_money() 函数实现存款功能void get_money()函数实现取款功能void print()函数用于显示菜单void main()函数用于实现菜单中的功能四详细设计1、结构体的详细定义struct user //用户类型(账号,姓名,身份证号,存款) {int id;char name[20];char person_num[19];char password[6];double money;};2、系统函数详细介绍void add()函数实现新建储户功能void add() //添加用户{printf("%45s\n","***新建储户***");printf("--------------------------------------------------------------------------------\n\n");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);}temp=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("%45s\n","***查询储户信息***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %15s\n","编号","用户姓名","身份证号码","存款余额");printf("--------------------------------------------------------------------------------\n\n");FILE *fp;struct user temp;int i,maxnum;char password[8];bool flag=false;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}maxnum=count();printf("输入要查询账号:");scanf("%d",&i);if(i<i||i>maxnum){printf("你要查询的账号不存在!");return;}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 %.2f\n",temp.id,,temp.person_num,te mp.money);flag=true;break;}}if(flag==false) //判断密码是否正确{printf("您输入的密码不正确!\n");return;}fclose(fp);}void display()函数实现显示所有储户信息功能void display() //显示所有储户信息{printf("%45s\n","***显示所有储户信息***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %15s\n","账号","用户姓名","身份证号码","存款余额");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 %.2f\n",temp.id,,temp.person_num,t emp.money);}fclose(fp);}void del()函数实现删除储户功能void del() //删除储户{printf("%45s\n","***删除储户***");printf("--------------------------------------------------------------------------------\n");printf("%s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");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 password[6];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;i<num;i++) //读取文件内容fread(&temp[i],sizeof(struct user),1,fp); fclose(fp);printf("输入要需要注销的账号:");scanf("%d",&mark);if(i<mark||mark>num){printf("你要注销的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //无效账户信息全部置为0{if(temp[i].id==mark&&strcmp(temp[i].password,password)==0&&temp[i].mo ney==0.00){strcpy(temp[i].person_num,"0");strcpy(temp[i].name,"0");strcpy(temp[i].password,"0");flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确或是余额不为零!\n");}elseprintf("储户注销成功!\n");void save_money() 函数实现存款功能void save_money() //函数功能:存款{printf("%45s\n","***用户存款业务***");printf("--------------------------------------------------------------------------------\n\n");int count();void getpassword(char *password);FILE *fp;int i,num,mark;bool flag=false;struct user *temp;char password[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;i<num;i++) //将文件内容存入数组fread(&temp[i],sizeof(struct user),1,fp);fclose(fp);printf("输入要存款账号:"); //读取存款账号scanf("%d",&mark);if(i<mark||mark>num){printf("你要查询的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark&&strcmp(temp[i].password,password)==0){double money=0;printf("输入要存入的金额:");scanf("%lf",&money);while(1){if(money<=0){printf("只能为正数!\n");money=0;printf("输入要存入的金额:");scanf("%lf",&money);}elsebreak;}temp[i].money +=money;flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp); //修改该用户的信息}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确!\n");}elseprintf("你存款业务已办妥!\n");}void get_money()函数实现取款功能void get_money() //函数功能:用户取款{printf("%45s\n","***用户取款业务***");printf("--------------------------------------------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;char password[6];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;i<num;i++) //读取文件内容fread(&temp[i],sizeof(struct user),1,fp);fclose(fp);printf("输入要取款账号:");scanf("%d",&mark);if(i<mark||mark>num){printf("你要查询的账号不存在!");return;}printf("输入账号密码: ");scanf("%s",&password);if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark&&strcmp(temp[i].password,password)==0){double money=0;printf("输入要取出的金额:");scanf("%lf",&money);if(money<=0) //判断用户余额是否足够{printf("只能为正数!\n");money=0;}else if(money>temp[i].money){printf("你的余额不足!\n");money=0;}temp[i].money -=money;flag=true;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);if(flag==false){printf("您输入的密码不正确!\n");}elseprintf("你取款业务已办妥!\n");}void print()函数用于显示菜单void print() //函数功能:输出界面{printf("%48s\n","***活期储蓄帐目管理系统***");printf("--------------------------------------------------------------------------------\n\n");printf("%8s,%-20s\n","1","新建储户");printf("%8s,%-20s\n","2","查询储户信息");printf("%8s,%-20s\n","3","显示所有储户信息");printf("%8s,%-20s\n","4","删除储户");printf("%8s,%-20s\n","5","存款");printf("%8s,%-20s\n","6","取款");printf("%8s,%-20s\n","7","退出");printf("\n请选择功能(1~7):");}void main()函数用于实现菜单中的功能,主函数void main(){char choose;do{print();scanf(" %c",&choose); //读取功能标号,根据标号选择不同的函数fflush(stdin);system("cls");switch(choose){case '1':add();break;case '2':select_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);}五调试分析系统运行主界面如图所示,各子功能测试运行结果如下:每个方面实现一个功能。

相关主题