当前位置 博文首页 > kbtx的博客:面向对象实验unit2-题目1(综合性题目):面向对象实

    kbtx的博客:面向对象实验unit2-题目1(综合性题目):面向对象实

    作者:[db:作者] 时间:2021-07-09 09:46

    实验内容

    ?1. 根据目前所学课堂内容,用java逐步编程实现下述类图,遵循Java编程规范,并为撰写的类提供相应的Javadoc注释。
    2. 在FushiSystem.java中已提供部分辅助函数,该类的其它方法,请按上述类图中的要求全部编程实现,最终保证程序在步骤1-7中的执行中,按要求完成功能。
    程序运行时可供用户选择要实现的功能,如下图。(此功能已经给出,无需更改)

    步骤1:选择1(addStudentToCatalog方法实现的功能):
    添加学生,逐步让用户输入以下内容,包括学生的id 和name,添加成功会提示用户相应信息。

    步骤2:选择2(displayStudentCatalog方法实现的功能):
    显示学生目录,包括学生的id和name,格式如下:

    步骤3:选择3(displayExamPaper方法实现的功能):
    根据用户输入的学生id,显示该学生的试卷信息,格式如下:

    当用户输入不存在的学生id时,提示错误并请用户重新输入。
    如果还未为该学生生成试卷,会提示用户“还没有为该学生生成相应的试卷”。

    步骤6:选择6(lookupTotalScore方法实现的功能):
    根据用户输入的学生id,显示学生复试试卷的总得分,格式如下:

    当用户输入不存在的学生id时,提示错误并请用户重新输入。
    如果还未为该学生生成试卷,会提示用户“还没有为该学生生成相应的试卷”。

    步骤7:选择7(lookupTestScore方法实现的功能):

    1. 根据用户输入的学生id,显示学生复试试卷的每道题目得分,格式如下:
      当用户输入不存在的学生id时,提示错误并请用户重新输入。
      如果还未为该学生生成试卷,会提示用户“还没有为该学生生成相应的试卷”。

    代码资源

    这里免费提供主程序的代码实现,和已经打包好的jar包程序,其余内容请【点击此处】付费查看

    请注意,源码仅供参考,由抄袭导致的任何后果将由读着自行承担!

    点击此处免费下载jar包

    主程序代码实现:

    import TestUtil.TestDataBase;
    import TestUtil.TestItem;
    import TestUtil.Tests.EnglishTest;
    import TestUtil.Tests.MathTest;
    import TestUtil.Tests.ProfessionalTest;
    import TestUtil.Tests.Test;
    ?
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Iterator;
    import java.util.Random;
    ?
    ?
    public class FushiSystem {
        private StudentCatalog studentCatalog= new StudentCatalog();
        private TestDataBase testDataBase = new TestDataBase();
        public void addStudentToCatalog(String id) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.err.print("Student name> ");
            //下一行输入就是学生的名称
            Student student = new Student(id, br.readLine());
            studentCatalog.addStudent(student);
        }
    ?
        public void displayStudentCatalog(){
            int count = studentCatalog.getNumberOfStudent();
            for(int i=0;i<count;i++){
                System.out.println(studentCatalog.getStudent(i));
            }
        }
    ?
        public void displayExamPaper(String id) throws Exception{
            Student student = lookupStudent(id);
            System.out.println(student.getExamPaper());
        }
    ?
        /**
         * 这个方法是老师实现的,做了些许修改以适应我们的代码
         * @param id
         * @throws Exception
         */
        public void generateExamPaper(String id) throws Exception {
            Student student = lookupStudent(id);
            if (testDataBase.getNumberOfTests() < 10) {
                System.err.println("There are less than ten test questions in the test question bank, "
                        + "and the test paper cannot be generated.");
            } else {
                int[] testTypeNums = new int[3];
                for (String code : testDataBase.getTests().keySet()) {
                    Test test = testDataBase.getTest(code);
                    if (test instanceof EnglishTest) {
                        testTypeNums[0]++;
                    } else if (test instanceof MathTest) {
                        testTypeNums[1]++;
                    } else if (test instanceof ProfessionalTest) {
                        testTypeNums[2]++;
                    }
                }
                if (testTypeNums[0] < 3 || testTypeNums[1] < 3 || testTypeNums[2] < 4) {
                    System.err.println("There are not enough English questions or math questions or professional "
                            + "questions in the test database.");
                    return;
                }
                //采用随机生成试卷
                Random random = new Random();
                ExamPaper examPaper = new ExamPaper();
                for (int i = 0; i < testTypeNums.length; i++) {
                    testTypeNums[i] = 0;
                }
                int allTestCount = testDataBase.getNumberOfTests();
                boolean[] testIsChoose = new boolean[allTestCount];
                while (examPaper.getNumberOfTestItems() < 10) {
                    int target = random.nextInt(allTestCount);
                    Test test = testDataBase.getTest(target);
    ?
                    if (test instanceof EnglishTest) {
                        if (testTypeNums[0] < 3 && (!testIsChoose[target])) {
                            testTypeNums[0]++;
                            examPaper.addTestItem(new TestItem(test, 0));
                            testIsChoose[target] = true;
                        }
                    } else if (test instanceof MathTest) {
                        if (testTypeNums[1] < 3 && (!testIsChoose[target])) {
                            testTypeNums[1]++;
                            examPaper.addTestItem(new TestItem(test, 0));
                            testIsChoose[target] = true;
                        }
                    } else if (test instanceof ProfessionalTest) {
                        if (testTypeNums[2] < 4 && (!testIsChoose[target])) {
                            testTypeNums[2]++;
                            examPaper.addTestItem(new TestItem(test, 0));
                            testIsChoose[target] = true;
                        }
                    }
    ?
                }
                student.setExamPaper(examPaper);
                System.out.println("Test papers have been generated for this student!");
            }
        }
    ?
        /**
         * 这个方法是老师实现的,做了些许修改以适应我们的代码
         * @param id
         */
        public void entryScore(String id) throws  Exception{
            Student student = lookupStudent(id);
            int index = 1;
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            for(TestItem ti:student.getExamPaper().testItems){
                System.out.println(String.format("The score of item %d is: ",index));
                int score;
                while(true) {
                    try {
                        score = Integer.parseInt(br.readLine());
                        break;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if (score > 10 || score < 0) {
                    System.err.println("The score of each test is no more than 10 or less than 0. Please re-enter!");
                } else {