1、洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 数据结构课程设计 设计题目 活期储蓄帐目管理 课 程 设 计 任 务 书设计题目:活期储蓄帐目管理_设计内容与要求:【问题描述】 活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。【基本要求】1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。课 程 设 计 评 语成绩:指导教师:_年 月 日洛 阳 理 工 学 院 课 程 设 计 报 告0(1)问题描述:活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。(2
2、)基本要求:1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。(3)测试数据:洛 阳 理 工 学 院 课 程 设 计 报 告1(4)算法思想:1 主要思想12 开户3 查询洛 阳 理 工 学 院 课 程 设 计 报 告2(5)模块划分:01)void InsertList(LINK * int account; char password7; float money; 洛 阳 理 工 学 院 课 程 设 计 报 告3ElemType; typedef struct lnode /定义链表 ElemType data; str
3、uct lnode *next; LINK;(7)心得:这次实验我学到了很多在课本上没有注意的知识,在设计实验的过程中,我通过对链表的应用,让我对链表的应用更加的牢固,也通过设计,我也发现了我在学习中的不足,在不断改进程序的同时,我也发现了很多能够改进的地方,在改进程序的同时,巩固对链表的知识掌握。这次我设计的程序,主要是以链表为中心,通过对链表的建立,插入,删除打印等来实现开户、销户、存钱、取钱等功能。其中链表打印的环节的功能我不是很明白,通过上网查询。查找资料。逐渐改善。最终实现完全的程序(8) 源程序:#include #include #include #include #define
4、 file “lnode.txt“ int total=0; /定义的全局变量,用于开户所需typedef struct ElemType /定义结构体 char name11; 洛 阳 理 工 学 院 课 程 设 计 报 告4int account; char password7; float money; ElemType; typedef struct lnode /定义链表 ElemType data; struct lnode *next; LINK; void InitList(LINK * L-next=NULL; void InsertList(LINK *L) /链表插入实现
5、开户功能 int x; LINK *s; s=(LINK*)malloc(sizeof(LINK); printf(“请输入你要开户的姓名(10 字符以内):“); scanf(“%s“,s-data.name); x=rand()%10; /随机数total+=x; /total 随机增大一个数值(10 以内)x s-data.account=10000000+total; printf(“n 你开户的账号为 :%dn“,s-data.account); printf(“请输入你账号的密码(6 位数以内):“); scanf(“%s“,s-data.password); s-data.mon
6、ey=0.00; s-next=NULL; if(L-next=NULL) 洛 阳 理 工 学 院 课 程 设 计 报 告5L-next=s; else s-next=L-next; L-next=s; printf(“开户成功。n“); void DeleteList(LINK *L) /链表删除实现销户功能(需要账号和密码) LINK *p=L,*q; char pass6; int s; printf(“请输入你要销户的账号:“); scanf(“%d“, printf(“请输入该账号的密码:“); scanf(“%s“,pass); while(p-next!=NULL) if(p-n
7、ext-data.account=s) break; p=p-next; if(p-next!=NULL) while(strcmp(p-next-data.password,pass)!=0) 洛 阳 理 工 学 院 课 程 设 计 报 告6printf(“密码错误! 请重新输入:“); scanf(“%s“,pass); q=p-next; p-next=q-next; free(q); printf(“账号销户成功。n“); else printf(“你所要销户的的账号不存在(或者已经销户)。n“); void PrintList(LINK*L) /打印链表,实现用户信息输出 LINK
8、*p=L-next; while (p!=NULL) printf(“%st“,p-data.name); printf(“%dt%st%.2fn“,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) 洛 阳 理 工 学 院 课 程 设 计 报 告7printf(“请选择存款(1) 、取款(2)、查询余额 (3)、退出账号(4)。n(请输入括号内的数字,输入其它字符默认为取款 ):
9、“); scanf(“%d“, if(cq=1) printf(“请输入你的存款金额:“); scanf(“%f“, p-data.money=p-data.money+mn; printf(“存款成功!n“); else if(cq=3) printf(“你账户的余额为:%.2fn“,p-data.money); else if(cq=4) printf(“账号退出成功。n“); return; else printf(“请输入你的取款金额:“); FH:scanf(“%f“, if(p-data.money-mn)=0) p-data.money=p-data.money-mn; prin
10、tf(“取款成功!n“); else 洛 阳 理 工 学 院 课 程 设 计 报 告8 printf(“取款失败!n“); printf(“你账户上的金额不足!n 你的账户余额为:%.fn“,p-data.money); printf(“请输入合适的取款金额:“); goto FH; void Search(LINK *L) /链表查找,实现用户登陆功能 LINK *p=L-next; int acc; char pass6; printf(“请输入你要登录的账号:“); scanf(“%d“, printf(“请输入你的密码:“); scanf(“%s“,pass); while(p!=NU
11、LL) if(p-data.account=acc) break; p=p-next; if(p=NULL) printf(“不存在该账户n“); 洛 阳 理 工 学 院 课 程 设 计 报 告9else 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“, if(pa=n|pa
12、=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); 洛 阳 理 工 学 院 课 程 设 计 报 告10 LINK *p=L-next; if (p!=NULL) if(fwrite(p,sizeof(struct lnode),1,fp)!=1) prin
13、tf(“file write errorn“); p=p-next; fclose(fp); void Print(LINK * 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;
14、else 洛 阳 理 工 学 院 课 程 设 计 报 告11 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.储户开户。n“); printf(“2.储户销户。n“); printf(“3.储户的账号存款、取款。n“); printf(“4.查看所有储蓄账户信息。n“); printf(“5.退出账目管理。n“); printf(“*n“); void choic
15、e() /菜单选择函数 LINK *L; InitList(L); while(1) menu(); char x,ch; printf(“请选择你需要的功能:“); 洛 阳 理 工 学 院 课 程 设 计 报 告12scanf(“%c“, getchar(); if(x5) printf(“输入有误,请重新选择操作:n“); if(x=5) break; switch(x) case 1:InsertList(L);ch=getchar();break; case 2:DeleteList(L);ch=getchar();break; case 3:Search(L);ch=getchar();break; case 4:PrintList(L);ch=getchar();break; default:break; getch(); /暂停功能(读取任意键继续)(conio.h) system (“cls“); save(L); void main() choice(); 。洛 阳 理 工 学 院 课 程 设 计 报 告13