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 + -
显示快捷键?