手把手教你用Java打造一款简单考试系统(下篇)

点击上方“Java进阶学习交流”,进行关注

后台回复“Java”即可获赠Java学习资料

上有六龙回日之高标,下有冲波逆折之回川。 

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

一、项目背景

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

二、项目目标

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

三、项目实施

首先回顾上一节的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.用户自己提交试卷,当分数不是满分则显示大哭的表情。

(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.如果有需要本文项目代码的小伙伴,可以在后台回复“考试系统”四个字进行获取。

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

系统主要实现了模拟在线考试功能,其使用方法如下 软件安装 1、 安装Oracle9.0.2 (1) 创建数据库: 操作方法:根据提示安装,一般的步骤点击下一步即可,在创建数据库时输入数据库名称,例如dbhouse; (2) 创建用户: 操作方法:安装结束后进入OEM,数据用户名system,使用安装时设定的密码登陆数据库,在安全设置节点建立用户,例如quiz,设定密码quiz,为本数据库的使用密码,在右边的选项页面中选择角色为resourse,connect,dba; (3) 导入数据: 操作方法:倒入数据库quiz\ databases\quiz.dmp:在cmd中数据imp,输入刚才数据库的登录身份,quiz/quiz@dbhouse,在忽略创建错误选项时输入yes,倒入成功; 2、 安装JDK1.4.0 (1) 安装软件: 操作方法:一路点击下一步直至安装结束; (2) 设置环境变量: 操作方法:在我的电脑属性中设置环境变量为:JAVA_HOME=C:\j2sdk1.4.0; 3、 安装Tomcat4.1.24 (1) 安装软件: 操作方法:一路点击下一步直至安装结束,在选择安装路径时推荐安装在根目录,例如C:\Tomcat 4.1; (2) 设置环境变量: 操作方法:在我的电脑属性中设置环境变量为:TOMCAT_HOME= C:\Tomcat 4.1; (3) 建立站点: 操作方法:修改C:\Tomcat 4.1\conf\server.xml,在</Host>上一行添加如下代码来建立站点: <Context path=”/quiz” docBase=”D:\ quiz\web” reloadable=”false” debug=”0”/> 此步骤应该对应程序安装的目录; 4、 部署源程序 (1) 解压源程序 操作方法:解压缩拷贝目录quiz到安装目录,例如D:\,解压后的目录应该满足D:\ quiz\ WEB-INF; 5、 访问系统 启动Oracle、Tomcat,输入地址http://localhost:[port]/quiz/即可访问,输入用户名admin,密码admin。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值