考试系统(简单版)-----大二上java课程设计

/*-------Vecrates---------*/
import java.awt.BorderLayout;

public class ExamWindow extends JFrame {
	
	private JPanel contentPane;
	final JPanel panel = new JPanel();
	QuestionWindow qw;
	
	private final Action StartExam = new SwingAction();//开始考试按钮事件
	private final Action CloseFrame = new SwingAction_1();//退出考试事件

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ExamWindow frame = new ExamWindow();

					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ExamWindow() {
		qw = new QuestionWindow();
		setTitle("标准化考试系统1.0");
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setBounds(100, 100, 500, 450);
		contentPane = new JPanel();
		contentPane.setBackground(Color.CYAN);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		
		panel.setBackground(SystemColor.activeCaption);
		panel.setBounds(0, 0, 484, 411);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JButton btnNewButton_1 = new JButton("\u9000\u51FA\u7CFB\u7EDF");
		btnNewButton_1.setAction(CloseFrame);
		btnNewButton_1.setBounds(188, 221, 100, 30);
		panel.add(btnNewButton_1);
		
		JLabel lblNewLabel = new JLabel("\u8003\u8BD5\u7CFB\u7EDF");
		lblNewLabel.setBounds(168, 36, 120, 35);
		panel.add(lblNewLabel);
		lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 30));
		lblNewLabel.setForeground(Color.BLUE);
		
		JButton btnNewButton = new JButton("\u5F00\u59CB\u8003\u8BD5");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnNewButton.setBounds(188, 157, 100, 30);
		panel.add(btnNewButton);
		btnNewButton.setAction(StartExam);
	}
	
	//“开始考试”按钮的监听事件
	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(ACTION_COMMAND_KEY, "");
			putValue(NAME, "开始考试");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			qw = new QuestionWindow();
			setVisible(false); //使ExamWindow不可见
			qw.setVisible(true); //使QuestionWindow可见
			new Thread(qw.new RemainTime()).start();//点击开始考试时同时计算剩余时间
			//读出第一个题目
			 try {
				qw.qArea.setText(new ReadQuestion(0).getStr());
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	}
	
	//“退出考试”按钮的监听事件
	private class SwingAction_1 extends AbstractAction {
		public SwingAction_1() {
			putValue(NAME, "退出系统");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
		}
	}
}
//ExamWindow
public class QuestionWindow extends JFrame {
	
	JLabel remain_time = new JLabel(); //显示剩余时间的标签
	private JPanel contentPane; 
	public JTextArea qArea; //显示问题的文本域
	//用于保存答案的数组
	String[] answer = new String[]{"A","B","C","D","A","B","C","D","A","B"}; 
	String tempAS;//保存单选框中选择的答案
	int i; //用于计分
	int  n = 1; //用于定位(读txt)文件中的第几行
	int socre = 0; //得分
	
	JLabel jl; //用于提示考试结束和给出分数的标签
	
	/**
	 * Create the frame.
	 */
	public QuestionWindow() {
		qArea = new JTextArea();
		setTitle("标准考试系统");
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setBounds(100, 100, 500, 450);
		setVisible(false);//使其不可见
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBackground(SystemColor.activeCaption);
		panel.setBounds(0, 0, 484, 411);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JButton nextQ = new JButton("\u4E0B\u4E00\u9898");
		nextQ.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		nextQ.setAction(nextq);
		nextQ.setFont(new Font("宋体", Font.BOLD, 12));
		nextQ.setBounds(397, 378, 77, 23);
		panel.add(nextQ);
		nextQ.setForeground(Color.GREEN);
		
		JLabel lblNewLabel = new JLabel("\u8003\u8BD5\u5269\u4F59\u65F6\u95F4\uFF1A");
		lblNewLabel.setBounds(0, 0, 114, 23);
		panel.add(lblNewLabel);
		lblNewLabel.setForeground(Color.RED);
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		
		JButton submitAS = new JButton("\u63D0\u4EA4\u6B64\u9898");
		submitAS.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		submitAS.setAction(submitItem);
		submitAS.setFont(new Font("宋体", Font.BOLD, 12));
		submitAS.setBounds(296, 378, 91, 23);
		panel.add(submitAS);
		submitAS.setForeground(Color.GREEN);
		
		//显示倒计时的标签
		remain_time.setBounds(99, 0, 106, 23);
		remain_time.setVisible(true);
		panel.add(remain_time);
		
		//ABCD单选按钮组件
		ButtonGroup group = new ButtonGroup();
		JPanel panel_1 = new JPanel();
		panel_1.setBackground(SystemColor.activeCaption);
		panel_1.setBounds(26, 370, 192, 31);
		panel.add(panel_1);
		panel_1.setLayout(null);
		JRadioButton a = new JRadioButton();
		a.setAction(ASA);
		a.setFont(new Font("微软雅黑", Font.PLAIN, 12));
		a.setBounds(6, 7, 43, 21);
		a.setText("A");
		a.setForeground(Color.BLACK);
		panel_1.add(a);
		a.setBackground(SystemColor.activeCaption);
		a.setVerticalAlignment(SwingConstants.BOTTOM);
		group.add(a);
		JRadioButton b = new JRadioButton();
		b.setAction(ASB);
		b.setForeground(Color.BLACK);
		b.setBackground(SystemColor.activeCaption);
		b.setFont(new Font("微软雅黑", Font.PLAIN, 12));
		b.setText("B");
		b.setBounds(51, 7, 50, 21);
		panel_1.add(b);
		group.add(b);
		JRadioButton c = new JRadioButton();
		c.setForeground(Color.BLACK);
		c.setFont(new Font("微软雅黑", Font.PLAIN, 12));
		c.setBackground(SystemColor.activeCaption);
		c.setText("C");
		c.setBounds(103, 7, 44, 21);
		panel_1.add(c);
		group.add(c);
		JRadioButton d = new JRadioButton();
		d.setAction(ASD);
		d.setForeground(Color.BLACK);
		d.setFont(new Font("微软雅黑", Font.PLAIN, 12));
		d.setBackground(SystemColor.activeCaption);
		d.setBounds(149, 7, 43, 21);
		panel_1.add(d);
		d.setText("D");
		group.add(d);
		qArea.setLineWrap(true);
		qArea.setEnabled(false);
		qArea.setEditable(false);
		qArea.setForeground(Color.GREEN);
		qArea.setFont(new Font("微软雅黑 Light", Font.BOLD, 20));
		
		
		
		//显示题目的文本域
		qArea.setBounds(10, 22, 464, 299);
		panel.add(qArea);
		
		JButton submitTest = new JButton("\u63D0\u4EA4\u8BD5\u5377");
		submitTest.setAction(EndTest);
		submitTest.setFont(new Font("宋体", Font.BOLD, 14));
		submitTest.setForeground(Color.GREEN);
		submitTest.setBounds(360, 323, 114, 31);
		panel.add(submitTest);
	}
	
	//选择A时
	private final Action ASA = new SwingAction();
	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(NAME, "SwingAction");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			tempAS = "A";
		}
	}
	//选择B时
	private final Action ASB = new SwingAction_1();
	private class SwingAction_1 extends AbstractAction {
		public SwingAction_1() {
			putValue(NAME, "SwingAction_1");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			tempAS = "B";
		}
	}
	//选择C时
	private final Action ASC = new SwingAction_2();
	private class SwingAction_2 extends AbstractAction {
		public SwingAction_2() {
			putValue(NAME, "SwingAction_2");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			tempAS = "C";
		}
	}
	//选择D时
	private final Action ASD = new SwingAction_3();
	private class SwingAction_3 extends AbstractAction {
		public SwingAction_3() {
			putValue(NAME, "SwingAction_3");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			tempAS = "D";
		}
	}
	
	//"提交此题"按钮监听事件
	private final Action submitItem = new SwingAction_4();
	private class SwingAction_4 extends AbstractAction {
		public SwingAction_4() {
			putValue(NAME, "提交此题");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			if(answer[i++] == tempAS)
				socre += 10;
		}
	}
	
	//结束考试按钮的监听事件
	private final Action EndTest = new SwingAction_5();
	private class SwingAction_5 extends AbstractAction {
		public SwingAction_5() {
			putValue(NAME, "结束考试");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			jl = new JLabel("考试结束,你的得分是:" + socre+"分");
			new Socre(jl).setVisible(true);
		}
	}
	
	//"下一题"按钮监听事件
	private final Action nextq = new SwingAction_6();
	private class SwingAction_6 extends AbstractAction {
		public SwingAction_6() {	
			putValue(NAME, "下一题");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) { //next question
			try {
				//题库中有10个题目
				if(n < 10){ 
				    qArea.setText(new ReadQuestion(n++).getStr());//读题目并显示到面板上
				    setVisible(true);
				}
				else{
					jl = new JLabel("你已完成答题,得分是:" + socre+"分");
					new Socre(jl).setVisible(true);
				}
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	}
	
	
	
	//实现倒计时功能的子类
    private int time = 300;
	class RemainTime implements Runnable {
	
		public void run() {
			while(time >= 0){
				//当时间为0时结束考试
				if(time == 0){
					jl = new JLabel("考试时间到,你的得分是:" + socre+"分");
				    new Socre(jl).setVisible(true);
				    try {
						Thread.sleep(10000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				    System.exit(0);
				}
				else{
					time--;
					long minu = time / 60;
					long sec = time % 60;
				    remain_time.setText(minu + "分" + sec + "秒");
					try{
					    Thread.sleep(1000); 
					}catch (Exception e){
					    e.printStackTrace();
					}
				}
			 }
		 }
	}

}



import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReadQuestion {
	private String str;
	
	public String getStr() {
		return str;
	}
	
	public void setStr(String str) {
		this.str = str;
	}
	
	 public ReadQuestion(int n) throws IOException{
		File txt = new File("D:/代码/java/java课程设计/src/考试系统题库.txt");
		FileReader fr = new FileReader(txt);
		BufferedReader inBuf = new BufferedReader(fr);
		String strline = null;
		for(int i = 0;i <= n; i ++)
		    strline = new String(inBuf.readLine()); //读取一行字符
		String[] newstr = strline.split(",");
		this.setStr(newstr[0]+"\n"+newstr[1]+"\n"+newstr[2]+"\n"+newstr[3]+"\n"+newstr[4]);
		inBuf.close();
	 }
}


import java.awt.BorderLayout;

public class Socre extends JDialog {
	
	private final Action ensure_action = new SwingAction();
	
	public Socre(JLabel JL) {
		this.setModal(true); //强制性窗口
		getContentPane().setLayout(null);
		setBounds(150,150, 384, 300);
		JL.setFont(new Font("宋体", Font.BOLD, 14));
		JL.setForeground(Color.RED);
		JL.setHorizontalAlignment(SwingConstants.CENTER);
		JL.setBounds(38, 27, 278, 84);
		getContentPane().add(JL);
		setUndecorated(true);
		
		//确定按钮
		JButton ensure = new JButton("\u786E\u5B9A");
		ensure.setAction(ensure_action);
		ensure.setBackground(Color.RED);
		ensure.setBounds(126, 213, 99, 38);
		getContentPane().add(ensure);
	}
	
	//"确定按钮"监听
	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(NAME, "确定");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			System.exit(0);
		}
	}
}

考试系统题库形式为:

1、工笔是哪种绘画形式的技法,A.水彩画,B.油画,C.水粉画,D.国画,
2、“冰激凌”是从哪国传进的外来语,A.英国,B.法国,C.美国,D.俄国,
3、“席梦思”三个字源于什么,A.人名, B.地名,C.00  ,D.00, 
4、“八仙过海”中的八仙除铁拐李、张果老、吕洞宾、曹国舅外还有,A.韩非子、蓝采和、何翠姑、汉钟离,B.蓝采和、何仙姑、韩非子、汉钟离 ,C.韩湘子、蓝采和、何仙姑、红孩儿 ,D.韩湘子、蓝采和、何仙姑、汉钟离,
5、“无冕之王”的由来与下列哪一个有关,A.英国《泰晤士报》 ,B.法国《费加罗报》 ,C.美国《太阳报》 ,D.德国《明镜》周刊,
6、博士作为官名最早出现在:,A.秦 ,B.汉 ,C.唐,D.00,
7、“谬种流传”最早是宋朝人批评当时的,A.官场黑暗, B.科举制度 ,C.社会风气 ,D.诗词风格,
8、《在那遥远的地方》是哪里的民歌,A.四川民歌 ,B.江苏民歌 ,C.蒙古民歌 ,D.云南民歌, 
9、人体含水量百分比最高的器官是,A.肝 ,B.肾 ,C.眼球,D.0111,
10、人体最大的解毒器官是,A.胃 ,B.肾脏 ,C.肝脏 ,D.脾,




//此为大二java课程设计,由于技术上的不足和时间上的仓促,设计较为简单。




你可能感兴趣的:(java,课程设计)