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

📄 testform.cs

📁 计算机考试管理系统 包括模拟测试
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;

namespace CTestApp
{
    public partial class TestForm : Form
    {
        protected SqlConnection conn;
        protected int m_testID;
        protected int m_questions;
        protected DataTable m_testTable;
        protected int[] m_answers;
        protected RadioButton[] radioButtons;
        protected CheckBox[] checkBoxes;

        public TestForm(int testID)
        {
            InitializeComponent();
            m_testID = testID;
        }

        private void TestForm_Load(object sender, EventArgs e)
        {
            try
            {
                conn = new SqlConnection(ConfigurationManager.ConnectionStrings["TestLibraryConnectionString"].ConnectionString);
                conn.Open();
                m_testTable = new DataTable();
                this.GetTest();
            }
            catch (Exception exp)
            {
                MessageBox.Show("无法建立数据连接:" + exp.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
            finally
            {
                if (conn != null && conn.State != ConnectionState.Closed)
                    conn.Close();
            }
            radioButtons = new RadioButton[] { radioButton1, radioButton2, radioButton3, radioButton4 };
            checkBoxes = new CheckBox[] { checkBox1, checkBox2, checkBox3, checkBox4 };
            if (m_questions > 0)
            {
                for (int i = 1; i <= m_questions; i++)
                    listBox1.Items.Add(string.Format("第{0}题", i));
                listBox1.SelectedIndex = 0;
            }
        }

        private void TestForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            listBox1.SelectedIndex--;
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            listBox1.SelectedIndex++;
        }

        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确认结束答题并交卷吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                return;
            try
            {
                conn.Open();
                this.SubmitTestPaper();
                MessageBox.Show("提交成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception exp)
            {
                MessageBox.Show("提交失败,请与考试管理员联系:" + exp.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            finally
            {
                if (conn != null && conn.State != ConnectionState.Closed)
                    conn.Close();
            }
            this.Close();
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.LoadQuestion(listBox1.SelectedIndex);
            this.ShowAnswer(listBox1.SelectedIndex);
            if (listBox1.SelectedIndex == 0)
            {
                btnPrev.Enabled = false;
            }
            else
            {
                btnPrev.Enabled = true;
            }
            if (listBox1.SelectedIndex == m_questions - 1)
            {
                btnNext.Enabled = false;
            }
            else
            {
                btnNext.Enabled = true;
            }
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if(radioButton1.Checked)
                m_answers[listBox1.SelectedIndex] = 1;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked)
                m_answers[listBox1.SelectedIndex] = 2;
        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton3.Checked)
                m_answers[listBox1.SelectedIndex] = 3;
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton4.Checked)
                m_answers[listBox1.SelectedIndex] = 4;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
                m_answers[listBox1.SelectedIndex] += 1;
            else
                m_answers[listBox1.SelectedIndex] -= 1;
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
                m_answers[listBox1.SelectedIndex] += 2;
            else
                m_answers[listBox1.SelectedIndex] -= 2;
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked)
                m_answers[listBox1.SelectedIndex] += 4;
            else
                m_answers[listBox1.SelectedIndex] -= 4;
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked)
                m_answers[listBox1.SelectedIndex] += 8;
            else
                m_answers[listBox1.SelectedIndex] -= 8;
        }

        /// <summary>
        /// 读取测试试题
        /// </summary>
        protected void GetTest()
        {
            SqlCommand cmd1 = new SqlCommand("GetTest", conn);
            cmd1.CommandType = CommandType.StoredProcedure;
            SqlParameter par1 = new SqlParameter("@testID", SqlDbType.Int);
            par1.Value = m_testID;
            cmd1.Parameters.Add(par1);
            m_testTable.Load(cmd1.ExecuteReader());
            m_questions = m_testTable.Rows.Count;
            m_answers = new int[m_questions];
        }

        /// <summary>
        /// 载入测试题内容
        /// </summary>
        /// <param name="index">题号</param>
        protected void LoadQuestion(int index)
        {
            DataRow row1 = m_testTable.Rows[index];
            lbQuestion.Text = (string)row1[0];
            int iType = (int)row1["QuestionType"];
            if (iType == 0)
            {
                radioButton1.Text = (string)row1["ChoiceA"];
                radioButton2.Text = (string)row1["ChoiceB"];
                radioButton3.Text = (string)row1["ChoiceC"];
                radioButton4.Text = (string)row1["ChoiceD"];
                for (int i = 0; i < 4; i++)
                {
                    radioButtons[i].Visible = true;
                    checkBoxes[i].Visible = false;
                }
            }
            else if (iType == 1)
            {
                checkBox1.Text = (string)row1["ChoiceA"];
                checkBox2.Text = (string)row1["ChoiceB"];
                checkBox3.Text = (string)row1["ChoiceC"];
                checkBox4.Text = (string)row1["ChoiceD"];
                for (int i = 0; i < 4; i++)
                {
                    radioButtons[i].Visible = false;
                    checkBoxes[i].Visible = true;
                }
            }
        }

        /// <summary>
        /// 显示考生已做出的答案选择
        /// </summary>
        /// <param name="index"></param>
        protected void ShowAnswer(int index)
        {
            int iType = (int)m_testTable.Rows[index]["QuestionType"];
            if (iType == 0)
            {
                radioButton1.CheckedChanged -= this.radioButton1_CheckedChanged;
                for (int i = 0; i < 4; i++)
                    radioButtons[i].Checked = false;
                if (m_answers[index] > 0)
                    radioButtons[m_answers[index] - 1].Checked = true;
                radioButton1.CheckedChanged += this.radioButton1_CheckedChanged;
            }
            else if (iType == 1)
            {
                checkBox1.CheckedChanged -= this.checkBox1_CheckedChanged;
                checkBox2.CheckedChanged -= this.checkBox2_CheckedChanged;
                checkBox3.CheckedChanged -= this.checkBox3_CheckedChanged;
                checkBox4.CheckedChanged -= this.checkBox4_CheckedChanged;
                for (int i = 0; i < 4; i++)
                    checkBoxes[i].Checked = ((m_answers[index] >> i) % 2 == 1);
                checkBox1.CheckedChanged += this.checkBox1_CheckedChanged;
                checkBox2.CheckedChanged += this.checkBox2_CheckedChanged;
                checkBox3.CheckedChanged += this.checkBox3_CheckedChanged;
                checkBox4.CheckedChanged += this.checkBox4_CheckedChanged;
            }
        }

        /// <summary>
        /// 提交考试答案
        /// </summary>
        protected void SubmitTestPaper()
        {
            StringBuilder sb1 = new StringBuilder();
            for (int i = 0; i < m_answers.Length; i++)
            {
                if ((int)m_testTable.Rows[i]["QuestionType"] == 0)
                    sb1.Append(m_answers[i]);
                else
                    sb1.Append(MultiAnswer.FromByte((byte)m_answers[i]).ToString());
                sb1.Append(' ');
            }
            SqlCommand cmd1 = new SqlCommand("SubmitTestPaper", conn);
            cmd1.CommandType = CommandType.StoredProcedure;
            SqlParameter par1 = new SqlParameter("@TestID", SqlDbType.Int);
            par1.Value = m_testID;
            cmd1.Parameters.Add(par1);
            par1 = new SqlParameter("@TesteeNumber", SqlDbType.NChar, 5);
            par1.Value = tbTesteeNumber.Text;
            cmd1.Parameters.Add(par1);
            par1 = new SqlParameter("@Answers", SqlDbType.NVarChar, 2048);
            par1.Value = sb1.ToString();
            cmd1.Parameters.Add(par1);
            cmd1.ExecuteNonQuery();
        }
    }
}

⌨️ 快捷键说明

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