图书推荐与管理系统(Qmazon)
=============
简介
-------------
这是本人于本科二年级时修读的"面向对象的程序设计(C++)"的课程作业。该系统实现了一个关于图书的评论与推荐系统,类似亚马逊、当当与豆瓣。该系统使用C++作为编程语言,并使用了Qt程序开发框架完成了程序的可视化,搭建了类似PC版QQ风格的界面,具有很高的美观度。本系统针对图书推荐这一核心功能采用了基于用户的协同过滤算法,并结合基于人口统计学的冷启动推荐算法完成了推荐模块的设计。
数据集 :http://www2.informatik.uni-freiburg.de/~cziegler/BX/
数据集三个csv文件请手动去掉文件最后一行的空行!!!!!!!!
并在编译项目后,将数据放至build目录相应编译模式文件夹下!!!!!!!!
有对此项目感兴趣的朋友欢迎通过邮件与我交流:zymaa@ruc.edu.cn
或通过Wechat:r7ma_1
系统展示图
-------------
</br>
![Alt](http://i.imgur.com/eQuoHYh.png)
![Alt](http://i.imgur.com/QJBUnHO.png)
需求分析
-------------
此系统对我们提出的需求可以分为前端功能和后端功能,前端功能即普通用户的一些操作功能,包括用户的注册、登录、获取推荐、打分、评论、更改信息、注销账户、查找图书、查找好友等功能,后端功能包括管理员的一些操作功能,包括管理员的登录、添加图书、删除图书、更改图书信息、添加新用户、删除用户、更改用户资料、查找图书、查找用户、注销账户等功能。因此在CLI(命令行界面)下我们需要首先设置登录与注册功能、登陆后根据登录身份的不同来设计可以进行的不同功能。而在GUI(图形用户界面)下我们需要设置登录界面、注册界面、管理员功能界面、用户功能界面、以及用户的各个子功能界面。命令行界面的实现将通过VS、Dev-Cpp来实现,而图形化界面将在CLI代码的基础上通过Qt Creator编译并实现。
类的设计
-------------
本程序主要的类有两个,其定义在base.h头文件中:图书(book)类与用户(user)类。具体定义及操作可见base.h头文件,这里便不再多说。其函数具体定义在Main.cpp文件中。
文件操作
-------------
#### 1、图书信息
使用 ifstream打开文件后,将每条读入的数据暂存到一个Book类型的newbook中,这本书的所有数据读完之后,将newbook使用
```c++
books.insert(map<string, Book>::value_type(IS, newbook));
```
加入到总的book这个map类型的对象中中。其中IS为newbook的ISBN码,直接用来索引图书。
书的各类信息分隔使用
```c++
getline(file, value, ';');
IS = string(value, 1, value.length() - 2);
```
表示读到“;”之前的数据,并且IS的内容是value去掉最前面的“与最后面的”所得。
最后使用```c++file.close();```关闭文件。
#### 2、用户信息
与图书信息的读入过程类似。
#### 3、评分信息
先用ifstream打开文件,之后用
```c++
getline(file, value, ';');
string(value, 1, value.length() - 2);
```
读入IS与ID,再直接利用map的索引将信息读入每个信息的对应项之中。并且增加读过这个book的用户信息,与这个user看过的图书信息。
```c++
users[ID].booksRead.insert(map<string, int>::value_type(IS, rank));
books[IS].usersRead.insert(map<string, int>::value_type(ID, rank));
```
最后使用file.close();关闭文件。并且读完用户全部评分信息后,使用迭代器将每个book与每个user的平均评分求出。例下面就是求出每个book的平均分的代码。
```c++
map<string, Book>::iterator iter = books.begin();
for (; iter != books.end(); iter++)
{
iter->second.aveRank = iter->second.sum / iter->second.cnt;
}
```
#### 4、文件回写
由于又增加修改删除的图书用户等,在使用过一遍系统后要将所有信息全部重新写入。
#####book文件写回
先用ofstream打开文件,之后先写回标题栏。
```c++
file << "\"ISBN\";\"Book-Title\";\"Book-Author\";\"Year-Of-Publication\";\"Publisher\""<< ";\"Image-URL-S\";\"Image-URL-M\";\"Image-URL-L\"" << endl;
```
之后将每一类信息写回,双引号使用\”表示。
最后
```c++
file.close();
```
关闭文件。
#####user文件写回。
先用ofstream打开文件,之后先写回标题栏。
```c++
file2 << "\"User-ID\";\"Location\";\"Age\"" << endl;
```
之后将每一类信息写回,双引号使用\”表示。
最后
```c++
file.close();
```
关闭文件。
#####rank文件写回。先用ofstream打开文件,之后先写回标题栏。
```c++
file3 << "\"User-ID\";\"ISBN\";\"Book-Rating\"" << endl;
```
之后将每一类信息写回,双引号使用\”表示。
最后
```c++
file.close();
```
关闭文件。
基于用户的协同过滤推荐算法
-------------
对于一个已经读过几本书的用户,我们采用的推荐方法便是采用正常的基于用户的协同过滤算法。基于用户的协同过滤推荐算法的基本思想便是:首先依据依据用户对物品的评价计算出所有用户之间的相似度,之后选出与当前用户最相似的N个用户,再用N个邻居用户对物品的评分,预测当前用户对没有浏览过的物品的可能评分,最后按照预测出的可能评分的高低向当前用户推荐物品。 接下来将对算法的实现进行详细介绍。算法在程序中的位置为recommendsystem1.cpp中的
```c++
User:: getrecommendation()
```
首先我们要先进行对与所有用户的相似度计算。计算的基本公式如下:
![alt](http://i.imgur.com/wBY7J35.png)
</br>当我们计算当前用户A与用户B的相似度时,首先我们要先去遍历A读过的书,从这些书里去找到B同样也读过的书,找到相应的书后,这本书便是公式中的p。以上公式可分为三个求和部分,因此函数中我采用了sumup,sumdown1,sumdown2分别累加。之后通过套用公式并对所有其共同读过的书进行累加计算出用户A与B的相似度,并通过第一层类似地计算出A与所有用户的相似度,将相似度存于一个
```c++
map<string, double>Sims
```
即当前用户与id为String的用户的相似度。</br>
到这里我们计算出了当前用户与所有用户的相似度,接下来我们便可以选取邻居用户进行预测分数。在这里的邻居用户数我选定为全体用户(27w+),原因是由于数据集本来就是就很稀疏本来能够拥有相似度的用户就很少,因此采用全体用户即可最为准确的进行推荐且不会造成速度上的缓慢。预测公式如下:
![alt](http://i.imgur.com/FyhfoNd.png)
首先我们从所有书中去遍历,并筛选出该用户没有读过的书,假定现在我们要预测图书P的预测评分,则接下来去从所有读过P的人中去寻找,找到与当前用户有相似度的用户,按照上边的公式进行计算并累加,便可以计算出P的预测评分。类似地,便可以计算出所有图书的预测评分。在这里我将所有预测评分存在了一个map<string, double> RankPre中,string指的是书的ISBN码,double指评分。</br>
之后便是排序过程,这里我首先写了一个将map中的元素按降序排列并存储在Vector的函数
```c++
void sortMapByValue(map<string, double>& tMap, vector<pair<string, double> >& tVector)
```
将之前的Rankpre排序后存于Rvector中,接下来便可以将Rvector前几个元素输出即为推荐图书了。</br>
在计算推荐图书的过程实际上也顺便进行了推荐好友的计算,即相似度Sims已被我们存储。之后再将Sims调用sortMapByValue函数进行降序排列并存于Svector中,再输出前几个元素便为
没有合适的资源?快使用搜索试试~ 我知道了~
基于Qt C++ 图书推荐与评论系统GUI 协同过滤推荐.zip
共89个文件
cpp:17个
h:16个
ui:14个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 176 浏览量
2024-10-12
10:29:33
上传
评论
收藏 816KB ZIP 举报
温馨提示
基于Qt C++ 图书推荐与评论系统GUI 协同过滤推荐.zip个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的高分项目,评审分98分。主要针对计算机相关专业和需要项目实战练习的学习者,也可作为课程设计、期末大作业。个人经导师指导并认可通过的
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt C++ 图书推荐与评论系统GUI 协同过滤推荐.zip (89个子文件)
基于Qt C++ 图书推荐与评论系统GUI 协同过滤推荐
widget.ui 514B
.DS_Store 10KB
user_change.h 405B
signup.cpp 201B
3147171714602253922.jpg 18KB
widget.cpp 219B
add_users.ui 4KB
adduser.h 373B
signup.ui 10KB
menu_user.h 573B
qianlvjianbianbeijingsucai_5776471.jpg 43KB
book_add.cpp 215B
book_change.h 405B
14-16010G64403341.jpg 12KB
user_change.ui 8KB
menu_admin.ui 15KB
menu_admin.h 714B
.git
index 5KB
HEAD 23B
refs
heads
master 41B
tags
remotes
origin
HEAD 32B
objects
pack
pack-84f2d1412c98bf08cea2d65cdccf9578572f2262.pack 385KB
pack-84f2d1412c98bf08cea2d65cdccf9578572f2262.idx 5KB
pack-84f2d1412c98bf08cea2d65cdccf9578572f2262.rev 628B
info
description 73B
packed-refs 189B
info
exclude 240B
logs
HEAD 168B
refs
heads
master 168B
remotes
origin
HEAD 168B
hooks
post-update.sample 189B
sendemail-validate.sample 2KB
prepare-commit-msg.sample 1KB
commit-msg.sample 896B
pre-receive.sample 544B
update.sample 4KB
pre-commit.sample 2KB
pre-rebase.sample 5KB
applypatch-msg.sample 478B
fsmonitor-watchman.sample 5KB
push-to-checkout.sample 3KB
pre-applypatch.sample 424B
pre-push.sample 1KB
pre-merge-commit.sample 416B
config 302B
book_add.ui 9KB
zy617945748_1482237009817_97.png 15KB
myresource.cpp 0B
change_yourself.ui 8KB
main.cpp 65KB
42q58PICMCD_1024.png 257KB
asdasd.h 105B
loading.cpp 208B
menu_user.cpp 224B
change_yourself.h 481B
book_show_rank.cpp 257B
form.ui 399B
adduser.cpp 208B
a.txt 52B
add_users.cpp 222B
Qt_book2.pro 1KB
myqss.qss 882B
book_add.h 381B
book_change.ui 9KB
loading.ui 688B
change_yourself.cpp 268B
book_show_rank.ui 2KB
book_show_rank.h 337B
form.cpp 187B
form.h 257B
myico.ico 4KB
book_change.cpp 236B
signin.h 457B
asdasd.cpp 49B
add_users.h 297B
myico.rc 38B
user_change.cpp 236B
signup.h 443B
signin.cpp 221B
myresource.qrc 202B
Qt_book2.pro.user 24KB
adduser.ui 8KB
menu_admin.cpp 233B
Readme.md 12KB
menu_user.ui 13KB
base.h 2KB
loading.h 271B
widget.h 273B
signin.ui 6KB
共 89 条
- 1
资源评论
墨痕_777
- 粉丝: 4189
- 资源: 772
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功