基於java的旅游信息系統,景點信息管理,旅游路線管理,訂單信息管理,新聞信息管理,地方美食等。springboot的旅游管理系統,旅游系統. ...
本章節來給大家介紹一個基於java的旅游信息系統設計與實現
系統概要
旅游產業的日新月異影響著城市,村鎮旅游產業的發展變化。網路、電子科技的迅猛前進同樣牽動著旅游產業的快速成長。隨著人們消費理念的不斷發展變化,越來越多的人開始註意精神文明的追求,而不僅僅只是在意物質消費的提高。旅游信息推薦信息系統設計與實現的設計就是幫助村鎮,城市發展旅游產業,達到宣傳效果,帶動一方經濟發展。而線上消費與查詢正在以高效,方便,時尚等的特點成為廣大互聯網用戶的首選。旅游信息推薦信息系統設計與實現設計與開發以方便、快捷、費用低的優點正慢慢地進入人們的生活。人們從傳統的旅游方式轉變為線上預覽,減輕了勞動者的工作量。使得旅游從業人員有更多時間來獲取、瞭解、掌握信息。
旅游信息推薦信息系統設計與實現根據當地旅游風景和特色的實際情況,設計出一套適合當地旅游信息網站,通過網路,實現該網站的推廣從而達到宣傳的效果。
系統主要分為前臺後後臺,普通用戶在未登錄情況下前臺可以展示人氣景點,地方美食,旅游新聞,景區信息,旅游路線,用戶可自己註冊,然後登錄,登錄後可以添加收藏,預訂,和線上留言等功能;
後臺管理員可以在後臺頁面進行:賬號管理,地區管理,景點信息管理,地方美食管理,旅游路線管理,訂單信息管理,新聞信息管理,系統管理等等;
具體功能可以查看以下詳細介紹。
系統使用的架構和內容獲取
採用B/S的架構實現,整體遵循MVC的設計思想。
> 開發系統:Windows
> 架構模式:MVC/前後端分離
> JDK版本:Java JDK1.8
> 開發工具:idea或者eclipse
> 資料庫版本: mysql
> 資料庫可視化工具: navicat
> 後端:java,spring,springmvc,mybatis,tomcat等
> 前端:html,css,javascript,jquery,vue等
> 更多內容可查看:http://projecthelp.top
項目實現
所有的代碼文件都有詳細的註釋,不用擔心看不懂代碼的。
AdminsController
/**
* 管理員 */
@Controller
public class AdminsController extends BaseController {
@Autowired
private AdminsMapper dao;
@Autowired
private AdminsService service;
/**
* 後臺列表頁
*/
@RequestMapping("/admins_list")
public String list() {
// 檢測是否有登錄,沒登錄則跳轉到登錄頁面
if (!checkLogin()) {
return showError("尚未登錄", "./login.do");
}
String order = Request.get("order", "id"); // 獲取前臺提交的URL參數 order 如果沒有則設置為id
String sort = Request.get("sort", "desc"); // 獲取前臺提交的URL參數 sort 如果沒有則設置為desc
int pagesize = Request.getInt("pagesize", 12); // 獲取前臺一頁多少行數據
Example example = new Example(Admins.class); // 創建一個擴展搜索類
Example.Criteria criteria = example.createCriteria(); // 創建一個擴展搜索條件類
String where = " 1=1 "; // 創建初始條件為:1=1
where += getWhere(); // 從方法中獲取url 上的參數,並寫成 sql條件語句
criteria.andCondition(where); // 將條件寫進上面的擴展條件類中
if (sort.equals("desc")) { // 判斷前臺提交的sort 參數是否等於 desc倒序 是則使用倒序,否則使用正序
example.orderBy(order).desc(); // 把sql 語句設置成倒序
} else {
example.orderBy(order).asc(); // 把 sql 設置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 獲取前臺提交的URL參數 page 如果沒有則設置為1
page = Math.max(1, page); // 取兩個數的最大值,防止page 小於1
List<Admins> list = service.selectPageExample(example, page, pagesize); // 獲取當前頁的行數
// 將列表寫給界面使用
assign("totalCount", request.getAttribute("totalCount"));
assign("list", list);
assign("orderby", order); // 把當前排序結果寫進前臺
assign("sort", sort); // 把當前排序結果寫進前臺
return json(); // 將數據寫給前端
}
public String getWhere() {
_var = new LinkedHashMap(); // 重置數據
String where = " ";
// 以下也是一樣的操作,判斷是否符合條件,符合則寫入sql 語句
if (!Request.get("username").equals("")) {
where += " AND username LIKE '%" + Request.get("username") + "%' ";
}
return where;
}
@RequestMapping("/admins_add")
public String add() {
_var = new LinkedHashMap(); // 重置數據
return json(); // 將數據寫給前端
}
@RequestMapping("/admins_updt")
public String updt() {
_var = new LinkedHashMap(); // 重置數據
int id = Request.getInt("id");
// 獲取行數據,並賦值給前臺jsp頁面
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 0);
return json(); // 將數據寫給前端
}
@RequestMapping("/admins_updtself")
public String updtself() {
_var = new LinkedHashMap(); // 重置數據
// 更新個人資料
int id = (int) request.getSession().getAttribute("id");
Admins mmm = service.find(id);
assign("mmm", mmm);
assign("updtself", 1);
return json(); // 將數據寫給前端
}
/**
* 添加內容
*
* @return
*/
@RequestMapping("/adminsinsert")
public String insert() {
_var = new LinkedHashMap(); // 重置數據
String tmp = "";
Admins post = new Admins(); // 創建實體類
// 設置前臺提交上來的數據到實體類中
post.setUsername(Request.get("username"));
post.setPwd(Request.get("pwd"));
post.setAddtime(Info.getDateStr());
service.insert(post); // 插入數據
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新內容
*
* @return
*/
@RequestMapping("/adminsupdate")
public String update() {
_var = new LinkedHashMap(); // 重置數據
// 創建實體類
Admins post = new Admins();
// 將前臺表單數據填充到實體類
if (!Request.get("username").equals(""))
post.setUsername(Request.get("username"));
if (!Request.get("pwd").equals(""))
post.setPwd(Request.get("pwd"));
if (!Request.get("addtime").equals(""))
post.setAddtime(Request.get("addtime"));
post.setId(Request.getInt("id"));
service.update(post); // 更新數據
int charuid = post.getId().intValue();
if (isAjax()) {
return jsonResult(post);
}
if (Request.getInt("updtself") == 1) {
return showSuccess("保存成功", "admins_updtself.do");
}
return showSuccess("保存成功", Request.get("referer")); // 彈出保存成功,並跳轉到前臺提交的 referer 頁面
}
/**
* 刪除
*/
@RequestMapping("/admins_delete")
public String delete() {
_var = new LinkedHashMap(); // 重置數據
if (!checkLogin()) {
return showError("尚未登錄");
}
int id = Request.getInt("id"); // 根據id 刪除某行數據
HashMap map = Query.make("admins").find(id);
service.delete(id);// 根據id 刪除某行數據
return showSuccess("刪除成功", request.getHeader("referer"));//彈出刪除成功,並跳回上一頁
}
}
UploadController
文件上傳的控制器實現
/**
* 上傳控制器
*/
@Controller
public class UploadController extends BaseController {
/**
* 上傳文件
*
* @param fujian
* @return
* @throws Exception
*/
@RequestMapping(value = "/upload_re")
public String Upload(MultipartFile fujian) throws Exception {
String fileName = fujian.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
fileName = UUID.randomUUID() + suffixName;
String filePath = getFolder("upload");
try {
File file = new File(getPhysicalPath(filePath) + "/" + fileName);
fujian.transferTo(file);
request.setAttribute("url", filePath + "/" + fileName);
if (isAjax()) {
return jsonResult(request.getAttribute("url"));
}
return "upload";
} catch (Exception e) {
return showError(e.getMessage());
}
}
private String getFolder(String path) {
SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");
path += "/" + formater.format(new Date());
File dir = new File(this.getPhysicalPath(path));
if (!dir.exists()) {
try {
dir.mkdirs();
} catch (Exception e) {
return "";
}
}
return path;
}
/**
* 根據傳入的虛擬路徑獲取物理路徑
*
* @param path
* @return
*/
private String getPhysicalPath(String path) {
String servletPath = this.request.getServletPath();
String realPath = this.request.getSession().getServletContext()
.getRealPath(servletPath);
return new File(realPath).getParent() + "/" + path;
}
}
UserController
用戶登錄更新密碼控制器
/**
* 用戶登錄更新密碼控制器
*/
@Controller
public class UserController extends BaseController {
@Resource
private AdminsService adminsService;
@Resource
private YonghuService yonghuService;
/**
* 登錄頁面
*
* @return
*/
@RequestMapping("/login")
public String Index() {
return "login";
}
/**
* 退出
*
* @return
*/
@RequestMapping("/logout")
public String Logout() {
request.getSession().invalidate();
return showSuccess("退出成功", "./");
}
/**
* 驗證登錄用戶
*
* @param isAdmin
* @param username
* @param pwd
* @param cx
* @return
*/
protected String authLoginUser(boolean isAdmin, String username, String pwd, String cx) {
if (username == null || "".equals(username)) {
return showError("賬號不允許為空");
}
if (pwd == null || "".equals(pwd)) {
return showError("密碼不允許為空");
}
if (cx == null) {
return showError("請選中登錄類型");
}
String random;
// 獲取 token方式的驗證碼值
if (isAjax() && request.getParameter("captchToken") != null) {
random = DESUtil.decrypt("CaptchControllerPassword", request.getParameter("captchToken"));
} else {
random = (String) request.getSession().getAttribute("random");
}
String pagerandom = request.getParameter("pagerandom") == null ? "" : request.getParameter("pagerandom");
if (request.getParameter("a") != null && !pagerandom.equals(random)) {
return showError("驗證碼不正確", 20);
}
if (cx.equals("管理員")) {
Admins user = adminsService.login(username, pwd);
if (user == null) {
return showError("用戶名或密碼錯誤");
}
session.setAttribute("id", user.getId());
session.setAttribute("username", user.getUsername());
session.setAttribute("cx", cx);
session.setAttribute("login", cx);
session.setAttribute("username", user.getUsername());
session.setAttribute("pwd", user.getPwd());
session.setAttribute("addtime", user.getAddtime());
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user));
jsonObject.put("cx", session.getAttribute("cx"));
jsonObject.put("username", session.getAttribute("username"));
jsonObject.put("login", session.getAttribute("login"));
assign("session", jsonObject);
}
if (cx.equals("用戶")) {
Yonghu user = yonghuService.login(username, pwd);
if (user == null) {
return showError("用戶名或密碼錯誤");
}
session.setAttribute("id", user.getId());
session.setAttribute("username", user.getYonghuming());
session.setAttribute("cx", cx);
session.setAttribute("login", cx);
session.setAttribute("yonghuming", user.getYonghuming());
session.setAttribute("mima", user.getMima());
session.setAttribute("xingming", user.getXingming());
session.setAttribute("xingbie", user.getXingbie());
session.setAttribute("shouji", user.getShouji());
session.setAttribute("youxiang", user.getYouxiang());
session.setAttribute("shenfenzheng", user.getShenfenzheng());
session.setAttribute("touxiang", user.getTouxiang());
session.setAttribute("addtime", user.getAddtime());
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user));
jsonObject.put("cx", session.getAttribute("cx"));
jsonObject.put("username", session.getAttribute("username"));
jsonObject.put("login", session.getAttribute("login"));
assign("session", jsonObject);
}
if (session.getAttribute("username") == null) {
return showError("賬號或密碼錯誤");
}
String referer = request.getParameter("referer");
if (referer == null) {
if (isAdmin) {
referer = "./main.do";
} else {
referer = "./";
}
}
assign("token", createToken(
session.getAttribute("cx"),
session.getAttribute("login"),
session.getAttribute("username"),
_var.get("session")
)
);
if (this.isAjax()) {
return json();
} else {
return showSuccess("登錄成功", referer);
}
}
public String createToken(Object cx, Object login, Object username, Object session) {
String SOURCE_STRING = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
String token = createRandomString(SOURCE_STRING, 32);
// 刪除過期token
new CommDAO().commOper("DELETE FROM token WHERE token_time<'" + Info.getDateStr() + "'");
HashMap tokenMap = new HashMap();
tokenMap.put("token", token);
tokenMap.put("cx", cx);
tokenMap.put("login", login);
tokenMap.put("username", username);
tokenMap.put("valueid", this.session.getAttribute("id"));
// 10天的有效期
tokenMap.put("token_time", Info.date("yyyy-MM-dd HH:mm:ss", Info.time() + 86400 * 10));
tokenMap.put("session", JSON.toJSONString(session));
Query.make("token").add(tokenMap);
return token;
}
/**
* 使用已有token 登錄
*
* @return
*/
@RequestMapping("/tokenLogin")
public String tokenLogin() {
String token = request.getParameter("token");
HashMap<String, String> tokenInfo = Query.make("token").where("token", token).where("token_time", ">", Info.getDateStr()).find();
if (tokenInfo.isEmpty()) {
return jsonError("token已失效");
}
String cx = tokenInfo.get("login");
Object user = null;
if (cx.equals("管理員")) {
user = adminsService.find(tokenInfo.get("valueid"));
}
if (cx.equals("用戶")) {
user = yonghuService.find(tokenInfo.get("valueid"));
}
if (user == null) {
return jsonError("沒找到token中用戶");
}
tokenInfo.put("session", JSON.toJSONString(user));
session.setAttribute("cx", tokenInfo.get("cx"));
session.setAttribute("login", tokenInfo.get("login"));
session.setAttribute("username", tokenInfo.get("username"));
session.setAttribute("id", tokenInfo.get("valueid"));
JSONObject session1 = JSON.parseObject(tokenInfo.get("session"));
for (Map.Entry<String, Object> entry : session1.entrySet()) {
session.setAttribute(entry.getKey(), entry.getValue());
}
session1.put("cx", tokenInfo.get("cx"));
session1.put("login", tokenInfo.get("login"));
session1.put("username", tokenInfo.get("username"));
assign("token", token);
assign("session", session1);
// 刷新token有效期
tokenInfo.put("token_time", Info.date("yyyy-MM-dd HH:mm:ss", Info.time() + 86400 * 10));
Query.make("token").where("token", token).update(tokenInfo);
return json();
}
/**
* 獲取隨機串
*
* @param source 源字元串
* @param length 隨機串的長度
* @return 隨機串
*/
private String createRandomString(String source, int length) {
if (this.isNullOrEmpty(source)) {
return "";
}
StringBuffer result = new StringBuffer();
Random random = new Random();
for (int index = 0; index < length; index++) {
result.append(source.charAt(random.nextInt(source.length())));
}
System.out.println(result.toString());
return result.toString();
}
/**
* 判斷字元串是否為空
*
* @param target
* @return true:空,false:非空
*/
private boolean isNullOrEmpty(String target) {
if (null == target || "".equals(target) || target.isEmpty()) {
return true;
}
return false;
}
/**
* 後臺主頁面
*
* @return
*/
@RequestMapping("/main")
public String main() {
return "main";
}
/**
* 後臺初始頁面
*
* @return
*/
@RequestMapping("/sy")
public String sy() {
return "sy";
}
/**
* 不一定有
*
* @return
*/
@RequestMapping("/mygo")
public String mygo() {
return "mygo";
}
/**
* 頭部頁面
*
* @return
*/
@RequestMapping("/top")
public String top() {
return "top";
}
/**
* 驗證登錄頁面
*
* @return
*/
@RequestMapping("/authLogin")
public String authLogin() {
String username = Request.get("username");
String pwd = Request.get("pwd");
String cx = Request.get("cx");
return authLoginUser(false, username, pwd, cx);
}
/**
* 驗證後臺登錄
*
* @return
*/
@RequestMapping("/authAdminLogin")
public String authAdminLogin() {
String username = Request.get("username");
String pwd = Request.get("pwd");
String cx = Request.get("cx");
return authLoginUser(true, username, pwd, cx);
}
/**
* 修改登錄密碼頁面
*
* @return
*/
@RequestMapping("/mod")
public String mod() {
return "mod";
}
/**
* 保存修改密碼
*
* @return
*/
@RequestMapping("/editPassword")
public String editPassword() {
String username = request.getSession().getAttribute("username").toString();
String cx = request.getSession().getAttribute("login").toString();
String oldPassword = Request.get("oldPassword");
String newPwd = Request.get("newPwd");
String newPwd2 = Request.get("newPwd2");
if (!newPwd.equals(newPwd2)) {
return showError("兩次密碼不一致");
}
if (cx.equals("管理員")) {
Admins user = adminsService.login(username, oldPassword);
if (user == null) {
return showError("原密碼不正確");
}
adminsService.updatePassword(user.getId(), newPwd);
}
if (cx.equals("用戶")) {
Yonghu user = yonghuService.login(username, oldPassword);
if (user == null) {
return showError("原密碼不正確");
}
yonghuService.updatePassword(user.getId(), newPwd);
}
return showSuccess("修改密碼成功", "./mod.do");
}
}
部分功能展示
系統前臺功能
- 系統首頁
系統首頁上面有一個輪播圖的效果,輪播圖可以管理員自己在管理端頁面自己增加或修改,不需要改代碼即可實現,同時還有人氣景點,地方美食等首頁信息展示,這些內容都是可以管理員在後端自定義的:
對於未登錄用戶是可以點擊進去查看的:
【重點】這些查看的圖片和信息都是管理員可以在後臺進行自定義修改的,絲毫不用擔心自己看不懂代碼不會改怎麼辦。
- 新聞信息查看
用戶可以點擊進去查看新聞信息,預設系統有站內新聞,和行業資訊倆個分類,這裡的分類展示的只是預設的倆個,管理員可以在後臺自己添加修改的,用戶還可以進行搜索內容。新聞信息是管理員在後臺進行動態的修改管理的。
- 景區信息查看
系統預設包含本地,境內和境外三的大分類,同理這裡的分類,管理員可以在後臺進行增加修改或刪除的,同時裡面的景點信息都是由管理員在後臺進行動態錄入的,用戶可以點擊查看景點信息內容。
對於未登錄用戶,如果點擊收藏,會提示用戶請先登錄:
- 美食信息查看
用戶可以查看美食信息,同理,這裡的分類都是可以管理員在後臺進行修改的。
-
旅游線路查看
-
線上留言
對於未登錄用戶,如果點擊的話會提示用戶進行登錄,對於已經登錄用戶,就直接回跳轉到留言的頁面進行線上留言:
-
用戶註冊
-
用戶登錄
用戶可以通過賬號和密碼登錄系統中,用戶可以選擇對應的角色進行登錄,不同的角色登錄到系統看到的不同頁面管理;
普通用戶角色
對於普通用戶角色,可以在系統上面查看到上面的功能外,還可以對查看的信息進行收藏或者預訂,同時還可以查看到個人中心:
-
個人中心首頁
-
查看我的預訂列表
-
修改個人資料,修改密碼
-
我的收藏
對於用戶收藏的東西會存放到個人中心頁面,進行統一管理。 -
我的留言管理
管理員角色用戶
對於系統管理員,除了以上的功能外,還可以動態編輯修改增加所有頁面上你可以看到的信息。
-
管理員登錄:管理員登錄和普通用戶登錄是同一個頁面,但登錄的時候需要選擇管理員角色哦
-
管理員首頁
-
賬號管理
管理員可以對管理員信息賬號進行管理,同時還可以增加管理員,同時還對普通用戶的信息進行統一管理,管理員還可以自己手動添加用戶信息:
-
管理員也可以對賬號密碼進行修改
-
地區管理
-
景點信息管理
前臺用戶看到的所有的景點信息,都是可以管理員在這裡進行修改的,可以根據自己的需求編輯信息,然後用戶看到的就會不同了。 -
地方美食管理:美食分類管理:管理員可以查看美食分類列表或增加修改美食類型
-
美食信息管理:對於美食信息,用戶可以動態的修改對應的分類下的美食信息
-
旅游路線管理
-
用戶訂單信息管理
-
新聞分類管理
-
新聞信息管理:管理員可以增加修改每個分類下的新聞信息
-
系統管理
-
前臺輪播圖管理
對於前臺的輪播圖,管理員可以在後臺進行動態修改,或者添加的哦 -
留言管理