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

📄 exammainframe.java

📁 java编写的桌面考试系统.含所有源码.
💻 JAVA
字号:
package exam.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

import exam.dao.PaperLoad;
import exam.dao.ScoreIntoSco;
import exam.model.Question;
import exam.model.Student;

/**
 * 考试主界面
 * 
 * @author 刘东
 * 
 */
public class ExamMainFrame implements ActionListener {
	private JFrame frame;
	private JLabel welcomeL, stuIdL, stuNameL, courseNameL,
			remainderQuesstionL, remainderTimeL, quesstionCountL, timeL,
			pleaseL;
	private JButton last, next, submit;

	private ButtonGroup answerGroup;
	private JRadioButton buttonA, buttonB, buttonC, buttonD, buttonDefault;
	private JPanel ps, pw, pe, pn;
	private JPanel questionPanel;
	private Student student;
	private String subject;

	private Question[] questions;
	private String[] answer;
	private int count, questionCount, remainderCount;
	private int score;
	private int time, shi, fen, miao, delay;

	private Timer timer;

	public ExamMainFrame(Student student, String subject) {
		this.student = student;
		this.subject = subject;
		frame = new JFrame("达内考试系统--" + subject);

		welcomeL = new JLabel("欢迎进入达内考试系统");
		stuIdL = new JLabel("        考生编号:" + student.getId());
		stuNameL = new JLabel("        考生姓名:" + student.getUserName());
		courseNameL = new JLabel("        考试科目:" + subject);
		remainderQuesstionL = new JLabel("剩余试题:");
		remainderTimeL = new JLabel("剩余时间:");
		quesstionCountL = new JLabel();
		timeL = new JLabel();
		pleaseL = new JLabel("请选择:");

		pn = new JPanel();
		pw = new JPanel();
		pe = new JPanel();
		ps = new JPanel();

		last = new JButton("<<上一题");
		next = new JButton("下一题>>");
		submit = new JButton("交卷");

		answerGroup = new ButtonGroup();
		buttonA = new JRadioButton("A");
		buttonB = new JRadioButton("B");
		buttonC = new JRadioButton("C");
		buttonD = new JRadioButton("D");
		buttonDefault = new JRadioButton();

		count = 0;
		score = 0;
		questions = new PaperLoad(subject).getPaper(subject).getQuestions();
		questionCount = questions.length;
		answer = new String[questionCount];
		timer = new Timer();
		init();
	}

	private void init() {
		pn.add(welcomeL);
		welcomeL.setFont(new Font("仿宋", Font.BOLD, 20));
		pn.add(stuIdL);
		pn.add(stuNameL);
		pn.add(courseNameL);

		pw.setLayout(new BoxLayout(pw, BoxLayout.Y_AXIS));
		pw.add(remainderQuesstionL);
		pw.add(quesstionCountL);

		pe.setLayout(new BoxLayout(pe, BoxLayout.Y_AXIS));
		pe.add(remainderTimeL);
		pe.add(timeL);

		answerGroup.add(buttonA);
		answerGroup.add(buttonB);
		answerGroup.add(buttonC);
		answerGroup.add(buttonD);
		answerGroup.add(buttonDefault);

		ps.add(pleaseL);
		ps.add(buttonA);
		ps.add(buttonB);
		ps.add(buttonC);
		ps.add(buttonD);
		ps.add(last);
		last.addActionListener(this);
		ps.add(next);
		next.addActionListener(this);
		ps.add(submit);
		submit.addActionListener(this);

		frame.add(pn, BorderLayout.NORTH);
		frame.add(pw, BorderLayout.WEST);
		frame.add(pe, BorderLayout.EAST);
		frame.add(ps, BorderLayout.SOUTH);

		questionPanel = new QuestionPanel(questions[count]);
		frame.add(questionPanel, BorderLayout.CENTER);
		last.setEnabled(false);

		timer.scheduleAtFixedRate(new TimerTest(), 0, delay);
		showRemainderCount();
		showMe();

	}

	private void showMe() {
		frame.setSize(800, 600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		frame.setResizable(false);

		setThisLocation();
	}

	private void showRemainderCount() {
		remainderCount = 0;
		for (int i = 0; i < answer.length; i++) {
			if (answer[i] == null)
				remainderCount++;
		}
		quesstionCountL.setText(remainderCount - 1 + "");
	}

	private void showQuestion() {
		frame.remove(questionPanel);
		questionPanel = new QuestionPanel(questions[count]);
		frame.add(questionPanel, BorderLayout.CENTER);
		frame.setVisible(true);
	}

	public void actionPerformed(ActionEvent arg0) {
		JButton b = (JButton) arg0.getSource();
		if (b.getText().equals("<<上一题")) {
			saveAnswer();
			showRemainderCount();
			next.setEnabled(true);
			if (count > 0) {
				count--;
				if (count == 0)
					last.setEnabled(false);
				isAnswered();
				showQuestion();
			}
		}
		if (b.getText().equals("下一题>>")) {
			saveAnswer();
			showRemainderCount();
			last.setEnabled(true);
			if (count < questionCount - 1) {
				count++;
				if (count == questionCount - 1) {
					next.setEnabled(false);
				}
				isAnswered();
				showQuestion();
			}
		}
		if (b.getText().equals("交卷")) {
			saveAnswer();
			scoreCount();
			if (new ScoreIntoSco().addScore(student.getId(), score, subject)) {
				JOptionPane.showMessageDialog(frame, "交卷成功,系统即将关闭!", "操作成功!",
						JOptionPane.INFORMATION_MESSAGE);
				frame.dispose();
				System.exit(0);
			}
		}
	}

	private void saveAnswer() {
		if (buttonA.isSelected()) {
			answer[questions[count].getId() - 1] = "A";
			buttonDefault.setSelected(true);
		}
		if (buttonB.isSelected()) {
			answer[questions[count].getId() - 1] = "B";
			buttonDefault.setSelected(true);
		}
		if (buttonC.isSelected()) {
			answer[questions[count].getId() - 1] = "C";
			buttonDefault.setSelected(true);
		}
		if (buttonD.isSelected()) {
			answer[questions[count].getId() - 1] = "D";
			buttonDefault.setSelected(true);
		} else
			return;
	}

	public void isAnswered() {
		if (answer[count] == null)
			return;
		else {
			if (answer[count].equals("A")) {
				buttonA.setSelected(true);
			}
			if (answer[count].equals("B")) {
				buttonB.setSelected(true);
			}
			if (answer[count].equals("C")) {
				buttonC.setSelected(true);
			}
			if (answer[count].equals("D")) {
				buttonD.setSelected(true);
			}
		}
	}

	private void scoreCount() {
		int rightCount = 0;
		for (int i = 0; i < answer.length; i++) {
			if (answer[i] == null)
				continue;
			if (answer[i].equals(questions[i].getRightAnswer()))
				rightCount++;
		}
		score = rightCount / questionCount * 100;
	}

	private void setThisLocation() {
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = frame.getSize();
		if (frameSize.height > screenSize.height) {
			frameSize.height = screenSize.height;
		}
		if (frameSize.width > screenSize.width) {
			frameSize.width = screenSize.width;
		}
		frame.setLocation((screenSize.width - frameSize.width) / 2,
				(screenSize.height - frameSize.height) / 2);
		frame.setVisible(true);
	}

	class TimerTest extends TimerTask {

		public TimerTest() {
			time = 70;// 以秒为单位
			delay = 1000;// 时间间隔,1000毫秒
		}

		@Override
		public void run() {
			changeText();
			time--;
			if (time == 60) {
				JOptionPane.showMessageDialog(frame,
						"剩余时间不足,请尽快交卷,60秒后系统将自动提交!", "警告",
						JOptionPane.WARNING_MESSAGE);
			}
			if (time == 0) {
				timer.cancel();
				submit.doClick();
			}
		}

		private void changeText() {
			shi = time / 3600;
			fen = (time - shi * 3600) / 60;
			miao = time - shi * 3600 - fen * 60;
			timeL.setText(shi + ":" + fen + ":" + miao);
		}
	}
}

⌨️ 快捷键说明

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