IT评测·应用市场-qidao123.com

标题: 31基于java的旅游信息系统设计与实现 [打印本页]

作者: 罪恶克星    时间: 2023-5-8 14:34
标题: 31基于java的旅游信息系统设计与实现
本章节来给大家介绍一个基于java的旅游信息系统设计与实现
系统概要

旅游产业的日新月异影响着城市,村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消费的提高。旅游信息推荐信息系统设计与实现的设计就是帮助村镇,城市发展旅游产业,达到宣传效果,带动一方经济发展。而在线消费与查询正在以高效,方便,时尚等的特点成为广大互联网用户的首选。旅游信息推荐信息系统设计与实现设计与开发以方便、快捷、费用低的优点正慢慢地进入人们的生活。人们从传统的旅游方式转变为在线预览,减轻了劳动者的工作量。使得旅游从业人员有更多时间来获取、了解、掌握信息。
旅游信息推荐信息系统设计与实现根据当地旅游风景和特色的实际情况,设计出一套适合当地旅游信息网站,通过网络,实现该网站的推广从而达到宣传的效果。
系统主要分为前台后后台,普通用户在未登录情况下前台可以展示人气景点,地方美食,旅游新闻,景区信息,旅游路线,用户可自己注册,然后登录,登录后可以添加收藏,预订,和在线留言等功能;
后台管理员可以在后台页面进行:账号管理,地区管理,景点信息管理,地方美食管理,旅游路线管理,订单信息管理,新闻信息管理,系统管理等等;
具体功能可以查看以下详细介绍。
系统使用的架构和内容获取

采用B/S的架构实现,整体遵循MVC的设计思想。
  1. > 开发系统:Windows
  2. > 架构模式:MVC/前后端分离
  3. > JDK版本:Java JDK1.8
  4. > 开发工具:idea或者eclipse
  5. > 数据库版本: mysql
  6. > 数据库可视化工具: navicat
  7. > 后端:java,spring,springmvc,mybatis,tomcat等
  8. > 前端:html,css,javascript,jquery,vue等
  9. > 更多内容可查看:http://projecthelp.top
复制代码
项目实现

所有的代码文件都有详细的注释,不用担心看不懂代码的。
  1. /**
  2. * 管理员 */
  3. @Controller
  4. public class AdminsController extends BaseController {
  5.     @Autowired
  6.     private AdminsMapper dao;
  7.     @Autowired
  8.     private AdminsService service;
  9.     /**
  10.      * 后台列表页
  11.      */
  12.     @RequestMapping("/admins_list")
  13.     public String list() {
  14.         // 检测是否有登录,没登录则跳转到登录页面
  15.         if (!checkLogin()) {
  16.             return showError("尚未登录", "./login.do");
  17.         }
  18.         String order = Request.get("order", "id"); // 获取前台提交的URL参数 order  如果没有则设置为id
  19.         String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort  如果没有则设置为desc
  20.         int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
  21.         Example example = new Example(Admins.class); //  创建一个扩展搜索类
  22.         Example.Criteria criteria = example.createCriteria();          // 创建一个扩展搜索条件类
  23.         String where = " 1=1 ";   // 创建初始条件为:1=1
  24.         where += getWhere();      // 从方法中获取url 上的参数,并写成 sql条件语句
  25.         criteria.andCondition(where);   // 将条件写进上面的扩展条件类中
  26.         if (sort.equals("desc")) {        // 判断前台提交的sort 参数是否等于  desc倒序  是则使用倒序,否则使用正序
  27.             example.orderBy(order).desc();  // 把sql 语句设置成倒序
  28.         } else {
  29.             example.orderBy(order).asc();   // 把 sql 设置成正序
  30.         }
  31.         int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page"));  // 获取前台提交的URL参数 page  如果没有则设置为1
  32.         page = Math.max(1, page);  // 取两个数的最大值,防止page 小于1
  33.         List<Admins> list = service.selectPageExample(example, page, pagesize);   // 获取当前页的行数
  34.         // 将列表写给界面使用
  35.         assign("totalCount", request.getAttribute("totalCount"));
  36.         assign("list", list);
  37.         assign("orderby", order);  // 把当前排序结果写进前台
  38.         assign("sort", sort);      // 把当前排序结果写进前台
  39.         return json();   // 将数据写给前端
  40.     }
  41.     public String getWhere() {
  42.         _var = new LinkedHashMap(); // 重置数据
  43.         String where = " ";
  44.         // 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
  45.         if (!Request.get("username").equals("")) {
  46.             where += " AND username LIKE '%" + Request.get("username") + "%' ";
  47.         }
  48.         return where;
  49.     }
  50.     @RequestMapping("/admins_add")
  51.     public String add() {
  52.         _var = new LinkedHashMap(); // 重置数据
  53.         return json();   // 将数据写给前端
  54.     }
  55.     @RequestMapping("/admins_updt")
  56.     public String updt() {
  57.         _var = new LinkedHashMap(); // 重置数据
  58.         int id = Request.getInt("id");
  59.         // 获取行数据,并赋值给前台jsp页面
  60.         Admins mmm = service.find(id);
  61.         assign("mmm", mmm);
  62.         assign("updtself", 0);
  63.         return json();   // 将数据写给前端
  64.     }
  65.     @RequestMapping("/admins_updtself")
  66.     public String updtself() {
  67.         _var = new LinkedHashMap(); // 重置数据
  68.         // 更新个人资料
  69.         int id = (int) request.getSession().getAttribute("id");
  70.         Admins mmm = service.find(id);
  71.         assign("mmm", mmm);
  72.         assign("updtself", 1);
  73.         return json();   // 将数据写给前端
  74.     }
  75.     /**
  76.      * 添加内容
  77.      *
  78.      * @return
  79.      */
  80.     @RequestMapping("/adminsinsert")
  81.     public String insert() {
  82.         _var = new LinkedHashMap(); // 重置数据
  83.         String tmp = "";
  84.         Admins post = new Admins();  // 创建实体类
  85.         // 设置前台提交上来的数据到实体类中
  86.         post.setUsername(Request.get("username"));
  87.         post.setPwd(Request.get("pwd"));
  88.         post.setAddtime(Info.getDateStr());
  89.         service.insert(post); // 插入数据
  90.         int charuid = post.getId().intValue();
  91.         if (isAjax()) {
  92.             return jsonResult(post);
  93.         }
  94.         return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
  95.     }
  96.     /**
  97.      * 更新内容
  98.      *
  99.      * @return
  100.      */
  101.     @RequestMapping("/adminsupdate")
  102.     public String update() {
  103.         _var = new LinkedHashMap(); // 重置数据
  104.         // 创建实体类
  105.         Admins post = new Admins();
  106.         // 将前台表单数据填充到实体类
  107.         if (!Request.get("username").equals(""))
  108.             post.setUsername(Request.get("username"));
  109.         if (!Request.get("pwd").equals(""))
  110.             post.setPwd(Request.get("pwd"));
  111.         if (!Request.get("addtime").equals(""))
  112.             post.setAddtime(Request.get("addtime"));
  113.         post.setId(Request.getInt("id"));
  114.         service.update(post); // 更新数据
  115.         int charuid = post.getId().intValue();
  116.         if (isAjax()) {
  117.             return jsonResult(post);
  118.         }
  119.         if (Request.getInt("updtself") == 1) {
  120.             return showSuccess("保存成功", "admins_updtself.do");
  121.         }
  122.         return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
  123.     }
  124.     /**
  125.      * 删除
  126.      */
  127.     @RequestMapping("/admins_delete")
  128.     public String delete() {
  129.         _var = new LinkedHashMap(); // 重置数据
  130.         if (!checkLogin()) {
  131.             return showError("尚未登录");
  132.         }
  133.         int id = Request.getInt("id");  // 根据id 删除某行数据
  134.         HashMap map = Query.make("admins").find(id);
  135.         service.delete(id);// 根据id 删除某行数据
  136.         return showSuccess("删除成功", request.getHeader("referer"));//弹出删除成功,并跳回上一页
  137.     }
  138. }
复制代码
  1. /**
  2. * 上传控制器
  3. */
  4. @Controller
  5. public class UploadController extends BaseController {
  6.     /**
  7.      * 上传文件
  8.      *
  9.      * @param fujian
  10.      * @return
  11.      * @throws Exception
  12.      */
  13.     @RequestMapping(value = "/upload_re")
  14.     public String Upload(MultipartFile fujian) throws Exception {
  15.         String fileName = fujian.getOriginalFilename();
  16.         String suffixName = fileName.substring(fileName.lastIndexOf("."));
  17.         fileName = UUID.randomUUID() + suffixName;
  18.         String filePath = getFolder("upload");
  19.         try {
  20.             File file = new File(getPhysicalPath(filePath) + "/" + fileName);
  21.             fujian.transferTo(file);
  22.             request.setAttribute("url", filePath + "/" + fileName);
  23.             if (isAjax()) {
  24.                 return jsonResult(request.getAttribute("url"));
  25.             }
  26.             return "upload";
  27.         } catch (Exception e) {
  28.             return showError(e.getMessage());
  29.         }
  30.     }
  31.     private String getFolder(String path) {
  32.         SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd");
  33.         path += "/" + formater.format(new Date());
  34.         File dir = new File(this.getPhysicalPath(path));
  35.         if (!dir.exists()) {
  36.             try {
  37.                 dir.mkdirs();
  38.             } catch (Exception e) {
  39.                 return "";
  40.             }
  41.         }
  42.         return path;
  43.     }
  44.     /**
  45.      * 根据传入的虚拟路径获取物理路径
  46.      *
  47.      * @param path
  48.      * @return
  49.      */
  50.     private String getPhysicalPath(String path) {
  51.         String servletPath = this.request.getServletPath();
  52.         String realPath = this.request.getSession().getServletContext()
  53.                 .getRealPath(servletPath);
  54.         return new File(realPath).getParent() + "/" + path;
  55.     }
  56. }
复制代码
  1. /**
  2. * 用户登录更新密码控制器
  3. */
  4. @Controller
  5. public class UserController extends BaseController {
  6.     @Resource
  7.     private AdminsService adminsService;
  8.     @Resource
  9.     private YonghuService yonghuService;
  10.     /**
  11.      * 登录页面
  12.      *
  13.      * @return
  14.      */
  15.     @RequestMapping("/login")
  16.     public String Index() {
  17.         return "login";
  18.     }
  19.     /**
  20.      * 退出
  21.      *
  22.      * @return
  23.      */
  24.     @RequestMapping("/logout")
  25.     public String Logout() {
  26.         request.getSession().invalidate();
  27.         return showSuccess("退出成功", "./");
  28.     }
  29.     /**
  30.      * 验证登录用户
  31.      *
  32.      * @param isAdmin
  33.      * @param username
  34.      * @param pwd
  35.      * @param cx
  36.      * @return
  37.      */
  38.     protected String authLoginUser(boolean isAdmin, String username, String pwd, String cx) {
  39.         if (username == null || "".equals(username)) {
  40.             return showError("账号不允许为空");
  41.         }
  42.         if (pwd == null || "".equals(pwd)) {
  43.             return showError("密码不允许为空");
  44.         }
  45.         if (cx == null) {
  46.             return showError("请选中登录类型");
  47.         }
  48.         String random;
  49.         // 获取 token方式的验证码值
  50.         if (isAjax() && request.getParameter("captchToken") != null) {
  51.             random = DESUtil.decrypt("CaptchControllerPassword", request.getParameter("captchToken"));
  52.         } else {
  53.             random = (String) request.getSession().getAttribute("random");
  54.         }
  55.         String pagerandom = request.getParameter("pagerandom") == null ? "" : request.getParameter("pagerandom");
  56.         if (request.getParameter("a") != null && !pagerandom.equals(random)) {
  57.             return showError("验证码不正确", 20);
  58.         }
  59.         if (cx.equals("管理员")) {
  60.             Admins user = adminsService.login(username, pwd);
  61.             if (user == null) {
  62.                 return showError("用户名或密码错误");
  63.             }
  64.             session.setAttribute("id", user.getId());
  65.             session.setAttribute("username", user.getUsername());
  66.             session.setAttribute("cx", cx);
  67.             session.setAttribute("login", cx);
  68.             session.setAttribute("username", user.getUsername());
  69.             session.setAttribute("pwd", user.getPwd());
  70.             session.setAttribute("addtime", user.getAddtime());
  71.             JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user));
  72.             jsonObject.put("cx", session.getAttribute("cx"));
  73.             jsonObject.put("username", session.getAttribute("username"));
  74.             jsonObject.put("login", session.getAttribute("login"));
  75.             assign("session", jsonObject);
  76.         }
  77.         if (cx.equals("用户")) {
  78.             Yonghu user = yonghuService.login(username, pwd);
  79.             if (user == null) {
  80.                 return showError("用户名或密码错误");
  81.             }
  82.             session.setAttribute("id", user.getId());
  83.             session.setAttribute("username", user.getYonghuming());
  84.             session.setAttribute("cx", cx);
  85.             session.setAttribute("login", cx);
  86.             session.setAttribute("yonghuming", user.getYonghuming());
  87.             session.setAttribute("mima", user.getMima());
  88.             session.setAttribute("xingming", user.getXingming());
  89.             session.setAttribute("xingbie", user.getXingbie());
  90.             session.setAttribute("shouji", user.getShouji());
  91.             session.setAttribute("youxiang", user.getYouxiang());
  92.             session.setAttribute("shenfenzheng", user.getShenfenzheng());
  93.             session.setAttribute("touxiang", user.getTouxiang());
  94.             session.setAttribute("addtime", user.getAddtime());
  95.             JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user));
  96.             jsonObject.put("cx", session.getAttribute("cx"));
  97.             jsonObject.put("username", session.getAttribute("username"));
  98.             jsonObject.put("login", session.getAttribute("login"));
  99.             assign("session", jsonObject);
  100.         }
  101.         if (session.getAttribute("username") == null) {
  102.             return showError("账号或密码错误");
  103.         }
  104.         String referer = request.getParameter("referer");
  105.         if (referer == null) {
  106.             if (isAdmin) {
  107.                 referer = "./main.do";
  108.             } else {
  109.                 referer = "./";
  110.             }
  111.         }
  112.         assign("token", createToken(
  113.                 session.getAttribute("cx"),
  114.                 session.getAttribute("login"),
  115.                 session.getAttribute("username"),
  116.                 _var.get("session")
  117.                 )
  118.         );
  119.         if (this.isAjax()) {
  120.             return json();
  121.         } else {
  122.             return showSuccess("登录成功", referer);
  123.         }
  124.     }
  125.     public String createToken(Object cx, Object login, Object username, Object session) {
  126.         String SOURCE_STRING = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ";
  127.         String token = createRandomString(SOURCE_STRING, 32);
  128.         // 删除过期token
  129.         new CommDAO().commOper("DELETE FROM token WHERE token_time<'" + Info.getDateStr() + "'");
  130.         HashMap tokenMap = new HashMap();
  131.         tokenMap.put("token", token);
  132.         tokenMap.put("cx", cx);
  133.         tokenMap.put("login", login);
  134.         tokenMap.put("username", username);
  135.         tokenMap.put("valueid", this.session.getAttribute("id"));
  136.         // 10天的有效期
  137.         tokenMap.put("token_time", Info.date("yyyy-MM-dd HH:mm:ss", Info.time() + 86400 * 10));
  138.         tokenMap.put("session", JSON.toJSONString(session));
  139.         Query.make("token").add(tokenMap);
  140.         return token;
  141.     }
  142.     /**
  143.      * 使用已有token 登录
  144.      *
  145.      * @return
  146.      */
  147.     @RequestMapping("/tokenLogin")
  148.     public String tokenLogin() {
  149.         String token = request.getParameter("token");
  150.         HashMap<String, String> tokenInfo = Query.make("token").where("token", token).where("token_time", ">", Info.getDateStr()).find();
  151.         if (tokenInfo.isEmpty()) {
  152.             return jsonError("token已失效");
  153.         }
  154.         String cx = tokenInfo.get("login");
  155.         Object user = null;
  156.         if (cx.equals("管理员")) {
  157.             user = adminsService.find(tokenInfo.get("valueid"));
  158.         }
  159.         if (cx.equals("用户")) {
  160.             user = yonghuService.find(tokenInfo.get("valueid"));
  161.         }
  162.         if (user == null) {
  163.             return jsonError("没找到token中用户");
  164.         }
  165.         tokenInfo.put("session", JSON.toJSONString(user));
  166.         session.setAttribute("cx", tokenInfo.get("cx"));
  167.         session.setAttribute("login", tokenInfo.get("login"));
  168.         session.setAttribute("username", tokenInfo.get("username"));
  169.         session.setAttribute("id", tokenInfo.get("valueid"));
  170.         JSONObject session1 = JSON.parseObject(tokenInfo.get("session"));
  171.         for (Map.Entry<String, Object> entry : session1.entrySet()) {
  172.             session.setAttribute(entry.getKey(), entry.getValue());
  173.         }
  174.         session1.put("cx", tokenInfo.get("cx"));
  175.         session1.put("login", tokenInfo.get("login"));
  176.         session1.put("username", tokenInfo.get("username"));
  177.         assign("token", token);
  178.         assign("session", session1);
  179.         // 刷新token有效期
  180.         tokenInfo.put("token_time", Info.date("yyyy-MM-dd HH:mm:ss", Info.time() + 86400 * 10));
  181.         Query.make("token").where("token", token).update(tokenInfo);
  182.         return json();
  183.     }
  184.     /**
  185.      * 获取随机串
  186.      *
  187.      * @param source 源字符串
  188.      * @param length 随机串的长度
  189.      * @return 随机串
  190.      */
  191.     private String createRandomString(String source, int length) {
  192.         if (this.isNullOrEmpty(source)) {
  193.             return "";
  194.         }
  195.         StringBuffer result = new StringBuffer();
  196.         Random random = new Random();
  197.         for (int index = 0; index < length; index++) {
  198.             result.append(source.charAt(random.nextInt(source.length())));
  199.         }
  200.         System.out.println(result.toString());
  201.         return result.toString();
  202.     }
  203.     /**
  204.      * 判断字符串是否为空
  205.      *
  206.      * @param target
  207.      * @return true:空,false:非空
  208.      */
  209.     private boolean isNullOrEmpty(String target) {
  210.         if (null == target || "".equals(target) || target.isEmpty()) {
  211.             return true;
  212.         }
  213.         return false;
  214.     }
  215.     /**
  216.      * 后台主页面
  217.      *
  218.      * @return
  219.      */
  220.     @RequestMapping("/main")
  221.     public String main() {
  222.         return "main";
  223.     }
  224.     /**
  225.      * 后台初始页面
  226.      *
  227.      * @return
  228.      */
  229.     @RequestMapping("/sy")
  230.     public String sy() {
  231.         return "sy";
  232.     }
  233.     /**
  234.      * 不一定有
  235.      *
  236.      * @return
  237.      */
  238.     @RequestMapping("/mygo")
  239.     public String mygo() {
  240.         return "mygo";
  241.     }
  242.     /**
  243.      * 头部页面
  244.      *
  245.      * @return
  246.      */
  247.     @RequestMapping("/top")
  248.     public String top() {
  249.         return "top";
  250.     }
  251.     /**
  252.      * 验证登录页面
  253.      *
  254.      * @return
  255.      */
  256.     @RequestMapping("/authLogin")
  257.     public String authLogin() {
  258.         String username = Request.get("username");
  259.         String pwd = Request.get("pwd");
  260.         String cx = Request.get("cx");
  261.         return authLoginUser(false, username, pwd, cx);
  262.     }
  263.     /**
  264.      * 验证后台登录
  265.      *
  266.      * @return
  267.      */
  268.     @RequestMapping("/authAdminLogin")
  269.     public String authAdminLogin() {
  270.         String username = Request.get("username");
  271.         String pwd = Request.get("pwd");
  272.         String cx = Request.get("cx");
  273.         return authLoginUser(true, username, pwd, cx);
  274.     }
  275.     /**
  276.      * 修改登录密码页面
  277.      *
  278.      * @return
  279.      */
  280.     @RequestMapping("/mod")
  281.     public String mod() {
  282.         return "mod";
  283.     }
  284.     /**
  285.      * 保存修改密码
  286.      *
  287.      * @return
  288.      */
  289.     @RequestMapping("/editPassword")
  290.     public String editPassword() {
  291.         String username = request.getSession().getAttribute("username").toString();
  292.         String cx = request.getSession().getAttribute("login").toString();
  293.         String oldPassword = Request.get("oldPassword");
  294.         String newPwd = Request.get("newPwd");
  295.         String newPwd2 = Request.get("newPwd2");
  296.         if (!newPwd.equals(newPwd2)) {
  297.             return showError("两次密码不一致");
  298.         }
  299.         if (cx.equals("管理员")) {
  300.             Admins user = adminsService.login(username, oldPassword);
  301.             if (user == null) {
  302.                 return showError("原密码不正确");
  303.             }
  304.             adminsService.updatePassword(user.getId(), newPwd);
  305.         }
  306.         if (cx.equals("用户")) {
  307.             Yonghu user = yonghuService.login(username, oldPassword);
  308.             if (user == null) {
  309.                 return showError("原密码不正确");
  310.             }
  311.             yonghuService.updatePassword(user.getId(), newPwd);
  312.         }
  313.         return showSuccess("修改密码成功", "./mod.do");
  314.     }
  315. }
复制代码
部分功能展示

系统前台功能

对于未登录用户是可以点击进去查看的:

【重点】这些查看的图片和信息都是管理员可以在后台进行自定义修改的,丝毫不用担心自己看不懂代码不会改怎么办。
用户可以点击进去查看新闻信息,默认系统有站内新闻,和行业资讯俩个分类,这里的分类展示的只是默认的俩个,管理员可以在后台自己添加修改的,用户还可以进行搜索内容。新闻信息是管理员在后台进行动态的修改管理的。
系统默认包含本地,境内和境外三的大分类,同理这里的分类,管理员可以在后台进行增加修改或删除的,同时里面的景点信息都是由管理员在后台进行动态录入的,用户可以点击查看景点信息内容。

对于未登录用户,如果点击收藏,会提示用户请先登录:

用户可以查看美食信息,同理,这里的分类都是可以管理员在后台进行修改的。
普通用户角色

对于普通用户角色,可以在系统上面查看到上面的功能外,还可以对查看的信息进行收藏或者预订,同时还可以查看到个人中心:
管理员角色用户

对于系统管理员,除了以上的功能外,还可以动态编辑修改增加所有页面上你可以看到的信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4