2012-05-06 77 views
1

我正在開發一個java測驗應用程序。該應用程序將包括下列形式之一的20個問題:帶數據庫訪問的JSP測驗應用程序

什麼是德語單詞XXXX的英文單詞?

什麼是德語 英語單詞xxxx?

我已經創建了一個包含單詞表和頁面的數據庫,用於向該表添加單詞。 表包括以下欄:germanWord,性別,englishWord

我的問題是,在每一個問題,我想隨機挑選一個詞從數據庫中形成的問題等等,例如:

什麼是英語單詞的德語單詞wordTable.getEnglishName

最後,這個問題是一個多項選擇問題,所以有可能在4個可能的答案之一中插入一條命令,從該問題的相同條目中​​獲取相關答案?

<input type="radio" name="q1Answer" value="A"/><label for="A">A) fixed answer</label><br/> 
<input type="radio" name="q1Answer" value="B"/><label for="B">B) fixed answer</label><br/> 
<input type="radio" name="q1Answer" value="C"/><label for="C">C) *get name from the database*</label><br/> 
<input type="radio" name="q1Answer" value="D"/><label for="D">D) fixed answer</label><br/><br/> 



package org.me.jsp.beans; 

import java.sql.*; 
import java.util.*; 

public class WordDataBean { 


    private Connection connection; 
    private PreparedStatement addWord, getWords, removeWord, getRandEnglishWord; 

    public WordDataBean() throws Exception { 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/university2", "root", 
        ""); 

      getWords = connection.prepareStatement("SELECT * FROM word"); 

      addWord = connection.prepareStatement("INSERT INTO university2.word (" 
        + "germanName, gender, englishName) " + "VALUES (?, ?, ?);"); 

      removeWord = connection.prepareStatement("DELETE FROM university2.student " 
        + "WHERE germanName='?';"); 
      getRandEnglishWord= connection.prepareStatement("SELECT englishName FROM word" 
        + "ORDER BY RAND() LIMIT 1"); 
     } catch (SQLException sqle) { 
      sqle.printStackTrace(); 
     } 

    } 

    public List<WordBean> getWordList() throws SQLException { 
     List<WordBean> wordList = new ArrayList<WordBean>(); 

     // obtain list of titles 
     ResultSet results = getWords.executeQuery(); 

     // get row data 
     while (results.next()) { 
      WordBean word = new WordBean(); 

      word.setGermanName(results.getString(1)); 
      word.setGender(results.getString(2)); 
      word.setEnglishName(results.getString(3)); 

      wordList.add(word); 
     } 

     return wordList; 
    } 

    public void addWord(WordBean word) throws SQLException { 
     addWord.setString(1, word.getGermanName()); 
     addWord.setString(2, word.getGender()); 
     addWord.setString(3, word.getEnglishName()); 
     addWord.executeUpdate(); 
    } 

    public void removeWord(WordBean word) throws SQLException{ 
     removeWord.setString(1,word.getGermanName()); 
     removeWord.executeUpdate(); 
    } 
    public void randomEnglishWord(WordBean word) throws SQLException{ 
     getRandEnglishWord.setString(1, word.getEnglishName()); 
     getRandEnglishWord.executeQuery(); 
    } 
    protected void finalize() { 
     try { 
      getWords.close(); 
      addWord.close(); 
      connection.close(); 
     } catch (SQLException sqlException) { 
      sqlException.printStackTrace(); 
     } 
    } 
} 

這裏的問題jsp頁面中的一個樣本,q1.jsp:

<%-- 
    Document : q1 
    Created on : 06-May-2012, 18:54:24 
    Author  : encore 
--%> 

<!--This JSP acts as the first question in a multiple choice quiz, with the user 
asked to submit their answer to the question--> 

<?xml version = "1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Big Java Quiz, question 1</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
     <%if(request.getParameter("choice").equals("N")) 
      out.print("<meta http-equiv='refresh' content='0;url=options.jsp'/>"); 
      //Redirects user back to index if they did not want to take quiz%> 
     <form action="q2.jsp" method="POST"> 
      <b>Question 1.</b> What is the German noun for the English word ______?<br/><br/> 
      <input type="radio" name="q1Answer" value="A"/><label for="A">A) Exception generator</label><br/> 
      <input type="radio" name="q1Answer" value="B"/><label for="B">B) Exception manipulator</label><br/> 
      <input type="radio" name="q1Answer" value="C"/><label for="C">C) Exception handler</label><br/> 
      <input type="radio" name="q1Answer" value="D"/><label for="D">D) Exception monitor</label><br/><br/> 
      <input type="submit" value="Submit"/> 
     </form> 
    </body> 
</html> 
+0

我發現困難瞭解如何表達該命令以從數據庫獲取值。你想讓我發佈一個問題的jsp頁面的例子來向你展示我迄今爲止的構建方式嗎? –

+0

你的問題基本上是從數據庫中以任意順序得到一個_words_(每個問題一個)量,然後顯示給用戶,對不對? –

+0

由於我的測驗結構有邏輯 '一個jsp頁面的問題 - > sumbit - >轉到下一個問題(發送到下一個jsp)'我會說我只需要從數據庫中每次只獲取一個字 –

回答

1

假設你取你的問題的列表:

List<WordBean> wordList = getWordList(); 
    List<String> answersList = new ArrayList<String>(); 
    Random random = new Random(); 
    Random forAnswers = new Random(); 

    WordBean goodOne = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(goodOne); 
    //add it to the answers list 
    answersList.add(goodOne.getGermanName()); 
    WordBean fakeOne = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(fakeOne); 
    //add it to the answers list 
    answersList.add(fakeOne.getGermanName()); 
    WordBean fakeTwo = wordList.get(random.nextInt(wordList.size())); 
    //take it out from the list 
    wordList.remove(fakeTwo); 
    //add it to the answers list 
    answersList.add(fakeTwo.getGermanName()); 

    %>What is the english word for the german word <%=goodOne.getGermanName()%> 

    <% 
    char letter = 'A'; 
    for (String answer:answersList){ 
    %> 
    <input type="radio" name="q1Answer" value=""/><label for="<%=letter%>"><%=letter%>)<%=answerList.get(forAnswers.getNextInt(3))> /> 
    <% 
    //point to the next letter 
    letter++; 
    } 
相關問題