数据结构课程设计旅游管理系统_第1页
数据结构课程设计旅游管理系统_第2页
数据结构课程设计旅游管理系统_第3页
数据结构课程设计旅游管理系统_第4页
数据结构课程设计旅游管理系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计

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

学号:

姓名:

指导教师

专业:计算机

完成日期:

目录

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、题目分析

读题可知,需完成两方面的编程以对旅游系统进行操作。一方

面是旅游公司管理人员,主要是旅游景点的添加与删除,对旅游人员

的录入与删除,对旅游人数的统计,把游客所需信息打印等等;第二

方面是游客对于旅游地的选、改、册IJ,以及个人信息的输入、确认等

2、功能简介

由以上分析可得:本设计程序功能主要有:

西、旅游公司管理人员对旅游人员和旅游地点的操作,用二

叉排序树管理旅游地点。主要有地点的变更,插入、删除、游客的信

息存储及及时提醒等功能。其中二叉树每一个结点包括旅游地点的区

号(area_node)>名称(area)、该旅游地的游客人数(count)、以

及一个指向游客信息结构的指针(list),还有二叉树结点的左孩子

和右孩子指针(IchiId,rchild)o

器、游客可以登陆旅游公司界面进行报名、选择旅游地点和输

入个人信息。游客结构采用单链表,其中包括单链表的初始化、插入、

删除、计数功能。其中每一个单链表结点包括游客的编号(id)、姓

名(name)、性别(sex)、和链接链表的指针(next)。

3、数据结构

用到的数据结构有:单链表,排序二叉树,数组。

三、概要简述

2、叉链

树表

本程,」模块:主程序模块、二叉排序树模块、单链表

模块,工作区选择模块。如图:

作二叉排序树模块

择V

模单链表模块

四、详细设计

1、结构体定义

1)、链表结点结构体

typedefstructtourist{

stringname;

intid;

stringsex;

structtourist*next;

}Trist,*linklist;

于左孩子区号地名游客数右孩子指向链表

乙'J.L*.Jt

typedefstructTree_Place(

intarea_code;〃旅游地区号

stringarea;〃旅游地名称

intcount;〃记录该旅游地报名游客人数

structTree_Place*lchild,*rchild;

Trist*list;〃指向游客所在单链表的指针

}Place,*TPlace;

r—

退

a城

成复

退

醒报

五、源程序代码人

1、源程序C++实现代码息

#include<iostream>

#include<stdlib.h>

#include<string>

ttinclude<iomanip>

usingnamespacestd;

ttdefineMAX50

ttdefineSIZE12

typedefstructtourist{

charname[SIZE];

intid;

charsex[5];

structtourist*next;

}Trist,*linklist;

typedefstructTree_Place{

intcode;〃旅游地区号

chararea[SIZE];〃旅游地名称

intcount;〃记录该旅游地报名游客

人数

structTree_Place*Ichild,*rchild;

Trist*list;//指向游客所在单链表

的指针

}Place,*TPlace;

voidSearch_T(TPlace&tree,intco);

voidMainlist(TPlace&tree);

voidTour_l(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=l,co,id;

while(t->count<6&&i—1)

(

cout«〃请输入你的身份证号:〃*endl;

cin»id;

tr=(linklist)malloc(sizeof(Trist));

tr->id=id;

cout<<〃输入姓名,性别:〃<<endl;

cin>>tr->name>>tr->sex;

tr->next=head;

head=tr;

t->count++;

cout<〈〃继续报名请按1,按0退出!“<<endl;

cin>>i;

)

if(t->count>=6)

(

cout«〃此旅游地人数已满,按'y'选择其他旅游地,其他键退出!

z,«endl;cin»c;

if(c='y'||c='Y'){cout«,z请重新输入区号

,,«endl;cin»co;SearchT(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->code<tree->code)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<<“此旅游地点还未存在!"<<endl;system("pause");Tour2(tree);)

else{

if(p->count>=6)

{

cout<<〃此旅游地人数已满,按'y'选择其他旅游地,其他键退出!

z/«endl;cin»c;

if(c二二'y'I|c二二'Y'){cout«,z请重新输入区号

,,«endl;cin»code;Search_T(tree,code);}elseTour_2(tree);

)

else{cout<<〃可以报名"<<endl;Insert-L(tree,p,p->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->Ichiid==p)

parent->Ichiid=p->rchi1d;

else

parent->rchi1d=p->rchi1d;

Delet_L(p->list);free(p);

}

else〃有左子树,右子树可有可无

(

q二P;

s=q->lchild;////

while(s->rchild)

(

q=s;

s=s->rchild;

}

if(q-p)//其左孩子没有右子树

q->Ichild=s->IchiId;

else

q->rchild=s->lchiId;

p->code=s->code;Delet_L(s->list);

free(s);

)

returnt;

)

voidFunl(TPlace&tree)

(

charc;

intn;

TPlacep;

cout<〈〃请输入插入地点个数:〃<<endl;

cin>>n;

cout<<〃依次输入各个旅游地点的区号和地名:〃<<endl;

for(inti=0;i<n;i++)

(

p=(TPlace)malloc(sizeof(Place));

cout<<〃请输入第〃《i+l<〈〃个地点:〃。endl;

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,)Funl(tree);

else{system("cis");Tour_l(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<<setw(8)<</z区号:,z<<p->code<<setw(10)<<,z地

名:,z«p->area«setw(10)<〈〃人数:〃<Xp->count«endl;

p=p->rchild;}

}

if(tree二二NULL)cout<<”还未录入旅游地!请稍后查询!〃<<endl;

cout。〃按任意键返回上一级菜单!〃Oendl;

systemC'pause^);if(x==l)Tour_l(tree);if(x==2)Tour_2(tree);

)

voidFun3(TPlace&tree,intx)

(

intnl=0,n2=0;charc;

inttop=0;intelem[MAX];

TPlacep,s[MAX];

p=tree;

while(p||top>0)

(

while(p)

{

sLtop++]=p;

p=p->lchild;

}

if(top>0)

{p=s[—top];

if(p->count<3&&x==l){

cout«setw(8)«z,区号:,z«p->code«setw(10)«,z地

名:/z«p->area«setw(10)<<"人数:"<<p->count<<endl;elem[nl]=p->code;nl++;}

if(p->count<6&&x-2){

cout«setw(8)«/z区号:〃<<p->code〈〈setw(10)<<〃地

名:/z<<p->area«setw(10)«“人数:/z«p->count«endl;;n2++;}

p=p->rchild;}

}

if(x-l){cout<<〃一共有〃《nl<<〃各旅游景点人数少于三个〃。endl;cout*〃删除旅

游地请输入D或者d,其他键返回菜单!〃<<endl;cin>>c;

if(c==,d*||c==,D*){for(inti=0;i<nl;i++)Delete_T(tree,;cout<<〃删

除完成!,z«endl;}system("pause");Tour_l(tree);)

if(x=2){cout<<〃一共有〃<<n2<<〃个旅游景点仍可报名〃<<endl;cout<<〃按任意键返

回上一级菜单!“<<endl;system("pause");Tour2(tree);}

)

voidFun4(TPlacefetree)

(

intco,id;

TPlacep;

linklist1,pre;

p二tree;

cout。〃输入要退出旅游地的区号和自己的身份证号:〃《endl;

cin»co>>id;

whi1e(p&&p->code!=co)

(

if(p->code>co)

p=p->lchild;

elsep=p->rchild;

}

if(!p){cout<〈”此旅游地点还未存在!z/«endl;system("pause");Tour_2(tree);}

else

{l=p->list;pre=l;

while。->id!=id)

(

pre=l;

l=l->next;

}

pre->next=l->next;free(l);p->count--;cout<X〃输入要报名的地点区号:〃〈〈endl;

cin»co;

Search_T(tree,co);

voidMainlist(TPlace&tree)

(

system(z,cls,z);

cout«,z

******************************************************〃〈〈end1〈〈end1,

cout«,z欢迎登陆旅游购票系统”《endl;

cout<<,z请选择登录身份:"<<endl;

cout<<,z1、旅游公司管理人员"<<endl;

cout<<,z2、游客"Gendl;

cout<<z/3、退出程序"<Vendl;

cout«/z

******************************************************"<〈end1〈〈end1;

intn,key,i=l;

cin>>n;

switch(n)

(

case3:Destory(tree);exit(0);

case1:do{cout<<〃请输入登陆密码:";cin»key;i++;}while(key!=12345&&i<=3);

if(key==12345)Tour_l(tree);elseMainlist(tree);break;

case2:Tour_2(tree);break;

default:cout<〈〃输入错误,请重新选择!,,<<endl;system(z,pause,z);

Mainlist(tree);

)

)

voidTour_l(TPlace&tree)

(

system(〃cls〃);

intn;

cout<<,z

******************************************************〃<<end1(〈end1;

cout«,'1>输入旅游地点〃<<endl;

cout<<〃2、查询各旅游地游客人数〃*endl;

cout«,z3、显示不足三人的旅游地〃<<endl;

cout<<〃4、退出〃<<endl;

cout<<,z

******************************************************"<〈end1〈〈end1;

cin>>n;

switch(n){

case1:Funl(tree);break;

case2:Fun2(tree,1);break;

case3:Fun3(tree,1);break;

case4:Mainlist(tree);break;

default:cout<X"输入错误,请重新输入!“<<endl;system(〃pause");Tour_l(tree);;

)

voidTour_2(TPlace&tree)

(

intcode;

system(〃cls〃);

intn;

cout<<,z

******************************************************〃〈<end1<<endl;

cout<<z,1、输入旅游地区号,,«endl;

cout<<z/2、显示所有旅游地"Gendl;

cout«/z3、查询可报名地"<<endl;

cout<<,/4、修改旅游地点"<<endl;

cout<<,z5、退出“〈Vendl;

cout<</z

******************************************************"〈〈end1〈〈end1,

cin»n;

switch(n){

case1:cout<〈〃请输入区号:,,«endl;cin»code;Search-J(tr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论