用Java编写的随机题库
1.首先建立三个类class
第一个ExamJFrame,显示页面
-
import java.awt.GridLayout;
-
import java.awt.event.ActionEvent;
-
import java.awt.event.ActionListener;
-
import java.util.ArrayList;
-
import javax.swing.*;
-
-
public class ExamJFrame extends JFrame
-
{
-
//单选菜单项 简单、一般、困难
-
JRadioButtonMenuItem itemeasy,itemnormal,itemhard;
-
-
JMenuBar jmb;
-
JMenu jm,jc1,jc2,jc3,jc4;
-
JMenuItem jmi1;
-
JPanel jp1;
-
JLabel jlb;//题目
-
JRadioButton jr1,jr2,jr3,jr4;//四个选项的按钮
-
JButton jb1,jb2,jb3;//三个按钮
-
JPanel jp2;
-
ButtonGroup bg;
-
ArrayList<Test> list;
-
Test test; //当前用户做的题
-
int index;//当前索引值
-
-
ExamJFrame(){
-
-
-
setTitle("系统考试");
-
setBounds(400,300,500,400);
-
init();
-
setDefaultCloseOperation(EXIT_ON_CLOSE);
-
setVisible(true);
-
-
//点击开始考试,显示面板内容
-
jmi1.addActionListener(new ActionListener() {
-
public void actionPerformed(ActionEvent e) {
-
jp1.removeAll();
-
init2();
-
list=ExamRead.read("C:\\Users\\zjl\\eclipse-workspace\\实训2\\src\\实训2\\timu.txt"); //调用ExamRead类的Read方法,获取所有题目到集合list中
-
index=0;
-
getContent(index);
-
jb1.setEnabled(false);
-
jp1.revalidate();
-
jb3.setEnabled(true);
-
}
-
});
-
}
-
//设置初始界面
-
public void init() {
-
jmb=new JMenuBar();
-
jm=new JMenu("考试");
-
jc1=new JMenu("等级");
-
jc2=new JMenu("帮助");
-
jc3=new JMenu("退出");
-
jc4=new JMenu("切换背景颜色");
-
jmi1=new JMenuItem("开始考试");
-
-
itemeasy=new JRadioButtonMenuItem("简单");
-
itemnormal=new JRadioButtonMenuItem("一般");
-
itemhard=new JRadioButtonMenuItem("困难");
-
-
//为单选菜单分组,实现多选一
-
ButtonGroup bg=new ButtonGroup();
-
bg.add(itemeasy);
-
bg.add(itemnormal);
-
bg.add(itemhard);
-
-
jc1.add(itemeasy);
-
jc1.add(itemnormal);
-
jc1.add(itemhard);
-
jm.add(jmi1);
-
jmb.add(jm);
-
jmb.add(jc1);
-
jmb.add(jc2);
-
jmb.add(jc3);
-
jmb.add(jc4);
-
setJMenuBar(jmb);
-
jp1=new JPanel();
-
//设置面板的布局为网格布局,只有一列
-
jp1.setLayout(new GridLayout(0,1));
-
add(jp1);
-
-
-
}
-
-
public void init2() {
-
jlb=new JLabel("1关于throws关键字的说明,正确的说法是( )。");
-
jr1=new JRadioButton("A .throws用于抛出异常");
-
jr2=new JRadioButton("B .throws用于声明抛出异常");
-
jr3=new JRadioButton("C .throws 只能声明抛出受检查异常");
-
jr4=new JRadioButton("D.throws声明抛出的异常都必须捕获处理");
-
//单选按钮要实现互相排斥,多选-,ButtonGroup按钮组
-
bg=new ButtonGroup();
-
bg.add(jr1);
-
bg.add(jr2);
-
bg.add(jr3);
-
bg.add(jr4);
-
jp2=new JPanel();
-
jb1=new JButton("上-题");
-
jb2=new JButton("下一题");
-
jb3=new JButton("提交");
-
jp2.add(jb1);
-
jp2.add(jb2);
-
jp2.add(jb3);
-
//中间的大面板jp1添加组件
-
//滚动条面板添加ilb
-
jp1.add(new JScrollPane(jlb));
-
jp1.add(jr1);
-
jp1.add(jr2);
-
jp1.add(jr3);
-
jp1.add(jr4);
-
jp1.add(jp2);
-
//上一题按钮的操作
-
jb1.addActionListener(new ActionListener(){
-
public void actionPerformed(ActionEvent e) {
-
//保存用户的选项
-
save(index);
-
// index要实现减一
-
index--;
-
//显示index题的内容到面板
-
getContent(index);
-
// 如果已经到第一题,则将上一题按钮设置为不可用
-
if (index == 0) {
-
jb1.setEnabled(false);
-
}
-
//下一题按钮可用
-
jb2.setEnabled(true);
-
}
-
});
-
//下一题按钮的操作
-
jb2.addActionListener(new ActionListener(){
-
public void actionPerformed(ActionEvent e) {
-
//保存用户的选项
-
save(index);
-
// index要实现加一
-
index ;
-
getContent(index);
-
if (index == list.size()-1){
-
jb2.setEnabled(false);
-
}
-
jb1.setEnabled(true);
-
}
-
});
-
//提交按钮的操作
-
jb3.addActionListener(new ActionListener(){
-
public void actionPerformed(ActionEvent e) {
-
//最后一道题答案的保存
-
save(index);
-
//遍历list集合的每一个元素,判断正确答案和用户答案是否相等,相等给10分
-
//存分数的变量sum
-
int sum = 0;
-
for(int i = 0;i< list.size(); i ){
-
String zqda = list.get(i).getDa();
-
String yhda = list.get(i).getUserda();
-
if (zqda.equals(yhda))
-
sum = 10;}
-
JOptionPane.showMessageDialog(null,"你的分数是" sum);
-
jb1.setEnabled(false);
-
jb2.setEnabled(false);
-
jb3.setEnabled(false);
-
}
-
});
-
}
-
//读取index题目的内容到面板106
-
public void getContent(int index) {
-
// 集合中每一个元素都是一道题,通过get方法获取第index道题,并且放到test对象中
-
test = list.get(index);
-
// 把test中对于的成员变量的值在相应组件中显示
-
jlb.setText((index 1) "、" test.getContent());
-
jr1.setText("A:" test.getXx()[0]);
-
jr2.setText("B:" test.getXx()[1]);
-
jr3.setText("C:" test.getXx()[2]);
-
jr4.setText("D:" test.getXx()[3]);
-
//用户选项选中状态设置
-
if (test.getUserda() != null)
-
switch (test.getUserda()) {
-
case "A":
-
jr1.setSelected(true);
-
break;
-
case "B":
-
jr2.setSelected(true);
-
-
break;
-
case "C":
-
jr3.setSelected(true);
-
break;
-
case "D":
-
jr4.setSelected(true);
-
break;
-
}
-
else {
-
// 如果没有任何选择,把单选按钮恢复都没有选择的状态
-
bg.clearSelection();
-
}
-
}
-
public void save(int index) {
-
String userda;
-
//根据用户选项对userda赋值,保存用户选择的内容
-
if (jr1.isSelected()){
-
userda = "A";
-
} else if (jr2.isSelected()){
-
userda = "B";
-
}else if (jr3.isSelected()) {
-
userda = "C";
-
} else if (jr4.isSelected()) {
-
userda = "D";
-
} else {
-
userda = "E";
-
}
-
test.setUserda(userda);
-
-
//System.out.println(test);
-
}
-
-
-
public static void main(String[] args)
-
{
-
// TODO Auto-generated method stub
-
new ExamJFrame();
-
}
-
-
}
第二个类ExamRead,读取题库
-
import java.io.BufferedReader;
-
import java.io.File;
-
import java.io.FileNotFoundException;
-
import java.io.FileReader;
-
import java.io.IOException;
-
import java.util.ArrayList;
-
/*
-
* 读取考试内容到集合中
-
* 集合:ArrayList<Test> list
-
* 1.确定文件位置
-
* 2.创建读取文件的字符输入流对象
-
* 3.读取数据到集合
-
* 4.释放资源
-
*/
-
public class ExamRead{
-
public static ArrayList<Test> read(String file){
-
File f=new File(file);
-
try {
-
FileReader fr = new FileReader(f);
-
BufferedReader br = new BufferedReader(fr); //字符缓冲输入流,可以实现读取一行信息
-
String str=br.readLine(); //读取一行信息放到str中
-
ArrayList<Test> list = new ArrayList<Test>(); //定义一个集合,存储每一道题
-
Test test;
-
while(str!=null && str.length()>0) {
-
test = new Test(); //初始化test对象
-
test.setContent(str);
-
//System.out.println(str); //输出读取的信息
-
String xx[] = new String[4]; //创建一个存储四个选项的数组
-
for(int i=0;i<4;i ) {
-
str=br.readLine();
-
if(str.indexOf("正确答案")!=-1) {
-
//i=0 A(65=65 i) i=1 B(66=65 i) i=2 C(67=65 i) i=3D(68)
-
test.setDa(String.valueOf((char)(i 65)));//循环变量i和选项ABCD之间是否有规律
-
//去掉正确选项中标识
-
str=str.replace("(正确答案)","");
-
}
-
xx[i]=str;//选项存入xx数组相应元素中
-
}
-
test.setXx(xx);//把四个选项的数组赋值给test对象的xx成员变里
-
//System.out.println(test);
-
list.add(test);//把一道题添加到集合list中
-
str=br.readLine();//接下来读取下一题
-
}
-
br.close();
-
fr.close();
-
return list;
-
}catch (FileNotFoundException e) {
-
e.printStackTrace();
-
}catch (IOException e) {
-
e.printStackTrace();
-
}
-
return null;
-
}
-
-
// public static void main(String[] args){
-
// read("src\\实训2\\timu.txt");
-
// }
-
-
}
-
-
-
-
-
第三个类Test,对照答案
-
import java.util.Arrays;
-
/*
-
“每一道题的实体类Test
-
“每一题的存储, 一个对象对应一道题Test类
-
*问题,四个选项,正确答案,用户答案
-
· 成员变里:String : content 问题
-
* String[]:xx 四个选项的数组
-
率 String da: 正确管案
-
半 S t r i n g u s e r d a :用 户 管 案
-
*/
-
-
public class Test
-
{
-
private String content;
-
private String[] xx=new String[4];
-
private String da;
-
private String userda;
-
public String getContent(){
-
return content;
-
}
-
public void setContent(String content){
-
this.content=content;}
-
-
public String[] getXx(){
-
return xx;}
-
-
public void setXx(String[] xx){
-
this.xx=xx;}
-
-
public String getDa(){
-
return da;}
-
-
public void setDa(String da){
-
this.da=da;
-
}
-
public String getUserda(){
-
return userda;}
-
-
public void setUserda(String userda){
-
this.userda=userda;}
-
-
public String tostring(){
-
return "Test[content=" content ",xx=" Arrays.toString(xx) ",da=" da ",userda=" userda "]";
-
}
-
-
-
}
例图
注意要自己用记事本编写一个题库或者在eclipse内创建一个
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhaehgk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13