• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

用Java编写的随机题库

武飞扬头像
三玉人士
帮助1

1.首先建立三个类class

第一个ExamJFrame,显示页面

  1.  
    import java.awt.GridLayout;
  2.  
    import java.awt.event.ActionEvent;
  3.  
    import java.awt.event.ActionListener;
  4.  
    import java.util.ArrayList;
  5.  
    import javax.swing.*;
  6.  
     
  7.  
    public class ExamJFrame extends JFrame
  8.  
    {
  9.  
    //单选菜单项 简单、一般、困难
  10.  
    JRadioButtonMenuItem itemeasy,itemnormal,itemhard;
  11.  
     
  12.  
    JMenuBar jmb;
  13.  
    JMenu jm,jc1,jc2,jc3,jc4;
  14.  
    JMenuItem jmi1;
  15.  
    JPanel jp1;
  16.  
    JLabel jlb;//题目
  17.  
    JRadioButton jr1,jr2,jr3,jr4;//四个选项的按钮
  18.  
    JButton jb1,jb2,jb3;//三个按钮
  19.  
    JPanel jp2;
  20.  
    ButtonGroup bg;
  21.  
    ArrayList<Test> list;
  22.  
    Test test; //当前用户做的题
  23.  
    int index;//当前索引值
  24.  
     
  25.  
    ExamJFrame(){
  26.  
     
  27.  
     
  28.  
    setTitle("系统考试");
  29.  
    setBounds(400,300,500,400);
  30.  
    init();
  31.  
    setDefaultCloseOperation(EXIT_ON_CLOSE);
  32.  
    setVisible(true);
  33.  
     
  34.  
    //点击开始考试,显示面板内容
  35.  
    jmi1.addActionListener(new ActionListener() {
  36.  
    public void actionPerformed(ActionEvent e) {
  37.  
    jp1.removeAll();
  38.  
    init2();
  39.  
    list=ExamRead.read("C:\\Users\\zjl\\eclipse-workspace\\实训2\\src\\实训2\\timu.txt"); //调用ExamRead类的Read方法,获取所有题目到集合list中
  40.  
    index=0;
  41.  
    getContent(index);
  42.  
    jb1.setEnabled(false);
  43.  
    jp1.revalidate();
  44.  
    jb3.setEnabled(true);
  45.  
    }
  46.  
    });
  47.  
    }
  48.  
    //设置初始界面
  49.  
    public void init() {
  50.  
    jmb=new JMenuBar();
  51.  
    jm=new JMenu("考试");
  52.  
    jc1=new JMenu("等级");
  53.  
    jc2=new JMenu("帮助");
  54.  
    jc3=new JMenu("退出");
  55.  
    jc4=new JMenu("切换背景颜色");
  56.  
    jmi1=new JMenuItem("开始考试");
  57.  
     
  58.  
    itemeasy=new JRadioButtonMenuItem("简单");
  59.  
    itemnormal=new JRadioButtonMenuItem("一般");
  60.  
    itemhard=new JRadioButtonMenuItem("困难");
  61.  
     
  62.  
    //为单选菜单分组,实现多选一
  63.  
    ButtonGroup bg=new ButtonGroup();
  64.  
    bg.add(itemeasy);
  65.  
    bg.add(itemnormal);
  66.  
    bg.add(itemhard);
  67.  
     
  68.  
    jc1.add(itemeasy);
  69.  
    jc1.add(itemnormal);
  70.  
    jc1.add(itemhard);
  71.  
    jm.add(jmi1);
  72.  
    jmb.add(jm);
  73.  
    jmb.add(jc1);
  74.  
    jmb.add(jc2);
  75.  
    jmb.add(jc3);
  76.  
    jmb.add(jc4);
  77.  
    setJMenuBar(jmb);
  78.  
    jp1=new JPanel();
  79.  
    //设置面板的布局为网格布局,只有一列
  80.  
    jp1.setLayout(new GridLayout(0,1));
  81.  
    add(jp1);
  82.  
     
  83.  
     
  84.  
    }
  85.  
     
  86.  
    public void init2() {
  87.  
    jlb=new JLabel("1关于throws关键字的说明,正确的说法是( )。");
  88.  
    jr1=new JRadioButton("A .throws用于抛出异常");
  89.  
    jr2=new JRadioButton("B .throws用于声明抛出异常");
  90.  
    jr3=new JRadioButton("C .throws 只能声明抛出受检查异常");
  91.  
    jr4=new JRadioButton("D.throws声明抛出的异常都必须捕获处理");
  92.  
    //单选按钮要实现互相排斥,多选-,ButtonGroup按钮组
  93.  
    bg=new ButtonGroup();
  94.  
    bg.add(jr1);
  95.  
    bg.add(jr2);
  96.  
    bg.add(jr3);
  97.  
    bg.add(jr4);
  98.  
    jp2=new JPanel();
  99.  
    jb1=new JButton("上-题");
  100.  
    jb2=new JButton("下一题");
  101.  
    jb3=new JButton("提交");
  102.  
    jp2.add(jb1);
  103.  
    jp2.add(jb2);
  104.  
    jp2.add(jb3);
  105.  
    //中间的大面板jp1添加组件
  106.  
    //滚动条面板添加ilb
  107.  
    jp1.add(new JScrollPane(jlb));
  108.  
    jp1.add(jr1);
  109.  
    jp1.add(jr2);
  110.  
    jp1.add(jr3);
  111.  
    jp1.add(jr4);
  112.  
    jp1.add(jp2);
  113.  
    //上一题按钮的操作
  114.  
    jb1.addActionListener(new ActionListener(){
  115.  
    public void actionPerformed(ActionEvent e) {
  116.  
    //保存用户的选项
  117.  
    save(index);
  118.  
    // index要实现减一
  119.  
    index--;
  120.  
    //显示index题的内容到面板
  121.  
    getContent(index);
  122.  
    // 如果已经到第一题,则将上一题按钮设置为不可用
  123.  
    if (index == 0) {
  124.  
    jb1.setEnabled(false);
  125.  
    }
  126.  
    //下一题按钮可用
  127.  
    jb2.setEnabled(true);
  128.  
    }
  129.  
    });
  130.  
    //下一题按钮的操作
  131.  
    jb2.addActionListener(new ActionListener(){
  132.  
    public void actionPerformed(ActionEvent e) {
  133.  
    //保存用户的选项
  134.  
    save(index);
  135.  
    // index要实现加一
  136.  
    index ;
  137.  
    getContent(index);
  138.  
    if (index == list.size()-1){
  139.  
    jb2.setEnabled(false);
  140.  
    }
  141.  
    jb1.setEnabled(true);
  142.  
    }
  143.  
    });
  144.  
    //提交按钮的操作
  145.  
    jb3.addActionListener(new ActionListener(){
  146.  
    public void actionPerformed(ActionEvent e) {
  147.  
    //最后一道题答案的保存
  148.  
    save(index);
  149.  
    //遍历list集合的每一个元素,判断正确答案和用户答案是否相等,相等给10分
  150.  
    //存分数的变量sum
  151.  
    int sum = 0;
  152.  
    for(int i = 0;i< list.size(); i ){
  153.  
    String zqda = list.get(i).getDa();
  154.  
    String yhda = list.get(i).getUserda();
  155.  
    if (zqda.equals(yhda))
  156.  
    sum = 10;}
  157.  
    JOptionPane.showMessageDialog(null,"你的分数是" sum);
  158.  
    jb1.setEnabled(false);
  159.  
    jb2.setEnabled(false);
  160.  
    jb3.setEnabled(false);
  161.  
    }
  162.  
    });
  163.  
    }
  164.  
    //读取index题目的内容到面板106
  165.  
    public void getContent(int index) {
  166.  
    // 集合中每一个元素都是一道题,通过get方法获取第index道题,并且放到test对象中
  167.  
    test = list.get(index);
  168.  
    // 把test中对于的成员变量的值在相应组件中显示
  169.  
    jlb.setText((index 1) "、" test.getContent());
  170.  
    jr1.setText("A:" test.getXx()[0]);
  171.  
    jr2.setText("B:" test.getXx()[1]);
  172.  
    jr3.setText("C:" test.getXx()[2]);
  173.  
    jr4.setText("D:" test.getXx()[3]);
  174.  
    //用户选项选中状态设置
  175.  
    if (test.getUserda() != null)
  176.  
    switch (test.getUserda()) {
  177.  
    case "A":
  178.  
    jr1.setSelected(true);
  179.  
    break;
  180.  
    case "B":
  181.  
    jr2.setSelected(true);
  182.  
     
  183.  
    break;
  184.  
    case "C":
  185.  
    jr3.setSelected(true);
  186.  
    break;
  187.  
    case "D":
  188.  
    jr4.setSelected(true);
  189.  
    break;
  190.  
    }
  191.  
    else {
  192.  
    // 如果没有任何选择,把单选按钮恢复都没有选择的状态
  193.  
    bg.clearSelection();
  194.  
    }
  195.  
    }
  196.  
    public void save(int index) {
  197.  
    String userda;
  198.  
    //根据用户选项对userda赋值,保存用户选择的内容
  199.  
    if (jr1.isSelected()){
  200.  
    userda = "A";
  201.  
    } else if (jr2.isSelected()){
  202.  
    userda = "B";
  203.  
    }else if (jr3.isSelected()) {
  204.  
    userda = "C";
  205.  
    } else if (jr4.isSelected()) {
  206.  
    userda = "D";
  207.  
    } else {
  208.  
    userda = "E";
  209.  
    }
  210.  
    test.setUserda(userda);
  211.  
     
  212.  
    //System.out.println(test);
  213.  
    }
  214.  
     
  215.  
     
  216.  
    public static void main(String[] args)
  217.  
    {
  218.  
    // TODO Auto-generated method stub
  219.  
    new ExamJFrame();
  220.  
    }
  221.  
     
  222.  
    }

第二个类ExamRead,读取题库

  1.  
    import java.io.BufferedReader;
  2.  
    import java.io.File;
  3.  
    import java.io.FileNotFoundException;
  4.  
    import java.io.FileReader;
  5.  
    import java.io.IOException;
  6.  
    import java.util.ArrayList;
  7.  
    /*
  8.  
    * 读取考试内容到集合中
  9.  
    * 集合:ArrayList<Test> list
  10.  
    * 1.确定文件位置
  11.  
    * 2.创建读取文件的字符输入流对象
  12.  
    * 3.读取数据到集合
  13.  
    * 4.释放资源
  14.  
    */
  15.  
    public class ExamRead{
  16.  
    public static ArrayList<Test> read(String file){
  17.  
    File f=new File(file);
  18.  
    try {
  19.  
    FileReader fr = new FileReader(f);
  20.  
    BufferedReader br = new BufferedReader(fr); //字符缓冲输入流,可以实现读取一行信息
  21.  
    String str=br.readLine(); //读取一行信息放到str中
  22.  
    ArrayList<Test> list = new ArrayList<Test>(); //定义一个集合,存储每一道题
  23.  
    Test test;
  24.  
    while(str!=null && str.length()>0) {
  25.  
    test = new Test(); //初始化test对象
  26.  
    test.setContent(str);
  27.  
    //System.out.println(str); //输出读取的信息
  28.  
    String xx[] = new String[4]; //创建一个存储四个选项的数组
  29.  
    for(int i=0;i<4;i ) {
  30.  
    str=br.readLine();
  31.  
    if(str.indexOf("正确答案")!=-1) {
  32.  
    //i=0 A(65=65 i) i=1 B(66=65 i) i=2 C(67=65 i) i=3D(68)
  33.  
    test.setDa(String.valueOf((char)(i 65)));//循环变量i和选项ABCD之间是否有规律
  34.  
    //去掉正确选项中标识
  35.  
    str=str.replace("(正确答案)","");
  36.  
    }
  37.  
    xx[i]=str;//选项存入xx数组相应元素中
  38.  
    }
  39.  
    test.setXx(xx);//把四个选项的数组赋值给test对象的xx成员变里
  40.  
    //System.out.println(test);
  41.  
    list.add(test);//把一道题添加到集合list中
  42.  
    str=br.readLine();//接下来读取下一题
  43.  
    }
  44.  
    br.close();
  45.  
    fr.close();
  46.  
    return list;
  47.  
    }catch (FileNotFoundException e) {
  48.  
    e.printStackTrace();
  49.  
    }catch (IOException e) {
  50.  
    e.printStackTrace();
  51.  
    }
  52.  
    return null;
  53.  
    }
  54.  
     
  55.  
    // public static void main(String[] args){
  56.  
    // read("src\\实训2\\timu.txt");
  57.  
    // }
  58.  
     
  59.  
    }
  60.  
     
  61.  
     
  62.  
     
  63.  
     
  64.  
     

第三个类Test,对照答案

  1.  
    import java.util.Arrays;
  2.  
    /*
  3.  
    “每一道题的实体类Test
  4.  
    “每一题的存储, 一个对象对应一道题Test类
  5.  
    *问题,四个选项,正确答案,用户答案
  6.  
    · 成员变里:String : content 问题
  7.  
    * String[]:xx 四个选项的数组
  8.  
    率 String da: 正确管案
  9.  
    半 S t r i n g u s e r d a :用 户 管 案
  10.  
    */
  11.  
     
  12.  
    public class Test
  13.  
    {
  14.  
    private String content;
  15.  
    private String[] xx=new String[4];
  16.  
    private String da;
  17.  
    private String userda;
  18.  
    public String getContent(){
  19.  
    return content;
  20.  
    }
  21.  
    public void setContent(String content){
  22.  
    this.content=content;}
  23.  
     
  24.  
    public String[] getXx(){
  25.  
    return xx;}
  26.  
     
  27.  
    public void setXx(String[] xx){
  28.  
    this.xx=xx;}
  29.  
     
  30.  
    public String getDa(){
  31.  
    return da;}
  32.  
     
  33.  
    public void setDa(String da){
  34.  
    this.da=da;
  35.  
    }
  36.  
    public String getUserda(){
  37.  
    return userda;}
  38.  
     
  39.  
    public void setUserda(String userda){
  40.  
    this.userda=userda;}
  41.  
     
  42.  
    public String tostring(){
  43.  
    return "Test[content=" content ",xx=" Arrays.toString(xx) ",da=" da ",userda=" userda "]";
  44.  
    }
  45.  
     
  46.  
     
  47.  
    }

例图

学新通

学新通

注意要自己用记事本编写一个题库或者在eclipse内创建一个

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhaehgk
系列文章
更多 icon
同类精品
更多 icon
继续加载