📄 testform.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 + -