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

📄 scjptest.java

📁 一个考试的程序
💻 JAVA
字号:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.applet.Applet;
import java.text.NumberFormat;

public class ScjpTest {
	public static void main(String args[]){
		Frame f = new Frame("ScjpTest");
		SubPanel sp = new SubPanel();
		sp.inital();			
		f.add(sp);
		f.setSize(800,550);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(1);	
			}	
		});
	}
}

class SubPanel extends Panel 
	implements ActionListener,ItemListener{
	private Checkbox  mark = new Checkbox("Mark");
	private Button  review = new Button("Review");
	private Button	finish = new Button("Finish");
	private Button	clear = new Button("Clear");
	private Button	back = new Button("Back");
	private Button	next = new Button("Next");
	private Button	jump = new Button("Goto");
	private TextField to = new TextField(4);
	private TextArea ta = new TextArea(" ",10,30,1);
	private Label qIndex = new Label("Question No.");
	private Label qNote = new Label("Select correct answer(s)");
	private Label timer = new Label("");
	private Panel answerPanel = new Panel();
	private Dialog rep = new Dialog(new Frame()); 
	private Dialog rew = new Dialog(new Frame()); 
	private Question[] qs; 
	private int idx = 0;
	private String[] itemIdx = {
		"A)","B)","C)","D)","E)","F)","G)"
	}; 

	public void inital(){
		this.setLayout(new BorderLayout());
		Panel p1 = new Panel(),
			  p2 = new Panel(),
			  p3 = new Panel(),
			  p4 = new Panel(),
			  p5 = new Panel(),
			  p6 = new Panel(),
			  p7 = new Panel();
		p1.setLayout(new GridLayout(1,2));		
		p1.add(p2);
		p1.add(p3);
		p2.setLayout(new FlowLayout(FlowLayout.LEFT));
		p2.add(mark);
		p3.setLayout(new FlowLayout(FlowLayout.RIGHT));
		p3.add(review);
		p3.add(finish);
		p3.add(timer);
		this.add(p1,"North");
		
		p4.add(clear);
		p4.add(back);
		p4.add(next);
		p4.add(jump);
		p4.add(to);
		this.add(p4,"South");
		
		p5.setLayout(new GridLayout(2,1));
		p5.add(p6);
		p5.add(p7);
		p6.setLayout(new BorderLayout());
		p6.add(qIndex,"North");
		p6.add(ta,"Center");
		p7.setLayout(new BorderLayout());
		p7.add(qNote,"North");
		p7.add(answerPanel,"Center");
		answerPanel.setLayout(new GridLayout(7,1));		
		this.add(p5,"Center");
		this.createQuestion();
		display(answerPanel,qs[idx]);
		
		ta.setEditable(false);
		qIndex.setFont(new Font("Dialog",Font.PLAIN,14));
		qNote.setFont(new Font("Dialog",Font.PLAIN,14));
		timer.setFont(new Font("Impact",Font.PLAIN,20));
		this.setButtonState();

		//注册事件监听器
		review.addActionListener(this); 
		finish.addActionListener(this);
		clear.addActionListener(this);
		back.addActionListener(this);
		next.addActionListener(this);
		jump.addActionListener(this);
		mark.addItemListener(this);
		
		MyClock mc = new MyClock(timer,this);
		mc.start();
	}
	
	public void display(Panel p,Question q){		
		ta.setText(q.getDetail());
		mark.setState(q.getMarked());				
		p.removeAll();		
		Vector choice = q.getChoice();
		int size = choice.size();
		for(int j=0;j<size;j++){
			Panel p1 = new Panel();
			p1.setLayout(new FlowLayout(FlowLayout.LEFT));
			Checkbox cb = new Checkbox(itemIdx[j]);
			cb.setState(q.getSelectedAnswer().charAt(j) == '1');
			cb.addItemListener(this);
			
			p1.add(cb);
			p1.add(new Label(choice.elementAt(j).toString()));
			p.add(p1,j);		
		}
		
		qIndex.setText("Question " + (idx+1) + " of " + qs.length);
		qNote.setText(q.getNote());
		this.validateTree();
	}
	
	public void createQuestion(){
		Vector qStore = new Vector();
		try{
			FileReader fr = new FileReader("data.xml");
			BufferedReader br = new BufferedReader(fr);
			while(true){
				Question q = ReadQuestion(br);	
				if(q == null){
					break;	
				}
				qStore.add(q);
			}
			br.close();		
		}catch(IOException e){
			e.printStackTrace();	
		}
		qs = new Question[qStore.size()];
		for(int i=0; i<qStore.size();i++){
			qs[i] = (Question)qStore.elementAt(i);
		}
	}
	
	public Question ReadQuestion(BufferedReader br){		
		Question q = new Question();
		try{
			String s = br.readLine();
			while(s!=null && (!s.equals("<question>"))){
				s = br.readLine();	
			}
			s = br.readLine();			
			while(s!=null && (!s.equals("<note>"))){
				s = br.readLine();	
			}			
			if(s == null) return null;
			q.setNote(br.readLine());
			s = br.readLine();
			if(!s.equals("</note>")){
				return null;
			}
								
			s = br.readLine();
			while(s!=null && (!s.equals("<detail>"))){
				s = br.readLine();	
			}			
			if(s == null) return null;
			StringBuffer sb = new StringBuffer("");
			s = br.readLine();
			while(s!=null && (!s.equals("</detail>"))){
				sb.append(s + "\n");
				s = br.readLine();	
			}
			q.setDetail(sb.toString());						
			if(s == null) return null;			
			
			s = br.readLine();			
			while(s!=null && (!s.equals("<choice>"))){
				s = br.readLine();	
			}			
			if(s == null) return null;
			Vector vc = new Vector();
			s = br.readLine();
			while(s!=null && (!s.equals("</choice>"))){
				vc.add(s);
				s = br.readLine();	
			}
			q.setChoice(vc);
			if(s == null) return null;			
			
			s = br.readLine();			
			while(s!=null && (!s.equals("<answer>"))){
				s = br.readLine();	
			}			
			if(s == null) return null;
			q.setStandardAnswer(br.readLine());
			q.setSelectedAnswer(q.getStandardAnswer());
			q.reset();
			s = br.readLine();
			if(!s.equals("</answer>")){
				return null;
			}
			
			s = br.readLine();			
			while(s!=null && (!s.equals("</question>"))){
				s = br.readLine();	
			}			
			if(s == null) return null;							
		}catch(IOException e){
			e.printStackTrace();	
		}
		return q;
	}		
	
	public void actionPerformed(ActionEvent e){
		String s = e.getActionCommand();
		if(s.equals("Finish")){
			this.report();
		}else if(s.equals("Review")){
			this.survey();	
		}

		if(s.equals("Next")){
			idx ++;
		}else if(s.equals("Back")){
			idx --;
		}else if(s.equals("Clear")){
			qs[idx].reset();	
		}else if(s.equals("Goto")){
			try{
				int i = Integer.parseInt(to.getText())-1;
				if(i>=0 && i<qs.length)
					idx = i;	
			}catch(Exception e1){}
			to.setText("");	
		}
		display(answerPanel,qs[idx]);			
		this.setButtonState();	
	}
	
	public void setButtonState(){
		if(idx == 0){
			back.setEnabled(false);	
		}else{
			back.setEnabled(true);				
		}
		
		if(idx == qs.length-1){
			next.setEnabled(false);
		}else{
			next.setEnabled(true);	
		}			
	}
	
	public void itemStateChanged(ItemEvent e){
		qs[idx].setAttempted(true);		
		Checkbox source = (Checkbox)e.getSource();		
		String item = source.getLabel();
		boolean state = source.getState();
		if(item.equals("Mark")){
			if(mark.getState() == true){
				qs[idx].setMarked(true);	
			}else{
				qs[idx].setMarked(false);				
			}
			return;
		}
		for(int i=0;i<itemIdx.length;i++){
			if(item.equals(itemIdx[i])){
				String s = qs[idx].getSelectedAnswer();
				StringBuffer sb = new StringBuffer(s);
				sb.setCharAt(i,state == true ? '1' : '0');
				qs[idx].setSelectedAnswer(sb.toString());
				break; 	
			}	
		}		
	}

	public void survey(){
		rew = new Dialog(new Frame());		
		Label title = new Label(" Review Report");
		title.setFont(new Font("Impact",Font.PLAIN,20));
		rew.add(title,"North");
		
		TextArea revTa = new TextArea("",20,20,1);
		revTa.setEditable(false);
		revTa.setText("QuetNo.\tMarked\tAttempted\n");
		revTa.append("-------------------------\n"); 
		
		for(int i=0;i<qs.length;i++){
			revTa.append((i+1) + "\t" 
			+ ((qs[i].getMarked()==true)?"yes":"   ") + "\t" 
			+ ((qs[i].getAttempted()==true)?"yes":"") + "\n");	
		}
		rew.add(revTa);
		
		Button ok = new Button("OK");
		ok.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rew.dispose();					
			}	
		});
		Panel p = new Panel();
		p.add(ok);
		rew.add(p,"South");				
		rew.setSize(300,200);
		rew.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				rew.dispose();	
			}	
		});		
		rew.setVisible(true);		
				
	}
	
	public void report(){
		int score = 0;
		for(int i=0;i<qs.length;i++){
			if(qs[i].checkAnswer()){
				score++;	
			}	
		}
		rep = new Dialog(new Frame());		
		Label title = new Label(" Current Test Report");
		title.setFont(new Font("Impact",Font.PLAIN,20));
		rep.add(title,"North");
		
		Panel content = new Panel();
		content.setLayout(new GridLayout(3,1));
		content.add(new Label("\tTotal Questions:\t" + qs.length));
		content.add(new Label("\tCorrect Attempts:\t" + score));
		content.add(new Label("\tYour Marks:\t\t" + (score*100/qs.length) + "%"));
		rep.add(content,"Center");
		
		Button ok = new Button("OK");
		ok.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				rep.dispose();					
			}	
		});
		Panel p = new Panel();
		p.add(ok);
		rep.add(p,"South");				
		rep.setSize(200,160);
		rep.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				rep.dispose();	
			}	
		});		
		rep.setVisible(true);
	}
}

class Question{
	private String note = "multiple selection";
	private String detail = "  ";
	private Vector choice = null;
	private String standardAnswer;
	private String selectedAnswer;
	private boolean marked = false;
	private boolean attempted = false;	
	
	public String getNote(){
		return note;	
	}
	
	public String getDetail(){
		return detail;	
	}
	
	public Vector getChoice(){
		return choice;	
	}
	
	public String getStandardAnswer(){
		return standardAnswer;	
	}
	
	public String getSelectedAnswer(){
		return selectedAnswer;	
	}	
	
	public boolean getMarked(){
		return marked;	
	}
	
	public boolean getAttempted(){
		return attempted;	
	}
	
	public void setNote(String s){
		note = s;	
	}
	
	public void setDetail(String s){
		detail = s;	
	}
	
	public void setChoice(Vector c){
		choice = c;	
	}
	
	public void setStandardAnswer(String s){
		standardAnswer = s;	
	}
	
	public void setSelectedAnswer(String s){
		selectedAnswer = s;	
	}
	
	public void setMarked(boolean m){
		marked = m;	
	}
	
	public void setAttempted(boolean a){
		attempted = a;	
	}

	public void reset(){
		selectedAnswer = selectedAnswer.replace('1','0');
	}
	
	public boolean checkAnswer(){
		if(standardAnswer.equals(selectedAnswer))
			return true;
		return false;
	}
	
	public String toString(){
		return (standardAnswer + "\t" + selectedAnswer);	
	}
}

class MyClock extends Thread{
	private Label timer;
	private SubPanel sp;
	
	public MyClock(Label t,SubPanel p){
		timer = t;
		sp = p;
	}	
	
	public void run(){
      	NumberFormat nf = NumberFormat.getInstance();
        nf.setMinimumIntegerDigits(2);
        long startTime = System.currentTimeMillis();
        long endTime = startTime + 2*60*60*1000;
        long now;
        int last,h,m,s;
        while(true){
        	now = System.currentTimeMillis();
        	last = (int)((endTime - now)/1000);
        	if(last<=0){
        		timer.setText("Time out!");
        		break;	
        	}
        	h = last/3600;
        	m = last%3600/60;
        	s = last%60;
        	StringBuffer sb = new StringBuffer("");
        	sb.append(nf.format(h) + ":" + nf.format(m)
        		+ ":" + nf.format(s));
        	timer.setText(sb.toString());
        	try{
        		Thread.sleep(1000);	
        	}catch(Exception e){
        		e.printStackTrace();        		
        	}
        }
		sp.report();	
	}		
}

⌨️ 快捷键说明

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