经典的B/S结构的问题,紧急求助!!

时间:2022-06-06 12:51:16
我做了一个考试系统,要30个人同时在客户端抽题做,但经过测试这30个人好像是做的同一套题,因为测试时出现有的题本人没做答案就已经被选择了(别人已经做过了),有的题做过又被改了。
怎么才能实现这30个人在客户端抽取不同的30套题?
如果我有写的不清楚的地方,请提出,我在做详细说明,在线等!

14 个解决方案

#1


客户端的题 用什么存储的 XML??

#2


经过测试这30个人好像是做的同一套题?你是不是用了PUBLIC STATIC string a,application等类似这样的公共变量来保存的值?如果你采用session和cookie这样来保存值应该不会混乱啊

#3


代码看看

#4


都不知道你程序咋写的.怎么告诉你啊?

#5


通过随机函数从数据库中随机抽取,你的问题是不是因为你的读取随机性不高啊?

#6


to:seesea125(一一)
对,我是用public了。我先试一试再说

#7


这是部分代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;

using BaseClasses;

namespace JTCenterExam.ExamSystem
{
/// <summary>
/// Exam 的摘要说明。
/// </summary>
public class Exam : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label6;
protected System.Web.UI.WebControls.CheckBox chbOption1;
protected System.Web.UI.WebControls.CheckBox chbOption2;
protected System.Web.UI.WebControls.CheckBox chbOption3;
protected System.Web.UI.WebControls.CheckBox chbOption4;
protected System.Web.UI.WebControls.Label Label5;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label lblTitleNum;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.TextBox txtTitle;
protected System.Web.UI.WebControls.TextBox txtOption;

BaseClasses.ExecuteExamPro examPro = new ExecuteExamPro();
private static string[] _strAnswer;//答案用数组存取
private static int _iSubject;//题号,按顺序排列,从0开始
private static int SUBJECTS_TOTAL = 70;//抽取的试题总数
private static int SUBJECTS_SINGLE = 40;//50个单选
private static int SUBJECTS_MULTI = 20;//30个多选
private static int SUBJECTS_JUDGE = 10;//20个判断
private static double RATIO_COMMON = 0.4;//公共题比例40%
private static double RATIO_SPECIAL = 0.6;//专业题比例60%

protected System.Web.UI.WebControls.Button btnPre;
protected System.Web.UI.WebControls.Button btnNext;
protected System.Web.UI.WebControls.Button btnSubmit;
protected System.Web.UI.WebControls.Button btnExamEnd;
protected System.Web.UI.WebControls.Label lblTotalNum;
protected System.Web.UI.WebControls.Label Label8;
protected System.Web.UI.WebControls.Label Label9;
protected System.Web.UI.WebControls.Label Label7;
protected System.Web.UI.WebControls.Label Label10;
protected System.Web.UI.WebControls.DropDownList ddlSubNum;
protected System.Web.UI.WebControls.Label lblSubType;
protected System.Web.UI.WebControls.Button btnRightAnswer;
protected System.Web.UI.WebControls.Label Label2;

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
string sort = Session["Sort"].ToString();

_strAnswer = new string[SUBJECTS_TOTAL];

for(int i = 0; i < SUBJECTS_TOTAL; i++)
_strAnswer[i] = "";
DataTable _dt = this.getPaper(sort);//按 5:3:2 抽题
Session["_dt"] = _dt;

_iSubject = 0;
this.btnPre.Enabled = false;
this.lblTotalNum.Text = _dt.Rows.Count.ToString();
this.showSubject(_iSubject);
this.showChb(_iSubject);
bindDDL();
}
}

#8


就是这30个人其实是做的服务器上的同一套题,用什么方法实现这30个人个抽取个的一套题做,互不干扰。

#9


up

#10


to:goody9807() 
客户端的题 用什么存储的 XML??
我没用xml存储,直接随机生成考题存在一个动态生成的datatable中,在客户端抽取。结果发现好像大家在做的同一套题。发现大家做的过程中出现跳题问题。比如A做第一题,B做题二题,等B做完以后,A在点下一题,就跳到第三题了。

#11


用数据库不是可以控制的嘛,做过就打上标志不让再选了

#12


我试了,用session也不行。怎么办?

#13


to:tengjian1981(我不是谁的谁谁谁!!!)
但这样不就的频繁的访问数据库,我的意思是怎么样才能让每个人把题抽出来后答案先写到缓存当中,等交卷的时候访问一次数据库就行了。

#14


其实现在还不是访问数据库的问题,而是怎么让每个人抽取不同的一套题,各自做各自的。

#1


客户端的题 用什么存储的 XML??

#2


经过测试这30个人好像是做的同一套题?你是不是用了PUBLIC STATIC string a,application等类似这样的公共变量来保存的值?如果你采用session和cookie这样来保存值应该不会混乱啊

#3


代码看看

#4


都不知道你程序咋写的.怎么告诉你啊?

#5


通过随机函数从数据库中随机抽取,你的问题是不是因为你的读取随机性不高啊?

#6


to:seesea125(一一)
对,我是用public了。我先试一试再说

#7


这是部分代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;

using BaseClasses;

namespace JTCenterExam.ExamSystem
{
/// <summary>
/// Exam 的摘要说明。
/// </summary>
public class Exam : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.Label Label6;
protected System.Web.UI.WebControls.CheckBox chbOption1;
protected System.Web.UI.WebControls.CheckBox chbOption2;
protected System.Web.UI.WebControls.CheckBox chbOption3;
protected System.Web.UI.WebControls.CheckBox chbOption4;
protected System.Web.UI.WebControls.Label Label5;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label lblTitleNum;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.TextBox txtTitle;
protected System.Web.UI.WebControls.TextBox txtOption;

BaseClasses.ExecuteExamPro examPro = new ExecuteExamPro();
private static string[] _strAnswer;//答案用数组存取
private static int _iSubject;//题号,按顺序排列,从0开始
private static int SUBJECTS_TOTAL = 70;//抽取的试题总数
private static int SUBJECTS_SINGLE = 40;//50个单选
private static int SUBJECTS_MULTI = 20;//30个多选
private static int SUBJECTS_JUDGE = 10;//20个判断
private static double RATIO_COMMON = 0.4;//公共题比例40%
private static double RATIO_SPECIAL = 0.6;//专业题比例60%

protected System.Web.UI.WebControls.Button btnPre;
protected System.Web.UI.WebControls.Button btnNext;
protected System.Web.UI.WebControls.Button btnSubmit;
protected System.Web.UI.WebControls.Button btnExamEnd;
protected System.Web.UI.WebControls.Label lblTotalNum;
protected System.Web.UI.WebControls.Label Label8;
protected System.Web.UI.WebControls.Label Label9;
protected System.Web.UI.WebControls.Label Label7;
protected System.Web.UI.WebControls.Label Label10;
protected System.Web.UI.WebControls.DropDownList ddlSubNum;
protected System.Web.UI.WebControls.Label lblSubType;
protected System.Web.UI.WebControls.Button btnRightAnswer;
protected System.Web.UI.WebControls.Label Label2;

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
string sort = Session["Sort"].ToString();

_strAnswer = new string[SUBJECTS_TOTAL];

for(int i = 0; i < SUBJECTS_TOTAL; i++)
_strAnswer[i] = "";
DataTable _dt = this.getPaper(sort);//按 5:3:2 抽题
Session["_dt"] = _dt;

_iSubject = 0;
this.btnPre.Enabled = false;
this.lblTotalNum.Text = _dt.Rows.Count.ToString();
this.showSubject(_iSubject);
this.showChb(_iSubject);
bindDDL();
}
}

#8


就是这30个人其实是做的服务器上的同一套题,用什么方法实现这30个人个抽取个的一套题做,互不干扰。

#9


up

#10


to:goody9807() 
客户端的题 用什么存储的 XML??
我没用xml存储,直接随机生成考题存在一个动态生成的datatable中,在客户端抽取。结果发现好像大家在做的同一套题。发现大家做的过程中出现跳题问题。比如A做第一题,B做题二题,等B做完以后,A在点下一题,就跳到第三题了。

#11


用数据库不是可以控制的嘛,做过就打上标志不让再选了

#12


我试了,用session也不行。怎么办?

#13


to:tengjian1981(我不是谁的谁谁谁!!!)
但这样不就的频繁的访问数据库,我的意思是怎么样才能让每个人把题抽出来后答案先写到缓存当中,等交卷的时候访问一次数据库就行了。

#14


其实现在还不是访问数据库的问题,而是怎么让每个人抽取不同的一套题,各自做各自的。