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

  发布时间:2025-11-05 14:01:26   作者:玩站小弟   我要评论
上篇文章我们介绍了简单考试系统的理论部分,这篇文章我们来一起看下其具体的实现。一、项目背景随着移动互联网的发展,网络给我们带来的是无穷的信息,也带来了便利。与传统考试模式相对比,在线考试具有很多优越性 。

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

一、简单项目背景

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

二、项目目标

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

三、项目实施

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

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

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

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

buttona.setOpaque(false);   buttonb.setOpaque(false);   buttonc.setOpaque(false);   buttond.setOpaque(false);   panel01.setOpaque(false);   panel02.setOpaque(false);   panel03.setOpaque(false);   panel04.setOpaque(false); 

2.设置边界

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

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

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

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

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

效果图如下图所示:

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

btn_last.addActionListener(ml); btn_next.addActionListener(ml); btn_finish.addActionListener(ml); buttona.addActionListener(ml); buttonb.addActionListener(ml); buttonc.addActionListener(ml); buttond.addActionListener(ml); 

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

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

(四)完成事件处理

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

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

(1)实现上一题功能

if(e.getSource()==btn_last){             if(num>0){                 num--;             }             showItem(num);             showMychoice(num);             showButton(num);         } 

(2)实现下一题功能

if(e.getSource()==btn_next){             if(num<str_problem.length-1){                 num++;             }             showItem(num);             showMychoice(num);             showButton(num);         } 

(3)实现单选功能

if(e.getSource()==buttona){             my_answer[num]=1;             btn_index[num].setBackground(Color.GREEN);         }         if(e.getSource()==buttonb){             my_answer[num]=2;             btn_index[num].setBackground(Color.GREEN);         }         if(e.getSource()==buttonc){             my_answer[num]=3;             btn_index[num].setBackground(Color.GREEN);         }         if(e.getSource()==buttond){             my_answer[num]=4;             btn_index[num].setBackground(Color.GREEN);         } 

(4)交卷,停止计时器

if(e.getSource()==btn_finish){//交卷             timer.stop();//停止             TextFinish();         } } } 

效果图如下图:

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

(1)设置选中的答案

public void showItem(int i){ problem.setText(str_problem[i]); buttona.setText(answer_a[i]); buttonb.setText(answer_b[i]); buttonc.setText(answer_c[i]); buttond.setText(answer_d[i]); group.clearSelection();//清空 } 

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

public void showMychoice(int i){ switch(my_answer[i]){ case 1:         buttona.setSelected(true);         break; case 2:         buttonb.setSelected(true);         break; case 3:         buttonc.setSelected(true);         break;   case 4:         buttond.setSelected(true);         break;     } } 

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

public void showButton (int i){ if(i==0){//第一题         btn_last.setEnabled(false);         btn_next.setEnabled(true); }else if(i==str_problem.length-1){//最后一题         btn_last.setEnabled(true);         btn_next.setEnabled(false); }else{//其余题         btn_last.setEnabled(true);         btn_next.setEnabled(true);     }        } 

(4)考试结束的方法

public void TextFinish(){ btn_last.setEnabled(false);//不能点击 btn_next.setEnabled(false); btn_finish.setEnabled(false); buttona.setEnabled(false); buttonb.setEnabled(false); buttonc.setEnabled(false); buttond.setEnabled(false); } 

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

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

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

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

效果图如下图:

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

public class TimerListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) {         // TODO Auto-generated method stub         second--;         if(second<0){             minute--;             second=59;         }         label_time.setText(minute+":"+second);         if(minute==0 && second==0){             timer.stop();             label_time.setText("考试结束!");             TextFinish();         }   } } 

效果图如下图:

四、总结

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

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

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

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

  • Tag:

相关文章

  • 台电耳机R98(带你感受音乐的细腻与动感)

    摘要:作为音质一流的台电耳机系列中的新品,台电耳机R98凭借其出色的音质表现和舒适的佩戴体验成为了许多音乐爱好者的首选。无论是追求细腻的乐曲细节还是强烈的音乐节奏,台电耳机R98都能满足...
    2025-11-05
  • 一个 Golang 项目的测试实践全记录

    桔妹导读:最近有一个项目,链路涉及了4个服务。最核心的是一个配时服务。要如何对这个项目进行测试,保证输出质量,是最近思考和实践的重点。这篇就说下最近这个实践的过程总结。▍测试金字塔按照Mike Coh
    2025-11-05
  • 如何允许用户在 Linux 上访问 MySQL 数据库?

    在Linux 系统上安装 MySQL并创建新数据库后,您需要设置一个新用户来访问该数据库,授予其读取和/或写入数据的权限。不建议使用 root 帐户,而是根据需要创建一个新帐户并授予权限,在本教程中,
    2025-11-05
  • 购买域名哪个平台比较好?

    域名购买去哪里买呢?现在域名市场上有很多二手域名购买平台与注册域名的服务,百度一下域名购买一大堆,在新手眼里很迷茫怕买个域名也入坑,今天就说说域名购买那点事。在正式谈域名购买的时候,黑棋小编先讲下自己
    2025-11-05
  • BIOS设置使用教程(深入了解BIOS设置,轻松优化您的电脑性能)

    摘要:BIOSBasicInput/OutputSystem)是计算机系统中一个重要的组成部分,它负责启动操作系统和管理硬件设备。通过正确的BIOS设置,您可以优化计算机性能、解决硬件...
    2025-11-05
  • Python 中可观测性的七个关键部分

    你写的应用会执行很多代码,而且是以一种基本上看不到的方式执行。所以你是怎么知道:代码是否在运行?是不是在正常工作?谁在使用它,如何使用?可观测性是一种能力,可以通过查看数据来告诉你,你的代码在做什么。
    2025-11-05

最新评论