数据结构课程设计实验报告.docx
《数据结构课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构课程设计报告学院:信息科学与工程学院学院:信息科学与工程学院班级:通信工程班级:通信工程 13011301 班班题目题目:活期储蓄帐目管理系统活期储蓄帐目管理系统指导老师:康松林指导老师:康松林完成日期:完成日期:20152015 年年 7 7 月月 1616 日日目录目录一、问题描述与基本要求.01.1 问题描述.01.2 基本要求.0二、数据结构的设计.02.1 数据结构的选择.02.2 单链表的定义.12.3 重要函数的定义及说明.1三、软件模块结构图.53.1 大体模块关系图.53.2 各模块具体分析.6四、程序流程图.7五、源程序.10六、调试分析.156.1 程序错误修改及
2、完善的过程.156.2 最终程序所有功能运行结果.206.3 测试数据.22七、用户使用手册.23八、心得体会.23一、问题描述一、问题描述与与基本要求基本要求1.1 问题描述问题描述设计一个活期储蓄帐目管理系统活期储蓄处理中,储户开户、销户、存入、支出活动频繁。1.2 基本要求基本要求系统设计要求:1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。登录成功
3、后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!你账户上的金额不足!”,并显示账户当前余额,并且提示重新输入合适的取款金额。4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。二二、数据结构的设计、数据结构的设计2.1 数据结构的选择数据结构的选择课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编
4、写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。2.2 单链表的定义单链表的定义先定义单链表结点的数据域,数据域包括储户姓名、账户序号、账户密码、账户金额等储户信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。以下为单链表的相关定义:typedef struct ListData/定义结点数据域char name3;/储户姓名int account;/账户序号char password5;/账户密码int money;/账户金额ListData;typedef struct no
5、de/定义链表结点ListData data;/结点数据域struct node*next;/结点链域ListNode;typedef ListNode*LinkList;/指向链表结点的指针2.3 重要函数的定义及说明重要函数的定义及说明1、void InitList(LinkList&L)/建立空链表2、void InsertList(LinkList&L)/插入链表结点,实现开户功能(需要输入储户姓名和密码,以确定开户对象)3、void DeleteList(LinkList&L)/删除链表结点,实现销户功能(需要输入账号和密码,以确定销户对象)4、void Deposit(LinkLi
6、st&L,LinkList p)/储户存款、取款、显示余额(要先通过账号和密码登录,若取款时账户余额不足,输出提示信息,显示账户当前余额,并且提示重新输入取款金额。)5、void Search(LinkList L)/链表查找,实现用户登录功能(需要输入账号和密码,以确定登录对象,密码输出错误时可选择是否重新输入密码)6、void PrintList(LinkList L)/输出链表,实现储户姓名,账号序号,密码,现有余额等相关信息。(当输出活期储蓄帐目管理系统没有账户时,输出提示信息,当有账户时,输出所有账户的相关信息。)以下为重要函数的定义:void InitList(LinkList&L
7、)/建立空链表L=(ListNode*)malloc(sizeof(ListNode);L-next=NULL;void InsertList(LinkList&L)/链表插入结点,实现开户功能,需输入储户姓名和密码LinkList p;p=(ListNode*)malloc(sizeof(ListNode);printf(请输入你要开户的姓名(不超过 4 个字符):);scanf(%s,p-data.name);number=number+1;p-data.account=number;printf(你开户的账号为:%dn,p-data.account);printf(请输入你账号的密码(不
8、超过 6 个字符):);scanf(%s,p-data.password);p-data.money=0;p-next=NULL;if(L-next=NULL)/前插法L-next=p;elsep-next=L-next;L-next=p;printf(开户成功!n);void DeleteList(LinkList&L)/删除链表结点,实现销户功能(需要输入账号和密码)LinkList p=L,q;char mima5;int s;printf(请输入你要销户的账号:);scanf(%d,&s);printf(请输入该账号的密码:);scanf(%s,mima);while(p-next!=
9、NULL)if(p-next-data.account=s)break;p=p-next;if(p-next!=NULL)while(strcmp(p-next-data.password,mima)!=0)printf(密码错误!请重新输入:);scanf(%s,mima);q=p-next;p-next=q-next;free(q);printf(销户成功。n);else printf(你所要销户的的账号不存在。n);void Deposit(LinkList&L,LinkList p)/储户存款、取款、显示余额int m;int n;while(1)if(p!=NULL)printf(n
10、 请输入数字选择功能:1、存款 2、取款 3、查询余额 4、退出账号:);scanf(%d,&m);if(m=1)printf(请输入你的存款金额:);scanf(%d,&n);p-data.money=p-data.money+n;printf(存款成功!n);else if(m=2)printf(请输入你的取款金额:);gg:scanf(%d,&n);if(p-data.money-n)=0)p-data.money=p-data.money-n;printf(取款成功!n);elseprintf(取款失败!你账户上的金额不足!n);printf(你的账户余额为:%dn,p-data.mo
11、ney);printf(请输入合适的取款金额:);goto gg;else if(m=3)printf(你账户的余额为:%dn,p-data.money);else if(m=4)printf(账号退出成功。n);return;void Search(LinkList L)/链表查找,实现用户登录功能(需要输入账号和密码)LinkList p=L-next;int i;char mima5;printf(请输入你要登录的账号:);scanf(%d,&i);tt:printf(请输入你的密码:);scanf(%s,mima);while(p!=NULL)if(p-data.account=i)b
12、reak;p=p-next;if(p=NULL)printf(不存在该账户n);elseif(strcmp(p-data.password,mima)=0)printf(登录成功。n);elsewhile(strcmp(p-data.password,mima)!=0)char j;printf(密码错误n);printf(是否重新输入(是,从键盘输入 Y)、(否,从键盘上输入 N):);scanf(n%c,&j);if(j=N)return;else if(j=Y)goto tt;Deposit(L,p);void PrintList(LinkList L)/输出链表,实现储户信息输出Lin
13、kList p=L-next;if(p=NULL)printf(活期储蓄帐目管理系统没有账户n);else printf(姓名帐号密码账户余额n);while(p!=NULL)printf(%st,p-data.name);printf(%dt%stt%dn,p-data.account,p-data.password,p-data.money);p=p-next;printf(请先输入 enter 键,再重新选择功能n);三三、软件模块结构图、软件模块结构图3.1 大体模块关系图大体模块关系图主函数链表插入模块链表删除模块链 表查找、存款、取 款模块链表显示模块3.2 各模块具体分析各模块具
14、体分析链表插入模块具体分析如下:链表删除模块具体分析如下:链表查找、存款、取款模块具体分析如下:链表输出模块具体分析如下:InsertList(L)scanf()p-data.namep-data.passwordDeleteList(L)scanf()s,mimaSearch(L)scanf()i,mima,jm,nDeposit(L,p)p-data.moneyPrintList(L)p-data.name,p-data.passwordp-data.account,p-data.moneyprintf()注:以上具体分析中,无箭头的线段表示函数的调用关系,椭圆中的数据为输入、输注:以上具
15、体分析中,无箭头的线段表示函数的调用关系,椭圆中的数据为输入、输出或传递的值,箭头表示值的方向。出或传递的值,箭头表示值的方向。四、四、程序流程图程序流程图注注:因为整个程序流程图太长因为整个程序流程图太长,一页画不下一页画不下,所以上图为大体流程图所以上图为大体流程图,上图中上图中 1A,2B,3C,4D 间流程省略了,以下为间流程省略了,以下为 1A,2B,3C,4D 间详细流间详细流程图。程图。ABCD1234结束输 入 1,InsertList(L)用户开户输 入 2,DeleteList(L)用户销户输 入 3,Search(L)存款、取款显示余额。输入 4,PrintList(L)
16、输出储户信息输入5,退出管理系统InitList(L)功能表与编号选择 1-5输入数字,选择功能主函数 main()开始1A2B1输入开户姓名输入开户密码开户成功A2输入销户账号2输入销户账号是是否否销户成功B输入账户密码密码是否正确?你所要销户的的账号不存在账户是否存在2输入销户账号3C3输入要登录的账号输入账户密码账户是否存在?不存在该账号C3输入要登录的账号账户是否存在?不存在该账号C存款成功重新输入取款金额是否是否是是否输入 1 后,输入存款金额输入 2 后,输入取款金额输入 3,显示当前余额C取款金额=余额?取款成功输入 1-4,选择功能输入 4,退出账户退出登录密码是否正确?登录成
17、功是否重新输入密码Deposit(L,p)输入账户密码3输入要登录的账号账户是否存在?不存在该账号C4D五、五、源程序源程序#include#include#includeint number=0;/定义的全局变量,用于开户typedef struct ListData/定义结点数据域char name3;/储户姓名int account;/账户序号char password5;/账户密码int money;/账户金额ListData;typedef struct node/定义链表结点ListData data;/结点数据域struct node*next;/结点链域ListNode;是输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实验 报告
限制150内