在一个简单答题系统的设计与实现(二)中,实现了文件设计(数据层设计)、业务设计(逻辑设计)的一部分,这一篇博文将会实现业务设计的另外一部分(业务逻辑)。
业务设计-业务逻辑实现
按照上一篇博文列出的逻辑一一实现:
答题部分
-
答的是什么题
在之前设计的问题类型中已经定义了成员变量
questionType
,这个变量会让我们知道当前题的类型是什么。 -
答的题是否正确
在之前设计的问题类型中定义了成员变量
answerDesc
,这个变量存储的是题的正确答案。怎样判断正确,获取用户填写或者选择的答案与该变量存储的值进行比较,相等则正确,否则错误。 -
答错的题正确答案是什么?
正确答案就是在问题类型中定义的成员变量
answerDesc
。
在理清以上的逻辑后,可以开始用代码实现了,如果在用户界面代码中进行以上逻辑的处理,会使得臃肿(本不属于用户界面干的事情让用户界面来干)。所以,将这些逻辑的处理放在一个逻辑处理类中专门处理。
LogicalProcessor.Java代码
public class LogicalProcessor {
/*判断用户答题是否正确,并且如果错误,将正确答案返回*/
public static String judgeQuestion(Question question,String userAnswer){
if(question.getAnswerDesc().trim().equals(userAnswer.trim()))
return null;
return question.getAnswerDesc();
}
/*返回用户当前答题的类型*/
public static String getQuestionTypeName(Question question){
String questionType = question.getQuestionType();
switch (questionType){
case Question.CHOOSE_QUESTION:{
return Question.CHOOSE_QUESTION_NAME;
}
case Question.BLANK_QUESTION:{
return Question.BLANK_QUESTION_NAME;
}
case Question.JUDGE_QUESTION:{
return Question.JUDGE_QUESTION_NAME;
}
case Question.JD_QUESTION:{
return Question.JD_QUESTION_NAME;
}
default:{
return "";
}
}
}
}
除了答题逻辑,还有UI界面中需要用到的逻辑,我们简称界面逻辑;
界面逻辑:
- 上一题,下一题
在用户界面操作时,点击上一题或者下一题,就会出现相应的题。可以将这个抽象看做数组的取值。
如上图所示。再加上平常对数组取值的一些限制,比如:最小取到下标为0,最大取到(数组长度-1)。
ObjectProcessor.Java代码
public class ObjectProcessor<T> {
private int start;
private int end;
private int cur;
private List<T> list;
public ObjectProcessor(List<T> list) {
super();
this.start = 0;
this.cur = start;
this.end = list.size();
this.list = list;
}
public ObjectProcessor(List<T> list,int cur) {
super();
this.start = 0;
this.cur = cur;
this.end = list.size();
this.list = list;
}
public T toLast(){
if(list.isEmpty() || cur < start || cur > end)
return null;
if(cur > start)
cur--;
return list.get(cur);
}
public T toNext(){
if(list.isEmpty() || cur < start || cur > end)
return null;
if(cur < end-1)
cur++;
return list.get(cur);
}
public T getCurT(){
if(list.isEmpty() || cur < start || cur > end)
return null;
return list.get(cur);
}
public int getCur() {
return cur;
}
public void setCur(int cur) {
this.cur = cur;
}
}
使用泛型的好处是可复用强,即便是以后要做其他系统,需要这个功能,直接复制过去就可以用,而不是只是答题系统可以用。
在下一篇博客中,将会实现生成试卷、练习模式以及一些小功能的逻辑。博主水平有限,还希望大家海涵。欢迎大家指正。