随机抽取试题(java+sql 2005)

import java.awt.BorderLayout;
import java.util.*;
import java.awt.event.*;
import java.awt.Container;
import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Test extends JFrame {
	public static final String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	public static final String DBURL="jdbc:sqlserver://localhost:1433;DatabaseName=SystemTest;SelectMethod=Cursor";
	public static final String DBUSER="sa";
	public static final String DBPASSWORD="123";
	public static Connection conn=null;
	public static Statement stmt=null;
	public static Statement stmt1=null;
	public static Statement stmt2=null;
	public static ResultSet rs=null;	
	public static ResultSet rs1=null;

	public static void main(String args[]) {
		try{
     //数据库的连接。
	  		Class.forName(DBDRIVER);
	  		conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
	  		stmt= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
	  		stmt1= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
	  		stmt2= conn.createStatement(ResultSet. TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

		}catch(Exception e)
		{
			e.printStackTrace();
		}
       Test t1=new Test();
       t1.sel_save();
       
       
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Test frame = new Test();
					frame.setVisible(true);
					frame.addWindowListener(new WindowAdapter(){
						public void windowClosing(WindowEvent e)
						{
							System.exit(0);
							/*try{
								   sql_1="delete from stu_selAns";
									stmt=conn.createStatement();
								    rs=stmt.executeQuery(sql_1);
							}
						  catch(Exception event)
						  {
						  }*/
						}
					});
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame
	 */
	public Test() {
		super();
		setBounds(100, 100, 500, 386);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("测试");
        
		final Container container = new Container();
		container.setLayout(null);
		getContentPane().add(container, BorderLayout.CENTER);

	    label = new JLabel();
		label.setBounds(22, 68, 462, 57);
		container.add(label);

		

		final JButton nextButton = new JButton();
		nextButton.setText("next");
		nextButton.setBounds(60, 270, 106, 28);
		container.add(nextButton);
	    nextButton.addActionListener(new ActionListener(){
	    	public void actionPerformed(ActionEvent event)
	    	{    
	    		  int current=Integer.parseInt(label_3.getText()); 
	    		  current+=1;
   	    	      if(current>0 &¤t<=10)
		              {
   	    	          label_3.setText(""+current);
    	    	      label_3.setVisible(true);  
   	    	    	  sel_show(current);
		              }
		    	  
	    		  label_2.setVisible(false);
	    		  label_1.setVisible(false);
	    	}
	    });

	    button = new JButton();
		button.setText("显示答案");
		button.setBounds(224, 270, 106, 28);
		container.add(button);
	    button.addActionListener(new ActionListener(){
	    	public void actionPerformed(ActionEvent event)
	    	{
	    		label_1.setVisible(true);
	    		label_2.setVisible(true);
	    		int current=Integer.parseInt(label_3.getText()); 
	    		current+=1;
	    		try{
	    			sql="select sel_Ans from stu_selAns where sel_Id="+current;
	    			stmt=conn.createStatement();
	    			rs=stmt.executeQuery(sql);
	    			while(rs.next())
	    			{
	    				label_2.setText(rs.getString(1));
	    			}
	    		}catch(Exception e)
	    		{
	    			
	    		}
	    	}
	    });

	    label_1 = new JLabel();
		label_1.setText("正确答案是:");
		label_1.setBounds(22, 199, 78, 28);
		container.add(label_1);
		label_1.setVisible(false);

	    label_2 = new JLabel();
		label_2.setBounds(106, 199, 323, 28);
		container.add(label_2);
        label_2.setVisible(false);

		button_1 = new JButton();
		button_1.setText("退出");
		button_1.setBounds(349, 270, 106, 28);
		container.add(button_1);
		button_1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event)
			{   
				dispose();
				/*try{
					 sql_1="delete from stu_selAns";
					 stmt=conn.createStatement();
					 rs=stmt.executeQuery(sql_1);
				 }catch(Exception e)
				 {
					 e.printStackTrace();
				 }*/
			}
		});

        label_3 = new JLabel();
		label_3.setBounds(363, 175, 66, 18);
		container.add(label_3);
		label_3.setVisible(false);
		label_3.setText("0");
	}
	
	//此方法用于获取选择题的数目。
    public int sel_count()
    { 
    	int n = 0;
    	try{
        	Connection conn=null;
    		Statement stmt=null;
    		ResultSet rs=null;
    		Class.forName(DBDRIVER);
    		conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
    		sql_1="select COUNT(selId) from sel_test where selId=1";
    		stmt=conn.createStatement();
    		rs=stmt.executeQuery(sql_1);
    		
    		if(rs.next())
    		  {
    			 n=rs.getInt(1);
    		  }
    	}
    	 catch(Exception e )
            {
              	e.printStackTrace();
             }
    	 return n;
    }
 
    //此方法用于产生十道选择题的随机数。
   public int[]  Random()
	{       
	    Test st=new Test();
	    int  n=st.sel_count();
		    
    		int[] numbers=new int[n];
 	        for(int i=0;i<numbers.length;i++)
 	        	numbers[i]=i+1;
 	        int[] result=new int[10];
 	        for(int i=0;i<result.length;i++)
 	        {
 	        	int r=(int)(Math.random()*n);
 	        	result[i]=numbers[r];
 	        	numbers[r]=numbers[n-1];
 	        	n--;
 	        }
         return result;
	}
	
	//此方法实现存取随机抽取的选择题 
	public  void sel_save()
	{   
		Test s=new Test();
		int k[]=s.Random();
		Arrays.sort(k);
	       for(int i=0;i<k.length;i++)
		{
	    	   System.out.println(k[i]); 
			try{
		  		sql_2="select selNo,selInf,selA,selB,selC,selD,selAns from sel_test where selNo="+k[i];
		  		sql=" insert into stu_selAns(sel_No,sel_Inf,sel_A,sel_B,sel_C,sel_D,sel_Ans)"+sql_2;
		  		
	    		stmt=conn.createStatement();
	    		stmt1=conn.createStatement();
	    	
	    		rs=stmt1.executeQuery(sql);
	    		while(rs.next())
	    		{
	    			stmt1.execute(sql);
	    		}
			}catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	       //此处的FOR循环实现将试题的题号从一到十进行排列。
		    for(int j=0;j<k.length;j++)
		 	   { 
		 	      //System.out.println(k[j]+"a");//用于测试产生的随机数是否相同。
		 	     try{
		 	              sql="update stu_selAns set sel_Id="+(j+1)+"where sel_No="+k[j];
		 	              stmt=conn.createStatement();
		 	              rs=stmt.executeQuery(sql);
		 			 }catch(Exception e)
		 			  {
		 				  e.printStackTrace(); 
		 			  }
		 	  }
	}
    
	//此方法实现选择题的调用
	public void sel_show(int i)
	{   
		try{
			sql="select sel_Inf ,sel_Ans from stu_selAns where sel_No="+i;
	    		stmt=conn.createStatement();
	    		rs=stmt.executeQuery(sql);
	    		while(rs.next())
	          	  {
	    			label.setText(rs.getString(1));
	    			label_2.setText(rs.getString("sel_Ans"));
	          	  }
			}catch(Exception e)
			{
				e.printStackTrace();
			}
	}
private String sql;
public static String sql_1;
private String sql_2;
private JLabel label;
private JLabel label_1;
private JLabel label_2;
private JLabel label_3;
private JButton button; //显示答案的按钮。
private JButton button_1;
}

说明:执行此程序前需先建立两张表。其中一张表是(sel_test(selNo,selA,selB,selC,selD,selAns)),另一张表是(stu_selAns(sel_No,sel_A,sel_B,sel_C,sel_D,sel_Ans) 此张表用于保存从表sel_test
    中随机抽取的题目。
此程序是大概思路是:先从题库中随机抽取十道题,然后将其保存在另一张表中并将其相应的题号变为一到十。便于接下来的其他操作。

转载于:https://www.cnblogs.com/hailiang/archive/2010/04/24/1719328.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本软件是为广大需要自动命题系统的学校提供方便。用户在使用时首先要将我们为您准备好的数据库连接到SQL上,然后才能使用。 由于用户是首次使用,所有要先进行用户注册。本软件只允许一个用户注册,注册完后请记住密码,以便以后使用。 为了让您能够检验我们的产品的实用性,我们预先在数据库中存放了一些相关试题。在您真正使用的时候,您可以通过SQL数据库中输入试题,也可以通过我们软件为您提供的“添加”功能进行试题输入。为了避免试题抽取时可能会出现的试题重复现象,检验您输入适当多的试题。 下面介绍一下我们本软件的结构以及相关功能: 1.用户登录窗口 包括:用户名、用户密码、登录及用户信息修改。 2.用户信息修改窗口 包括:用户名修改、用户密码修改。 3.用户注册窗口 包括:用户名注册、用户密码注册。 4.自动命题系统窗口 包括:系统(返回系统登录、推出系统)、试题更新(C#试题更新、.net 试题更新、高数试题更新)、试题检索(C# 试题检索、.net 试题检索、高数试题检索)、自动命题(C# 自动命题、.net 自动命题、高数自动命题)、帮助(关于软件、联系我们)。 5.试题检索及更新窗口(两者共用) 对检索包括:基本的菜单栏、工具栏、试题栏(题型、题号、搜索)。 对更新包括:基本的菜单栏、工具栏、试题栏(题型、题号、搜索、添加、删除、更新)。 6.自动命题窗口 包括:基本的菜单栏、工具栏、命题栏(题型、题数、难度系数、总分、命题) 以上为本软的概述,在使用中遇到问题时,请按F1寻求帮助。 感谢使用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值