手把手教你用Java打造一款简单考试系统(上篇)
点击上方“Java进阶学习交流”,进行关注
后台回复“Java”即可获赠Java学习资料
今
日
鸡
汤
地崩山摧壮士死,然后天梯石栈相钩连一、项目背景
随着移动互联网的发展,网络给我们带来的是无穷的信息,也带来了便利。与传统考试模式相对比,在线考试具有很多优越性、它可以将传统考试过程中的试卷组织、传送、收集、评判等各环节缩小到一至两个环节,不仅可以节约大量的时间、人力、物力与财力,还可以大幅度提高考试的客观性和公正性。利用现有的计算机硬、软件和网络资源实现无纸质考试以避免传统考试的不足。
二、项目目标
设计一款应用程序,显示驾照考试科目一的题目,进行计时,当用户提交试卷后,判断用户的做题情况,统计得分,并显示考试结果。
三、项目实施
使用eclipse软件开发,先上效果图,如下图所示。可以看到在界面上有可以有驾照考试科目一的题目,考试的时间,提交试卷,页面切换的功能。
接下来,小编带大家进行具体的实现,具体的实现步骤如下。
(一)首先实现窗体界面
public static void main(String[] args) {
// TODO Auto-generated method stub
testsystem t = new testsystem();
t.setTitle("驾照考试");
t.setSize(660,430);
t.setVisible(true);
t.setResizable(false);//设置窗口是否可以调整
t.setLocationRelativeTo(null);//null表示没有参照物,居中电脑
}
使用new关键字创建testsystem类:
setTitle表示设置界面的标题;
setSize(宽,高)表示窗体大小;
setVisible(true或false)表示窗体是否可见;
setResizable(true或false)表示窗体是否可以由用户调整大小;
setLocationRelativeTo()表示设置窗口相对于指定组件的位置。
效果图如下图:
(二)界面的设计
1.显示的界面:创建JFrame实例、JPanel面板,然后把面板添加到JFrame中;
2.构造一个按钮组对象ButtonGroup,把JRadioButton类型的对象添加到该按钮组中;
public class testsystem extends JFrame{//变量
private JPanel panel01 =new JPanel();
private JLabel problem =new JLabel();
private ButtonGroup group=new ButtonGroup();
private JRadioButton buttona=new JRadioButton();
private JRadioButton buttonb=new JRadioButton();
private JRadioButton buttonc=new JRadioButton();
private JRadioButton buttond=new JRadioButton();
private String str_problem[]=new String[]{
"1、在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?",
"2、初次申领的机动车驾驶证的有效期为多少年?",
"3、夜间道路环境对安全行车的主要影响是什么?",
"4、路中心双黄实线是何含义?",
"5、驾驶车辆行至道路急转弯处,应怎样做?"
};
//ABCD选项
private String answer_a[]=new String[]{
"A、注意新手标志",
"A、3年",
"A、能见度低、不利于观察道路交通情况",
"A、可跨越对向车道分界线",
"A、借对向车道行驶"
};
private String answer_b[]=new String[]{
"B、注意避让标志",
"B、5年",
"B、路面复杂多变",
"B、禁止跨越对向车行道分界线",
"B、急剧制动低速通过"
};
private String answer_c[]=new String[]{
"C、统一式样的实习标志",
"C、6年",
"C、驾驶人体力下降",
"C、双侧可跨越同向车道分界线",
"C、靠弯道外侧行驶"
};
private String answer_d[]=new String[]{
"D、注意车距标注",
"D、12年",
"D、驾驶人易产生冲动、幻觉",
"D、单向行驶车道分界线",
"D、充分减速并靠右侧行驶"
};
private int num=0;//当前题号
3.切换题目,交卷按钮,显示时间;
private JPanel panel02=new JPanel();
private JButton btn_index[]=new JButton[5];
private JPanel panel03=new JPanel();
private JButton btn_last=new JButton("上一题");
private JButton btn_next=new JButton("下一题");
private JButton btn_finish=new JButton("交卷");
private JLabel label01=new JLabel("剩下时间");
private JLabel label_time=new JLabel("5:00");
4.换壁纸,显示分数;
private JPanel panel04 = new JPanel();
private JLabel label_score = new JLabel();
private JLabel image = new JLabel(new ImageIcon());
private JPanel imagePanel;
private ImageIcon bg = new ImageIcon("image//bg.jpg");
private JLabel label = new JLabel(bg);
private MyListener ml = new MyListener();
5.判断选的答案是否正确;
private int right[] = new int[]{3,3,1,2,4};//正确答案
private int my_answer[]=new int[]{0,0,0,0,0};//用户答案
private int score = 0;//当前分数为0
6.创建计时器。
private Timer timer;
private int minute=4,second=60;
(三)在testsystem类的构造函数设置组件的属性
1.设置题目,ABCD字体;
problem.setFont(new Font("宋体",Font.BOLD,18));
buttona.setFont(new Font("宋体",Font.BOLD,18));
buttonb.setFont(new Font("宋体",Font.BOLD,18));
buttonc.setFont(new Font("宋体",Font.BOLD,18));
buttond.setFont(new Font("宋体",Font.BOLD,18));
problem.setText(str_problem[num]);
buttona.setText(answer_a[num]);
buttonb.setText(answer_b[num]);
buttonc.setText(answer_c[num]);
buttond.setText(answer_d[num]);
2.把JRadioButton类型的对象添加到该按钮组中实现单选功能;
group.add(buttona);
group.add(buttonb);
group.add(buttonc);
group.add(buttond);
3.GridLayout网格布局:行,列,水平间距,垂直间距;
panel01.setLayout(new GridLayout(5, 1, 0, 30));
4.添加题目和选项;
panel01.add(problem);
panel01.add(buttona);
panel01.add(buttonb);
panel01.add(buttonc);
panel01.add(buttond);
this.setLayout(new BorderLayout());
this.add(panel01,BorderLayout.NORTH);
效果图如下图:
5.五个选题的按钮;
for(int i=0;i<5;i++){
btn_index[i]=new JButton(""+(i+1));
btn_index[i].setBackground(Color.red);
panel02.add(btn_index[i]);
btn_index[i].addActionListener(ml);
}
this.add(panel02,BorderLayout.CENTER);
效果图如下图:
6.添加上一题、下一题、交卷、时间;
btn_last.setEnabled(false);//设置最后一题的不能再点击下一题
label_time.setFont(new Font("黑体",Font.BOLD,30));
label_time.setForeground(Color.RED);
panel03.add(btn_last);
panel03.add(btn_next);
panel03.add(btn_finish);
panel03.add(label01);
panel03.add(label_time);
this.add(panel03,BorderLayout.SOUTH);
效果图如下图:
7.添加显示分数
注意:调试完先不显示总分和表情,等用户交卷后再显示相应总分和表情。
label_score.setFont(new Font("黑体",Font.PLAIN,30));
label_score.setForeground(Color.BLUE);
panel04.add(label_score);
panel04.add(image);
this.add(panel04,BorderLayout.EAST);
效果图如下图:
小编写的界面设计先到这里,接下实现功能的请看java简单考试系统(下篇)!
四、总结
1.本文主要介绍了JLabel、JButton、JPanel、ButtonGroup、JRadioButton单选框组件的基本使用,完成界面的窗口、题目和选项、显示进度、显示按钮和时间、显示总分和表情。
2.这些代码比较简单,也是一个简单的小案例,希望对你有所帮助。针对功能的实现请看java简单考试系统(下篇)。
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行