[C#][Windows窗体程序]实现自动出题并判分


一、pandas是什么?

编写一个Windows程序,实现自动出题并判分的功能。
功能要求:
能使用Random类随机出加减法的题目(2分)
‏能使用if/switch进行答案的判断(2分)
能使用事件处理,当用户答案填正确时,界面上有反馈(如文本框背景颜色的改变)(2分)
能使用Timer控件,自动发出事件,如自动出题(2分)
其他扩充功能(选做),如难题的判断,得分的计算等等(2分)。

二、效果演示

10以内的加减法及相关功能演示

三、代码

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace Calculater
{
    /**
     * C#口算训练程序
     */
    public partial class Form1 : Form
    {
        int sec = 0;  // 计时数字
        int score = 0; // 分数
        int first;  // 第一个数字
        int second;  // 第二个数字
        int speed = 3000; // 自动显示间隔
        bool isOn = false;  //开始标记
        int mode = 1; // 题目类型编号,1代表10以内加减法,2代表20以内加减法,3代表10以内乘法
        

        public Form1()
        {
            InitializeComponent();
        }


        /**
         * 开始按钮被点击
         */
        private void btn_next_Click(object sender, EventArgs e)
        {
            text_result.Text = null;
            text_result.Enabled = true;
            text_result.Focus();
            lab_time.Enabled = true;
            // 题目计时开始
            timer1.Start();

            // 自动显示下一题计时开始
            if (checkBox1.Checked)
            {
                timer2.Start();
            }

            // 开始后复选框禁用
            checkBox1.Enabled = false;
            checkBox2.Enabled = false;
            if (isOn)
            {
                start();
            }
            else
            {
                isOn = true;
                btn_next.Text = "下一题";
                btn_next.Width = 50;
                btn_stop.Visible = true;
                return;
            }

        }

        /**
         * 结束按钮被点击
         */
        private void btn_stop_Click(object sender, EventArgs e)
        {
            isOn = false;
            text_result.Enabled = false;
            btn_next.Width = 112;
            lab_score.Text = "0";
            btn_next.Text = "开始";
            btn_stop.Visible = false;
            checkBox1.Enabled = true;
            checkBox2.Enabled = true;
            
            // 秒数归零,停止计时
            lab_time.Enabled = false;
            lab_time.Text = "0s";
            timer1.Stop();
            timer2.Stop();

            MessageBox.Show("本次得分:"+score.ToString() + "\n" + "用时" + sec + "秒");
            score = 0;
            sec = 0;
        }

        /**
         * 刷新题目
         */
        private void start()
        {
            switch (mode)
            {
                case 1:
                    Mode_Ten();
                    break;
                case 2:
                    Mode_Twen();
                    break;
                case 3:
                    Mode_Modi();
                    break;
            }
        }

        /**
         * 绑定快捷键Enter进行下一题
         */
        private void text_result_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//如果输入的是回车键  
            {

                if (CheckResult())
                {
                    img_isR.Image = Properties.Resources.对号2;
                    score++;
                    lab_score.Text = score.ToString();
                }
                else img_isR.Image = Properties.Resources.错误_wrong;
                text_result.Text = null;
                start();
                
            }
        }

        /**
         * 10以内乘法
         */
        private void Mode_Modi() 
        {
            //设置随机数
            Random rd1 = new Random();
            //生成1-10的随机数
            num1.Text = rd1.Next(1, 10).ToString();
            num2.Text = rd1.Next(1, 10).ToString();
            lab_mode.Text = "×";
            first = int.Parse(num1.Text);
            second = int.Parse(num2.Text);
        }



        /**
         * 10以内加减法
         */
        private void Mode_Ten()
        {
            //设置随机数
            Random rd1 = new Random();

            //生成1-10的随机数
            num1.Text = rd1.Next(1, 10).ToString();
            num2.Text = rd1.Next(1, 10).ToString();

            first = int.Parse(num1.Text);
            second = int.Parse(num2.Text);
            //随机加减法
            if (rd1.Next(1, 10) > 5)
            {
                lab_mode.Text = "+";
            }
            else
            {
                lab_mode.Text = "-";
                second *= -1;
            }

        }


        /**
         * 20以内加减法
         */
        private void Mode_Twen()
        {
            //设置随机数
            Random rd1 = new Random();

            //生成1-20的随机数
            num1.Text = rd1.Next(1, 20).ToString();
            num2.Text = rd1.Next(1, 20).ToString();


            first = int.Parse(num1.Text);
            second = int.Parse(num2.Text);
            //随机加减法
            if (rd1.Next(1, 10) > 5)
            {
                lab_mode.Text = "+";
            }
            else
            {
                lab_mode.Text = "-";
                second *= -1;
            }
        }



        /**
         * 题目检查事件
         */
        private bool CheckResult()
        {
            int result = 0;
            try
            {
                result = int.Parse(text_result.Text);
            }
            catch(Exception e)
            {
                MessageBox.Show("答案输入有误!!");
            }
            switch (mode)
            {
                case 1:
                    if (checkBox2.Checked) lab_as1.Text = first.ToString() + lab_mode.Text + num2.Text + "=" + result.ToString();
                    if (result == first + second) {
                        return true;
                    }
                    break;
                case 2:
                    if (checkBox2.Checked) lab_as1.Text = first.ToString() + lab_mode.Text + num2.Text + "=" + result.ToString();
                    if (result == first + second) {
                        return true;
                    } 
                    break;
                case 3:
                    if (checkBox2.Checked) lab_as1.Text = first.ToString() + lab_mode.Text + num2.Text + "=" + result.ToString();
                    if (result == first * second) {
                        return true;
                    }
                    break;
            }
            return false;
        }



        /**
         * 三种题目类型变更事件
         */
        private void rbtn_modeTen_CheckedChanged(object sender, EventArgs e)
        {
            mode = 1;
            start();
        }

        private void rbtn_modeTwen_CheckedChanged(object sender, EventArgs e)
        {
            mode = 2;
            start();
        }
        private void rbtn_modeModi_CheckedChanged(object sender, EventArgs e)
        {
            
            mode = 3;
            start();
        }

        /**
         * 自动显示下一题选中后按钮的禁用与启用
         */
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

            if (checkBox1.Checked)
            {
                btn_fast.Enabled = true;
                btn_slow.Enabled = true;
                
            }
            else
            {
                btn_fast.Enabled = false;
                btn_slow.Enabled = false;
            }
        }

        /**
         * 自动显示答案选中后按钮的禁用与启用
         */
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                lab_as0.Enabled = true;
                lab_as1.Enabled = true;
            }
            else
            {
                lab_as0.Enabled = false;
                lab_as1.Enabled = false;
            }
        }


        /**
         * 用时计时器每秒事件
         */
        private void timer1_Tick(object sender, EventArgs e)
        {
            sec++;
            lab_time.Text = sec + "s";
        }

        /**
         * 自动显示题目每秒事件
         */
        private void timer2_Tick(object sender, EventArgs e)
        {
            start();
        }


        /**
         * 快一些
         */
        private void btn_fast_Click(object sender, EventArgs e)
        {
            if (speed - 1000 == 0) { 
                btn_fast.Enabled = false;
                return;
            }
            
            speed -= 1000;
            timer2.Interval = speed;
            btn_slow.Enabled = true;
        }

        /**
         * 慢一些
         */
        private void btn_slow_Click(object sender, EventArgs e)
        {

            if (speed + 1000 == 5000) { 
                btn_slow.Enabled = false;
                return;
            } 
            speed += 1000;
            timer2.Interval = speed;
            btn_fast.Enabled = true;

        }
    }
}


四、补充

两三个小时的速成版本可能有bug,虽然已经尽量考虑到用户体验但仍然存在一些不算很友好的设计问题,嗐姑且这样子了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值