问题描述
最近在做一个网上考试系统,到最后阶段了,但是在最后答题部分出了问题,以下是源代码,从数据库里抽出题目回答问题,但是我把select语句改成随机抽取后,发现计算成绩时答案对比存在问题了,提取的答案对应不上题目,结果是评分不准,请大家帮忙看一下哪里出问题了,帮忙修改一下,谢谢!!publicpartialclassstudent_startexam:System.Web.UI.Page{Datacondataconn=newDatacon();intt1=0;//单选题题号索引intt2=0;//多选题题号索引intPoint1=0;//单选题分数intPoint2=0;//多选题分数protectedvoidPage_Load(objectsender,EventArgse){if(Session["ID"]==null){Response.Write("<scriptlanuage=javascript>alert('你还没有登录!');location='../default.aspx'</script>");}if(!IsPostBack){this.getCom(1);this.getCom(2);}}protectedvoidbtnOK_Click(objectsender,EventArgse){this.lblStuID.Text=Session["StuName"].ToString();this.lblSubject.Text=Session["SelLession"].ToString();this.lblQuestion.Text=Session["SelTitle"].ToString();this.getCom(3);this.getCom(4);this.lblTotal.Text=""+(Point1+Point2);this.getCom(5);Response.Write("<scriptlanuage=javascript>alert('交卷完毕,反会查看成绩!');</script>");this.btnOK.Enabled=false;}protectedvoidgetCom(inti){stringdd1=Session["SelLession"].ToString();stringdd2=Session["SelTitle"].ToString();SqlConnectioncon=dataconn.getcon();con.Open();SqlDataAdaptermyadapter1=newSqlDataAdapter("selecttop4*"+"fromquestionswheretype='单选题'andoflesson='"+dd1+"'andofshijuan='"+dd2+"'orderbynewid()",con);DataSetmyds1=newDataSet();myadapter1.Fill(myds1);SqlDataAdaptermyadapter2=newSqlDataAdapter("selecttop4*"+"fromquestionswheretype='多选题'andoflesson='"+dd1+"'andofshijuan='"+dd2+"'orderbynewid()",con);DataSetmyds2=newDataSet();myadapter2.Fill(myds2);switch(i){//从数据库中选择单选题case1:DataList1.DataSource=myds1;DataList1.DataBind();//生成单选题题号for(inttID1=1;tID1<=DataList1.Items.Count;tID1++){LabellblSelect=(Label)DataList1.Items[tID1-1].FindControl("Label2");lblSelect.Text=tID1.ToString()+"、";}break;//从数据库中选择多选题case2:DataList2.DataSource=myds2;DataList2.DataBind();//生成多选题题号for(inttID2=1;tID2<=DataList2.Items.Count;tID2++){LabellblDSelect=(Label)DataList2.Items[tID2-1].FindControl("Label24");lblDSelect.Text=tID2.ToString()+"、";}break;//核对单选题答案case3:DataRow[]row1=myds1.Tables[0].Select();//计算单选题成绩foreach(DataRowanswer1inrow1){if(t1<=DataList1.Items.Count-1)t1+=1;RadioButtonListrbl=(RadioButtonList)(DataList1.Items[t1-1].FindControl("RadioButtonList1"));if(answer1["answer"].ToString().Trim()==rbl.SelectedValue.ToString().Trim()){Point1+=10;this.lblSel.Text=Point1.ToString();}}break;//核对多选题答案case4:DataRow[]row2=myds2.Tables[0].Select();//计算多选题成绩foreach(DataRowanswer2inrow2){if(t2<=DataList2.Items.Count-1)t2+=1;CheckBoxListcbl=(CheckBoxList)(DataList2.Items[t2-1].FindControl("CheckBoxList1"));this.TextBox1.Text="";for(intq=0;q<cbl.Items.Count;q++){if(cbl.Items[q].Selected==true){this.TextBox1.Text=TextBox1.Text.Trim()+cbl.Items[q].Value;}}if(answer2["answer"].ToString().Trim()==this.TextBox1.Text.Trim()){Point2+=10;this.lblDSel.Text=Point2.ToString();}}break;//把考试结果插入数据库case5:{dataconn.eccom("insertintostuscore"+"(stuid,lessonname,classname,shijuanname,singlesco,moresco)"+"values('"+lblStuID.Text+"','"+lblSubject.Text+"','"+Session["SelClass"]+"','"+lblQuestion.Text+"','"+lblSel.Text+"','"+lblDSel.Text+"')");}break;}con.Close();}protectedvoidbtnExit_Click(objectsender,EventArgse){Response.Write("<scriptlanuage=javascript>window.close();location='javascript:history.go(-1)'</script>");}}
解决方案
解决方案二:
楼主你的程序看下去很累1.命名不规范TextBox1.Text..student_startexam类名首字母要大写getCom方法名首字母也要大写的2.使用不规范<scriptlanuage=javascript>==<scriptlanguage=javascripttype='text/javascript'>而且注册脚本的方式也不正规3.sql语句不使用参数使用拼接字符串
解决方案三:
引用1楼amandag的回复:
楼主你的程序看下去很累1.命名不规范TextBox1.Text..student_startexam类名首字母要大写getCom方法名首字母也要大写的2.使用不规范<scriptlanuage=javascript>==<scriptlanguage=javascripttype='text/javascript'>而且注册脚本的方式也不正规3.sql语句不使用参数使用拼接字符串
不好意思,刚学asp.net没多久,好多东西都没学好,能用就没怎么改了,现在最大的问题还是随机后计算分数不准啊,再过一个多星期就答辩了,总得出点东西吧,总不能混过去。
解决方案四:
还没毕业做那样也不是很菜.可以理解.我看乱也是在看SQL语句部分看的很累.一大陀的连接命令
解决方案五:
for(intq=0;q<cbl.Items.Count;q++){if(cbl.Items[q].Selected==true){this.TextBox1.Text=TextBox1.Text.Trim()+cbl.Items[q].Value;}}
不知道是不是这里出现逻辑问题了。。。代码太乱了,看不懂了。。。楼主还是应该自己调试下。加些注释上去。尤其是getCom()
解决方案六:
引用4楼Jueyoung的回复:
C#codefor(intq=0;q<cbl.Items.Count;q++){if(cbl.Items[q].Selected==true){this.TextBox1.Text=TextBox1.Text.Trim()+cbl.Items[q].Value;}}不知道是不是这里出现逻辑问题了。。。代码太乱了,看不懂…
这里没有错啊,这的代码是把多选题的答案给保存在TextBox1里面,跟着下面就是跟数据库里保存的答案对比。
解决方案七:
累呀,看得我想睡觉了
解决方案八:
楼主你是题目随机抽取还是题目的选项随机乱序?==============如果是题目随机抽取有题目的id怎么会对不上答案?
解决方案九:
如果把select语句改成不要orderbynewid(),也就是不随机的话,程序本身就没有问题,判分就正确了。我想问题是出在把answer从数据库里取出来的时侯。
解决方案十:
我顶一下,有人帮帮忙么?