我有一个简单的测验程序,可以从数据库中选择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);}
}
}
答案 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中获得的参与者名称一起写入您的表格。
我希望这有助于:)