数据结构课程设计旅游管理系统.docx

上传人:b****6 文档编号:8059361 上传时间:2023-01-28 格式:DOCX 页数:33 大小:719.42KB
下载 相关 举报
数据结构课程设计旅游管理系统.docx_第1页
第1页 / 共33页
数据结构课程设计旅游管理系统.docx_第2页
第2页 / 共33页
数据结构课程设计旅游管理系统.docx_第3页
第3页 / 共33页
数据结构课程设计旅游管理系统.docx_第4页
第4页 / 共33页
数据结构课程设计旅游管理系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

数据结构课程设计旅游管理系统.docx

《数据结构课程设计旅游管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计旅游管理系统.docx(33页珍藏版)》请在冰豆网上搜索。

数据结构课程设计旅游管理系统.docx

数据结构课程设计旅游管理系统

 

数据结构课程设计(旅游管理系统)

课程设计

--------数据结构课程设计报告

 

学号:

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

包含控

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1