洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目活期储蓄帐目管理课程设计任务书设计题目:活期储蓄帐目管理_________________________________________________________ 设计内容与要求:【问题描述】活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
设计一个活期储蓄账目管理系统。
【基本要求】1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
课程设计评语成绩:指导教师:_______________年月日(1)问题描述:活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
设计一个活期储蓄账目管理系统。
(2)基本要求:1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
(3)测试数据:(4)算法思想:1主要思想12开户3查询(5)模块划分:01)void InsertList(LINK *&L) //链表插入实现开户功能02)void Search(LINK *L) //链表查找,实现用户登陆功能03)void Deposit(LINK *&L,LINK *p) //用户存款、取款04)void PrintList(LINK*L) //打印链表,实现用户信息输出05)void DeleteList(LINK *&L) //链表删除,实现销户功能(需要账号和密码)06)void save(LINK *L) //保存链表,实现用户信息保存到文件07)void Print(LINK *&L) //打开文件,得到链表08)void menu() //主菜单函数09)void choice() //菜单选择函数(6)数据结构:typedef struct ElemType //定义结构体{char name[11];int account;char password[7];float money;}ElemType;typedef struct lnode //定义链表{ElemType data;struct lnode *next;}LINK;(7)心得:这次实验我学到了很多在课本上没有注意的知识,在设计实验的过程中,我通过对链表的应用,让我对链表的应用更加的牢固,也通过设计,我也发现了我在学习中的不足,在不断改进程序的同时,我也发现了很多能够改进的地方,在改进程序的同时,巩固对链表的知识掌握。
这次我设计的程序,主要是以链表为中心,通过对链表的建立,插入,删除打印等来实现开户、销户、存钱、取钱等功能。
其中链表打印的环节的功能我不是很明白,通过上网查询。
查找资料。
逐渐改善。
最终实现完全的程序(8)源程序:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define file "lnode.txt"int total=0; //定义的全局变量,用于开户所需typedef struct ElemType //定义结构体{char name[11];int account;char password[7];float money;}ElemType;typedef struct lnode //定义链表{ElemType data;struct lnode *next;}LINK;void InitList(LINK *&L) //建立空链表{L=(LINK *)malloc (sizeof(LINK));L->next=NULL;}void InsertList(LINK *L) //链表插入实现开户功能{int x; LINK *s; s=(LINK*)malloc(sizeof(LINK));printf("请输入你要开户的姓名(10字符以内):");scanf("%s",s->);x=rand()%10; //随机数total+=x; //total随机增大一个数值(10以内)xs->data.account=10000000+total;printf("\n你开户的账号为:%d\n",s->data.account);printf("请输入你账号的密码(6位数以内):");scanf("%s",s->data.password);s->data.money=0.00;s->next=NULL;if(L->next==NULL)L->next=s;else{s->next=L->next;L->next=s;}printf("开户成功。
\n");}void DeleteList(LINK *L) //链表删除实现销户功能(需要账号和密码){LINK *p=L,*q;char pass[6];int s;printf("请输入你要销户的账号:");scanf("%d",&s);printf("请输入该账号的密码:");scanf("%s",pass);while(p->next!=NULL){if(p->next->data.account==s)break;p=p->next;}if(p->next!=NULL){while(strcmp(p->next->data.password,pass)!=0){printf("密码错误!请重新输入:");scanf("%s",pass);}q=p->next;p->next=q->next;free(q);printf("账号销户成功。
\n");}else printf("你所要销户的的账号不存在(或者已经销户)。
\n");}void PrintList(LINK*L) //打印链表,实现用户信息输出{LINK *p=L->next;while (p!=NULL){printf("%s\t",p->);printf("%d\t%s\t%.2f\n",p->data.account,p->data.password,p->data.money);p=p->next;}}void Deposit(LINK *L,LINK *p) //用户存款、取款{int cq;float mn;while(1){if(p!=NULL){printf("请选择存款(1)、取款(2)、查询余额(3)、退出账号(4)。
\n(请输入括号内的数字,输入其它字符默认为取款):");scanf("%d",&cq);if(cq==1){printf("请输入你的存款金额:");scanf("%f",&mn);p->data.money=p->data.money+mn;printf("存款成功!\n");}else if(cq==3){ printf("你账户的余额为:%.2f\n",p->data.money);}else if(cq==4){printf("账号退出成功。
\n");return;}else{printf("请输入你的取款金额:");FH:scanf("%f",&mn);if((p->data.money-mn)>=0){p->data.money=p->data.money-mn;printf("取款成功!\n");}else{printf("取款失败!\n");printf("你账户上的金额不足!\n你的账户余额为:%.f\n",p->data.money);printf("请输入合适的取款金额:");goto FH;}}}}}void Search(LINK *L) //链表查找,实现用户登陆功能{LINK *p=L->next;int acc;char pass[6];printf("请输入你要登录的账号:");scanf("%d",&acc);printf("请输入你的密码:");scanf("%s",pass);while(p!=NULL){if(p->data.account==acc)break;p=p->next;}if(p==NULL)printf("不存在该账户\n");else{if(strcmp(p->data.password,pass)==0)printf("账号登录成功。
\n");else{while(strcmp(p->data.password,pass)!=0){char pa;printf("密码错误\n");printf("是否重新输入(是,就输入任意键)、(否,从键盘上输入N or n):");scanf("\n%c",&pa);if(pa=='n'||pa=='N'){system ("cls");return;}printf("\n请重新输入你的密码:");scanf("%s",pass);}}Deposit(L,p);}}void save(LINK *L) //保存链表,实现用户信息保存到文件{FILE *fp;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file.\n");exit(1);}LINK *p=L->next;if (p!=NULL){if(fwrite(p,sizeof(struct lnode),1,fp)!=1)printf("file write error\n");p=p->next;}fclose(fp);}void Print(LINK *&L) //打开文件,得到链表{FILE *fp;LINK *p,*s;if((fp=fopen(file,"rb"))==NULL){printf("cannot open file.\n");exit(1);}s=(LINK*)malloc(sizeof(LINK));s->next=NULL;while(fread(s,sizeof(struct lnode),1,fp) ){total++; //用于记录账号的,以致账号不重复if(L->next==NULL){L->next=s; p=s;p->next=s->next;}else{p->next=s; p=s;p->next=s->next;}s=(LINK*)malloc(sizeof(LINK));s->next=NULL;}fclose(fp);}void menu() //主菜单函数{printf("************欢迎进入活期储蓄账目管理***********\n");printf("1.储户开户。