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

搭建一个基于Spring Boot的驾校管理系统

搭建一个基于Spring Boot的驾校管理系统可以涵盖多个功能模块,例如学员管理、教练管理、课程管理、考试管理、车辆管理等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的系统。


在这里插入图片描述

1. 项目初始化

使用 Spring Initializr 生成一个Spring Boot项目:

  1. 访问 Spring Initializr。
  2. 选择以下依赖:
    • Spring Web(用于构建RESTful API或MVC应用)
    • Spring Data JPA(用于数据库操作)
    • Spring Security(用于用户认证和授权)
    • Thymeleaf(可选,用于前端页面渲染)
    • MySQL Driver(或其他数据库驱动)
    • Lombok(简化代码)
  3. 点击“Generate”下载项目。

2. 项目结构

项目结构大致如下:

src/main/java/com/example/drivingschool
    ├── controller
    ├── service
    ├── repository
    ├── model
    ├── config
    └── DrivingSchoolApplication.java
src/main/resources
    ├── static
    ├── templates
    └── application.properties

3. 配置数据库

application.properties中配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/driving_school
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

4. 创建实体类

model包中创建实体类,例如StudentInstructorCourseExamVehicle等。

学员实体类 (Student)

package com.example.drivingschool.model;

import javax.persistence.*;
import java.util.Set;

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    private String phoneNumber;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private Set<Course> courses;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private Set<Exam> exams;

    // Getters and Setters
}

教练实体类 (Instructor)

package com.example.drivingschool.model;

import javax.persistence.*;
import java.util.Set;

@Entity
public class Instructor {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    private String phoneNumber;

    @OneToMany(mappedBy = "instructor", cascade = CascadeType.ALL)
    private Set<Course> courses;

    // Getters and Setters
}

课程实体类 (Course)

package com.example.drivingschool.model;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "student_id")
    private Student student;

    @ManyToOne
    @JoinColumn(name = "instructor_id")
    private Instructor instructor;

    @ManyToOne
    @JoinColumn(name = "vehicle_id")
    private Vehicle vehicle;

    private LocalDateTime startTime;
    private LocalDateTime endTime;

    // Getters and Setters
}

考试实体类 (Exam)

package com.example.drivingschool.model;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
public class Exam {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "student_id")
    private Student student;

    private LocalDateTime examDate;
    private String result;

    // Getters and Setters
}

车辆实体类 (Vehicle)

package com.example.drivingschool.model;

import javax.persistence.*;
import java.util.Set;

@Entity
public class Vehicle {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String make;
    private String model;
    private String licensePlate;

    @OneToMany(mappedBy = "vehicle", cascade = CascadeType.ALL)
    private Set<Course> courses;

    // Getters and Setters
}

5. 创建Repository接口

repository包中创建JPA Repository接口。

package com.example.drivingschool.repository;

import com.example.drivingschool.model.Student;
import org.springframework.data.jpa.repository.JpaRepository;

public interface StudentRepository extends JpaRepository<Student, Long> {
}

6. 创建Service层

service包中创建服务类。

package com.example.drivingschool.service;

import com.example.drivingschool.model.Student;
import com.example.drivingschool.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentService {
    @Autowired
    private StudentRepository studentRepository;

    public List<Student> getAllStudents() {
        return studentRepository.findAll();
    }

    public Student getStudentById(Long id) {
        return studentRepository.findById(id).orElse(null);
    }

    public Student saveStudent(Student student) {
        return studentRepository.save(student);
    }

    public void deleteStudent(Long id) {
        studentRepository.deleteById(id);
    }
}

7. 创建Controller层

controller包中创建控制器类。

package com.example.drivingschool.controller;

import com.example.drivingschool.model.Student;
import com.example.drivingschool.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping
    public String listStudents(Model model) {
        model.addAttribute("students", studentService.getAllStudents());
        return "students";
    }

    @GetMapping("/new")
    public String showStudentForm(Model model) {
        model.addAttribute("student", new Student());
        return "student-form";
    }

    @PostMapping
    public String saveStudent(@ModelAttribute Student student) {
        studentService.saveStudent(student);
        return "redirect:/students";
    }

    @GetMapping("/edit/{id}")
    public String showEditForm(@PathVariable Long id, Model model) {
        model.addAttribute("student", studentService.getStudentById(id));
        return "student-form";
    }

    @GetMapping("/delete/{id}")
    public String deleteStudent(@PathVariable Long id) {
        studentService.deleteStudent(id);
        return "redirect:/students";
    }
}

8. 创建前端页面

src/main/resources/templates目录下创建Thymeleaf模板文件。

students.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Students</title>
</head>
<body>
    <h1>Students</h1>
    <a href="/students/new">Add New Student</a>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>
                <th>Phone Number</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="student : ${students}">
                <td th:text="${student.id}"></td>
                <td th:text="${student.name}"></td>
                <td th:text="${student.email}"></td>
                <td th:text="${student.phoneNumber}"></td>
                <td>
                    <a th:href="@{/students/edit/{id}(id=${student.id})}">Edit</a>
                    <a th:href="@{/students/delete/{id}(id=${student.id})}">Delete</a>
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

student-form.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Student Form</title>
</head>
<body>
    <h1>Student Form</h1>
    <form th:action="@{/students}" th:object="${student}" method="post">
        <input type="hidden" th:field="*{id}" />
        <label>Name:</label>
        <input type="text" th:field="*{name}" /><br/>
        <label>Email:</label>
        <input type="text" th:field="*{email}" /><br/>
        <label>Phone Number:</label>
        <input type="text" th:field="*{phoneNumber}" /><br/>
        <button type="submit">Save</button>
    </form>
</body>
</html>

9. 运行项目

在IDE中运行DrivingSchoolApplication.java,访问http://localhost:8080/students即可看到学员列表页面。

—帮助链接:通过网盘分享的文件:share
链接: https://pan.baidu.com/s/1Vu-rUCm2Ql5zIOtZEvndgw?pwd=5k2h 提取码: 5k2h

10. 进一步扩展

  • 教练管理:实现教练的增删改查功能。
  • 课程管理:允许学员预约课程,并记录课程时间。
  • 考试管理:记录学员的考试时间和成绩。
  • 车辆管理:管理驾校的车辆信息。
  • 搜索功能:实现学员、教练、课程的搜索功能。
  • 分页功能:对学员列表进行分页显示。

通过以上步骤,你可以搭建一个基础的驾校管理系统,并根据需求进一步扩展功能。


http://www.kler.cn/a/511397.html

相关文章:

  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程
  • Spring Security 6.X + JWT + RBAC 权限管理实战教程(上)
  • 神经网络常见面试题
  • 【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)
  • PHP 8.4 安装和升级指南
  • 【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
  • 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)
  • Python request库简介与操作
  • 【蓝桥杯】Python算法——求逆元的两种算法
  • 4 AXI USER IP
  • 分布式IO模块在电动工具转子生产线的智能化转型
  • [创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想
  • Flink (七): DataStream API (四) Watermarks
  • GoLang 微服务学习笔记
  • 在 Vue 3 中实现插件化架构:设计可扩展的前端插件系统
  • 学习MyBatis的调优方案
  • 第14章:Python TDD应对货币类开发变化(一)
  • PyTorch 卷积神经网络全解析:从原理到实践
  • Ubuntu22.4挂载大于2.2T磁盘(27T大磁盘)
  • 递归练习三(决策树)
  • 53,【3】BUUCTF WEB october 2019 Twice SQLinjection
  • 82.提取条件模式
  • BUUCTF_Web([GYCTF2020]Ezsqli)
  • Linux中的文件上传和下载
  • 前后端分离的Java快速开发平台
  • 【万图找码】在大量图片中快速找出有二维码的图片