数据结构课程设计报告模拟旅馆管理系统床位的分派与回收Word格式.docx
《数据结构课程设计报告模拟旅馆管理系统床位的分派与回收Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告模拟旅馆管理系统床位的分派与回收Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
在研究信息检索时也必需考虑如何组织数据,以便查找和存取数据元素更为方面。
因此,能够以为数据结构是介于数学、运算机硬件和运算机软件三者之间的一门核心课程.在运算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。
可见,学好数据结构和认真对待数据结构课程设计对咱们十分重要,这次咱们小组做的是“模拟旅馆管理系统的一个功能——床位的分配与回收”,为了能够保质保量的完成老师交给咱们的任务,我小组踊跃查阅图书馆及网上的各项资源,认真对待每一次的上机课程,力求尽自己最大的尽力,将这项课程设计做好。
前言……………………………………………………………………1
一、课题设计任务及要求……………………………………………3
1.问题描述……………………………………………………………3
2.大体要求……………………………………………………………3
3.实现提示……………………………………………………………3
二、需求分析…………………………………………………………4
三、系统的概要设计…………………………………………………4
1.功能模块的划分……………………………………………………4
2.参考的ADT…………………………………………………………5
四、程序设计思路……………………………………………………7
1.成立结构体及链表…………………………………………………7
2.算法的描述…………………………………………………………7
五、程序的调试与分析………………………………………………9
1.测试数据……………………………………………………………9
2.测试结果……………………………………………………………9
六、用户利用说明……………………………………………………10
1.程序运行环境……………………………………………………10
2.程序主界面………………………………………………………10
3.相关程序各项说明………………………………………………10
七、调试进程中出现的问题及心得体会……………………………12
八、心得体会…………………………………………………………13
附录:
程序的源代码…………………………………………………14
一、课题设计任务及要求
1.问题描述:
某旅馆有n个品级的房间,第i品级有
个房间,每一个品级有
个床位(1≤I≤n)。
试模拟旅馆管理系统中床位分派和回收的功能,设计能为单个旅客分派床位,在其离店便回收床位(供下次分派)的算法。
2.大体要求:
(1)输入数据
对房间信息进行初始化,包括房间的类别、数量和房间和床位的计费标准;
分派时,输入旅客姓名、年龄、性别、抵达日期和所需房间品级;
回收时,输入房间品级、房间号和床位号。
(2)输出数据
分派成功时打印旅客姓名、年龄、抵达日期、房间品级、房间号码和床位号码。
分派不成功时,如所有品级均无床位,则打印“客满”信息;
如旅客需要的品级均无空床位,则打印“是不是愿意改换品级?
”的询问信息。
若旅客愿意改换,则从头输入有关信息,再进行分派,不然分派工作结束。
(3)结帐管理
在旅客离开时计算房费,并打印账单,账单格式自行设计,要求信息齐全、清楚。
(4)对旅客信息和房间信息和收费标准采用文件的形式存储也能够在程序中初始化。
3.实现提示:
数据结构:
主要采用顺序结构链接结构的线性表及堆栈。
每一个房间用一个如下所示的具有五个字段的结点(房结点)表示:
性别
房间号
现有空床数
BTOP
RLINK
其中,性别:
0表示房间为空状态
1表示房间分派给女旅客
2表示房间分派给男旅客
现有空床数:
数据在0~bi之间,其中bi是第i品级一个房间的床位数,当现有空床数为bi时,表示房间为空;
为0时,表示房间满。
RLINK:
当房间空时,用作空屋栈的连接;
当房间不空时,指向下一个房结点。
BTOP:
指向该房间的空床号栈栈顶。
一个房间对应一个顺序表示的空床号栈。
栈的容量为bi,栈中寄存空床号。
分派时,从栈顶掏出空床号,栈顶下移(BTOP=BTOP+1);
回收时,栈顶上移(BTOP=BTOP-1),将回收的空床号填入栈顶。
每一个品级中的空屋间组成一个空屋栈;
已住旅客的房间组成一个链栈(简称房链),其头结点结构如下:
可分配女床位总数
可分配男床位总数
ai
bi
TTOP
其中:
ai:
第i品级中房间总数
bi第i品级中每一个房间的床位数
可分派男、女床位的总数的初值等于ai*bi,因为开始时所有房间和床位既能够分派给男旅客,也能够分派给女旅客。
当在房链中分派一个床位给男(女)旅客,床位总数应减1;
当从空屋栈中掏出一个房间作为男(女)旅客房间时,则可分派女(男)床位总数应减bi,当回收一个男(女)床位时,则可分派男(女)床位总数应加1;
当回收一个男(女)空屋至空屋栈时,则可分派女(男)床位总数应加bi。
TTOP:
指向本级空屋栈栈顶,当无空屋间时,TTOP=^(NIL)。
指向本级房链第一个极点,当房链为空时,RLINK=^(NIL)
顺序表s=(s0,s1,...,si,...sn),其中,s1-Sn顺序寄存第1~n品级房间的头结点;
s0寄存内容如下所示:
全店可分配女床总数
^
初始时,全店可分派男、女床总数相同,均为
,在分派或回收时,对各品级可分派男(女)床位总数处置的同时也要对全店可分派男(女)床总数作相应处置,当全店可分派男(女)床总数等于零时,表示客满。
二、需求分析
经分析,程序要有以下功能:
①对旅馆信息进行初始化;
②在旅客到来时记录旅客信息并为其分派床位;
③在旅客离开时为其打印账单,并回收其床位;
④在输入进程中对输入的数据进行检查,以避免输入超出范围的信息。
三、系统的概要设计
1.功能模块的划分
程序功能模块划分下图所示:
2.参考的ADT
ADT设计利用线性表和栈:
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
R1={<
ai-1,ai>
|,∈D,i=2,...,n}
大体操作:
InitList(&
L)
操作结果:
构造一个空的线性表L。
DestroyList(&
初始条件:
线性表L已存在。
销毁线性表L。
ListEmpty(L)
线性表L已存在。
若L为空表,则返回TRUE,不然返回FALSE。
ListLength(L)
返回L中元素个数。
PriorElem(L,cur_e,&
pre_e)
若cur_e是L中的数据元素,则用pre_e返回它的前驱,
不然操作失败,pre_e无概念。
NextElem(L,cur_e,&
next_e)
若cur_e是L中的数据元素,则用next_e返回它的后继,
不然操作失败,next_e无概念。
GetElem(L,i,&
e)
线性表L已存在,1≤i≤LengthList(L)。
用e返回L中第i个元素的值。
LocateElem(L,e,compare())
线性表L已存在,compare()是元素判定函数。
返回L中第1个与e知足关系compare()的元素的位序。
若如此的元素不存在,则返回值为0。
ListTraverse(L,visit())
初始条件:
线性表L已存在,visit()为元素的访问函数。
操作结果:
依次对L的每一个元素挪用函数visit()。
一旦visit()失败,则操作失败。
ClearList(&
将L重置为空表。
PutElem(&
L,i,&
线性表L已存在,1≤i≤LengthList(L)。
L中第i个元素赋值同e的值。
ListInsert(&
L,i,e)
线性表L已存在,1≤i≤LengthList(L)+1。
在L的第i个元素之前插入新的元素e,L的长度增1。
ListDelete(&
线性表L已存在且非空,1≤i≤LengthList(L)。
删除L的第i个元素,并用e返回其值,L的长度减1。
}ADTList
ADTStack{
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}
数据关系:
ai-1,ai>
|ai-1,ai-∈D,i=2,...,n}
约定an端为栈顶,a1端为栈底。
大体操作:
InitStack(&
S)
构造一个空栈S。
DestroyStack(&
栈S已存在。
栈S被销毁。
ClearStack(&
将S清为空栈。
StackEmpty(S)
若栈S为空栈,则返回TRUE,不然返回FALSE。
StackLength(S)
返回栈S中元素个数,即栈的长度。
GetTop(S,&
e)
栈S已存在且非空。
用e返回S的栈顶元素。
Push(&
S,e)
插入元素e为新的栈顶元素。
Pop(&
S,&
删除