数据结构课程设计旅游管理系统Word文档格式.docx
《数据结构课程设计旅游管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计旅游管理系统Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
附加题
一、题目
1、题目内容—————————————————29
1、功能简介—————————————————29
2、数据结构—————————————————29
三、设计思路
1、结构体定义————————————————29
2、功能结构图———————————————30
3、程序流程图———————————————30
四、实现代码
1、程序代码————————————————32
五、程序调试以及运行结果
1、调试结果及截图—————————————43
六、报告总结
1、报告总结————————————————44
旅游信息管理系统
1、题目内容
旅游信息管理系统
1)数据结构
(1)、二叉排序树加单链表
(2)、二叉排序树
说明:
1、用二叉排序树表示旅游地点,用单链表表示游客。
2、用二叉排序树表示旅游地点和游客。
2)、功能
(1)、旅游地点的插入
(2)、游客报名
(3)、当某地的旅游人数少于三个人时,取消次旅游地,建议游客该选其他旅游点
(4)、当某旅游地旅游人数等于六个时,不允许在报名。
建议游客改选其它旅游地。
1、题目分析
读题可知,需完成两方面的编程以对旅游系统进行操作。
一方面是旅游公司管理人员,主要是旅游景点的添加与删除,对旅游人员的录入与删除,对旅游人数的统计,把游客所需信息打印等等;
第二方面是游客对于旅游地的选、改、删,以及个人信息的输入、确认等等。
2、功能简介
由以上分析可得:
本设计程序功能主要有:
、旅游公司管理人员对旅游人员和旅游地点的操作,用二叉排序树管理旅游地点。
主要有地点的变更,插入、删除、游客的信息存储及及时提醒等功能。
其中二叉树每一个结点包括旅游地点的区号(area_node)、名称(area)、该旅游地的游客人数(count)、以及一个指向游客信息结构的指针(list),还有二叉树结点的左孩子和右孩子指针(lchild,rchild)。
、游客可以登陆旅游公司界面进行报名、选择旅游地点和输入个人信息。
游客结构采用单链表,其中包括单链表的初始化、插入、删除、计数功能。
其中每一个单链表结点包括游客的编号(id)、姓名(name)、性别(sex)、和链接链表的指针(next)。
3、数据结构
用到的数据结构有:
单链表,排序二叉树,数组。
1、功能结构图
主菜单
程序员游客
2、模块分析
本程序包括三个模块:
主程序模块、二叉排序树模块、单链表模块,工作区选择模块。
如图:
二叉排序树模块
主程序模块
单链表模块
1、结构体定义
1)、链表结点结构体
typedefstructtourist{
stringname;
intid;
stringsex;
structtourist*next;
}Trist,*linklist;
左孩子区号地名游客数右孩子指向链表的指针
2)、二叉排序树结点结构体
typedefstructTree_Place{
intarea_code;
//旅游地区号
stringarea;
//旅游地名称
intcount;
//记录该旅游地报名游客人数
structTree_Place*lchild,*rchild;
Trist*list;
//指向游客所在单链表的指针
}Place,*TPlace;
2、程序流程图
主菜单(1、程序员,2、游客)
1
输入密码错误
正确(12345)2
程序管理员游客
输入
成功
退/输YN
N
Y
1、源程序c++实现代码
#include<
iostream>
>
string>
iomanip>
usingnamespacestd;
#defineMAX50
#defineSIZE12
charname[SIZE];
charsex[5];
intcode;
chararea[SIZE];
}Place,*TPlace;
voidSearch_T(TPlace&
tree,intco);
voidMainlist(TPlace&
tree);
voidTour_1(TPlace&
voidTour_2(TPlace&
voidDestory(TPlace&
voidInit_L(linklist&
head)
{
head=NULL;
}
voidInsert_L(TPlace&
tree,TPlace&
t,linklist&
linklisttr;
charc;
inti=1,co,id;
while(t->
count<
6&
&
i==1)
{
cout<
<
"
请输入你的身份证号:
endl;
cin>
id;
tr=(linklist)malloc(sizeof(Trist));
tr->
id=id;
输入姓名,性别:
tr->
name>
sex;
next=head;
head=tr;
t->
count++;
继续报名请按1,按0退出!
i;
}
if(t->
count>
=6)
cout<
此旅游地人数已满,按'
y'
选择其他旅游地,其他键退出!
cin>
c;
if(c=='
||c=='
Y'
){cout<
请重新输入区号"
co;
Search_T(tree,co);
elseTour_2(tree);
voidDelet_L(linklist&
linklistp,pro;
pro=head;
while(pro)
p=pro;
pro=p->
next;
free(p);
voidInsert_T(TPlace&
tree,TPlacep){//在二叉排序树中插入一个新结点
if(tree==NULL)tree=p;
elseif(p->
code<
tree->
code)Insert_T(tree->
lchild,p);
code>
rchild,p);
tree,intco)
TPlacep;
p=tree;
while(p&
p->
code!
=co)
if(p->
co)
p=p->
lchild;
elsep=p->
rchild;
if(!
p){cout<
此旅游地点还未存在!
system("
pause"
);
Tour_2(tree);
else{
=6)
if(c=='
code;
Search_T(tree,code);
}elseTour_2(tree);
else{cout<
可以报名"
Insert_L(tree,p,p->
list);
TPlaceDelete_T(TPlace&
t,intco)
{
TPlacep,parent,s,q;
//parent指向要删除的节点的双亲,p指向要删除的节点
p=t;
parent=NULL;
while(p)
{
code==co)
break;
parent=p;
co)
lchild;
else
rchild;
}
if(p==NULL)//不存在该树节点
returnt;
lchild==NULL)//无左子树,右子树可有可无
if(parent==NULL)
t=p->
if(parent->
lchild==p)
parent->
lchild=p->
rchild=p->
Delet_L(p->
free(p);
else//有左子树,右子树可有可无
q=p;
s=q->
////
while(s->
rchild)
q=s;
s=s->
if(q==p)//其左孩子没有右子树
q->
lchild=s->
else
rchild=s->
p->
code=s->
Delet_L(s->
free(s);
}
voidFun1(TPlace&
tree)
intn;
请输入插入地点个数:
n;
依次输入各个旅游地点的区号和地名:
for(inti=0;
i<
i++)
p=(TPlace)malloc(sizeof(Place));
请输入第"
i+1<
个地点:
area;
lchild=p->
rchild=NULL;
list=NULL;
count=0;
Insert_T(tree,p);
输入完成,输入y或者Y继续操作,其他键退出!
;
)Fun1(tree);
else{system("
cls"
Tour_1(tree);
voidFun2(TPlace&
tree,intx)
inttop=0;
TPlacep,s[MAX];
while(p||top>
0)
while(p)
s[top++]=p;
if(top>
{p=s[--top];
cout<
setw(8)<
区号:
setw(10)<
地名:
area<
人数:
if(tree==NULL)cout<
还未录入旅游地!
请稍后查询!
按任意键返回上一级菜单!
system("
if(x==1)Tour_1(tree);
if(x==2)Tour_2(tree);
voidFun3(TPlace&
intn1=0,n2=0;
intelem[MAX];
3&
x==1){
elem[n1]=p->
code;
n1++;
x==2){
n2++;
if(x==1){cout<
一共有"
n1<
各旅游景点人数少于三个"
删除旅游地请输入D或者d,其他键返回菜单!
d'
D'
){for(inti=0;
n1;
i++)Delete_T(tree,elem[i]);
删除完成!
}system("
if(x==2){cout<
n2<
个旅游景点仍可报名"
voidFun4(TPlace&
intco,id;
linklistl,pre;
输入要退出旅游地的区号和自己的身份证号:
co>
{l=p->
list;
pre=l;
while(l->
id!
=id)
pre=l;
l=l->
next;
pre->
next=l->
free(l);
count--;
输入要报名的地点区号:
******************************************************"
endl<
欢迎登陆旅游购票系统"
请选择登录身份:
1、旅游公司管理人员"
2、游客"
3、退出程序"
intn,key,i=1;
switch(n)
case3:
Destory(tree);
exit(0);
case1:
do{cout<
请输入登陆密码:
key;
i++;
}while(key!
=12345&
=3);
if(key==12345)Tour_1(tree);
elseMainlist(tree);
break;
case2:
Tour_2(tree);
default:
输入错误,请重新选择!
Mainlist(tree);
1、输入旅游地点"
2、查询各旅游地游客人数"
3、显示不足三人的旅游地"
4、退出"
switch(n){
Fun1(tree);
Fun2(tree,1);
Fun3(tree,1);
case4:
输入错误,请重新输入!
1、输入旅游地区号"
2、显示所有旅游地"
3、查询可报名地"
4、修改旅游地点"
5、退出"
请输入区号:
Fun2(tree,2);
Fun3(tree,2);
Fun4(tree);
case5:
Mainlist(tree);
//销毁二叉树
tree){cout<
此树已空!
exit(0);
if(tree&
lchild)
Destory(tree->
lchild);
rchild)
rchild);
setw(5)<
Delet_L(tree->
free(tree);
voidmain()
TPlaceT=NULL;
Mainlist(T);
1、运行结果截图
1、补充说明
#include<
:
包含分配空间的头文件
包含对字符串进行操作的头文件
包含控