⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autoexercise.cs

📁 用asp写的程序,在线考试系统,功能齐全,是一个非常好用的系统
💻 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 + -