Java课程设计代码如何高效完成?

99ANYc3cd6 课程介绍 1

下面我将为你提供一个经典且完整的Java课程设计项目——学生信息管理系统的完整代码、设计思路和实现步骤,这个项目几乎涵盖了所有Java SE的核心知识点,非常适合作为课程设计。


项目名称:基于控制台的学生信息管理系统

项目设计目标

  • 功能目标:实现对学生信息的增、删、改、查操作,并能将数据持久化保存到文件中,程序启动时能从文件加载数据。
  • 技术目标
    • 掌握Java面向对象编程思想,封装学生信息到类中。
    • 使用ArrayList等集合类来管理学生对象。
    • 实现文件I/O操作,使用ObjectOutputStreamObjectInputStream进行对象的序列化和反序列化。
    • 熟练使用Scanner获取用户输入。
    • 使用switch-casewhile循环构建清晰的用户交互菜单。
    • 练习代码的模块化,将不同功能封装到不同的方法中。

功能模块划分

  1. 学生模块Student类,用于封装单个学生的属性(学号、姓名、年龄、性别)。
  2. 管理模块StudentManager类,是系统的核心,负责所有业务逻辑,如添加、删除、修改、查找、显示和保存/加载。
  3. 入口模块MainApp类,程序的启动入口,负责显示菜单和调用StudentManager的方法。

核心代码实现

1 学生类 (Student.java)

这个类是一个简单的POJO(Plain Old Java Object),用于封装数据。

Java课程设计代码如何高效完成?-第1张图片-指南针培训网
// Student.java
package com.example.studentmanager;
import java.io.Serializable;
/**
 * 学生类,实现Serializable接口以支持序列化
 */
public class Student implements Serializable {
    // 序列化版本ID,用于在类结构变化时进行版本控制
    private static final long serialVersionUID = 1L;
    private String id;      // 学号
    private String name;    // 姓名
    private int age;        // 年龄
    private String gender;  // 性别
    // 构造方法
    public Student(String id, String name, int age, String gender) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    // Getter 和 Setter 方法
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    // 重写toString方法,方便打印学生信息
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

2 管理器类 (StudentManager.java)

这是项目的核心,包含了所有业务逻辑。

// StudentManager.java
package com.example.studentmanager;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
 * 学生管理器,负责学生信息的CRUD操作和持久化
 */
public class StudentManager {
    private List<Student> students; // 使用List集合存储学生对象
    private final String FILE_NAME = "students.dat"; // 数据文件名
    private final Scanner scanner = new Scanner(System.in);
    public StudentManager() {
        students = new ArrayList<>();
        // 程序启动时,尝试从文件加载数据
        loadFromFile();
    }
    /**
     * 显示主菜单
     */
    public void showMenu() {
        while (true) {
            System.out.println("========== 学生信息管理系统 ==========");
            System.out.println("           1. 添加学生");
            System.out.println("           2. 删除学生");
            System.out.println("           3. 修改学生");
            System.out.println("           4. 查找学生");
            System.out.println("           5. 显示所有学生");
            System.out.println("           6. 退出系统");
            System.out.println("=====================================");
            System.out.print("请选择您的操作 (1-6): ");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消费掉nextInt()留下的换行符
            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    deleteStudent();
                    break;
                case 3:
                    updateStudent();
                    break;
                case 4:
                    findStudent();
                    break;
                case 5:
                    showAllStudents();
                    break;
                case 6:
                    // 退出前保存数据
                    saveToFile();
                    System.out.println("感谢使用,系统已退出!");
                    System.exit(0); // 退出JVM
                    break;
                default:
                    System.out.println("您的输入无效,请重新输入!");
            }
            System.out.println(); // 空行,美化界面
        }
    }
    // --- 核心业务方法 ---
    private void addStudent() {
        System.out.println("--- 添加学生 ---");
        System.out.print("请输入学号: ");
        String id = scanner.nextLine();
        // 检查学号是否已存在
        if (findStudentById(id) != null) {
            System.out.println("错误:该学号已存在!");
            return;
        }
        System.out.print("请输入姓名: ");
        String name = scanner.nextLine();
        System.out.print("请输入年龄: ");
        int age = scanner.nextInt();
        scanner.nextLine(); // 消费换行符
        System.out.print("请输入性别: ");
        String gender = scanner.nextLine();
        Student student = new Student(id, name, age, gender);
        students.add(student);
        System.out.println("学生添加成功!");
    }
    private void deleteStudent() {
        System.out.println("--- 删除学生 ---");
        System.out.print("请输入要删除的学生学号: ");
        String id = scanner.nextLine();
        Student student = findStudentById(id);
        if (student != null) {
            students.remove(student);
            System.out.println("学生删除成功!");
        } else {
            System.out.println("未找到学号为 " + id + " 的学生!");
        }
    }
    private void updateStudent() {
        System.out.println("--- 修改学生 ---");
        System.out.print("请输入要修改的学生学号: ");
        String id = scanner.nextLine();
        Student student = findStudentById(id);
        if (student != null) {
            System.out.print("请输入新姓名 (原: " + student.getName() + "): ");
            String name = scanner.nextLine();
            student.setName(name);
            System.out.print("请输入新年龄 (原: " + student.getAge() + "): ");
            int age = scanner.nextInt();
            scanner.nextLine();
            student.setAge(age);
            System.out.print("请输入新性别 (原: " + student.getGender() + "): ");
            String gender = scanner.nextLine();
            student.setGender(gender);
            System.out.println("学生信息修改成功!");
        } else {
            System.out.println("未找到学号为 " + id + " 的学生!");
        }
    }
    private void findStudent() {
        System.out.println("--- 查找学生 ---");
        System.out.print("请输入要查找的学生学号: ");
        String id = scanner.nextLine();
        Student student = findStudentById(id);
        if (student != null) {
            System.out.println("查询结果: " + student);
        } else {
            System.out.println("未找到学号为 " + id + " 的学生!");
        }
    }
    private void showAllStudents() {
        System.out.println("--- 所有学生信息 ---");
        if (students.isEmpty()) {
            System.out.println("当前没有任何学生信息!");
        } else {
            for (Student student : students) {
                System.out.println(student);
            }
        }
    }
    // --- 辅助方法 ---
    /**
     * 根据学号查找学生
     * @param id 学号
     * @return 找到的学生对象,如果未找到则返回null
     */
    private Student findStudentById(String id) {
        for (Student student : students) {
            if (student.getId().equals(id)) {
                return student;
            }
        }
        return null;
    }
    /**
     * 将学生列表保存到文件
     */
    private void saveToFile() {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
            oos.writeObject(students);
            System.out.println("数据已成功保存到文件!");
        } catch (IOException e) {
            System.out.println("保存数据时发生错误: " + e.getMessage());
        }
    }
    /**
     * 从文件加载学生列表
     */
    @SuppressWarnings("unchecked") // 抑制编译器警告
    private void loadFromFile() {
        File file = new File(FILE_NAME);
        if (!file.exists()) {
            System.out.println("数据文件不存在,将创建新文件。");
            return;
        }
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
            students = (ArrayList<Student>) ois.readObject();
            System.out.println("数据已成功从文件加载!");
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("加载数据时发生错误: " + e.getMessage());
            // 如果加载失败,确保students是一个空列表,而不是null
            students = new ArrayList<>();
        }
    }
}

3 应用入口类 (MainApp.java)

这是程序的启动点,非常简单。

// MainApp.java
package com.example.studentmanager;
/**
 * 程序入口
 */
public class MainApp {
    public static void main(String[] args) {
        // 创建学生管理器实例
        StudentManager manager = new StudentManager();
        // 启动系统,显示菜单
        manager.showMenu();
    }
}

项目运行指南

  1. 环境准备

    • 确保你的电脑上安装了JDK(Java Development Kit)。
    • 安装一个IDE(集成开发环境),如 IntelliJ IDEAEclipseVS Code
  2. 创建项目

    Java课程设计代码如何高效完成?-第2张图片-指南针培训网
    • 在你的IDE中,创建一个新的Java项目。
    • 创建一个名为 com.example.studentmanager 的包(Package)。
    • 在该包下,创建上面提到的三个Java文件:Student.javaStudentManager.javaMainApp.java,并将代码分别复制进去。
  3. 编译和运行

    • 找到 MainApp.java 文件。
    • 右键点击,选择 "Run 'MainApp.main()'" (或类似选项)。
    • 程序将在控制台启动,并显示主菜单。
  4. 数据持久化

    • 当你第一次运行程序时,它会创建一个名为 students.dat 的文件在项目根目录下。
    • 当你添加、删除或修改学生信息后,选择 "6. 退出系统",程序会自动将当前所有学生信息保存到 students.dat 文件中。
    • 下次启动程序时,它会自动从 students.dat 文件中读取之前保存的数据。

课程设计扩展建议

如果你觉得这个基础版本还不够,可以考虑以下扩展方向,让你的课程设计更加出彩:

  1. 升级为GUI版本

    • 使用 Java SwingJavaFX 替换控制台界面。
    • 创建一个主窗口,包含菜单栏、表格(JTableTableView)显示所有学生,以及“添加”、“删除”、“修改”等按钮。
    • 点击“添加”或“修改”按钮时,弹出对话框(JDialogStage)让用户输入信息。
  2. 增加更多功能

    • 排序功能:按学号、姓名、年龄等进行升序或降序排序。
    • 数据统计:统计学生总数、男女比例、平均年龄等。
    • 分页显示:当学生数量很多时,实现分页查询功能。
  3. 改用数据库存储

    • 使用 MySQLSQLite 数据库替代文件存储。
    • 学习 JDBC (Java Database Connectivity) 技术,编写SQL语句进行数据的增删改查。
    • 这能让你接触到企业级应用中更主流的数据持久化方式。
  4. 增加登录功能

    • 创建一个 User 类,实现一个简单的用户登录系统,区分管理员和普通用户的不同权限。

希望这个完整的示例能对你的Java课程设计有所帮助!祝你顺利完成!

标签: 模块化 复用 调试

抱歉,评论功能暂时关闭!