一个简单答题系统的设计与实现(三)

一个简单答题系统的设计与实现(二)中,实现了文件设计(数据层设计)、业务设计(逻辑设计)的一部分,这一篇博文将会实现业务设计的另外一部分(业务逻辑)。

业务设计-业务逻辑实现

按照上一篇博文列出的逻辑一一实现:
答题部分

  • 答的是什么题

    在之前设计的问题类型中已经定义了成员变量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;
	}	

}

使用泛型的好处是可复用强,即便是以后要做其他系统,需要这个功能,直接复制过去就可以用,而不是只是答题系统可以用。

在下一篇博客中,将会实现生成试卷、练习模式以及一些小功能的逻辑。博主水平有限,还希望大家海涵。欢迎大家指正。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页