From 3cf490dc74ee1e620daed6817254b85eabacc5e1 Mon Sep 17 00:00:00 2001 From: lensferno Date: Tue, 15 Mar 2022 11:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=20Student:=20-=20=E5=86=85=E9=83=A8=E6=96=B0=E5=A2=9EgetGenera?= =?UTF-8?q?lScore()=E6=96=B9=E6=B3=95=20StudentManager:=20-=20=E6=8C=89?= =?UTF-8?q?=E5=AD=A6=E7=94=9F=E6=80=BB=E5=88=86=E7=94=B1=E9=AB=98=E5=88=B0?= =?UTF-8?q?=E4=BD=8E=E7=94=9F=E6=88=90=E5=90=8D=E6=AC=A1=E8=A1=A8=20-=20?= =?UTF-8?q?=E6=8C=89=E5=AD=A6=E7=94=9F=E5=AD=A6=E5=8F=B7=E7=94=B1=E5=B0=8F?= =?UTF-8?q?=E5=88=B0=E5=A4=A7=E7=94=9F=E6=88=90=E6=88=90=E7=BB=A9=E8=A1=A8?= =?UTF-8?q?=20-=20=E6=8C=89=E5=AD=A6=E7=94=9F=E5=AD=A6=E5=8F=B7=E7=94=B1?= =?UTF-8?q?=E5=B0=8F=E5=88=B0=E5=A4=A7=E7=94=9F=E6=88=90=E6=88=90=E7=BB=A9?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (有点困了...写得有点乱了... ( ̄﹏ ̄;)) --- .../me/lensfrex/manager/data/ManagerTool.java | 27 +++++- .../me/lensfrex/manager/data/Student.java | 20 ++--- .../lensfrex/manager/data/StudentManager.java | 82 ++++++++++++++++++- .../studentInformationExample.txt | 2 +- 4 files changed, 115 insertions(+), 16 deletions(-) diff --git a/src/main/java/me/lensfrex/manager/data/ManagerTool.java b/src/main/java/me/lensfrex/manager/data/ManagerTool.java index 23deff3..44e43c4 100644 --- a/src/main/java/me/lensfrex/manager/data/ManagerTool.java +++ b/src/main/java/me/lensfrex/manager/data/ManagerTool.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +/** + * 对Student类的操作的底层封装,有最基础的操作 + */ public class ManagerTool { private final ArrayList students; @@ -23,6 +26,24 @@ public class ManagerTool { students.add(student); } + /** + * 删除一个学生(按ID) + * + * @param id 学生id,long格式 + */ + public void removeStudent(long id) { + students.remove(getStudent(id)); + } + + /** + * 删除一个学生(按姓名) + * + * @param name 学生姓名,long格式 + */ + public void removeStudent(String name) { + students.remove(getStudent(name)); + } + /** * 按名字查找学生 * @@ -60,7 +81,8 @@ public class ManagerTool { /** * 对学生列表进行排序 * - * @param compareMethod 排序方式,可根据名字字典顺序(升序,0)、学生学号(升序,1)以及总成绩(降序,2)进行排序。 + * @param compareMethod 排序方式 + * 可根据名字字典顺序(升序,0)、学生学号(升序,1)以及总成绩(降序,2)进行排序。 * @return 排序后的学生列表 */ public ArrayList getSortedStudentList(int compareMethod) { @@ -99,7 +121,7 @@ public class ManagerTool { * * @return 包含全班所有同学成绩的HashMap,key为姓名,value为总成绩数据 */ - public HashMap getStudentScores() { + public HashMap getAllStudentScores() { HashMap result = new HashMap<>(); int scoreSum = 0; @@ -128,6 +150,7 @@ public class ManagerTool { return ranking; } + /** * 获取所有科目名称,若无学生信息则返回null * diff --git a/src/main/java/me/lensfrex/manager/data/Student.java b/src/main/java/me/lensfrex/manager/data/Student.java index fdfa10f..a963c63 100644 --- a/src/main/java/me/lensfrex/manager/data/Student.java +++ b/src/main/java/me/lensfrex/manager/data/Student.java @@ -41,18 +41,16 @@ public class Student implements Serializable { this.score = score; } - public static Comparator compareByName = (s1, s2) -> s1.getName().compareTo(s2.getName()); - public static Comparator compareById = (s1, s2) -> (int) (s1.id - s2.id); - public static Comparator compareByGeneralScore = (s1, s2) -> { - int student1GeneralScore = 0, student2GeneralScore = 0; - for (int score : s1.getScore().values()) { - student1GeneralScore += score; + public int getGeneralScore() { + int generalScore = 0; + for (int score : getScore().values()) { + generalScore += score; } - for (int score : s2.getScore().values()) { - student2GeneralScore += score; - } + return generalScore; + } - return student1GeneralScore - student2GeneralScore; - }; + public static Comparator compareByName = (s1, s2) -> s1.getName().compareTo(s2.getName()); + public static Comparator compareById = (s1, s2) -> (int) (s1.id - s2.id); + public static Comparator compareByGeneralScore = (s1, s2) -> s1.getGeneralScore() - s2.getGeneralScore(); } diff --git a/src/main/java/me/lensfrex/manager/data/StudentManager.java b/src/main/java/me/lensfrex/manager/data/StudentManager.java index 8d0d59b..9b50ff4 100644 --- a/src/main/java/me/lensfrex/manager/data/StudentManager.java +++ b/src/main/java/me/lensfrex/manager/data/StudentManager.java @@ -3,10 +3,12 @@ package me.lensfrex.manager.data; import java.util.ArrayList; import java.util.HashMap; +/** + * 对Student类的操作的上层封装,有较为多的操作 + */ public class StudentManager { private final ArrayList students = new ArrayList<>(); private final ManagerTool managerTool = new ManagerTool(students); - private ArrayList subjects = new ArrayList<>(); /** * 增添学生。输入的字符串格式应为 [id] [name] ...[subjectName,score] @@ -77,7 +79,7 @@ public class StudentManager { return scores; } - /** + /**- * 获取每门科目的平均成绩 * * @return 包含每门课总成绩的HashMap,key为科目名称,value为该科目的平均成绩 @@ -92,4 +94,80 @@ public class StudentManager { return scores; } + + /** + * 按学生总分由高到低生成名次表 + * + * @return 名次表字符串 + */ + public String generateRankingTable() { + StringBuilder stringBuilder = new StringBuilder("Ranking | Name | General Score\n"); + ArrayList sortStudentList = managerTool.getSortedStudentList(ManagerTool.SORT_COMPARE_BY_GENERAL_SCORE); + + for (int i = 0; i < sortStudentList.size(); i++) { + stringBuilder + .append(i + 1).append(" | ") + .append(sortStudentList.get(i).getName()).append(" | ") + .append(students.get(i).getGeneralScore()) + .append('\n'); + } + + return stringBuilder.toString(); + } + + + /** + * 按学生学号由小到大生成成绩表 + * + * @return 成绩表字符串 + */ + public String generateScoreTableById() { + StringBuilder stringBuilder = new StringBuilder("ID | Name | General Score | Subject1: score Subject2: score ...\n"); + ArrayList sortStudentList = managerTool.getSortedStudentList(ManagerTool.SORT_COMPARE_BY_GENERAL_SCORE); + ArrayList subjects = managerTool.getAllSubjects(); + + for (Student student : sortStudentList) { + stringBuilder + .append(student.getId()).append(" | ") + .append(student.getName()).append(" | ") + .append(student.getGeneralScore()).append(" | "); + for (String subject : subjects) { + stringBuilder + .append(subject).append(": ") + .append(student.getScore().get(subject)).append(' '); + } + + stringBuilder.append('\n'); + } + + return stringBuilder.toString(); + } + + /** + * 按学生学号由小到大生成成绩表 + * + * @return 成绩表字符串 + */ + public String generateScoreTableByName() { + StringBuilder stringBuilder = new StringBuilder("Name | Id | General Score | Subject1/score Subject2: score ...\n"); + ArrayList sortStudentList = managerTool.getSortedStudentList(ManagerTool.SORT_COMPARE_BY_GENERAL_SCORE); + ArrayList subjects = managerTool.getAllSubjects(); + + for (Student student : sortStudentList) { + stringBuilder + .append(student.getName()).append(" | ") + .append(student.getId()).append(" | ") + .append(student.getGeneralScore()).append(" | "); + for (String subject : subjects) { + stringBuilder + .append(subject).append(": ") + .append(student.getScore().get(subject)).append(' '); + } + + stringBuilder.append('\n'); + } + + return stringBuilder.toString(); + } + } diff --git a/src/main/resources/me.lensfrex.manager/studentInformationExample.txt b/src/main/resources/me.lensfrex.manager/studentInformationExample.txt index 95afd4e..1b1c30b 100644 --- a/src/main/resources/me.lensfrex.manager/studentInformationExample.txt +++ b/src/main/resources/me.lensfrex.manager/studentInformationExample.txt @@ -1,4 +1,4 @@ - Please enter the student information following this format: [id] [name] ...[subjectName,score] - Example: - 23333333 Lag English,100 Math,99 History,98 \ No newline at end of file + 23333333 LagSeeing English,100 Math,99 History,98 \ No newline at end of file