C# WinForms 制作简易在线答题系统源码
本文分享如何使用 C# WinForms 快速构建一个具备倒计时、自动判分功能的考试答题系统。文中详细解析了从起始页到答题界面的逻辑跳转,以及如何利用 Timer 和控件遍历实现核心业务,适合初学者理解 Windows 桌面应用的基础开发流程。
系统效果展示
本示例系统包含四个主要交互阶段,整体界面简洁,功能明确:
1. 起始页:用户点击按钮进入答题流程,关闭选项位于此页面。
2. 答题界面:显示题目与选项,右上角设有倒计时时钟,顶部可导航返回起始页。
3. 时间截止提示:当倒计时归零时,系统自动停止计时并弹出提示信息。
4. 提交与结算:考生主动点击交卷或时间耗尽后,系统计算得分并显示正确率。
核心逻辑与代码实现
第1步:构建起始页(Start)
目的:作为程序入口,处理初始化及界面跳转逻辑。
关键动作:实例化考试窗体并隐藏当前窗口。
public partial class Start : Form
{
public Start()
{
InitializeComponent();
}
// 退出应用程序
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
// 进入考试主界面
private void button1_Click(object sender, EventArgs e)
{
Test t = new Test(); // 实例化考试类
t.Show(); // 显示考试窗体
this.Hide(); // 隐藏当前起始页,保持后台驻留
}
}
第2步:实现考试主界面(Test)
目的:管理答题状态、倒计时逻辑及分数统计。
关键参数:currentTime 记录剩余秒数,num 记录答对题数。
初始化设置:加载窗体时启用定时器,设定间隔为 1000 毫秒(1秒)。
public partial class Test : Form
{
public int currentTime = 20; // 假设初始时间为20秒
public int num = 0; // 答对数量
public Test()
{
InitializeComponent();
button2.Visible = false; // 初始隐藏“重新答题”按钮
}
private void Test_Load(object sender, EventArgs e)
{
timer1.Interval = 1000; // 设定每秒触发一次
timer1.Start(); // 启动倒计时
}
}
第3步:倒计时与超时处理
操作逻辑:每次 Tick 事件减少秒数,若归零则锁定界面并播放提示音。
private void timer1_Tick(object sender, EventArgs e)
{
// 获取标签中显示的剩余时间
currentTime = Convert.ToInt32(label2.Text);
currentTime -= 1;
label2.Text = Convert.ToString(currentTime);
if (currentTime == 0)
{
timer1.Stop(); // 停止计时
System.Media.SystemSounds.Asterisk.Play(); // 播放系统提示音
MessageBox.Show("时间到!", "提示",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
第4步:主观题判分机制
原理:利用 foreach 遍历 GroupBox 容器内的所有控件,检查 RadioButton 的选中状态及其文本内容是否匹配预设答案标识(如 “✔”)。
// 提交答卷按钮逻辑
private void button1_Click(object sender, EventArgs e)
{
// 对所有题目组进行批阅
Check(groupBox1, "✔");
Check(groupBox2, "✔");
Check(groupBox3, "✔");
Check(groupBox4, "✔");
Check(groupBox5, "✔");
// 禁用所有选项防止篡改
DisableAllRadioButtons();
// 更新得分显示
label6.Text = "答对题数: " + num;
label7.Text = "总分: " + (num * 20).ToString(); // 假设每题20分
this.timer1.Stop(); // 停止计时器
button2.Visible = true; // 显示重做/查看结果按钮
}
// 批阅单个题组的通用方法
public void Check(GroupBox s, String db)
{
foreach(Control D in s.Controls)
{
// 仅处理 RadioButton 控件
if (D is RadioButton rb)
{
// 判断是否被选中且为首字母匹配正确答案
if (rb.Checked && rb.Text.Substring(0, 1) == db)
{
num++;
}
}
}
}
private void DisableAllRadioButtons()
{
// 此处应遍历所有 groupBox 禁用相关控件
// 为节省篇幅,省略具体每个 radioButton 的 .Enabled = false 代码
a.Enabled = b.Enabled = false;
// ...其他控件同理
}
第5步:重置答题环境
场景:用户点击“重新开始”或完成上一轮后,清空勾选状态并恢复计时器。
public void Clean(GroupBox s)
{
foreach(Control D in s.Controls)
{
if (D is RadioButton rb && rb.Checked)
{
rb.Checked = false; // 清除选中状态
}
}
}
private void button2_Click(object sender, EventArgs e)
{
// 重置时间与分数显示
label2.Text = "20";
label6.Text = "0";
label7.Text = "0";
// 重新启动计时器
timer1.Start();
timer1.Interval = 1000;
// 清理所有题目的选择状态
Clean(groupBox1);
Clean(groupBox2);
Clean(groupBox3);
Clean(groupBox4);
Clean(groupBox5);
// 重新激活选项输入
EnableAllRadioButtons();
button2.Visible = false;
num = 0;
}
应用图标配置
为了使生成的 .exe 程序更具专业性,建议修改项目属性中的图标设置。可在 Visual Studio 项目属性面板中找到 “应用程序” 选项卡,指定 .ico 格式的图标文件。
在发布前确认图标资源已嵌入,避免运行程序时显示默认齿轮图标。
以上就是基于 C# 制作简易考试答题系统的详细内容,更多关于 C# 窗口程序开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













