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日

相关文章

  • javascript 树控件 比较好用

    作为网站的作者,我非常乐意为你讲解“JavaScript 树控件比较好用”的完整攻略。 什么是 JavaScript 树控件? JavaScript 树控件是一种常用于显示层次数据的 UI 控件,如文件目录,网站导航菜单等。它的特点是可以动态地展开和折叠子节点,方便用户快速浏览和导航大量数据。 常见的 JavaScript 树控件库 市面上有很多 JavaS…

    Java 2023年6月15日
    00
  • springmvc—handlermapping三种映射方式

    Spring MVC是一种基于Java的Web框架,它提供了多种方式来处理请求和响应。其中,Handler Mapping是Spring MVC中的一个重要组件,它用于将请求映射到相应的控制器方法。在Spring MVC中,有三种常用的Handler Mapping方式:BeanNameUrlHandlerMapping、RequestMappingHand…

    Java 2023年5月17日
    00
  • 什么是永久代?

    以下是关于 Java 永久代的详细讲解和使用攻略: 什么是永久代? Java 永久代(Permanent Generation)是一种用于存储加载类信息、常量、静态变量、即时编译编译后的代码数据的内存区域。永久代是线程共享的,其大小可以通过 -XX:MaxPermSize 参数进行设置。 永久代的使用攻略 使用 Java 永久代需要注意以下几点: 在程序开发…

    Java 2023年5月12日
    00
  • MyBatis的动态SQL语句实现

    “MyBatis的动态SQL语句实现”是一种非常实用的技术,它可以根据不同的条件自动生成不同的SQL语句,从而提高效率。下面是一份完整的攻略,包括了各种实现方法和示例。 前置知识 在学习动态SQL之前,你需要了解以下几点: SQL基础知识:你需要掌握SQL语句的基本语法和一些常用的操作符。 MyBatis框架:你需要了解MyBatis的基本使用方法和配置方式…

    Java 2023年5月20日
    00
  • javascript实现简单搜索功能

    要实现简单的搜索功能,需要使用JavaScript编写代码实现。具体步骤如下: 第一步:获取搜索框元素 使用JavaScript代码获取搜索框输入的内容,代码如下: var input = document.getElementById(‘searchInput’); var keyword = input.value; 以上代码中,searchInput是…

    Java 2023年6月16日
    00
  • 用java将GBK工程转为uft8的方法实例

    下面是将GBK编码的Java项目转换为UTF-8编码的攻略,包含两个示例说明。 步骤一:备份项目 在进行编码转换之前,务必备份Java项目,以免出现转换失败或其他问题导致数据丢失。 步骤二:使用文本编辑器转换文件编码 使用文本编辑器打开Java项目源文件。 将文件的编码方式从GBK转换为UTF-8。 示例一:使用notepad++进行编码转换。 打开note…

    Java 2023年6月1日
    00
  • JAVA/JSP学习系列之七(Orion下自定义Tag)

    我会详细讲解“JAVA/JSP学习系列之七(Orion下自定义Tag)”的完整攻略。 简介 在 JSP 中,除了基本的 JSP 标签之外,可以自定义标签,把常用代码独立出来形成自己的标签库,方便代码的复用。本篇文章将介绍使用 Orion 开发工具自定义 JSP 标签的方法。 环境 开发工具:Orion 服务器:Tomcat 步骤 1. 创建标签处理类 首先,…

    Java 2023年6月15日
    00
  • 必知必会的SpringBoot实现热部署两种方式

    下面就来详细讲解“必知必会的SpringBoot实现热部署两种方式”的完整攻略。 什么是热部署? 在编写 Java 程序时,每次修改代码都需要重新编译,然后重新部署应用程序,这种过程消耗了大量的时间,特别是在开发过程中。为了解决这个问题,热部署技术应运而生。热部署是指在不停止应用程序的情况下重新加载应用程序代码和资源的技术,从而加快程序的开发和测试。 Spr…

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