📄 examsystem.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class ExamSystem extends KeyAdapter implements ActionListener,ItemListener,Runnable{
Frame f = new Frame("Exam System");
Panel p1 = new Panel();
Panel p2 = new Panel(new GridLayout(2,1));
Panel p3 = new Panel(new BorderLayout());
Panel p4 = new Panel();
Panel p5 = new Panel();
Panel p6 = new Panel();
Panel p7 = new Panel();
Panel p8 = new Panel();
Label clock = new Label("Clock ");
Label lindex = new Label("Question 1 of 16");
Label lnote = new Label("multiple selection");
Button breview = new Button("Review");
Button bfinish = new Button("Finish");
Button bback = new Button("back");
Button bnext = new Button("next");
Button bclear = new Button("clear");
Button bgoto = new Button("goto");
TextField tf = new TextField(3);
TextArea ta = new TextArea();
Checkbox[] cb;
Question[] qall;
Checkbox cmark = new Checkbox("Mark");
int index = 0;
int option = 0;
Dialog dreview;
Dialog dfinish;
Button breviewok = new Button("ok");
Button bfinishok = new Button("ok");
public ExamSystem(){
ta.setFont(new Font("Arial",Font.PLAIN,13));
p1.setLayout(new GridLayout(1,2));
p7.setLayout(new FlowLayout(FlowLayout.LEFT));
p8.setLayout(new FlowLayout(FlowLayout.RIGHT));
p7.add(cmark);
p8.add(clock);
p8.add(breview);
p8.add(bfinish);
p1.add(p7);
p1.add(p8);
lindex.setAlignment(Label.LEFT);
p3.add(lindex,"North");
ta.setEditable(false);
p3.add(ta);
p2.add(p3);
p5.setLayout(new BorderLayout());
p5.add(lnote,"North");
p5.add(p6);
p2.add(p5);
p4.add(bclear);
p4.add(bback);
p4.add(bnext);
p4.add(bgoto);
p4.add(tf);
f.add(p1,"North");
f.add(p2);
f.add(p4,"South");
f.setLocation(200,200);
f.setSize(600,500);
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(1);
}
});
breviewok.setActionCommand("review");
bfinishok.setActionCommand("finish");
bnext.addActionListener(this);
bback.addActionListener(this);
cmark.addItemListener(this);
breview.addActionListener(this);
breviewok.addActionListener(this);
bfinish.addActionListener(this);
bfinishok.addActionListener(this);
bclear.addActionListener(this);
bgoto.addActionListener(this);
tf.addKeyListener(this);
this.createQuestion();
this.display(qall[index]);
new Thread(this).start();
}
public Vector createQuestion(){
Vector v = ReadQuesion.readQuesion();
qall = new Question[v.size()];
for (int i = 0; i<v.size(); i++) {
qall[i] = (Question)v.get(i);
}
return v;
}
public void display(Question q){
lindex.setText("Question "+(index+1)+" of "+qall.length);
cmark.setState(q.getMarked());
ta.setText("");
ta.append(q.getDetail());
lnote.setText(q.getNote());
p6.removeAll();
Vector vc = q.getChoice();
option = vc.size();
p6.setLayout(new GridLayout(option,1));
cb = new Checkbox[option];
for (int i = 0; i<option; i++) {
cb[i] = new Checkbox((char)(65 + i) + ") "+(String)vc.get(i));
p6.add(cb[i]);
cb[i].addItemListener(this);
}
for (int i = 0; i<option; i++) {
String temp = q.getSelectedAnswer();
if(q.getAttempted()){
cb[i].setState(temp.charAt(i) == '1');
}else{
cb[i].setState(false);
}
}
this.setButtonState();
f.validate();
}
public void setButtonState(){
if(index == 0){
bback.setEnabled(false);
bnext.setEnabled(true);
}else if(index == qall.length-1){
bback.setEnabled(true);
bnext.setEnabled(false);
}else{
bback.setEnabled(true);
bnext.setEnabled(true);
}
}
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("next")){
this.display(qall[++index]);
}else if(s.equals("back")){
this.display(qall[--index]);
}else if(s.equals("Review")){
this.survey();
}else if(s.equals("review")){
dreview.setVisible(false);
}else if(s.equals("Finish")){
this.report();
}else if(s.equals("finish")){
System.exit(1);
}else if(s.equals("clear")){
for(int i=0;i<option;i++){
this.cb[i].setState(false);
}
}else if(s.equals("goto")){
try{
int temp = Integer.parseInt(tf.getText());
if(temp>=0 && temp<qall.length){
index = temp-1;
this.display(qall[index]);
}else{
JOptionPane.showMessageDialog(f,"out of range!");
tf.setText("");
}
}catch(NumberFormatException ee){
JOptionPane.showMessageDialog(f,"input number!");
}
tf.setText("");
}
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==10){
try{
int temp = Integer.parseInt(tf.getText());
if(temp>=0 && temp<qall.length){
index = temp-1;
this.display(qall[index]);
}else{
JOptionPane.showMessageDialog(f,"out of range!");
tf.setText("");
}
}catch(NumberFormatException ee){
JOptionPane.showMessageDialog(f,"input number!");
}
tf.setText("");
}
}
public void itemStateChanged(ItemEvent e){
String temp = "";
if(e.getSource()==cmark){
qall[index].setMarked(e.getStateChange()==e.SELECTED);
}else{
qall[index].setAttempted(true);
for (int i = 0; i<qall[index].getChoice().size(); i++) {
temp+=cb[i].getState()?"1":"0";
}
qall[index].setSelectedAnswer(temp);
}
}
public void survey(){
dreview = new Dialog(f,"review");
TextArea ta = new TextArea("QuetNo.\tMarked\tAttempted\n" +
"-------------------------------", 10, 28);
ta.setEditable(false);
dreview.add(ta);
Panel p = new Panel();
p.add(breviewok);
dreview.add(p,"South");
for(int i=0; i<qall.length; i++){
ta.append("\n" + (i+1) + "\t"+ qall[i].getMarked() +"\t"+ qall[i].getAttempted());
}
ta.append("\n------------------------------");
dreview.setLocation(300,300);
dreview.pack();
dreview.setVisible(true);
}
public void report(){
dfinish = new Dialog(f,"finish");
Panel p1 = new Panel(new GridLayout(3,1));
Panel p2 = new Panel();
Label l1 = new Label("Current Test Report");
l1.setAlignment(Label.CENTER);
Label l2 = new Label();
Label l3 = new Label();
Label l4 = new Label();
p1.add(l2);
p1.add(l3);
p1.add(l4);
p2.add(bfinishok);
dfinish.add(l1,"North");
dfinish.add(p1);
dfinish.add(p2,"South");
int k = 0;
for(int i=0; i<qall.length; i++){
if(qall[i].getSelectedAnswer().equals(qall[i].getStandardAnswer())){
k++;
}
}
l2.setText(" Total Question: " + qall.length);
l3.setText(" Correct Attempts: " + k);
l4.setText(" Your Marks: " + (int)(((double)k/qall.length)*100) + '%');
dfinish.setLocation(500,200);
dfinish.setSize(200,200);
dfinish.setVisible(true);
}
public void exit(){
survey();
report();
bnext.setEnabled(false);
bback.setEnabled(false);
bgoto.setEnabled(false);
bclear.setEnabled(false);
breview.setEnabled(false);
bfinish.setEnabled(false);
cmark.setEnabled(false);
for(int i = 0; i<option; i++){
cb[i].setEnabled(false);
}
}
public void myclock(){
int i = 7200;
while(i!=0){
int h = i/3600;
String sh = h<10?"0"+h:""+h;
int m = i%3600/60;
String sm = m<10?"0"+m:""+m;
int s = i%60;
String ss = s<10?"0"+s:""+s;
clock.setText(sh+":"+sm+":"+ss);
i--;
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
}
this.exit();
try{
Thread.sleep(60000);
}catch(Exception e){
e.printStackTrace();
}
System.exit(1);
}
public void run(){
this.myclock();
}
/*
public static void main(String[] args){
new ExamSystem();
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -