• SpringMVC+Vue项目图书推荐系统


    末获取源码 

    开发语言:Java

    开发工具:IDEA /Eclipse

    数据库:MYSQL5.7

    应用服务:Tomcat7/Tomcat8

    使用框架ssm+vue

    JDK版本:jdk1.8

    前言介绍 

    “互联网+”的战略实施后,很多行业的信息化水平都有了很大的提升。但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物力造成诸多浪费,工作效率不高等情况;同时为后续的工作带来了隐患。并且现有的图书推荐系统由于用户的体验感较差、系统流程不完善导致系统的使用率较低。此基于协同过滤算法的图书推荐系统的部署与应用,将对首页、个人中心、用户管理、书籍管理、书籍分类管理、热门图书管理、我的收藏管理、系统管理、订单管理等功能进行管理,这可以简化管理工作程序、降低劳动成本、提高业务效率和工作效率。为了有效推动个性化智能图书推荐资源的合理配置和使用,适应现代个性化智能图书推荐机构的管理办法,迫切需要研发一套更加全面的基于协同过滤算法的图书推荐系统。

    本课题在充分研究了ssm框架基础上,采用B/S模式,以Java为开发语言,IDEA为开发工具,MySQL为数据管理平台,实现的内容主要包括首页、个人中心、用户管理、书籍管理、书籍分类管理、热门图书管理、我的收藏管理、系统管理、订单管理等功能。

    功能分析

    考虑到实际生活中在图书推荐管理方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。

    (1)管理员功能需求

    管理员登陆后,主要包括首页、个人中心、用户管理、书籍管理、书籍分类管理、热门图书管理、我的收藏管理、系统管理、订单管理等功能。管理员用例图如图 

     (2)用户功能需求

    用户登陆后,用户登录进入系统可以实现首页、书籍、热门图书、个人中心、购物车等功能。用户用例图如图 

     

    系统结构设计 

    系统设计是把本系统的各项功能需求进行细化,而转换为软件系统表示的一个设计过程,在对目标系统的研究分析之后,做出整个系统平台的总体规划,进而对用例中各个对象进一步地合理精细设计。为降低整个系统的复杂度,而使其更加便于修改,提高代码的可读性,我们会将系统模块化,模块间保持相对独立,且每个模块只完成一个子功能,并且与其他模块通过简单的接口链接,即高内聚低耦合原则,而使整个系统能够拥有一个高性能的结构,这边是系统概要设计最重要的目的。在之前的需求分析的基础上,本图书推荐系统结构,如下图 

     

    系统功能模块 

    图书推荐系统,在系统首页可以查看首页、书籍、热门图书、个人中心、购物车等内容,并进行详细操作;如图

     

    用户注册

    在用户注册页面通过填写用户账号、用户姓名、密码、确认密码、联系方式等内容进行注册操作,如图 

     

    书籍

    在书籍页面可以查看书籍名称、图片、价格、书籍分类、作者、出版社、数量、发布时间、评价、部分内容等信息,并进行添加到购物车、立即购买,评论或收藏等操作,如图 

     

    热门图书

    在热门图书页面可以查看书籍名称、图片、价格、书籍分类、作者、出版社、数量、上市时间、评分、部分内容等信息,并进行添加到购物车、立即购买,评论或收藏等操作,如图 

     

    个人中心

    在个人中心页面通过填写用户账号、用户姓名、密码、性别、联系方式、上传图片、余额等内容进行更新信息,还可以根据需要对我的订单,我的地址,我的收藏进行相对应操作,如图 

     购物车

    在购物车页面可以查看购买商品、图片、价格、数量、总价等信息,并进行点击购买或删除操作,如图 

     

    管理员功能模块 

    管理员登录,管理员进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作,如图

     

    管理员登录系统后可以对首页、个人中心、用户管理、书籍管理、书籍分类管理、热门图书管理、我的收藏管理、系统管理、订单管理等功能进行相应的操作,如图 

     

    用户管理

    在用户管理页面可以对用户账号、用户姓名、性别、联系方式、头像等内容进行详情,修改和删除操作,如图 

    书籍管理

    在书籍管理页面可以对书籍名称、封面、书籍分类、作家、出版社、数量、发布时间、评价、价格等内容进行详情,修改,查看评论和删除操作,如图 

    书籍分类管理

    在书籍分类管理页面可以对书籍分类信息进行修改和删除操作,如图 

    热门图书管理

    在热门图书管理页面可以对书籍名称、封面、书籍分类、作者、出版社、数量、上市时间、评分、价格等内容进行详情,修改,查看评论或删除操作;如图 

     

    我的收藏管理

    在我的收藏管理页面可以对收藏名称、收藏图片、推荐类型等内容进行详情,修改和删除操作,如图 

     

    系统管理

    在轮播图管理页面可以对名称、值等内容进行详情或修改操作,如图 

    订单管理

    在已支付订单页面可以对索引、订单编号、商品名称、商品图片、购买数量、价格、折扣价格、总价格、折扣总价格、支付类型、状态、地址、电话、收货人、商品类型、下单时间等内容进行详情、发货和删除等操作,还可对已完成订单、已发货订单、未支付订单、已取消订单、已退款订单进行相对应操作,如图 

    部分核心代码

    1. /**
    2. * 热门图书
    3. * 后端接口
    4. * @author
    5. * @email
    6. * @date 2022-04-25 22:30:44
    7. */
    8. @RestController
    9. @RequestMapping("/rementushu")
    10. public class RementushuController {
    11. @Autowired
    12. private RementushuService rementushuService;
    13. @Autowired
    14. private StoreupService storeupService;
    15. /**
    16. * 后端列表
    17. */
    18. @RequestMapping("/page")
    19. public R page(@RequestParam Map<String, Object> params,RementushuEntity rementushu,
    20. HttpServletRequest request){
    21. EntityWrapper<RementushuEntity> ew = new EntityWrapper<RementushuEntity>();
    22. PageUtils page = rementushuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, rementushu), params), params));
    23. return R.ok().put("data", page);
    24. }
    25. /**
    26. * 前端列表
    27. */
    28. @IgnoreAuth
    29. @RequestMapping("/list")
    30. public R list(@RequestParam Map<String, Object> params,RementushuEntity rementushu,
    31. HttpServletRequest request){
    32. EntityWrapper<RementushuEntity> ew = new EntityWrapper<RementushuEntity>();
    33. PageUtils page = rementushuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, rementushu), params), params));
    34. return R.ok().put("data", page);
    35. }
    36. /**
    37. * 列表
    38. */
    39. @RequestMapping("/lists")
    40. public R list( RementushuEntity rementushu){
    41. EntityWrapper<RementushuEntity> ew = new EntityWrapper<RementushuEntity>();
    42. ew.allEq(MPUtil.allEQMapPre( rementushu, "rementushu"));
    43. return R.ok().put("data", rementushuService.selectListView(ew));
    44. }
    45. /**
    46. * 查询
    47. */
    48. @RequestMapping("/query")
    49. public R query(RementushuEntity rementushu){
    50. EntityWrapper< RementushuEntity> ew = new EntityWrapper< RementushuEntity>();
    51. ew.allEq(MPUtil.allEQMapPre( rementushu, "rementushu"));
    52. RementushuView rementushuView = rementushuService.selectView(ew);
    53. return R.ok("查询热门图书成功").put("data", rementushuView);
    54. }
    55. /**
    56. * 后端详情
    57. */
    58. @RequestMapping("/info/{id}")
    59. public R info(@PathVariable("id") Long id){
    60. RementushuEntity rementushu = rementushuService.selectById(id);
    61. rementushu.setClicknum(rementushu.getClicknum()+1);
    62. rementushuService.updateById(rementushu);
    63. return R.ok().put("data", rementushu);
    64. }
    65. /**
    66. * 前端详情
    67. */
    68. @IgnoreAuth
    69. @RequestMapping("/detail/{id}")
    70. public R detail(@PathVariable("id") Long id){
    71. RementushuEntity rementushu = rementushuService.selectById(id);
    72. rementushu.setClicknum(rementushu.getClicknum()+1);
    73. rementushuService.updateById(rementushu);
    74. return R.ok().put("data", rementushu);
    75. }
    76. /**
    77. * 赞或踩
    78. */
    79. @RequestMapping("/thumbsup/{id}")
    80. public R thumbsup(@PathVariable("id") String id,String type){
    81. RementushuEntity rementushu = rementushuService.selectById(id);
    82. if(type.equals("1")) {
    83. rementushu.setThumbsupnum(rementushu.getThumbsupnum()+1);
    84. } else {
    85. rementushu.setCrazilynum(rementushu.getCrazilynum()+1);
    86. }
    87. rementushuService.updateById(rementushu);
    88. return R.ok();
    89. }
    90. /**
    91. * 后端保存
    92. */
    93. @RequestMapping("/save")
    94. public R save(@RequestBody RementushuEntity rementushu, HttpServletRequest request){
    95. rementushu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    96. //ValidatorUtils.validateEntity(rementushu);
    97. rementushuService.insert(rementushu);
    98. return R.ok();
    99. }
    100. /**
    101. * 前端保存
    102. */
    103. @IgnoreAuth
    104. @RequestMapping("/add")
    105. public R add(@RequestBody RementushuEntity rementushu, HttpServletRequest request){
    106. rementushu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    107. //ValidatorUtils.validateEntity(rementushu);
    108. rementushuService.insert(rementushu);
    109. return R.ok();
    110. }
    111. /**
    112. * 修改
    113. */
    114. @RequestMapping("/update")
    115. @Transactional
    116. public R update(@RequestBody RementushuEntity rementushu, HttpServletRequest request){
    117. //ValidatorUtils.validateEntity(rementushu);
    118. rementushuService.updateById(rementushu);//全部更新
    119. return R.ok();
    120. }
    121. /**
    122. * 删除
    123. */
    124. @RequestMapping("/delete")
    125. public R delete(@RequestBody Long[] ids){
    126. rementushuService.deleteBatchIds(Arrays.asList(ids));
    127. return R.ok();
    128. }
    129. /**
    130. * 提醒接口
    131. */
    132. @RequestMapping("/remind/{columnName}/{type}")
    133. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
    134. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    135. map.put("column", columnName);
    136. map.put("type", type);
    137. if(type.equals("2")) {
    138. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    139. Calendar c = Calendar.getInstance();
    140. Date remindStartDate = null;
    141. Date remindEndDate = null;
    142. if(map.get("remindstart")!=null) {
    143. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    144. c.setTime(new Date());
    145. c.add(Calendar.DAY_OF_MONTH,remindStart);
    146. remindStartDate = c.getTime();
    147. map.put("remindstart", sdf.format(remindStartDate));
    148. }
    149. if(map.get("remindend")!=null) {
    150. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    151. c.setTime(new Date());
    152. c.add(Calendar.DAY_OF_MONTH,remindEnd);
    153. remindEndDate = c.getTime();
    154. map.put("remindend", sdf.format(remindEndDate));
    155. }
    156. }
    157. Wrapper<RementushuEntity> wrapper = new EntityWrapper<RementushuEntity>();
    158. if(map.get("remindstart")!=null) {
    159. wrapper.ge(columnName, map.get("remindstart"));
    160. }
    161. if(map.get("remindend")!=null) {
    162. wrapper.le(columnName, map.get("remindend"));
    163. }
    164. int count = rementushuService.selectCount(wrapper);
    165. return R.ok().put("count", count);
    166. }
    167. }

     

  • 相关阅读:
    java之递归搜索本地磁盘
    设计模式--享元模式和组合模式
    第二十三章 反射和注解
    Javascript——处理字符串单引号
    【STM32快速上手】点灯只需4步
    Vue3新特性指南:探索新增指令、内置组件和改进
    【技术干货】如何通过 DP 实现支持经典蓝牙的联网单品设备与 App 配对
    C国演义 [第十二章]
    BatchNorm、LayerNorm、InstanceNorm、GroupNorm、WeightNorm
    AlphaLinux配置宽带拨号上网
  • 原文地址:https://blog.csdn.net/m0_49113107/article/details/125892672