随机抽取试题(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
    中随机抽取的题目。
此程序是大概思路是:先从题库中随机抽取十道题,然后将其保存在另一张表中并将其相应的题号变为一到十。便于接下来的其他操作。
posted @ 2010-04-24 14:57  月亮的影子  阅读(2164)  评论(0编辑  收藏  举报