免费网站制作报价马关县网站建设

张小明 2026/1/19 22:09:23
免费网站制作报价,马关县网站建设,烟台做网站系统,广告联盟赚钱平台图书推荐与管理系统(Qmazon) 简介 这是本人于本科二年级时修读的面向对象的程序设计(C)的课程作业。该系统实现了一个关于图书的评论与推荐系统#xff0c;类似亚马逊、当当与豆瓣。该系统使用 C 作为编程语言#xff0c;并使用了 Qt 程序开发框架完成了程序的…图书推荐与管理系统(Qmazon)简介这是本人于本科二年级时修读的面向对象的程序设计(C)的课程作业。该系统实现了一个关于图书的评论与推荐系统类似亚马逊、当当与豆瓣。该系统使用 C 作为编程语言并使用了 Qt 程序开发框架完成了程序的可视化搭建了类似 PC 版 QQ 风格的界面具有很高的美观度。本系统针对图书推荐这一核心功能采用了基于用户的协同过滤算法并结合基于人口统计学的冷启动推荐算法完成了推荐模块的设计。数据集 Book-Crossing压缩包内数据集三个 CSV 文件请手动去掉文件最后一行的空行并在编译项目后将数据放至 build 目录相应编译模式文件夹下系统展示图需求分析此系统对我们提出的需求可以分为前端功能和后端功能前端功能即普通用户的一些操作功能包括用户的注册、登录、获取推荐、打分、评论、更改信息、注销账户、查找图书、查找好友等功能后端功能包括管理员的一些操作功能包括管理员的登录、添加图书、删除图书、更改图书信息、添加新用户、删除用户、更改用户资料、查找图书、查找用户、注销账户等功能。因此在 CLI命令行界面下我们需要首先设置登录与注册功能、登陆后根据登录身份的不同来设计可以进行的不同功能。而在 GUI图形用户界面下我们需要设置登录界面、注册界面、管理员功能界面、用户功能界面、以及用户的各个子功能界面。命令行界面的实现将通过 VS、Dev-Cpp 来实现而图形化界面将在 CLI 代码的基础上通过 Qt Creator 编译并实现。类的设计本程序主要的类有两个其定义在 base.h 头文件中图书(book)类与用户(user)类。具体定义及操作可见 base.h 头文件这里便不再多说。其函数具体定义在 Main.cpp 文件中。文件操作1、图书信息使用 ifstream 打开文件后将每条读入的数据暂存到一个 Book 类型的 newbook 中这本书的所有数据读完之后将 newbook 使用books.insert(mapstring, Book::value_type(IS, newbook));加入到总的 book 这个 map 类型的对象中中。其中 IS 为 newbook 的 ISBN 码直接用来索引图书。书的各类信息分隔使用getline(file, value, ;); IS string(value, 1, value.length() - 2);表示读到“”之前的数据并且 IS 的内容是 value 去掉最前面的“与最后面的”所得。最后使用cfile.close();关闭文件。2、用户信息与图书信息的读入过程类似。3、评分信息先用 ifstream 打开文件之后用getline(file, value, ;); string(value, 1, value.length() - 2);读入 IS 与 ID再直接利用 map 的索引将信息读入每个信息的对应项之中。并且增加读过这个 book 的用户信息与这个 user 看过的图书信息。users[ID].booksRead.insert(mapstring, int::value_type(IS, rank)); books[IS].usersRead.insert(mapstring, int::value_type(ID, rank));最后使用 file.close();关闭文件。并且读完用户全部评分信息后使用迭代器将每个 book 与每个 user 的平均评分求出。例下面就是求出每个 book 的平均分的代码。mapstring, Book::iterator iter books.begin(); for (; iter ! books.end(); iter) { iter-second.aveRank iter-second.sum / iter-second.cnt; }4、文件回写由于又增加修改删除的图书用户等在使用过一遍系统后要将所有信息全部重新写入。book 文件写回先用 ofstream 打开文件之后先写回标题栏。file \ISBN\;\Book-Title\;\Book-Author\;\Year-Of-Publication\;\Publisher\ ;\Image-URL-S\;\Image-URL-M\;\Image-URL-L\ endl;之后将每一类信息写回双引号使用\”表示。最后file.close();关闭文件。user 文件写回。先用 ofstream 打开文件之后先写回标题栏。file2 \User-ID\;\Location\;\Age\ endl;之后将每一类信息写回双引号使用\”表示。最后file.close();关闭文件。rank 文件写回。先用 ofstream 打开文件之后先写回标题栏。file3 \User-ID\;\ISBN\;\Book-Rating\ endl;之后将每一类信息写回双引号使用\”表示。最后file.close();关闭文件。基于用户的协同过滤推荐算法对于一个已经读过几本书的用户我们采用的推荐方法便是采用正常的基于用户的协同过滤算法。基于用户的协同过滤推荐算法的基本思想便是首先依据依据用户对物品的评价计算出所有用户之间的相似度之后选出与当前用户最相似的 N 个用户再用 N 个邻居用户对物品的评分预测当前用户对没有浏览过的物品的可能评分最后按照预测出的可能评分的高低向当前用户推荐物品。 接下来将对算法的实现进行详细介绍。算法在程序中的位置为 recommendsystem1.cpp 中的User:: getrecommendation()首先我们要先进行对与所有用户的相似度计算。计算的基本公式如下当我们计算当前用户 A 与用户 B 的相似度时首先我们要先去遍历 A 读过的书从这些书里去找到 B 同样也读过的书找到相应的书后这本书便是公式中的 p。以上公式可分为三个求和部分因此函数中我采用了 sumup,sumdown1,sumdown2 分别累加。之后通过套用公式并对所有其共同读过的书进行累加计算出用户 A 与 B 的相似度并通过第一层类似地计算出 A 与所有用户的相似度将相似度存于一个mapstring, doubleSims即当前用户与 id 为 String 的用户的相似度。到这里我们计算出了当前用户与所有用户的相似度接下来我们便可以选取邻居用户进行预测分数。在这里的邻居用户数我选定为全体用户27w原因是由于数据集本来就是就很稀疏本来能够拥有相似度的用户就很少因此采用全体用户即可最为准确的进行推荐且不会造成速度上的缓慢。预测公式如下首先我们从所有书中去遍历并筛选出该用户没有读过的书假定现在我们要预测图书 P 的预测评分则接下来去从所有读过 P 的人中去寻找找到与当前用户有相似度的用户按照上边的公式进行计算并累加便可以计算出 P 的预测评分。类似地便可以计算出所有图书的预测评分。在这里我将所有预测评分存在了一个 mapstring, double RankPre 中string 指的是书的 ISBN 码double 指评分。之后便是排序过程这里我首先写了一个将 map 中的元素按降序排列并存储在 Vector 的函数void sortMapByValue(mapstring, double tMap, vectorpairstring, double tVector)将之前的 Rankpre 排序后存于 Rvector 中接下来便可以将 Rvector 前几个元素输出即为推荐图书了。在计算推荐图书的过程实际上也顺便进行了推荐好友的计算即相似度 Sims 已被我们存储。之后再将 Sims 调用 sortMapByValue 函数进行降序排列并存于 Svector 中再输出前几个元素便为推荐好友。同时还有一点值得注意。如果一个用户读过书但读的书过于少或过于“冷门”以至于没有人与其读过相同的书即没有人和他拥有相似度则对他仍作冷启动处理。以上便是算法的原理与实现的基本内容。还有值得一提的地方便是如果两个用户读过的书一模一样直观上来说其相似度应该是非常大的1但套用公式分母则是 0无法计算因此我采用了特殊处理如果两个用户读过的书完全一样isequal则相似度直接置 1这样或多或少能够降低误差考虑了极端情况。Qt 框架的使用本项目使用了 Qt 进行了 C 的可视化。在 Main.cpp 函数中首先要将 Qt 自动产生的各个界面的头文件引入。之后对每个界面每个按钮的事件进行函数书写即可。如删除图书的事件触发函数void menu_admin::on_pushButton_3_clicked() { bool ok; // 获取字符串 QString qid QInputDialog::getText(this,tr(input), tr(input the id:),QLineEdit::Normal,tr(admin),ok); string idqid.toStdString(); if(books.find(id)!books.end()){ books[id].deletebook(); } else{ QMessageBox::information(this,tr(tip), tr(cannot find so you cannot delete!),QMessageBox::Ok); } }本项目一大亮点之一便是出色的 ui 设计。而 ui 设计的完成很大一方面也要归功于 Qt 这一框架强大的 ui 设计功能。我们在 Qt 的 ui 模式下可视化操作设计过程并通过 qss 文件进行辅助而 qss 文件的语法与 CSS 是极其相似的因此也极易上手。时空分析1、时间复杂度本程序主要的用的容器是 map。在 C 中map 根据 key 的值去查找本质上讲使用的是红黑树的数据结构因此搜索时的时间复杂度为 O(logn)。在 map 插入一个键值对时因为没有最优位置暗示所以插入删除的时间复杂度为 O(logn)而插入删除多个键值对的时间复杂度为 O(nlogn)但由于图书用户信息的修改只是有限的几次故可以直接认为时间复杂度为 O(logn)。在文件读取时就已求出书的平均分并存好数据这里时间复杂度为 O(n)。文件写回时也是一次性顺序写回时间复杂度也为 O(n)。修改图书、用户信息用户评分的时间复杂度都是 O(1)。冷启动推荐算法将用户按照信息相似度匹配时间复杂度为 O(n)依次取出用户高评分书籍或者根据 200 个最相似用户的评分预测当前用户评分时间复杂度为 O(1)因为 200 个用户相对于总共 20 万用户来说可看作一个小的常数。基于用户的协同过滤算法为指定用户推荐图书时先找出与当前用户相似的用户时间复杂度为 O(n),再按照协同过滤算法公式预测计算由于每个用户读过的书数量不会太多且固定所以可以看做常数时间复杂度为 O(n)。综上本实验的时间复杂度为时间复杂度为 O(n)。2、空间复杂度本程序的存储思想类似于稀疏矩阵并不是建立一个 N*M 的用户 — 图书二维数组而是只保存有意义的信息值。尽管同一项键值对保存了两次每种图书被哪些用户看过及评分每个用户看过哪本图书及评分但这并不影响最终的空间复杂度相当于最终空间复杂度为 O(n*m)。且 map 容器的空间复杂度为 O(n)与 O(m)。所以最终程序的空间复杂度为 O(n*m)。未来展望与改进由于程序采用文件操作而本项目的数据集较大三个 CSV 文件共计 118MB故程序入口处的文件读取操作是耗时且用户体验较差的。由于二年级上学期未学习数据库的相关课程因此没有采用数据库存储这也是一大遗憾。相信本项目若是之后能采用数据库存储数据必然能够很大程度上增进用户体验。♻️ 资源大小387KB➡️资源下载https://download.csdn.net/download/s1t16/87400358注更多内容可关注微信公众号【神仙别闹】如当前文章或代码侵犯了您的权益请私信作者删除
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

大连h5建站模板常熟网站建设书生商友

CosyVoice3 容器化部署:让语音克隆真正“开箱即用” 在AI生成内容(AIGC)浪潮席卷各行各业的今天,语音合成技术正从“能说”迈向“像人一样自然地说”。尤其是声音克隆能力——只需几秒音频就能复刻一个人的声音特征——已经不再是…

张小明 2026/1/17 16:45:35 网站建设

请人开发网站多少钱网站有什么类型

目录摘要项目技术支持论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作摘要 基于UniApp和SpringBoot的酒水供应商订购商城配送系统与客户管理小程序,整合了多端开发与后端服…

张小明 2026/1/17 16:45:36 网站建设

青岛市做网站优化东莞市官网网站建设价格

还在为NVIDIA显卡的DLSS技术眼红吗?觉得自己的AMD或Intel显卡在超分辨率技术上落后了?别担心,OptiScaler这个开源神器将彻底改变你的游戏体验,让任何显卡都能享受顶级的超分辨率技术! 【免费下载链接】OptiScaler DLSS…

张小明 2026/1/17 16:45:37 网站建设

用html做网站顺序咸宁公司做网站

ElasticSearch Java APIs 详解 1. 批量操作(Bulk) ElasticSearch 的批量 API 允许将多个索引、删除和更新请求打包在一个请求中,并分别分析这些请求的响应。示例代码如下: BulkResponse response = client.prepareBulk().add(client.prepareIndex("library",…

张小明 2026/1/19 5:25:22 网站建设

在什么网站可以做推广小熊代刷推广网站

FaceFusion能否用于军事训练?虚拟敌我识别演练在城市巷战的昏暗走廊中,一名士兵透过瞄准镜锁定目标——那是一个穿着我方制服、手持步枪的人。他正用熟悉的口音喊着“别开枪!我是三连的!”可就在下一秒,对方突然抬枪射…

张小明 2026/1/17 16:45:39 网站建设

怎么建立图片的网站吗三门峡网站制作

YOLOv11模型评估指标解读:基于PyTorch-CUDA-v2.6输出结果 在智能监控、自动驾驶和工业质检等场景中,目标检测的精度与实时性直接决定了系统的可用边界。YOLO(You Only Look Once)系列作为实时检测领域的标杆,其最新迭代…

张小明 2026/1/17 16:45:40 网站建设