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

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

创新互联建站长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为灵武企业提供专业的网站建设、成都网站制作,灵武网站改版等技术服务。拥有十年丰富建站经验和众多成功案例,为您定制开发。

一、项目背景

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

二、项目目标

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

三、项目实施

首先回顾上一节的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
  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.         if(e.getSource()==buttonb){
  6.             my_answer[num]=2;
  7.             btn_index[num].setBackground(Color.GREEN);
  8.         }
  9.         if(e.getSource()==buttonc){
  10.             my_answer[num]=3;
  11.             btn_index[num].setBackground(Color.GREEN);
  12.         }
  13.         if(e.getSource()==buttond){
  14.             my_answer[num]=4;
  15.             btn_index[num].setBackground(Color.GREEN);
  16.         }

(4)交卷,停止计时器

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

效果图如下图:

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();//清空
  8. }

(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.   }
  16. }

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

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

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.         }
  6. }

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.   }
  7. }

效果图如下图:

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

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

效果图如下图:

四、总结

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

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

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

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

本文名称:手把手教你用Java打造一款简单考试系统之二
文章来源:http://www.shufengxianlan.com/qtweb/news23/542473.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联