数据结构课程设计旅游管理系统.docx
《数据结构课程设计旅游管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计旅游管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计旅游管理系统
数据结构课程设计(旅游管理系统)
课程设计
--------数据结构课程设计报告
学号:
03
姓名:
张灿
指导教师:
曹春萍
专业:
计算机
完成日期:
A篇:
旅游信息管理系统
一、题目要求
1、题目内容----------------------------------1
二、程序设计目标
1、题目分析----------------------------------1
2、功能简介----------------------------------2
3、数据结构----------------------------------2
三、概要简述
1、功能结构图---------------------------------3
2、模块分析-----------------------------------3
四、详细设计
1、结构体定义----------------------------3
2、程序流程图---------------------------5
五、源程序代码
1、源程序c++实现代码-------------------------6
六、调试分析及测试结果
1、运行结果截------------------------------14
七、附录
1、补充说明--------------------------------19
八、程序小结
1、报告总结———————————————19
B篇:
B-树手工题
一、题目要求
1、题目内容-----------------------------------20
二、运行过程
1、从空树插入---------------------------------20
2、插入完成-----------------------------------25
3、依次删除要求点-----------------------------26
4、最终结果-----------------------------------28
C篇:
附加题
一、题目
1、题目内容—————————————————29
二、程序设计目标
1、功能简介—————————————————29
2、数据结构—————————————————29
三、设计思路
1、结构体定义————————————————29
2、功能结构图———————————————30
3、程序流程图———————————————30
四、实现代码
1、程序代码————————————————32
五、程序调试以及运行结果
1、调试结果及截图—————————————43
六、报告总结
1、报告总结————————————————44
A篇:
旅游信息管理系统
一、题目要求
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
#include<>
#include
#include
usingnamespacestd;
#defineMAX50
#defineSIZE12
typedefstructtourist{
charname[SIZE];
intid;
charsex[5];
structtourist*next;
}Trist,*linklist;
typedefstructTree_Place{
intcode;//旅游地区号
chararea[SIZE];//旅游地名称
intcount;//记录该旅游地报名游客人数
structTree_Place*lchild,*rchild;
Trist*list;//指向游客所在单链表的指针
}Place,*TPlace;
voidSearch_T(TPlace&tree,intco);
voidMainlist(TPlace&tree);
voidTour_1(TPlace&tree);
voidTour_2(TPlace&tree);
voidDestory(TPlace&tree);
voidInit_L(linklist&head)
{
head=NULL;
}
voidInsert_L(TPlace&tree,TPlace&t,linklist&head)
{
linklisttr;
charc;
inti=1,co,id;
while(t->count<6&&i==1)
{
cout<<"请输入你的身份证号:
"<cin>>id;
tr=(linklist)malloc(sizeof(Trist));
tr->id=id;
cout<<"输入姓名,性别:
"<cin>>tr->name>>tr->sex;
tr->next=head;
head=tr;
t->count++;
cout<<"继续报名请按1,按0退出!
"<cin>>i;
}
if(t->count>=6)
{
cout<<"此旅游地人数已满,按'y'选择其他旅游地,其他键退出!
"<>c;
if(c=='y'||c=='Y'){cout<<"请重新输入区号"<>co;Search_T(tree,co);}
}
elseTour_2(tree);
}
voidDelet_L(linklist&head)
{
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->codecode)Insert_T(tree->lchild,p);
elseif(p->code>tree->code)Insert_T(tree->rchild,p);
}
voidSearch_T(TPlace&tree,intco)
{
charc;
TPlacep;
intcode;
p=tree;
while(p&&p->code!
=co)
{
if(p->code>co)
p=p->lchild;
elsep=p->rchild;
}
if(!
p){cout<<"此旅游地点还未存在!
"<else{
if(p->count>=6)
{
cout<<"此旅游地人数已满,按'y'选择其他旅游地,其他键退出!
"<>c;
if(c=='y'||c=='Y'){cout<<"请重新输入区号"<>code;Search_T(tree,code);}elseTour_2(tree);
}
else{cout<<"可以报名"<list);Tour_2(tree);}
}
}
TPlaceDelete_T(TPlace&t,intco)
{
TPlacep,parent,s,q;//parent指向要删除的节点的双亲,p指向要删除的节点
p=t;
parent=NULL;
while(p)
{
if(p->code==co)
break;
parent=p;
if(p->code>co)
p=p->lchild;
else
p=p->rchild;
}
if(p==NULL)//不存在该树节点
returnt;
if(p->lchild==NULL)//无左子树,右子树可有可无
{
if(parent==NULL)
t=p->rchild;
else
if(parent->lchild==p)
parent->lchild=p->rchild;
else
parent->rchild=p->rchild;
Delet_L(p->list);free(p);
}
else//有左子树,右子树可有可无
{
q=p;
s=q->lchild;////
while(s->rchild)
{
q=s;
s=s->rchild;
}
if(q==p)//其左孩子没有右子树
q->lchild=s->lchild;
else
q->rchild=s->lchild;
p->code=s->code;Delet_L(s->list);
free(s);
}
returnt;
}
voidFun1(TPlace&tree)
{
charc;
intn;
TPlacep;
cout<<"请输入插入地点个数:
"<cin>>n;
cout<<"依次输入各个旅游地点的区号和地名:
"<for(inti=0;i{
p=(TPlace)malloc(sizeof(Place));
cout<<"请输入第"<
"<cin>>p->code>>p->area;
p->lchild=p->rchild=NULL;
p->list=NULL;
p->count=0;
Insert_T(tree,p);
}
cout<<"输入完成,输入y或者Y继续操作,其他键退出!
";
cin>>c;
if(c=='y'||c=='Y')Fun1(tree);
else{system("cls");Tour_1(tree);}
}
voidFun2(TPlace&tree,intx)
{
inttop=0;
TPlacep,s[MAX];
p=tree;
while(p||top>0)
{
while(p)
{
s[top++]=p;
p=p->lchild;
}
if(top>0)
{p=s[--top];cout<"<code<"<area<"<count<p=p->rchild;}
}
if(tree==NULL)cout<<"还未录入旅游地!
请稍后查询!
"<cout<<"按任意键返回上一级菜单!
"<system("pause");if(x==1)Tour_1(tree);if(x==2)Tour_2(tree);
}
voidFun3(TPlace&tree,intx)
{
intn1=0,n2=0;charc;
inttop=0;intelem[MAX];
TPlacep,s[MAX];
p=tree;
while(p||top>0)
{
while(p)
{
s[top++]=p;
p=p->lchild;
}
if(top>0)
{p=s[--top];
if(p->count<3&&x==1){
cout<"<code<"<area<"<count<code;n1++;}
if(p->count<6&&x==2){
cout<"<code<"<area<"<count<p=p->rchild;}
}
if(x==1){cout<<"一共有"<"<>c;
if(c=='d'||c=='D'){for(inti=0;i"<if(x==2){cout<<"一共有"<"<}
voidFun4(TPlace&tree)
{
intco,id;
TPlacep;
linklistl,pre;
p=tree;
cout<<"输入要退出旅游地的区号和自己的身份证号:
"<cin>>co>>id;
while(p&&p->code!
=co)
{
if(p->code>co)
p=p->lchild;
elsep=p->rchild;
}
if(!
p){cout<<"此旅游地点还未存在!
"<else
{l=p->list;pre=l;
while(l->id!
=id)
{
pre=l;
l=l->next;
}
pre->next=l->next;free(l);p->count--;cout<<"输入要报名的地点区号:
"<cin>>co;
Search_T(tree,co);
}
}
voidMainlist(TPlace&tree)
{
system("cls");
cout<<"******************************************************"<cout<<"欢迎登陆旅游购票系统"<cout<<"请选择登录身份:
"<cout<<"1、旅游公司管理人员"<cout<<"2、游客"<cout<<"3、退出程序"<cout<<"******************************************************"<intn,key,i=1;
cin>>n;
switch(n)
{
case3:
Destory(tree);exit(0);
case1:
do{cout<<"请输入登陆密码:
";cin>>key;i++;}while(key!
=12345&&i<=3);
if(key==12345)Tour_1(tree);elseMainlist(tree);break;
case2:
Tour_2(tree);break;
default:
cout<<"输入错误,请重新选择!
"<}
}
voidTour_1(TPlace&tree)
{
system("cls");
intn;
cout<<"******************************************************"<cout<<"1、输入旅游地点"<cout<<"2、查询各旅游地游客人数"<cout<<"3、显示不足三人的旅游地"<cout<<"4、退出"<cout<<"******************************************************"<cin>>n;
switch(n){
case1:
Fun1(tree);break;
case2:
Fun2(tree,1);break;
case3:
Fun3(tree,1);break;
case4:
Mainlist(tree);break;
default:
cout<<"输入错误,请重新输入!
"<}
}
voidTour_2(TPlace&tree)
{
intcode;
system("cls");
intn;
cout<<"******************************************************"<cout<<"1、输入旅游地区号"<cout<<"2、显示所有旅游地"<cout<<"3、查询可报名地"<cout<<"4、修改旅游地点"<cout<<"5、退出"<cout<<"******************************************************"<cin>>n;
switch(n){
case1:
cout<<"请输入区号:
"<>code;Search_T(tree,code);break;
case2:
Fun2(tree,2);break;
case3:
Fun3(tree,2);break;
case4:
Fun4(tree);break;
case5:
Mainlist(tree);break;
default:
cout<<"输入错误,请重新输入!
"<}
//销毁二叉树
voidDestory(TPlace&tree)
{
if(!
tree){cout<<"此树已空!
"<if(tree&&tree->lchild)
Destory(tree->lchild);
if(tree&&tree->rchild)
Destory(tree->rchild);
cout<code<area<Delet_L(tree->list);
free(tree);
}
voidmain()
{
TPlaceT=NULL;
Mainlist(T);
}
六、调试分析及测试结果
1、运行结果截图
七、附录
1、补充说明
#include<>:
包含分配空间的头文件
#include:
包含对字符串进行操作的头文件
#include:
包含控