java实现学生选课系统

Java实现学生选课系统攻略

系统功能要求

  • 学生登录、退出登录
  • 查看所有课程列表
  • 查询某门课程的详细信息
  • 选课或退课
  • 查看已选课程列表

数据库设计

选课系统的数据模型可以包含以下几个实体:

  • 学生
  • 课程
  • 选课记录

可以使用MySQL作为数据库实现。下面是数据库表的设计:

表名 字段名 类型 约束
students id int 主键,自增长
username varchar(255) 唯一,非空
password varchar(255) 非空
courses id int 主键,自增长
name varchar(255) 唯一,非空
teacher varchar(255) 非空
credit int 非空
selections id int 主键,自增长
student_id int 外键,引用students表的id
course_id int 外键,引用courses表的id
selectionTime datetime 非空

系统实现

登录、退出登录

使用Session或JWT实现用户登录和鉴权,下面是一个简单的示例:

@Post("/login")
public Response login(@QueryValue String username, @QueryValue String password,
                      @SessionAttribute("user") User user) {
    if ("admin".equals(username) && "123456".equals(password)) {
        user.setUsername(username);
        return Response.redirect("/courses");
    } else {
        return Response.redirect("/login?error=true");
    }
}

@Post("/logout")
public Response logout(@SessionAttribute("user") User user) {
    user.setUsername(null);
    return Response.redirect("/login");
}

查看所有课程列表

可以使用Java的JDBC连接数据库,进行查询操作,下面是一个简单的示例:

public List<Course> findAll() throws SQLException {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "password");
         Statement stmt = conn.createStatement()) {
        try (ResultSet rs = stmt.executeQuery("SELECT * FROM courses")) {
            List<Course> courses = new ArrayList<>();
            while (rs.next()) {
                Course course = new Course();
                course.setId(rs.getLong("id"));
                course.setName(rs.getString("name"));
                course.setTeacher(rs.getString("teacher"));
                course.setCredit(rs.getInt("credit"));
                courses.add(course);
            }
            return courses;
        }
    }
}

查询某门课程的详细信息

使用Java的JDBC连接数据库,进行查询操作,下面是一个简单的示例:

public Course findById(long id) throws SQLException {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "password");
         PreparedStatement stmt = conn.prepareStatement("SELECT * FROM courses WHERE id = ?")) {
        stmt.setLong(1, id);
        try (ResultSet rs = stmt.executeQuery()) {
            if (rs.next()) {
                Course course = new Course();
                course.setId(rs.getLong("id"));
                course.setName(rs.getString("name"));
                course.setTeacher(rs.getString("teacher"));
                course.setCredit(rs.getInt("credit"));
                return course;
            }
            return null;
        }
    }
}

选课或退课

使用Java的JDBC连接数据库,进行插入和删除操作,下面是一个简单的示例:

public boolean insert(Selection selection) throws SQLException {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "password");
         PreparedStatement stmt = conn.prepareStatement("INSERT INTO selections (student_id, course_id, selectionTime) VALUES (?, ?, ?)")) {
        stmt.setLong(1, selection.getStudentId());
        stmt.setLong(2, selection.getCourseId());
        stmt.setTimestamp(3, Timestamp.valueOf(selection.getSelectionTime()));
        return stmt.executeUpdate() == 1;
    }
}

public boolean delete(Selection selection) throws SQLException {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "password");
         PreparedStatement stmt = conn.prepareStatement("DELETE FROM selections WHERE student_id = ? AND course_id = ?")) {
        stmt.setLong(1, selection.getStudentId());
        stmt.setLong(2, selection.getCourseId());
        return stmt.executeUpdate() == 1;
    }
}

查看已选课程列表

查询某个学生已选的所有课程,可以使用Java的JDBC连接数据库,下面是一个简单的示例:

public List<Course> findByStudentId(long studentId) throws SQLException {
    try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "user", "password");
         PreparedStatement stmt = conn.prepareStatement("SELECT c.* FROM selections s JOIN courses c ON s.course_id = c.id WHERE s.student_id = ?")) {
        stmt.setLong(1, studentId);
        try (ResultSet rs = stmt.executeQuery()) {
            List<Course> courses = new ArrayList<>();
            while (rs.next()) {
                Course course = new Course();
                course.setId(rs.getLong("id"));
                course.setName(rs.getString("name"));
                course.setTeacher(rs.getString("teacher"));
                course.setCredit(rs.getInt("credit"));
                courses.add(course);
            }
            return courses;
        }
    }
}

总结

Java实现学生选课系统可以使用Java的JDBC连接数据库进行增删改查操作,使用Session或JWT进行登录和鉴权。除了示例代码中的方法,还可以结合Spring Boot等框架实现更加高效、实用的选课系统,也可以使用ORM框架如Hibernate等简化数据库操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现学生选课系统 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 如何运行SpringBoot项目的方法

    如何运行Spring Boot项目的方法 Spring Boot是一个非常流行的Java开发框架,它提供了多种运行方式,包括命令行、Maven插件、Gradle插件等。本文将详细介绍如何运行Spring Boot项目的方法,包括命令行、Maven插件、Gradle插件等。 1. 命令行 使用命令行运行Spring Boot项目是最简单的方法。我们只需要在项目…

    Java 2023年5月14日
    00
  • Java使用jdbc连接MySQL数据库实例分析

    Java使用JDBC连接MySQL数据库实例分析 JDBC(Java Database Connectivity)是Java数据库开发的基石,通过JDBC,Java开发者可以通过简单易用的API连接各种关系型数据库,MySQL当然是其中之一。本文将介绍如何使用JDBC连接MySQL数据库。 步骤一:下载并安装MySQL数据库 在官网上下载MySQL Comm…

    Java 2023年6月16日
    00
  • Spring常用一些工具类实例汇总

    Spring常用一些工具类实例汇总 在Spring框架中,常用一些工具类方便开发和维护。本文将对一些常用的Spring工具类进行汇总和详细讲解。 1. Resource Resource作为一个资源文件的接口,提供了一个抽象的资源操作方式。Spring提供了很多实现这个接口的类。 使用示例1: 读取本地文件资源 Resource resource = new…

    Java 2023年5月19日
    00
  • 【Java】BigDecimal实现加减乘除运算代码

    Java BigDecimal实现加减乘除运算代码 Java中原生数据类型double和float的计算结果不一定准确,在金额等精度要求高的场景下,需要使用BigDecimal类进行运算。 BigDecimal概述 BigDecimal类是一个任意精度的,有符号十进制数的不可变对象,它提供了精确的数值运算。它比基本数据类型double和float更准确。在商…

    Java 2023年5月23日
    00
  • 图解排序算法之希尔排序Java实现

    让我来详细讲解一下“图解排序算法之希尔排序Java实现”的完整攻略。 1. 前言 本篇攻略摘自江南蓝山的“图解排序算法”系列文章,讲解希尔排序在Java中的实现方法。 2. 希尔排序简介 希尔排序是一种基于插入排序的快速排序算法,也被称为“缩小增量排序”。它的基本思想是将待排序的数组按照一定的间隔分成若干个子序列,然后对每个子序列分别进行插入排序。随着间隔不…

    Java 2023年5月26日
    00
  • springmvc学习笔记-返回json的日期格式问题的解决方法

    下面是“springmvc学习笔记-返回json的日期格式问题的解决方法”的完整攻略: Spring MVC 返回JSON的日期格式问题的解决方法 Spring MVC框架中,我们通常会使用JSON作为数据返回格式,但是在返回JSON数据的时候,日期格式往往会出现一些问题,本文将详细介绍如何解决Spring MVC返回JSON的日期格式问题。 问题描述 在S…

    Java 2023年5月26日
    00
  • java实现批量导入.csv文件到mysql数据库

    下面我来详细讲解如何使用Java实现批量导入.csv文件到MySQL数据库的攻略。 一、准备工作 导入MySQL依赖 在Maven项目中,需要在pom.xml文件中导入MySQL的依赖,代码如下: <dependency> <groupId>mysql</groupId> <artifactId>mysql-c…

    Java 2023年5月20日
    00
  • java数组的三种扩容方式以及程序实现详解

    Java数组的三种扩容方式以及程序实现详解 为什么需要数组扩容 在 Java 中,数组的长度是固定的,一旦数组被创建,它的大小就不能再改变了。在一些场景下,我们需要在运行时动态地改变数组的大小,那么就需要用到数组扩容。 例如,我们开发一个数组队列,数组队列的底层实现是数组。如果元素个数超过了数组的初始长度,就需要对数组进行扩容,否则会导致队列无法继续存入元素…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部