作者介绍:专注于计算机课设、毕设辅导,本人开发原创代码一题一稿绝不撞题坚持原创个人创作非工作室源码全网唯一

原创唯一:个人原创开发,独立设计数据库与业务逻辑,拒绝工作室代码改造

技术主流: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、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。

更多个人原创作品👇🏻

原创课程设计大全✅

原创毕业设计集合✅

获取联系

项目功能完整,可在本地运行,并可远程调试,确保运行顺利!

查看👇🏻👇🏻获取联系方式👇🏻👇🏻

更多推荐