活期储蓄帐目管理数据结构

  • 格式:doc
  • 大小:270.66 KB
  • 文档页数:17

洛 阳 理 工 学 院

课 程 设 计 报 告

课程名称 数据结构课程设计

设计题目 活期储蓄帐目管理

专 业 计算机科学与技术

课 程 设 计 任 务 书

设计题目: 活期储蓄帐目管理

设计内容与要求:

【问题描述】活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。

【基本要求】

1) 能比较迅速地找到储户的帐户,以实现存款、取款记账;

2) 能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

课 程 设 计 评 语

成绩:

指导教师:_______________

年 月 日 洛 阳 理 工 学 院 课 程 设 计 报 告

1 目 录

一、问题描述与基本要求 .................................... 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

洛 阳 理 工 学 院 课 程 设 计 报 告

2 一、问题描述与基本要求

1.1问题描述

活期储蓄处理中,储户开户、销户、存入、支出活动频繁。设计一个活期储蓄账目管理系统。

1.2基本要求

系统设计要求:

1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。

2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。

3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。

4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。

二、数据结构的设计

2.1数据结构的选择

课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。 洛 阳 理 工 学 院 课 程 设 计 报 告

3 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()

洛 阳 理 工 学 院 课 程 设 计 报 告

4 三、模块结构图

四、程序流程图

1. InitList ()函数 2. InsertList ()函数

洛 阳 理 工 学 院 课 程 设 计 报 告

5 3. DeleteList()函数 4. PrintList()函数

5. Deposit()函数

洛 阳 理 工 学 院 课 程 设 计 报 告

6 6. Search()函数

7. menu()函数

洛 阳 理 工 学 院 课 程 设 计 报 告

7 8. choice()函数

9.main()函数

五、调试分析

5.1程序错误修改及完善的过程

1、当看到这个课程设计题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期储蓄帐目管理系统要求的开户、销户、存款、取款、输出储户信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要洛 阳 理 工 学 院 课 程 设 计 报 告

8 求,但在实验过程中仍出现了一些错误。最终经过我的仔细检查和修改,最终编写出了符合要求的程序,还增加了一些功能。

2、我编写完程序后,觉得程序太过简单,又想到题目是活期储蓄帐目管理系统,那账户应该是有密码保证安全性的,于是我又在单链表结点的数据域中加入了一个新的元素password[5],并且还修改了后面相关函数的定义,确保在销户时,必须账户序号和密码相对应时才能销户成功,在存款、取款时也只有当账户序号和密码相对应时才能登录成功,选择存款、取款或显示余额等功能。因此,函数定义中除了密码正确时的相关操作,还应有密码错误时的提示信息和相关操作。于是,我在DeleteList函数和Search函数中加入了判断p->data.password与mima是否相等的语句。

3、修改了相关函数定义后,调试程序,又出现了如下错误:error C2065:

'strcmp' : undeclared identifier,我才意识到我在DeleteList函数和Search函数的定义中调用了strcmp函数,头文件中应包括#include,加上后运行结果就对了。

修改后,相关调试结果如下:

4、再次修改完程序后,我希望程序还能更加完善,于是我开始思考出了密码与账户不对应,导致销户失败和登录失败外,还可能出现哪些其他的特殊情况。于是我又想到了两个特殊情况,一是取款时,账户余额可能不够,则应该输出提示信息,告知用户当前账户余额,并要求用户输入合适的取款金额。二是,可能系统没有建立账户,或者是建立了账户但是已经销户,就会导致当前系统没有账户,输出账户信息为空,这时就需要输出提示信息“活期储蓄帐目管理系统没有账户”,于是我根据自己的想法又对程序做了一些修改,最终程序完成所有功能运行。

5.2最终程序所有功能运行结果

(1)主菜单