首页 > 其他分享 >Yqw-Blog-3

Yqw-Blog-3

时间:2023-06-23 23:33:39浏览次数:37  
标签:String int value public Blog new Yqw array

Yqw第三次博客作业

目录

前言

⭕ 好久不见,这是这个学期最后一次Blog啦,为期一学期的java学习终于要告一段落了。老实说,对于《面向对象程序设计》(Java)还是不太懂,但是Java的实训在明年,今年是C语言,暑假还再可以挣扎一下。

总结所涉及到的知识点、题量、难度等情况

6-8次的pta没有延续之前的菜单计价程序,主要是围绕课程成绩统计程序进行的。第六次大作业就是成绩统计程序,第七次大作业则增加了对HashMap和多态的一个考察,第八次大作业则是增加了对Array.*部分知识点的考察。题量还可以,难度的话,没有延续菜单的难度,已经很知足了,两次迭代也没有在类设计方面发生什么变化,所以从某些方面而言也算是简单了不少(就是可能在细节方面多了一些测试点)。

☀️ 多态是指同一个方法在不同的对象上具有不同的行为。在Java编程中,多态可以通过重载和重写实现。

设计与分析

成绩统计程序-1

得分情况:

代码:
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Main main = new Main();
		Scanner scanner = new Scanner(System.in);
		ArrayList<String> messages = new ArrayList<String>();
		ArrayList<Course> coures = new ArrayList<Main.Course>();
		ArrayList<Score> scores = new ArrayList<Main.Score>();
		ArrayList<Student> students = new ArrayList<Main.Student>();
		ArrayList<Grades> gradess = new ArrayList<Main.Grades>();
		while (true) {
			String string = scanner.nextLine();
			if ("end".equals(string)) {
				break;
			}else {
				String[] arr = string.split(" ");
				if (arr.length==2) {
					Course course = main.new Course();
					course.name = arr[0];
					if (arr[0].length()>10) {
						messages.add("wrong format");
						continue;
					}
					if (arr[1].length()!=2||arr[2].length()!=2) {
						messages.add("wrong format");
						continue;
					}
					if ("必修".equals(arr[1])) {
						course.isCompulsory = true;
					}else {
						course.isCompulsory = false;
					}
					if (course.isCompulsory) {
						course.examine = true;
					}else {
						messages.add("wrong format");
						continue;
					}
					boolean flag=true;
					for (int j = 0; j < coures.size(); j++) {
						if (coures.get(j).name.equals(arr[0])) {
							flag=false;
						}
					}
					if (flag) {
						coures.add(course);
					}
				}else if (arr.length==3) {
					Course course = main.new Course();
					course.name = arr[0];
					if (arr[0].length()>10) {
						messages.add("wrong format");
						continue;
					}
					if (arr[1].length()!=2||arr[2].length()!=2) {
						messages.add("wrong format");
						continue;
					}
					if ("必修".equals(arr[1])) {
						course.isCompulsory = true;
					}else {
						course.isCompulsory = false;
					}
					if (course.isCompulsory) {
						if ("考察".equals(arr[2])) {
							messages.add(arr[0]+" : course type & access mode mismatch");
							continue;
						}
						course.examine = true;
					}else {
						if ("考察".equals(arr[2])) {
							course.examine = false;
						}else {
							course.examine = true;
						}
					}
					boolean flag=true;
					for (int j = 0; j < coures.size(); j++) {
						if (coures.get(j).name.equals(arr[0])) {
							flag=false;
						}
					}
					if (flag) {
						coures.add(course);
					}
				}else if (arr.length==4) {
					int k=0;
					if (arr[0].length()!=8) {
						messages.add("wrong format");
						continue;
					}
					if (arr[1].length()>10) {
						messages.add("wrong format");
						continue;
					}
					try {
						int nums = Integer.parseInt(arr[0]);
						k = Integer.parseInt(arr[3]);
					} catch (Exception e) {
						messages.add("wrong format");
						continue;
					}
					if (k>100||k<0) {
						messages.add("wrong format");
						continue;
					}
					Student student = null;
					for (int j = 0; j < students.size(); j++) {
						if (students.get(j).snum.equals(arr[0])) {
							student = students.get(j);
						}
					}
					if (student==null) {
						student = main.new Student();
						student.sname = arr[1];
						student.snum = arr[0];
						students.add(student);
					}
					String gnum = arr[0].substring(0,6);
					Grades grades =null;
					for (int j = 0; j < gradess.size(); j++) {
						if (gradess.get(j).gnum.equals(gnum)) {
							grades =gradess.get(j);
						}
					}
					if (grades==null) {
						grades = main.new Grades();
						grades.gnum = gnum;
						grades.students.add(student);
						gradess.add(grades);
					}else {
						grades.students.add(student);
					}
					Course course =null;
					for (int j = 0; j < coures.size(); j++) {
						if (coures.get(j).name.equals(arr[2])) {
							course =coures.get(j);
						}
					}
					if (course==null) {
						messages.add(arr[2]+" does not exist");
						continue;
					}
					if (course.examine) {
						messages.add(arr[0]+" "+arr[1]+" : access mode mismatch");
						continue;
					}
					Score score = main.new Score();
					score.course = course;
					score.student = student;
					score.examination = k;
					scores.add(score);
				}else if (arr.length==5){
					int p = 0;
					int k=0;
					if (arr[0].length()!=8) {
						messages.add("wrong format");
						continue;
					}
					if (arr[1].length()>10) {
						messages.add("wrong format");
						continue;
					}
					try {
						int nums = Integer.parseInt(arr[0]);
						k = Integer.parseInt(arr[4]);
						p = Integer.parseInt(arr[3]);
					} catch (Exception e) {
						messages.add("wrong format");
						continue;
					}
					if (k>100||k<0) {
						messages.add("wrong format");
						continue;
					}
					Student student = null;
					for (int j = 0; j < students.size(); j++) {
						if (students.get(j).snum.equals(arr[0])) {
							student = students.get(j);
						}
					}
					if (student==null) {
						student = main.new Student();
						student.sname = arr[1];
						student.snum = arr[0];
						students.add(student);
					}
					String gnum = arr[0].substring(0,6);
					Grades grades =null;
					for (int j = 0; j < gradess.size(); j++) {
						if (gradess.get(j).gnum.equals(gnum)) {
							grades =gradess.get(j);
						}
					}
					if (grades==null) {
						grades = main.new Grades();
						grades.gnum = gnum;
						grades.students.add(student);
						gradess.add(grades);
					}else {
						grades.students.add(student);
					}
					
					Course course =null;
					for (int j = 0; j < coures.size(); j++) {
						if (coures.get(j).name.equals(arr[2])) {
							course =coures.get(j);
						}
					}
					if (course==null) {
						messages.add(arr[2]+" does not exist");
						continue;
					}
					if (!course.examine) {
						messages.add(arr[0]+" "+arr[1]+" : access mode mismatch");
						continue;
					}
					Score score = main.new Score();
					score.course = course;
					score.student = student;
					score.examination = k;
					score.ordinary = p;
					scores.add(score);
				}
			}
		}
		for (int j = 0; j < students.size(); j++) {
			for (int i = j; i < students.size(); i++) {
				if (Integer.parseInt(students.get(j).snum)>Integer.parseInt(students.get(i).snum)) {
					Student student = main.new Student();
					student = students.get(i);
					students.set(i, students.get(j));
					students.set(j, student);
				}
			}
		}
		Comparator comparator = Collator.getInstance(java.util.Locale.CHINESE);
		String[] courS = new String[coures.size()];
		for (int i = 0; i < courS.length; i++) {
			courS[i] = coures.get(i).name;
		}
		Arrays.sort(courS, comparator);
		ArrayList<Course> courses = new ArrayList<Main.Course>();
		for (int i = 0; i < courS.length; i++) {
			for (int j = 0; j < coures.size(); j++) {
				if (courS[i].equals(coures.get(j).name)) {
					courses.add(coures.get(j));
				}
			}
		}
        for (int j = 0; j < gradess.size(); j++) {
			for (int i = j; i < gradess.size(); i++) {
				if (Integer.parseInt(gradess.get(j).gnum)>Integer.parseInt(gradess.get(i).gnum)) {
					Grades grades = main.new Grades();
					grades = gradess.get(i);
					gradess.set(i, gradess.get(j));
					gradess.set(j, grades);
				}
			}
		}
		for (int j = 0; j < messages.size(); j++) {
			System.out.println(messages.get(j));
		}
		for (int j = 0; j < students.size(); j++) {
			Student student = students.get(j);
			double sum=0;
			int num=0;
			if (scores.size()==0) {
				System.out.println(student.snum+" "+student.sname+" "+"did not take any exams");
			}else {
				for (int i = 0; i < scores.size(); i++) {
					if (student.snum.equals(scores.get(i).student.snum)) {
						Course course = scores.get(i).course;
						if (course.examine) {
							sum+=Math.floor(scores.get(i).ordinary*0.3+scores.get(i).examination*0.7);
						}else {
							sum+=scores.get(i).examination;
						}
						num++;
					}
				}
				System.out.println(student.snum+" "+student.sname+" "+String.valueOf(Math.floor(sum/num)).substring(0,2));
				student.sumAverage = Math.floor(sum/num);
			}
		}
		for (int j = 0;j < courses.size(); j++) {
			Course course = courses.get(j);
			double sum=0;
			double sump=0;
			double sumk=0;
			int num=0;
			if (scores.size()==0) {
				System.out.println(course.name+" "+"has no grades yet");
			}else {
				for (int i = 0; i < scores.size(); i++) {
					Course course1 = scores.get(i).course;
					if (course.name.equals(course1.name)) {
						if (course.examine) {
							sum+=Math.floor(scores.get(i).ordinary*0.3+scores.get(i).examination*0.7);
							sump += scores.get(i).ordinary;
							sumk+=scores.get(i).examination;
						}else {
							sum+=scores.get(i).examination;
							sumk+=scores.get(i).examination;
						}
						num++;
					}
				}
				if (course.examine) {
					System.out.println(course.name+" "+String.valueOf(Math.floor(sump/num)).substring(0,2)+" "+
							String.valueOf(Math.floor(sumk/num)).substring(0,2)+" "+String.valueOf(Math.floor(sum/num)).substring(0,2));
				}else {
					System.out.println(course.name+" "+
							String.valueOf(Math.floor(sumk/num)).substring(0,2)+" "+String.valueOf(Math.floor(sum/num)).substring(0,2));
				}
			}
		}
		for (int j = 0; j < gradess.size(); j++) {
			double sum=0;
			int num=0;
			ArrayList<Student> students1 = gradess.get(j).students;
			if (scores.size()==0) {
				System.out.println(gradess.get(j).gnum+" "+"has no grades yet");
			}else {
				for (int i = 0; i < students1.size(); i++) {
					sum+=students1.get(i).sumAverage;
					num++;
				}
				System.out.println(gradess.get(j).gnum+" "+String.valueOf(Math.floor(sum/num)).substring(0,2));
			}		
		}
	}

class Student {
		String snum;
		String sname;
		double sumAverage=0;
	}
    
class Course{
		boolean isCompulsory;
		String name;
		boolean examine;
	}
    
class Score{
		Student student;
		Course course;
		double ordinary=0;
		double examination=0;
	}
    
class Grades{
		String gnum;
		ArrayList<Student> students=new ArrayList<Main.Student>();
	}
}


类图:

圈复杂度:

分析:

我还是和之前差不多,把主要的放在了main函数中,在main中写了大量的if来判断输入,剩下的四个类(Student、Course、Score、Grades)主要是起到了声明变量的作用。
在主函数中创造了五个不同类型的ArrayList数组,用于存储不同类型的输入数据类别,创造一个未遇到end就一直输入的死循环,再用很多if对输入进行判断以及一些后续操作。

成绩统计程序-2

得分情况:

代码:
import java.util.*;
import java.text.Collator;

public class Main {
    public static void main(String[] args) {
	ArrayList<课程>lesson=new ArrayList();//课程信息
	ArrayList <班级>classes=new ArrayList();//班级信息
	ArrayList <选课>choice=new ArrayList();//课程学生成绩;
	ArrayList <String>成绩记录=new ArrayList();

	String regex1=".{0,10}[ ](必修|选修|实验)[ ](考试|考察|实验)";//课程信息
	String regex2=".{0,10}[ ](必修)[ ](考试)";//必修课程信息
	String regex3=".{0,10}[ ](选修)[ ](考试|考察)";//选修课程信息
	String regex0=".{0,10}[ ](实验)[ ](实验)";//选修课程信息
	String regex4="\\d{8}[ ].{0,10}[ ].{0,10}[ ](\\d|[1-9]\\d|100)[ ](\\d|[1-9]\\d|100)";//考试成绩输入
	String regex5="\\d{8}[ ].{0,10}[ ].{0,10}[ ](\\d|[1-9]\\d|100)";//考察成绩输入
	Scanner input=new Scanner(System.in);
	String l;
	
	while(true) {
	l=input.nextLine();
	String brr[]=l.split(" ");
	int len=brr.length;//
	if(l.equals("end")) {
		break;
	}
	else if(l.matches(regex1) ){//如果输入是课程信息的格式,java 必修 考试
		String arr[]=l.split(" ");
        int flag=0;
		if(l.matches(regex3)||l.matches(regex2)||l.matches(regex0)) {
		//0是没有添加过,1是添加过
		课程 k=new 课程(arr[0], arr[1], arr[2]);
		for(课程 c:lesson) {
			if(c.课程名称.equals(k.课程名称)) {
				flag=1;
			}
		}
		if(flag==0) {//没添加过
		lesson.add(k);
		}
		}
		else {//java : course type & access mode mismatch
			System.out.println(arr[0]+" : course type & access mode mismatch");
		}
		
		//不知道有没有else
	}
	else if(len==5&&brr[0].matches("^[0-9]{8}$")&&brr[1].length()<=10&&brr[2].length()<=10&&brr[3].matches("^[0-9]{1,2}|(100)$")&&brr[4].matches("^[0-9]{1,2}|(100)$")) {//如果输入的是考试成绩,20201103 张三 java 20 40
		
		int x=0;
		
		int yc=0;
		String arr[]=l.split(" ");
		if(arr[3]!=null) {
		if(Integer.parseInt(arr[3])<0||Integer.parseInt(arr[3])>100) {
			System.out.println("wrong format");
			continue;
		}
		}
		String 班号=arr[0].substring(0,6);
		for(String s:成绩记录) {
			if(s.equals(arr[0]+arr[1]+arr[2])) {
				x=1;
			}
		}
		if(x==1) {
			continue;
		}
		成绩记录.add(arr[0]+arr[1]+arr[2]);
		学生 stu=new 学生(arr[1], arr[0]);
		int flag=0;//如果班号存过
		for(int i=0;i<classes.size();i++) {
		
			if(班号.equals(classes.get(i).班号)) {
				flag=1;//班号存过
				int temp=1;//1是没存过,0是存过
				for(学生 b:classes.get(i).students) {
					if(b.学号.equals(stu.学号)) {
						temp=0;
						break;
					}
				}
				if(temp==1) {
				classes.get(i).添加学生(stu);
				}
				break;
			
			}
		}
	
		if(flag==0) {//班号没存过
			班级 bj=new 班级(班号);
			bj.添加学生(stu);
			classes.add(bj);
		}//把学生添加到班级里
		String typle=Typleoflesson(lesson, arr[2]);
		if(typle==null) {//学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
			System.out.println(arr[2]+" does not exist");
		yc=1;
		}
		else if(typle.equals("考试")) {
			//先不添加班级
			if(arr[3]!=null&&arr[4]!=null){
			考试成绩 k=new 考试成绩(Integer.parseInt(arr[3]), Integer.parseInt(arr[4]));
			选课 choose=new 选课(stu, arr[2], k);
			for(int i=0;i<classes.size();i++) {
                if(classes.size()!=0)
				if(班号.equals(classes.get(i).班号)) {
					classes.get(i).选课信息添加(choose);
				}
			}
			choice.add(choose);
			
        }
		}
		else if(typle.equals("考察")) {//学号+英文空格+姓名+英文空格+": access mode mismatch"
			if(yc==0) {
			System.out.println(arr[0]+" "+arr[1]+" "+": access mode mismatch");//
			}
			}
	}
	else if(len==4&&brr[0].matches("^[0-9]{8}$")&&brr[1].length()<=10&&brr[2].length()<=10&&brr[3].matches("^[0-9]{1,2}|(100)$")) {//如果输入的是考察成绩,20201103 张三 java 20
		int yc=0;
		int x=0;
		
		String arr[]=l.split(" ");
		if(arr[3]!=null) {
			if(Integer.parseInt(arr[3])<0||Integer.parseInt(arr[3])>100) {
				System.out.println("wrong format");
				continue;
			}
			}
		String typle=Typleoflesson(lesson, arr[2]);//对照课表找arr
		学生 stu=new 学生(arr[1], arr[0]);
		for(String s:成绩记录) {
			if(s.equals(arr[0]+arr[1]+arr[2])) {
				x=1;
			}
		}
		if(x==1) {
			continue;
		}
		成绩记录.add(arr[0]+arr[1]+arr[2]);
		int flag=0;
		String 班号=arr[0].substring(0,6);
		for(int i=0;i<classes.size();i++) {
			
			if(班号.equals(classes.get(i).班号)) {
				int temp=1;//1是没存过,0是存过
				for(学生 b:classes.get(i).students) {
					if(b.学号.equals(stu.学号)) {
						temp=0;
						break;
					}
				}
				if(temp==1) {
				classes.get(i).添加学生(stu);
				}
				flag=1;
			}
			
		}
		if(flag==0) {
			班级 bj=new 班级(班号);
			bj.添加学生(stu);
			classes.add(bj);//把学生添加到班级里
		}
		if(typle==null) {//课表里没有找到该门课
		//System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" "+"dose not exist");
			//System.out.println("java does not exist");
			System.out.println(arr[2]+" does not exist");
			yc=1;
		}
		else if(typle.equals("考试")) {//先不添加班级
			if(yc==0) {
			System.out.println(arr[0]+" "+arr[1]+" "+": access mode mismatch");
			}
		}
		else if(typle.equals("考察")) {//学号+英文空格+姓名+英文空格+": access mode mismatch"
			
			
			考察成绩 k=new 考察成绩(Integer.parseInt(arr[3]));
			选课 choose=new 选课(stu, arr[2], k);
			for(int i=0;i<classes.size();i++) {
			
				if(班号.equals(classes.get(i).班号)) {
					classes.get(i).选课信息添加(choose);
				}
				
			}
			choice.add(choose);
		}
	}
	else if(brr[0].matches("^[0-9]{8}$")&&brr[1].length()<=10&&brr[2].length()<=10&&isNum(brr[3])&&Integer.parseInt(brr[3])>=4&&Integer.parseInt(brr[3])<=9) {
                int x=0;
		int yc=0;
		int flagg=0;
		String arr[]=l.split(" ");
		for(int i=0;i<arr.length;i++) {
			if(i>=4) {
				if(Integer.parseInt(arr[i])>100||Integer.parseInt(arr[i])<0) {
					System.out.println("wrong format");
					flagg=1;
					break;
				}
			}
		}
		if(flagg==1) {
			continue;
		}
		String 班号=arr[0].substring(0,6);
		for(String s:成绩记录) {//添加过该条成绩
			if(s.equals(arr[0]+arr[1]+arr[2])) {
				x=1;
			}
		}
		if(x==1) {
			continue;
		}
		成绩记录.add(arr[0]+arr[1]+arr[2]);
		学生 stu=new 学生(arr[1], arr[0]);
		int flag=0;//如果班号存过
		for(int i=0;i<classes.size();i++) {
		
			if(班号.equals(classes.get(i).班号)) {
				flag=1;//班号存过
				int temp=1;//1是没存过,0是存过
				for(学生 b:classes.get(i).students) {
					if(b.学号.equals(stu.学号)) {
						temp=0;
						break;
					}
				}
				if(temp==1) {
				classes.get(i).添加学生(stu);
				}
				break;
			}
		}
	
		if(flag==0) {//班号没存过
			班级 bj=new 班级(班号);
			bj.添加学生(stu);
			classes.add(bj);
		}//把学生添加到班级里
		String typle=Typleoflesson(lesson, arr[2]);///
		if(typle==null) {//学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
			//System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" "+"dose not exist");
			System.out.println(arr[2]+" does not exist");
		yc=1;
		}
		if(typle==null) {//课表里没有找到该门课
			//System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" "+"dose not exist");///////////////////////////
				//System.out.println("java does not exist");
				System.out.println(arr[2]+" does not exist");
				yc=1;
			}
		if(typle.equals("实验")) {
			int num=Integer.parseInt(brr[3]);
			if((arr.length-4)!=num) {
				System.out.println(arr[0]+" "+arr[1]+" "+": access mode mismatch");//
			}
			else {
				ArrayList<Integer>xy=new ArrayList<Integer>();
				for(int i=0;i<arr.length;i++) {
					if(i>=4) {
						xy.add(Integer.parseInt(arr[i]));
					}
				}
				
				实验成绩 k=new 实验成绩(xy);
				选课 choose=new 选课(stu, arr[2], k);
				for(int i=0;i<classes.size();i++) {
				
					if(班号.equals(classes.get(i).班号)) {
						classes.get(i).选课信息添加(choose);
					}
				}
				choice.add(choose);
			}
		}
	}
	else {
		System.out.println("wrong format");
	}
	
}//for循环
	
	Collections.sort(lesson);
	Collections.sort(classes);
  输出 system=new 输出(lesson, classes, choice);
  system.systemoutStudent();
  system.systemoutLesson();
  system.systemoutClasses();
}
public static String Typleoflesson(ArrayList<课程>lesson,String name ) {
	for(int i=0;i<lesson.size();i++) {
		if(lesson.get(i)!=null) {
		if(name.equals(lesson.get(i).课程名称)) {
			return lesson.get(i).考核方式;
		}
	}
	}
	return null;
}
private static boolean isNum(String str) {
	if (str.length() == 0 || str == null)
        return false;
    for (int i = 0; i < str.length(); i++){
        if (!Character.isDigit(str.charAt(i))){
            return false;
        }
    }
    return true;
}
}

class 课程 implements Comparable<课程>{
	String 课程名称;
	String 课程性质;
	String 考核方式;
	public 课程(String 课程名称, String 课程性质, String 考核方式) {
		super();
		this.课程名称 = 课程名称;
		this.课程性质 = 课程性质;
		this.考核方式 = 考核方式;
	}
	@Override
	public int compareTo(课程 o) {//按照课程名字排序
		String[] arrays=new String[2];
		arrays[0]=this.课程名称;
		arrays[1]=o.课程名称;
		Comparator com = Collator.getInstance(java.util.Locale.CHINA);

		Arrays.sort(arrays, com);
		if(arrays[0].equals(o.课程名称)) {
			return 1;
		}
		if(arrays[0].equals(this.课程名称)) {
			return -1;
		}
		else
			return 0;
	}	
}

class 学生 implements Comparable<学生>{//组合
	String 姓名;
	String 学号;
	public 学生(String 姓名, String 学号) {
		super();
		this.姓名 = 姓名;
		this.学号 = 学号;
	}
	@Override
	public int compareTo(学生 o) {
		// TODO Auto-generated method stub
		String thisx=this.学号.substring(this.学号.length()-2);
		String ox=o.学号.substring(o.学号.length()-2);
        //xuehao
		int thisxh=Integer.parseInt(thisx);
		int oxh=Integer.parseInt(ox);
		if(thisxh>oxh) {
			return 1;
		}
		if(thisxh<oxh) {
			return -1;
		}
		return 0;
	}
}

class 班级 implements Comparable<班级>{
	String 班号;
	ArrayList<学生> students;
	int 参与考试的人数=0;
	double sum=0;
	 public ArrayList<选课> xuanke;
	 
	public 班级(String 班号) {
		students=new ArrayList();
		xuanke=new ArrayList();
		this.班号 = 班号;
	}
	public void 添加学生(学生 stu) {
			 students.add(stu);
	 }
	public void 选课信息添加(选课 choice) {
		xuanke.add(choice);
	}
	public void 计算总成绩平均分(double 成绩) {
		sum=sum+成绩;
		参与考试的人数=参与考试的人数+1;
	}
	@Override
	public int compareTo(班级 o) {
		int thisxh=Integer.parseInt(this.班号);//this学号
		int oxh=Integer.parseInt(o.班号);//o学号
		if(thisxh>oxh) {
			return 1;
		}
		if(thisxh<oxh) {
			return -1;
		}
		return 0;
	}
	
}
class 成绩{
	public double 总成绩;
	public double 平时成绩=0;
	public double 期末成绩;
	public 成绩() {
		super();
    }
}
class 考试成绩 extends 成绩{
	int 平时成绩;
	int 期末成绩;
	public 考试成绩(int 平时成绩, int 期末成绩) {
		super();
		this.平时成绩 = 平时成绩;
		this.期末成绩 = 期末成绩;
		super.平时成绩=平时成绩;
		super.期末成绩=期末成绩;
		总成绩=(平时成绩*0.3+期末成绩*0.7);
	}
}

class 考察成绩 extends 成绩{
	int 期末成绩;

	public 考察成绩(int 期末成绩) {
		super();
		this.期末成绩 = 期末成绩;
		
		总成绩=(期末成绩);
	}
	
}
class 实验成绩 extends 成绩{
	ArrayList<Integer> 实验分数=new ArrayList<Integer>();

	public 实验成绩(ArrayList<Integer> 实验分数) {
		super();
		this.实验分数 = 实验分数;
		int sum=0;
		for(int i=0;i<实验分数.size();i++) {
			sum=实验分数.get(i)+sum;
		}
		总成绩=sum/实验分数.size();
	}
}

class 选课{
	学生 学生a;
	String  课程a;
	public 成绩 成绩a;
	public 选课(学生 学生a, String 课程a, 成绩 成绩a) {
		super();
		this.学生a = 学生a;
		this.课程a = 课程a;
		this.成绩a = 成绩a;
	}
}

class 输出{
	ArrayList<课程>lesson;//课程信息
	ArrayList <班级>classes;//班级信息
	ArrayList <选课>choice;//课程学生成绩信息;
	public 输出(ArrayList<课程> lesson, ArrayList<班级> classes, ArrayList<选课> choice) {
		super();
		this.lesson = lesson;
		this.classes = classes;
		this.choice = choice;
	}
	public void systemoutStudent() {//1)学生课程总成绩平均分按学号由低到高排序输出,格式:学号+英文空格+姓名+英文空格+总成绩平均分
		
		
		for(int i=0;i<classes.size();i++) {
			
			if(classes.get(i)!=null) {
				Collections.sort(classes.get(i).students);
				for(int k=0;k<classes.get(i).students.size();k++) {//一个班级里所有学生k的循环
					int flag=1;//判断该学生是否有成绩
					double sum=0;//每个学生的总成绩
					double count=0;
				for(int j=0;j<classes.get(i).xuanke.size();j++) {//一个班里期中一个学生k的所有选课成绩
				
					if(classes.get(i).xuanke.get(j).学生a.学号.equals(classes.get(i).students.get(k).学号)) {
						flag=0;
					sum=sum+classes.get(i).xuanke.get(j).成绩a.总成绩;
					count=count+1;
                    }
				}
				
				if(flag==1) {//如果某个学生没有任何成绩信息,输出:学号+英文空格+姓名+英文空格+"did not take any exams"
					System.out.println(classes.get(i).students.get(k).学号+" "+classes.get(i).students.get(k).姓名+" "+"did not take any exams");
				}
				if(flag==0) {
					System.out.println(classes.get(i).students.get(k).学号+" "+classes.get(i).students.get(k).姓名+" "+(int)Math.floor(sum/count));
					classes.get(i).计算总成绩平均分(Math.floor(sum/count));
				}
			}
		}
		}
	}
	public void systemoutClasses() {//班级所有课程总成绩平均分按班级由低到高排序输出
		for(int i=0;i<classes.size();i++) {
			double sum=0;
			int flagg=0;
			for(int j=0;j<classes.get(i).xuanke.size();j++) {
				flagg=1;
			}
			if(flagg==1) {//有sum班级名称+英文空格+ "has no grades yet"//班级号+英文空格+总成绩平均分
				
				System.out.println(classes.get(i).班号+" "+(int)Math.floor(classes.get(i).sum/(double)classes.get(i).参与考试的人数));
			}
			if(flagg==0) {//该班级没有分数
				System.out.println(classes.get(i).班号+" has no grades yet");
			}
		}
	}
	public void systemoutLesson() {//单门课程成绩平均分分为三个分值:平时成绩平均分(可选)、期末考试平均分、总成绩平均分,按课程名称的字符顺序输出
		//格式:课程名称+英文空格+平时成绩平均分+英文空格+期末考试平均分+英文空格+总成绩平均分
		//如果某门课程没有任何成绩信息,输出:课程名称+英文空格+"has no grades yet"
		
		for(int i=0;i<lesson.size();i++) {//遍历课程表
			double 平时成绩=0;
			double 期末成绩=0;
			double 总成绩=0;
			int flag=2;//判断该课程是否有成绩,2是没有,1是考试,0是考察
			double count=0;//考试人数
			课程 kc=lesson.get(i);//kc是某节课
			for(int j=0;j<choice.size();j++) {//遍历选课信息,找到kc这堂课对应的成绩
				if(choice.get(j).课程a.equals(kc.课程名称)) {
					if(kc.考核方式.equals("考试")) {//找到之后,看对应的考核方式,考试的话就要累加平时成绩与期末成绩和总成绩
						flag=1;
						平时成绩=平时成绩+choice.get(j).成绩a.平时成绩;
						期末成绩=期末成绩+choice.get(j).成绩a.期末成绩;
						总成绩=总成绩+choice.get(j).成绩a.总成绩;
						count++;
					}
					if(kc.考核方式.equals("考察")) {//考察,choice.get(j)是找到的对应kc的选课信息
						flag=0;
						总成绩=总成绩+choice.get(j).成绩a.总成绩;
						count=count+1.0;
					}
					if(kc.考核方式.equals("实验")) {//考察,choice.get(j)是找到的对应kc的选课信息
						flag=3;
						总成绩=总成绩+choice.get(j).成绩a.总成绩;
						count=count+1.0;
					}
				}
			}
			//格式:课程名称+英文空格+平时成绩平均分+英文空格+期末考试平均分+英文空格+总成绩平均分
			if(flag==0) {//考察
				System.out.println(kc.课程名称+" "+(int)Math.floor(总成绩/count)+" "+(int)Math.floor(总成绩/count));
			}
			if(flag==1) {//考试
				System.out.println(kc.课程名称+" "+(int)Math.floor(平时成绩/count)+" "+(int)Math.floor(期末成绩/count)+" "+(int)Math.floor(总成绩/count));
			}
			if(flag==3) {//实验
				System.out.println(kc.课程名称+" "+(int)Math.floor(总成绩/count)+" "+(int)Math.floor(总成绩/count));
			}
			if(flag==2) {//没分!输出:课程名称+英文空格+"has no grades yet"
				
				System.out.println(kc.课程名称+" has no grades yet");
			}
		}
	}
}

类图:

圈复杂度:

分析:

设计正则表达式判断输入,要有几个判断输入格式的正则表达式,用.matches()方法来比较输入,用来.floor()来达到四舍五入的目的,还专门设计了一个 输出 类来控制输出。

动物发声模拟器(多态)

老实说,动物发声模拟器(多态)我兜兜转转也没用抽象方法实现,最终就是用了普通的继承(父子关系),但是因为一样可以实现而且输出结果正确,pta还是给我过了。抽象类、抽象方法还是不太用的明白,用对的那几次有点瞎猫碰着死耗子的感jio.

成绩统计程序-3

得分情况:

代码:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Map<String,Student> students = new HashMap();             //学生列表
        Map<String,Class> classMap=new HashMap<>();               //班级列表
        Map<String, List<Course>> courses = new HashMap();             //key:课程名称,value:课程
        String[] array = scan.nextLine().split(" ");
        int arrayLength = array.length;

        if (array[2].equals("考试")) {
            if (array[1].equals("必修")) {
                if(!courses.containsKey(array[0])) {
                    //考试课信息格式:课程名称+课程性质+考核方式+平时成绩的权重+期末成绩的权重
                    if (Integer.valueOf(3) != arrayLength - 4) {
                        System.out.println(array[0] + " : number of scores does not match");
                        return;
                    }
                    float  weight = 0;
                    for (int i = 4; i < arrayLength; i++) {
                        weight += Double.valueOf(array[i]);
                    }
                    //如果解析考试课、实验课时,分项成绩权重值的总和不等于1,输出:课程名称+" : weight value error"
                    if (weight > 1.01) {
                        System.out.println(array[0] + " : weight value error");
                        return;
                    }
                    if (!courses.containsKey(array[0])) {
                        List<Course> courseList = courses.getOrDefault(array[0], new ArrayList<>());
                        courseList.add(new Course(array[0], array[1], array[2]));
                        courses.put(array[0], courseList);
                    }
                    while (true) {
                        String line = scan.nextLine();
                        if (line.equals("end")) {
                            break;
                        }
                        //考试/考查课程成绩信息格式:学号+姓名+课程名称+平时成绩+期末成绩
                        String[] value = line.split(" ");
                        int length = value.length;
                        //如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
                        if (courses.containsKey(value[2])) {
                           //如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"
                            if (length < 4) {
                                System.out.println(value[0] + " " + value[1] + " " + ": access mode mismatch");
                                //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                                if (!students.containsKey(value[0]) ||
                                        !students.get(value[0]).getCourseSelections().containsKey(2)) {
                                    String className = value[0].substring(0, 6);
                                    Student student = students.getOrDefault(value[0], new Student(value[0], value[1], className));
                                    Class classMsg = classMap.getOrDefault(className, new Class(className));
                                    classMap.put(className, classMsg);
                                    List<Course> courseList = courses.getOrDefault(value[2], new ArrayList<>());
                                    double grade = -1.0;
                                    student.updateCourseSelection(array[0], array[1], array[2], grade);
                                    students.put(value[0], student);
                                    classMsg.getStudents().put(student.getStudentId(), student);
                                    courseList.add(new Course(value[2], array[1], array[2], grade));
                                    courses.put(value[2], courseList);
                                }
                                continue;
                            }
                            //格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"
                            if (!CheckGradeLegitimacy(value, 3)) {
                                System.out.println("wrong format");
                                return;
                            }
                            //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                            if (!students.containsKey(value[0]) ||
                                    !students.get(value[0]).getCourseSelections().containsKey(2)) {
                                String className = value[0].substring(0, 6);
                                Student student = students.getOrDefault(value[0], new Student(value[0], value[1], className));
                                Class classMsg = classMap.getOrDefault(className, new Class(className));
                                List<Course> courseList = courses.getOrDefault(value[2], new ArrayList<>());
                                double grade = Double.valueOf(value[3]) * Double.valueOf(array[3]) +
                                        Double.valueOf(value[4]) * Double.valueOf(array[4]);
                                student.updateCourseSelection(array[0], array[1], array[2], grade);
                                students.put(value[0], student);
                                classMsg.getStudents().put(student.getStudentId(), student);
                                classMap.put(className, classMsg);
                                courseList.add(new Course(value[2], array[1], array[2], grade));
                                courses.put(value[2], courseList);
                            }
                        } else {
                            System.out.println(value[0] + " " + value[1] + " " + ":" + value[2] + " " + "does not exist");
                            return;
                        }
                    }
                }
            } else {
                System.out.println(array[0] + " : course type & access mode mismatch");
                return;
            }
        } else if (array[2].equals("考察")) {
            if (array[1].equals("选修")) {
                //考察课信息格式:课程名称+课程性质+考核方式
                if (!courses.containsKey(array[0])) {
                    List<Course> courseList=courses.getOrDefault(array[0],new ArrayList<>());
                    courseList.add( new Course(array[0], array[1], array[2]));
                    courses.put(array[0],courseList);
                }
                while (true) {
                    String line = scan.nextLine();
                    if (line.equals("end")) {
                        break;
                    }
                    //考试/考查课程成绩信息格式:学号+姓名+课程名称+平时成绩+期末成绩
                    String[] value = line.split(" ");
                    int length = value.length;
                    //如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
                    if (courses.containsKey(value[2])) {
                        //如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"
                        if(length<4){
                            System.out.println(value[0] + " " + value[1] + " " + ": access mode mismatch");
                            //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                            if(!students.containsKey(value[0]) ||
                                    !students.get(value[0]).getCourseSelections().containsKey(2)){
                                String className=value[0].substring(0,6);
                                Student student=students.getOrDefault(value[0],new Student(value[0],value[1],className));
                                Class classMsg=classMap.getOrDefault(className,new Class(className));
                                classMap.put(className,classMsg);
                                List<Course> courseList=courses.getOrDefault(value[2],new ArrayList<>());
                                double grade=-1.0;
                                student.updateCourseSelection(array[0],array[1],array[2], grade);
                                students.put(value[0],student);
                                classMsg.getStudents().put(student.getStudentId(),student);
                                courseList.add(new Course(value[2],array[1],array[2],grade));
                                courses.put(value[2],courseList);
                            }
                            continue;
                        }
                        //格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"
                        if(!CheckGradeLegitimacy(value,3)){
                            System.out.println("wrong format");
                            return;
                        }
                        //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                        if(!students.containsKey(value[0]) ||
                                !students.get(value[0]).getCourseSelections().containsKey(2)){
                            String className=value[0].substring(0,6);
                            Student student=students.getOrDefault(value[0],new Student(value[0],value[1],className));
                            Class classMsg=classMap.getOrDefault(className,new Class(className));
                            classMap.put(className,classMsg);
                            List<Course> courseList=courses.getOrDefault(value[2],new ArrayList<>());
                            double grade=Double.valueOf(value[3]);
                            student.updateCourseSelection(array[0],array[1],array[2], grade);
                            students.put(value[0],student);
                            classMsg.getStudents().put(student.getStudentId(),student);
                            courseList.add(new Course(value[2],array[1],array[2],grade));
                            courses.put(value[2],courseList);
                        }
                    } else {
                        System.out.println(value[0] + " " + value[1] + " " + ":" + value[2] + " " + "does not exist");
                        return;
                    }
                }
            } else {
                System.out.println(array[0] + " : course type & access mode mismatch");
                return;
            }
        } else if (array[2].equals("实验")) {
            if (array[1].equals("实验")) {
                if(!courses.containsKey(array[0])) {
                    //实验课程信息格式:课程名称+课程性质+考核方式+分项成绩数量n+分项成绩1的权重+。。。+分项成绩n的权重
                    //如果解析实验课程信息时,输入的分项成绩数量值和分项成绩权重的个数不匹配,输出:课程名称+" : number of scores does not match"
                    if (Integer.valueOf(array[3]) != arrayLength - 4) {
                        System.out.println(array[0] + " : number of scores does not match");
                        return;
                    }
                    float weight = 0;
                    for (int i = 4; i < arrayLength; i++) {
                        weight += Double.valueOf(array[i]);
                    }
                    //如果解析考试课、实验课时,分项成绩权重值的总和不等于1,输出:课程名称+" : weight value error"
                    if (weight !=1.0) {
                        System.out.println(array[0] + " : weight value error");
                        return;
                    }
                    if (!courses.containsKey(array[0])) {
                        List<Course> courseList = courses.getOrDefault(array[0], new ArrayList<>());
                        courseList.add(new Course(array[0], array[1], array[2]));
                        courses.put(array[0], courseList);
                    }
                    while (true) {
                        String line = scan.nextLine();
                        if (line.equals("end")) {
                            break;
                        }
                        //实验课程信息格式:学号+姓名+课程名称+第一次实验成绩+...+最后一次实验成绩
                        String[] value = line.split(" ");
                        int length = value.length;
                        //如果解析某个成绩信息时,课程名称不在已输入的课程列表中,输出:学号+英文空格+姓名+英文空格+":"+课程名称+英文空格+"does not exist"
                        if (courses.containsKey(value[2])) {
                            //如果解析某个成绩信息时,输入的成绩数量和课程的考核方式不匹配,输出:学号+英文空格+姓名+英文空格+": access mode mismatch"
                            if (length - 3 != Integer.valueOf(array[3])) {
                                System.out.println(value[0] + " " + value[1] + " " + ": access mode mismatch");
                                //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                                if (!students.containsKey(value[0]) ||
                                        !students.get(value[0]).getCourseSelections().containsKey(2)) {
                                    String className = value[0].substring(0, 6);
                                    Student student = students.getOrDefault(value[0], new Student(value[0], value[1], className));
                                    Class classMsg = classMap.getOrDefault(className, new Class(className));
                                    classMap.put(className, classMsg);
                                    List<Course> courseList = courses.getOrDefault(value[2], new ArrayList<>());
                                    double grade = -1.0;
                                    student.updateCourseSelection(array[0], array[1], array[2], grade);
                                    students.put(value[0], student);
                                    classMsg.getStudents().put(student.getStudentId(), student);
                                    courseList.add(new Course(value[2], array[1], array[2], grade));
                                    courses.put(value[2], courseList);
                                }
                                continue;
                            }
                            //格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"
                            if (!CheckGradeLegitimacy(value, 3)) {
                                System.out.println("wrong format");
                                return;
                            }
                            //若出现重复的课程/成绩信息,只保留第一个课程信息,忽略后面输入的。
                            if (!students.containsKey(value[0]) ||
                                    !students.get(value[0]).getCourseSelections().containsKey(2)) {
                                String className = value[0].substring(0, 6);
                                Student student = students.getOrDefault(value[0], new Student(value[0], value[1], className));
                                Class classMsg = classMap.getOrDefault(className, new Class(className));
                                classMap.put(className, classMsg);
                                List<Course> courseList = courses.getOrDefault(value[2], new ArrayList<>());
                                double grade = 0.0;
                                for (int i = 4, j = 3; i < arrayLength; i++, j++) {
                                    grade += Double.valueOf(array[i]) * Double.valueOf(value[j]);
                                }
                                student.updateCourseSelection(array[0], array[1], array[2], grade);
                                students.put(value[0], student);
                                classMsg.getStudents().put(student.getStudentId(), student);
                                courseList.add(new Course(value[2], array[1], array[2], grade));
                                courses.put(value[2], courseList);
                            }
                        } else {
                            System.out.println(value[0] + " " + value[1] + " " + ":" + value[2] + " " + "does not exist");
                            return;
                        }
                    }
                }
            } else {
                System.out.println(array[0] + " : course type & access mode mismatch");
            }
        }
//        输出包含三个部分,包括学生所有课程总成绩的平均分、单门课程总成绩平均分、班级所有课程总成绩平均分。
//        为避免四舍五入误差,
//        计算单个成绩时,分项成绩乘以权重后要保留小数位,计算总成绩时,累加所有分项成绩的权重分以后,再去掉小数位。
//        学生总成绩/整个班/课程平均分的计算方法为累加所有符合条件的单个成绩,最后除以总数。

        //学生课程总成绩平均分按学号由低到高排序输出
        List<String> queue=new ArrayList<>(students.keySet());
        Collections.sort(queue, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        for (String studentID:queue){
            double grade=0.0;
            int count=0;
            for (CourseSelection selection: students.get(studentID).getCourseSelections().values()){
                grade+=selection.getCourse().getGrade();
                count++;
            }
            if(count>0 && grade>=0) {
                //格式:学号+姓名+总成绩平均分
                System.out.println(String.format("%s %s %d", studentID, students.get(studentID).getName(), (int)(grade / count)));
            }
            else {
                System.out.println(String.format("%s %s did not take any exams", studentID, students.get(studentID).getName()));
            }
        }
        //单门课程成绩按课程名称的字符顺序输出
        queue=new ArrayList<>(courses.keySet());
        Collections.sort(queue, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        for(String courseName:queue){
            double grade=courses.values().size()>0?0:-1;
            int count=-1;
            for(Course course:courses.get(courseName)){
                grade+=course.getGrade();
                count++;
            }
            if(count>0 && grade>=0){
                //格式:课程名称+总成绩平均分
                System.out.println(String.format("%s %d",courseName,(int)(grade/count)));
            }
            else{
                System.out.println(courseName+" has no grades yet");
            }
        }
        //班级所有课程总成绩平均分按班级由低到高排序输出
        queue=new ArrayList<>(classMap.keySet());
        Collections.sort(queue, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        for(String className:queue){
            float  grade=0;
            int count=0;
            for (Student student:classMap.get(className).getStudents().values()){
                for (CourseSelection selection:student.getCourseSelections().values()){
                    grade+=selection.getCourse().getGrade();
                    count++;
                }
            }
            if(count>0 && grade>=0){
                //班级号+英文空格+总成绩平均分
                System.out.println(String.format("%s %d",className,(int)(grade/count)));
            }
            else {
                System.out.println(className + " has no grades yet");
            }
        }
    }

    private static boolean CheckGradeLegitimacy(String[] value,int index){
        int length= value.length;
        //格式错误以及其他信息异常如成绩超出范围等,均按格式错误处理,输出"wrong format"
        for(int i=index;i<length;i++){
            if(value[i].lastIndexOf(".")!=-1){
                return false;
            }
        }
        if(value[0].length()!=8 || value[1].length()>10 || value[2].length()>10){
            return false;
        }
        return true;
    }
}

class Student {
    private String studentId;           //学号
    private String name;                //姓名
    private String className;           //班级
    private Map<String,CourseSelection> courseSelections;   //选课

    public Student(String studentId, String name, String className) {
        this.studentId = studentId;
        this.name = name;
        this.className = className;
        this.courseSelections = new HashMap<>();
    }

    public void updateCourseSelection(String courseName,String courseNature,String assessmentMethod,double grade){
        CourseSelection selection=courseSelections.getOrDefault(
                courseName,
                new CourseSelection(
                        new Course(
                                courseName,
                                courseNature,
                                assessmentMethod
                        )));
        selection.getCourse().setGrade(grade);
        courseSelections.put(courseName,selection);
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getName() {
        return name;
    }

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

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public Map<String, CourseSelection> getCourseSelections() {
        return courseSelections;
    }

    public void setCourseSelections(Map<String, CourseSelection> courseSelections) {
        this.courseSelections = courseSelections;
    }
}

class CourseSelection {
    private Course course;          //课程
    private CombinationGrade combinationGrade;       //组合分项成绩
    private CourseGrade courseGrade;                //课程成绩

    public CourseSelection(Course course){
        this.course=course;
    }

    public CourseSelection(Course course, CombinationGrade combinationGrade) {
        this.course = course;
        this.combinationGrade=combinationGrade;
    }

    public CourseSelection(Course course ,CourseGrade courseGrade){
        this.course=course;
        this.courseGrade=courseGrade;
    }

    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
        this.course = course;
    }

    public CombinationGrade getCombinationGrade() {
        return combinationGrade;
    }

    public void setCombinationGrade(CombinationGrade combinationGrade) {
        this.combinationGrade = combinationGrade;
    }

    public CourseGrade getCourseGrade() {
        return courseGrade;
    }

    public void setCourseGrade(CourseGrade courseGrade) {
        this.courseGrade = courseGrade;
    }
}

class Class {
    private String className;
    private Map<String,Student> students;

    public Class(String className) {
        this.className = className;
        this.students = new HashMap<>();
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public Map<String, Student> getStudents() {
        return students;
    }

    public void setStudents(Map<String, Student> students) {
        this.students = students;
    }
}

class Course {
    private String courseName;              //课程名称
    private String courseNature;            //性质(必修课、选修课、实验课)
    private String assessmentMethod;        //考核方式(考试、考察、实验)
    private double grade;             //分数

    public Course(String courseName, String courseNature, String assessmentMethod) {
        this.courseName = courseName;
        this.courseNature = courseNature;
        this.assessmentMethod = assessmentMethod;
        grade =0.0;
    }

    public Course(String courseName, String courseNature, String assessmentMethod,double grade) {
        this.courseName = courseName;
        this.courseNature = courseNature;
        this.assessmentMethod = assessmentMethod;
        this.grade =grade;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseNature() {
        return courseNature;
    }

    public void setCourseNature(String courseNature) {
        this.courseNature = courseNature;
    }

    public String getAssessmentMethod() {
        return assessmentMethod;
    }

    public void setAssessmentMethod(String assessmentMethod) {
        this.assessmentMethod = assessmentMethod;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }
}

class CombinationGrade {
    private double[] grade;
    private double[] weight;

    private CombinationGrade(){

    }

    public CombinationGrade(double[] grade,double[] weight) {
        this.grade=grade;
        this.weight=weight;
    }

    public double[] getGrade() {
        return grade;
    }

    public void setGrade(double[] grade) {
        this.grade = grade;
    }

    public double[] getWeight() {
        return weight;
    }

    public void setWeight(double[] weight) {
        this.weight = weight;
    }
}

class CourseGrade {
    private int grade;

    public CourseGrade(){

    }
    public CourseGrade(int grade) {
        this.grade=grade;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
}

类图:

圈复杂度:

(绿色环形区域即被测量维度的期望值,维度上的点则是测量得到的实际值)

分析:

踩坑心得

❌ Java在数据类型这方面真的非常严格,自己不强制转换就不行(有几个单个测试点没过,后来听说是要用float而不能用double,不能理解)。
❌ 格式错误这个坑真的是屡踩不爽(细心和耐心真的很重要)。
❌ 要有好且持续的编程习惯(我经常因为记不太清,出现类名或者变量名大小写的错误,我决定要坚持用驼峰命名法,原因当然是因为应用广泛,当然,也算方便记忆,能避免我的一些错误)。

改进建议

✔️ 减少类与类之间的耦合度,便于迭代和删改。
✔️ 在某些方面增加题目的逻辑性和可读性,虽然以后如果要成为一名合格的程序员要有较强的理解能力,get到甲方的需求并满足他们的需求,但是现阶段还是很难做到的(啊喂)。

总结

学习写代码真的是一个持久且需要耐心的过程,要不断地练习,细心的查找错误,而这对于我个人而言,正是我比较欠缺的。除此之外,我还需要学习并掌握更多的编程技巧,包括错误处理、调试技巧、代码重构等,提高代码的质量和可读性,让我的代码更加简洁、易读、易于维护。
这个学期的面向对象程序设计的学习,在这次blog后也算是告一段落了,但是这并不意味着我们可以停止学习了,要抓住实训后的假期,加强学习,提升自己的能力,努力弯道赶上(人贵在有自知之明,超车应该是超不了了)。一起继续努力吧!

路漫漫其修远兮,吾将上下而求索

标签:String,int,value,public,Blog,new,Yqw,array
From: https://www.cnblogs.com/1001love/p/17500498.html

相关文章

  • PTA题目集6-8的总结性Blog
    一、前言在这个PTA题目集中,涉及到了成绩计算中所需要的各种计算方式,容器-HashMap,容器-ArrayList,以及 jmu-Java-02基本语法和接口-自定义接口等方面的知识。总体来说,难度适中,但需要考生对这些概念有一定的了解。二、设计与分析首先是7-1容器-HashMap-检索输入多个学生的成绩......
  • BLOG-3
    第6-8次大作业总结博客/*全文字数4000+*/ 一、前言:知识点分析:1.Java基础语法(变量、数据类型、运算符、流程控制、函数等)。2.Java集合框架,如List、Map等。3.异常处理机制,如try-catch块。4.数组和字符串操作。5.对象和类,包括静态方法、构造方法、实例方法等等。二......
  • 第三次总结性blog
    目录 1.前言2.设计与分析3.踩坑心得4.改进建议5.总结 1.前言题目集8课程成绩统计程序-1题目集9统计Java程序中关键词的出现次数题目集10容器-HashMap-检索容器-HashMap-排序课程成绩统计程序-2动物发声模拟器......
  • BLOG-3
    一、**前言**本次Java大作业是一次非常有意义的学习经历,我们学习了泛型、接口、继承与多态、组合、排序、HashMap、HashSet、TreeMap等知识点,并将它们应用于实际编程中。通过这次大作业,我们不仅巩固了Java基础知识,还学会了如何将这些知识点结合起来进行实际应用。二、**设计与分......
  • BLOG-3
    (1)前言:这三次作业加强了我们对HashMap 类的理解,训练了我们对HashMap 类中方法的掌握,再次加强对我们对继承关系中的多态的掌握。也让我们通过例子掌握ArrayList-排序,以及各种自定义接口。而本次的迭代题目是课程成绩统计,主要还是按照类图设计代码,以及考虑字符的比较以及排序,题目......
  • BLOG-3
    前言: 这次博客是对之前发布的6-8次PTA题目集(成绩计算系列)的一次总结,经过前几次系列题目的磨练,相信对于认真写的同学来说这次成绩系列的题目也不是很难。只要肯花点时间,拿个及格不是问题。题量来说还是比较少的,对于一些高手来说,几个小时便可拿到高分。设计与分析:7-1课程成绩......
  • Blog-3
    (1).前言:(总结之前所涉及到的知识点、题量、难度等情况)一7-1课程成绩统计程序-1难度:对我来说,难,难,难,写这个我花了好长时间,分析了很久很久,但是要比较的话,菜单要更难,还是我太菜了。知识点:1.集合类:代码使用了多种集合类,如'ArrayList'、'HashMap'和'LinkedHashMap',用于存储和管理......
  • 最后一次Blog
    BLOG: 1.前言:最后几周的PTA难度明显上升,需要设计的类更多,尤其是学生成绩录入系统。还更考察对集合的使用,如Map,Set集合,利用他们自动排序去重的功能,完成题目.难度呈递增趋势。自己还是太菜,许多题目就没有拿到满分。随着本次的博客作业到来也预示着我的本学期的Java课程也......
  • BLOG-3
    一、前言先叠个甲,针对上次互评同学们的评论,我这次虽说也写上了题目,但我写了一万多字,真的没有水字数!!而且也没用ChatGPT写,麻烦各位帅哥美女给高点分儿,我也保证在互评时都打90分以上。1.知识点:LinkedHashMap和HashMap是有区别的,前者是按插入顺序储存元素,后者是哈希表排序会在后面......
  • blog
    importjava.text.Collator;importjava.util.*;classCourse{Stringname;Stringtype;Stringmode;Course(Stringname,Stringtype,Stringmode){this.name=name;this.type=type;this.mode=mode;}}classGrade{......