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
からの質問をランダムに選択します。
このプログラムの一般的なアイデアは次のとおりです。まず質問バンクから 10 個の質問をランダムに選択し、次にそれらを別のテーブルに保存し、対応する質問番号を 1 から 10 に変更します。後続の他の操作を容易にするため。
ランダムに選択されたテスト問題に関する Java+SQL2005 コード関連の記事をさらに詳しく知りたい場合は、PHP 中国語 Web サイトに注目してください。