系统摘要
随着移动互联网与微信生态的快速发展,传统 Web 新闻浏览方式已难以满足用户随时随地获取资讯的需求。本文以新闻管理系统为业务背景,按照软件工程生命周期方法,完成用户端微信小程序的设计与实现。系统后端采用 Spring Boot 3、MyBatis-Plus 与 MySQL 构建 RESTful 服务,前端小程序基于 uni-app 3、Vue 3 与 uView Plus 组件库开发,通过 JWT 实现用户身份认证,并区分「展示型功能免登录」与「交互型功能需登录」两类访问策略。
论文首先进行可行性分析与需求分析,明确管理员、编辑人、用户三类角色在 Web 端的分工,并聚焦用户端小程序的功能边界;随后给出系统总体架构、数据库详细表结构及接口设计;重点阐述小程序页面结构、会话管理、网络请求封装、TabBar 导航与核心业务页面实现;最后通过功能测试、接口测试与兼容性测试验证系统正确性。测试结果表明,小程序能够稳定完成新闻浏览、详情阅读、评论发表与个人资料管理等任务,满足课程设计与实际应用场景要求。
技术栈: Spring Boot3+uni-app+Vue3+uViewPlus+Vite+MybatsiPlus+Echarts+微信小程序
数据库表:5张
🍅文末获取联系🍅
🍅文末获取联系🍅
作者介绍:专注于计算机课设、毕设辅导,本人开发,原创代码,一题一稿,绝不撞题,坚持原创,个人创作,非工作室,源码全网唯一。
✅原创唯一:个人原创开发,独立设计数据库与业务逻辑,拒绝工作室代码改造
✅技术主流:SpringBoot+Vue+uni-app前后端分离,MySQL,Echarts,可本地运行
✅技术主流:SpringBoot + Vue 前后端分离,MySQL,Echarts数据统计,可本地运行
✅配套资料:源码 + 数据库 + 实验报告/论文 + 答辩 PPT+部署演示+远程调试+问题解答
技术范围:SpringBoot、Vue、数据可视化、小程序、HLMT、Nodejs、uni-app、MySQL数据库、ElementUi等设计与开发。
适用范围:软件工程、软件技术、数据库课程设计、计算机科学与技术、数据库系统原理、JavaWeb开发、JavaEE、Java、Web应用开发、动态网页设计的课程设计、课设、大作业、课程实验、期末作业
实验报告参考内容
实验报告可供大家参考使用
用户端功能(小程序端)
新闻编辑人端功能
管理员端功能
数据库设计
系统数据库设计为:
admins(管理员表)
表说明:后台管理员账号
字段名 | 类型 | 约束 | 说明 |
id | BIGINT | PK, AUTO_INCREMENT | 主键 |
username | VARCHAR(50) | NOT NULL, UNIQUE | 登录账号 |
password | VARCHAR(100) | NOT NULL | BCrypt 加密密码 |
real_name | VARCHAR(50) | NULL | 真实姓名 |
phone | VARCHAR(20) | NULL | 联系电话 |
enabled | TINYINT | NOT NULL, DEFAULT 1 | 1启用 0停用 |
created_at | DATETIME | NULL | 创建时间 |
editors(编辑人表)
表说明:新闻编辑发布账号
字段名 | 类型 | 约束 | 说明 |
id | BIGINT | PK, AUTO_INCREMENT | 主键 |
username | VARCHAR(50) | NOT NULL, UNIQUE | 登录账号 |
password | VARCHAR(100) | NOT NULL | BCrypt 加密密码 |
real_name | VARCHAR(50) | NULL | 姓名 |
phone | VARCHAR(20) | NULL | 手机号 |
editor_no | VARCHAR(30) | NULL | 编辑工号 |
enabled | TINYINT | NOT NULL, DEFAULT 1 | 启用状态 |
created_at | DATETIME | NULL | 创建时间 |
members(用户表)
表说明:小程序 C 端用户
字段名 | 类型 | 约束 | 说明 |
id | BIGINT | PK, AUTO_INCREMENT | 主键 |
username | VARCHAR(50) | NOT NULL, UNIQUE | 登录账号 |
password | VARCHAR(100) | NOT NULL | BCrypt 加密密码 |
real_name | VARCHAR(50) | NULL | 真实姓名 |
phone | VARCHAR(20) | NULL | 手机号 |
nickname | VARCHAR(50) | NULL | 昵称 |
enabled | TINYINT | NOT NULL, DEFAULT 1 | 启用状态 |
created_at | DATETIME | NULL | 注册时间 |
news(新闻表)
表说明:系统核心内容表
字段名 | 类型 | 约束 | 说明 |
id | BIGINT | PK, AUTO_INCREMENT | 新闻主键 |
title | VARCHAR(200) | NOT NULL | 标题 |
summary | VARCHAR(500) | NULL | 摘要 |
cover_image | VARCHAR(500) | NULL | 封面图 URL |
content | TEXT | NOT NULL | 正文 HTML |
editor_id | BIGINT | NOT NULL, FK | 发布编辑人 |
status | VARCHAR(20) | DEFAULT DRAFT | DRAFT草稿 PUBLISHED已发布 |
view_count | INT | DEFAULT 0 | 阅读次数 |
created_at | DATETIME | NULL | 创建时间 |
updated_at | DATETIME | NULL | 更新时间 |
comments(评论表)
表说明:用户对新闻的评价
字段名 | 类型 | 约束 | 说明 |
id | BIGINT | PK, AUTO_INCREMENT | 评论主键 |
news_id | BIGINT | NOT NULL, FK | 所属新闻 |
member_id | BIGINT | NOT NULL, FK | 评论用户 |
content | VARCHAR(1000) | NOT NULL | 评论内容 |
status | VARCHAR(20) | DEFAULT NORMAL | NORMAL正常 HIDDEN隐藏 |
created_at | DATETIME | NULL | 创建时间 |
updated_at | DATETIME | NULL | 更新时间 |
系统架构
Controller及Service层核心代码写法:
// 评论管理列表接口(管理员) @GetMapping("/admin") @RequireRole(UserRole.ADMIN) public ApiResponse<PageResult<Comment>> listAdmin( @RequestParam(required = false) String keyword, @RequestParam(required = false) Long news_id, @RequestParam(required = false) String status, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ApiResponse.ok(commentService.listAdmin(keyword, news_id, status, page, size)); } // 编辑人查看评价接口 @GetMapping("/editor") @RequireRole(UserRole.EDITOR) public ApiResponse<PageResult<Comment>> listEditor( @RequestParam(required = false) String keyword, @RequestParam(required = false) Long news_id, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ApiResponse.ok(commentService.listForEditor(keyword, news_id, page, size)); } // 新闻下评论列表接口 @GetMapping @RequireRole({UserRole.ADMIN, UserRole.EDITOR, UserRole.USER}) public ApiResponse<PageResult<Comment>> listByNews( @RequestParam Long news_id, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int size) { return ApiResponse.ok(commentService.listByNews(news_id, page, size)); } // 我的评论列表接口 @GetMapping("/my") @RequireRole(UserRole.USER) public ApiResponse<PageResult<Comment>> myComments( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ApiResponse.ok(commentService.myComments(page, size)); } // 发表评论接口 @PostMapping @RequireRole(UserRole.USER) public ApiResponse<Comment> create(@Valid @RequestBody CommentDTO dto) { return ApiResponse.ok("评论成功", commentService.create(dto)); } // 修改自己的评论接口 @PutMapping("/{id}") @RequireRole(UserRole.USER) public ApiResponse<Comment> updateOwn(@PathVariable Long id, @RequestBody CommentDTO dto) { return ApiResponse.ok("更新成功", commentService.updateOwn(id, dto.getContent())); } // 删除自己的评论接口 @DeleteMapping("/{id}/my") @RequireRole(UserRole.USER) public ApiResponse<Void> deleteOwn(@PathVariable Long id) { commentService.deleteOwn(id); return ApiResponse.ok("删除成功", null); } // 管理员隐藏/显示评论接口 @PutMapping("/{id}/status") @RequireRole(UserRole.ADMIN) public ApiResponse<Comment> setStatus(@PathVariable Long id, @RequestParam String status) { return ApiResponse.ok("操作成功", commentService.setStatus(id, status)); } // 管理员批量删除评论接口 @DeleteMapping("/batch") @RequireRole(UserRole.ADMIN) public ApiResponse<Void> batchDeleteByAdmin(@Valid @RequestBody IdsDTO dto) { commentService.batchDeleteByAdmin(dto.getIds()); return ApiResponse.ok("删除成功", null); } // 批量删除自己的评论接口 @DeleteMapping("/my/batch") @RequireRole(UserRole.USER) public ApiResponse<Void> batchDeleteOwn(@Valid @RequestBody IdsDTO dto) { commentService.batchDeleteOwn(dto.getIds()); return ApiResponse.ok("删除成功", null); } // 管理员删除评论接口 @DeleteMapping("/{id}") @RequireRole(UserRole.ADMIN) public ApiResponse<Void> deleteByAdmin(@PathVariable Long id) { commentService.deleteByAdmin(id); return ApiResponse.ok("删除成功", null); } @Transactional public Comment setStatus(Long id, String status) { Comment comment = commentMapper.selectById(id); if (comment == null) { throw new RuntimeException("评论不存在"); } if (!"NORMAL".equals(status) && !"HIDDEN".equals(status)) { throw new RuntimeException("无效状态"); } comment.setStatus(status); commentMapper.updateById(comment); relationFillHelper.fillComment(comment); return comment; } @Transactional public void deleteByAdmin(Long id) { if (commentMapper.selectById(id) == null) { throw new RuntimeException("评论不存在"); } commentMapper.deleteById(id); } @Transactional public void batchDeleteByAdmin(List<Long> ids) { if (ids == null || ids.isEmpty()) { throw new RuntimeException("请选择要删除的数据"); } commentMapper.deleteBatchIds(ids); } @Transactional public void batchDeleteOwn(List<Long> ids) { if (ids == null || ids.isEmpty()) { throw new RuntimeException("请选择要删除的数据"); } for (Long id : ids) { Comment comment = commentMapper.selectById(id); if (comment == null) { continue; } if (!comment.getMember_id().equals(AuthContext.getUserId())) { throw new RuntimeException("只能删除自己的评论"); } } commentMapper.deleteBatchIds(ids); }博主本身从事软件开发、有丰富的编程能力和水平,累积给上千名同学进行辅导,论文纯手写查重低于10%,全都顺利通过答辩!
擅长:功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。
更多个人原创作品👇🏻
原创课程设计大全✅
原创毕业设计集合✅
获取联系
项目功能完整,可在本地运行,并可远程调试,确保运行顺利!
查看👇🏻👇🏻获取联系方式👇🏻👇🏻