PTA6-8总结报告

前言:

题目集六涉及的知识点有:1.利用Arrays.sort()方法根据某些标准对对象进行排序。2.异常处理(NumberFormatException)和条件语句来检查不正确的输入格式。3.类和对象:代码中使用了Class、Student和Lesson等类来表示班级、学生和课程。4.数组:代码使用了不同类型的数组,如班级、学生和课程数组,以及用于存储成绩的数组。

题目集七涉及的知识点有:1使用了HashMap来存储学生信息2.使用了List接口和ArrayList类来对学生信息进行排序,以便按学号进行输出。3.使用了Student类来表示学生信息,具有姓名、年级和学号等属性。4.异常处理(NumberFormatException)和条件语句来检查不正确的输入格式。5.字符串处理将输入信息拆分为相应的字段。

题目集七涉及的知识点有:1.ArrayList对象用于存储学生信息。然后通过循环从标准输入中获取学生的信息并将其添加到ArrayList中。2.使用Collections.sort方法对ArrayList进行排序,通过Comparator接口实现了学生信息的排序规则,首先按照总分降序排列,如果总分相等则按照输入顺序排序。3.自定义接口ArrayIntegerStack的使用。

设计与分析:

第六次题目集

课程成绩统计程序-1

分析

Main类是程序的入口点,其中包含了main方法。它从用户那里读取输入,处理输入数据,并对学生和课程对象执行各种操作。

Class类表示一个班级或课程,包含了ClassID等属性以及一个Student对象数组。它还有一些方法用于添加学生、按照ID查找学生和计算班级中所有学生的平均分数。

Student类表示一个学生,包含了NameID等属性以及用于存储学生最终成绩和课程的数组。它还有一些方法用于添加课程和更新每个课程的成绩。

Lesson类表示一个课程或科目,包含了NameRequiredTest等属性(表示是否必修课和测试类型)。它还有一些方法用于添加测试成绩和持续时间成绩。

FinalPrint方法输出最终结果,包括学生的平均分数、课程信息和班级的平均分数。

 

import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
import java.util.Scanner;

public class Main {
    private static Class[] Classes = new Class[100];
    static Lesson[] lessons = new Lesson[100];
    static int SizeOfClass = 0;
    static int SizeOfLesson = 0;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String[] ins;
        while (true) {
            ins = input.nextLine().split(" ");
            if (ins[0].equals("end")) {
                break;
            }
            try {
                int temp = Integer.parseInt(ins[0]);
            } catch (NumberFormatException e) {
                if (CheckLessonFormat(ins)) {
                    System.out.println("wrong format");
                    continue;
                }
                if (Objects.equals(ins[1], "必修")) {
                    if (Objects.equals(ins[2], "考察")) {
                        System.out.println(ins[0] + " : course type & access mode mismatch");
                        continue;
                    } else if (FindLesson(ins[0]) != -1) continue;
                    else lessons[SizeOfLesson] = new Lesson(ins[0], 1, 1);
                } else {
                    if (FindLesson(ins[0]) != -1) {
                        continue;
                    }
                    if (ins[2].equals("考试")) {
                        lessons[SizeOfLesson] = new Lesson(ins[0], 2, 1);
                    } else {
                        lessons[SizeOfLesson] = new Lesson(ins[0], 2, 2);
                    }
                }
                SizeOfLesson++;
                continue;
            }
            if (!CheckStuFormat(ins)) {
                if (ins[3].length() > 2) {
                    System.out.println("wrong format");
                    continue;
                }
                String ClassID = ins[0].substring(0, 6);
                int ClassNum = GetClass(ClassID);
                int flag = 0;
                for (int t = 0; t < SizeOfClass; t++)
                    if (getClasses()[t].FindStudent(ins[0]) != null) {
                        flag = 1;
                    }
                if (flag == 0) {
                    getClasses()[ClassNum].AddStudent(ins[0], ins[1]);
                }
                if (FindLesson(ins[2]) == -1) {
                    System.out.println(ins[2] + " does not exist");
                    continue;
                }
                Lesson temp = lessons[FindLesson(ins[2])];
                if (temp.Test != 2 || ins.length != 5) {
                    if (temp.Test != 1 || ins.length != 4) {
                        try {
                            if (temp.Test == 1)
                                getClasses()[ClassNum].students[getClasses()[ClassNum].SizeOfStu - 1].AddLesson(temp, Integer.parseInt(ins[3]), Integer.parseInt(ins[4]));
                            else
                                getClasses()[ClassNum].students[getClasses()[ClassNum].SizeOfStu - 1].AddLesson(temp, Integer.parseInt(ins[3]));
                        } catch (NumberFormatException e) {
                            System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]);
                        }
                    } else {
                        System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]);
                    }
                } else {
                    System.out.printf("%s %s : access mode mismatch\n", ins[0], ins[1]);
                }
            } else {
                System.out.println("wrong format");
            }
        }
        FinalPrint();
    }

    static int GetClass(String ID) {
        for (int t = 0; t < SizeOfClass; t++) {
            if (getClasses()[t].ClassID.equals(ID)) {
                return t;
            }
        }
        getClasses()[SizeOfClass] = new Class(ID);
        SizeOfClass++;
        return SizeOfClass - 1;
    }

    static void FinalPrint() {
        int SumStudent = 0;
        for (int t = 0; t < SizeOfClass; t++)
            SumStudent += getClasses()[t].SizeOfStu;
        if (SumStudent != 0) {
            Student[] studentsAverage = new Student[100];
            int Size = 0;
            for (int t = 0; t < SizeOfClass; t++) {
                for (int t1 = 0; t1 < getClasses()[t].SizeOfStu; t1++) {
                    studentsAverage[Size] = getClasses()[t].students[t1];
                    Size++;
                }
            }
            Student[] student = new Student[Size];
            System.arraycopy(studentsAverage, 0, student, 0, Size);
            if (SumStudent > 1) {
                Arrays.sort(student, Comparator.comparing(o -> o.ID));
                for (int t = 0; t < SumStudent; t++) {
                    if (student[t].SizeOfFinalScores == 0) {
                        System.out.printf("%s %s did not take any exams\n", student[t].ID, student[t].Name);
                    } else
                        System.out.printf("%s %s %d\n", student[t].ID, student[t].Name, GetAverage(student[t].FinalScore));
                }
            } else {
                for (int t = 0; t < SumStudent; t++) {
                    if (student[t].SizeOfFinalScores == 0) {
                        System.out.printf("%s %s did not take any exams\n", student[t].ID, student[t].Name);
                    } else
                        System.out.printf("%s %s %d\n", student[t].ID, student[t].Name, GetAverage(student[t].FinalScore));
                }
            }
        }

        
        
        Lesson[] lesson = new Lesson[SizeOfLesson];
        System.arraycopy(lessons, 0, lesson, 0, SizeOfLesson);
        lessons = lesson;
        Arrays.sort(lessons, Comparator.comparing(o -> o.Name));
        if (SizeOfLesson != 0)
            for (int t = 0; t < SizeOfLesson; t++) {
                if (lessons[t].SizeOfScores == 0) {
                    System.out.println(lessons[t].Name + " has no grades yet");
                } else if (lessons[t].Test == 1) {
                    System.out.printf("%s %d %d %d\n", lessons[t].Name, Main.GetAverage(lessons[t].DurScores), Main.GetAverage(lessons[t].TestScores), Main.GetAverage(lessons[t].FinalScores));
                } else {
                    System.out.printf("%s %d %d\n", lessons[t].Name, Main.GetAverage(lessons[t].TestScores), Main.GetAverage(lessons[t].FinalScores));
                }
            }

        Class[] classes = new Class[SizeOfClass];
        System.arraycopy(getClasses(), 0, classes, 0, SizeOfClass);
        setClasses(classes);
        Arrays.sort(getClasses(), Comparator.comparing(o -> o.ClassID));
        int i;
        for (i = 0; i < SizeOfClass; i++) {
            if (getClasses()[i].GetAverageScore() != 0) {
                System.out.println(getClasses()[i].ClassID + " " + getClasses()[i].GetAverageScore());
            } else {
                System.out.println(getClasses()[i].ClassID + " has no grades yet");
            }
        }
    }

    static int GetAverage(int[] input) {
        double Ave = 0;
        int n = 0;
        for (int i : input) {
            if (i == 0)
                break;
            Ave += i;
            n++;
        }
        Ave /= n;
        return (int) Ave;
    }

    static boolean CheckStuFormat(String[] ins) {
        if (ins[0].length() != 8) return true;
        if (ins[1].length() > 10) return true;
        if (ins.length > 5) return true;
        if (ins.length < 4) return true;
        return false;
    }

    static boolean CheckLessonFormat(String[] ins) {
        if (ins[0].length() > 10) return true;
        if (ins.length != 3) return true;
        return false;
    }

    static int FindLesson(String Name) {
        for (int t = 0; t < SizeOfLesson; t++) {
            if (lessons[t] == null) {
                return t;
            } else if (lessons[t].Name.equals(Name)) {
                return t;
            }
        }
        return -1;
    }

    public static Class[] getClasses() {
        return Classes;
    }

    public static void setClasses(Class[] classes) {
        Classes = classes;
    }
}

class Class {
    String ClassID;
    Student[] students = new Student[100];
    int SizeOfStu = 0;

    Class(String ID) {
        this.ClassID = ID;
    }

    void AddStudent(String ID, String Name) {
        students[SizeOfStu] = new Student(Name, ID);
        SizeOfStu++;
    }

    Student FindStudent(String ID) {
        for (int t = 0; t < SizeOfStu; t++) {
            if (students[t].ID.equals(ID)) {
                return students[t];
            }
        }
        return null;
    }

    int GetAverageScore() {
        int Ave = 0;
        for (int t = 0; t < SizeOfStu; t++) {
            Ave += Main.GetAverage(students[t].FinalScore);
        }
        return Ave / SizeOfStu;
    }
}

class Student {
    String Name;
    String ID;
    int[] FinalScore = new int[100];
    Lesson[] lessons = new Lesson[100];
    int SizeOfFinalScores = 0;
    int SizeOfLesson = 0;
    private Lesson lesson;

    Student(String Name, String ID) {
        this.ID = ID;
        this.Name = Name;
    }

    void AddLesson(Lesson lesson,
                   int DurGrade,
                   int TestGrade) {
        this.lessons[SizeOfLesson] = lesson;
        this.lessons[SizeOfLesson].DurGrade = DurGrade;
        this.lessons[SizeOfLesson].TestGrade = TestGrade;
        this.lessons[SizeOfLesson].FinalGrade = (int) (DurGrade * 0.3 + TestGrade * 0.7);
        FinalScore[SizeOfFinalScores] = this.lessons[SizeOfLesson].FinalGrade;
        Main.lessons[Main.FindLesson(lesson.Name)].AddScore(DurGrade, TestGrade);
        SizeOfLesson++;
        SizeOfFinalScores++;
    }

    void AddLesson(Lesson lesson, int TestGrade) {
        this.lesson = lesson;
        this.lessons[SizeOfLesson] = lesson;
        this.lessons[SizeOfLesson].TestGrade = TestGrade;
        this.lessons[SizeOfLesson].FinalGrade = TestGrade;
        Main.lessons[Main.FindLesson(lesson.Name)].AddScore(TestGrade);
        FinalScore[SizeOfFinalScores] = this.lessons[SizeOfLesson].FinalGrade;
        SizeOfLesson++;
        SizeOfFinalScores++;
    }

}

class Lesson {
    int TestGrade;
    int DurGrade;
    int[] TestScores = new int[100];
    int[] DurScores = new int[100];
    int FinalGrade;
    int[] FinalScores = new int[100];
    int SizeOfScores = 0;
    String Name;
    int Required;
    int Test;

    Lesson(String Name,
           int Required,
           int Test) {
        this.Name = Name;
        this.Required = Required;
        this.Test = Test;
    }

    void AddScore(int DurScore, int TestScore) {
        this.TestScores[SizeOfScores] = TestScore;
        this.DurScores[SizeOfScores] = DurScore;
        this.FinalScores[SizeOfScores] = (int) (0.3 * DurScore + 0.7 * TestScore);
        SizeOfScores++;
    }

    void AddScore(int TestScore) {
        this.TestScores[SizeOfScores] = TestScore;
        this.FinalScores[SizeOfScores] = TestScore;
        SizeOfScores++;
    }

}

第七次题目

容器-HashMap-检索

import java.util.*;

import static java.lang.Integer.*;

class Student {
    private final String name;
    private final int grade;
    private final String id;

    public Student(String name, int grade, String id) {
        this.name = name;
        this.grade = grade;
        this.id=id;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getGrade() {
        return grade;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        HashMap<String, Student> students = new HashMap<>();
        while (true) {
            String a = input.nextLine();
            if (a.equals("end")) {
                break;
            }

            String[] parts = a.split(" ");
            String id = parts[0];
            String name = parts[1];
            int grade = parseInt(parts[2]);

            Student student = new Student(name, grade,id);
            students.put(id, student);
        }

        String ids = input.nextLine();
        Student student = students.get(ids);
        if (student != null) {
            System.out.println(student.getId() + " " + student.getName() + " " + student.getGrade());
        } else {
            System.out.println("The student " + ids + " does not exist");
        }
    }
}

容器-HashMap-排序

import java.util.*;

import static java.lang.Integer.*;

class Student {
    private final String name;
    private final int grade;
    private final String id;

    public Student(String name, int grade, String id) {
        this.name = name;
        this.grade = grade;
        this.id=id;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getGrade() {
        return grade;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        HashMap<String, Student> students = new HashMap<>();
        while (true) {
            String a = input.nextLine();
            if (a.equals("end")) {
                break;
            }

            String[] parts = a.split(" ");
            String id = parts[0];
            String name = parts[1];
            int grade = parseInt(parts[2]);

            Student student = new Student(name, grade,id);
            students.put(id, student);
        }
        
        List<Map.Entry<String, Student>> studentList;
        studentList = new ArrayList<>(students.entrySet());
        for (int i = 0; i < studentList.size() - 1; i++) {
            for (int j = 0; j < studentList.size() - i - 1; j++) {
                Map.Entry<String, Student> s1 = studentList.get(j);
                Map.Entry<String, Student> s2 = studentList.get(j + 1);
                if (s1.getKey().compareTo(s2.getKey()) < 0) {
                    Collections.swap(studentList, j, j + 1);
                }
            }
        }

        // 输出每个学生的信息
        for (Map.Entry<String, Student> entry : studentList) {
            Student student = entry.getValue();
            String id = student.getId();
            String name = student.getName();
            int grade = student.getGrade();
            System.out.println(id + " " + name + " " + grade);
        }
    }
}

课程成绩统计程序-2

 

 

 

 

import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
    static boolean isNumber(String isNumber){
        try{
            int a=Integer.parseInt(isNumber);
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str;
        studentList students=new studentList();
        InputMatching matching=new InputMatching();
        chooseCourseList choose=new chooseCourseList();
        Cls cls=new Cls();
        courseList course=new courseList();
        String str1,str2,str3;
        while(true){
            str=input.nextLine();
            if(isNumber(str.split(" ")[0]))break;
            if(str.equals("end"))break;
            if(InputMatching.matchingInput(str) != 1){
                System.out.println("wrong format");
                continue;
            }
            str1=str.split(" ")[0];
            if(course.searchCourse(str1))continue;
            str2=str.split(" ")[1];
            str3=str.split(" ")[2];
            if((str2.equals("必修")&&str3.equals("考察"))||(str2.equals("实验")&&!str3.equals("实验")||(!str2.equals("实验")&&str3.equals("实验")))){
                System.out.println(str.split(" ")[0]+" : course type & access mode mismatch");
                continue;
            }
            if(course.searchCourse(str1))continue;
            course.courses.add(course.addCourse(str1,str2,str3));
        }
        String number,name,subject;
        int UsualGrades,FinalGrades;
        boolean flag=false;
        while(!str.equals("end")){
            if(flag)str=input.nextLine();
            flag=true;
            if(str.equals("end"))break;
            String ssr=str.split(" ")[0]+" "+str.split(" ")[1]+" "+str.split(" ")[2]+" "+str.split(" ")[3];
            if (InputMatching.matchingInput(ssr) != 2&&InputMatching.matchingInput(ssr) != 3&&course.searchQuality(str.split(" ")[2])!=2) {
                System.out.println("wrong format");// 字符串符合成绩信息模式
                continue;
            }
            if(((Integer.parseInt(str.split(" ")[3]))<4||(Integer.parseInt(str.split(" ")[3]))>9)&&str.split(" ").length>5){
                System.out.println("wrong format");
                continue;
            }
            number=str.split(" ")[0];
            String Class = number.substring(0, 6);
            if (!cls.searchCls(Class)) cls.cls.add(cls.addCls(Class));
            name=str.split(" ")[1];

            students.stu.add(students.addStudent(number,name));
            subject=str.split(" ")[2];
            try {
                if (course.searchQuality(subject) == 1) {
                     UsualGrades = Integer.parseInt(str.split(" ")[3]);
                    if (choose.searchCourse(subject) && choose.searchId(number)) continue;
                     FinalGrades = Integer.parseInt(str.split(" ")[4]);
                    students.students.add(students.addStudentCompulsory(number, name, subject, UsualGrades, FinalGrades));
                } else if (course.searchQuality(subject) == 0) {
                     UsualGrades = Integer.parseInt(str.split(" ")[3]);
                    if (choose.searchCourse(subject) && choose.searchId(number)) continue;
                    if (str.split(" ").length > 4) {
                        System.out.println(number + " " + name + " : access mode mismatch");
                        continue;
                    }
                    students.students.add(students.addStudentTake(number, name, subject, UsualGrades));
                } else if (course.searchQuality(subject) == -1) {
                    System.out.println(subject + " does not exist");
                } else if (course.searchQuality(subject) == 2) {
                    int testNumber = Integer.parseInt(str.split(" ")[3]);
                    if (str.split(" ").length - 4 != testNumber) {
                        System.out.println(number + " " + name + " : access mode mismatch");
                        continue;
                    }
                    int sum = 0;
                    for (int i = 0; i < testNumber; i++) {
                        sum += Integer.parseInt(str.split(" ")[4 + i]);
                    }
                    sum /= testNumber;
                    students.students.add(students.addExperimentalGrades(number, name, subject, sum));
                }
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println(number + " " + name + " : access mode mismatch");
            }

        }
        chooseCourseList chooses=new chooseCourseList();
        chooses.getAverageGrade(students,course,cls);
    }
}



class student{
    int experimentalGrades;
    String number;
    String name;
    String course;
    int UsualGrades=0;
    int FinalGrades=0;
    String Class;
    int grade=0;
    public static Comparator<student> getNumberComparator() {
        return Comparator.comparing(s -> s.number);
    }
}
class course{
    String name;
    String quality;
    String manner;
    public static Comparator<course> getChineseNameComparator() {
        final Collator collator = Collator.getInstance(java.util.Locale.CHINA); // 获取中文排序规则
        return (c1, c2) -> collator.compare(c1.name, c2.name);
    }
}
class courseList{
    ArrayList<course>courses=new ArrayList<>();

    boolean searchCourse(String CourseName){
        for (course cours : courses) if (cours.name.equals(CourseName)) return true;
        return false;
    }
    course addCourse( String name,String quality,String manner){
        course newCourse=new course();
        newCourse.name=name;
        newCourse.quality=quality;
        newCourse.manner=manner;
        return newCourse;
    }
    int searchQuality(String subject){
        for (course course : courses) {
            if (course.name.equals(subject) && course.quality.equals("必修")) return 1;
            else if (course.name.equals(subject) && course.manner.equals("考试")) return 1;
            else if (course.name.equals(subject)&&course.quality.equals("实验"))return 2;
            else if (course.name.equals(subject)&&course.manner.equals("实验"))return 2;
            else if (course.name.equals(subject)) return 0;
        }
        return -1;
    }

}
class studentList  {
    ArrayList<student> students = new ArrayList<>();
    ArrayList<student> stu = new ArrayList<>();

    student addStudentCompulsory(String number, String name, String course, int UsualGrades, int FinalGrades) {
        student newStudent = new student();
        chooseCourseList newChoose = new chooseCourseList();
        newStudent.name = name;
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        Cls newCls = new Cls();
        newStudent.number = number;
        newStudent.course = course;
        newStudent.grade = (int) (FinalGrades * 0.7 + UsualGrades * 0.3);
        String Class = number.substring(0, 6);
        if (!newCls.searchCls(Class)) newCls.cls.add(newCls.addCls(Class));
        chooseCourseList.chooseCourse.add(newChoose.addChoose(number, name, course, Class, UsualGrades, FinalGrades, newStudent.grade));
        return newStudent;
    }

    student addStudentTake(String number, String name, String course, int UsualGrades) {
        student newStudent = new student();
        newStudent.name = name;
        newStudent.number = number;
        newStudent.course = course;
        newStudent.grade = UsualGrades;
        String Class=number.substring(0,6);
        chooseCourseList newChoose = new chooseCourseList();
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        chooseCourseList.chooseCourse.add(newChoose.addChooseTake(number, name, course, Class, UsualGrades, newStudent.grade));
        return newStudent;
    }
    student addExperimentalGrades(String number, String name, String course, int experimentalGrades) {
        student newStudent = new student();
        newStudent.name = name;
        newStudent.number = number;
        newStudent.course = course;
        newStudent.experimentalGrades = experimentalGrades;
        newStudent.grade = experimentalGrades;
        String Class=number.substring(0,6);
        chooseCourseList newChoose = new chooseCourseList();
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        chooseCourseList.chooseCourse.add(newChoose.addChooseExperimental(number, name, course, Class, experimentalGrades,newStudent.grade));
        return newStudent;
    }

    student addStudent(String id, String name) {
        student newStudent = new student();
        newStudent.number = id;
        newStudent.name = name;
        return newStudent;
    }

    boolean searchStudent(String name) {
        for (student student : students) {
            if (student.name.equals(name)) return true;
        }
        return false;
    }


}


class Cls {
    private static int nextIndex = 0;
    String id;
    private int index;

    ArrayList<Cls> cls = new ArrayList<>();

    public Cls addCls(String cl) {
        Cls newCls = new Cls();
        newCls.id = cl;

        // 新增元素的 index 应该为当前列表长度
        newCls.index = nextIndex++;
        cls.add(newCls);

        return newCls;
    }

    public boolean searchCls(String id) {
        for (int i = 0; i < cls.size(); i++) {
            if (cls.get(i).id.equals(id)) {
                return true;
            }
        }
        return false;
    }

    public static Comparator<Cls> getIndexComparator() {
        return new Comparator<Cls>() {
            @Override
            public int compare(Cls c1, Cls c2) {
                return c1.id.compareTo(c2.id);
            }
        };
    }
}

class InputMatching {
    static String stuNumMatching = "[0-9]{8}";//8个0-9的数字
    static String stuNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符
    static String scoreMatching = "([1-9]?[0-9]|100)";
    static String courseNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符
    static String courseTypeMatching = "(选修|必修|实验)";
    static String checkCourseTypeMatching = "(考试|考察|实验)";
    //cousrInput用于定义课程信息模式(正则表达式)
    static String courseInput = courseNameMatching + " " + courseTypeMatching + " " + checkCourseTypeMatching;
    //scoreInput用于定义成绩信息模式(正则表达式)
    static String scoreInput1 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " +
            scoreMatching + "(scoreMatching)?";
    static String scoreInput2 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " +
            scoreMatching + "(scoreMatching)?"+" "+scoreMatching + "(scoreMatching)?";
    public static int matchingInput(String s) {
        if (matchingCourse(s)) {
            return 1;
        }
        if (matchingScore1(s)) {
            return 2;
        }
        if (matchingScore2(s)) {
            return 3;
        }
        return 0;
    }

    static boolean matchingCourse(String s) {
        return s.matches(courseInput);
    }

    static boolean matchingScore1(String s) {
        return s.matches(scoreInput1);
    }
    static boolean matchingScore2(String s) {
        return s.matches(scoreInput2);
    }
}
class chooseCourseList{
    static ArrayList<student> chooseCourse=new ArrayList<>();
    static boolean searchId(String id){
        for (student student : chooseCourse) if (student.number.equals(id)) return true;
        return false;
    }
    static boolean searchCourse(String course){
        for (student student : chooseCourse) if (student.course.equals(course)) return true;
        return false;
    }
    static int searchCourseInt(String course){
        for(int i=0;i<chooseCourse.size();i++)
            if(chooseCourse.get(i).course.equals(course))return i;
        return -1;
    }
    static boolean searchClass(String Class){
        for (student student : chooseCourse) if (student.Class.equals(Class)) return true;
        return false;
    }
    student addChoose(String id,String name,String course,String Class,int UsualGrades,int FinalGrades,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.UsualGrades=UsualGrades;
        newStudent.FinalGrades=FinalGrades;
        newStudent.grade=grade;
        return newStudent;
    }
    student addChooseTake(String id,String name,String course,String Class,int UsualGrades,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.UsualGrades=UsualGrades;
        newStudent.grade=grade;
        return newStudent;
    }
    student addChooseExperimental(String id,String name,String course,String Class,int experimental,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.experimentalGrades=experimental;
        newStudent.grade=experimental;
        return newStudent;
    }
    public int getAverageGrades(String id){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.number.equals(id)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseUsualGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.UsualGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseFinalGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.FinalGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageExperimentalGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.experimentalGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getClassAverageGrades(String Class){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.Class.equals(Class)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }

    public void getAverageGrade(studentList students,courseList courses,Cls cls){
        students.stu.sort(student.getNumberComparator());
        cls.cls.sort(Cls.getIndexComparator());
        courses.courses.sort(course.getChineseNameComparator());
        for (int i = 0; i < students.stu.size(); i++) {
            int flag = 0;
            for (int j = 0; j < i; j++) {
                if (students.stu.get(j).number.equals(students.stu.get(i).number)) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
            if (searchId(students.stu.get(i).number)) {
                System.out.println(students.stu.get(i).number + " " + students.stu.get(i).name + " " + getAverageGrades(students.stu.get(i).number));
            } else {
                System.out.println(students.stu.get(i).number + " " + students.stu.get(i).name + " did not take any exams");
            }
        }

        for (int i = 0; i < courses.courses.size(); i++) {
            if (searchCourse(courses.courses.get(i).name)) {
                if (courses.courses.get(i).manner.equals("考试")) {
                    System.out.println(courses.courses.get(i).name + " " + getAverageCourseUsualGrades(courses.courses.get(i).name)
                            + " " + getAverageCourseFinalGrades(courses.courses.get(i).name) + " " + getAverageCourseGrades(courses.courses.get(i).name));
                } else if (courses.courses.get(i).manner.equals("考察")) {
                    System.out.println(courses.courses.get(i).name + " " + getAverageCourseUsualGrades(courses.courses.get(i).name)
                            + " " + getAverageCourseGrades(courses.courses.get(i).name));
                } else {
                    System.out.println(courses.courses.get(i).name + " " + getAverageExperimentalGrades(courses.courses.get(i).name));
                }
            } else {
                System.out.println(courses.courses.get(i).name + " has no grades yet");
            }
        }

        for (int i = 0; i < cls.cls.size(); i++) {
            int flag = 0;
            for (int j = 0; j < i; j++) {
                if (cls.cls.get(j).equals(cls.cls.get(i))) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
            if (searchClass(cls.cls.get(i).id)) {
                System.out.println(cls.cls.get(i).id + " " + getClassAverageGrades(cls.cls.get(i).id));
            } else {
                System.out.println(cls.cls.get(i).id + " has no grades yet");
            }
        }

    }
}

动物发声模拟器(多态)

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        Goat goat = new Goat();
        speak(cat);
        speak(dog);
        speak(goat);
    }

    private static void speak(Animal animal) {
        System.out.println(animal.getAnimalClass()+"的叫声:"+animal.shout());
    }


    //定义静态方法speak()
    

}

//定义抽象类Animal
abstract class Animal{
    abstract public String getAnimalClass();

    abstract public String shout();

}
//基于Animal类,定义猫类Cat,并重写两个抽象方法
class Cat extends Animal{


    @Override
    public String getAnimalClass() {
        return "猫";
    }

    @Override
    public String shout() {
        return "喵喵";
    }
}
//基于Animal类,定义狗类Dog,并重写两个抽象方法
class Dog extends Animal{


    @Override
    public String getAnimalClass() {
        return "狗";
    }

    @Override
    public String shout() {
        return "汪汪";
    }
}
//基于Animal类,定义山羊类Goat,并重写两个抽象方法
class Goat extends Animal{


    @Override
    public String getAnimalClass() {
        return "山羊";
    }

    @Override
    public String shout() {
        return "咩咩";
    }
}

第八次题目

容器-ArrayList-排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
import java.util.Comparator;
class Student {
    public String id;//学号
    public String name;//姓名
    public int math;//数学成绩
    public int phys;//物理成绩
    public int sum;//总分

    //构造函数
    public Student(String id, String name, int math, int phys) {
        this.id = id;
        this.name = name;
        this.math = math;
        this.phys = phys;
        this.sum = math + phys;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Student> arrayList = new ArrayList<>(); // 用于存储学生信息

        Scanner scanner = new Scanner(System.in);
        while (true) {
            String line = scanner.nextLine();
            if(line.equals("end")) {
                break;
            }
            String[] a = line.split(" ");
            Student student = new Student(a[0], a[1], Integer.parseInt(a[2]), Integer.parseInt(a[3]));
            arrayList.add(student);
        }

        // 学生按照总分排序,总分相等则按输入顺序
        Collections.sort(arrayList, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                // First compare the total score
                if (s2.sum != s1.sum) {
                    return s2.sum - s1.sum;
                }
                // If scores are equal, break ties based on index
                else {
                    return arrayList.indexOf(s1) - arrayList.indexOf(s2);
                }
            }
        });


        // 输出学生信息
        for (Student student : arrayList) {
            System.out.println(student.id + " " + student.name + " " + student.sum);
        }
    }
}

 jmu-Java-02基本语法-03-身份证排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    static class IdCard {
        String id;
        String birth;

        public IdCard(String id) {
            this.id = id;
            String[] strs = id.split("");
            this.birth = strs[6] + strs[7] + strs[8] + strs[9] + "-" + strs[10] + strs[11] + "-" + strs[12] + strs[13];
        }

        public String toString() {
            return id + " " + birth;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        ArrayList<IdCard> idCards = new ArrayList<>();
        int n = scanner.nextInt();
        scanner.nextLine();
        for (int i = 0; i < n; i++) {
            String id = scanner.nextLine();
            idCards.add(new IdCard(id));
        }

        String sortType = scanner.nextLine();

        while (true) {
            if (sortType.equals("sort1")) {
                sortByIdCardBirth(idCards);
            } else if (sortType.equals("sort2")) {
                sortByIdCardBirthAndId(idCards);
            } else {
                System.out.println("exit");
                break;
            }
            sortType = scanner.nextLine();
        }
    }

    static void sortByIdCardBirth(ArrayList<IdCard> idCards) {
        // 按出生日期排序
        Collections.sort(idCards, new Comparator<IdCard>() {
            @Override
            public int compare(IdCard o1, IdCard o2) {
                return o1.birth.compareTo(o2.birth);
            }
        });

        // 输出身出生日期
        for (IdCard idCard : idCards) {
            System.out.println(idCard.birth);
        }
    }

    static void sortByIdCardBirthAndId(ArrayList<IdCard> idCards) {
        // 按出生日期和身份证号码排序
        Collections.sort(idCards, new Comparator<IdCard>() {
            @Override
            public int compare(IdCard o1, IdCard o2) {
                int cmp = o1.birth.compareTo(o2.birth);
                return cmp != 0 ? cmp : o1.id.compareTo(o2.id);
            }
        });

        // 输出身份证号码
        for (IdCard idCard : idCards) {
            System.out.println(idCard.id);
        }
    }
}

 jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack

import java.util.Arrays;
import java.util.Scanner;

interface IntegerStack {
    Integer push(Integer item);
    Integer pop();
    Integer peek();
    boolean empty();
    int size();
}

class ArrayIntegerStack implements IntegerStack {
    public Integer[] array;
    private int top;

    public ArrayIntegerStack(int n) {
        array = new Integer[n];
        top = 0;
    }

    public Integer push(Integer item) {
        if (item == null || top == array.length) {
            return null;
        }
        array[top++] = item;
        return item;
    }

    public Integer pop() {
        if (empty()) {
            return null;
        }
        return array[--top];
    }

    public Integer peek() {
        if (empty()) {
            return null;
        }
        return array[top-1];
    }

    public boolean empty() {
        return top == 0;
    }

    public int size() {
        return top;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n = in.nextInt();
        ArrayIntegerStack stack = new ArrayIntegerStack(n);
        int m = in.nextInt();
        for(int i=0;i<m;i++) {
            int temp = in.nextInt();
            System.out.println(stack.push(temp));
        }
        System.out.println(stack.peek()+","+stack.empty()+","+stack.size());
        System.out.println(Arrays.toString(stack.array));
        int x = in.nextInt();
        for(int j = 0;j<x;j++) {
            System.out.println(stack.pop());
        }
        System.out.println(stack.peek()+","+stack.empty()+","+stack.size());
        System.out.println(Arrays.toString(stack.array));
    }
}

 jmu-Java-03面向对象基础-05-覆盖

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n1 = in.nextInt();
        PersonOverride[] person1 = new PersonOverride[n1];
        for (int i = 0; i < n1; i++) {
            person1[i] = new PersonOverride();
        }

        int n2 = in.nextInt();
        ArrayList<PersonOverride> person2 = new ArrayList<>();
        for (int i = 0; i < n2; i++) {
            PersonOverride p = new PersonOverride(in.next(), in.nextInt(), in.nextBoolean());
            if (!person2.contains(p)) {
                person2.add(p);
            }
        }
        in.close();

        // print first array of PersonOverride objects
        for (int i = 0; i < n1; i++) {
            System.out.println(person1[i]);
        }


        for (PersonOverride p : person2) {
            System.out.println(p);
        }
        System.out.println(person2.size());
        System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
    }
}

class PersonOverride {
    private final String name;
    private final int age;
    private final boolean gender;

    public PersonOverride() {
        this("default", 1, true);
    }

    public PersonOverride(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    @Override
    public String toString() {
        return name + "-" + age + "-" + gender;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + (gender ? 1231 : 1237);
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PersonOverride other = (PersonOverride) obj;
        if (age != other.age)
            return false;
        if (gender != other.gender)
            return false;
        if (name == null) {
            return other.name == null;
        } else return name.equals(other.name);
    }
}

 课程成绩统计程序-3

 

import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
    static boolean isNumber(String isNumber){
        try{
            int a=Integer.parseInt(isNumber);
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str;
        studentList students=new studentList();
        InputMatching matching=new InputMatching();
        chooseCourseList choose=new chooseCourseList();
        Cls cls=new Cls();
        courseList course=new courseList();
        String str1,str2,str3;
        while(true){
            str=input.nextLine();
            if(isNumber(str.split(" ")[0]))break;
            if(str.equals("end"))break;
            if(InputMatching.matchingInput(str) != 1){
                System.out.println("wrong format");
                continue;
            }
            str1=str.split(" ")[0];
            if(course.searchCourse(str1))continue;
            str2=str.split(" ")[1];
            str3=str.split(" ")[2];
            if((str2.equals("必修")&&str3.equals("考察"))||(str2.equals("实验")&&!str3.equals("实验")||(!str2.equals("实验")&&str3.equals("实验")))){
                System.out.println(str.split(" ")[0]+" : course type & access mode mismatch");
                continue;
            }
            if(course.searchCourse(str1))continue;
            course.courses.add(course.addCourse(str1,str2,str3));
        }
        String number,name,subject;
        int UsualGrades,FinalGrades;
        boolean flag=false;
        while(!str.equals("end")){
            if(flag)str=input.nextLine();
            flag=true;
            if(str.equals("end"))break;
            String ssr=str.split(" ")[0]+" "+str.split(" ")[1]+" "+str.split(" ")[2]+" "+str.split(" ")[3];
            if (InputMatching.matchingInput(ssr) != 2&&InputMatching.matchingInput(ssr) != 3&&course.searchQuality(str.split(" ")[2])!=2) {
                System.out.println("wrong format");// 字符串符合成绩信息模式
                continue;
            }
            if(((Integer.parseInt(str.split(" ")[3]))<4||(Integer.parseInt(str.split(" ")[3]))>9)&&str.split(" ").length>5){
                System.out.println("wrong format");
                continue;
            }
            number=str.split(" ")[0];
            String Class = number.substring(0, 6);
            if (!cls.searchCls(Class)) cls.cls.add(cls.addCls(Class));
            name=str.split(" ")[1];

            students.stu.add(students.addStudent(number,name));
            subject=str.split(" ")[2];
            try {
                if (course.searchQuality(subject) == 1) {
                     UsualGrades = Integer.parseInt(str.split(" ")[3]);
                    if (choose.searchCourse(subject) && choose.searchId(number)) continue;
                     FinalGrades = Integer.parseInt(str.split(" ")[4]);
                    students.students.add(students.addStudentCompulsory(number, name, subject, UsualGrades, FinalGrades));
                } else if (course.searchQuality(subject) == 0) {
                     UsualGrades = Integer.parseInt(str.split(" ")[3]);
                    if (choose.searchCourse(subject) && choose.searchId(number)) continue;
                    if (str.split(" ").length > 4) {
                        System.out.println(number + " " + name + " : access mode mismatch");
                        continue;
                    }
                    students.students.add(students.addStudentTake(number, name, subject, UsualGrades));
                } else if (course.searchQuality(subject) == -1) {
                    System.out.println(subject + " does not exist");
                } else if (course.searchQuality(subject) == 2) {
                    int testNumber = Integer.parseInt(str.split(" ")[3]);
                    if (str.split(" ").length - 4 != testNumber) {
                        System.out.println(number + " " + name + " : access mode mismatch");
                        continue;
                    }
                    int sum = 0;
                    for (int i = 0; i < testNumber; i++) {
                        sum += Integer.parseInt(str.split(" ")[4 + i]);
                    }
                    sum /= testNumber;
                    students.students.add(students.addExperimentalGrades(number, name, subject, sum));
                }
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println(number + " " + name + " : access mode mismatch");
            }

        }
        chooseCourseList chooses=new chooseCourseList();
        chooses.getAverageGrade(students,course,cls);
    }
}



class student{
    int experimentalGrades;
    String number;
    String name;
    String course;
    int UsualGrades=0;
    int FinalGrades=0;
    String Class;
    int grade=0;
    public static Comparator<student> getNumberComparator() {
        return Comparator.comparing(s -> s.number);
    }
}
class course{
    String name;
    String quality;
    String manner;
    public static Comparator<course> getChineseNameComparator() {
        final Collator collator = Collator.getInstance(java.util.Locale.CHINA); // 获取中文排序规则
        return (c1, c2) -> collator.compare(c1.name, c2.name);
    }
}
class courseList{
    ArrayList<course>courses=new ArrayList<>();

    boolean searchCourse(String CourseName){
        for (course cours : courses) if (cours.name.equals(CourseName)) return true;
        return false;
    }
    course addCourse( String name,String quality,String manner){
        course newCourse=new course();
        newCourse.name=name;
        newCourse.quality=quality;
        newCourse.manner=manner;
        return newCourse;
    }
    int searchQuality(String subject){
        for (course course : courses) {
            if (course.name.equals(subject) && course.quality.equals("必修")) return 1;
            else if (course.name.equals(subject) && course.manner.equals("考试")) return 1;
            else if (course.name.equals(subject)&&course.quality.equals("实验"))return 2;
            else if (course.name.equals(subject)&&course.manner.equals("实验"))return 2;
            else if (course.name.equals(subject)) return 0;
        }
        return -1;
    }

}
class studentList  {
    ArrayList<student> students = new ArrayList<>();
    ArrayList<student> stu = new ArrayList<>();

    student addStudentCompulsory(String number, String name, String course, int UsualGrades, int FinalGrades) {
        student newStudent = new student();
        chooseCourseList newChoose = new chooseCourseList();
        newStudent.name = name;
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        Cls newCls = new Cls();
        newStudent.number = number;
        newStudent.course = course;
        newStudent.grade = (int) (FinalGrades * 0.7 + UsualGrades * 0.3);
        String Class = number.substring(0, 6);
        if (!newCls.searchCls(Class)) newCls.cls.add(newCls.addCls(Class));
        chooseCourseList.chooseCourse.add(newChoose.addChoose(number, name, course, Class, UsualGrades, FinalGrades, newStudent.grade));
        return newStudent;
    }

    student addStudentTake(String number, String name, String course, int UsualGrades) {
        student newStudent = new student();
        newStudent.name = name;
        newStudent.number = number;
        newStudent.course = course;
        newStudent.grade = UsualGrades;
        String Class=number.substring(0,6);
        chooseCourseList newChoose = new chooseCourseList();
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        chooseCourseList.chooseCourse.add(newChoose.addChooseTake(number, name, course, Class, UsualGrades, newStudent.grade));
        return newStudent;
    }
    student addExperimentalGrades(String number, String name, String course, int experimentalGrades) {
        student newStudent = new student();
        newStudent.name = name;
        newStudent.number = number;
        newStudent.course = course;
        newStudent.experimentalGrades = experimentalGrades;
        newStudent.grade = experimentalGrades;
        String Class=number.substring(0,6);
        chooseCourseList newChoose = new chooseCourseList();
        if(chooseCourseList.searchCourse(course)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).name.equals(name)&& chooseCourseList.chooseCourse.get(chooseCourseList.searchCourseInt(course)).number.equals(number)) return null;
        chooseCourseList.chooseCourse.add(newChoose.addChooseExperimental(number, name, course, Class, experimentalGrades,newStudent.grade));
        return newStudent;
    }

    student addStudent(String id, String name) {
        student newStudent = new student();
        newStudent.number = id;
        newStudent.name = name;
        return newStudent;
    }

    boolean searchStudent(String name) {
        for (student student : students) {
            if (student.name.equals(name)) return true;
        }
        return false;
    }


}


class Cls {
    private static int nextIndex = 0;
    String id;
    private int index;

    ArrayList<Cls> cls = new ArrayList<>();

    public Cls addCls(String cl) {
        Cls newCls = new Cls();
        newCls.id = cl;

        // 新增元素的 index 应该为当前列表长度
        newCls.index = nextIndex++;
        cls.add(newCls);

        return newCls;
    }

    public boolean searchCls(String id) {
        for (int i = 0; i < cls.size(); i++) {
            if (cls.get(i).id.equals(id)) {
                return true;
            }
        }
        return false;
    }

    public static Comparator<Cls> getIndexComparator() {
        return new Comparator<Cls>() {
            @Override
            public int compare(Cls c1, Cls c2) {
                return c1.id.compareTo(c2.id);
            }
        };
    }
}

class InputMatching {
    static String stuNumMatching = "[0-9]{8}";//8个0-9的数字
    static String stuNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符
    static String scoreMatching = "([1-9]?[0-9]|100)";
    static String courseNameMatching = "\\S{1,10}";//1到10个非空格(TAB)字符
    static String courseTypeMatching = "(选修|必修|实验)";
    static String checkCourseTypeMatching = "(考试|考察|实验)";
    //cousrInput用于定义课程信息模式(正则表达式)
    static String courseInput = courseNameMatching + " " + courseTypeMatching + " " + checkCourseTypeMatching;
    //scoreInput用于定义成绩信息模式(正则表达式)
    static String scoreInput1 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " +
            scoreMatching + "(scoreMatching)?";
    static String scoreInput2 = stuNumMatching + " " + stuNameMatching + " " + courseNameMatching + " " +
            scoreMatching + "(scoreMatching)?"+" "+scoreMatching + "(scoreMatching)?";
    public static int matchingInput(String s) {
        if (matchingCourse(s)) {
            return 1;
        }
        if (matchingScore1(s)) {
            return 2;
        }
        if (matchingScore2(s)) {
            return 3;
        }
        return 0;
    }

    static boolean matchingCourse(String s) {
        return s.matches(courseInput);
    }

    static boolean matchingScore1(String s) {
        return s.matches(scoreInput1);
    }
    static boolean matchingScore2(String s) {
        return s.matches(scoreInput2);
    }
}
class chooseCourseList{
    static ArrayList<student> chooseCourse=new ArrayList<>();
    static boolean searchId(String id){
        for (student student : chooseCourse) if (student.number.equals(id)) return true;
        return false;
    }
    static boolean searchCourse(String course){
        for (student student : chooseCourse) if (student.course.equals(course)) return true;
        return false;
    }
    static int searchCourseInt(String course){
        for(int i=0;i<chooseCourse.size();i++)
            if(chooseCourse.get(i).course.equals(course))return i;
        return -1;
    }
    static boolean searchClass(String Class){
        for (student student : chooseCourse) if (student.Class.equals(Class)) return true;
        return false;
    }
    student addChoose(String id,String name,String course,String Class,int UsualGrades,int FinalGrades,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.UsualGrades=UsualGrades;
        newStudent.FinalGrades=FinalGrades;
        newStudent.grade=grade;
        return newStudent;
    }
    student addChooseTake(String id,String name,String course,String Class,int UsualGrades,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.UsualGrades=UsualGrades;
        newStudent.grade=grade;
        return newStudent;
    }
    student addChooseExperimental(String id,String name,String course,String Class,int experimental,int grade )
    {
        student newStudent=new student();
        newStudent.Class=Class;
        newStudent.number=id;
        newStudent.name=name;
        newStudent.course=course;
        newStudent.experimentalGrades=experimental;
        newStudent.grade=experimental;
        return newStudent;
    }
    public int getAverageGrades(String id){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.number.equals(id)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseUsualGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.UsualGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseFinalGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.FinalGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageCourseGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getAverageExperimentalGrades(String course){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.course.equals(course)) {
                sum += student.experimentalGrades;
                cnt++;
            }
        }
        return sum/=cnt;
    }
    public int getClassAverageGrades(String Class){
        int sum=0,cnt=0;
        for (student student : chooseCourse) {
            if (student.Class.equals(Class)) {
                sum += student.grade;
                cnt++;
            }
        }
        return sum/=cnt;
    }

    public void getAverageGrade(studentList students,courseList courses,Cls cls){
        students.stu.sort(student.getNumberComparator());
        cls.cls.sort(Cls.getIndexComparator());
        courses.courses.sort(course.getChineseNameComparator());
        for (int i = 0; i < students.stu.size(); i++) {
            int flag = 0;
            for (int j = 0; j < i; j++) {
                if (students.stu.get(j).number.equals(students.stu.get(i).number)) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
            if (searchId(students.stu.get(i).number)) {
                System.out.println(students.stu.get(i).number + " " + students.stu.get(i).name + " " + getAverageGrades(students.stu.get(i).number));
            } else {
                System.out.println(students.stu.get(i).number + " " + students.stu.get(i).name + " did not take any exams");
            }
        }

        for (int i = 0; i < courses.courses.size(); i++) {
            if (searchCourse(courses.courses.get(i).name)) {
                if (courses.courses.get(i).manner.equals("考试")) {
                    System.out.println(courses.courses.get(i).name + " " + getAverageCourseUsualGrades(courses.courses.get(i).name)
                            + " " + getAverageCourseFinalGrades(courses.courses.get(i).name) + " " + getAverageCourseGrades(courses.courses.get(i).name));
                } else if (courses.courses.get(i).manner.equals("考察")) {
                    System.out.println(courses.courses.get(i).name + " " + getAverageCourseUsualGrades(courses.courses.get(i).name)
                            + " " + getAverageCourseGrades(courses.courses.get(i).name));
                } else {
                    System.out.println(courses.courses.get(i).name + " " + getAverageExperimentalGrades(courses.courses.get(i).name));
                }
            } else {
                System.out.println(courses.courses.get(i).name + " has no grades yet");
            }
        }

        for (int i = 0; i < cls.cls.size(); i++) {
            int flag = 0;
            for (int j = 0; j < i; j++) {
                if (cls.cls.get(j).equals(cls.cls.get(i))) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
            if (searchClass(cls.cls.get(i).id)) {
                System.out.println(cls.cls.get(i).id + " " + getClassAverageGrades(cls.cls.get(i).id));
            } else {
                System.out.println(cls.cls.get(i).id + " has no grades yet");
            }
        }

    }
}

三、主要困难及改进建议

  1. 长方法:代码中的一些方法非常长,并且包含大量的嵌套if语句和循环。将这些方法拆分成更小的、可重用的方法可以提高代码的可读性和可维护性。

  2. 缺少异常处理:代码没有足够的异常处理机制来处理可能出现的异常情况。这可能导致程序意外终止或产生不正确的结果。建议添加适当的异常处理和错误处理机制。

  3. 提取公共方法:将输入合法性验证和错误处理的逻辑提取为独立的方法,以提高代码的可读性和可维护性。可以考虑设计一个输入处理类,将输入的合法性判断、错误处理和信息存储等功能封装在该类中,使得代码更加模块化和易于扩展。
  4. 代码规范和格式化:遵循Java的代码规范和风格,例如使用适当的缩进、对齐、大括号放置等。这样可以使代码更一致,易于阅读和维护。

四、总结

 

学到了:

1. 了解了一个学生成绩管理系统的基本功能和实现方式。
2. 熟悉了使用面向对象的思想进行代码设计和封装,以及使用类和对象管理数据。
3. 掌握了使用正则表达式对输入合法性进行验证的方法。
4. 学会了使用循环、条件语句和数组等基本编程技巧处理输入数据和进行相应的操作。
5. 理解了优化代码的重要性,如提取公共方法、减少重复代码、简化逻辑和数据结构等,以提高代码的可读性、可维护性和性能。
6. 意识到代码中存在的一些问题,如冗余逻辑、重复代码和不合理的数据结构设计。

需要进一步学习和研究的方面包括:

1. 异常处理:深入学习异常处理的原理和机制,在代码中灵活运用异常处理来提高代码的健壮性和可维护性。
2. 设计模式:学习和掌握常用的设计模式,以提高代码的可重用性、可扩展性和可维护性。
3. 大型项目架构和设计:了解大型项目的架构设计原则、模块划分、层次结构等,学习如何进行系统性的项目规划和架构设计。
4. 性能优化:进一步学习如何进行代码和程序的性能优化,减少资源的消耗,并提高系统的响应速度和稳定性。
5. 设计原则和编码规范:学习常用的设计原则和编码规范,如单一职责原则、开闭原则、代码重构等,用于指导和规范自己的代码编写。

posted @ 2023-06-28 23:18  快乐无罪  阅读(36)  评论(0)    收藏  举报