设计一个控制台版的考试系统,包括出题、显示试卷、答卷、判卷等功能。
1.类的设计
考试系统中抽象出来的类包括以下几种。
(1)考生类(Student):提供考生的姓名。
(2)试题类(Question):试题包括题干title、选项options和答案answer。其中,选项使用集合List存储。
- Question(String title,Listoptions,String answer):创建试题
- void showQuestion():显示题目,包括题干和选项(供显示试卷时调用)。
- String getAnswer():返回试题答案(判卷时调用)。
(3)试卷类(Paper):试卷包括题目数量count和题目信息questions。其中,题目信息使用集合Map<Integer,Question>存储,建立题号和题目之间的映像关系。
- Paper(int count):按count的数量生成试题,将题目按编号存储在Map中。
- void addQuestion(int index):输入题干、选项、答案,向试卷中加一道试题,index为试题的序号。
- void showPaper():显示试卷,包括所有题目的题号、题目和选项。
- Map<Integer,Question>getQuestions():返回试卷中所有的题目(判卷时使用)。
- int getCount():返回试卷中所有题目(判卷时使用)。
(4)答题卡类(AnswerSheet):答题卡包括用户答题的答案answers,与题目的存储相对应,答案采用Map<Integer,String>存储,建立题号和答案之间的映像关系。
- addAnswer(int key,String answer):将指定题目的答案存储在Map中(答题时使用)。
- Map<Integer,String>getAnswers():返回用户的答案(判卷时使用)。
(5)考试类(Exam):考试类组合了学生、试卷和答题卡。
- private void createPaper():创建试卷。
- private void answerQuestions():答题,将答案存储至答题卡。
- private void showScoreOfPaper():判卷,取出试卷中题号和答案,与答题纸中的进行比较,显示评分结果。
- private void exam():组织考试,调用上面的3个私有方法,此方法对外公开。
2.实现代码
(1)Student.java
package example8_10;
//学生类
public class Student {
private String name;
public Student() {
}
public Student(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
}
(2)Question.java
package example8_10;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
//试题类
public class Question {
private String title;//题干
private List<String> options;//选项,使用集合List存储
private String answer;//答案
public Question() {
options=new ArrayList<String>();
}
public Question(String title,List<String>options,String answer) {
//创建试题
this.title=title;
this.options=options;
this.answer=answer;
}
public void showQuestion() {
//显示一个题目,包括题干和选项(供显示试卷时调用)
System.out.println("题目:"+title);//输出题干
//输出各选项
Iterator<String> it=options.iterator();
while(it.hasNext()) {
System.out.println(it.next(