用Java编写简单的随机题库

  1. 题库表示

    • questionBank 是一个 List<String>,存储了题目的字符串形式。
  2. 构造函数

    • RandomQuestionGenerator() 构造方法初始化了题库 questionBank,添加了几个示例问题。
  3. 随机问题生成

    • getRandomQuestion() 方法利用 Random 类生成一个随机数,从题库中随机选取一个问题。
  4. 示例输出

    • 在 main 方法中,创建了一个 RandomQuestionGenerator 实例 generator,并且生成了5个随机问题进行展示。

这个示例程序非常简单,适合用于理解如何通过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内创建一个

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单题库管理系统的 Java 代码示例,希望能帮到你: ``` import java.util.ArrayList; import java.util.Scanner; public class QuestionBankManagementSystem { static Scanner scanner = new Scanner(System.in); static ArrayList<Question> questionBank = new ArrayList<>(); public static void main(String[] args) { while (true) { System.out.println("1. 添加题目"); System.out.println("2. 查看题目"); System.out.println("3. 删除题目"); System.out.println("4. 退出系统"); System.out.print("请选择操作:"); int choice = scanner.nextInt(); switch (choice) { case 1: addQuestion(); break; case 2: viewQuestion(); break; case 3: deleteQuestion(); break; case 4: System.out.println("感谢使用题库管理系统!"); System.exit(0); default: System.out.println("输入错误,请重新输入!"); break; } } } public static void addQuestion() { System.out.println("请输入题目内容:"); scanner.nextLine(); String content = scanner.nextLine(); System.out.println("请输入选项A:"); String optionA = scanner.nextLine(); System.out.println("请输入选项B:"); String optionB = scanner.nextLine(); System.out.println("请输入选项C:"); String optionC = scanner.nextLine(); System.out.println("请输入选项D:"); String optionD = scanner.nextLine(); System.out.println("请输入正确答案:"); String answer = scanner.nextLine(); Question question = new Question(content, optionA, optionB, optionC, optionD, answer); questionBank.add(question); System.out.println("题目添加成功!"); } public static void viewQuestion() { if (questionBank.size() == 0) { System.out.println("题库为空!"); return; } for (int i = 0; i < questionBank.size(); i++) { System.out.println("题目" + (i + 1) + ":"); System.out.println(questionBank.get(i).getContent()); System.out.println("A." + questionBank.get(i).getOptionA()); System.out.println("B." + questionBank.get(i).getOptionB()); System.out.println("C." + questionBank.get(i).getOptionC()); System.out.println("D." + questionBank.get(i).getOptionD()); System.out.println("答案:" + questionBank.get(i).getAnswer()); } } public static void deleteQuestion() { if (questionBank.size() == 0) { System.out.println("题库为空!"); return; } System.out.print("请输入要删除的题目编号:"); int index = scanner.nextInt(); if (index < 1 || index > questionBank.size()) { System.out.println("输入错误,请重新输入!"); return; } questionBank.remove(index - 1); System.out.println("题目删除成功!"); } } class Question { private String content; private String optionA; private String optionB; private String optionC; private String optionD; private String answer; public Question(String content, String optionA, String optionB, String optionC, String optionD, String answer) { this.content = content; this.optionA = optionA; this.optionB = optionB; this.optionC = optionC; this.optionD = optionD; this.answer = answer; } public String getContent() { return content; } public String getOptionA() { return optionA; } public String getOptionB() { return optionB; } public String getOptionC() { return optionC; } public String getOptionD() { return optionD; } public String getAnswer() { return answer; } } ``` 这个题库管理系统可以实现添加题目、查看题目和删除题目的功能。你可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值