diff --git a/readme.md b/readme.md index 46fb4d2..bb8c024 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,6 @@ -# StudentManager-S +# SManager-S -嗯,正如你所见,这项目叫做StudentManager-S +就是StudentManager-S啦! “-S”不是指“Super”,而是"Simple" ( ̄﹏ ̄;) diff --git a/src/main/java/me/lensfrex/manager/Main.java b/src/main/java/me/lensfrex/manager/Main.java index cdcf0f1..c8bb087 100644 --- a/src/main/java/me/lensfrex/manager/Main.java +++ b/src/main/java/me/lensfrex/manager/Main.java @@ -25,6 +25,7 @@ public class Main { switch (command) { case "null": case "0": + System.out.println("See you later!"); return -1; case "1": System.out.println(Worker.studentInformationExample); @@ -81,8 +82,7 @@ public class Main { } break; case "10": - System.out.println("Not support yet :)"); - System.out.println("It will come out soon."); + worker.printScoreAnalysis(); break; case "11": worker.listRecord(); @@ -90,6 +90,9 @@ public class Main { case "12": worker.printHelp(); break; + case "13": + worker.printCnHelp(); + break; default: System.out.println("- Don't recognize... Please enter again. (Enter 12 to show help again)"); break; diff --git a/src/main/java/me/lensfrex/manager/Worker.java b/src/main/java/me/lensfrex/manager/Worker.java index aa4687d..2711686 100644 --- a/src/main/java/me/lensfrex/manager/Worker.java +++ b/src/main/java/me/lensfrex/manager/Worker.java @@ -11,6 +11,7 @@ import java.util.ArrayList; public class Worker { public static final String helpMessage = IOUtil.inputStreamToString(Main.class.getResourceAsStream("/me.lensfrex.manager/helpMessage.txt"), StandardCharsets.UTF_8); + public static final String cnHelpMessage = IOUtil.inputStreamToString(Main.class.getResourceAsStream("/me.lensfrex.manager/cnHelpMessage.txt"), StandardCharsets.UTF_8); public static final String studentInformationExample = IOUtil.inputStreamToString(Main.class.getResourceAsStream("/me.lensfrex.manager/studentInformationExample.txt"), StandardCharsets.UTF_8); private final StudentManager studentManager = new StudentManager(); @@ -29,6 +30,10 @@ public class Worker { System.out.println(helpMessage); } + public void printCnHelp() { + System.out.println(cnHelpMessage); + } + /** * 根据用户输入添加学生 * @@ -153,4 +158,19 @@ public class Worker { public String searchByName(String name) { return studentManager.getStudentInfo(studentManager.getStudent(name)); } -} + + /** + * 输出成绩分析 + */ + public void printScoreAnalysis() { + System.out.println("-----------------------------------------------------------------------------"); + System.out.println("Subject:\n\tLevel A: levelAmount/percent | Level B: levelAmount/percent ..."); + System.out.println("-----------------------------------------------------------------------------"); + + ArrayList table = studentManager.generateSubjectAnalysis(); + for (String record : table) { + System.out.println(record); + } + } + +} \ No newline at end of file diff --git a/src/main/java/me/lensfrex/manager/data/manager/ManagerTool.java b/src/main/java/me/lensfrex/manager/data/manager/ManagerTool.java index 9dcd00f..a87db8c 100644 --- a/src/main/java/me/lensfrex/manager/data/manager/ManagerTool.java +++ b/src/main/java/me/lensfrex/manager/data/manager/ManagerTool.java @@ -178,11 +178,11 @@ public class ManagerTool { /** * 获取所有科目名称,若无学生信息则返回null * - * @return 包含所有科目名称的Arraylist,若无学生信息则返回null + * @return 包含所有科目名称的Arraylist,若无学生信息则返回空的ArrayList */ protected ArrayList getAllSubjects() { if (students.isEmpty()) { - return null; + return new ArrayList<>(); } return new ArrayList<>(students.get(0).getScore().keySet()); } diff --git a/src/main/java/me/lensfrex/manager/data/manager/StudentManager.java b/src/main/java/me/lensfrex/manager/data/manager/StudentManager.java index a7afc7c..17763f4 100644 --- a/src/main/java/me/lensfrex/manager/data/manager/StudentManager.java +++ b/src/main/java/me/lensfrex/manager/data/manager/StudentManager.java @@ -313,15 +313,83 @@ public class StudentManager { return managerTool.getStudent(id); } - - public HashMap generateSubjectAnalysis(String subject) { + /** + * 获取某科目成绩分析HashMap + * + * @param subject 欲分析的科目 + * @return 成绩等级人数 + */ + private int[] getSubjectAnalysis(String subject) { ArrayList scores = new ArrayList<>(managerTool.getSubjectScores(subject).values()); int[] scoreAnalysis = new int[5]; - HashMap analysis = new HashMap<>(); for (int score : scores) { + scoreAnalysis[getScoreLevel(score)]++; + } + + return scoreAnalysis; + } + + /** + * 获取所有成绩分析HashMap + * + * @return 成绩等级人数 + */ + public HashMap getAllSubjectAnalysis() { + ArrayList subjects = managerTool.getAllSubjects(); + HashMap analysis = new HashMap<>(); + + for (String subject : subjects) { + analysis.put(subject, this.getSubjectAnalysis(subject)); + } + + return analysis; + } + + /** + * 生成每科成绩层次分析(按百分制)的ArrayList + * @return 包含成绩层次分析记录的ArrayList。每个层次等级数据为:人数/百分比 + */ + public ArrayList generateSubjectAnalysis() { + HashMap analysis = getAllSubjectAnalysis(); + ArrayList subjects = new ArrayList<>(analysis.keySet()); + + ArrayList records = new ArrayList<>(); + int studentAmount = managerTool.getStudentAmount(); + for (String subject : subjects) { + int[] scoreLevelInfo = analysis.get(subject); + + StringBuilder stringBuilder = new StringBuilder().append(subject).append(":\n\t"); + stringBuilder + .append(String.format("Level A: %d/%.2f", scoreLevelInfo[SCORE_LEVEL_A], (float) scoreLevelInfo[SCORE_LEVEL_A] / studentAmount)).append(" | ") + .append(String.format("Level B: %d/%.2f", scoreLevelInfo[SCORE_LEVEL_B], (float) scoreLevelInfo[SCORE_LEVEL_B] / studentAmount)).append(" | ") + .append(String.format("Level C: %d/%.2f", scoreLevelInfo[SCORE_LEVEL_C], (float) scoreLevelInfo[SCORE_LEVEL_C] / studentAmount)).append(" | ") + .append(String.format("Level D: %d/%.2f", scoreLevelInfo[SCORE_LEVEL_D], (float) scoreLevelInfo[SCORE_LEVEL_D] / studentAmount)).append(" | ") + .append(String.format("Level E: %d/%.2f", scoreLevelInfo[SCORE_LEVEL_E], (float) scoreLevelInfo[SCORE_LEVEL_E] / studentAmount)); + + records.add(stringBuilder.toString()); + } + + return records; + } + private int getScoreLevel(int score) { + if (score >= 90) { + return SCORE_LEVEL_A; + } else if (score >= 80) { + return SCORE_LEVEL_B; + } else if (score >= 70) { + return SCORE_LEVEL_C; + } else if (score >= 60) { + return SCORE_LEVEL_D; + } else { + return SCORE_LEVEL_E; } } + public static final int SCORE_LEVEL_A = 0; + public static final int SCORE_LEVEL_B = 1; + public static final int SCORE_LEVEL_C = 2; + public static final int SCORE_LEVEL_D = 3; + public static final int SCORE_LEVEL_E = 4; } \ No newline at end of file diff --git a/src/main/resources/me.lensfrex.manager/cnHelpMessage.txt b/src/main/resources/me.lensfrex.manager/cnHelpMessage.txt new file mode 100644 index 0000000..95ad0b0 --- /dev/null +++ b/src/main/resources/me.lensfrex.manager/cnHelpMessage.txt @@ -0,0 +1,20 @@ +---------------------------------------------------------------- + 欢迎来到 SManager-S +---------------------------------------------------------------- +您想做什么: + 1. 添加学生 + 2. 删除学生(按姓名或学号) + 3. 输出每门课程的总分和平均分 + 4. 输出每个学生的总分 + 5. 输出按每个学生的总分(降序) + 6. 输出学生信息(按学号升序) + 7. 输出学生信息(按姓名升序) + 8. 按学号搜索学生 + 9. 按姓名搜索学生 + 10. 每门课程的统计分析 + 11. 列出所有记录信息(学生及每个科目) + 12. 输出帮助信息(是英文哦/English) + 13. 中文帮助信息 ← _ ← + 0. 退出 +---------------------------------------------------------------- + 做出抉择吧! \ No newline at end of file diff --git a/src/main/resources/me.lensfrex.manager/helpMessage.txt b/src/main/resources/me.lensfrex.manager/helpMessage.txt index c7e62d8..3a63586 100644 --- a/src/main/resources/me.lensfrex.manager/helpMessage.txt +++ b/src/main/resources/me.lensfrex.manager/helpMessage.txt @@ -1,5 +1,5 @@ ---------------------------------------------------------------- - Welcome to StudentManager-S + Welcome to SManager-S ---------------------------------------------------------------- Do you want to: 1. Input record @@ -11,9 +11,10 @@ Do you want to: 7. Sort in ascending order by name 8. Search by number 9. Search by name - 10. Statistic analysis for every course (not featured yet) + 10. Statistic analysis for every course 11. List record 12. Show help again + 13. “我 们 需 要 中 文” ← _ ← 0. Exit ---------------------------------------------------------------- Please enter your choice: