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

📄 automark.cs

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

namespace WindowsApplication1.KaoChangManage
{
    public partial class AutoMark : Form
    {
        SqlConnection cn = new SqlConnection("Server = (local);UID=sa;PWD=sa;Trusted_Connection=True;DATABASE=test1");
        baseclass.BaseOperate boperate = new baseclass.BaseOperate();
        public string username;
        public decimal scorechoose;
        public decimal scorepanduan;
        public decimal scoreprogram;
        
        public AutoMark()
        {
            InitializeComponent();
        }

        private void AutoMark_Load(object sender, EventArgs e)
        {
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            SqlCommand cmd = new SqlCommand("select start from start where id='"+ 1 +"'",cn);
            //考试还没有结束,不可以评分
            if (cmd.ExecuteScalar().ToString() == 1.ToString())
            {
                btnchoose.Enabled = false;
                btnAcount.Enabled = false;
                btnprogram.Enabled = false;
            }
            if (cn.State == ConnectionState.Open)
                cn.Close();
            DataSet myds =
                boperate.getds(
                    "select snumber as 学号, A as 选择题答案,B as 判断题答案,C as 程序题答案编号 from answer ","answer");
            dGridViewpaper.DataSource = myds.Tables[0];
            if (myds.Tables[0].Rows.Count <= 0)
            {
                dGridViewpaper.AllowUserToAddRows = true;
                btnchoose.Enabled = false;
                btnprogram.Enabled = false;
            }
            myds =
                boperate.getds(
                    "select s_number as 学号,A as 选择题成绩 ,B as 判断题成绩 from marks ", "marks");
            dGridViewanswer.DataSource = myds.Tables[0];
            if (myds.Tables[0].Rows.Count <= 0)
            {
                dGridViewanswer.AllowUserToAddRows = true;
            }
            
        }

        private void btnback_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        
        #region 为选择题、判断题评分
        private void btnchoose_Click(object sender, EventArgs e)
        {
            Getmoban();
            decimal[] score = new decimal[2];
            DataSet myds = boperate.getds("select snumber from answer", "answer");
            string[] snumber = new string[myds.Tables[0].Rows.Count];
            int i = 0;
            foreach (DataRow row in  myds.Tables[0].Rows) 
            {
                snumber[i] = row["snumber"].ToString();
                i++;
            }
            for (i = 0; i < snumber.Length; i++)
            {
                if (cn.State == ConnectionState.Closed)
                    cn.Open();
                score = setchoose(snumber[i]);
                SqlCommand cmd = new SqlCommand("select * from marks where s_number='" + snumber[i] + "'", cn);
                if (null == cmd.ExecuteScalar())
                    boperate.getcom("insert into marks(s_number,A,B)values('" + snumber[i] + "','" + score[0] + "','" + score[1] + "')");
                else
                    boperate.getcom("update marks set A ='" + score[0] + "',B='" + score[1] + "'where s_number ='" + snumber[i] + "'");
                if (cn.State == ConnectionState.Open)
                    cn.Close();
            }
            myds =
                boperate.getds(
                    "select s_number as 学号,A as 选择题成绩 ,B as 判断题成绩 from marks ", "marks");
            dGridViewanswer.DataSource = myds.Tables[0];
            if (myds.Tables[0].Rows.Count <= 0)
            {
                dGridViewanswer.AllowUserToAddRows = true;
            }
            
        }
        #endregion

        #region 获得组卷时所用试题模板内容
        public void Getmoban()
        {
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            SqlCommand cmd = new SqlCommand("select idshijuan from paper where s_number ='" + dGridViewpaper.Rows[0].Cells[0].Value.ToString() + "'",cn);
            string idshijuan = cmd.ExecuteScalar().ToString();
            cmd = new SqlCommand("select idmoban from shiti where idshijuan ='"+ idshijuan +"'",cn);
            string idmoban = cmd.ExecuteScalar().ToString();
            DataSet ds = boperate.getds("select * from moban where idmoban ='" + idmoban + "'", "moban");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                //取出模板中选择题分值
                if (row["types"].ToString() == "选择题")
                    scorechoose = Convert.ToDecimal(row["score"].ToString());
                //取出模板中判断题分值
                if (row["types"].ToString() == "判断题")
                    scorepanduan = Convert.ToDecimal(row["score"].ToString());
                //取出模板中程序设计题分值
                if (row["types"].ToString() == "程序设计题")
                    scoreprogram = Convert.ToDecimal(row["score"].ToString());
            }
            if (cn.State == ConnectionState.Open)
                cn.Close();        
        }
        #endregion

        #region 比对选择题、判断题答案
        public decimal[] setchoose(string snumber)
        {
            SqlCommand cmd = new SqlCommand();
            string[][] id = boperate.Extract(snumber);
            string[][] answer = boperate.ExtractAnswer(snumber);
            decimal[] score = new decimal[2];
            score[0] = 0;
            score[1] = 0;
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < id[i].Length; j++)
                {
                    if (i == 0)
                        cmd = new SqlCommand("select answer from choose where id ='" + id[i][j] + "'", cn);
                    if (i == 1)
                        cmd = new SqlCommand("select answer from panduan where id ='" + id[i][j] + "'", cn);
                    if (cmd.ExecuteScalar().ToString() == answer[i][j])
                    {
                        if (i == 0)
                            score[0] += scorechoose;
                        if (i == 1)
                            score[1] += scorepanduan;
                    }
                }
            }
            return score;
        }
        #endregion

        private void btnprogram_Click(object sender, EventArgs e)
        {
            SetProgram program = new SetProgram();
            program.tSTxtTNmae.Text = this.username;
            program.ShowDialog();
        }

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

        private void dGridViewanswer_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            for (int i = 0; i < dGridViewanswer.Rows.Count; i++)
                dGridViewanswer.Rows[i].DefaultCellStyle.BackColor = Color.White;
            dGridViewanswer.CurrentRow.DefaultCellStyle.BackColor = Color.LightSlateGray;
        }
        
        
        #region 汇总成绩
        private void btnAcount_Click(object sender, EventArgs e)
        {
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            SqlCommand cmd = new SqlCommand("select sum(score) from panswer group by snumber",cn);
            decimal C = Convert.ToDecimal(cmd.ExecuteScalar().ToString());
            boperate.getcom("update marks set C='"+ C +"'");
            DataSet myds = boperate.getds("select * from marks ","marks");
            foreach(DataRow row in  myds.Tables[0].Rows)
            {
                decimal totalsum = 0; //总成绩
                totalsum += Convert.ToDecimal(row["A"].ToString());
                totalsum += Convert.ToDecimal(row["B"].ToString());
                totalsum += Convert.ToDecimal(row["C"].ToString());
                string snumber = row["s_number"].ToString();
                boperate.getcom("update marks set score ='"+ totalsum +"'where s_number='"+ snumber +"'");
            }
            if (cn.State == ConnectionState.Open)
                cn.Close();
             if(MessageBox.Show("完成汇总,是否查看成绩?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information) == DialogResult.OK)
             {
                 Mark mark = new Mark();
                 this.Visible = false;
                 mark.Show();
                 this.Close();
             }
        }
        #endregion

    }
}

⌨️ 快捷键说明

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