用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 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 list
 * 1.确定文件位置
 * 2.创建读取文件的字符输入流对象
 * 3.读取数据到集合
 * 4.释放资源
 */
public class ExamRead{
	public static ArrayList 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 list = new ArrayList();		//定义一个集合,存储每一道题
			 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+"]";
	 }
	

}

例图

用Java编写简单的随机题库_第1张图片

用Java编写简单的随机题库_第2张图片

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

用Java编写简单的随机题库_第3张图片

你可能感兴趣的:(java,eclipse,开发语言)