当前位置: 首页 > news >正文

基于协同过滤算法的社交网络平台(协同过滤算法)

🎈系统亮点:协同过滤算法;

图形包含:用例图,系统结构图,er总图,er实体属性图。 未上传全部!!!

一.系统开发工具与环境搭建

1.系统设计开发工具


后端使用Java编程语言的Spring boot框架
项目架构:B/S架构
运行环境:win10/win11、jdk17


前端:
技术:框架Vue.js;UI库:ElementUI;
开发工具:Visual Studio Code;



后端:
技术:Java语言、mybatis plus、Spring boot框架;
开发工具:IDEA 2023.3.3版本;



数据库:
数据库:mysql5.7/8.0
数据库工具:Navicat12版本;


二. 系统实现(部分展示)

注册界面

用户注册,输入用户名,姓名,密码,确认密码,上传头像,输入验证码,注册成功跳转到登录界面。

关键代码如下:

public String SignIn(AppUserDto input){
LambdaQueryWrapper<AppUser> queryWrapper= Wrappers.<AppUser>lambdaQuery()
.eq(Extension.isNotNullOrEmpty(input.getUserName()),AppUser::getUserName,input.getUserName())
.eq(Extension.isNotNullOrEmpty(input.getPassword()),AppUser::getPassword,input.getPassword())
.eq(input.getRoleType()!=null,AppUser::getRoleType,input.getRoleType());
List<AppUser> items=_AppUserMpper.selectList(queryWrapper);
if(items.stream().count()==0)
{
throw  new CustomException("请检查登录的账号或者密码,角色是否都正确!");
}
Map<String, String> map = new HashMap<>();
map.put(SysConst.UserIdClaim,items.get(0).getId().toString());
map.put(SysConst.RoleTypeClaim,items.get(0).getRoleType().toString());
String token=JWTUtils.getToken(map);
return token;
}

登录界面

用户注册成功后,跳转到登录界面,在该界面上输入注册过的账号和密码,并输入验证码,成功后跳转到首页界面。

关键代码如下:

public AppUserDto Register(AppUserDto input) {
LambdaQueryWrapper<AppUser> queryWrapper = Wrappers.<AppUser>lambdaQuery()
.eq(input.getUserName()!=null,AppUser::getUserName,input.getUserName())
.eq(input.getPhoneNumber()!=null,AppUser::getPhoneNumber,input.getPhoneNumber());
//根据用户名称或用户电话号码进行查询
AppUser appUser = _AppUserMpper.selectOne(queryWrapper);
if(appUser!=null)
{
throw  new CustomException("该用户名或手机号已经存在!");
}
return  CreateOrEdit(input);
}

1.用户端

1 首页界面

用户登录成功后,跳转到首页,可以看到圈子社交话题,大家可以在这里浏览自己想看的话题,对于喜欢的话题进行收藏或者点赞操作,也可以分享给他人,发表自己的看法观点。对于作者,想要深入了解,可以进行添加好友,私下畅所欲言。

关键代码如下:

public PagedResult<TopicDto> RecommendTop10(TopicPagedInput input) {
PagedResult<TopicDto> topicDtoPagedResult = RecommendCollaborativeFilteringTopic(input);for (TopicDto item : topicDtoPagedResult.getItems()) {
//查询出关联的创建用户信息
AppUserDto  CreatorAppUserDTO=new AppUserDto();
AppUser  CreatorAppUserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getCreatorId()));
if(CreatorAppUserEntity!=null) {
BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
item.setCreatorAppUserDto(CreatorAppUserDTO);
}
//查询关联的Comment表信息
List<Comment> CommentEntitys = _CommentMapper.selectList(Wrappers.<Comment>lambdaQuery().eq(Comment::getTopicId, item.getId()));
List<CommentDto> CommentDTOS = Extension.copyBeanList(CommentEntitys, CommentDto.class);
item.setCommentDtos(CommentDTOS);
//查询出关联的TopicType表信息
TopicTypeDto TopicTypeDTO = new TopicTypeDto();
TopicType  TopicTypeEntity= _TopicTypeMapper.selectOne(Wrappers.<TopicType>lambdaQuery().eq(TopicType::getId,item.getTopicTypeId()));
if(TopicTypeEntity!=null) {
BeanUtils.copyProperties(TopicTypeDTO,TopicTypeEntity);
item.setTopicTypeDto(TopicTypeDTO);
}
}
return topicDtoPagedResult;
}

2 通知公告界面

这里展示系统所发表的通知公告信息,可以及时了解系统的最新消息和最新动态。用户首页界面图如图5-4所示。

关键代码如下:

public SysNoticeDto Get(SysNoticePagedInput input) {
if(input.getId()==null)
{
return new SysNoticeDto();
}
PagedResult<SysNoticeDto>  pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new SysNoticeDto();
}

3 好友申请界面

我的申请:展示你提交的好友申请,可以查看他人是否已通过你的好友申请。在他人申请:可以看到别人的好友申请,你可以选择是否同意该好友的申请。

4 我的好友界面

我的好友,这里展示所有的好友列表信息,和聊天信息,可以实时聊天。在最右边可以到聊天好友的信息,他发布的文章,也可以跳转到他的主页查看个人信息。

5.个人中心界面

个人中心可以看到自己的个人信息,收藏的文章,话题,评论数,曝光次数。我的登录轨迹,我发布的话题,浏览的记录,收藏的话题。

2管理员端

1 管理员首页界面

管理员登录成功后,跳转到管理后台首页,可以看到个人的登录轨迹。和左边列表功能树。

2 用户管理界面

管理员可以对用户进行管理,对用户进行增删改查操作,同时也支持导出用户信息。

关键代码:

public AppUserDto CreateOrEdit(AppUserDto input)  {//声明一个用户实体
AppUser AppUser = new AppUser();
//把前端传入的input参数拷贝到用户实体
BeanUtils.copyProperties(AppUser,input);
//如果前端没有给新密码,则把原始密码继续赋值
if(Extension.isNotNullOrEmpty(input.getPassword()))
{
input.setPassword(input.getOrginPassword());
}
//调用数据库的增加或者修改方法
saveOrUpdate(AppUser);
//定义一个返回给前端的用户传输模型
AppUserDto AppUserDto=new AppUserDto();
//同理把操作的用户实体拷贝给用户传输模型
BeanUtils.copyProperties(AppUserDto,AppUser);
//把传输模型返回给前端
return AppUserDto;
}

3 封面管理界面

管理员可以对封面进行管理,也就是平台的广告位,对封面进行增删改查操作。

关键代码:

public BannerDto Get(BannerPagedInput input) {
if(input.getId()==null)
{
return new BannerDto();
}
PagedResult<BannerDto>  pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new BannerDto();
}

4 系统通知管理界面

管理员可以对系统通知进行管理,平台的规则和消息及时同步给用户。

关键代码:

public SysNoticeDto CreateOrEdit(SysNoticeDto input) {
//声明一个系统通知实体
SysNotice SysNotice = new SysNotice();
//把前端传入的input参数拷贝到系统通知实体
BeanUtils.copyProperties(SysNotice,input);
//调用数据库的增加或者修改方法
saveOrUpdate(SysNotice);
//定义一个返回给前端的系统通知传输模型
SysNoticeDto SysNoticeDto=new SysNoticeDto();
//同理把操作的系统通知实体拷贝给系统通知传输模型
BeanUtils.copyProperties(SysNoticeDto,SysNotice);
//把传输模型返回给前端
return SysNoticeDto;
}

5 分享话题界面

管理员可以对用户发表的话题进行审核和下架操作,确保平台的所发的话题都是符合平台规则的。

5.4.6 话题评论界面

管理员可以对用户发表的话题评论进行审核,确保用户发表的言论都是符合社区规则的。

三.需求分析

(1) 管理员:

1. 管理用户信息:查看、编辑、删除用户账户。

2. 管理封面:上传和更换平台封面图片。

3. 管理系统通知:发布系统公告和更新信息。

4. 管理话题圈子:创建、编辑或删除话题圈子。

5. 管理分享话题:审查和删除不当的话题分享,确保内容合适。

6. 管理话题评论:监督评论区域,删除垃圾评论或违规内容

7. 管理浏览记录:监控用户在平台上的浏览行为。

8. 管理话题收藏:查看哪些话题被频繁收藏。

(2) 用户:

1. 登录注册:创建新账户并进行登录。

2. 查看个人中心:访问个人资料页面,查看和编辑个人信息,可查看自己的登录记录,包括时间。查看自己浏览过的话题和内容。发布新话题,分享自己的想法和内容。收藏其他用户发布的话题,方便后续查看。

3. 好友申请:查看收到的好友申请,并接受或拒绝。发送好友申请,与他人建立联系。

4. 通知公告:阅读平台发布的最新通知和公告。

5. 我的好友聊天:与好友进行即时通讯,发送消息。

6. 圈子社交:浏览和加入兴趣圈子,参与特定话题的讨论。在圈子内发帖和互动,与同好者建立联系。对感兴趣的话题进行收藏,方便以后再次访问。对话题表示喜欢或赞同,增加话题的热度。在话题下发表评论,与他人分享观点和想法。


http://www.mrgr.cn/news/70048.html

相关文章:

  • 数据结构中数据有序性/ 单调性 ——二分查找
  • GitLab 降级安装出现 500 错误,如何解决?
  • 【分布式】BASE理论
  • docker构建jdk11
  • Odrive源码分析(三) 数据结构
  • dom4j实现xml转map,xml转json字符串
  • 企业官网的在线客服,如何提高效果?
  • 英飞凌Aurix2G TC3XX GPT12模块详解
  • 【计网】数据链路层笔记
  • 大数据机器学习算法与计算机视觉应用04:多项式
  • Qt|绘制100万个图元大规模场景
  • 项目功能--运营数据统计报表导出
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • c++ floyd判圈算法
  • Spring中@Autowired@Resource和@Inject注解区别
  • 【Java集合面试1】说说Java中的HashMap原理?
  • int socket(int domain,int type,int protocol);
  • 力扣第47题“全排列 II”
  • 中国智能网联汽车技术规程(C-ICAP-2024版)之基础行车辅助测试介绍及文档分享24年7月1号实施
  • 嵌入式linux中HDMI驱动操作方法
  • 前端面试题23 | 使用require和import引入的资源有什么区别?
  • 连锁会员管理系统开发的必要性
  • 【计网】基于TCP协议的Echo Server程序实现与多版本测试
  • MatSci-LLM ——潜力和挑战以及大规模语言模型在材料科学中的应用
  • CNN中每一层的权重是一样的么?
  • STM32的端口引脚的复用功能及重映射功能解析