当前位置:文档之家› 活期储蓄帐目管理系统

活期储蓄帐目管理系统

数据结构课程设计题目:活期储蓄帐目管理系统班级:学生:学号:一,设计要求:活期储蓄处理中,储户开户、销户、存入、支出聚会频繁,系统设计条件:1)能较量迅速地找到储户的帐户,以呈现存款、取款记账;2)能较量简单,迅速地呈现插入和删除,以呈现开户和销户的需求。

二,主要思路:银行业务员-----具有的权限包括:登录系统、填写存取款信息、打印存取款单、按储户要求查询其储蓄信息。

运行控制本系统的运行控制流程为:银行业务员申请进入本系统,输入储户用户名、密码,通过验证后,进行存取款或者存款单、取款单的打印,以及用户信息的查询。

本系统各模块的运行时间均控制在1—2 秒内。

由于系统采用消息驱动方式,将有效地提高计算机的利用率。

9 本系统中创建的数据库Banksystem 包含的表:(customername,customerid,bankname,yewuyuanid,cunkuancount,qukuancount, shengyucount,ratevalue,shouxucount) (bankname,yewuyuanid) time(cunkuandate,qukuandate) 数据库Banksystem 的物理结构采用顺序结构。

[说明各个数据结构与访问这些数据结构的各个程序之间的对应关系。

] [程序1] [程序2] [……] [程序m] [数据结构1] √ [数据结构2] √ √ ┇[数据结构n] √ √ 输出信息可能原因处理方法***不能为空***项忘记填写按照要求填写***项***不能重复***项数据库已有相应记录按照要求填写***项数据库连接不上等类似的提示信息数据库服务器关闭或者网络不通检查数据库服务器是否关闭,如关闭则启动,否则检查网络配置10 本系统定期备份数据库,以便在系统出现故障时能够及时恢复。

a.后备技术采用后备技术,当原始系统数据万一丢失时启用副本,周期性地把磁盘信息记录到磁带上去。

b.恢复及再启动技术使用的恢复再启动技术,使软件从故障点恢复执行或使软件从头开始重新运行的方法。

为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。

本系统严格按照软件产品设计规范的步骤进行开发,并重复考虑软件的可维护性,详细编写各阶段的文档资料,并在程序设计过程中做出大量详细的注释。

三,源程序设计:#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define file "temp.txt" //数据存储的文件名struct user //用户类型定义(账号,姓名,身份证号,余额){int id;char name[20];char person_num[19];double money;};void add() //添加用户资料{printf("%30s\n","***添加用户***");printf("---------------------------------------------\n\n");struct user getuser();int count(); //函数目的:计算文件中的记录数目以生成自动账号FILE *fp;int number;struct user temp;if((fp=fopen(file,"ab"))==NULL){printf("cannot 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;int num;struct user temp;num=0;if((fp=fopen(file,"rb"))==NULL){printf("cannot 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);struct user temp;printf("请输入用户姓名(字符数<20): "); //读取相关开户信息getname();printf("请输入用户身份证号码: ");getperson_num(temp.person_num);printf("输入开户金额:");do{ //判断开户金额(>=100) scanf("%lf",&temp.money);fflush(stdin);if((temp.money)<100.0)printf("开户金额不能小于100\n");elsebreak;printf("重新输入开户金额:");}while(1);return temp;}void getname(char *name) //函数功能:读取用户姓名(字符数<20){do{scanf("%s",name);fflush(stdin);if(strlen(name)==0)printf("姓名不能为空!\n");elseif(strlen(name)>=20)printf("姓名不能超过20个字符!\n");elsebreak;printf("重新输入姓名: ");}while(1); //循环以保证读入数据有效}void getperson_num(char *person_num) //函数功能:读取用户身份证号码(15位或者18位){do{int i,mark;char ch;for(i=0,mark=0;;i++) //输入有效性判断(只能是数字)if((ch=getchar())!='\n'){if(ch<='9'&&ch>='0')person_num[i]=ch;else{printf("身份证号码只能是数字!\n");mark=1;break;}}elsebreak;person_num[i]='\0';if(mark==1)continue;if(strlen(person_num)!=15&&strlen(person_num)!=18)printf("身份证号码只能是15位,或者18位!\n");elsebreak;printf("重新输入身份证号码: ");}while(1); //循环以保证读入数据有效}void select_name() //按照姓名查询账户余额{void getname(char *name);printf("%30s\n","***按照姓名查询账户余额***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;char name[20];if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}printf("输入要查询的姓名:"); //调用读取用户名函数getname(name);while(fread(&temp,sizeof(struct user),1,fp)) //循环读取每一条记录判断是否为要查看的记录if(strcmp(,name)==0){printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.money);}fclose(fp);}void select_id() //按照账号查询账户余额{int count();printf("%30s\n","***按照编号查询账户余额***");printf("%8s %15s %15s %10s\n","编号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;int i,maxnum;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}maxnum=count();printf("输入要查询账号:"); //判断账号是否在记录中scanf("%d",&i);if(i<1||i>maxnum){printf("你要查询的账号不存在!");return;}while(fread(&temp,sizeof(struct user),1,fp))//循环读取每一条记录判断是否为要查看的记录if(temp.id==i){printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.money);}fclose(fp);}void display() //显示用户资料{printf("%30s\n","***用户资料显示***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\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 %15s %15s %.2f\n",temp.id,,temp.person_num,temp.money);}fclose(fp);}void save_money() //函数功能:按账号存款{printf("%30s\n","***用户存款业务***");printf("---------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;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(mark<1||mark>num){printf("你要存款账号不存在!");return;}if((fp=fopen(file,"wb"))==NULL) //写方式打开文件,覆盖原文件中的内容{printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++){if(temp[i].id==mark){double money=0;printf("输入要存入的金额:");scanf("%lf",&money);if(money<=0){printf("只能为正数!\n");money=0;}temp[i].money +=money; //修改该用户的信息}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);printf("你存款业务已办妥!\n");}void get_money() //函数功能:用户取款{printf("%30s\n","***用户取款业务***");printf("---------------------------------------------\n\n");int count();FILE *fp;int i,num,mark;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(mark<1||mark>num){printf("你要取款账号不存在!");return;}if((fp=fopen(file,"wb"))==NULL){printf("cannot open file!\n");exit(1);}for(i=0;i<num;i++) //写方式打开文件,覆盖原文件中的内容{if(temp[i].id==mark){double money=0;printf("输入要取出的金额:");scanf("%lf",&money);if(money<=0) //判断用户余额是否足够{printf("只能为正数!\n");money=0;}elseif(money>temp[i].money){printf("你的余额不足!\n");money=0;}temp[i].money -=money;}fwrite(&temp[i],sizeof(struct user),1,fp);}fclose(fp);free(temp);printf("你取款业务已办妥!\n");}void del() //销户{int count();printf("%30s\n","***注销账户***");printf("%8s %15s %15s %10s\n","账号","用户姓名","身份证号码","存款余额");printf("---------------------------------------------\n\n");FILE * fp;struct user temp;int i,maxnum;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file!\n");exit(1);}maxnum=count();printf("输入要销户账号:"); //判断编号是否在记录中scanf("%d",&i);if(i<1||i>maxnum){printf("你要查询的账号不存在!");return;}while(fread(&temp,sizeof(struct user),1,fp))//循环读取每一条记录判断是否为要查看的记录if(temp.id==i&&temp.money==0.00)//余额为0{temp.id=-1;//算无效帐户printf("NO.%d %15s %15s %.2f\n",temp.id,,temp.person_num,temp.money);//printf("%d\n",temp.id);fwrite(&temp,sizeof(struct user),1,fp);//保存修改}fclose(fp);}void print() //函数功能:输出界面{printf("%30s\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("%8s,%-20s\n","8","退出");printf("\n请选择功能(1~8):");}void main(){char choose;do{print();scanf(" %c",&choose); //读取功能标号,根据标号选择不同的函数fflush(stdin);system("cls");switch(choose){case '1':add();break;case '2':select_name();break;case '3':select_id();break;case '4':display();break;case '5':save_money();break;case '6':get_money();break;case '7':del();break;case '8':exit(1);default:printf("对不起,你所选择的功能不存在!\n");}getch(); //暂停功能(读取任意键继续)(conio.h) system("cls"); //清除屏幕显示(stdlib.h)}while(1);}四,参考文集:数据结构题集(清华大学出版)。

相关主题