草庐IT

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

生气要吃糖吖 2024-01-01 原文

目录

一、项目功能描述

二、功能展示页面

1.登录注册

 2.管理员

2.1 图书管理

2.2 用户管理

 2.3 个人信息

2.4 修改密码

3.用户端

3.1 图书馆

3.2 借阅

3.3 个人信息

3.4 推荐

总结


项目地址:luochen1513/exercises-project (github.com)https://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注解,有的参数不能封装为对象,只能加注解,如果使用对象传参就比较方便,还有很多其他方面的问题,就不一一列举了。

有关图书推荐系统(附源码链接)的更多相关文章

  1. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  2. ruby-on-rails - Rails 中的推荐引擎 - 2

    我想为我的Rails网络应用程序提供推荐功能。特别是,我想向新注册的用户推荐他可能想要关注的其他用户。Rails中是否有用于此目的的引擎/gem?如果没有,我应该从哪里开始构建它?谢谢。 最佳答案 有Coletivogemhttps://github.com/diogenes/coletivo我试了一下。在MySQL上运行。Neo4jhttp://neo4j.org真的很容易实现一个“跟随谁”。事实上,大多数展示其能力的样本都涉及“跟随谁”。快速提示-只有在JRuby上运行时,Neo4j.rb才会很酷。如果不是-使用Neograph

  3. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  4. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. UE4 源码阅读:从引擎启动到Receive Begin Play - 2

    一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. ruby-on-rails - 一般建议和推荐的文件夹结构 - Sinatra - 2

    您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应

  9. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  10. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

随机推荐