CMPP3020作业2

entity:

Gender类:

复制代码
package entity;

public enum Gender {
    MALE, FEMALE, OTHER
}

Student类:

复制代码
package entity;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Student {
    private static int NEXT_ID = 1;

    private final int id;
    private String firstName;
    private String lastName;
    private LocalDate dateOfBirth;
    private Gender gender;
    private double previousGPA;
    private int currentSemester;
    private String program;
    private int numberOfCourses;

    public Student(String firstName, String lastName, LocalDate dateOfBirth, Gender gender,
                   double previousGPA, int currentSemester, String program, int numberOfCourses) {
        this.id = NEXT_ID++;
        this.firstName = firstName;
        this.lastName = lastName;
        this.dateOfBirth = dateOfBirth;
        this.gender = gender;
        this.previousGPA = previousGPA;
        this.currentSemester = currentSemester;
        this.program = program;
        this.numberOfCourses = numberOfCourses;
    }

    public int getId() { return id; }
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
    public LocalDate getDateOfBirth() { return dateOfBirth; }
    public Gender getGender() { return gender; }
    public double getPreviousGPA() { return previousGPA; }
    public int getCurrentSemester() { return currentSemester; }
    public String getProgram() { return program; }
    public int getNumberOfCourses() { return numberOfCourses; }

    public void setFirstName(String firstName) { this.firstName = firstName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
    public void setDateOfBirth(LocalDate dateOfBirth) { this.dateOfBirth = dateOfBirth; }
    public void setGender(Gender gender) { this.gender = gender; }
    public void setPreviousGPA(double previousGPA) { this.previousGPA = previousGPA; }
    public void setCurrentSemester(int currentSemester) { this.currentSemester = currentSemester; }
    public void setProgram(String program) { this.program = program; }
    public void setNumberOfCourses(int numberOfCourses) { this.numberOfCourses = numberOfCourses; }

    @Override
    public String toString() {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        return String.format("ID: %d | %s %s | DOB: %s | Gender: %s | PrevGPA: %.2f | Semester: %d | Program: %s | #Courses: %d",
                id, firstName, lastName, dateOfBirth.format(fmt), gender, previousGPA, currentSemester, program, numberOfCourses);
    }
}

service:

EnrollmentManager:

复制代码
package service;

import entity.Student;
import entity.Gender;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class EnrollmentManager {
    private final List<Student> students = new ArrayList<>();

    // Add new student
    public void addStudent(Student student) {
        students.add(student);
    }

    // Remove student by ID
    public boolean removeStudent(int id) {
        Student s = findById(id);
        if (s != null) {
            students.remove(s);
            return true;
        }
        return false;
    }

    // Find by ID
    public Student findById(int id) {
        for (Student s : students) {
            if (s.getId() == id) return s;
        }
        return null;
    }

    // Search by name
    public List<Student> searchByName(String term) {
        List<Student> results = new ArrayList<>();
        term = term.toLowerCase();
        for (Student s : students) {
            if (s.getFirstName().toLowerCase().contains(term) || s.getLastName().toLowerCase().contains(term)) {
                results.add(s);
            }
        }
        return results;
    }

    // List all students
    public List<Student> getAllStudents() {
        return new ArrayList<>(students);
    }

    // Sample data for testing
    public void sampleData() {
        addStudent(new Student("Yisong", "Wang", LocalDate.of(2001,5,12), Gender.FEMALE, 4.00, 3, "Software Engineering", 4));
        addStudent(new Student("Ethan", "Carter", LocalDate.of(2000,11,2), Gender.MALE, 3.10, 5, "Cyber Security Engineering", 5));
        addStudent(new Student("Sophia", "Miller", LocalDate.of(2002,3,18), Gender.FEMALE, 3.75, 2, "Computer Science", 5));
        addStudent(new Student("Liam", "Johnson", LocalDate.of(2001,8,7), Gender.MALE, 3.25, 4, "Software Engineering", 6));
        addStudent(new Student("Olivia", "Brown", LocalDate.of(2003,1,25), Gender.FEMALE, 3.90, 1, "Cyber Security Engineering", 4));
        addStudent(new Student("Noah", "Davis", LocalDate.of(2000,9,30), Gender.MALE, 3.55, 6, "Computer Science", 5));
    }

}

Main:

复制代码
import entity.Student;
import entity.Gender;
import service.EnrollmentManager;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Scanner;

public class Main {
    private static final EnrollmentManager manager = new EnrollmentManager();
    private static final Scanner sc = new Scanner(System.in);
    private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    public static void main(String[] args) {
        manager.sampleData();
        run();
    }

    private static void run() {
        while (true) {
            printMenu();
            String choice = sc.nextLine().trim();
            switch (choice) {
                case "1": listStudents(); break;
                case "2": addStudent(); break;
                case "3": modifyStudent(); break;
                case "4": removeStudent(); break;
                case "5": searchStudents(); break;
                case "6": showStudentDetails(); break;
                case "0": System.out.println("Goodbye!"); return;
                default: System.out.println("Invalid choice, please try again."); break;
            }
            System.out.println();
        }
    }

    private static void printMenu() {
        System.out.println("===== SAIT Enrollment Management =====");
        System.out.println("1) List all students");
        System.out.println("2) Add a student");
        System.out.println("3) Modify a student");
        System.out.println("4) Remove a student");
        System.out.println("5) Search students by name");
        System.out.println("6) Show student details by ID");
        System.out.println("0) Exit");
        System.out.print("Enter choice: ");
    }

    private static void listStudents() {
        List<Student> students = manager.getAllStudents();
        if (students.isEmpty()) {
            System.out.println("No students.");
        } else {
            for (Student s : students) System.out.println(s);
        }
    }

    private static void addStudent() {
        System.out.println("Add new student");
        String first = prompt("First name: ");
        String last = prompt("Last name: ");
        LocalDate dob = promptDate("Date of birth (yyyy-MM-dd): ");
        Gender gender = promptGender("Gender (MALE/FEMALE/OTHER): ");
        double gpa = promptDouble("Previous GPA: ");
        int sem = promptInt("Current semester: ");
        String program = prompt("Program: ");
        int courses = promptInt("Number of courses: ");

        Student s = new Student(first, last, dob, gender, gpa, sem, program, courses);
        manager.addStudent(s);
        System.out.println("Student added: " + s.getId());
    }

    private static void modifyStudent() {
        int id = promptInt("Enter student ID to modify: ");
        Student s = manager.findById(id);
        if (s == null) { System.out.println("Student not found."); return; }

        System.out.println("==================================================");

        //modify first name
        String first = promptOptional("First name ["+s.getFirstName()+"]: ");
        if (!first.isEmpty()) s.setFirstName(first);

        //modify last name
        String last = promptOptional("Last name ["+s.getLastName()+"]: ");
        if (!last.isEmpty()) s.setLastName(last);

        //modify birth
        String dobInput = promptOptional("Date of birth ["+s.getDateOfBirth().format(dateFormatter)+"]: ");
        if (!dobInput.isEmpty()) s.setDateOfBirth(LocalDate.parse(dobInput, dateFormatter));

        //modify gender
        String genderInput = promptOptional("Gender ["+s.getGender()+"]: ");
        if (!genderInput.isEmpty()) s.setGender(Gender.valueOf(genderInput.toUpperCase()));

        //modify GPA
        String gpaInput = promptOptional("Previous GPA ["+s.getPreviousGPA()+"]: ");
        if (!gpaInput.isEmpty()) s.setPreviousGPA(Double.parseDouble(gpaInput));

        //modify semester
        String semInput = promptOptional("Current semester ["+s.getCurrentSemester()+"]: ");
        if (!semInput.isEmpty()) s.setCurrentSemester(Integer.parseInt(semInput));

        //modify program
        String program = promptOptional("Program ["+s.getProgram()+"]: ");
        if (!program.isEmpty()) s.setProgram(program);

        //modify number of courses
        String coursesInput = promptOptional("Number of courses ["+s.getNumberOfCourses()+"]: ");
        if (!coursesInput.isEmpty()) s.setNumberOfCourses(Integer.parseInt(coursesInput));

        System.out.println("Updated: " + s);
    }

    private static void removeStudent() {
        int id = promptInt("Enter student ID to remove: ");
        boolean removed = manager.removeStudent(id);
        System.out.println(removed ? "Removed." : "Student not found.");
    }

    private static void searchStudents() {
        String term = prompt("Enter name to search: ");
        List<Student> results = manager.searchByName(term);
        if (results.isEmpty()) System.out.println("Student no matches.");
        else for (Student s : results) System.out.println(s);
    }

    private static void showStudentDetails() {
        int id = promptInt("Enter student ID: ");
        Student s = manager.findById(id);
        System.out.println(s == null ? "Student not found." : s);
    }

    // Input helpers
    private static String prompt(String msg) { System.out.print(msg); return sc.nextLine().trim(); }
    private static String promptOptional(String msg) { System.out.print(msg); return sc.nextLine().trim(); }
    private static LocalDate promptDate(String msg) { return LocalDate.parse(prompt(msg), dateFormatter); }
    private static Gender promptGender(String msg) { return Gender.valueOf(prompt(msg).toUpperCase()); }
    private static int promptInt(String msg) { return Integer.parseInt(prompt(msg)); }
    private static double promptDouble(String msg) { return Double.parseDouble(prompt(msg)); }
}
相关推荐
CryptoRzz3 小时前
印度实时股票数据源接口对接文档-IPO新股、k线数据
java·开发语言·数据库·区块链
宸津-代码粉碎机3 小时前
Java内部类内存泄露深度解析:原理、场景与根治方案(附GC引用链分析)
java·开发语言·jvm·人工智能·python
NEU-UUN3 小时前
C语言 . 第三章第二节 .递归函数
c语言·开发语言
weixin_307779133 小时前
Python编码规范之字符串规范修复程序详解
开发语言·python·代码规范
郝学胜-神的一滴4 小时前
深入理解 Python 的 __init_subclass__ 方法:自定义类行为的新方式 (Effective Python 第48条)
开发语言·python·程序人生·个人开发
東雪木4 小时前
Java基础语言进阶学习——1,JVM内存模型(堆、栈、方法区)
java·jvm·学习
毕设源码-郭学长4 小时前
【开题答辩全过程】以 常二社区线上养老院管理系统为例,包含答辩的问题和答案
java·eclipse
初见无风4 小时前
3.0 Lua代码中的闭包
开发语言·lua·lua5.4
Eiceblue4 小时前
使用 Python 向 PDF 添加附件与附件注释
linux·开发语言·vscode·python·pdf