数据结构课程设计实验报告.docx
《数据结构课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
数据结构课程设计实验报告
数据结构课程设计
开始
主函数main()
InitList(L)
功能表与编号选择1-5
输入数字,选择功能
,输入1输入3,输入4,,2输入输入5,InsertList(L)Search(L)PrintList(L)DeleteList(L)退出管用户开户输出储户存款、取款用户销户理系统
2
输入销户账号
3
输入要登录的账号
账户是否存在?
不存在该账号是
输入账户密码
C
密码是否正确?
否
是是登录成功是否重新输入密码
Deposit(L,p)
否退出登录,选择功能输入1-4显示3,输入,4输入后,输输入输入1后,输2当前余额退出账户入取款金额入存款金额
>=取款金额C
余额?
否4
否是p==NULL?
帐号、输出姓名、管理系统没有账户密码、账户余额p=p->next
数据结构
课程设计报告
学院:
信息科学与工程学院
班级:
通信工程1301班
题目:
活期储蓄帐目管理系统
指导老师:
康松林
完成日期:
2015年7月16日
1
数据结构课程设计
一、问题描述与基本要求...................................1
1.1问题描述..........................................1
1.2基本要求..........................................1
二、数据结构的设计.......................................1
2.1数据结构的选择.....................................1
2.2单链表的定义.......................................2
2.3重要函数的定义及说明...............................2
三、软件模块结构图.......................................6
3.1大体模块关系图.....................................6
3.2各模块具体分析.....................................7
四、程序流程图...........................................8
五、源程序..............................................11
六、调试分析............................................16
6.1程序错误修改及完善的过程..........................16
6.2最终程序所有功能运行结果..........................20
6.3测试数据.........................................22
七、用户使用手册........................................23
八、心得体会............................................23
数据结构课程设计
一、问题描述与基本要求
1.1问题描述
设计一个活期储蓄帐目管理系统
活期储蓄处理中,储户开户、销户、存入、支出活动频繁。
1.2基本要求
系统设计要求:
1、能比较迅速地实现插入,以实现储户开户的功能,储户开户时需输入的信息包括储户姓名,密码。
2、能比较迅速地通过储户的账户序号和密码找到储户的账户,并删除该账户,以实现销户的功能。
3、能比较迅速地通过储户的账户序号和密码找到储户的账户(密码不对时,可选择是否重新输入密码)实现账户登录的功能。
登录成功后,再通过修改链表结点数据域中的对应元素,以实现存款、取款、显示余额等功能,若取款时账户余额不足,输出提示信息“取款失败!
你账户上的金额不足!
”,并显示账户当前余额,并且提示重新输入合适的取款金额。
4、查找活期储蓄帐目管理系统当前存在的储户,当输出活期储蓄帐目管理系统没有账户时,输出提示信息“活期储蓄帐目管理系统没有账户”,当有账户时,输出所有账户的相关信息,包括储户姓名,帐号,密码,账户余额。
二、数据结构的设计
2.1数据结构的选择
课程设计题目的要求是,要较简单迅速地实现开户、销户、存款、取款、输出用户信息的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
1
数据结构课程设计
2.2单链表的定义
先定义单链表结点的数据域,数据域包括储户姓名、账户序号、账户密码、
账户金额等储户信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
以下为单链表的相关定义:
typedefstructListData//定义结点数据域
{
charname[3];//储户姓名
intaccount;//账户序号
charpassword[5];//账户密码
intmoney;//账户金额
}ListData;
typedefstructnode//定义链表结点
{
ListDatadata;//结点数据域
structnode*next;//结点链域
}ListNode;
typedefListNode*LinkList;//指向链表结点的指针
2.3重要函数的定义及说明
1、voidInitList(LinkList&L)//建立空链表
2、voidInsertList(LinkList&L)//插入链表结点,实现开户功能
(需要输入储户姓名和密码,以确定开户对象)
3、voidDeleteList(LinkList&L)//删除链表结点,实现销户功能
(需要输入账号和密码,以确定销户对象)
4、voidDeposit(LinkList&L,LinkListp)//储户存款、取款、显示余额(要先通过账号和密码登录,若取款时账户余额不足,输出提示信息,显示账户当前余额,并且提示重新输入取款金额。
)
5、voidSearch(LinkListL)//链表查找,实现用户登录功能
(需要输入账号和密码,以确定登录对象,密码输出错误时可选择是否重新输入密码)
6、voidPrintList(LinkListL)//输出链表,实现储户姓名,账号序号,密码,现有余额等相关信息。
(当输出活期储蓄帐目管理系统没有账户时,输出提示信息,当有账户时,输出所有账户的相关信息。
)
以下为重要函数的定义:
2
数据结构课程设计
voidInitList(LinkList&L)//建立空链表
{
L=(ListNode*)malloc(sizeof(ListNode));
L->next=NULL;
}
voidInsertList(LinkList&L)//链表插入结点,实现开户功能,需输入储户姓名和密码
{
LinkListp;
p=(ListNode*)malloc(sizeof(ListNode));
牰湩晴尨请输入你要开户的姓名(不超过4个字符):
);
scanf(%s,p->data.name);
number=number+1;
p->data.account=number;
牰湩晴尨你开户的账号为:
%d\n,p->data.account);
牰湩晴尨请输入你账号的密码(不超过6个字符):
);
scanf(%s,p->data.password);
p->data.money=0;
p->next=NULL;
if(L->next==NULL)//前插法
L->next=p;
else
{
p->next=L->next;
L->next=p;
}
牰湩晴尨开户成功!
\n);
}
voidDeleteList(LinkList&L)//删除链表结点,实现销户功能(需要输入账号和密码)
{
LinkListp=L,q;
charmima[5];
ints;
牰湩晴尨请输入你要销户的账号:
);
scanf(%d,&s);
牰湩晴尨请输入该账号的密码:
);
scanf(%s,mima);
while(p->next!
=NULL)
{
if(p->next->data.account==s)
break;
p=p->next;
}
if(p->next!
=NULL)
3
数据结构课程设计
{
while(strcmp(p->next->data.password,mima)!
=0)
{
牰湩晴尨密码错误!
请重新输入:
);
scanf(%s,mima);
}
q=p->next;
p->next=q->next;
free(q);
牰湩晴尨销户成功。
\n);
}
汥敳瀠楲瑮?
你所要销户的的账号不存在。
\n);
}
voidDeposit(LinkList&L,LinkListp)//储户存款、取款、显示余额
{
intm;
intn;
while
(1)
{
if(p!
=NULL)
{
printf(\
请输入数字选择功能:
1、存款2、取款3、查询余额4、退出账号:
);
scanf(%d,&m);
if(m==1)
{
牰湩晴尨请输入你的存款金额:
);
scanf(%d,&n);
p->data.money=p->data.money+n;
牰湩晴尨存款成功!
\n);
}
elseif(m==2)
{
牰湩晴尨请输入你的取款金额:
);
gg:
scanf(%d,&n);
if((p->data.money-n)>=0)
{
p->data.money=p->data.money-n;
牰湩晴尨取款成功!
\n);
}
else
{
牰湩晴尨取款失败!
你账户上的金额不足!
\n);
牰湩晴尨你的账户余额为:
%d\n,p->data.money);
4
数据结构课程设计
牰湩晴尨请输入合适的取款金额:
);
gotogg;
}
}
elseif(m==3)
{
牰湩晴尨你账户的余额为:
%d\n,p->data.money);
}
elseif(m==4)
{
牰湩晴尨账号退出成功。
\n);
return;
}
}
}
}
voidSearch(LinkListL)//链表查找,实现用户登录功能(需要输入账号和密码)
{
LinkListp=L->next;
inti;
charmima[5];
牰湩晴尨请输入你要登录的账号:
);
scanf(%d,&i);
tt:
牰湩晴尨请输入你的密码:
);
scanf(%s,mima);
while(p!
=NULL)
{
if(p->data.account==i)
break;
p=p->next;
}
if(p==NULL)
牰湩晴尨不存在该账户\n);
else
{
if(strcmp(p->data.password,mima)==0)
牰湩晴尨登录成功。
\n);
else
{
while(strcmp(p->data.password,mima)!
=0)
{
charj;
牰湩晴尨密码错误\n);
牰湩晴尨是否重新输入(是,从键盘输入Y)、(否,从键盘上输入N):
);
5
数据结构课程设计
scanf(\
%c,&j);
if(j=='N')
{return;}
elseif(j=='Y')
{gotott;}
}
}
Deposit(L,p);
}
}
voidPrintList(LinkListL)//输出链表,实现储户信息输出
{
LinkListp=L->next;
if(p==NULL)
{
牰湩晴尨活期储蓄帐目管理系统没有账户\n);
}
汥敳瀠楲瑮?
姓名帐号密码账户余额\n);
while(p!
=NULL)
{
printf(%s\t,p->data.name);
printf(%d\t%s\t\t%d\n,p->data.account,p->data.password,p->data.money);
p=p->next;
}
牰湩晴尨请先输入enter键,再重新选择功能\n);
}
三、软件模块结构图
3.1大体模块关系图
主函数
链表链链链查找、表表表存款、显删插款取示除入模块模模模块块块
6
数据结构课程设计
3.2各模块具体分析
链表插入模块具体分析如下:
InsertList(L)scanf()
p->data.name
p->data.password
链表删除模块具体分析如下:
scanf()
DeleteList(L)
s,mima
链表查找、存款、取款模块具体分析如下:
i,mima,j
scanf()
Search(L)m,n
Deposit(L,p)p->data.money
链表输出模块具体分析如下:
PrintList(L)printf()
p->data.name,p->data.passwordp->data.account,p->data.money
7
数据结构课程设计
注:
以上具体分析中,无箭头的线段表示函数的调用关系,椭圆中的数据为输入、输出或传递的值,箭头表示值的方向。
四、程序流程图
显示余额。
信息
结束1
3
2
^4
……………………
A
B
DC
注:
因为整个程序流程图太长,一页画不下,所以上图为大体流程图,上图中1—>A,2—>B,3—>C,4—>D间流程省略了,以下为1—>A,2—>B,3—>C,4—>D间详细流程图。
8
数据结构课程设计
1
>A
1—
输入开户姓名
输入开户密码
开户成功
A
2—>B
否账户是否存在
是
的户要你所销输入账户密码的账号不存在
否
密码是否正确?
是
销户成功
B
9
数据结构课程设计
3—>C
是重新输入
取款金额取款成功存款成功
10
数据结构课程设计
4—>D
否是p==NULL?
D
五、源程序#include
#include
#include
定义的全局变量,用于开户//intnumber=0;
定义结点数据域typedefstructListData//{
储户姓名//charname[3];
//账户序号intaccount;
账户密码//charpassword[5];
//账户金额intmoney;
}ListData;
typedefstructnode//定义链表结点{
//结点数据域ListDatadata;
结点链域//structnode*next;
}ListNode;
11
数据结构课程设计
typedefListNode*LinkList;//指向链表结点的指针
voidInitList(LinkList&L)//建立空链表
{
L=(ListNode*)malloc(sizeof(ListNode));
L->next=NULL;
}
voidInsertList(LinkList&L)//链表插入结点,实现开户功能,需输入储户姓名和密码
{
LinkListp;
p=(ListNode*)malloc(sizeof(ListNode));
牰湩晴尨请输入你要开户的姓名(不超过4个字符):
);
scanf(%s,p->data.name);
number=number+1;
p->data.account=number;
牰湩晴尨你开户的账号为:
%d\n,p->data.account);
牰湩晴尨请输入你账号的密码(不超过6个字符):
);
scanf(%s,p->data.password);
p->data.money=0;
p->next=NULL;
if(L->next==NULL)//前插法
L->next=p;
else
{
p->next=L->next;
L->next=p;
}
牰湩晴尨开户成功!
\n);
}
voidDeleteList(LinkList&L)//删除链表结点,实现销户功能(需要输入账号和密码)
{
LinkListp=L,q;
charmima[5];
ints;
牰湩晴尨请输入你要销户的账号:
);
scanf(%d,&s);
牰湩晴尨请输入该账号的密码:
);
scanf(%s,mima);
while(p->next!
=NULL)
{
12
数据结构课程设计
if(p->next->data.account==s)
break;
p=p->next;
}
if(p->next!
=NULL)
{
while(strcmp(p->next->data.password,mima)!
=0)
{
牰湩晴尨密码错误!
请重新输入:
);
scanf(%s,mima);
}
q=p->next;
p->next=q->next;
free(q);
牰湩晴尨销户成功。
\n);
}
汥敳瀠楲瑮?
你所要销户的的账号不存在。
\n);
}
voidDeposit(LinkList&L,LinkListp)//储户存款、取款、显示余额
{
intm;
intn;
while
(1)
{
if(p!
=NULL)
{
printf(\
请输入数字选择功能:
1、存款2、取款3、查询余额4、退出账号:
);
scanf(%d,&m);
if(m==1)
{
牰湩晴尨请输入你的存款金额:
);
scanf(%d,&n);
p->data.money=p->data.money+n;
牰湩晴尨存款成功!
\n);
}
elseif(m==2)
{
牰湩晴尨请输入你的取款金额:
);
gg:
scanf(%d,&n);
if((p->data.money-n)>=0)
{
13
数据结构课程设计
p->data.money=p->data.money-n;
牰湩晴尨取款成功!
\n);
}
else
{
牰湩晴尨取款失败!
你账户上的金额不足!
\n);
牰湩晴尨你的账户余额为:
%d\n,p->data.money);
牰湩晴尨请输入合适的取款金额:
);
gotogg;
}
}
elseif(m==3)
{
牰湩晴尨你账户的余额为:
%d\n,p->data.money);
}
elseif(m==4)
{
牰湩晴尨账号退出成功。
\n);
return;
}
}
}
}
voidSearch(LinkListL)//链表查找,实现用户登录功能(需要输入账号和密码)
{
LinkListp=L->next;
inti;
charmima[5];
牰湩晴尨请输入你要登录的账号:
);
scanf(%d,&i);
tt:
牰湩晴尨请输入你的密码:
);
scanf(%s,mima);
while(p!
=NULL)
{
if(p->data.account==i)
break;
p=p->next;
}
if(p==NULL)
牰湩晴尨不存在该账户\n);
else
14
数据结构课程设计
{
if(strcmp(p->data.password,mima)==0)
牰湩晴尨登录成功。
\n);
else
{
while(strcmp(p->data.password,mima)!
=0)
{
charj;
牰湩晴尨密码错误\n);
牰湩晴尨是否重新输入(是,从键盘输入Y)、(否,从键盘上输入N):
);
scanf(\
%c,&j);
if(j=='N')
{return;}
elseif(j=='Y')
{gotott;}
}
}