- 学习数据库建模和设计
- SQL 实战项目实践
- 学生管理系统开发
✅ 项目目标
设计并实现一个学生选课系统,提供以下功能:
- 学生信息管理(增、删、改、查)
- 课程信息管理(增、删、改、查)
- 学生选课(选课、退课、查询已选课程)
- 管理员管理(学生、课程信息管理)
系统基于 MySQL 数据库设计,并结合 Spring Boot(可选)实现。
🧱 项目结构
student-course-system/
├── src/
│ ├── main/java/com/example/studentcourse/
│ │ ├── Controller/
│ │ │ ├── StudentController.java
│ │ │ ├── CourseController.java
│ │ └── Service/
│ │ ├── StudentService.java
│ │ ├── CourseService.java
│ └── resources/
│ ├── application.yml
├── db/
│ ├── schema.sql # 数据库表结构
│ └── data.sql # 测试数据
└── pom.xml # Maven 配置
📊 数据库设计
1. 学生表 student
CREATE TABLE `student` (
`student_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID',
`name` VARCHAR(50) NOT NULL COMMENT '学生姓名',
`gender` CHAR(1) NOT NULL COMMENT '性别',
`birth_date` DATE NOT NULL COMMENT '出生日期',
`email` VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
`phone` VARCHAR(15) NOT NULL COMMENT '电话',
`major` VARCHAR(50) NOT NULL COMMENT '专业'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 课程表 course
CREATE TABLE `course` (
`course_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID',
`course_name` VARCHAR(100) NOT NULL COMMENT '课程名称',
`credit` DECIMAL(3,1) NOT NULL COMMENT '学分',
`teacher` VARCHAR(50) NOT NULL COMMENT '授课教师',
`max_students` INT NOT NULL COMMENT '最大选课人数',
`semester` VARCHAR(20) NOT NULL COMMENT '学期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 选课表 student_course
CREATE TABLE `student_course` (
`student_id` INT NOT NULL,
`course_id` INT NOT NULL,
PRIMARY KEY (`student_id`, `course_id`),
FOREIGN KEY (`student_id`) REFERENCES `student`(`student_id`),
FOREIGN KEY (`course_id`) REFERENCES `course`(`course_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
🛠️ 后端实现
1. 学生管理 Controller StudentController.java
@RestController
@RequestMapping("/students")
public class StudentController {
@Autowired
private StudentService studentService;
@PostMapping("/add")
public ResponseEntity<String> addStudent(@RequestBody Student student) {
studentService.addStudent(student);
return ResponseEntity.ok("学生信息添加成功");
}
@GetMapping("/list")
public List<Student> listStudents() {
return studentService.listStudents();
}
@PutMapping("/update/{id}")
public ResponseEntity<String> updateStudent(@PathVariable("id") int id, @RequestBody Student student) {
studentService.updateStudent(id, student);
return ResponseEntity.ok("学生信息更新成功");
}
@DeleteMapping("/delete/{id}")
public ResponseEntity<String> deleteStudent(@PathVariable("id") int id) {
studentService.deleteStudent(id);
return ResponseEntity.ok("学生信息删除成功");
}
}
2. 课程管理 Controller CourseController.java
@RestController
@RequestMapping("/courses")
public class CourseController {
@Autowired
private CourseService courseService;
@PostMapping("/add")
public ResponseEntity<String> addCourse(@RequestBody Course course) {
courseService.addCourse(course);
return ResponseEntity.ok("课程信息添加成功");
}
@GetMapping("/list")
public List<Course> listCourses() {
return courseService.listCourses();
}
@PutMapping("/update/{id}")
public ResponseEntity<String> updateCourse(@PathVariable("id") int id, @RequestBody Course course) {
courseService.updateCourse(id, course);
return ResponseEntity.ok("课程信息更新成功");
}
@DeleteMapping("/delete/{id}")
public ResponseEntity<String> deleteCourse(@PathVariable("id") int id) {
courseService.deleteCourse(id);
return ResponseEntity.ok("课程信息删除成功");
}
}
3. 选课管理 StudentCourseController.java
@RestController
@RequestMapping("/student-courses")
public class StudentCourseController {
@Autowired
private StudentCourseService studentCourseService;
@PostMapping("/select")
public ResponseEntity<String> selectCourse(@RequestParam int studentId, @RequestParam int courseId) {
studentCourseService.selectCourse(studentId, courseId);
return ResponseEntity.ok("选课成功");
}
@DeleteMapping("/withdraw")
public ResponseEntity<String> withdrawCourse(@RequestParam int studentId, @RequestParam int courseId) {
studentCourseService.withdrawCourse(studentId, courseId);
return ResponseEntity.ok("退课成功");
}
@GetMapping("/student-courses/{studentId}")
public List<Course> getSelectedCourses(@PathVariable int studentId) {
return studentCourseService.getSelectedCourses(studentId);
}
}
🚀 测试数据与样例
data.sql
测试数据
INSERT INTO `student` (`name`, `gender`, `birth_date`, `email`, `phone`, `major`) VALUES
('张三', 'M', '2000-01-01', 'zhangsan@example.com', '13800000000', '计算机科学'),
('李四', 'F', '2001-02-02', 'lisi@example.com', '13900000000', '电子信息');
INSERT INTO `course` (`course_name`, `credit`, `teacher`, `max_students`, `semester`) VALUES
('数据结构', 3.0, '王老师', 50, '2023-春'),
('操作系统', 4.0, '李老师', 40, '2023-春');
INSERT INTO `student_course` (`student_id`, `course_id`) VALUES
(1, 1),
(1, 2),
(2, 1);
🔧 项目部署
- Spring Boot 项目:
- 使用
@SpringBootApplication
启动类运行项目。 - 默认端口:
8080
,可通过application.properties
修改。
- 使用
- MySQL 配置:
- 在
application.yml
或application.properties
配置数据库连接。
- 在
spring:
datasource:
url: jdbc:mysql://localhost:3306/student_course_system?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
- 运行项目:
- 使用
mvn spring-boot:run
启动项目。
- 使用
🎯 项目总结与建议
功能扩展
- 课程限制人数检查(选课时检查是否已满)
- 课程成绩管理(为每个学生记录课程成绩)
- 用户认证与权限管理(管理员与学生权限区分)
发表回复