手把手教你用Java打造一款简单考试系统之二

开发 后端
设计一款应用程序,显示驾照考试科目一的题目,进行计时,当用户提交试卷后,判断用户的做题情况,统计得分,并显示考试结果。

[[380638]]

上篇文章我们介绍了简单考试系统的理论部分,这篇文章我们来一起看下其具体的实现。

一、项目背景

随着移动互联网的发展,网络给我们带来的是无穷的信息,也带来了便利。与传统考试模式相对比,在线考试具有很多优越性、它可以将传统考试过程中的试卷组织、传送、收集、评判等各环节缩小到一至两个环节,不仅可以节约大量的时间、人力、物力与财力,还可以大幅度提高考试的客观性和公正性。利用现有的计算机硬、软件和网络资源实现无纸质考试以避免传统考试的不足。

二、项目目标

设计一款应用程序,显示驾照考试科目一的题目,进行计时,当用户提交试卷后,判断用户的做题情况,统计得分,并显示考试结果。

三、项目实施

首先回顾上一节的Java简单考试系统(上篇),完成界面的窗口、题目和选项、显示进度、显示按钮和时间、显示总分和表情,效果如下图所示。

接下来,小编带大家完成剩下的功能,具体的实现步骤如下。

(一)显示背景图,完成界面设计

1.setOpaque设置控件是否透明的,true表示不透明,false表示透明;

  1. buttona.setOpaque(false); 
  2.   buttonb.setOpaque(false); 
  3.   buttonc.setOpaque(false); 
  4.   buttond.setOpaque(false); 
  5.    
  6.   panel01.setOpaque(false); 
  7.   panel02.setOpaque(false); 
  8.   panel03.setOpaque(false); 
  9.   panel04.setOpaque(false); 

2.设置边界

  1. label.setBounds(0, 0, bg.getIconWidth(), bg.getIconHeight()); 

3.把整个窗格转化为面板

  1. imagePanel=(JPanel)this.getContentPane(); 
  2.  imagePanel.setOpaque(false); 

4.把背景图添加到分层窗格的最底层

  1. this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE)); 

效果图如下图所示:

(二)给控件属性添加监听事件

  1. btn_last.addActionListener(ml); 
  2. btn_next.addActionListener(ml); 
  3. btn_finish.addActionListener(ml); 
  4. buttona.addActionListener(ml); 
  5. buttonb.addActionListener(ml); 
  6. buttonc.addActionListener(ml); 
  7. buttond.addActionListener(ml); 

(三)创建计时器,然后让计时器启动

  1. timer = new Timer(1000,new TimerListener());           
  2.   timer.start(); 

(四)完成事件处理

1.红色按钮表示未做的题,绿色表示已做的题。

  1. public class MyListener implements ActionListener{ 
  2. @Override 
  3. public void actionPerformed(ActionEvent e) { 
  4.         // TODO Auto-generated method stub 
  5.         for(int i=0;i<5;i++){ 
  6.             if(e.getSource()==btn_index[i]){//按钮1到5 
  7.                 num = i;//更新当前题号 
  8.                 showItem(num);//切换题目和选项 
  9.                 showMychoice(num);//显示已选选项 
  10.                 showButton(num);//判断显示哪些按钮 
  11.             } 
  12.         } 

(1)实现上一题功能

  1. if(e.getSource()==btn_last){ 
  2.             if(num>0){ 
  3.                 num--; 
  4.             } 
  5.             showItem(num); 
  6.             showMychoice(num); 
  7.             showButton(num); 
  8.         } 

(2)实现下一题功能

  1. if(e.getSource()==btn_next){ 
  2.             if(num<str_problem.length-1){ 
  3.                 num++; 
  4.             } 
  5.             showItem(num); 
  6.             showMychoice(num); 
  7.             showButton(num); 
  8.         } 

(3)实现单选功能

  1. if(e.getSource()==buttona){ 
  2.             my_answer[num]=1; 
  3.             btn_index[num].setBackground(Color.GREEN); 
  4.  
  5.         } 
  6.  
  7.         if(e.getSource()==buttonb){ 
  8.             my_answer[num]=2; 
  9.             btn_index[num].setBackground(Color.GREEN); 
  10.         } 
  11.  
  12.         if(e.getSource()==buttonc){ 
  13.             my_answer[num]=3; 
  14.             btn_index[num].setBackground(Color.GREEN); 
  15.         } 
  16.  
  17.         if(e.getSource()==buttond){ 
  18.             my_answer[num]=4; 
  19.             btn_index[num].setBackground(Color.GREEN); 
  20.         } 

(4)交卷,停止计时器

  1. if(e.getSource()==btn_finish){//交卷 
  2.             timer.stop();//停止 
  3.             TextFinish(); 
  4.  
  5.         } 

效果图如下图:

2.用户自己提交试卷,当分数不是满分则显示大哭的表情。

(1)设置选中的答案

  1. public void showItem(int i){ 
  2. problem.setText(str_problem[i]); 
  3. buttona.setText(answer_a[i]); 
  4. buttonb.setText(answer_b[i]); 
  5. buttonc.setText(answer_c[i]); 
  6. buttond.setText(answer_d[i]); 
  7. group.clearSelection();//清空 

(2)显示已选选项,i为当前题号

  1. public void showMychoice(int i){ 
  2. switch(my_answer[i]){ 
  3. case 1: 
  4.         buttona.setSelected(true); 
  5.         break; 
  6. case 2: 
  7.         buttonb.setSelected(true); 
  8.         break; 
  9. case 3: 
  10.         buttonc.setSelected(true); 
  11.         break;   
  12. case 4: 
  13.         buttond.setSelected(true); 
  14.         break;   
  15.   } 

(3)判断显示哪些按钮,i为当前题号

  1. public void showButton (int i){ 
  2. if(i==0){//第一题 
  3.         btn_last.setEnabled(false); 
  4.         btn_next.setEnabled(true); 
  5.  
  6. }else if(i==str_problem.length-1){//最后一题 
  7.         btn_last.setEnabled(true); 
  8.         btn_next.setEnabled(false); 
  9. }else{//其余题 
  10.         btn_last.setEnabled(true); 
  11.         btn_next.setEnabled(true); 
  12.     }        

(4)考试结束的方法

  1. public void TextFinish(){ 
  2. btn_last.setEnabled(false);//不能点击 
  3. btn_next.setEnabled(false); 
  4. btn_finish.setEnabled(false); 
  5. buttona.setEnabled(false); 
  6. buttonb.setEnabled(false); 
  7. buttonc.setEnabled(false); 
  8. buttond.setEnabled(false); 

4.1判断用户选的答案是否正确

  1. for(int i=0;i<4;i++){ 
  2.         btn_index[i].setEnabled(false); 
  3.         if(my_answer[i]==right[i]){ 
  4.             score=score+20; 
  5.         } 

4.2 设置分数,如果分数等于100分笑脸,反之哭脸

  1. label_score.setText("总成绩:"+score); 
  2. if(score==100){ 
  3.         image.setIcon(new ImageIcon("image//lauge.jpg"));            
  4. }else
  5.         image.setIcon(new ImageIcon("image//cry.jpg")); 
  6.   } 

效果图如下图:

3.考试时间到,系统自动提交试卷。当分数为满分则显示大笑的表情。

  1. public class TimerListener implements ActionListener{ 
  2.  
  3. @Override 
  4. public void actionPerformed(ActionEvent e) { 
  5.         // TODO Auto-generated method stub 
  6.         second--; 
  7.         if(second<0){ 
  8.             minute--; 
  9.             second=59; 
  10.         } 
  11.         label_time.setText(minute+":"+second); 
  12.         if(minute==0 && second==0){ 
  13.             timer.stop(); 
  14.             label_time.setText("考试结束!"); 
  15.             TextFinish(); 
  16.         } 
  17.   } 
  18.  

效果图如下图:

四、总结

1.介绍了JLabel、JButton、JPanel、ButtonGroup、JRadioButton单选框组件的基本使用,以及相应的事件处理,完成界面的设计。

2.事件处理函数的添加,难点是运用理解构造函数、内部类的创建。这些代码比较简单,也是一个简单的小案例,希望对你有所帮助!

3.如果有需要本文项目代码的小伙伴,可以在后台回复“考试系统”四个字进行获取。

本文转载自微信公众号「Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。

 

责任编辑:武晓燕 来源: Java进阶学习交流
相关推荐

2021-02-01 08:41:06

Java考试系统

2021-01-05 09:04:20

Javatxt文件

2023-05-22 10:04:24

2021-01-04 09:55:26

Java移动互联网

2017-09-14 09:09:04

php应用LibreOfficeWord转HTML

2022-02-17 10:26:17

JavaScript扫雷游戏前端

2021-01-10 08:14:01

Go语言TCP扫描器

2021-11-01 10:26:07

CanvasAPI画布技术HTML5

2021-12-30 08:56:57

Python摸鱼倒计界面Python基础

2021-01-21 06:04:55

Go语言TCP目录生成器

2024-01-07 20:00:27

2021-08-13 09:01:31

Python小游戏Python基础

2021-08-09 13:31:25

PythonExcel代码

2022-10-19 14:30:59

2021-01-13 09:03:48

Java游戏函数

2021-01-12 05:05:15

Java对碰游戏

2011-03-28 16:14:38

jQuery

2021-02-06 14:55:05

大数据pandas数据分析

2021-02-04 09:00:57

SQLDjango原生

2022-08-04 10:39:23

Jenkins集成CD
点赞
收藏

51CTO技术栈公众号