• 【计算机毕业设计】基于SpringBoot+Vue贵州旅游系统的设计与实现


    博主主页:一季春秋
    博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
    主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。

    🍅文末获取联系🍅

    精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

    SpringBoot+Vue项目持续更新中

    http://t.csdn.cn/1mgm8

    目录

    一、项目介绍 

    二、项目主要技术 

    三、系统设计

    3.1 系统总体功能设计

    3.2 管理员模块

    四、系统实现

    4.1 前台用户功能实现

    4.2 管理员模块实现

    五、实现代码

    5.1 协同算法关键代码

    5.2 订单统计关键代码


    一、项目介绍 

    本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本贵州旅游系统主要包括个人中心、用户管理、商品分类管理、风景名胜管理、酒店信息管理、车辆信息管理、食文化管理等多个模块。它帮助贵州旅游管理实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了贵州旅游管理数据资源,有效的减少了贵州旅游管理的经济投入,大大提高了贵州旅游管理的效率。

    二、项目主要技术 

    1. 开发语言:Java
    2. 使用框架:spring boot
    3. 前端技术:JavaScript、Vue 、css3
    4. 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
    5. 数据库:MySQL 5.7/8.0
    6. 数据库管理工具:phpstudy/Navicat
    7. JDK版本:jdk1.8
    8. Maven: apache-maven 3.8.1-bin

    三、系统设计

    在系统分析的基础上,本章首先介绍了系统的总体功能设计,详细描述了系统的不同模块,然后对系统的数据库设计进行了E-R图的转换,并且给出了各个功能模块的表设计。

    3.1 系统总体功能设计

    通过软件的需求分析已经获得了系统的基本功能需求,根据需求,将贵州旅游系统功能模块主要分为管理员模块。管理员添加个人中心、用户管理、商品分类管理、风景名胜管理、酒店信息管理、车辆信息管理、食文化管理、黔之味管理、门票预订管理、酒店预订管理、租车预订管理、酒店取消管理、门票取消管理、取消租车管理、在线留言、系统管理、订单管理等操作。如图是系统的功能结构图。 

    3.2 管理员模块

    管理员模块可以进行个人中心,对其进行增删改查操作,系统用户的属性包括用户名、密码、权限、添加时间;对进行用户管理,可以添加用户,将信息记录表中,经过添加后,此用户可以被用户管理查看,可以对信息进行更新,将信息从表中进行删除;对进行商品分类管理,可以添加商品分类信息,对商品分类信息列表进行查询,对商品分类信息进行修改以及将商品分类信息从列表删除。可以管理风景名胜,并对风景名胜信息列表进行查询,对风景名胜信息进行修改以及删除。对进行酒店信息管理,可以添加酒店信息管理,对酒店信息管理列表进行查询,对酒店信息管理进行修改以及将酒店信息管理从列表删除。可以管理车辆信息管理,并对车辆信息管理列表进行查询,对车辆信息管理进行修改以及删除。对进行食文化管理,可以添加食文化信息,对食文化列表进行查询,对食文化进行修改以及将食文化信息从列表删除。可以管理黔之味,并对黔之味列表进行查询,对黔之味进行修改以及删除;对进行门票预订管理,可以添加门票预订,对门票预订列表进行查询,对门票预订进行修改以及将门票预订管理从列表删除。可以管理酒店预订,并对酒店预订列表进行查询,对酒店预订进行修改以及删除

    如图是以对用户管理为例的活动图。

    四、系统实现

    4.1 前台用户功能实现

    首页界面

    风景名胜推荐界面

    酒店信息界面

    酒店信息

    车辆信息

    黔之味界面

    4.2 管理员模块实现

    管理员输入用户名和密码,下拉选择框,选择用户权限,然后点击立即登录,系统与保存在数据库的数据进行匹配,如果用户名与密码与数据库存放数据匹配,系统跳转到用户页面,否则提示错误重新跳转到登录页面。

    系统登录界面

    用户管理是可以进行添加用户信息操作。在文本框输入所要添加的用户管理,然后提交即可,输入错误可以点击重置按钮对文本框重置。

    用户管理界面

    风景名胜管理是可以进行添加风景名胜信息操作。添加风景名胜信息时,需要设置风景名胜信息,然后提交即可,输入错误可以点击重置按钮对文本框重置。

    风景名胜管理界面

    查询所有酒店信息列表,查询酒店信息,并对酒店信息进行修改,可以对列表中酒店信息进行删除。

    酒店信息查询界面

    黔之味管理是可以列表中进行添加黔之味管理信息操作。添加黔之味管理信息时,需要设置黔之味管理基本信息,然后提交即可,输入错误可以点击重置按钮对文本框重置。

    黔之味管理信息界面

    询所有门票预订管理信息列表,查询门票预订管理信息,并对门票预订管理信息进行修改,可以对列表中门票预订管理信息进行删除。

    门票预订管理信息界面

    订单管理界面

    五、实现代码

    5.1 协同算法关键代码

    1. /**
    2. * 协同算法(按用户购买推荐)
    3. */
    4. @RequestMapping("/autoSort2")
    5. public R autoSort2(@RequestParam Map params,QianzhiweiEntity qianzhiwei, HttpServletRequest request){
    6. String userId = request.getSession().getAttribute("userId").toString();
    7. String goodtypeColumn = "shangpinfenlei";
    8. List orders = ordersService.selectList(new EntityWrapper().eq("userid", userId).eq("tablename", "qianzhiwei").orderBy("addtime", false));
    9. List goodtypes = new ArrayList();
    10. Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
    11. List qianzhiweiList = new ArrayList();
    12. //去重
    13. List ordersDist = new ArrayList();
    14. for(OrdersEntity o1 : orders) {
    15. boolean addFlag = true;
    16. for(OrdersEntity o2 : ordersDist) {
    17. if(o1.getGoodid()==o2.getGoodid() || o1.getGoodtype().equals(o2.getGoodtype())) {
    18. addFlag = false;
    19. break;
    20. }
    21. }
    22. if(addFlag) ordersDist.add(o1);
    23. }
    24. if(ordersDist!=null && ordersDist.size()>0) {
    25. for(OrdersEntity o : ordersDist) {
    26. qianzhiweiList.addAll(qianzhiweiService.selectList(new EntityWrapper().eq(goodtypeColumn, o.getGoodtype())));
    27. }
    28. }
    29. EntityWrapper ew = new EntityWrapper();
    30. params.put("sort", "id");
    31. params.put("order", "desc");
    32. PageUtils page = qianzhiweiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, qianzhiwei), params), params));
    33. List pageList = (List)page.getList();
    34. if(qianzhiweiList.size()
    35. int toAddNum = (limit-qianzhiweiList.size())<=pageList.size()?(limit-qianzhiweiList.size()):pageList.size();
    36. for(QianzhiweiEntity o1 : pageList) {
    37. boolean addFlag = true;
    38. for(QianzhiweiEntity o2 : qianzhiweiList) {
    39. if(o1.getId().intValue()==o2.getId().intValue()) {
    40. addFlag = false;
    41. break;
    42. }
    43. }
    44. if(addFlag) {
    45. qianzhiweiList.add(o1);
    46. if(--toAddNum==0) break;
    47. }
    48. }
    49. } else if(qianzhiweiList.size()>limit) {
    50. qianzhiweiList = qianzhiweiList.subList(0, limit);
    51. }
    52. page.setList(qianzhiweiList);
    53. return R.ok().put("data", page);
    54. }
    55. }

    5.2 订单统计关键代码

    1. /**
    2. * (按值统计)
    3. */
    4. @RequestMapping("/value/{xColumnName}/{yColumnName}")
    5. public R value(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
    6. Map params = new HashMap();
    7. params.put("xColumn", xColumnName);
    8. params.put("yColumn", yColumnName);
    9. EntityWrapper ew = new EntityWrapper();
    10. ew.in("status", new String[]{"已支付","已发货","已完成"});
    11. List> result = ordersService.selectValue(params, ew);
    12. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    13. for(Map m : result) {
    14. for(String k : m.keySet()) {
    15. if(m.get(k) instanceof Date) {
    16. m.put(k, sdf.format((Date)m.get(k)));
    17. }
    18. }
    19. }
    20. return R.ok().put("data", result);
    21. }
    22. /**
    23. * (按值统计)时间统计类型
    24. */
    25. @RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
    26. public R valueDay(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
    27. Map params = new HashMap();
    28. params.put("xColumn", xColumnName);
    29. params.put("yColumn", yColumnName);
    30. params.put("timeStatType", timeStatType);
    31. EntityWrapper ew = new EntityWrapper();
    32. ew.in("status", new String[]{"已支付","已发货","已完成"});
    33. List> result = ordersService.selectTimeStatValue(params, ew);
    34. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    35. for(Map m : result) {
    36. for(String k : m.keySet()) {
    37. if(m.get(k) instanceof Date) {
    38. m.put(k, sdf.format((Date)m.get(k)));
    39. }
    40. }
    41. }
    42. return R.ok().put("data", result);
    43. }
    44. /**
    45. * 分组统计
    46. */
    47. @RequestMapping("/group/{columnName}")
    48. public R group(@PathVariable("columnName") String columnName,HttpServletRequest request) {
    49. Map params = new HashMap();
    50. params.put("column", columnName);
    51. EntityWrapper ew = new EntityWrapper();
    52. ew.in("status", new String[]{"已支付","已发货","已完成"});
    53. List> result = ordersService.selectGroup(params, ew);
    54. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    55. for(Map m : result) {
    56. for(String k : m.keySet()) {
    57. if(m.get(k) instanceof Date) {
    58. m.put(k, sdf.format((Date)m.get(k)));
    59. }
    60. }
    61. }
    62. return R.ok().put("data", result);
    63. }
    64. }
  • 相关阅读:
    iNFTnews | 回顾支付宝鲸探发展历程:是数藏的投机客还是引领者?
    Linux权限有哪些
    Linux信号捕捉函数(二)
    大数据队列Kafka
    在 Spring Data应用程序中使用Criteria条件查询
    nacos 2.2.2 反序列化
    自己使用的git总结
    Spring篇---第三篇
    最新版本 Stable Diffusion 开源 AI 绘画工具之汉化篇
    Blender做一个小凳子学习笔记
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/133068547