⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 examsystem.java

📁 一个考试系统 基于xml数据库 没有利用任何工具读取数据库
💻 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 + -