数据结构课程设计之活期储蓄账目管理_第1页
数据结构课程设计之活期储蓄账目管理_第2页
数据结构课程设计之活期储蓄账目管理_第3页
数据结构课程设计之活期储蓄账目管理_第4页
数据结构课程设计之活期储蓄账目管理_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#大学数据结构课程设计报告题目: 活期储蓄账目管理 院(系):计算机工程学院 学生姓名: 班级: 学号: 起迄日期: 2011.6.22-2011.6.29指导教师: 20102011年度 第 2 学期 一、需求分析1.问题描述:本程序是对活期储蓄账目管理中开户、销户、存款、取款四个项目的编写。系统设计要求:1) 能比较迅速的找到储户的账户,以实现存款、取款记账;2) 能比较简单,迅速的实现插入和删除,以实现开户和销户的需要。 2.基本功能 本程序是为了实现四种功能:储户的开户、销户、存款和取款操作。本程序功能模块实现的具体功能如下表: surface() 程序的界面显示 CreatList_

2、L() 创建一个空链表 Createacount() 用户的开户操作 search_user() 用户的查找操作 Savemoney() 用户的存款操作 draw_money() 用户的取款操作 sich_abmelden() 用户的销户操作 3.输入输出 本程序在输入是需要用户输入的有用户的ID、用户密码、用户存款数目和用户取款数目,输出的是用户账户中的金额。所有的输入输出数据都是整形。其中用户ID和用户密码都为6位数,用户存取款数都为100的整数倍。二、 概要设计1.设计思路:本程序是实现用户开户、销户、存款和取款四种功能。要求能够快速的找到用户账户,简单迅速的实现开户、销户操作。主要采用

3、线性链表的结构,运用链表的插入,删除,查找,读取等算法实现程序要求的功能。 2.数据结构设计: 本程序采用的是线性链表结构,因为系统设计对程序的要求为能够迅速的找到用户账户,实现存取款操作,能简单迅速的实现开户和销户操作。线性链表符合系统设计的要求。通过头结点依次查找用户账户,从而实现存取款操作。开户既创建新的结点记录用户信息并插入到链表中,而销户既将用户账户所在结点释放。抽象数据类型线性表的定义如下:ADT List 数据对象:D=ai| ai ElemSet,i=1,2,3,n,n0数据关系:R1=<ai-1,ai>| ai-1,ai D,i=1,2,3,,n基本操作:Crea

4、tList_L(&L,&M)操作结果:创建以L为头结点,M为尾结点的空链表。 Createacount(&L)初始条件:线性链表L已存在操作结果:创建新头结点储存用户信息并插入到链表中。search_user(&L,int u,int a,int s=0)初始条件:线性链表L已存在,已输入数据u,a。操作结果:根据输入的数据u,a查找在L链表中对应的用户账户。savemoney(&L)初始条件:线性链表L已存在。操作结果:查找到用户账户并根据输入的金额来改动账户数据金额并保存。draw_money(&L)初始条件:线性链表L已存在。操作结果:查找

5、到用户账户并根据输入的金额来改动账户数据金额并保存。sich_abmelden(&L)初始条件:线性链表L已存在。操作结果:释放用户指定的账户所在结点。ADT List3.软件结构设计:本程序有主函数,开户,销户,查找用户,存款,取款五个模块。1)main()函数运行时的调用关系图如下:开户操作 开户操作销户操作 开始 销户操作查找用户 选择操作创建空链表开始 创建空链表 选择操作 存款操作 查找用户 存款操作取款操作 取款操作 2)具体函数声明如下: 成员函数名 函数声明 界面显示surface() void surface() 创建空链表CreatList_L() void Cre

6、atList_L(LinkList &L,LinkList &M) 开户操作Createacount() void Createacount(LinkList &L) 销户操作sich_abmelden() void sich_abmelden(LinkList &L) 查找用户search_user() Status search_user(LinkList &L,int u,int a,int s=0) 存款操作Savemoney() void savemoney(LinkList &L) 取款操作draw_money() void draw

7、_money(LinkList &L)三、 详细设计 1. 定义程序中所有用到的数据及其数据结构,及其基本操作的实现; 本程序用到的数据有: 空结点L,M,基本操作为CreatList_L(L,M),用来创建空链表。 int aj,基本操作为scanf("%d",&aj),switch(aj)用来进行操作的选择。 Int u,a,基本操作为scanf("%d",&u),scanf("%d",&a)用来进行用户ID,密码的输入。 Int m,基本操作为scanf("%d",&m

8、),用来输入用户存取的金额。 Int j,基本操作为j+,用来计数。2 主函数和其他函数的伪码算法; 1)界面显示函数surface(): void surface()printf("欢迎使用活期存储小程序,本程序能进行简单的开户、销户、存款和取款功能n");printf("请按提示进行操作:n");printf("按1进行开户操作,按2进行销户操作n");printf("按3进行存款操作,按4进行取款操作n");printf("按0退出本程序n");2) 链表的创建CreatList_L(Li

9、nkList &L,LinkList &M) void CreatList_L(LinkList &L,LinkList &M)L=(LinkList)malloc(sizeof(LNode);M=(LinkList)malloc(sizeof(LNode);M->next=NULL;L->next=M;3) 开户操作Createacount(LinkList &L) void Createacount(LinkList &L)int a,s1,s2,m;LinkList p,q;q=L->next;p=(LinkList)ma

10、lloc(sizeof(LNode);LOOP7:m=0;printf("请输入用户ID(使用6位数字) ");scanf("%d",&p->user);doif(q->user=p->user)printf("您输入的用户ID已存在n");q=q->next;goto LOOP7;elsem=1;while(q->next!=NULL&&m=0);doprintf("请输入用户密码(使用6位数字) ");scanf("%d",&s1

11、);printf("请再次输入用户密码(使用6位数字) ");scanf("%d",&s2);if(s1=s2) p->pass=s1;a=1;else printf("两次输入的密码不同,请重新输入n");a=0;while(a=0);p->data=0;p->next=L->next;L->next=p;printf("开户成功!n");Sleep(600);system("CLS");4) 查找用户操作Status search_user(LinkLi

12、st &L,int u,int a,int s=0)Status search_user(LinkList &L,int u,int a,int s=0)int j,m;LinkList p;LOOP2:p=L->next;j=1;m=0;LOOP1:while(p->user=u&&m=0)if(p->user=u)if(p->pass=a)p->data+=s;printf("您的余额为:%dn",p->data);m=1;return p->data;elseprintf("您输入的密

13、码有误,请重新输入n");printf("请输入用户密码: ");scanf("%d",&a);j+;if(j=3)printf("您输入错误次数太多");Sleep(180);system("CLS");surface();goto LOOP1;elsep=p->next;if(p->next=NULL)printf("您输入的用户名不存在,请重新输入n");printf("请输入用户ID: ");scanf("%d",&a

14、mp;u);goto LOOP2;5) 销户的操作void sich_abmelden(LinkList &L) void sich_abmelden(LinkList &L)int u,a,j,c,m;printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: ");scanf("%d",&a);LinkList p,q;LOOP4:p=L;j=0;m=0;LOOP3:doif(p->next->user=u)if(p->

15、;next->pass=a)printf("您确认要销户?0/1n");scanf("%d",&c);if(c=1)q=p->next;p->next=q->next;free(q);printf("销户成功!n");Sleep(600);system("CLS");break;elseif(c=0)m=1;system("CLS");elseprintf("输入指令有误n");Sleep(600);system("CLS"

16、);elseprintf("您输入的密码有误,请重新输入n");j+;printf("请输入用户密码: ");scanf("%d",&a);if(j=3)printf("您输入错误次数太多n");Sleep(600);system("CLS");elsegoto LOOP3;elsep=p->next;if(p->next=NULL)printf("您输入的用户名不存在,请重新输入n");printf("请输入用户ID: ");scan

17、f("%d",&u);printf("请输入用户密码: ");scanf("%d",&a);goto LOOP4;while(p->next->user!=u&&m=0);6)存款操作void savemoney(LinkList &L) void savemoney(LinkList &L)int u,a,s;printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: &q

18、uot;);scanf("%d",&a);search_user(L,u,a,s=0);printf("请输入您要存的金额(请输入100的整数倍):");scanf("%d",&s);search_user(L,u,a,s);printf("存款成功!n");7) 取款操作void draw_money(LinkList &L) void draw_money(LinkList &L)int u,a,s,m,n;printf("请输入用户ID: ");scanf(

19、"%d",&u);printf("请输入用户密码: ");scanf("%d",&a);n=search_user(L,u,a,s=0);printf("请输入您要取的金额(请输入100的整数倍):");scanf("%d",&m);if(n<m)printf("您的余额不足");elses=s-m;search_user(L,u,a,s);printf("取款成功,请收好您的取款n");8) 主函数 void main()

20、void main()int aj;LinkList L,M;CreatList_L(L,M);LOOP5:surface();printf("请输入您的操作选择: ");scanf("%d",&aj);switch(aj)case 1:Createacount(L);break;case 2:sich_abmelden(L);break;case 3:savemoney(L);Sleep(600);system("CLS");break;case 4:draw_money(L);Sleep(600);system("

21、;CLS");break;case 0:goto LOOP6;break; default:printf("您输入的操作有误n");Sleep(600);system("CLS");break;goto LOOP5;LOOP6:printf("感谢您使用本程序!n");3. 主要函数的程序流程图,实现设计中主程序和其他子模块的算法,以流程图的形式表示。1)主函数的流程图void main() 2) 空链表创建void CreatList_L(LinkList &L,LinkList &M) 3) 开户操作vo

22、id Createacount(LinkList &L) 4)查找用户Status search_user(LinkList &L,int u,int a,int s=0) 5)存款操作void savemoney(LinkList &L)6)取款操作void draw_money(LinkList &L)7)销户操作void sich_abmelden(LinkList &L)4. 画出函数之间的调用关系图。四、 调试分析 1. 实际完成的情况说明(完成的功能,支持的数据类型等); 本程序能够完成用户账户的开户、销户、存款、取款功能,支持整形数据。2.

23、 程序的性能分析,包括时空分析; 本程序比较简单,只是简单的实现了四种基本功能,所以时间复杂度和空间复杂度都不是很大,只是在存款操作是连续调用了查找函数,时间复杂度上有一些大。3. 上机过程中出现的问题及其解决方案;在取款操作时,有一项功能是在连续三次输入密码错误的情况下,提示输入次数过多从而返回操作界面。开始是将计数函数和判断函数写在了密码判断函数之外,导致密码输入错误是一直重复输入,后将计数函数和判断函数写进密码判断函数内,就可以实现这一操作。在销户操作时,开始总是无法达到销户的目的,后来参照课本发现,如果向销掉一个账户,必须结点为该账户所在结点的前一个结点,然后可以进行销户操作。4. 程

24、序中可以改进的地方说明; 本程序比较简单,只是实现了四种基本功能,虽然符合系统设计的要求,但是在界面,人文化等地方还很粗糙,有待改进。在实现销户操作是,因与查找函数略有不同,但因技术有限而无法进行更进一步的改进而使得函数略显臃肿,有待改进。5. 程序中可以扩充的功能及设计实现假想。 程序的一个缺憾就是不能将数据保存到文件中(既关闭exe文件后再次打开数据依然存在),可惜本人技术有限,无法实现这一功能。5、 测试结果 1、程序开始界面 2、开户界面3、开户界面,用户名已存在时。 4、销户界面,用户名不存在时。 5、销户界面,销户成功。6、存款界面。7、取款界面。8、退出界面。六、用户手册打开本程

25、序,会出现一个选择界面,根据提示输入操作。开户操作:选择1,先输入用户ID(6位数字),如果ID没有相同,输入用户密码(6位数字),否则重新输入用户ID。销户操作:选择2,先输入用户ID,然后输入用户密码,选择是否销户,如选0(否),则返回操作界面,如选1(是),销户。存款操作:选择3,先输入用户ID,然后输入用户密码,选择存款金额。取款操作:选择4,先输入用户ID,然后输入用户密码,选择取款金额。退出操作:选择0时程序结束。七、体会与自我评价 在选择设计课题时,因本人技术粗糙,又选题时间稍晚,实比较忐忑。在剩余不多的题目中选了此题,后发现此题不算很难,遂欣慰之余不免感叹自己运气甚佳。经过一个

26、多星期的编写程序,我发现在其中体会颇多。虽然从表面看此课设题很简单,我因为技术粗陋也无法深入去研究并编写实现,但在拿到题的时候自己也有了很多很多的想法。一个简简单单的题目,可以发展为一个多元化、多功能的程序,只要深究就能实现。设计题目只有两句话:能比较迅速的找到储户的账户,以实现存款、取款记账;能比较简单,迅速的实现插入和删除,以实现开户和销户的需要。包括了四个基本功能。而且这些功能都可以用线性链表来实现。线性链表是学习数据结构开始时的基础内容,基本所有同学都能够掌握,所以这对于我来说实在是一件愉快事,于是便有了跃跃欲试的感觉,并很快开始了编程。后看其他同学,有选的题目很难,整日愁眉苦脸,编写

27、程序非常吃力从而导致信心不足,感慨对于题目,简单些的或许对同学能力的提高不是很大,但是基础能力的巩固与加强从而在此基础上延伸深层次的技术对同学很有帮助。反而那些很难的题目导致同学信心不足,没有思路,最终却落得去网上搜索一番参考的结果。题目简单,所以都是自己思考自己动手编写。根据线性链表的特性,结合自己对程序的想法,从而找到编写程序的思路,然后发现错误、改正错误,最后修补漏洞,美化界面。每次都是不知不觉已经过了很长时间,但自己却依旧沉浸在其中其乐无穷。在设计程序时自己确实感觉到了成就感,编写程序时的那种感觉,仿佛是初中高中时做题时,时而凝神思考,时而奋笔疾书,十分的快乐。而且整个程序都是自己原创

28、,虽然前辈们一定不屑于我所谓的原创,但是对于一个初学者来说,这是值得高兴与自豪的,每每在同学面前炫耀自己原创程序是,虽会惹来无数白眼,但那种快乐无以言表。鉴于本人比较懒惰,思考不深,所以心得体会比较少。通过课程设计让我对编写一些小程序产生了浓厚的兴趣,并且略微掌握了其中的一些方法,此为最大收获。源代码:#include<stdio.h>#include<stdlib.h>#include<windows.h>typedef int Status;typedef int ElemType;/线性表的单链表存储结构typedef struct LNodeElem

29、Type data;ElemType user;ElemType pass;struct LNode *next;LNode,*LinkList;void CreatList_L(LinkList &L,LinkList &M)L=(LinkList)malloc(sizeof(LNode);M=(LinkList)malloc(sizeof(LNode);M->next=NULL;L->next=M;/界面void surface()printf("欢迎使用活期存储小程序,本程序能进行简单的开户、销户、存款和取款功能n");printf(&qu

30、ot;请按提示进行操作:n");printf("按1进行开户操作,按2进行销户操作n");printf("按3进行存款操作,按4进行取款操作n");printf("按0退出本程序n");/开户void Createacount(LinkList &L)int a,s1,s2,m;LinkList p,q;q=L->next;p=(LinkList)malloc(sizeof(LNode);LOOP7:m=0;printf("请输入用户ID(使用6位数字) ");scanf("%d&

31、quot;,&p->user);doif(q->user=p->user)printf("您输入的用户ID已存在n");q=q->next;goto LOOP7;elsem=1;while(q->next!=NULL&&m=0);doprintf("请输入用户密码(使用6位数字) ");scanf("%d",&s1);printf("请再次输入用户密码(使用6位数字) ");scanf("%d",&s2);if(s1=s2)

32、p->pass=s1;a=1;else printf("两次输入的密码不同,请重新输入n");a=0;while(a=0);p->data=0;p->next=L->next;L->next=p;printf("开户成功!n");Sleep(600);system("CLS");/查找用户Status search_user(LinkList &L,int &u,int &a,int x,int s=0) void draw_money(LinkList &L); void

33、 savemoney(LinkList &L);int j,m;LinkList p;LOOP2:p=L->next;j=1;m=0;LOOP1:doif(p->user=u)if(p->pass=a)p->data+=s;printf("您的余额为:%dn",p->data);m=1;return p->data;elseprintf("您输入的密码有误,请重新输入n");printf("请输入用户密码: ");scanf("%d",&a); j+;if(j=3

34、)printf("您输入错误次数太多");Sleep(600);system("CLS");if(x=1)draw_money(L);break;elsesavemoney(L);break;goto LOOP1;elsep=p->next;if(p->next=NULL)printf("您输入的用户名不存在,请重新输入n");printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: ");scanf(&quo

35、t;%d",&a);goto LOOP2;/*if(x=1)draw_money(L);if(x=0)savemoney(L);*/while(p->user=u&&m=1);/存款void savemoney(LinkList &L)int u,a,s,x;x=0;printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: ");scanf("%d",&a);search_user(L,u,a,x,s=0)

36、;printf("请输入您要存的金额(请输入100的整数倍):");scanf("%d",&s);search_user(L,u,a,x,s);printf("存款成功!n");/取款void draw_money(LinkList &L)int u,a,s,m,n,x;x=1;printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: ");scanf("%d",&a);n=se

37、arch_user(L,u,a,x,s=0);printf("%d",n);printf("请输入您要取的金额(请输入100的整数倍):");scanf("%d",&m);if(n<m)printf("您的余额不足");elses=s-m;search_user(L,u,a,x,s);printf("取款成功,请收好您的取款n");/销户void sich_abmelden(LinkList &L)int u,a,j,c,m;printf("请输入用户ID: ");scanf("%d",&u);printf("请输入用户密码: ");scanf("%d",&a);LinkList p,q;LOOP4:p=L;j=0;m=0;LO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论