博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌
温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :)
前言
结合线上网站的宣传加深人们对旅游景点的了解,提高人们对江西红色旅游的喜爱程度。因此网站设计的旅游系统具有评论交流的功能,用户可以在旅游前通过对这个系统的景点信息、评论信息、美食信息进行浏览,确定自己的目的地是否是自己心仪的旅游场所。
旅游系统的整个设计过程(包含需求分析、页面设计、后台设计等)来进行详细的论述。旅游系统主要是帮助旅游宣传,更好的发展旅游产业,可以促进游客之间的交流,促进旅游地的竞争力。使用B / S结构设计、使用JSP和Mysql数据库,完成各种业务逻辑和数据景观信息点,实现基于SSM框架的江西红色旅游网站管理,景点的各种各样的信息和信息有效管理。完成了信息快速发布和浏览旅游信息。
演示视频
基于SSM的江西红色旅游网站的设计与实现_哔哩哔哩_bilibili
系统功能
经深入分析,最终在本系统中识别出三种主要的角色,分别为游客、用户以及超级管理员。而各种角色及其职责如表3-1所示。
表3-1 角色表
角色名称 | 职责描述 |
管理员 | 超级管理员可以对系统的所有数据进行综合管理,包括了四大类: 1.系统设置:菜单管理、角色管理、修改密码、系统登录。 2.用户管理:用户列表。 3.系统日志:日志列表。 4.业务管理:景点管理、美食管理、通知管理、照片库管理、酒店管理。 |
游客 | 游客是用户还没有登录时候的状态,可以对景点风光、美食列表、酒店列表、通知列表、视频列表、照片库进行浏览。 |
用户 | 普通用户主要是在系统前台对系统进行使用主要功能包括了景点风光、美食列表、酒店列表、通知列表、视频列表、照片库、个人信息、我的评论列表、我的视频列表、登录、注册、修改密码。 |
(1)超级管理员
超级管理员可以对系统的所有数据进行综合管理,包括了几大类:
- 菜单管理:此模块允许动态配置系统后台的一级和二级菜单,为增加、编辑、删除以及修改等功能键提供设置。
- 角色管理:此功能为系统后台角色提供自由动态配置,并允许针对不同角色进行菜单授权。
- 用户管理:此模块让管理员能对前台注册用户进行增删改查操作,并能通过用户名、角色、性别等条件进行搜索。
- 系统日志:此功能允许管理员查看系统后台登录的日志信息,包括日志内容和时间信息,便于找到对应的操作人,有利于问题回溯。
- 景点管理:此模块可以对前台显示的景点信息进行增删改查,并允许对景点提供不同的攻略和图片管理。
- 美食管理:管理员可在此模块中对系统中的美食进行增删改查,并对美食的图片进行综合管理。
- 通知管理:此模块是管理员在后台发布网站通知新闻的地方。
- 图片库管理:此模块用于系统图片信息的综合管理。
- 酒店管理:管理员可以在此模块中对系统的酒店进行增删改查管理。
系统的管理员用例图如图3-1所示:
图3-1 管理员用例图
(2)普通用户
1.首页:查看系统轮播图、搜索江西红色旅游的风景和美食信息、展示最新通知信息以及美景信息。
2.景点风光:列表展示江西的美景信息,并且可以进行价格、关键字、天数等信息的搜索功能。
3.美食列表:分页展示江西的美食信息包括了价格、图片、名称、评分等信息,登录的用户可以对其进行评论。
4.酒店管理:查看各类酒店信息包括基础信息、评论、图片展示等信息。
5.通知列表:展示了系统的新闻通知信息,以文章的形式进行展示。
6.视频、图片库:展示了系统中上传的视频信息以及图片信息。
7.个人信息:该功能涵盖了一系列功能,旨在对已注册用户的个人信息、评论历史、视频清单、登录状态、注册细节及密码更改等进行全面的管理与控制。。
用户用例图如图3-2所示:
图3-2 用户用例图
(3)游客
1.首页:查看系统轮播图、搜索江西红色旅游的风景和美食信息、展示最新通知信息以及美景信息。
2.景点风光:列表展示江西的美景信息,并且可以进行价格、关键字、天数等信息的搜索功能。
3.美食列表:分页展示江西的美食信息包括了价格、图片、名称、评分等信息,登录的用户可以对其进行评论。
4.酒店管理:查看各类酒店信息包括基础信息、评论、图片展示等信息。
5.通知列表:展示了系统的新闻通知信息,以文章的形式进行展示。
6.视频、图片库:展示系统视频信息以及图片信息。
系统的游客用例图如图3-3所示:
图3-3 游客用例图
系统截图
背景与意义
随着人民的消费水平越来越高,人们更愿意花钱去旅游享受生活。过去,人们旅游往往都是上网查找资料来选择去哪里更好,但是,这样的做法不能进行更好的对比,而且也不能从网络上看到其他游客的旅游体验。实现旅游的大范围宣传和提高旅游地区自身竞争能力,高效吸引游客,达到游客与旅游地的产业双赢,成为旅游行业面临的问题。如今,部分旅游产业需要处理和解决的问题越来越多,为改善资源配置,提高旅游地区的曝光与宣传,进而增强旅游产业综合实力,旅游系统的出现将促进旅游产业的宣传与吸引力。
随着时间的推移,计算机科技的飞速进步和互联网技术的广泛应用,已经深深地渗透到我们的日常生活中。无论是在生活的每个细节,还是在各种行业中,互联网的影响力都越来越大。近年来,公众的学习环境和经济状况得到了显著提升,这是一个显示出中国正日益强大的有力标志。同时,社会消费水平也在逐步提升,人们对娱乐休闲方式的需求也越来越多样化。
在这个大背景下,一个在线旅游信息查询平台的需求正在日渐增长。这个平台可以提供方便快捷的在线旅游信息查询服务,用户可以在线查看各个旅游目的地的最新资讯、特色风景和当地活动,从而深入了解当地的旅游文化,并提前规划旅行计划,使旅程更加轻松愉快。此外,平台还提供在线查看酒店的功能,大大减少了旅客寻找住宿的困扰。
例如,一个关于江西红色旅游的网站可以通过互联网来解决传统旅游业无法满足的需求。它能通过在线网站的推广,让人们更深入地了解旅游景点,从而提高人们对旅游的热情。此外,旅游系统内设有评论和用户交流的功能,游客可以在旅行前浏览系统的评论,以确定是否选择该旅游地点。江西的旅游资源在全国有着显著的优势,因此,将旅游业作为支柱产业,无疑是符合市场条件的最佳选择。针对这一需求,利用Java技术建立了一个动态网站,实现了旅游信息的快速发布和在线交流的功能。
功能截图
文档截图
功能代码
package com.sxl.controller;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;
public class BaseController {
public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1天
@Autowired
private SystemProperties systemProperties;
/**
* 获得配置文件内容
*/
public String getConfig(String key) {
return systemProperties.getProperties(key);
}
/**
* 返回服务器地址 like http://192.168.1.1:8441/UUBean/
*/
public String getHostUrl(HttpServletRequest request) {
String hostName = request.getServerName();
Integer hostPort = request.getServerPort();
String path = request.getContextPath();
if (hostPort == 80) {
return "http://" + hostName + path + "/";
} else {
return "http://" + hostName + ":" + hostPort + path + "/";
}
}
/***
* 获取当前的website路径 String
*/
public static String getWebSite(HttpServletRequest request) {
String returnUrl = request.getScheme() + "://"
+ request.getServerName();
if (request.getServerPort() != 80) {
returnUrl += ":" + request.getServerPort();
}
returnUrl += request.getContextPath();
return returnUrl;
}
/**
* 初始化HTTP头.
*
* @return HttpHeaders
*/
public HttpHeaders initHttpHeaders() {
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("text", "html",
Charset.forName("utf-8"));
headers.setContentType(mediaType);
return headers;
}
/**
* 返回 信息数据
*
* @param status
* @param msg
* @return
*/
public ResponseEntity<String> renderMsg(Boolean status, String msg) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}";
ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/**
* 返回obj数据
*
* @param status
* @param msg
* @param obj
* @return
*/
public ResponseEntity<String> renderData(Boolean status, String msg,
Object obj) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\",");
sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
sb.append("}");
ResponseEntity<String> responseEntity = new ResponseEntity<String>(
sb.toString(), initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/***
* 获取IP(如果是多级代理,则得到的是一串IP值)
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if (ip != null && ip.length() > 0) {
String[] ips = ip.split(",");
for (int i = 0; i < ips.length; i++) {
if (!"unknown".equalsIgnoreCase(ips[i])) {
ip = ips[i];
break;
}
}
}
return ip;
}
/**
* 国际化获得语言内容
*
* @param key
* 语言key
* @param args
* @param argsSplit
* @param defaultMessage
* @param locale
* @return
*/
public static String getLanguage(String key, String args, String argsSplit,
String defaultMessage, String locale) {
String language = "zh";
String contry = "cn";
String returnValue = defaultMessage;
if (!StringUtil.isEmpty(locale)) {
try {
String[] localeArray = locale.split("_");
language = localeArray[0];
contry = localeArray[1];
} catch (Exception e) {
}
}
try {
ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
new Locale(language, contry));
returnValue = resource.getString(key);
if (!StringUtil.isEmpty(args)) {
String[] argsArray = args.split(argsSplit);
for (int i = 0; i < argsArray.length; i++) {
returnValue = returnValue.replace("{" + i + "}",
argsArray[i]);
}
}
} catch (Exception e) {
}
return returnValue;
}
}