数据结构课程设计(旅游管理系统) (2)
- 格式:doc
- 大小:145.00 KB
- 文档页数:19
数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码: 6014389题目: 故宫导游咨询年级/专业/班:学生姓名:学号:开始时间: 2011 年 12 月 9 日完成时间: 2011 年 12 月 23 日课程设计成绩:指导教师签名:年月日目录引言.................................................... 错误!未定义书签。
1、需求分析............................................... 错误!未定义书签。
1.1任务与分析......................................... 错误!未定义书签。
2 概要设计................................................ 错误!未定义书签。
2.1 ADT描述........................................... 错误!未定义书签。
2.2程序模块结构....................................... 错误!未定义书签。
2.3 各功能模块....................................... 错误!未定义书签。
3 详细设计............................................... 错误!未定义书签。
3.1结构体定义......................................... 错误!未定义书签。
3.2 初始化............................................ 错误!未定义书签。
3.3 插入操作.......................................... 错误!未定义书签。
3.4、录入信息......................................... 错误!未定义书签。
旅游管理信息系统的设计与实现【摘要】本文主要介绍了旅游管理信息系统的设计与实现。
通过系统需求分析和设计,确定了系统的功能和流程。
系统架构设计中确定了系统的整体结构和各个模块之间的关系。
接着,数据库设计与实现确保了系统能够高效地存储和管理数据。
界面设计与实现则关注用户友好性和易用性。
系统功能实现与测试确保系统正常运行并符合预期。
通过本文的介绍,读者能够深入了解旅游管理信息系统的设计与实现过程,从而为相关领域的从业人员提供参考和借鉴。
【关键词】旅游管理信息系统、设计、实现、系统需求分析、系统架构设计、数据库设计、界面设计、功能实现、测试、结论1. 引言1.1 引言-旅游管理信息系统的设计与实现旅游管理信息系统是指为了更好地管理和规划旅游活动而设计和实现的系统。
随着旅游业的快速发展和信息化的趋势,传统的手工管理方式已经无法满足人们对高效、便捷的需求。
设计和实现一个高效的旅游管理信息系统显得尤为重要。
旅游管理信息系统的设计与实现涉及到多个方面,包括系统需求分析与设计、系统架构设计、数据库设计与实现、界面设计与实现以及系统功能的实现与测试。
通过以上方面的设计和实现,旅游管理信息系统能够有效地整合旅游资源,提高管理效率,为用户提供更好的旅游体验。
2. 正文2.1 系统需求分析与设计-旅游管理信息系统的设计与实现:系统需求分析& 设计一、需求分析旅游管理信息系统的设计与实现是为了提高旅游管理工作的效率和效益,满足旅游管理的需求。
在进行系统需求分析时,首先需要对旅游管理业务流程和需求进行深入理解和调研。
通过与旅行社、酒店、景点等相关单位合作,获取他们的需求和问题,明确系统应该具备的功能和特点。
在需求分析中,应该考虑到系统的可扩展性、可靠性、安全性等方面,确保系统能够满足未来的业务需求。
二、系统设计在系统设计阶段,需要根据需求分析的结果来设计系统的功能模块、技术架构、数据库结构等。
设计阶段应该充分考虑系统的易用性和用户体验,确保用户能够轻松地操作系统并快速完成各项任务。
OOD模型-旅游信息管理系统OOD 部分一一: 问题域部分系统中涉及到一些永久对象需要保存,另外,为了实现对象的保存和恢复,为系统设置了一个新的“对象存取器”类。
“对象存取器”可以根据对象所在地类,将对象的信息保存到同名的数据库表中。
“对象存取器”类统一负责所有对象的保存和恢复。
由于每个类请求保存、请求恢复的语句语法上都是相同的,设置了一个高层的类“永久对象”类,它提供统一的协议,有各个需要在数据库存储其对象实例的类继承。
二二: 数据接口部分本系统数据结构设计主要采用关系式数据库模型。
但因为系统中的有旅游景点和路线的图片两个类,对象都是图片,所以这两个类采用文件系统。
对于设计过程中发现的各对象及其之间的关系进行分析之后,构造出本系统的基本E-R 图。
图中说明了数据结构中各对象间的逻辑关系。
景点1n旅游团游客服务人员酒店、餐馆、特色商店事故活动计划业绩记录业绩统计选择路线1n包含1n属于属于制定1n1n包含属于改变参照活动属于负责111nn11n111n1n属于n1系统分布设计与子系统划分1) 表示层服务:旅游景点信息管理网页服务(所有人)旅游路线信息管理网页服务(限管理层人员,员工)旅游组团业务管理网页服务(限管理层人员,员工)组团活动计划管理网页服务(限管理层人员,员工)组团游客登记管理网页服务(限管理层人员权限)旅游情况登记统计分析管理网页服务(限管理层人员)带团人员业绩记录管理网页服务(限管理层人员,员工)2) 数据存储服务旅游景点信息管理的数据库操作服务旅游路线信息管理的数据库操作服务旅游组团业务管理的数据库操作服务组团活动计划管理的数据库操作服务组团游客登记管理的数据库操作服务旅游情况登记统计分析管理的数据库操作服务带团人员业绩记录管理的数据库操作服务关系数据库中建立的表;使用关系数据库存储数据,为系统中的类建立相应的数据库表,实现从类图到数据库的映射。
具体数据库表设计如下: 2.1 景点信息表Attraction table 列名数据类型长度说明是否为空Attractions_ID Int 8主码F 表示层存储层旅游景点信息管理的数据库操作服带团人员业绩记录管理服务旅游路线信息管理的数据库操作服旅游景点信息管理服务旅游路线信息网页服务旅游组团业务网页服务组团活动计划网页组团游客登记网页服务旅游情况登记分析旅游组团业务管理的数据库操作服组团活动计划管理的数据库操作服组团游客登记管理的数据库操作服旅游情况登记统计分析管理的数据带团人员业绩记录管理的数据库操Attractions_NAME strig 50F Attractions_MAP strig 100F Attractions_CITY strig 50F Attractions___CTION strig 200F Attractions_TOP boolF Attractions_CAR boolF2.2 路线信息表Line table 列名数据类型长度说明是否为空Line_ID int 4 主码F Line_NAME string 50F Line_MAP string 100F Line_DAYS int 4F Line___MENT string 200F Line___RT string 100F Line_DINING __N string 50F Line_STAY PLACE string 50F Line_COSTS flaot 8F Line___T string 20F Line_NOT __ __IONS string 200F Line___N FOR __S string 100F Line___ string 50F Line_TEL string 20F Line_TOP boolF Line_CAR BoolF2.3 酒店信息表Hotel table 列名数据类型长度说明是否为空Hotel_ID int 4 主码F Hotel_NAME string 50F Hotel___ string 50F Hotel_ROOM STYE string 50F Hotel_STARS ushortF Hotel_PRICE float 8F Hotel_TIME string 50F2.4 餐馆信息表Restaurant table 列名数据类型长度说明是否为空Restaurant_ID int 4 主码 F Restaurant_NAME string 50F Restaurant_ADRESS string 100F Restaurant_PRICE string 50F Restaurant_TIME string 50F2.5 特色商店信息表Shop table 列名数据类型长度说明是否为空Shop_ID int 4 主码 F Shop_NAME string 50F Shop___ string 50F Shop_ __CTION string 200F2.6 票务查询表Ticket Inquire table 列名数据类型长度说明是否为空TicketInquire_ __RT string 50 主码F Ticket Inquire___RE string 50F Ticket Inquire___TION string 50F Ticket Inquire_TIME string 50F2.7 组团信息表Group regiment table 列名数据类型长度说明是否为空Group regiment_ID int 4 主码 F Plan_ID int 4F Businessmanagement_ID int4F Group regiment_START DATE string 50F Group regiment___E TIME string 50FGroup regiment_ACTUAL TIME string 50F Line_ID int 4F Group regiment_NUMBER int 4F Group regiment___ NUMBER int 4F ServicePeople_NUMBER Int 42.8 活动计划表Plan table 列名数据类型长度说明是否为空Plan_ID int 4 主码F Plan_STAGE ID int 4F Plan_ START DATE string 50F Plan_ __E TIME string50F Plan_ ACTUAL TIME string50F Plan_ __MENT string 50F Hotel_NAME string 50F Restaurant_NAME string50F Plan_ __ string50F Plan_TEL string 50F Plan_BUDGET flaot8F 2.9 业务管理表Businessmanagement table列名数据类型长度说明是否为空Business management_ID int 4 主码F Service people_ID int 4F Group regiment_ID int 4F Plan_ID Int 4F Service people_ROLE string50F2.10 员工信息表Service people table 列名数据类型长度说明是否为空Service people_ID int 4 主码F Service people_NAME string 50F Service people_SEX boolF Service people_AGE short 4FService people_NATION string 50F Service people_ID CARD string 50F Service people_TEL string 50F Service people___CTION string 50F Service people_ROLE string 50F2.11 游客信息表Visitor table 列名数据类型长度说明是否为空Visitor _ID int 4 主码F Visitor _NAME string 50F Visitor _SEX boolF Visitor _AGE Short 4F Visitor _NATION string 50F Visitor _ID CARD string 50F Visitor___T NUMBER string 50F Visitor _TEL String 50F Visitor _BODY __ON string 100F Visitor _DEMAND __RLY string 200F Group_ID Int 4Is_PAID bool2.12 旅游情况表Tourtable 列名数据类型长度说明是否为空Group regiment_ID int 4 主码 F Tour_TYPE string 10Tour_SIZEVisitor _ID int 4F Tour_ACCUSE __TION string 50F Tour_PRAISE __TION string 50F Tour___T __TION string 100F Tour___IVE boolF Service people_ROLE string 50F Tour_STAGE string 50F Businessmanagement_ID int 4F Tour___T NUMBER int 4F2.13 业绩记录表Achievement note table 列名数据类型长度说明是否为空Service people_ID int 4 主码F Group regiment_ID int 4F Tour___T NUMBER int 4F Achievement note_RESULT string 50F Achievement note_ADD int 4F Achievement note_CUT int 4F2.14 业绩统计表Achievement count table 列名数据类型长度说明是否为空Service people_ID int 4 主码 F Achievement count_ __N int 4F Achievement count_ START DATE string 50F Achievement count_ __E DATE string 50F Achievement count___F2.15 管理员表Administrator table 列名数据类型长度说明是否为空Administrator_ID int 4 主码 F Administrator___ string 50。
目录1问题描述 (2)2基本要求 (2)2.1问题分析及解决法案框架确定 (2)2.2程序设计 (2)2.3详细设计和编码 (2)3算法思想 (2)4模块划分 (3)4.1对各个模块进行功能的描述 (3)4.2模块之间关系及其相互调用 (3)5数据结构 (5)5.1定义栈 (5)5.2定义队列 (5)5.3栈的基本操作 (5)5.4队列的基本操作 (6)6测试数据 (6)7测试情况 (6)8总结 (9)1 问题描述试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列。
其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。
例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。
栈和队列是一种常见的数据结构,是两种非常重要的线性结构,也都是线性表,它们是操作受限的的线性表,有顺序栈、链式栈、链式队列和循环队列等形式。
它们广泛应用在各种软件系统中。
本题就是要用这些线性结构先完成基本的应用,如回文,逆置。
2 基本要求2.1问题分析及解决法案框架确定充分地分析和理解问题本身,使程序结构清晰合理简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。
2.2程序设计1、选择顺序栈和链队列,完成回文判断、字符串的逆置;2、选择链栈和循环队列,完成回文判断、字符串的逆置;3、运用掌握C语言编写程序,实现所编程序的各个模块功能。
2.3详细设计和编码给出所有源程序清单,要求程序有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。
3 算法思想运用栈和队列算法,在序列依次输入时将序列分别入栈和入队列,利用栈FILO 和队列FIFO的特点,通过出栈和出队列实现序列顺序和逆序的比较,根据题目描述的回文序列判断并输出结果。
定义顺序栈和链队列及关于它们的基本操作,如定义栈和队列、求栈和队列的长度、入栈出栈、入队列出队列等。
c语言课程设计之旅游景点信息管理系统C语言课程设计是程序设计类专业的一门重要课程,它能够帮助我们深入了解计算机语言的基础知识和程序设计的基本原理,从而培养我们解决实际问题的能力和应用技巧。
在这个过程中,我们需要通过不断的实践来掌握C语言的语法和程序设计方法,例如,设计一个旅游景点信息管理系统,以此来展示我们对C语言知识的掌握和技能应用。
下面就来详细阐述实现这个系统的步骤。
一、项目设计思路旅游景点信息管理系统主要是为了方便用户查询和浏览景点信息的一个应用程序,其中包括景点的名称、地址、开放时间、门票价格等具体内容。
设计思路为:用户通过菜单选择功能,可以实现查询、添加、修改以及删除景点信息等操作。
通过文件读写实现数据的存储和读取。
二、程序设计流程1.界面设计界面设计是程序的“外观”,直接影响用户体验。
我们可以采用基于字符界面的设计方法,将菜单项、输入提示和数据展示等功能结构化放置于固定位置,以突出人机交互的用户友好性、操作统一性和易用性。
2.数据结构设计数据结构是程序的“内部”,直接影响程序执行效率和复杂度等因素。
我们可以采用链表存储景点数据,设定数据结构体,包含景点名称、地址、开放时间、门票价格等具体信息,方便进行相关操作。
3.功能模块设计对于这个系统,主要实现的功能模块包括:菜单界面、添加信息、查询信息、修改信息、删除信息、退出。
其中,通过switch-case语句来实现功能的选择。
通过do-while语句来保证用户一直在访问系统,直到选择退出操作。
4.数据文件处理数据文件处理是一个非常关键的过程,可以通过文件读写实现数据的存储和读取。
在实践中,我们可以采用fopen、fprintf、fscanf、fclose等文件读写函数来处理景点数据文件的存储和读取过程,保证数据的正确性和完整性。
5.代码实现和调试在进行代码实现前,需要先将流程、功能、结构都设计好。
通过调式工具来检测程序执行中的错误和异常情况,从而保证程序的正确性和规范性,并对程序进行优化。
1 引言随着经济的发展和人民生活水平的提高,在工作之余以各种方式出外旅游,放松惊惶的心情,缓解不断增长的工作压力,是现代人所追求的一种时尚,也是人们享受高品位生活的一种体现。
在旅游中,不仅有吃好、住好、睡好的要求,更多的是希望享受一流的服务,由基本满足型向舒适、享受型过渡。
但目前国内多数旅行社经营规模小,管理松散,经营方式落后及科技含量低,大部分工作都是通过手工完成,服务质量低劣,服务意识不强,严峻地制约着我国旅游业的发展。
本系统以连云港旅游资源管理为例,实现了旅游景点、旅游路途等多方面的管理及各种查询。
使游客可以便利的查询旅游信息,选择自己宠爱的旅游方式和经济实惠的旅游路途。
需求分析由于如今的旅游景点繁多,旅游线路中包含的内容也许多,让人一下子很难清楚的了解到其中的所包含的信息,从而做出正确的旅游方案,让自己能够轻轻松松的享受到旅游中的乐趣。
本系统旨在便利便利那些酷爱出玩的人,让他们刚好、精确、详细的了解到一些旅游方面的相关信息,为他们指引一条适合他们的旅游线路.业务流程图就是用一些尽可能少的规定的符号及连线来表示某个详细业务处理过程。
此旅游管理系统的业务流程表示旅行社的相关工作人员对参团游客进行登记,对旅游线路修改或新增等变更登记,并结合线路和游客登记状况进行排团。
最终得出游客信息表,线路信息表和排团支配表。
接受VB开发工具;合理设定用户,限制用户运用权限。
管理人员可以随时依据实际状况修改数据库中的数据资料,使信息的更新刚好、精确;景点信息里某些新线路的开发,或旧线路的修改和删除由管理人员按实际要求处理。
2 系统设计2.1 总体设计2.1.1数据字典1)数据字典包括数据项,数据流,数据储存等。
本系统E-R原理是依据数据项和数据流,数据储存所作出的,○1数据项是数据结构中探讨的最小单位,是数据记录中最基本的、不行分的出名数据单位。
数据项可以是字母、数字或两者的组合。
通过数据类型(逻辑的、数值的、字符的等)及数据长度来描述。
信息工程学院14级计科、软件工程专业数据结构课程设计计划设计名称《数据结构》课程设计专业、班级计科1401-1403,软件1401-1402 课程性质必修设计周数1周课程学期学时数64学时学期学分4分指导教师签字系主任审核签字一.课程设计的目的通过课程设计的综合训练,旨在帮助学生进一步系统的掌握数据结构这门课的主要内容,并进一步培养学生分析问题和解决问题的能力,主要体现在能够让学生针对实际问题有效地组织数据,选择合适的数据结构,并进行正确和高效的算法设计,并用程序实现算法。
该课的课程设计是一个良好的程序设计技能训练的过程使学生能够:1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工程专业学生所应具备的科学的工作方法和作风。
二.课程设计安排三.课程设计内容1.设计题目题目1:运动会分数统计【问题描述】参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)。
【基本要求】(1) 可以输入各个项目的前三名或前五名的成绩;(2) 能统计各学校总分;(3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;(4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;(5) 学生自己根据系统功能要求自己设计存储结构,但是要求运动会的相关数据要存储在数据文件中并能随时查询;(6) 输入数据形式和范围:可以输入学校的名称,运动项目的名称;(7) 使用汉字显示。
算法与数据结构课程设计一、线性表题1、建立一个单链表,显示链表中每个节点的数据,并做删除和插入处理。
例:(掌握线性表在链式存储结构下的基本运算的实现。
)1、功能(1)建立以带头结点的单链表(2)显示链表中每个结点的数据(3)在单链表中指定位置插入指定数据并输出单链表中所有数据(4)删除单链表中指定的结点并输出单链表中所有数据2、输入要求输入单链表中所有数据,插入的数据元素的位置、值,要删除的数据元素的位置。
3、测试数据单链表中所有数据:12,23,56,21,8,10,15,67,90,32插入的数据元素的位置、值:1,28要删除的数据元素的位置:10[概要设计](1)算法思想:由于在操作过程中要进行插入、删除操作,为运算方便,选用单带头结点的单链表作数据元素的存储结构。
对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数据值,指针域指向下一个结点。
(2)数据结构单链表结点类型:typedef struct Node{ int data;struct node *next;}ListNode;带头结点的单链表类型定义:typedef ListNode *LinkList;(3)模块划分:①建立点头结点的单链表CreatLinkList;②显示链表中每个结点的数据PrintList;③在单链表中指定位置插入指定数据并输出单链表中所有数据InsertList;④删除单链表中指定的结点并输出单链表中所有数据DeleteList;⑤主函数mian(),功能是给出测试数据值,建立测试数据值的带头结点的单链表,调用PrintList函数、InsertList函数、DeleteList函数实现问题要求。
[详细设计] 见程序LinkList.c题2、约瑟夫环(Joseph)问题的一种描述是:编号1,2,┉,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),一开始,任选一个正整数作为报数上线值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
《数据结构》课程设计指导书(共13题)一、课程设计的目的课程设计的目的是培养学生综合程序设计的能力,训练学生灵活应用所学数据结构知识,独立完成问题分析、总体设计、详细设计和编程实现等软件开发全过程的综合实践能力。
巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的学习作风。
为今后学习其他计算机课程打下基础。
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将书本上的理论知识和工作、生产实际有机地结合起来,从而锻炼学生分析问题、解决实际问题的能力,提高学生的编程序能力和创新意识。
二、课程设计的要求在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过算法的设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的课程设计与程序分析报告。
前期准备工作完备与否直接影响到后序上机调试工作的效率。
三、课程设计的学生分组情况每组三至五人,共同研究、共同讨论,可以共同编写算法,但必须各自独立完成各自的程序。
四、课程设计的时间安排课程设计前两周:将各项任务及问题进行讲解、分析。
课程设计一周:星期一:学生对任务进行讨论、研究与分析,初步设计出算法。
星期二到星期四:设计出详细算法,并上机调试程序。
星期五到星期六:写出课程设计报告并考核。
五、课程设计的主要内容【课程设计题目一】一元稀疏多项式加法、乘法器【问题描述】设计一个一元稀疏多项式加法、乘法器用于计算两个多项式的加法和乘法。
例如(x2+4x5+2x9)+(x+3x4)或(7x4+4x6+2x9)*(x4+3x9)【基本要求】(1)输入并建立两个多项式f(x)和g(x);(2)输出每个多项式,要求输出时按指数从小到大输出。
(3)两个多项式完成加法、乘法运算。
(4)输出两个多项式的加法之和及乘积的结果。
(5)写出课程设计报告【实现提示】用带表头结点的单链表存储多项式。
【测试数据】分别选定三组测试数据进行测试,验证程序的正确性。
课程设计--------数据结构课程设计报告学号:姓名:张灿指导教师:曹春萍专业:计算机完成日期:目录A篇:旅游信息管理系统一、题目要求1、题目内容----------------------------------1二、程序设计目标1、题目分析----------------------------------12、功能简介----------------------------------23、数据结构----------------------------------2三、概要简述1、功能结构图---------------------------------32、模块分析-----------------------------------3四、详细设计1、结构体定义----------------------------32、程序流程图---------------------------5五、源程序代码1、源程序c++实现代码-------------------------6六、调试分析及测试结果1、运行结果截------------------------------14七、附录1、补充说明--------------------------------19八、程序小结1、报告总结———————————————19 B篇: B-树手工题一、题目要求1、题目内容-----------------------------------20二、运行过程1、从空树插入---------------------------------202、插入完成-----------------------------------253、依次删除要求点-----------------------------264、最终结果-----------------------------------28C篇:附加题一、题目1、题目内容—————————————————29二、程序设计目标1、功能简介—————————————————292、数据结构—————————————————29三、设计思路1、结构体定义————————————————292、功能结构图———————————————303、程序流程图———————————————30四、实现代码1、程序代码————————————————32五、程序调试以及运行结果1、调试结果及截图—————————————43六、报告总结1、报告总结————————————————44A篇:旅游信息管理系统一、题目要求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)、链表结点结构体 typedef struct tourist{ string name; int id; string sex;struct tourist *next; }Trist,*linklist;2)、二叉排序树结点结构体 typedef struct Tree_Place{int area_code; //旅游地区号 string area; //旅游地名称int count; //记录该旅游地报名游客人数 struct Tree_Place *lchild,*rchild;Trist *list; //指向游客所在单链表的指针 }Place,*TPlace;2、程序流程图主 菜 单(1、程序员,2、游客)1输入密码 错误正确 (12345) 2程序管理员 游 客工作去选择模块二叉树 单链表左孩子 区号 地名 游客数 右孩子 指向链表的指针左孩子 区号 地名 游客数 右孩子 指向链表的指针输入成功 退/输 Y N N Y五、源程序代码1、源程序c++实现代码#include<iostream> #include<stdlib.h> #include<string> #include<iomanip> using namespace std; #define MAX 50 #define SIZE 12typedef struct tourist{ char name[SIZE]; int id;char sex[5];struct tourist *next; }Trist,*linklist;typedef struct Tree_Place{int code; //旅游地区号char area[SIZE]; //旅游地名称 int count; //记录该旅游地报名游客人数struct Tree_Place *lchild,*rchild; Trist *list; //指向游客所在单链表的指针 }Place,*TPlace;void Search_T(TPlace &tree,int co); void Mainlist(TPlace &tree); void Tour_1(TPlace &tree); void Tour_2(TPlace &tree);输入地点查询各地游客数输入旅游地区号 退出 显示少于3人地 修改旅游地点查询可报名地 显示所有旅游地 重复 提醒 打印 退出删除 提醒可报地 打印个人信息超额 输入信息 可报退出 报名成功退出删除void Destory(TPlace &tree);void Init_L(linklist &head){head=NULL;}void Insert_L (TPlace &tree,TPlace &t,linklist &head){linklist tr;char c;int i=1,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'选择其他旅游地,其他键退出!"<<endl;cin>>c;if(c=='y'||c=='Y'){ cout<<"请重新输入区号"<<endl;cin>>co;Search_T(tree,co);}}else Tour_2(tree);}void Delet_L (linklist &head){linklist p,pro;pro=head;while(pro){p=pro ;pro=p->next ;free(p);}}void Insert_T(TPlace &tree,TPlace p){ //在二叉排序树中插入一个新结点if (tree==NULL) tree=p;else if(p->code<tree->code) Insert_T(tree->lchild,p);else if(p->code>tree->code) Insert_T(tree->rchild,p);}void Search_T(TPlace &tree,int co){char c;TPlace p;int code;p=tree;while(p&&p->code!=co ){if(p->code>co)p=p->lchild ;else p=p->rchild ;}if(!p){ cout<<"此旅游地点还未存在!"<<endl;system("pause");Tour_2(tree);} else{if(p->count>=6){cout<<"此旅游地人数已满,按'y'选择其他旅游地,其他键退出!"<<endl;cin>>c;if(c=='y'||c=='Y'){ cout<<"请重新输入区号"<<endl;cin>>code;Search_T(tree,code);}else Tour_2(tree);}else {cout<<"可以报名"<<endl;Insert_L(tree,p, p->list);Tour_2(tree);} }}TPlace Delete_T(TPlace &t,int co){TPlace p,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;elsep=p->rchild;}if(p==NULL) //不存在该树节点return t;if(p->lchild==NULL) //无左子树,右子树可有可无 {if(parent==NULL)t=p->rchild;elseif(parent->lchild==p)parent->lchild=p->rchild;elseparent->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;elseq->rchild=s->lchild;p->code=s->code; Delet_L (s->list);free(s);}return t;}void Fun1(TPlace &tree){char c;int n;TPlace p;cout<<"请输入插入地点个数:"<<endl;cin>>n;cout<<"依次输入各个旅游地点的区号和地名:"<<endl;for(int i=0;i<n;i++){p=(TPlace)malloc(sizeof(Place));cout<<"请输入第"<<i+1<<"个地点:"<<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') Fun1(tree);else {system("cls");Tour_1(tree);}}void Fun2(TPlace &tree,int x){int top=0;TPlace p,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)<<"区号:"<<p->code<<setw(10)<<"地名:"<<p->area<<setw(10)<<"人数:"<<p->count<<endl;p=p->rchild;}}if(tree==NULL)cout<<"还未录入旅游地!请稍后查询!"<<endl;cout<<"按任意键返回上一级菜单!"<<endl;system("pause");if(x==1)Tour_1(tree);if(x==2) Tour_2(tree);}void Fun3(TPlace &tree,int x){int n1=0,n2=0; char c;int top=0; int elem[MAX];TPlace p,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<<setw(8)<<"区号:"<<p->code<<setw(10)<<"地名:"<<p->area<<setw(10)<<"人数:"<<p->count<<endl;elem[n1]=p->code ;n1++; } if(p->count<6&&x==2){cout<<setw(8)<<"区号:"<<p->code<<setw(10)<<"地名:"<<p->area<<setw(10)<<"人数:"<<p->count<<endl;;n2++; }p=p->rchild;}}if(x==1){cout<<"一共有"<<n1<<"各旅游景点人数少于三个"<<endl;cout<<"删除旅游地请输入D或者d,其他键返回菜单!"<<endl;cin>>c;if(c=='d'||c=='D') {for(int i=0;i<n1;i++) Delete_T(tree,elem[i]);cout<<"删除完成!"<<endl;} system("pause");Tour_1(tree);}if(x==2){cout<<"一共有"<<n2<<"个旅游景点仍可报名"<<endl;cout<<"按任意键返回上一级菜单!"<<endl;system("pause");Tour_2(tree);}}void Fun4(TPlace &tree){int co,id;TPlace p;linklist l,pre;p=tree;cout<<"输入要退出旅游地的区号和自己的身份证号:"<<endl;cin>>co>>id;while(p&&p->code!=co ){if(p->code>co)p=p->lchild ;else p=p->rchild ;}if(!p){ cout<<"此旅游地点还未存在!"<<endl;system("pause");Tour_2(tree);}else{l=p->list;pre=l;while(l->id!=id){pre=l;l=l->next;}pre->next=l->next;free(l);p->count--;cout<<"输入要报名的地点区号:"<<endl; cin>>co;Search_T(tree,co);}}void Mainlist(TPlace &tree){system("cls");cout<<"******************************************************"<<endl<<endl;cout<<" 欢迎登陆旅游购票系统"<<endl;cout<<" 请选择登录身份:"<<endl;cout<<" 1、旅游公司管理人员"<<endl;cout<<" 2、游客"<<endl;cout<<" 3、退出程序"<<endl;cout<<"******************************************************"<<endl<<endl;int n,key,i=1;cin>>n;switch(n){case 3: Destory(tree);exit(0);case 1: do{cout<<"请输入登陆密码:";cin>>key;i++; }while(key!=12345&&i<=3); if(key==12345) Tour_1(tree);else Mainlist(tree);break;case 2: Tour_2(tree);break;default :cout<<"输入错误,请重新选择!"<<endl;system("pause"); Mainlist(tree);}}void Tour_1(TPlace &tree){system("cls");int n;cout<<"******************************************************"<<endl<<endl;cout<<" 1、输入旅游地点 "<<endl;cout<<" 2、查询各旅游地游客人数"<<endl;cout<<" 3、显示不足三人的旅游地"<<endl;cout<<" 4、退出"<<endl;cout<<"******************************************************"<<endl<<endl;cin>>n;switch(n){case 1: Fun1(tree);break;case 2: Fun2(tree,1);break;case 3: Fun3(tree,1);break;case 4: Mainlist(tree);break;default :cout<<"输入错误,请重新输入!"<<endl;system("pause");Tour_1(tree);; }}void Tour_2(TPlace &tree){int code;system("cls");int n;cout<<"******************************************************"<<endl<<endl;cout<<" 1、输入旅游地区号 "<<endl;cout<<" 2、显示所有旅游地"<<endl;cout<<" 3、查询可报名地"<<endl;cout<<" 4、修改旅游地点"<<endl;cout<<" 5、退出"<<endl;cout<<"******************************************************"<<endl<<endl;cin>>n;switch(n){case 1: cout<<"请输入区号:"<<endl;cin>>code;Search_T(tree,code);break;case 2: Fun2(tree,2);break;case 3: Fun3(tree,2);break;case 4: Fun4(tree);break;case 5:Mainlist(tree);break;default :cout<<"输入错误,请重新输入!"<<endl;system("pause");Tour_2(tree);} }//销毁二叉树void Destory(TPlace &tree){if(!tree) {cout<<"此树已空!"<<endl;system("pause"); exit(0);}if(tree&&tree->lchild)Destory(tree->lchild);if(tree&&tree->rchild)Destory(tree->rchild);cout<<setw(5)<<tree->code<<setw(5)<<tree->area<<endl;Delet_L (tree->list);free(tree);}void main(){TPlace T=NULL;Mainlist(T);}六、调试分析及测试结果1、运行结果截图七、附录1、补充说明#include<stdlib.h> :包含分配空间的头文件#include<string> :包含对字符串进行操作的头文件#include<iomanip> :包含控制输出格式的头文件Destory 函数为释放内存,删除所建树的所有节点。