1.1问题定义
本次课程的设计题目是设计一个大型景区的管理系统,此系统是为了便于景区的管理以及提升游客的旅游体验,更好的适应现如今日益发展的旅游业。
1.2问题分析
现有某景区需要开发一个景区信息管理系统,具体需求有:建立一个主程序应用菜单选项,方便用户操作和选择需要使用的功能。为了能够适应不同景区的需求,系统需要能够创建景点分布图和输出景点分布图,对于创建,可以逐条添加景点信息和路径信息;对于输出,需要输出景点分布图的邻接矩阵。而且,系统需要能够制订旅游景点导游线路策略,以便于游客游览所有景点,即给出一个入口景点,生成一个导游线路图;但是导游路线图中可能含有回路,所以为了使导游线路图能够优化,需要判断图中有无回路,若有回路,则打印输出回路中的景点。同时,在导游线路图中,还需要为一些不愿按线路走的游客提供信息服务,比如从一个景点到另一个特定的景点。所以两个景点之间的最短路径和最短距离就变得很重要了,系统需要提供输出两个景点间的最短路径和最短距离的功能。此外,在景区建设中,道路建设是其中一个重要内容,道路建设首先要保证能连通所有景点,但又要花最小的代价,修建道路的代价与它的里程相关。系统同样需要提供景点搜索和景点排序的功能,游客通过输入关键字来了解相关景点以便计划好游览地点和顺序;而景点排序可以通过景点的欢迎度或景点的人流量来排序,让游客对各个景点有个直观的感受。最后,景区中还有固定容量的停车场,系统需要对到达车辆和离开车辆进行管理;当车辆到达时,如果停车场中还有剩余位置,则直接进入并开始计时,否则在候车道等待;当车辆离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。本系统面向管理员和游客,所以可以分为管理员功能和游客功能。
1.3研究意义
随着科学技术的发展,人民生活水平的提高以及我国休假制度的完善,外出旅游成为了越来越多的人民度假的选择。在这般背景前提下,造成了旅游景区在高峰期部分景点人流过大导致拥堵,从而影响景区形象和游客旅游体验。从根本上说,这往往是因为景区服务不够细致,管理不够科学,效率不高所造成的。另一方面,游客人数的急剧增长所带来的安全问题也日益凸显起来。系统化、电子化、网络化、智能化的景区管理系统也成为了日益迫切的需求,本项目就是在这样的背景下提出的。针对此问题,所以研究和开发高质量、高性能的景区信息管理系统变得尤为重要,可以提高景区的管理水平,解放了繁重的体力劳动和脑力劳动,极大的改善了用户服务的质量,提高了景区的信誉。
第二章 系统设计
2.1总体设计
2.1.1设计思想
系统采用前后端结合的方式,后端采用servlet运行核心算法,前端使用网页进行结果动态展示,通信格式为JSON。整个系统的架构图如下图所示:
<1> 管理员功能:
(1)登录:管理员使用账户密码登录。
(2)公告发布:设计发布公告时将内容写入一个文本文件,在游客登录或管理员登录时读取这个文本文件并显示在界面上。
(3)管理景点:景点信息的增加,删除和修改的功能。
(4)管理道路:实现道路的插入和删除的功能。
(5)输出停车场信息:显示停车场信息,包括等待车辆,停车场空位。
<2> 游客功能:
(1)景点查询和排序:可以根据自己的需求对景区进行各种信息查询并对景点进行一定顺序上的排序。
(2)景点最短路径:系统还应能够根据游客输入的两个景点的名称来输出两地之间的最短路径和最短距离。
(3)输出导游路线图:系统还能为游客输出导游路线图。
2.1.2数据结构
- 图的存储结构
public class ALGraph {
private int arcNum; //景点数量
private int vetNum; //路的数量
private List<ArcNode> nodes; //存储景点的list
···
}
- 景点结点
public class ArcNode {
private String name; //景点名称
private String des; //景点描述
private int pop; //景点欢迎度
private boolean hasRest; //有无休息区
private boolean hasToilet; //有无公厕
private VNode first; //景点的第一条边
···
}
- 边结点
public class VNode {
private int index; //另一个景点在景点数组中的位置
private int dist; //两个景点的距离
private int time; //所需时间
private VNode next; //与头结点相连的下一条边
···
}
- 汽车
public class Car {
private String number; //汽车车号
private Date ar_time; //汽车到达时间
···
}
- 栈
public class Stack<T> {
private T[] mArray;
private int size;
public void push(T val){
···
}
public void pop(){
···
}
public T peek(){
···
}
}
- 队列
public class Queue {
private CarNode phead; //汽车结点的链表头
private int size; //队列的元素个数
public void add(Car car){
···
}
public void pop(){
···
}
public CarNode front(){
···
}
}
2.1.3用户界面