testcontroller.java

来自「纯JAVA代码的考试系统」· Java 代码 · 共 200 行

JAVA
200
字号
package org.fangsoft.testcenter.main;

import static org.fangsoft.util.Console.output;

import java.sql.Timestamp;
import java.util.Observable;
import java.util.Observer;

import org.fangsoft.testcenter.dao.db.CustomerDBDao;
import org.fangsoft.testcenter.dao.db.QuestionDBDao;
import org.fangsoft.testcenter.model.Customer;
import org.fangsoft.testcenter.model.Question;
import org.fangsoft.testcenter.model.QuestionResult;
import org.fangsoft.testcenter.model.Test;
import org.fangsoft.testcenter.model.TestResult;
import org.fangsoft.testcenter.view.console.LoginView;
import org.fangsoft.testcenter.view.console.NumbellQuestionRe;
import org.fangsoft.testcenter.view.console.ReportTestResultView;
import org.fangsoft.testcenter.view.console.ReworkAnswerView;
import org.fangsoft.testcenter.view.console.SelectTestView;
import org.fangsoft.testcenter.view.console.ShowQuestionView;
import org.fangsoft.testcenter.view.console.StartTestView;
import org.fangsoft.testcenter.view.console.TrueTestView;
import org.fangsoft.testcenter.view.console.WelcomeView;

public class TestController implements Observer {
	private Test test = null;
	private TestResult tr = new TestResult();
	private Customer customer = null;

	public Test getTest() {
		return test;
	}

	public void setTest(Test test) {
		this.test = test;
	}

	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		o.deleteObservers();
		if (o instanceof WelcomeView) {
			this.handle((WelcomeView) o);
		} else if (o instanceof LoginView) {
			this.handle((LoginView) o);
		} else if (o instanceof TrueTestView) {
			this.handle((TrueTestView) o);
		} else if (o instanceof SelectTestView) {
			this.handle((SelectTestView) o);
		} else if (o instanceof StartTestView) {
			this.handle((StartTestView) o);
		} else if (o instanceof ReworkAnswerView) {
			this.handle((ReworkAnswerView) o);
		}
		/*
		 * else if(o instanceof ReportTestResultView){
		 * this.handle((ReportTestResultView)o); }
		 */

	}

	public void handle(WelcomeView o) {
		LoginView lView = new LoginView();
		lView.addObserver(this);
		lView.display();
	}

	public void handle(LoginView o) {
		int maxLogin = 2;
		int count = 0;
		for (count = 0; count < maxLogin; count++) {
			this.setCustomer(CustomerDBDao.getInstance().login(o.getUesid(),
					o.getPassword()));
			o.deleteObservers();
			if (this.customer != null) {
				break;
			}
			output("用户名或密码错误不能登录,重新登录." + "登录" + (maxLogin + 1) + "次不成功,系统将退出."
					+ "这是" + (count + 1) + "次");
			o.displayView();
		}
		if (this.customer == null) {
			Testcenter.exit("登陆失败!系统退出!");
		}
		TrueTestView TtView = new TrueTestView();
		TtView.addObserver(this);
		TtView.display();
	}

	public void handle(TrueTestView o) {
		if (!o.isResponse()) {
			Testcenter.exit("系统退出!");
		}
		SelectTestView sView = new SelectTestView();
		sView.addObserver(this);
		sView.display();
	}

	public void handle(SelectTestView o) {
		StartTestView stView = new StartTestView();
		this.setTest(o.getTest());
		stView.setTest(this.test);
		stView.setTr(tr);
		stView.addObserver(this);
		stView.display();
	}

	public void handle(StartTestView o) {
		ShowQuestionView sqView = new ShowQuestionView();
		this.produceQr();
		sqView.setTest(this.test);
		sqView.addObserver(this);
		reQuestionResult(sqView);
		ReworkAnswerView rtView = new ReworkAnswerView();
		rtView.addObserver(this);
		rtView.display();
	}

	public void handle(ReworkAnswerView o) {
		reWorkQr(o);		
		ReportTestResultView rtView = new ReportTestResultView();
		rtView.setTr(this.tr);
		rtView.addObserver(this);
		rtView.display();
		Testcenter.exit(0);
	}

	private void reWorkQr(ReworkAnswerView o) {
		while (o.isResponse()) {
			NumbellQuestionRe nqView = new NumbellQuestionRe();
			 nqView.addObserver(this);
			nqView.display();
			ShowQuestionView sqView = new ShowQuestionView();
			sqView.setIndex(nqView.getN()-1);
			sqView.setTest(this.test);
			sqView.display();
			QuestionResult qr = tr.getQuestionResult(nqView.getN()-1);
			qr.setQuestion(this.test.getQuestion(nqView.getN()-1));
			qr.setScore(-1);
			qr.setAnswer(sqView.getAnswer());
			qr.computeAnswer();
			tr.reworkList(qr, nqView.getN()-1);
			o.display();
		}
		long end = tr.getEndTime().getTime();
		tr.setEndTime(new Timestamp(end));
		tr.commitTest();
		tr.updatte();
	}

	private void reQuestionResult(ShowQuestionView sqView) {
		TimeThread t = new TimeThread();
		t.start(test, tr);
		for (int i = 0; i < this.test.getQuestion().size(); i++) {
			sqView.setIndex(i);
			sqView.display();
			QuestionResult qr = tr.getQuestionResult(i);
			qr.setQuestion(this.test.getQuestion(i));
			qr.setAnswer(sqView.getAnswer());
			qr.computeAnswer();
			tr.reworkList(qr, i);
			tr.setCount(i);
			long end = System.currentTimeMillis();
			tr.setEndTime(new Timestamp(end));
		}
	}

	public void produceQr() {
		QuestionDBDao.getInstance().loadQuestion(this.test);
		tr.setCustomer(this.customer);
		tr.setTest(this.test);
		tr.setStatus(TestResult.Status.TESTING);
		for (Question q : this.test.getQuestion()) {
			QuestionResult qr = new QuestionResult();
			qr.setQuestion(q);
			qr.setAnswer(null);
			tr.addQuestionResult(qr);
		}
		tr.save();
	}

	public TestResult getTestresult() {
		return tr;
	}

	public void setTestresult(TestResult testresult) {
		this.tr = testresult;
	}

	public Customer getCustomer() {
		return customer;
	}

	public void setCustomer(Customer customer) {
		this.customer = customer;
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?