Ejemplo n.º 1
0
    protected void BindKechengInfo()
    {
        string kechengid = Session["kechengid"].ToString();

        TextBoxkcname.Text = KechengInfo.getKechengname(kechengid);
        SqlConnection conn = new SqlConnection();

        conn.ConnectionString = ConfigurationManager.ConnectionStrings["kecheng2012ConnectionString"].ConnectionString;
        SqlCommand comm = conn.CreateCommand();

        comm.CommandText = "select instruction,image,guanliyuan from tb_kecheng where kechengid=" + kechengid;
        conn.Open();
        SqlDataReader sdr = comm.ExecuteReader();

        if (sdr.Read())
        {
            if (!sdr.IsDBNull(0))
            {
                TextBox1.Text = sdr.GetString(0);
            }
            if (!sdr.IsDBNull(1))
            {
                Image1.ImageUrl = sdr.GetString(1);
            }
            DropDownList2.SelectedValue = sdr.GetString(2);
        }
        sdr.Close();
        conn.Close();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string kechengid = Session["kechengid"].ToString();
        string banjiid   = Request.QueryString["banjiid"];
        string stuun     = Request.QueryString["studentusername"];

        Labelkc.Text = KechengInfo.getKechengname(kechengid);
        Labelbj.Text = BanjiInfo.GetBanjiName(int.Parse(banjiid));
        Labelxm.Text = StudentInfo.GetStuXingming(stuun);
        Labelun.Text = stuun;
        BindDianMingStu();
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        string username = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;

        if (Session["kechengid"] == null)
        {
            int minkechengid = TeacherInfo.GetTeacherRenke_min_kechengid(username);
            if (minkechengid > 0)
            {
                Session["kechengid"] = minkechengid;
            }
            else if (KechengInfo.GetKechengCount() > 0)
            {
                Session["kechengid"] = KechengInfo.MinKechengid();
            }
            else
            {
                List <string> noneKechengPage = new List <string>();//不需要课程的页面
                noneKechengPage.Add("createcourse.aspx");
                noneKechengPage.Add("help.aspx");
                noneKechengPage.Add("addbanji.aspx");
                noneKechengPage.Add("default.aspx");
                noneKechengPage.Add("studentdaoru.aspx");
                noneKechengPage.Add("wanshanxinxi.aspx");
                noneKechengPage.Add("addstudent.aspx");
                noneKechengPage.Add("editstudent.aspx");
                noneKechengPage.Add("editstudentinfo.aspx");
                noneKechengPage.Add("gerenxinxi.aspx");
                noneKechengPage.Add("kcxianyou.aspx");
                string url     = HttpContext.Current.Request.Url.AbsolutePath;
                string pageurl = url.Substring(url.LastIndexOf("/") + 1).ToLower();
                if (!noneKechengPage.Contains(pageurl))
                {
                    Response.Redirect("createcourse.aspx");
                }
            }
        }
        if (!IsPostBack)
        {
            Literal2.Text = TeacherInfo.TeacherXingMing(username) + "老师.";
            if (Session["kechengid"] != null)
            {
                lbl_kecheng.Text = KechengInfo.getKechengname(DropDownList1.SelectedValue = Session["kechengid"].ToString());
            }
            else
            {
                lbl_kecheng.Text = "未知";
            }
            lbtn_qiehuan.Visible = TeacherInfo.IsManager(username);//是否显示身份切换链接
        }
    }
 protected void Page_Init(object sender, EventArgs e)
 {
     if (Session["kechengid"] == null)
     {
         if (KechengInfo.GetKechengCount() > 0)
         {
             Session["kechengid"] = KechengInfo.MinKechengid().ToString();
         }
         else
         {
             Response.Redirect("default.aspx");
         }
     }
     if (!IsPostBack)
     {
         string stuusername = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;
         Literalxingming.Text = StudentInfo.GetStuXingming(stuusername);
     }
     lbl_kecheng.Text = KechengInfo.getKechengname(Session["kechengid"].ToString());
     CheckCeshi();//判断学生有无未完成的测试,如果有,不允许进行其他学习活动,只能进行测试
 }
Ejemplo n.º 5
0
 protected void Page_Init(object sender, EventArgs e)
 {
     if (Request.QueryString["kechengid"] != null)
     {
         Session["kechengid"] = Request.QueryString["kechengid"].Trim();
     }
     else
     {
         if (Session["kechengid"] == null)
         {
             if (KechengInfo.GetKechengCount() > 0)
             {
                 Session["kechengid"] = KechengInfo.MinKechengid().ToString();
             }
             else
             {
                 Response.Redirect("../default.aspx");
             }
         }
     }
     literal_kecheng.Text = KechengInfo.getKechengname(Session["kechengid"].ToString());;
 }
    protected void Page_Init(object sender, EventArgs e)
    {
        if (Session["kechengid"] == null)
        {
            if (KechengInfo.GetKechengCount() > 0)
            {
                Session["kechengid"] = KechengInfo.MinKechengid().ToString();
            }
            else
            {
                Response.Redirect("../default.aspx");
            }
        }
        label_kecheng.Text = KechengInfo.getKechengname(Session["kechengid"].ToString());
        string username    = string.Empty;
        string usershenfen = string.Empty;

        try
        {
            username    = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;
            usershenfen = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.UserData;
        }
        catch
        {
        }
        if (username != string.Empty && usershenfen != string.Empty)
        {
            Literal2.Text       = username;
            user_login.Visible  = false;
            user_logout.Visible = true;
        }
        else
        {
            Literal2.Text       = "游客.";
            user_login.Visible  = true;
            user_logout.Visible = false;
        }
    }
    protected void FinishButton_Click(object sender, EventArgs e)//开始选题,手工组卷和半自动组卷
    {
        //收集用户选择的信息
        string kechengid   = Session["kechengid"].ToString();
        string kechengname = KechengInfo.getKechengname(kechengid);
        string username    = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;
        string ceshiname   = TextBoxceshimingcheng.Text.Trim();                                                              //测试名称
        string xianzhiip   = (chbxianzhiip.Checked ? "是" : "否");                                                             //是否限制IP

        if (CheckCeshiName(int.Parse(kechengid), ceshiname, ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name)) //如果该课程该试卷名称已存在,提示,返回
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('您的该课程的该试卷名称已使用,请选择其它名称。');</script>", false);
            return;
        }
        string ceshibanji    = DropDownList_banji.SelectedItem.Text;              //班级名称
        string banjiid       = DropDownList_banji.SelectedValue;                  //班级ID
        string zujuanfangshi = RadioButtonListzujuanfangshi.SelectedValue.Trim(); //组卷方式,三种
        string xuantifangshi = RadioButtonListxuantifangshi.SelectedValue.Trim(); //选题方式,两种+1zhong
        int    ceshishichang = int.Parse(DropDownList4.SelectedValue);            //测试时长,分钟
        string shifouyunxu   = RadioButtonList9.SelectedValue;                    //是否允许做题
        //获取测试题型
        List <string> tixingsList = new List <string>();                          //要选择哪些题型

        string[] nodeidsshuzu = HiddenFieldnodeandchildren.Value.Split(',');
        string[] tixingshuzu  = HiddenFieldtixings.Value.Split(',');
        foreach (string tixing in tixingshuzu)
        {
            if (tixing.Length > 0)
            {
                tixingsList.Add(tixing);
            }
        }
        //检查选择的题目数是否符合要求
        List <int>[] xuanzetihaoList = new List <int> [tixingsList.Count];//使用List记录每种题型选择的题号,questionid
        for (int i = 0; i < tixingshuzu.Length - 1; i++)
        {
            xuanzetihaoList[i] = new List <int>();
        }
        int manfen = 100;                                     //计划的满分分值

        int[,] timushufenzhi = new int[tixingsList.Count, 4]; //题库中现有的题目数,要选择的题目数,分值,实际选择的题目数
        //统计每种题型计划选择的题目数和预计分值
        for (int i = 0; i < tixingsList.Count; i++)
        {
            timushufenzhi[i, 0] = ((DropDownList)(PlaceHolder1.FindControl("tixing" + tixingsList[i]))).Items.Count - 1;
            timushufenzhi[i, 1] = int.Parse(((DropDownList)(PlaceHolder1.FindControl("tixing" + tixingsList[i]))).SelectedValue);
            timushufenzhi[i, 2] = int.Parse(((DropDownList)(PlaceHolder1.FindControl("timufenzhi" + tixingsList[i]))).SelectedValue);
        }
        #region 获取选择的题号、题目数量
        //获取选择的题号、题目数量
        string   xuanzetihaoliebiao = Labelhidden.Value; //选择的题号questionid,中间用两个逗号分割
        string[] xuanzetihao;                            //选择的题号数组,总的,所有的
        xuanzetihao = xuanzetihaoliebiao.Split(',');     //选择的题号数组,字符串,因为题号间用,,分割,所以该数组中有很多空字符串
        int           tixingIndex;
        string        timutixing;
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["kecheng2012ConnectionString"].ConnectionString;
        SqlCommand comm = conn.CreateCommand();
        conn.Open();
        for (int i = 0; i < xuanzetihao.Length; i++)//统计选择了多少道题
        {
            if (xuanzetihao[i].Length > 0)
            {
                //得到该题的题型
                comm.CommandText = "select type from tb_tiku where questionid=" + xuanzetihao[i];
                timutixing       = comm.ExecuteScalar().ToString();
                tixingIndex      = tixingsList.IndexOf(timutixing);
                //统计每种题型选择了多少道题
                timushufenzhi[tixingIndex, 3]++;
                //将选中的题目的questionid添加到对应列表中
                xuanzetihaoList[tixingIndex].Add(int.Parse(xuanzetihao[i]));//每种题型选择的questionid
            }
        }
        conn.Close();
        #endregion
        #region 判断是否按计划选够了题目
        //判断是否按计划选够了题目
        string xuantixinxi = "";
        bool   xuangoutimu = true; //已选够了题目
        if (xuantifangshi == "0")  //按所选题目组卷,选题数量应等于计划数量
        {
            for (int i = 0; i < tixingsList.Count; i++)
            {
                if (timushufenzhi[i, 3] != timushufenzhi[i, 1])
                {
                    xuantixinxi += tixingsList[i] + "计划选择" + timushufenzhi[i, 1].ToString() + "道,实际选择" + timushufenzhi[i, 3].ToString() + "道。";
                    if (timushufenzhi[i, 3] > timushufenzhi[i, 1])
                    {
                        xuantixinxi += "多选了" + (timushufenzhi[i, 3] - timushufenzhi[i, 1]).ToString() + "道,请去掉" + (timushufenzhi[i, 3] - timushufenzhi[i, 1]).ToString() + "道。";
                    }
                    else
                    {
                        xuantixinxi += "少选了" + (timushufenzhi[i, 1] - timushufenzhi[i, 3]).ToString() + "道,请再选择" + (timushufenzhi[i, 1] - timushufenzhi[i, 3]).ToString() + "道。";
                    }
                    xuangoutimu = false;
                }
            }
        }
        else//随机组卷,选题数量应大于等于计划数量
        {
            for (int i = 0; i < tixingsList.Count; i++)
            {
                if (timushufenzhi[i, 3] < timushufenzhi[i, 1])
                {
                    xuantixinxi += tixingsList[i] + "计划选择" + timushufenzhi[i, 1].ToString() + "道,实际选择" + timushufenzhi[i, 3].ToString() + "道。数量不足,请至少再选择" + (timushufenzhi[i, 1] - timushufenzhi[i, 3]).ToString() + "道。";
                    xuangoutimu  = false;
                }
            }
        }
        if (!xuangoutimu)
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('" + xuantixinxi + "');</script>", false);
            return;
        }
        #endregion
        #region 随机选题
        int xuanzedetihao;
        comm.CommandText = "select count(studentusername) from tb_banjistudent where banjiid=" + banjiid;
        conn.Open();
        int studentRenshu = (int)(comm.ExecuteScalar());                                      //查询学生数量
        conn.Close();
        List <int>[,] stusuijiXuantiList = new List <int> [studentRenshu, tixingsList.Count]; //记录为学生随机选择的题目,记录题型i随机选择的题目在题目ID列表中的下标
        List <int>[] teasuijiXuantiList = new List <int> [tixingsList.Count];                 //记录为教师随机选择的题目编号
        Random       rand          = new Random();
        int          yixuantimushu = 0;
        if (xuantifangshi == "1")          //随机选题//为每个学生随机选择的题目
        {
            if (zujuanfangshi == "全体学生不同") //为每个学生随机选择的题目
            {
                for (int i = 0; i < studentRenshu; i++)
                {
                    for (int j = 0; j < tixingsList.Count; j++)
                    {
                        stusuijiXuantiList[i, j] = new List <int>();
                        yixuantimushu            = 0;
                        while (yixuantimushu < timushufenzhi[j, 1])
                        {
                            xuanzedetihao = rand.Next(timushufenzhi[j, 3]);
                            if (!stusuijiXuantiList[i, j].Contains(xuanzedetihao))
                            {
                                stusuijiXuantiList[i, j].Add(xuanzedetihao);
                                yixuantimushu++;
                            }
                        }
                    }
                }
            }
            else//只组一套卷或全体学生相同
            {
                for (int i = 0; i < teasuijiXuantiList.Length; i++)
                {
                    teasuijiXuantiList[i] = new List <int>();//记录题型i随机选择的题目在题目ID列表中的下标
                }
                for (int i = 0; i < tixingshuzu.Length - 1; i++)
                {
                    yixuantimushu = 0;
                    while (yixuantimushu < timushufenzhi[i, 1])
                    {
                        xuanzedetihao = rand.Next(timushufenzhi[i, 3]);
                        if (!teasuijiXuantiList[i].Contains(xuanzedetihao))
                        {
                            teasuijiXuantiList[i].Add(xuanzedetihao);
                            yixuantimushu++;
                        }
                    }
                }
            }
        }
        #endregion
        //生成试卷,写入数据库

        int shijuanid;//试卷ID号
        int tihao;
        //查看该试卷题目是否可用
        //开始事务
        string        zujuanxinxi     = "";
        bool          chenggong       = false;
        List <string> stuusernameList = new List <string>();
        List <int>    stuxuhaoList    = new List <int>();
        List <string> stuxingmingList = new List <string>();
        StringBuilder zujuanxinxiSB   = new StringBuilder();
        conn.Open();
        comm.CommandText = "select tb_banjistudent.xuhao,tb_banjistudent.studentusername,tb_student.xingming from tb_banjistudent,tb_student where tb_banjistudent.banjiid=" + banjiid + " and tb_banjistudent.studentusername=tb_student.username";
        SqlDataReader sdr = comm.ExecuteReader();
        while (sdr.Read())
        {
            stuxuhaoList.Add(sdr.GetInt32(0));
            stuusernameList.Add(sdr.GetString(1));
            stuxingmingList.Add(sdr.GetString(2));
        }
        sdr.Close();
        //conn.Close();
        //将试卷、试题写入数据库
        //conn.Open();
        SqlTransaction st = conn.BeginTransaction();
        comm.Transaction = st;
        try
        {
            //第一步,写入教师试卷表,得到试卷id
            comm.CommandText = "insert into tb_teachershijuan(teacherusername,ceshiname,kechengid,ceshizhishidian,timelength,manfen,mingtifangshi,yunxuzuoti,ceshibanji,banjiid,yunxuchakan,xianzhiip) values('" + username + "','" + ceshiname + "'," + kechengid + ",'" + HiddenFieldzhishidianname.Value + "'," + ceshishichang + "," + manfen + ",'" + zujuanfangshi + "','" + shifouyunxu + "','" + ceshibanji + "'," + banjiid + ",'" + RadioButtonList10.SelectedValue + "','" + xianzhiip + "') select @@identity as shijuanid";
            shijuanid        = Convert.ToInt32(comm.ExecuteScalar());  //
            //第二步,写入教师题目表
            if (zujuanfangshi == "全体学生相同" || zujuanfangshi == "对学生保密") //根据组卷方式选题,全体学生相同和只组一套卷类似,都是只选一套题
            {
                if (xuantifangshi == "0")                              //严格按照所选题目组卷
                {
                    tihao = 1;
                    for (int i = 0; i < tixingsList.Count; i++)
                    {
                        for (int j = 0; j < xuanzetihaoList[i].Count; j++)
                        {
                            comm.CommandText = "insert into tb_teachershijuantimu(shijuanid,questionid,fenzhi,tihao) values(" + shijuanid + "," + xuanzetihaoList[i][j] + "," + timushufenzhi[i, 2] + "," + tihao + ")";
                            comm.ExecuteNonQuery();
                            tihao++;
                        }
                    }
                }
                else//随机选题方式
                {
                    tihao = 1;
                    for (int i = 0; i < tixingsList.Count; i++)
                    {
                        for (int j = 0; j < timushufenzhi[i, 1]; j++)
                        {
                            //关于题目的questionid,选择的题目ID在xuzetihaoList[]中,每个数组元素是一个ArrayList,
                            //每个ArrayList记录了一种题型选择的questionid
                            //随机选题时,在teasuijiXuantiList中记录了选中的题目在对应ArrayList中的位置
                            //因此,要获取选中的题目的questionid,使用:(int)(xuzetihaoList[i][(int)(teasuijiXuantiList[i][j])])
                            comm.CommandText = "insert into tb_teachershijuantimu(shijuanid,questionid,fenzhi,tihao) values(" + shijuanid + "," + xuanzetihaoList[i][teasuijiXuantiList[i][j]] + "," + timushufenzhi[i, 2] + "," + tihao + ")";
                            comm.ExecuteNonQuery();
                            tihao++;
                        }
                    }
                }
            }
            //第三步:写入学生试卷表
            if (zujuanfangshi == "全体学生相同" || zujuanfangshi == "全体学生不同")//有学生的试卷
            {
                for (int i = 0; i < stuusernameList.Count; i++)
                {
                    zujuanxinxiSB.Append("序号:" + stuxuhaoList[i] + ",姓名:" + stuxingmingList[i] + ",学号:" + stuusernameList[i] + ";<br/>");
                    comm.CommandText = "insert into tb_studentkaoshi(shijuanid,studentusername,zongfen,yunxu,kechengid,banjiid) values(" + shijuanid + ",'" + stuusernameList[i] + "',0,'" + shifouyunxu + "'," + kechengid + "," + banjiid + ")";
                    comm.ExecuteNonQuery();
                }
            }
            else
            {
                zujuanxinxiSB.Append("组卷方式为只组一套卷,对学生保密,用于生成纸质试卷,因此没有为学生生成试卷。");
            }
            //第四步:试题写入学生试题表
            if (zujuanfangshi == "全体学生相同")
            {
                if (xuantifangshi == "0")//严格组卷
                {
                    foreach (string suname in stuusernameList)
                    {
                        tihao = 1;
                        for (int i = 0; i < tixingsList.Count; i++)
                        {
                            for (int j = 0; j < timushufenzhi[i, 1]; j++)
                            {
                                comm.CommandText = "insert into tb_studentkaoshiti(studentusername,shijuanid,questionid,fenzhi,timuhao) values('" + suname + "'," + shijuanid + "," + xuanzetihaoList[i][j] + "," + timushufenzhi[i, 2] + "," + tihao + ")";
                                comm.ExecuteNonQuery();
                                tihao++;
                            }
                        }
                    }
                }
                else//随机选题方式
                {
                    foreach (string suname in stuusernameList)
                    {
                        tihao = 1;
                        for (int i = 0; i < tixingsList.Count; i++)
                        {
                            for (int j = 0; j < timushufenzhi[i, 1]; j++)
                            {
                                comm.CommandText = "insert into tb_studentkaoshiti(studentusername,shijuanid,questionid,fenzhi,timuhao) values('" + suname + "'," + shijuanid + "," + xuanzetihaoList[i][teasuijiXuantiList[i][j]] + "," + timushufenzhi[i, 2] + "," + tihao + ")";
                                comm.ExecuteNonQuery();
                                tihao++;
                            }
                        }
                    }
                }
            }
            else if (zujuanfangshi == "全体学生不同")
            {
                if (xuantifangshi == "1")//随机选题
                {
                    for (int i = 0; i < stuusernameList.Count; i++)
                    {
                        tihao = 1;
                        for (int j = 0; j < tixingsList.Count; j++)
                        {
                            for (int k = 0; k < timushufenzhi[j, 1]; k++)
                            {
                                comm.CommandText = "insert into tb_studentkaoshiti(studentusername,shijuanid,questionid,fenzhi,timuhao) values('" + stuusernameList[i] + "'," + shijuanid + "," + xuanzetihaoList[j][stusuijiXuantiList[i, j][k]] + "," + timushufenzhi[j, 2] + "," + tihao + ")";
                                comm.ExecuteNonQuery();
                                tihao++;
                            }
                        }
                    }
                }
            }
            st.Commit();
            chenggong = true;
        }
        catch (Exception ex)
        {
            st.Rollback();
            zujuanxinxi = ex.Message;
            chenggong   = false;
        }
        finally
        {
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
        if (chenggong)//组卷成功,显示汇总信息,跳转到完成/跳转到Completestep,显示组卷信息
        {
            Labelkecheng.Text          = kechengname;
            Labelbanji.Text            = DropDownList_banji.SelectedItem.Text;
            Labelshichang.Text         = ceshishichang.ToString();
            Labelceshimingcheng.Text   = ceshiname;
            Labeltixing.Text           = HiddenFieldtixings.Value;
            Labelyunxu.Text            = shifouyunxu;
            Labelzujuanfangshi.Text    = zujuanfangshi;
            Literalstudentxiangxi.Text = zujuanxinxiSB.ToString();
            Labelzhishidian.Text       = TreeView1.CheckedNodesText;
            Labelyunxuchakan.Text      = RadioButtonList10.SelectedValue;
            Labelxianzhiip.Text        = (chbxianzhiip.Checked ? "限制IP,学生考试时IP地址必须唯一" : "不限制IP");
            Wizard1.ActiveStepIndex    = 3;
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('" + zujuanxinxi + "');</script>", false);
        }
    }
    protected void StartNextButton_Click(object sender, EventArgs e)//验证是否有班级、题目,如果有,则跳转到下一步
    {
        //查询相关知识点、课程有无任课班级、题目
        bool   banjicunzai = false;
        bool   timucunzai  = false;
        string kechengid   = Session["kechengid"].ToString();
        string username    = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;
        string kechengname = KechengInfo.getKechengname(kechengid);
        //查询是否有班级
        DataSet ds = BanjiInfo.GetTeacherRenkeBanji(username, int.Parse(kechengid));

        if (ds.Tables[0].Rows.Count > 0)
        {
            banjicunzai = true;
        }
        if (!banjicunzai)
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(String), "", "<script language='javascript'>alert('没有找到您任教课程" + kechengname + "的班级,请选择其他班级!');</script>", false);
            return;
        }
        //查询是否有题目
        //显示每种题型的数量,选择数量,分值
        //获取选择的知识点及其下位知识点
        List <string> nodeandchilren    = TreeView1.CheckedNodesAndChildrenIds;// 选择的知识点及其子孙知识点id
        StringBuilder nodeandchildrenSB = new StringBuilder();
        //从题库中查询符合条件的题目
        SqlConnection conn = new SqlConnection();

        conn.ConnectionString = ConfigurationManager.ConnectionStrings["kecheng2012ConnectionString"].ConnectionString;
        SqlCommand comm = conn.CreateCommand();
        //建立临时表,记录选择的知识点id号
        string temptablename = "#temptable" + username + DateTime.Now.Ticks.ToString();

        comm.CommandText = "create table " + temptablename + "(id int)";
        conn.Open();
        comm.ExecuteNonQuery();
        foreach (string nodeid in nodeandchilren)
        {
            nodeandchildrenSB.Append(nodeid + ",");
            comm.CommandText = "insert into " + temptablename + "(id) values(" + int.Parse(nodeid) + ")";
            comm.ExecuteNonQuery();
        }
        //查询符合条件的第一题
        comm.CommandText = "select top 1 questionid from tb_tiku where questionid in( select questionid from tb_timuzhishidian where questionid not in ( select questionid from tb_timuzhishidian where kechengjiegouid not in (select id from " + temptablename + ")))";
        SqlDataReader sdr = comm.ExecuteReader();

        if (sdr.HasRows)
        {
            timucunzai = true;
        }
        sdr.Close();
        conn.Close();
        HiddenFieldnodeandchildren.Value = nodeandchildrenSB.ToString();//把选择的知识点及其下位知识点保存在hiddenfield中,以便以后使用
        if (!timucunzai)
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(String), "", "<script language='javascript'>alert('没有找到您选择的知识点的题目,请选择其他知识点!');</script>", false);
        }
        if (banjicunzai && timucunzai)
        {
            Wizard1.ActiveStepIndex = 1;
        }
    }
    protected void StepNextButton_Click(object sender, EventArgs e)//检查测试名称是否可用,收集组卷信息,跳转到下一步,绑定试题
    {
        //检查测试名称是否可用
        string kechengid = Session["kechengid"].ToString();
        string username  = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.Name;
        string ceshiname = TextBoxceshimingcheng.Text.Trim();          //测试名称
        string xianzhiip = (chbxianzhiip.Checked ? "是" : "否");         //是否限制IP

        if (CheckCeshiName(int.Parse(kechengid), ceshiname, username)) //检查测试名称是否可用
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('您的该课程的该试卷名称已使用,请选择其它名称。');</script>", false);
            return;
        }
        SqlConnection conn = new SqlConnection();

        conn.ConnectionString = ConfigurationManager.ConnectionStrings["kecheng2012ConnectionString"].ConnectionString;
        SqlCommand comm = conn.CreateCommand();
        //检查所选班级有无学生,如果没有学生,则不能组卷
        string banjiid = DropDownList_banji.SelectedValue;//测试班级ID

        comm.CommandText = "select count(studentusername) from tb_banjistudent where banjiid=" + banjiid;
        conn.Open();
        int banjistudentshuliang = (int)(comm.ExecuteScalar());

        conn.Close();
        if (banjistudentshuliang <= 0)
        {
            ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('所选班级没有学生,不能组卷!请前往添加学生。');</script>", false);
            return;
        }
        //收集组卷信息,跳转到下一步
        StringBuilder tixingxuanzexinxi = new StringBuilder();
        string        tishi             = "";

        if (RadioButtonListxuantifangshi.SelectedValue == "0")
        {
            tishi = "应该选择";
        }
        else
        {
            tishi = "应至少选择";
        }
        StringBuilder tishiSB = new StringBuilder();

        string[]      tixingshuzu = HiddenFieldtixings.Value.Split(','); //要选择哪些题型
        DropDownList  tixuzeshuDropdownList;                             //显示某题型有多少道题的
        List <string> tixings = new List <string>();                     //选择了哪些题型

        foreach (string tixing in tixingshuzu)
        {
            if (tixing.Length > 0)
            {
                tixuzeshuDropdownList = (DropDownList)(PlaceHolder1.FindControl("tixing" + tixing));
                if (tixuzeshuDropdownList != null && tixuzeshuDropdownList.SelectedIndex != 0)
                {
                    tixings.Add(tixing);
                    tishiSB.Append(tixing + "有" + (tixuzeshuDropdownList.Items.Count - 1).ToString() + tishi + tixuzeshuDropdownList.SelectedValue + "道.<br/>");
                }
            }
        }
        Literalxuantitishi.Text = tishiSB.ToString();
        //绑定备选题目GridView
        List <string> nodeandchildren = TreeView1.CheckedNodesAndChildrenIds;//选中的知识点及其子孙知识点
        DataTable     dt = GetTimuDataTable(nodeandchildren, tixings);

        GridView1.DataSource = dt;
        GridView1.DataBind();                                //绑定题目gridview
        if (RadioButtonListxuantifangshi.SelectedIndex != 2) //手工组卷和半自动组卷
        {
            Wizard1.ActiveStepIndex = 2;
        }
        else//全自动组卷
        {
            #region 准备工作,获取组卷数据
            List <string> nodeandchilren  = TreeView1.CheckedNodesAndChildrenIds;       //选择的知识点及其子孙知识点id
            StringBuilder timufenzhixinxi = new StringBuilder();
            int           ceshishichang   = int.Parse(DropDownList4.SelectedValue);     //测试时间长度
            string        yunxuzuoti      = RadioButtonList9.SelectedValue;             //是否允许学生做题
            string        ceshibanji      = DropDownList_banji.SelectedItem.Text;       //测试班级
            string        mingtifangshi   = RadioButtonListzujuanfangshi.SelectedValue; //命题方式,统一命题,每个学生的题目不同,对学生保密
            string        yunxuchakan     = RadioButtonList10.SelectedValue;
            int           manfen          = 100;
            #endregion
            bool          zujuanchenggong     = true;
            int           xuanzeshu           = 0;
            int           tifenzhi            = 0;
            List <string> tixingXuanzeList    = new List <string>();
            List <int>    tixingshuliangList  = new List <int>();
            List <int>    tixingfenzhiList    = new List <int>();
            List <int>    studentxuhaoList    = new List <int>();
            List <string> studentxingmingList = new List <string>();
            DropDownList  tifenzhiDropdownList;
            comm.CommandText = "select mingcheng from tb_timuleixing order by tixingid";
            conn.Open();
            SqlDataReader sdr = comm.ExecuteReader();
            while (sdr.Read())
            {
                tixuzeshuDropdownList = (DropDownList)(PlaceHolder1.FindControl("tixing" + sdr.GetString(0)));
                if (tixuzeshuDropdownList != null)
                {
                    xuanzeshu = int.Parse(tixuzeshuDropdownList.SelectedValue);
                    if (xuanzeshu > 0)
                    {
                        timufenzhixinxi.Append(sdr.GetString(0) + ":" + tixuzeshuDropdownList.SelectedValue + "道,每题");
                        tixingXuanzeList.Add(sdr.GetString(0)); //选择了哪些题型
                        tifenzhiDropdownList = (DropDownList)(PlaceHolder1.FindControl("timufenzhi" + sdr.GetString(0)));
                        tixingshuliangList.Add(xuanzeshu);      //每种题型数量
                        tifenzhi = int.Parse(tifenzhiDropdownList.SelectedValue);
                        timufenzhixinxi.Append(tifenzhi.ToString() + "分;");
                        tixingfenzhiList.Add(tifenzhi);//每种题型分值
                    }
                }
            }
            sdr.Close();
            conn.Close();
            List <int>[] beixuanTihaoList   = new List <int> [tixingXuanzeList.Count]; //各种题型备选的questionid列表
            List <int>[] xuanzhongTihaoList = new List <int> [tixingXuanzeList.Count]; //各种题型选中的questionid列表
            for (int i = 0; i < tixingXuanzeList.Count; i++)
            {
                beixuanTihaoList[i]   = new List <int>();
                xuanzhongTihaoList[i] = new List <int>();
            }
            string temptablename = "temp_table" + username + DateTime.Now.Ticks.ToString();
            comm.CommandText = "create table " + temptablename + "(id int)";
            conn.Open();
            comm.ExecuteNonQuery();
            foreach (string nodeid in nodeandchilren)
            {
                comm.CommandText = "insert into " + temptablename + "(id) values(" + int.Parse(nodeid) + ")";
                comm.ExecuteNonQuery();
            }
            string sqlstr = "select questionid,type from tb_tiku where(";
            for (int i = 0; i < tixingXuanzeList.Count; i++)//添加题型条件
            {
                if (i == 0)
                {
                    sqlstr += "type='" + tixingXuanzeList[i] + "'";
                }
                else
                {
                    sqlstr += " or type='" + tixingXuanzeList[i] + "'";
                }
            }
            sqlstr          += ")";
            sqlstr          += " and questionid in ( select questionid from tb_timuzhishidian where questionid not in ( select questionid from tb_timuzhishidian where kechengjiegouid not in (select id from " + temptablename + "))) order by type";
            comm.CommandText = sqlstr;
            sdr = comm.ExecuteReader();
            int tixinghao;
            int tihao;
            while (sdr.Read())
            {
                tixinghao = tixingXuanzeList.IndexOf(sdr.GetString(1));//得到题型在列表中的编号
                beixuanTihaoList[tixinghao].Add(sdr.GetInt32(0));
            }
            sdr.Close();
            //随机选则题目,为统一组卷,全体学生相同或对学生保密的情况
            try
            {
                comm.CommandText = "drop table " + temptablename;
                comm.ExecuteNonQuery();
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            Random r = new Random();
            for (int i = 0; i < tixingXuanzeList.Count; i++)
            {
                tixinghao = 0;
                while (tixinghao < tixingshuliangList[i])
                {
                    tihao = r.Next(beixuanTihaoList[i].Count);
                    if (!xuanzhongTihaoList[i].Contains(tihao))
                    {
                        xuanzhongTihaoList[i].Add(tihao);
                        tixinghao++;
                    }
                }
            }
            //随机选择题目,全体学生不同的情况
            List <string> stuusernameList = new List <string>();//学生用户名列表
            comm.CommandText = "select tb_banjistudent.xuhao,tb_banjistudent.studentusername,tb_student.xingming from tb_banjistudent,tb_student where tb_banjistudent.banjiid=" + banjiid + " and tb_banjistudent.studentusername=tb_student.username order by tb_banjistudent.xuhao";
            conn.Open();
            sdr = comm.ExecuteReader();
            while (sdr.Read())
            {
                studentxuhaoList.Add(sdr.GetInt32(0));
                stuusernameList.Add(sdr.GetString(1));
                studentxingmingList.Add(sdr.GetString(2));
            }
            sdr.Close();
            conn.Close();
            List <int>[,] stusuijiXuantiList = new List <int> [stuusernameList.Count, tixingshuliangList.Count];//记录题型i随机选择的题目在题目ID列表中的下标
            for (int i = 0; i < stuusernameList.Count; i++)
            {
                for (int j = 0; j < tixingshuliangList.Count; j++)
                {
                    stusuijiXuantiList[i, j] = new List <int>();
                }
            }
            //开始随机选题
            for (int i = 0; i < stuusernameList.Count; i++)
            {
                for (int j = 0; j < tixingshuliangList.Count; j++)
                {
                    int yixuantimushu = 0;
                    while (yixuantimushu < tixingshuliangList[j])
                    {
                        tihao = r.Next(beixuanTihaoList[j].Count);
                        if (!stusuijiXuantiList[i, j].Contains(tihao))
                        {
                            stusuijiXuantiList[i, j].Add(tihao);
                            yixuantimushu++;
                        }
                    }
                }
            }
            //写入数据库
            int           shijuanid          = 0;
            StringBuilder studentzujuanxinxi = new StringBuilder();
            conn.Open();
            SqlTransaction st = conn.BeginTransaction();
            comm.Transaction = st;
            try
            {
                //第一步:写入教师试卷表,得到试卷id
                comm.CommandText = "insert into tb_teachershijuan(teacherusername,ceshiname,createtime,timelength,manfen,mingtifangshi,kechengid,ceshibanji,banjiid,yunxuzuoti,yunxuchakan,xianzhiip) values('" + username + "','" + ceshiname + "','" + DateTime.Now.ToString() + "'," + ceshishichang + "," + manfen + ",'" + mingtifangshi + "'," + kechengid + ",'" + ceshibanji + "'," + banjiid + ",'" + yunxuzuoti + "','" + yunxuchakan + "','" + xianzhiip + "') select @@identity as shijuanid";
                shijuanid        = Convert.ToInt32(comm.ExecuteScalar());
                ////写入组卷知识点
                //第二步:写入教师试卷题目表
                if (mingtifangshi == "全体学生相同" || mingtifangshi == "对学生保密")
                {
                    tihao = 1;
                    for (int i = 0; i < tixingXuanzeList.Count; i++)
                    {
                        for (int j = 0; j < xuanzhongTihaoList[i].Count; j++)
                        {
                            comm.CommandText = "insert into tb_teachershijuantimu(shijuanid,questionid,fenzhi,tihao) values(" + shijuanid + "," + beixuanTihaoList[i][xuanzhongTihaoList[i][j]] + "," + tixingfenzhiList[i] + "," + tihao + ")";
                            comm.ExecuteNonQuery();
                            tihao++;
                        }
                    }
                }
                //第三步:写入学生试卷表
                if (mingtifangshi == "全体学生相同" || mingtifangshi == "全体学生不同")
                {
                    for (int i = 0; i < stuusernameList.Count; i++)
                    {
                        comm.CommandText = "insert into tb_studentkaoshi(shijuanid,studentusername,zongfen,yunxu,kechengid,banjiid,jiaojuan) values(" + shijuanid + ",'" + stuusernameList[i] + "',0,'" + yunxuzuoti + "'," + kechengid + "," + banjiid + ",'未开始')";
                        comm.ExecuteNonQuery();
                        studentzujuanxinxi.Append(studentxuhaoList[i].ToString() + ",姓名:" + studentxingmingList[i] + ",学号:" + stuusernameList[i] + ";</br>");
                    }
                }
                else
                {
                    studentzujuanxinxi.Append("组卷类型为只组一套卷,因此没有学生试卷,此试卷对学生报密。");
                }
                //第四步:写入学生试题表
                if (mingtifangshi == "全体学生相同")
                {
                    foreach (string stuusername in stuusernameList)
                    {
                        tihao = 1;
                        for (int i = 0; i < tixingXuanzeList.Count; i++)
                        {
                            for (int j = 0; j < xuanzhongTihaoList[i].Count; j++)
                            {
                                comm.CommandText = "insert into tb_studentkaoshiti(studentusername,shijuanid,questionid,fenzhi,timuhao) values('" + stuusername + "'," + shijuanid + "," + beixuanTihaoList[i][xuanzhongTihaoList[i][j]] + "," + tixingfenzhiList[i] + "," + tihao + ")";
                                comm.ExecuteNonQuery();
                                tihao++;
                            }
                        }
                    }
                }
                else if (mingtifangshi == "全体学生不同")
                {
                    for (int k = 0; k < stuusernameList.Count; k++)
                    {
                        tihao = 1;
                        for (int i = 0; i < tixingXuanzeList.Count; i++)
                        {
                            for (int j = 0; j < tixingshuliangList[i]; j++)
                            {
                                comm.CommandText = "insert into tb_studentkaoshiti(studentusername,shijuanid,questionid,fenzhi,timuhao) values('" + stuusernameList[k] + "'," + shijuanid + "," + beixuanTihaoList[i][stusuijiXuantiList[k, i][j]] + "," + tixingfenzhiList[i] + "," + tihao + ")";
                                comm.ExecuteNonQuery();
                                tihao++;
                            }
                        }
                    }
                }
                st.Commit();
                zujuanchenggong = true;
            }
            catch (Exception ex)
            {
                st.Rollback();
                zujuanchenggong = false;
                ScriptManager.RegisterClientScriptBlock(this, typeof(string), "", "<script language='javascript'>alert('组卷失败!原因:" + ex.Message + ".');</script>", false);
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            if (zujuanchenggong)
            {
                Wizard1.ActiveStepIndex    = 3;
                Labelceshimingcheng.Text   = TextBoxceshimingcheng.Text;
                Labelkecheng.Text          = KechengInfo.getKechengname(kechengid);
                Labelzujuanfangshi.Text    = RadioButtonListzujuanfangshi.SelectedValue;
                Labelzhishidian.Text       = TreeView1.CheckedNodesText;
                Labelyunxu.Text            = RadioButtonList9.SelectedValue;       //是否允许做题
                Labelshichang.Text         = DropDownList4.SelectedValue;          //时长
                Labelbanji.Text            = DropDownList_banji.SelectedItem.Text; //班级
                Labeltixing.Text           = HiddenFieldtixings.Value;
                Literalstudentxiangxi.Text = studentzujuanxinxi.ToString();
                Labelxianzhiip.Text        = (chbxianzhiip.Checked ? "限制IP,学生考试时IP地址必须唯一" : "不限制IP");
                Labelyunxuchakan.Text      = yunxuchakan;
            }
        }//end of全自动组卷
    }