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

📄 exammainframe.java

📁 这是个可以进行多项选择的系统
💻 JAVA
字号:
package exam.gui;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import exam.web.ExamClient;

/**
 * 考试主界面
 * 
 * @author 董晓炜
 * 
 */
public class ExamMainFrame {
	private int i;//试卷的剩余题数
	private int m;//现在是第几题
	private boolean isEnd=false;
	private ExamClient ec;
	private JFrame jf;
	private JLabel jl1, jl2;
//	private JRadioButton[] jrbs = new JRadioButton[5];
	private JTextField jtf;
	private JButton jb1, jb2, jb3;
	private JPanel center;
	private QuestionPanel[] qps;//试卷面板的数组
	private JScrollPane[] jsp;
	private String[] studentAnswer;
	private int score=0;
	private boolean isStop=false;

	public ExamMainFrame(ExamClient ec1) {
		this.ec = ec1;
		i=ec.getPaper().getQs().size()-1;
		m=1;
		qps=new QuestionPanel[i+1];
		jsp=new JScrollPane[i+1];
		for(int j=0;j<qps.length;j++){
			qps[j]=new QuestionPanel(ec.getPaper().getQs().get(j));
			jsp[j]=new JScrollPane(qps[j]);
		}
		studentAnswer=new String[i+1];
		center = new JPanel();
		jf = new JFrame("达内考试系统-" + ec.getCourse().getCourseName());
		jl1 = new JLabel("剩余试题" +i);
		jl2 = new JLabel("剩余时间" +(i+1)+ ":00");
//		for (int i = 0; i < jrbs.length; i++) {
//			jrbs[i] = new JRadioButton((char) (i + 65) + "");
//		}
		jtf=new JTextField(7);
		jb1 = new JButton("上一题");
		jb2 = new JButton("下一题");
		jb3 = new JButton("交卷");
		init();
		addEventHandler();
		new Thread(){
			public void run(){
				while(true){
				try {
					isStop=ec.stop();
				} catch (IOException e) {
					isStop=true;
					return;
				}
				if(isStop){
					jf.setVisible(false);
				}
				if(!isStop){
					jf.setVisible(true);
				}
				}
			}
		}.start();
		new Thread() {
			public void run() {
				int second = 0;
				int mintue = (i+1)*3/2;
				while(true) {
					if(isStop){
						continue;
					}
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					if(mintue==0&&second==0){
						jl2.setText("剩余时间00:00");
						if(isEnd)return;
						putStudentAnswer();
						char sco=CountScore();
						jb3.setEnabled(false);
						JOptionPane.showMessageDialog(jf, "考试结束! "+ec.getStudent().getName()+" 对的题数为"+score/10+" 级别为"+sco);
						ec.send(sco,score);
						ec.close();
						return;
					}
					if (second == 0) {
						second = 60;
						mintue--;
					}
					second--;
					if (mintue < 10 && second >= 10) {
						jl2.setText("剩余时间0" + (mintue) + ":" + second);
						continue;
					} else if (mintue >= 10 && second < 10) {
						jl2.setText("剩余时间"+(mintue) + ":0" + second);
						continue;
					} else if(mintue<10&&second<10){
						jl2.setText("剩余时间0" +( mintue) + ":0" + second);
						continue;
					}else{
						jl2.setText("剩余时间"+(mintue)+":"+second);
					}
					

				} 
			}
		}.start();
		showMe();
	}
	private void showMe(){
			jf.setSize(1000,700);
			jf.setLocation(0, 200);
			jf.setResizable(false);
			jf.setVisible(true);
			jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
	}
	private void addEventHandler(){
		jb1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(i==ec.getPaper().getQs().size()-2){
					putStudentAnswer();
					jb1.setEnabled(false);
					jb2.setEnabled(true);
					QuestionBefored();
					return;
				}
				putStudentAnswer();
				jb2.setEnabled(true);
				QuestionBefored();
			}
			
		});
		jb2.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				if(i==1){
					putStudentAnswer();
					jb2.setEnabled(false);
					jb1.setEnabled(true);
					QuestionAftered();
					return;
				}
				putStudentAnswer();
				jb1.setEnabled(true);
				QuestionAftered();
			}
			
		});
		jb3.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				putStudentAnswer();
				isEnd=true;
				char sco=CountScore();
				jb3.setEnabled(false);
				JOptionPane.showMessageDialog(jf, "考试结束! "+ec.getStudent().getName()+" 对的题数为"+score/10+" 级别为"+sco);
				ec.send(sco,score);
				ec.close();
			}
			
		});
		jf.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent arg0) {
				ec.close();
				System.exit(0);
			}
			
		});
	}

	private void init() {
		if(i==0){jb2.setEnabled(false);jb1.setEnabled(false);}
		JLabel jl3 = new JLabel("欢迎进入达内考试系统");
		jl3.setFont(new Font("宋体", Font.BOLD, 22));
		JLabel jl4 = new JLabel("考生编号 " + ec.getStudent().getId() + "  考生姓名 "
				+ ec.getStudent().getName() + "  考试科目 "
				+ ec.getCourse().getCourseName());
		JPanel north = new JPanel();
		center.setLayout(new BorderLayout());
		JPanel jp = new JPanel();
//		ButtonGroup bg = new ButtonGroup();
		JLabel jl5 = new JLabel("请写答案(一个或多个答案):");
		jp.add(jl5);
//		for (int i = 0; i < jrbs.length - 1; i++) {
//			bg.add(jrbs[i]);
//			jp.add(jrbs[i]);
//		}
//		bg.add(jrbs[4]);
//		jrbs[4].doClick();
		jp.add(jtf);
		jp.add(jb1);
		jb1.setEnabled(false);
		jp.add(jb2);
		jp.add(jb3);

		center.add(jp, BorderLayout.SOUTH);
		center.add(jsp[m-1],BorderLayout.CENTER);

		north.add(jl3);
		north.add(jl4);

		jf.add(north, BorderLayout.NORTH);
		jf.add(center,BorderLayout.CENTER);
		jf.add(jl1, BorderLayout.WEST);
		jf.add(jl2, BorderLayout.EAST);

	}
	private void putStudentAnswer(){//把学生的答案写入数组中
//		for(int j=0;j<jrbs.length;j++){
//			if(jrbs[j].isSelected()){
//				studentAnswer[ec.getPaper().getQs().size()-i-1]=jrbs[j].getText();
//				break;
//			}
//		}
		String answer=jtf.getText().trim();
		studentAnswer[m-1]=answer;
	}
	private void QuestionBefored(){//上一题时试题面板的变化
		center.remove(jsp[m-1]);
		center.add(jsp[m-2],BorderLayout.CENTER);
//		for(int j=0;j<jrbs.length;j++){
//			if(jrbs[j].getText().equals(studentAnswer[ec.getPaper().getQs().size()-i-1])){
//				jrbs[j].doClick();
//			}
//		}
		jtf.setText(studentAnswer[m-2]);
		center.repaint();
		i++;
		jl1.setText("剩余试题"+i);
		m--;
	}
	
	private void QuestionAftered(){//下一题时试题面板的变化
		center.remove(jsp[m-1]);
		center.add(jsp[m],BorderLayout.CENTER);
		if(studentAnswer[m]!=null)jtf.setText(studentAnswer[m]);
		else{jtf.setText("");}
//		jrbs[4].doClick();
//		else{
//			for(int i=0;i<jrbs.length;i++){
//				if(jrbs[i].getText().equals(studentAnswer[ec.getPaper().getQs().size()-i-1])){
//					jrbs[i].doClick();
//					break;
//				}
//			}
//		}
		center.repaint();
		i--;
		jl1.setText("剩余试题"+i);
		m++;
	}
	private boolean compare(String a,String b){
		String s=a.toUpperCase();
		String r=b.toUpperCase();
		char[] ss=s.toCharArray();
		char[] rr=r.toCharArray();
		int scount=0;
		int	rcount=0;
		for(int i=0;i<ss.length;i++){
			if(ss[i]==32)continue;
			else if(ss[i]<65&&ss[i]>90) break;
			scount+=ss[i];
			
		}
		for(int i=0;i<rr.length;i++){
			rcount+=rr[i];
		}
		if(scount==rcount)return true;
		return false;
	}
	private char CountScore(){
		String[] rightAnswer=ec.getPaper().getRightAnswers();
		int Score=0;
		for(int i=0;i<rightAnswer.length;i++){
			if(studentAnswer[i]==null)continue;
//			System.out.println(studentAnswer[i]+":"+rightAnswer[i]);
			if(compare(studentAnswer[i],rightAnswer[i])){
				Score+=10;
			}
		}
		score=Score;
		switch(Score/ec.getPaper().getQs().size()){
		case 10:
		case 9:return 'A';
		case 8:
		case 7:return 'B';
		case 6:
		case 5:return 'C';
		default: return 'D';
		}	
	}
//public static void main(String[] args){
//	char[] ss={'a','b','c'};
//	char[] rr={'c','a','b'};
//	char[] dd={'f','a','b'};
//	System.out.println((int)(ss[0]+ss[1]+ss[2]));
//	System.out.println((int)(rr[0]+rr[1]+rr[2]));
//	System.out.println((int)(dd[0]+dd[1]+dd[2]));
//}
}

⌨️ 快捷键说明

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