随机抽取试题(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
    中随机抽取的题目。
此程序是大概思路是:先从题库中随机抽取十道题,然后将其保存在另一张表中并将其相应的题号变为一到十。便于接下来的其他操作。

你可能感兴趣的:(java)