课程设计旅游管理系统和B树的实现.docx
- 文档编号:6053739
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:48
- 大小:228.27KB
课程设计旅游管理系统和B树的实现.docx
《课程设计旅游管理系统和B树的实现.docx》由会员分享,可在线阅读,更多相关《课程设计旅游管理系统和B树的实现.docx(48页珍藏版)》请在冰豆网上搜索。
课程设计旅游管理系统和B树的实现
课程设计
--------数据结构课程设计报告
A篇:
旅游信息管理系统
1、题目要求
1、题目内容----------------------------------1
2、程序设计目标
1、题目分析----------------------------------1
2、功能简介----------------------------------2
3、数据结构----------------------------------2
3、概要简述
1、功能结构图---------------------------------3
2、模块分析-----------------------------------3
4、详细设计
1、结构体定义----------------------------3
2、程序流程图---------------------------5
5、源程序代码
1、源程序c++实现代码-------------------------6
6、调试分析及测试结果
1、运行结果截------------------------------14
7、附录
1、补充说明--------------------------------19
8、程序小结
1、报告总结———————————————19
B篇:
B-树手工题
1、题目要求
1、题目内容-----------------------------------20
2、运行过程
1、从空树插入---------------------------------20
2、插入完成-----------------------------------25
3、依次删除要求点-----------------------------26
4、最终结果-----------------------------------28
C篇:
附加题
1、题目
1、题目内容—————————————————29
2、程序设计目标
1、功能简介—————————————————29
2、数据结构—————————————————29
3、设计思路
1、结构体定义————————————————29
2、功能结构图———————————————30
3、程序流程图———————————————30
4、实现代码
1、程序代码————————————————32
5、程序调试以及运行结果
1、调试结果及截图—————————————43
6、报告总结
1、报告总结————————————————44
A篇:
旅游信息管理系统
1、题目要求
1、题目内容
旅游信息管理系统
1)数据结构
(1)、二叉排序树加单链表
(2)、二叉排序树
说明:
1、用二叉排序树表示旅游地点,用单链表表示游客。
2、用二叉排序树表示旅游地点和游客。
2)、功能
(1)、旅游地点的插入
(2)、游客报名
(3)、当某地的旅游人数少于三个人时,取消次旅游地,建议游客该选其他旅游点
(4)、当某旅游地旅游人数等于六个时,不允许在报名。
建议游客改选其它旅游地。
2、程序设计目标
1、题目分析
读题可知,需完成两方面的编程以对旅游系统进行操作。
一方面是旅游公司管理人员,主要是旅游景点的添加与删除,对旅游人员的录入与删除,对旅游人数的统计,把游客所需信息打印等等;第二方面是游客对于旅游地的选、改、删,以及个人信息的输入、确认等等。
2、功能简介
由以上分析可得:
本设计程序功能主要有:
、旅游公司管理人员对旅游人员和旅游地点的操作,用二叉排序树管理旅游地点。
主要有地点的变更,插入、删除、游客的信息存储及及时提醒等功能。
其中二叉树每一个结点包括旅游地点的区号(area_node)、名称(area)、该旅游地的游客人数(count)、以及一个指向游客信息结构的指针(list),还有二叉树结点的左孩子和右孩子指针(lchild,rchild)。
、游客可以登陆旅游公司界面进行报名、选择旅游地点和输入个人信息。
游客结构采用单链表,其中包括单链表的初始化、插入、删除、计数功能。
其中每一个单链表结点包括游客的编号(id)、姓名(name)、性别(sex)、和链接链表的指针(next)。
3、数据结构
用到的数据结构有:
单链表,排序二叉树,数组。
3、概要简述
1、功能结构图
主菜单
程序员游客
删除
遍历
插入
遍历
插入
二叉树
单链表
2、模块分析
工作去选择模块
本程序包括三个模块:
主程序模块、二叉排序树模块、单链表模块,工作区选择模块。
如图:
二叉排序树模块
主程序模块
单链表模块
4、详细设计
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
程序管理员游客
退出
显示少于3人地
查询各地游客数目
输入地点
退出
输入旅游地区号
显示所有旅游地
查询可报名地
修改旅游地点
删除
超额
可报
提醒
删除
打印
退出
输入
退出
可报地
输入信息
重复
提醒
成功
退/输YN
报名成功
N
打印个人信息
Y
5、源程序代码
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'选择其他旅游地,其他键退出! "< if(c=='y'||c=='Y'){cout<<"请重新输入区号"< } 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->code 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'选择其他旅游地,其他键退出! "< if(c=='y'||c=='Y'){cout<<"请重新输入区号"< } else{cout<<"可以报名"< } } 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< "< "< "< 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< "< "< "< if(p->count<6&&x==2){ cout< "< "< "< p=p->rchild;} } if(x==1){cout<<"一共有"< "< 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<<"请输入区号: "< 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< Delet_L(tree->list); free(tree); } voidmain() { TPlaceT=NULL; Mainlist(T); } 六、调试分析及测试结果 1、运行结果截图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 旅游 管理 系统 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)