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

📄 seatsite.cs

📁 程序设计语言上机考试系统
💻 CS
字号:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsApplication1.KaowuManage
{
    public partial class SeatSite : Form
    {
        SqlConnection cn = new SqlConnection("SERVER=(local);UID=sa;PWD=sa;Trusted_Connection=True;DATABASE=test1");
        baseclass.BaseOperate boperate = new baseclass.BaseOperate();
        protected string M_str_sql = "select * from student order by s_number";
        protected string M_str_table = "student";
        public SeatSite()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 返回
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnBack_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        
        #region 分配座次
        private void btnOK_Click(object sender, EventArgs e)
        {
            int knum = 0; //考场中可以容纳的考生数量
            string kname;  //考场名称
            DataSet mydskchang = boperate.getds("select kname,capcity from kaochang", "kaochang");
            DataTable dtchang = mydskchang.Tables[0];
            foreach (DataRow row in dtchang.Rows)
            {
                knum += Convert.ToInt32(row["capcity"].ToString());
            }

            //begin分配到该考场的第一个学生的编号
            //end分配到该考场的最后一个学生的编号
            int begin = 1, end = 1;
            DataSet myds = boperate.getds(M_str_sql, M_str_table);
            DataTable dt = myds.Tables[0];

            int totalnum = dt.Rows.Count; //考生总数
            if (knum < totalnum)
                MessageBox.Show("考生数量大于考场容量,请重新设置考场!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                foreach (DataRow row in dtchang.Rows)
                {
                    //如果没有分配考场的考生数量大于0,继续循环分配考场
                    if (totalnum > 0)
                    {
                        end += Convert.ToInt32(row["capcity"].ToString());
                        //统计还没有分配考场的考生数量
                        totalnum -= Convert.ToInt32(row["capcity"].ToString());
                        kname = row["kname"].ToString();
                        //为考生分配座次
                        seat(begin, end, dt, kname);
                        begin = end;
                    }
                        //如果没有分配考场的考生数量小于0,退出循环,考场分配完毕
                    else
                        break;
                }
                myds = boperate.getds("select s_number as 学号,zuoweiid as 座位号,kname as 考场名称,loginstatus as 登陆状态 from zuoci order by kname", "zuoci");
                dataGridView1.DataSource = myds.Tables[0];
            }
        }
        #endregion

        #region 判断座次表是否为空
        public bool IsZuoCiEmpity()
        {
            SqlCommand cmd = new SqlCommand("select * from zuoci",cn);
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            if( cmd.ExecuteScalar() != null)
            {
                MessageBox.Show("请先清空座次表再分配座次", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            if (cn.State == ConnectionState.Open)
                cn.Close();
            return true;
        }
        #endregion

        #region 依次为每个考场分配考生,直到所有考生分配完毕
        /// <summary>
        /// 依次为每个考场分配考生,直到所有考生分配完毕
        /// </summary>
        /// <param name="begin">begin分配到该考场的第一个学生的编号</param>
        /// <param name="end">end分配到该考场的最后一个学生的编号</param>
        /// <param name="dt">学生信息表</param>
        /// <param name="kname">考场名称</param>
        public void seat(int begin,int end,DataTable dt,string kname)  
        {
            int i = 1;
            foreach(DataRow row in dt.Rows )
            {
                if(i >= begin && i <= end)
                {
                    boperate.getcom("insert into zuoci(s_number,zuoweiid,kname,loginstatus,remaintime) values('" + row["s_number"] + "','" + i + "','" + kname +"','" + "未登录" + "','"+ 0 +"')");
                }
                i++;
            }
        }
        #endregion

        private void SeatSite_Load(object sender, EventArgs e)
        {
            //如果座次表不为空,不可以分配座次
            if (!IsZuoCiEmpity())
                btnOK.Enabled = false;
            DataSet myds = boperate.getds("select s_number as 学号,zuoweiid as 座位号,kname as 考场名称,loginstatus as 登陆状态 from zuoci order by kname", "zuoci");
            dataGridView1.DataSource = myds.Tables[0];
            if (myds.Tables[0].Rows.Count <= 0)
            {
                dataGridView1.AllowUserToAddRows = true;
            }
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count ; i++)
                dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.White;
            dataGridView1.CurrentRow.DefaultCellStyle.BackColor = Color.LightSlateGray;
        }
       
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -