【原创唯一】基于微信小程序+uni-app+Vue3的学生选课管理系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)
作者介绍:专注于计算机课设、毕设辅导,本人开发,原创代码,一题一稿,绝不撞题,坚持原创,个人创作,非工作室,源码全网唯一。
✅ 原创唯一:个人原创开发,独立设计数据库与业务逻辑,拒绝工作室代码改造
✅ 技术主流:SpringBoot+Vue+uni-app前后端分离,MySQL,Echarts,可本地运行
✅ 配套资料:源码 + 数据库 + 实验报告/论文 + 答辩 PPT+部署演示+远程调试+问题解答
🍅文末获取联系🍅
学生选课管理系统小程序摘要
随着移动互联网的普及,高校教务管理逐步向移动端延伸。本文以软件工程方法为指导,设计并实现了一套基于 uni-app 3 与 Spring Boot 3 的高校选课系统学生端微信小程序。系统采用前后端分离架构,后端提供 RESTful API,小程序端使用 Vue 3 Composition API 与 uView Plus 组件库构建用户界面。在权限设计上,课程浏览与公告展示支持游客免登录访问,选课、退课、课表查询及个人资料管理等交互功能需学生身份登录后使用。本文详细阐述了系统需求分析、总体设计、数据库设计、核心功能实现及测试过程,并通过功能测试与接口测试验证了系统的正确性与可用性。测试结果表明,该系统能够满足在校生移动端选课的基本业务需求,具有良好的易用性与可维护性。
技术栈: Spring Boot3+uni-app+Vue3+uViewPlus+Vite+MybatsiPlus+Echarts+微信小程序
数据库表:6张

技术范围:SpringBoot、Vue、数据可视化、小程序、HLMT、Nodejs、uni-app、MySQL数据库、ElementUi等设计与开发。
适用范围:软件工程、软件技术、数据库课程设计、计算机科学与技术、数据库系统原理、JavaWeb开发、JavaEE、Java、Web应用开发、动态网页设计的课程设计、课设、大作业、课程实验、期末作业
实验报告参考内容
实验报告可供大家参考使用



用户端功能(小程序)




教师端功能(后台)


管理员端功能(后台)




数据库设计
系统数据库设计为:

students(学生表)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
username |
varchar(50) |
UNIQUE, NOT NULL |
登录用户名 |
|
password |
varchar(100) |
NOT NULL |
BCrypt 加密密码 |
|
real_name |
varchar(50) |
NULL |
真实姓名 |
|
phone |
varchar(20) |
NULL |
联系电话 |
|
student_no |
varchar(30) |
NULL |
学号 |
|
enabled |
tinyint |
DEFAULT 1 |
账号启用状态 |
|
created_at |
datetime |
NULL |
创建时间 |
teachers(教师表)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
username |
varchar(50) |
UNIQUE, NOT NULL |
登录用户名 |
|
password |
varchar(100) |
NOT NULL |
加密密码 |
|
real_name |
varchar(50) |
NULL |
姓名 |
|
phone |
varchar(20) |
NULL |
电话 |
|
employee_no |
varchar(30) |
NULL |
工号 |
|
enabled |
tinyint |
DEFAULT 1 |
启用状态 |
|
created_at |
datetime |
NULL |
创建时间 |
courses(课程表)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
course_code |
varchar(30) |
UNIQUE, NOT NULL |
课程编号 |
|
name |
varchar(200) |
NOT NULL |
课程名称 |
|
credit |
decimal(3,1) |
DEFAULT 0 |
学分 |
|
classroom |
varchar(100) |
NULL |
上课教室 |
|
week_day |
int |
NOT NULL |
星期几 1-7 |
|
start_section |
int |
NOT NULL |
开始节次 |
|
end_section |
int |
NOT NULL |
结束节次 |
|
teacher_id |
bigint |
FK |
授课教师 ID |
|
max_students |
int |
DEFAULT 50 |
容量上限 |
|
enrolled_count |
int |
DEFAULT 0 |
已选人数 |
|
semester |
varchar(30) |
NULL |
学期 |
|
status |
varchar(20) |
DEFAULT PENDING |
OPEN/PENDING/REJECTED |
|
reject_reason |
varchar(200) |
NULL |
驳回原因 |
|
description |
varchar(500) |
NULL |
课程简介 |
|
created_at |
datetime |
NULL |
创建时间 |
|
updated_at |
datetime |
NULL |
更新时间 |
enrollments(选课记录表,uk_student_course 唯一约束)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
student_id |
bigint |
FK, NOT NULL |
学生 ID |
|
course_id |
bigint |
FK, NOT NULL |
课程 ID |
|
status |
varchar(20) |
DEFAULT ENROLLED |
选课状态 |
|
created_at |
datetime |
NULL |
选课时间 |
announcements(公告表)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
title |
varchar(200) |
NOT NULL |
公告标题 |
|
content |
text |
NOT NULL |
公告正文 |
|
admin_id |
bigint |
FK |
发布管理员 |
|
status |
tinyint |
DEFAULT 1 |
1 发布 0 下架 |
|
created_at |
datetime |
NULL |
发布时间 |
|
updated_at |
datetime |
NULL |
更新时间 |
admins(管理员表)
|
字段名 |
类型 |
约束 |
说明 |
|
id |
bigint |
PK, AUTO_INCREMENT |
主键 |
|
username |
varchar(50) |
UNIQUE, NOT NULL |
管理员用户名 |
|
password |
varchar(100) |
NOT NULL |
加密密码 |
|
real_name |
varchar(50) |
NULL |
姓名 |
|
phone |
varchar(20) |
NULL |
电话 |
|
enabled |
tinyint |
DEFAULT 1 |
启用状态 |
|
created_at |
datetime |
NULL |
创建时间 |
系统架构

Controller及Service层核心代码写法:
// 小程序公开浏览课程(无需登录)
@GetMapping("/browse")
public ApiResponse<PageResult<Course>> browse(
@RequestParam(required = false) String keyword,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
return ApiResponse.ok(courseService.browse(keyword, page, size));
}
// 小程序公开课程详情(无需登录)
@GetMapping("/public/{id}")
public ApiResponse<Course> publicDetail(@PathVariable Long id) {
return ApiResponse.ok(courseService.getPublicDetail(id));
}
// 课程分页列表接口
@GetMapping
@RequireRole({UserRole.ADMIN, UserRole.TEACHER, UserRole.STUDENT})
public ApiResponse<PageResult<Course>> list(
@RequestParam(required = false) String keyword,
@RequestParam(required = false) String status,
@RequestParam(required = false) String semester,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
return ApiResponse.ok(courseService.list(keyword, status, semester, page, size));
}
// 待审核课程列表接口
@GetMapping("/pending")
@RequireRole(UserRole.ADMIN)
public ApiResponse<PageResult<Course>> pending(
@RequestParam(required = false) String keyword,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size) {
return ApiResponse.ok(courseService.pendingList(keyword, page, size));
}
// 管理员新增课程接口
@PostMapping
@RequireRole(UserRole.ADMIN)
public ApiResponse<Course> createByAdmin(@Valid @RequestBody CourseDTO dto) {
return ApiResponse.ok("创建成功", courseService.createByAdmin(dto));
}
// 教师提交开课申请接口
@PostMapping("/apply")
@RequireRole(UserRole.TEACHER)
public ApiResponse<Course> apply(@Valid @RequestBody CourseDTO dto) {
return ApiResponse.ok("开课申请已提交", courseService.createByTeacher(dto));
}
// 编辑课程接口
@PutMapping("/{id}")
@RequireRole({UserRole.ADMIN, UserRole.TEACHER})
public ApiResponse<Course> update(@PathVariable Long id, @Valid @RequestBody CourseDTO dto) {
return ApiResponse.ok("更新成功", courseService.update(id, dto));
}
// 审核通过开课申请接口
@PutMapping("/{id}/approve")
@RequireRole(UserRole.ADMIN)
public ApiResponse<Course> approve(@PathVariable Long id) {
return ApiResponse.ok("审核通过", courseService.approve(id));
}
// 驳回开课申请接口
@PutMapping("/{id}/reject")
@RequireRole(UserRole.ADMIN)
public ApiResponse<Course> reject(@PathVariable Long id, @RequestBody Map<String, String> body) {
return ApiResponse.ok("已驳回", courseService.reject(id, body.get("reason")));
}
// 批量删除课程接口
@DeleteMapping("/batch")
@RequireRole({UserRole.ADMIN, UserRole.TEACHER})
public ApiResponse<Void> batchDelete(@RequestBody List<Long> ids) {
courseService.batchDelete(ids);
return ApiResponse.ok("删除成功", null);
}
// 删除课程接口
@DeleteMapping("/{id}")
@RequireRole({UserRole.ADMIN, UserRole.TEACHER})
public ApiResponse<Void> delete(@PathVariable Long id) {
courseService.delete(id);
return ApiResponse.ok("删除成功", null);
}
博主本身从事软件开发、有丰富的编程能力和水平,累积给上千名同学进行辅导,论文纯手写查重低于10%,全都顺利通过答辩!
擅长:功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。
更多个人原创作品👇🏻
获取联系
项目功能完整,可在本地运行,并可远程调试,确保运行顺利!
查看👇🏻👇🏻获取联系方式👇🏻👇🏻
更多推荐

所有评论(0)