当前位置 博文首页 > kbtx的博客:面向对象实验unit2-题目1(综合性题目):面向对象实
?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方法实现的功能):
这里免费提供主程序的代码实现,和已经打包好的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 {