图书推荐系统(附源码链接)

1 篇文章 0 订阅

目录

一、项目功能描述

二、功能展示页面

1.登录注册

 2.管理员

2.1 图书管理

2.2 用户管理

 2.3 个人信息

2.4 修改密码

3.用户端

3.1 图书馆

3.2 借阅

3.3 个人信息

3.4 推荐

总结


项目地址:luochen1513/exercises-project (github.com)icon-default.png?t=N0U7https://github.com/luochen1513/exercises-project

一、项目功能描述

本项目是图书推荐系统适用于学校的书籍管理,该系统提供默认的管理员账号。

管理员端:登陆后可以对图书的信息进行增删改查,对用户的信息也可以进行增删改查同时在编辑页面的密码会有重置按钮,可以对所有用户的密码进行重置,若重置当前用户密码,则会跳转登陆,重新进行系统,可以修改密码,修改个人信息以及退出。添加图书时,可以点击新增添加一本图书,也可以选择上传CSV文件,批量新增,它使用spark读取csv文件并写入mysql,查询的搜索框在后台使用QueryWrapper来模糊查询。

用户端:用户可以注册登录该系统,登录成功后进入图书馆页面,这里展示了所有的图书信息,可以查看某图书详情,也可以点击借阅按钮,在借阅页面会显示已借图书,点击删除即可归还,用户自己注册账号,信息不全,可在个人信息页面进行完善或修改,同时用户也可以修改自己的密码(本系统密码使用MD5加密),最后重头戏当然是推荐功能,本系统会记录用户对不同书籍详情的点击次数,从而根据该信息通过基于用户的协同过滤算法完成推荐,它是使用python及spark的mllib库训练模型,在使用python调用模型,并将其封装为函数保存在py文件,在java代码中通过使用cmd调用python解释器去执行py文件,再获取结果,这个结果是图书的id,根据id查询数据库渲染页面。

二、功能展示页面

1.登录注册

 点击注册会跳转注册页面,同样可以点击登录跳回来

 2.管理员

2.1 图书管理

点击新增可以添加单个图书信息,选择文件可以批量新增,搜索框可以选择关键字进行模糊查询,每一个图书都对应了查看详情,修改,删除的按钮

2.2 用户管理

 点击新增可以添加用户,每个用户都有详情,修改,删除的按钮,搜索框可根据用户名模糊查询,点击编辑可以修改个人信息,密码栏是重置面按钮

 2.3 个人信息

 点击编辑个进入编辑状态,若突然不想编辑可以点击取消,修改好就可以点击确定提交

2.4 修改密码

 输入旧密码,新密码并确认即可提交,出现错误,会有错误提示,比如旧密码不正确等

3.用户端

3.1 图书馆

 该页面显示了所有在馆的图书,可根据书名和出版社模糊查询,并且进行详情查询以及借阅,借阅书籍会显示到借阅页面

3.2 借阅

此页面显示已借阅书籍,并且可以查看详情,删除即可归还 

3.3 个人信息

 若是用户自己新注册账号,则会发现信息不完善,需要自己填写,已填写的可以修改,点击编辑修改,确定提交

3.4 推荐

 推荐页面显示固定数量的书籍,因为是调用python代码以及spark mllib的模型,所有响应时间较长


总结

        本次项目是对本学期以来学习知识的复习,本次完成了以前没有做过得功能,对其体会更加的深刻,例如xls转csv,对于小文件还可以,像本次的数据有5万多条,将其转换甚是耗时,其次是谷歌kaptcha验证码工具,还实现了python的调用,因为spark上课学习的是pyspark,虽然java也能够实现,但是不熟,成本代价太高,则使用python+spark训练模型以及模型加载,通过java调用即可,当然,由于数据量太大,spark实现的将数据批量写入mysql也是需要耗时,不过也能接受,在后端ssm中,使用mybatisplus的分页插件对数据做分页查询时,不够熟练,将Ipage对象put到map集合,在前端需要使用data.data.records获取,与别的获取不一样,还有就是使用QueryWrapper做模糊查询,由于不熟练,没想到.eq()和.last()方法,使得一开始sql语句多拼接另了where。还有是我习惯于使用热部署插件的debug运行,可是它对mybatis映射文件作用不够好,不会识别映射文件的修改,导致经常不记得需要重启服务器,还有就是dao层接口有许多的参数,一般要加@Param注解,有的参数不能封装为对象,只能加注解,如果使用对象传参就比较方便,还有很多其他方面的问题,就不一一列举了。

  • 6
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
很抱歉,我是一个语言模型AI,无法提供源码,但我可以给您一些指导。 要基于Spark构建新闻推荐系统,您需要考虑以下几点: 1. 数据集:您需要有足够的新闻数据集,可以从互联网上爬取或者从已有的数据集中获取。 2. 特征提取:使用Spark对新闻数据进行特征提取,例如TF-IDF,Word2Vec等。 3. 模型训练:使用Spark MLlib构建模型,例如协同过滤,随机森林等。 4. 实时推荐:使用Spark Streaming对新闻进行实时推荐,例如基于用户历史行为的推荐,基于新闻相似性的推荐等。 以下是一个简单的基于Spark的新闻推荐系统的代码示例: ```scala import org.apache.spark.ml.recommendation.ALS import org.apache.spark.sql.functions._ // 读取新闻数据 val newsDF = spark.read.format("csv").load("news.csv") // 对新闻数据进行特征提取 val newsFeatures = newsDF.select($"id", tokenize($"title").as("tokens")) .select($"id", explode($"tokens").as("token")) .groupBy($"id", $"token") .count() .withColumnRenamed("count", "tf") .join(idf, Seq("token")) .withColumn("tf_idf", $"tf" * $"idf") // 训练ALS模型 val als = new ALS() .setRank(10) .setMaxIter(10) .setRegParam(0.01) .setUserCol("user_id") .setItemCol("item_id") .setRatingCol("rating") val model = als.fit(ratings) // 对新用户进行推荐 val newUser = Seq((0, 5), (1, 4), (2, 2)).toDF("user_id", "item_id") val recommendations = model.transform(newUser) // 对已有用户进行推荐 val userRecs = model.recommendForAllUsers(10) ``` 这只是一个简单的示例,具体实现还需要根据您的需求进行调整和优化。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生气要吃糖吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值