import java.text.Collator;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<String,Class> 班级=new HashMap<>();
HashMap<String,Course> 课程=new HashMap<>();
HashMap<String,Student>学生=new HashMap<>();
while(true) {
String s = scanner.nextLine();
if (s.equals("end"))
break;
else if (s.matches("([\u4E00-\u9FA5]|[a-z]|[A-Z]){1,10}[ ](必修|选修)")) {
String tokens[] = s.split(" ");
if (!课程.containsKey(tokens[0])) {
if(tokens[1].equals("选修"))
System.out.println(tokens[0] + " : course type & access mode mismatch");
else {
Course course = new Course();
course.方式 = 1;
course.性质 = 1;
course.name = tokens[0];
课程.put(tokens[0], course);}
}
} else if (s.matches("([\u4E00-\u9FA5]|[a-z]|[A-Z]){1,10}[ ](必修|选修|实验)[ ](考试|考察|实验)")) {
String tokens[] = s.split(" ");
if (!课程.containsKey(tokens[0])) {
Course course = new Course();
if (tokens[1].equals("必修") && (tokens[2].equals("考察")||tokens[2].equals("实验")))
System.out.println(tokens[0] + " : course type & access mode mismatch");
else if(tokens[1].equals("选修")&&tokens[2].equals("实验"))
System.out.println(tokens[0] + " : course type & access mode mismatch");
else if(tokens[1].equals("实验")&&(tokens[2].equals("考试")||tokens[2].equals("考察")))
System.out.println(tokens[0] + " : course type & access mode mismatch");
else {
if (tokens[1].equals("必修"))
course.性质 = 1;
else if(tokens[1].equals("选修"))
course.性质 = 0;
else
course.性质=2;
if (tokens[2].equals("考试"))
course.方式 = 1;
else if(tokens[2].equals("考察"))
course.方式 = 0;
else
course.方式=2;
course.name = tokens[0];
课程.put(tokens[0], course);
}
}
} else if (s.matches("[0-9]{8}[ ][\u4E00-\u9FA5]{1,10}[ ]([\u4E00-\u9FA5]|[a-z]|[A-Z]){1,10}[ ]([0-9]|[1-9][0-9]|100)")) {
String tokens[] = s.split(" ");
if (课程.containsKey(tokens[2]) == false) {
System.out.println(tokens[2] + " " + "does not exist");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
} else {
if (课程.get(tokens[2]).方式 == 1) {
System.out.println(tokens[0] + " " + tokens[1] + " " + ": access mode mismatch");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
} else {
if (!(学生.containsKey(tokens[0]) && 学生.get(tokens[0]).kecheng.contains(tokens[2]))) {
课程.get(tokens[2]).num++;
课程.get(tokens[2]).scoreB.Sumscore += 课程.get(tokens[2]).scoreB.Calculatescore(Integer.parseInt(tokens[3]));
课程.get(tokens[2]).flag=1;
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
student.score = 课程.get(tokens[2]).scoreB.Calculatescore(Integer.parseInt(tokens[3]));
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.get(tokens[0].substring(0, 6)).num++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
} else {
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).score += 课程.get(tokens[2]).scoreB.Calculatescore(Integer.parseInt(tokens[3]));
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 课程.get(tokens[2]).scoreB.Calculatescore(Integer.parseInt(tokens[3]));
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
c.num++;
c.Stu.get(tokens[0]).scorenum++;
班级.put(tokens[0].substring(0, 6), c);
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
}
}
}
}
else if(s.matches("[0-9]{8}[ ][\u4E00-\u9FA5]{1,10}[ ]([\u4E00-\u9FA5]|[a-z]|[A-Z]){1,10}[ ]([0-9]|[1-9][0-9]|100)[ ]([0-9]|[1-9][0-9]|100)")) {
String tokens[] = s.split(" ");
if (课程.containsKey(tokens[2]) == false) {
System.out.println(tokens[2] + " " + "does not exist");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);//加课.
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
} else {
if (课程.get(tokens[2]).方式 == 0) {
System.out.println(tokens[0] + " " + tokens[1] + " " + ": access mode mismatch");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
} else {
if (!(学生.containsKey(tokens[0]) && 学生.get(tokens[0]).kecheng.contains(tokens[2]))) {
课程.get(tokens[2]).num++;
课程.get(tokens[2]).scoreA.Sumscore += 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
课程.get(tokens[2]).scoreA.平时成绩 += Integer.parseInt(tokens[3]);
课程.get(tokens[2]).scoreA.期末成绩 += Integer.parseInt(tokens[4]);
if (班级.containsKey(tokens[0].substring(0, 6))) {
//班级.get(tokens[0].substring(0, 6)).Sumscore += 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
student.score = 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.get(tokens[0].substring(0, 6)).num++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
} else {
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).score += 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
c.num++;//youyongrenshu;
c.Stu.get(tokens[0]).scorenum++;
// c.Sumscore = 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]),Integer.parseInt(tokens[4]));
班级.put(tokens[0].substring(0, 6), c);
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
}
}
}
}
else if(s.matches("[0-9]{8}[ ][\u4E00-\u9FA5]{1,10}[ ]([\u4E00-\u9FA5]|[a-z]|[A-Z]){1,10}[ ][4-9]([ ]([0-9]|[1-9][0-9]|100))+"))
{
String []tokens=s.split(" ");
if(!课程.containsKey(tokens[2])){
System.out.println(tokens[2] + " " + "does not exist");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);//加课.
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
}
else {
if (课程.get(tokens[2]).性质 == 0||课程.get(tokens[2]).性质==1||!(Integer.parseInt(tokens[3])+4==tokens.length)) {
System.out.println(tokens[0] + " " + tokens[1] + " " + ": access mode mismatch");
if (班级.containsKey(tokens[0].substring(0, 6))) {
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 0;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.put(tokens[0].substring(0, 6), c);
}
}
else {
if (!(学生.containsKey(tokens[0]) && 学生.get(tokens[0]).kecheng.contains(tokens[2]))) {
课程.get(tokens[2]).num++;
int 实验成绩=0;
for(int j=0;j<Integer.parseInt(tokens[3]);j++)
实验成绩 += Integer.parseInt(tokens[4+j]);
实验成绩/=Integer.parseInt(tokens[3]);
课程.get(tokens[2]).scoreC.Sumscore+=实验成绩;
//int 实验成绩=课程.get(tokens[2]).scoreC.Sumscore;
if (班级.containsKey(tokens[0].substring(0, 6))) {
//班级.get(tokens[0].substring(0, 6)).Sumscore += 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]), Integer.parseInt(tokens[4]));
if (!班级.get(tokens[0].substring(0, 6)).Stu.containsKey(tokens[0])) {
Student student = new Student(tokens[0], tokens[1]);
student.score = 实验成绩;
班级.get(tokens[0].substring(0, 6)).Stu.put(tokens[0], student);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
班级.get(tokens[0].substring(0, 6)).num++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
} else {
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).score += 实验成绩;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).scorenum++;
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
} else {
Class c = new Class();
Student student = new Student(tokens[0], tokens[1]);
student.score = 实验成绩;
c.Stu.put(tokens[0], student);
c.banjihao=tokens[0].substring(0,6);
学生.put(tokens[0], student);
学生.get(tokens[0]).kecheng.add(tokens[2]);
c.num++;//youyongrenshu;
c.Stu.get(tokens[0]).scorenum++;
// c.Sumscore = 课程.get(tokens[2]).scoreA.Calculatescore(Integer.parseInt(tokens[3]),Integer.parseInt(tokens[4]));
班级.put(tokens[0].substring(0, 6), c);
班级.get(tokens[0].substring(0, 6)).Stu.get(tokens[0]).kecheng.add(tokens[2]);
}
}
}
}
}
else
System.out.println("wrong format");
}
Iterator <String> iterator=班级.keySet().iterator();
while (iterator.hasNext()){
String key=iterator.next();
学生.putAll(班级.get(key).Stu);}
Set set=学生.keySet();
Object []arr=set.toArray();
Arrays.sort(arr);
for (Object key:arr){
if(学生.get(key).score==0&&学生.get(key).scorenum==0)
System.out.println(学生.get(key).xuehao+" "+学生.get(key).name+" "+"did not take any exams");
else
System.out.println(key+" "+学生.get(key).name+" "+学生.get(key).score/学生.get(key).scorenum);
}
Set set1=课程.keySet();
Comparator<Object>comparator= Collator.getInstance(Locale.CHINA);
Object []arr1= set1.toArray();
Arrays.sort(arr1,comparator);
for(Object key:arr1){
if(课程.get(key).方式==1){
if(课程.get(key).scoreA.Sumscore==0&&课程.get(key).flag==0)
System.out.println(课程.get(key).name+" "+"has no grades yet");
else
System.out.println(key+" "+课程.get(key).scoreA.平时成绩/课程.get(key).num+" "+课程.get(key).scoreA.期末成绩/课程.get(key).num+" "+课程.get(key).scoreA.Sumscore/课程.get(key).num);
}
else if(课程.get(key).方式==0){
if(课程.get(key).scoreB.Sumscore==0&&课程.get(key).flag==0)
System.out.println(课程.get(key).name+" "+"has no grades yet");
else
System.out.println(key+" "+课程.get(key).scoreB.Sumscore/课程.get(key).num+" "+课程.get(key).scoreB.Sumscore/课程.get(key).num);
}
else {
if(课程.get(key).scoreC.Sumscore==0&&课程.get(key).flag==0)
System.out.println(课程.get(key).name+" "+"has no grades yet");
else
System.out.println(key+" "+课程.get(key).scoreC.Sumscore/课程.get(key).num);
}
}
Iterator <String> iterator1=班级.keySet().iterator();
while (iterator1.hasNext()){
String key=iterator1.next();
Iterator <String> iterator2=班级.get(key).Stu.keySet().iterator();
while (iterator2.hasNext()){
String key1=iterator2.next();
if(!(班级.get(key).Stu.get(key1).scorenum==0))
班级.get(key).Sumscore+=班级.get(key).Stu.get(key1).score/班级.get(key).Stu.get(key1).scorenum;
}
if(班级.get(key).num==0)
班级.get(key).averscore=0;
else
班级.get(key).averscore=班级.get(key).Sumscore/班级.get(key).num;
}
Object []arr2=班级.keySet().toArray();
Arrays.sort(arr2);
for(Object o:arr2){
//if(班级.get(o).averscore==0&&班级.get(o).num==0)
//System.out.println(班级.get(o).banjihao+" "+"has no grades yet");
//else
System.out.println(班级.get(o).banjihao+" "+班级.get(o).averscore);
}
}
}
class Class{
int Sumscore=0;
int averscore=0;
int num;//有用的人数;
HashMap<String,Student> Stu=new HashMap<>();
String banjihao;
}
class Student{
Student(String a,String b){
this.name=b;
this.xuehao=a;
}
Set<String>kecheng=new HashSet<>();
String xuehao;
String name;
int score;
int scorenum=0;
}
class Course{
ScoreA scoreA=new ScoreA();
ScoreB scoreB=new ScoreB();
ScoreC scoreC=new ScoreC();
int flag=0;
String name;
int 性质;
int 方式;
int num;
}
class Score{
int Sumscore;
Score(){
}
}
class ScoreA extends Score{
ScoreA(){
}
int 平时成绩;
int 期末成绩;
int Calculatescore(int a,int b) {
return (int)(a*0.3+b*0.7);
}
}
class ScoreB extends Score{
ScoreB(){
}
int Calculatescore(int a){
return a;
}
}
class ScoreC extends Score{
ScoreC(){
}
int Calculatescore(int a){
return a;
}
}
class Super
{
int i=0;
// public Super(String a)
// {
// System.out.println("A");
// i=1;
//
// }
public Super()
{
System.out.println("B");
i+=2;
}
}
class Demo1 extends Super
{
public Demo1()
{
System.out.println("C");
i+=5;
}
}
class Outer {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(int age) {
this.age = age;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Outer build() {
return new Outer(this);
}
}
private Outer(Builder b) {
this.age = b.age;
this.name = b.name;
}
}
class Fdf {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(int age) {
this.age = age;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Outer build() {
return new Outer(this);
}
}
private Fdf(Builder b) {
this.age = b.age;
this.name = b.name;
}
}
class DDe {
private String name;
private int age;
public static class Builder {
private String name;
private int age;
public Builder(int age) {
this.age = age;
}
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withAge(int age) {
this.age = age;
return this;
}
public Outer build() {
return new Outer(this);
}
}
private DDe(Builder b) {
this.age = b.age;
this.name = b.name;
}
}
class Shape {
public double calculateArea() {
return 0.0; // 默认实现,应该在子类中覆盖
}
public void printArea() {
System.out.println("面积:" + calculateArea());
}
}
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
class Rectangle extends Shape {
private Point leftTopPoint;
private Point lowerRightPoint;
public Rectangle(Point leftTopPoint, Point lowerRightPoint) {
this.leftTopPoint = leftTopPoint;
this.lowerRightPoint = lowerRightPoint;
}
@Override
public double calculateArea() {
double width = Math.abs(lowerRightPoint.getX() - leftTopPoint.getX());
double height = Math.abs(lowerRightPoint.getY() - leftTopPoint.getY());
return width * height;
}
}
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
}