活期储蓄帐目管理数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院
课程设计报告
课程名称数据结构课程设计
设计题目活期储蓄帐目管理
专业计算机科学与技术
目录
一、问题描述与基本要求 (2)
1.1问题描述 (2)
1.2基本要求 (2)
二、数据结构的设计 (2)
2.1数据结构的选择 (2)
2.2单链表的定义 (3)
2.3模块划分 (3)
三、模块结构图 (4)
四、程序流程图 (4)
五、调试分析 (7)
5.1程序错误修改及完善的过程 (7)
5.2最终程序所有功能运行结果 (8)
六、心得体会 (9)
七、源程序清单 (10)
一、问题描述与基本要求
1.1问题描述
活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。
1.2基本要求
系统设计要求:
1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。
2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。
3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。
4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。
二、数据结构的设计
2.1数据结构的选择
课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义
先定义单链表结点的数据域,数据域包括储户姓名、账户序号、账户密码、账户金额等储户信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
数据结构类型定义:
typedef struct ListData //定义结点数据域
{ char name[3]; //储户姓名
int account; //账户账号
char password[5]; //账户密码
int money; //账户金额
}ListData;
typedef struct node //定义链表结点
{
ListData data; //结点数据域
struct node *next; //结点链域
}ListNode;
2.3模块划分
(1)建立空链表函数:void InitList (LinkList *L)
(2)插入链表结点,实现开户功能函数:void InsertList (LinkList *L) (3)删除链表结点,实现销户功能函数:void DeleteList (LinkList *L) (4)储户存款、取款、显示余额函数:void Deposit (LinkList *L,LinkList *p) (5)链表查找,实现用户登录功能函数:void Search (LinkList *L)
(6)输出链表函数:void PrintList (LinkList *L)
(7)主菜单函数:void menu()
(8)选择函数:void choice()
(9)主函数:void main()
三、模块结构图
四、程序流程图
1. InitList ()函数 2. InsertList ()函数
3. DeleteList()函数
4. PrintList()函数
5. Deposit()函数
6. Search()函数
7. menu()函数
8. choice()函数
9.main()函数
五、调试分析
5.1程序错误修改及完善的过程
1、当看到这个课程设计题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期储蓄帐目管理系统要求的开户、销户、存款、取款、输出储户信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要
求,但在实验过程中仍出现了一些错误。最终经过我的仔细检查和修改,最终编写出了符合要求的程序,还增加了一些功能。
2、我编写完程序后,觉得程序太过简单,又想到题目是活期储蓄帐目管理系统,那账户应该是有密码保证安全性的,于是我又在单链表结点的数据域中加入了一个新的元素password[5],并且还修改了后面相关函数的定义,确保在销户时,必须账户序号和密码相对应时才能销户成功,在存款、取款时也只有当账户序号和密码相对应时才能登录成功,选择存款、取款或显示余额等功能。因此,函数定义中除了密码正确时的相关操作,还应有密码错误时的提示信息和相关操作。于是,我在DeleteList函数和Search函数中加入了判断p->data.password 与mima是否相等的语句。
3、修改了相关函数定义后,调试程序,又出现了如下错误:error C2065: 'strcmp' : undeclared identifier,我才意识到我在DeleteList函数和Search 函数的定义中调用了strcmp函数,头文件中应包括#include
修改后,相关调试结果如下:
4、再次修改完程序后,我希望程序还能更加完善,于是我开始思考出了密码与账户不对应,导致销户失败和登录失败外,还可能出现哪些其他的特殊情况。于是我又想到了两个特殊情况,一是取款时,账户余额可能不够,则应该输出提示信息,告知用户当前账户余额,并要求用户输入合适的取款金额。二是,可能系统没有建立账户,或者是建立了账户但是已经销户,就会导致当前系统没有账户,输出账户信息为空,这时就需要输出提示信息“活期储蓄帐目管理系统没有账户”,于是我根据自己的想法又对程序做了一些修改,最终程序完成所有功能运行。
5.2最终程序所有功能运行结果
(1)主菜单