📄 autoexercise.cs
字号:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
namespace ExamOnline
{
//该源码下载自www.51aspx.com(51aspx.com)
/// <summary>
/// AutoExercise 的摘要说明:在线练习--自动组卷的功能实现
/// </summary>
public class AutoExercise
{
string strcon = ""; //连接字符串
/// <summary>
/// 构造函数,连接字符串
/// </summary>
public AutoExercise()
{
if (strcon == "")
{
if (HttpContext.Current.Application["strcon"] == null)
{
string path = HttpContext.Current.Request.PhysicalApplicationPath + "DBSet.ini";//获取文件物理路径
StreamReader sr = new StreamReader(path, System.Text.Encoding.Default);
strcon = sr.ReadLine();//读取文件内容
HttpContext.Current.Application["strcon"] = strcon;
}
else
{
strcon = HttpContext.Current.Application["strcon"].ToString();
}
}
}
/// <summary>
/// 用SQL语句绑定GridView
/// </summary>
/// <param name="gv">要绑定的GridView</param>
/// <param name="strcmd">SQL语句</param>
public void bindGV(GridView gv, string strcmd)
{
SqlDataSource sqlds = new SqlDataSource();
sqlds.ConnectionString = strcon;
sqlds.SelectCommandType = SqlDataSourceCommandType.Text;
sqlds.SelectCommand = strcmd;
gv.DataSource = sqlds;
gv.DataBind();
}
/// <summary>
/// 取得一门课程某题型难度的最大值
/// </summary>
/// <param name="cid"></param>
/// <param name="sid"></param>
/// <returns></returns>
public int getQlevel(string cid, int sid)
{
SqlConnection con = new SqlConnection(strcon);
string strcmd = "select max(qlevel) from questions where cid='" + cid + "' and sid='" + sid + "'";
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
int heighLevel =Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
return heighLevel;
}
/// <summary>
/// 取得一门课程某题型的总题量
/// </summary>
/// <param name="cid"></param>
/// <param name="sid"></param>
/// <returns></returns>
public int getQNum(string cid, int sid)
{
SqlConnection con = new SqlConnection(strcon);
string strcmd = "select count(*) from questions where cid='" + cid + "' and sid='" + sid + "'";
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
int qNum = Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
return qNum;
}
public string getStyleName(int sid)
{
SqlConnection con = new SqlConnection(strcon);
string strcmd = "select sname from styles where sid='" + sid + "'";
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
string sName = Convert.ToString(cmd.ExecuteScalar());
con.Close();
return sName;
}
/// <summary>
/// 根据课程的cid来取得课程名称
/// </summary>
/// <param name="cid"></param>
/// <returns></returns>
public string getCourseName(string cid)
{
SqlConnection con = new SqlConnection(strcon);
string strcmd = "select cname from course where cid='" + cid + "'";
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
string cname = Convert.ToString(cmd.ExecuteScalar());
con.Close();
return cname;
}
/// <summary>
/// 根据qid取得判断题、单选题的题目内容、选项、答案并填充
/// </summary>
/// <param name="rbl"></param>
/// <param name="title"></param>
/// <param name="answers"></param>
/// <param name="qid"></param>
public void FillRbl(RadioButtonList rbl,Literal title,Literal answers, int qid)
{
SqlConnection con = new SqlConnection(strcon);
string strTitle = "select content from questions where qid='" + qid + "'";
string strcmd = "select optionsname,options,answer from answers where qid='" + qid + "'";
SqlCommand cmdTitle = new SqlCommand(strTitle, con);
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
//取得题目内容
title.Text = Convert.ToString(cmdTitle.ExecuteScalar());
//取得选项和答案
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
ListItem li = new ListItem();
li.Value = dr.GetString(0).ToString();
li.Text = dr.GetString(0).ToString() + "、" + dr.GetString(1).ToString();
rbl.Items.Add(li);
if (dr.GetValue(2).ToString() == "1")
{
answers.Text = dr.GetString(0).ToString();
}
}
con.Close();
}
/// <summary>
/// 根据qid取得多选题的题目内容、选项、答案并填充
/// </summary>
/// <param name="cbl"></param>
/// <param name="title"></param>
/// <param name="answers"></param>
/// <param name="qid"></param>
public void FillCbl(CheckBoxList cbl, Literal title, Literal answers, int qid)
{
string strAnswers = "";
SqlConnection con = new SqlConnection(strcon);
string strTitle = "select content from questions where qid='" + qid + "'";
string strcmd = "select optionsname,options,answer from answers where qid='" + qid + "'";
SqlCommand cmdTitle = new SqlCommand(strTitle, con);
SqlCommand cmd = new SqlCommand(strcmd, con);
con.Open();
//取得题目内容
title.Text = Convert.ToString(cmdTitle.ExecuteScalar());
//取得选项和答案
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
ListItem li = new ListItem();
li.Value = dr.GetString(0).ToString();
li.Text = dr.GetString(0).ToString() + "、" + dr.GetString(1).ToString();
cbl.Items.Add(li);
if (dr.GetValue(2).ToString() == "1")
{
if(strAnswers == "")
strAnswers = dr.GetString(0).ToString();
else
strAnswers += dr.GetString(0).ToString();
}
}
answers.Text = strAnswers;
con.Close();
}
/// <summary>
/// 根据qid取得客观题的题目内容、答案并填充
/// </summary>
/// <param name="title"></param>
/// <param name="answer"></param>
/// <param name="qid"></param>
public void FillTb(Literal title, Literal answer, int qid)
{
SqlConnection con = new SqlConnection(strcon);
string strTitle = "select content from questions where qid='" + qid + "'";
string strAnswer = "select options from answers where qid='" + qid + "'";
SqlCommand cmdTitle = new SqlCommand(strTitle, con);
SqlCommand cmdAnswer = new SqlCommand(strAnswer, con);
con.Open();
title.Text = Convert.ToString(cmdTitle.ExecuteScalar());
answer.Text = Convert.ToString(cmdAnswer.ExecuteScalar());
con.Close();
}
/// <summary>
/// 取得随机题目
/// </summary>
/// <param name="cid"></param>
/// <param name="styles"></param>
/// <param name="level"></param>
/// <param name="num"></param>
/// <returns></returns>
public DataTable dt(string cid, int styles, int level, int num)
{
DataTable dt = new DataTable("QuesTable");
DataColumn q_num = dt.Columns.Add("q_num", typeof(Int32));
q_num.AllowDBNull = false;
q_num.Unique = true;
dt.Columns.Add("qid", typeof(Int32));
dt.Columns.Add("qlevel", typeof(Int32));
//难度系数总的范围
int heightLevel = getQlevel(cid,styles);
int minLevel = num;
int maxLevel = num * heightLevel;
//第一次随机读取一道题
SqlConnection con = new SqlConnection(strcon);
con.Open();
string strFirst = "select top 1 qid,qlevel from questions where cid='" + cid + "' and sid='" + styles + "' and audit=1 order by newid()";
SqlCommand cmd = new SqlCommand(strFirst, con);
SqlDataReader datareader = cmd.ExecuteReader();
string strAllqid = ""; //保存已选取的题目qid
int normalLevel = num * level; //还剩下的难度系数总和
while (datareader.Read())
{
int qid = datareader.GetInt32(0);
int qlevel = datareader.GetInt32(1);
DataRow drow = dt.NewRow();
drow["q_num"] = 1;
drow["qid"] = qid;
drow["qlevel"] = qlevel;
dt.Rows.Add(drow);
strAllqid = qid.ToString();
normalLevel -= qlevel;
}
datareader.Close();
//取剩下的题目
for (int i = 2; i <= num; i++)
{
DataRow drow = dt.NewRow();
string strcmd = "";
if (normalLevel <= (num-i))
{
strcmd = "select top 1 qid,qlevel from questions where cid='" + cid + "' and sid='" + styles + "' and qlevel=1 and audit=1";
strcmd += " and qid not in(" + strAllqid + ") order by newid()";
}
else if (normalLevel >= (num-i) * heightLevel)
{
strcmd = "select top 1 qid,qlevel from questions where cid='" + cid + "' and sid='" + styles + "'";
strcmd += " and qlevel=" + heightLevel + " and audit=1";
strcmd += " and qid not in(" + strAllqid + ") order by newid()";
}
else
{
strcmd = "select top 1 qid,qlevel from questions where cid='" + cid + "' and sid='" + styles + "' and audit=1";
strcmd += " and qid not in(" + strAllqid + ") order by newid()";
}
SqlCommand cmdLeaveQues = new SqlCommand(strcmd, con);
SqlDataReader drLeavelQues = cmdLeaveQues.ExecuteReader();
while (drLeavelQues.Read())
{
int qid = drLeavelQues.GetInt32(0);
int qlevel = drLeavelQues.GetInt32(1);
drow["q_num"] = i;
drow["qid"] = qid;
drow["qlevel"] = qlevel;
dt.Rows.Add(drow);
strAllqid += "," + qid.ToString();
normalLevel -= qlevel;
}
drLeavelQues.Close();
}
con.Close();
return dt;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -