复制代码
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);
}
}
复制代码
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));
}
}
复制代码
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)); }
}