如何在测验结束时存储和显示分数

时间:2011-04-27 21:49:47

标签: java jsp servlets

我有一个简单的测验程序,可以从数据库中选择10个随机问题并将其呈现给用户。在测验结束时,当用户提交提交时,我想向用户显示分数。

以下是运行quizz

的代码片段
import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class serv3p extends HttpServlet    
{

 protected void doPost(HttpServletRequest req, HttpServletResponse res)    
                     throws ServletException, IOException    
    {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        String qKey = req.getParameter("sQuestionID");
        int iQuestionID = Integer.parseInt(qKey);


        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String sourceURL = new String("jdbc:odbc:MyQuiz");//DSN name
            Connection databaseConnection = DriverManager.getConnection(sourceURL);
            if (databaseConnection != null)
                out.println("<P>Connection made<BR>");

            if (iQuestionID < 11) out.println("QuestionID is: " + qKey);
            Statement myStatement = databaseConnection.createStatement();
            ResultSet results = myStatement.executeQuery ("SELECT TOP 10 QuestionBank.QuestionText, QuestionBank.Choice1, QuestionBank.Choice2,"
            +"QuestionBank.Choice3, QuestionBank.Choice4,QuestionBank.Answer FROM QuestionBank ORDER BY RND(QuestionID)");



            //ResultSet results = myStatement.executeQuery ("SELECT * FROM QuestionBank WHERE QuestionID = '"+qKey+"'");

            if (results.next())
                {
                String r1, r2, r3, r4, r5;
                r1 = results.getString(1);
                r2 = results.getString(2);
                r3 = results.getString(3);
                r4 = results.getString(4);
                r5 = results.getString(5);
                //r6 = results.getString(6);
                out.println("<BODY BGCOLOR='lightblue'></BODY>" +
                    "<FORM method = \"post\" action = \"http://localhost:8080/servlet/Relay\">" +
                    "<TABLE BORDER = 2 CELLPADDING = 4 CELLSPACING = 2>" +
                    "<TR><TD COLSPAN = 6 ALIGN = CENTER><H2><B>Quick Quizz : Sports</B></H2></TD></TR>");
                out.println("<TR><TD>" + r1 + "</TD></TR>");
                out.println("<TR><TD><input type = \"radio\" name = \"answer\" value = \"1\">" + r2 + "</TD></TR><BR>");
                out.println("<TR><TD><input type = \"radio\" name = \"answer\" value = \"2\">" + r3 + "</TD></TR><BR>");
                out.println("<TR><TD><input type = \"radio\" name = \"answer\" value = \"3\">" + r4 + "</TD></TR><BR>");
                out.println("<TR><TD><input type = \"radio\" name = \"answer\" value = \"4\">" + r5 + "</TD></TR><BR>");
                out.println("</TABLE>");
                results.close();
                iQuestionID++; qKey = "" + iQuestionID;
                out.println("<BR>End of Database Records<BR>");
                if (iQuestionID < 11)

                    {
                    out.println("<BR><BR><INPUT type = \"submit\" value = \"Press for Next Question\">" +
                                "<INPUT type = \"hidden\" name = \"sQuestionID\" value = '" + qKey + "'><p>" +
                                "<INPUT type = \"hidden\" name = \"choice\" value = \"Play\"></FORM></BODY></HTML>");
                    }

                else
                    {out.println("<BR><BR><INPUT type = \"submit\" value = \"Press to Exit\">" +
                                 "<INPUT type = \"hidden\" name = \"sQuestionID\" value = '" + qKey + "'><p>" +
                                 "<INPUT type = \"hidden\" name = \"choice\" value = \"serv43a\"></FORM></BODY></HTML>");

                    }
                out.close();
                }
            }
            catch(ClassNotFoundException cnfe)
                {System.out.println(cnfe);}
            catch(SQLException sqle)
                {System.out.println("Error is: " + sqle);}

    }
}

2 个答案:

答案 0 :(得分:2)

为什么不使用数据库来存储计算得分,然后将其显示在结果页面上?如果您不需要将分数保留任何时间长度(例如超过一小时左右),您可以随时检查并删除旧记录。

答案 1 :(得分:0)

你应该问自己的问题是,我是否希望将分数保留一段时间(例如:民意调查),或者你只是想将它用作软件之类的测试,它会返回确切的结果测试后得分,但不仅仅是破坏了这个值和软件的结尾,

如果你想保留更长的时间,可以在访问数据库甚至SQL服务器中写入所有值,

如果你认为你想要保留的值不是那么多,那么我会把它写在一个基于txt的文件中,因为它很容易存储,并且不会花费太多时间作为数据库连接写出来,

要获得你的分数,你将需要硬编码正确的答案,swich案例或if / else,只需用正确的答案硬编码你的字符串的位置,并将分数添加到私人int(或浮点/双)

显示它并不难,如果你想显示来自大量参与者的东西,只需使用增强的for循环,println显示参与者的名字和数字,甚至把它放在JFrame中。这取决于你,


我的建议

(你要保留的很多数据)=&gt; SQL /(访问)数据库

(您要保留一些数据)=&gt; txt文件,如果您知道确切的参与者数量(XML)

(只是diplay)打印你的分数,

您需要对此分数进行硬编码,这取决于您选择值的方式。


最后提示:不要打开太多的数据库连接,这只会减慢你的进度,而正确答案之类的东西很容易硬代码,因为它们不是变量,你只有10个问题


问题1 :(编辑)

没问题,你只想要10个问题,因为我昨晚与我的一个朋友讨论了这个问题,如果你确实希望将分数保留更长的时间,你可能希望有可能如果没有,还要添加更多问题,

只为每个问题使用if else方法

如果(Question1.equals( “问题1”)) {     没问题,你只想要10个问题,因为我昨晚与我的一个朋友讨论了这个问题,如果你确实希望将分数保留更长的时间,你可能希望有可能添加更多问题,如果没有,

只为每个问题使用if else方法

如果(Question1.equals( “问题1”))

{

切换(回答)

案例1:点++;打破;

案例2:休息;

案例3:休息;

默认值:break;

}

}

否则

{

如果(Question2.equals( “问题2”))

{

切换(回答)

案例1:休息;

案例2:点++;打破;

案例3:休息;

默认值:break;

}

否则

{

}

}

依此类推,填写像这样的问题,

String Question =“Question1”;

if(Question.equals(“Question1”)) {     ... }

如果您希望使用数据库,您可以将答案放在一个额外的属性中,而不是像这样做

int [] answerOnTheQuestions =测试的答案(把它们放在一个Int数组中) int [] answers =(你的数据库链接到这里的右表和列) int score = 0;

for(int counter = 0; counter&lt; questions.length; counter ++)

{

if(answersOnTheQuestions [counter] == answers [counter])

{

得分++;

}

}

将分数与您可以在GUI或consle中获得的参与者名称一起写入您的表格。

我希望这有助于:)