编辑代码

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 课程类
class Course {
    private String name;        // 课程名称
    private String teacher;     // 授课教师
    private String classroom;   // 教室
    private int dayOfWeek;      // 星期几 (1-7)
    private int startTime;      // 开始节次 (1-12)
    private int endTime;        // 结束节次 (1-12)
    private String weekInfo;    // 周次信息 (如"1-16周")

    // 构造函数 - 注意这里没有返回类型
    public Course(String name, String teacher, String classroom, int dayOfWeek, 
                 int startTime, int endTime, String weekInfo) {
        this.name = name;
        this.teacher = teacher;
        this.classroom = classroom;
        this.dayOfWeek = dayOfWeek;
        this.startTime = startTime;
        this.endTime = endTime;
        this.weekInfo = weekInfo;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTeacher() {
        return teacher;
    }

    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }

    public String getClassroom() {
        return classroom;
    }

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    public int getDayOfWeek() {
        return dayOfWeek;
    }

    public void setDayOfWeek(int dayOfWeek) {
        this.dayOfWeek = dayOfWeek;
    }

    public int getStartTime() {
        return startTime;
    }

    public void setStartTime(int startTime) {
        this.startTime = startTime;
    }

    public int getEndTime() {
        return endTime;
    }

    public void setEndTime(int endTime) {
        this.endTime = endTime;
    }

    public String getWeekInfo() {
        return weekInfo;
    }

    public void setWeekInfo(String weekInfo) {
        this.weekInfo = weekInfo;
    }

    @Override
    public String toString() {
        return String.format("%s\n教师: %s\n教室: %s\n时间: 周%s %d-%d节 %s", 
                name, teacher, classroom, getDayName(dayOfWeek), startTime, endTime, weekInfo);
    }

    // 将数字转换为星期名称
    private String getDayName(int day) {
        switch (day) {
            case 1: return "一";
            case 2: return "二";
            case 3: return "三";
            case 4: return "四";
            case 5: return "五";
            case 6: return "六";
            case 7: return "日";
            default: return "未知";
        }
    }
}

// 课表类
class Schedule {
    private List<Course> courses;

    // 构造函数 - 注意这里没有返回类型
    public Schedule() {
        this.courses = new ArrayList<>();
    }

    // 添加课程
    public void addCourse(Course course) {
        courses.add(course);
    }

    // 删除课程
    public boolean removeCourse(String courseName) {
        return courses.removeIf(course -> course.getName().equalsIgnoreCase(courseName));
    }

    // 按课程名查找课程
    public List<Course> findCourseByName(String name) {
        List<Course> result = new ArrayList<>();
        for (Course course : courses) {
            if (course.getName().toLowerCase().contains(name.toLowerCase())) {
                result.add(course);
            }
        }
        return result;
    }

    // 按星期几查找课程
    public List<Course> findCourseByDay(int day) {
        List<Course> result = new ArrayList<>();
        for (Course course : courses) {
            if (course.getDayOfWeek() == day) {
                result.add(course);
            }
        }
        return result;
    }

    // 显示所有课程
    public void displayAllCourses() {
        if (courses.isEmpty()) {
            System.out.println("课表中暂无课程。");
            return;
        }

        System.out.println("=== 全部课程 ===");
        for (Course course : courses) {
            System.out.println(course);
            System.out.println("------------------");
        }
    }

    // 显示某天的课程
    public void displayDayCourses(int day) {
        List<Course> dayCourses = findCourseByDay(day);
        if (dayCourses.isEmpty()) {
            System.out.println("周" + getDayName(day) + "没有课程安排。");
            return;
        }

        System.out.println("=== 周" + getDayName(day) + "课程 ===");
        for (Course course : dayCourses) {
            System.out.println(course);
            System.out.println("------------------");
        }
    }

    // 将数字转换为星期名称
    private String getDayName(int day) {
        switch (day) {
            case 1: return "一";
            case 2: return "二";
            case 3: return "三";
            case 4: return "四";
            case 5: return "五";
            case 6: return "六";
            case 7: return "日";
            default: return "未知";
        }
    }
}

// 主程序
public class PersonalSchedule {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Schedule schedule = new Schedule();
        
        // 添加一些示例课程
        schedule.addCourse(new Course("高等数学", "张教授", "教学楼201", 1, 1, 2, "1-16周"));
        schedule.addCourse(new Course("大学英语", "李老师", "外语楼105", 2, 3, 4, "1-16周"));
        schedule.addCourse(new Course("计算机基础", "王教授", "计算机楼301", 3, 5, 6, "1-8周"));
        schedule.addCourse(new Course("体育", "赵教练", "操场", 5, 7, 8, "1-16周"));
        
        while (true) {
            System.out.println("\n=== 个人课表管理系统 ===");
            System.out.println("1. 查看全部课程");
            System.out.println("2. 按星期查看课程");
            System.out.println("3. 按课程名查找");
            System.out.println("4. 添加课程");
            System.out.println("5. 删除课程");
            System.out.println("0. 退出");
            System.out.print("请选择操作: ");
            
            int choice;
            try {
                choice = scanner.nextInt();
                scanner.nextLine(); // 消耗换行符
            } catch (Exception e) {
                System.out.println("输入无效,请重新输入。");
                scanner.nextLine(); // 清除无效输入
                continue;
            }
            
            switch (choice) {
                case 1:
                    schedule.displayAllCourses();
                    break;
                    
                case 2:
                    System.out.print("请输入星期几(1-7): ");
                    int day = scanner.nextInt();
                    scanner.nextLine(); // 消耗换行符
                    if (day < 1 || day > 7) {
                        System.out.println("输入无效,星期几应为1-7的数字。");
                        break;
                    }
                    schedule.displayDayCourses(day);
                    break;
                    
                case 3:
                    System.out.print("请输入课程名(或部分名称): ");
                    String name = scanner.nextLine();
                    List<Course> foundCourses = schedule.findCourseByName(name);
                    if (foundCourses.isEmpty()) {
                        System.out.println("未找到相关课程。");
                    } else {
                        System.out.println("=== 搜索结果 ===");
                        for (Course course : foundCourses) {
                            System.out.println(course);
                            System.out.println("------------------");
                        }
                    }
                    break;
                    
                case 4:
                    System.out.println("=== 添加新课程 ===");
                    System.out.print("课程名称: ");
                    String newName = scanner.nextLine();
                    System.out.print("授课教师: ");
                    String teacher = scanner.nextLine();
                    System.out.print("教室: ");
                    String classroom = scanner.nextLine();
                    System.out.print("星期几(1-7): ");
                    int newDay = scanner.nextInt();
                    System.out.print("开始节次(1-12): ");
                    int startTime = scanner.nextInt();
                    System.out.print("结束节次(1-12): ");
                    int endTime = scanner.nextInt();
                    scanner.nextLine(); // 消耗换行符
                    System.out.print("周次信息(如1-16周): ");
                    String weekInfo = scanner.nextLine();
                    
                    if (newDay < 1 || newDay > 7 || startTime < 1 || startTime > 12 || 
                        endTime < 1 || endTime > 12 || startTime > endTime) {
                        System.out.println("输入无效,请检查星期几和节次是否正确。");
                        break;
                    }
                    
                    schedule.addCourse(new Course(newName, teacher, classroom, newDay, startTime, endTime, weekInfo));
                    System.out.println("课程添加成功!");
                    break;
                    
                case 5:
                    System.out.print("请输入要删除的课程名称: ");
                    String courseToRemove = scanner.nextLine();
                    if (schedule.removeCourse(courseToRemove)) {
                        System.out.println("课程删除成功!");
                    } else {
                        System.out.println("未找到该课程。");
                    }
                    break;
                    
                case 0:
                    System.out.println("感谢使用个人课表管理系统,再见!");
                    scanner.close();
                    return;
                    
                default:
                    System.out.println("无效的选择,请重新输入。");
            }
        }
    }
}