数学四则运算(二)结对编程 1.2

 需求分析

     本次我们做的程序是数学的四则混合运算,并且增加了部分人性化的功能,接下来,我们谈谈这个程序的相关需求,此程序是一个110的四则混合运算,那么可以想到主要用于小学生,(ps 个人想法,不排除其他高年级的使用,因为用户可以输入任意的随机数范围),此外,本程序还可能会出现在家庭、教育机构和部分教学网站上面,因为他们可能会给学生出一些简单的数学题目,可以自由设置测试时间,题目数量等内容,而这一程序正好解决了这一个问题,我想,产品的需求必须首先知道用户需要什么,要以客户为中心。而这个产品正好解决了这个问题。所以,我感觉这个产品的需求应该挺不错的。

 设计思路

     用户第一步可以先自由设定题目的数量,测试时间,随机数产生的范围,括号出现的位置等,这样做的目的不仅使客户完成了测试,最主要的是可以自由设置相关内容,更加适合不同层次的客户。

 

     2 如果用户没有进行相关内容的设置,(PS题目数量用户不设置也可以进行下一步)那么系统会自动进行提示,这样可以使软件与客户的交互性更强,进而更加符合用户的使用习惯。

如果用户相关内容设置完毕,并且点击计时开始按钮,系统会根据用户设定的相关内容,自动产生符合用户的随机数、题目数量和测试时间等,那么,接下来用户就可以进行系统给出的相关内容进行计算了。

 

当用户设置的测试时间或者题目数量进行完毕时,那么系统会自动给出提示,并且统计和显示出来题目总数,题目正确数,题目错误数,题目正确率,做题速度等内容。(ps 当然用户自行点击结束时,也可以给出来相关提示)

  代码书写

   Form1代码:

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

namespace sizeyunsuan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public static int count = 0; //定义题目总数,正确数,四则运算等变量
        public static int right = 0;
        public static int sum;
        public static int lefttime;
        public static int m1, m2;
        public static int time;
        public void RandomNum() //定义随机产生随机数的方法
        {
            try
            {
                Random ran = new Random();
                int n1, n2,n3;
                m1 = Convert.ToInt32(textBox5.Text);
                m2 = Convert.ToInt32(textBox6.Text);
                n1 = ran.Next(m1, m2);
                n2 = ran.Next(m1, n1);
                n3 = ran.Next(m1, n2);
                textBox2.Text = n1.ToString();
                textBox3.Text = n2.ToString();
                textBox1.Text = n3.ToString();
                textBox4.Text = ""; 
            }
            catch (Exception ex)
            {
                MessageBox.Show("请输入数值范围");
            }
        }
        public void fuhao() //定义随机产生符号的方法
        {
            Random ran = new Random();
            int   n1, n2;
            n1 = ran.Next(1,5);
            n2 = ran.Next(1,5);
            if ((n1 == 1))
            {
                label2.Text = "+";
                 
            }
            if ((n1 == 2))
            {
                label2.Text = "-";
                
            }
            if ((n1 == 3))
            {
                label2.Text = "*";
               
            }
            if ((n1 == 4))
            {
                label2.Text = "/";
                
            }
            if ((n2 == 1))
            {
                label3.Text = "+";

            }
            if ((n2 == 2))
            {
                label3.Text = "-";

            }
            if ((n2 == 3))
            {
                label3.Text = "*";

            }
            if ((n2 == 4))
            {
                label3.Text = "/";

            }
        }
        private void button1_Click(object sender, EventArgs e) //计时开始按钮的单击事件
        {
            int minute;
            try
            {
                minute = int.Parse(this.textBox7.Text);
            }
            catch (System.Exception ex)
            {
                this.label8.Text = "输入错误";
                return;
            }
            lefttime = minute;
            this.timer1.Interval = 1000;
            this.timer1.Enabled = true;
            this.timer1.Start();
            fuhao();
            RandomNum();
        }
        private void textBox4_KeyDown(object sender, KeyEventArgs e) //触发enter键的事件
        {             
               
                int n = Convert.ToInt32(textBox8.Text);
                int result;                                       
                int a = (int.Parse(textBox2.Text));
                int b = (int.Parse(textBox3.Text));
                int c = (int.Parse(textBox1.Text));
                string m = label2.Text + label3.Text;
                if((label1.Text == "")&&(label13.Text == "")&&(label16.Text == "")&&(label15.Text == "")) //无括号的运算方式
               {
                switch (m)
                {
                    case "+-":
                        sum = a + b - c;
                        break;
                    case "++":
                        sum = a + b + c;
                        break;
                    case "+*":
                        sum = a + b * c;
                        break;
                    case "+/":
                        sum = a + b * c;
                        break;
                    case "--":
                        sum = a - b - c;
                        break;
                    case "-+":
                        sum = a - b + c;
                        break;
                    case "-*":
                        sum = a - b * c;
                        break;
                    case "-/":
                        sum = a + b /c;
                        break;
                    case "*-":
                        sum = a *b - c;
                        break;
                    case "*+":
                        sum = a * b + c;
                        break;
                    case "**":
                        sum = a * b * c;
                        break;
                    case "*/":
                        sum = a *b /c;
                        break;
                    case "/-":
                        sum = a / b - c;
                        break;
                    case "/+":
                        sum = a / b + c;
                        break;
                    case "/*":
                        sum = a / b * c;
                        break;
                    case "//":
                        sum = a / b /c;
                        break;
                    default:
                        break;
                }
            }
                if ((label1.Text == "(") && (label13.Text == ")") ) //前两个数字有括号的方法
                {
                    switch (m)
                    {
                        case "+-":
                            sum = (a + b) - c;
                            break;
                        case "++":
                            sum = (a + b )+ c;
                            break;
                        case "+*":
                            sum = (a + b) * c;
                            break;
                        case "+/":
                            sum = (a + b) * c;
                            break;
                        case "--":
                            sum = (a - b) - c;
                            break;
                        case "-+":
                            sum = (a - b) + c;
                            break;
                        case "-*":
                            sum = (a - b) * c;
                            break;
                        case "-/":
                            sum = (a + b) / c;
                            break;
                        case "*-":
                            sum = (a * b) - c;
                            break;
                        case "*+":
                            sum = (a * b) + c;
                            break;
                        case "**":
                            sum = (a * b) * c;
                            break;
                        case "*/":
                            sum = (a * b) / c;
                            break;
                        case "/-":
                            sum = (a / b )- c;
                            break;
                        case "/+":
                            sum = (a / b) + c;
                            break;
                        case "/*":
                            sum = (a / b) * c;
                            break;
                        case "//":
                            sum = (a / b) / c;
                            break;
                        default:
                            break;
                    }
                }
                if ((label16.Text == "(") && (label15.Text == ")")) //后两个数字有括号
                {
                    switch (m)
                    {
                        case "+-":
                            sum = a + (b - c);
                            break;
                        case "++":
                            sum = a + (b + c);
                            break;
                        case "+*":
                            sum = a + (b * c);
                            break;
                        case "+/":
                            sum = a + (b * c);
                            break;
                        case "--":
                            sum = a - (b - c);
                            break;
                        case "-+":
                            sum = a - (b + c);
                            break;
                        case "-*":
                            sum = a - (b * c);
                            break;
                        case "-/":
                            sum = a + b / c;
                            break;
                        case "*-":
                            sum = a * (b - c);
                            break;
                        case "*+":
                            sum = a * (b + c);
                            break;
                        case "**":
                            sum = a * (b * c);
                            break;
                        case "*/":
                            sum = a *( b / c);
                            break;
                        case "/-":
                            sum = a / (b - c);
                            break;
                        case "/+":
                            sum = a /( b + c);
                            break;
                        case "/*":
                            sum = a / (b * c);
                            break;
                        case "//":
                            sum = a / (b / c);
                            break;
                        default:
                            break;
                    }
                }
                        if (e.KeyCode == Keys.Enter)  //判断输入值是否为数字
                        {
                            if (int.TryParse(textBox4.Text, out result) == false)
                            {
                                MessageBox.Show("请输入数字");
                                count++;
                            }
                            else
                            {
                                if (textBox4.Text == sum.ToString())
                                {
                                    right++;
                                    count++;
                                    RandomNum();
                                    fuhao();
                                }
                                else
                                {
                                    count++;
                                    RandomNum();
                                    fuhao();
                                }
                            }
                         }
                        if (n == count) //判断题目数量,是否结束运算
                        {
                            MessageBox.Show("题目答完,请重新开始");
                            textBox3.Enabled = false;
                            Form2 frm2 = new Form2();
                            frm2.ShowDialog();
                            this.Close();
                        }
            }
      
        private void button2_Click(object sender, EventArgs e) //点击结束按钮事件
        {
            textBox3.Enabled = false;
            Form2 frm2 = new Form2();
            frm2.ShowDialog();
            this.Close();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            this.label3.Text = this.textBox1.Text;
        }

        public void timer1_Tick(object sender, EventArgs e )//定义计时器
        {
            time = Convert.ToInt32(textBox7.Text);
            if (lefttime <= 0)
            {
                timer1.Enabled = false;
                MessageBox.Show("答题时间到!");
                textBox4.Enabled = false;
                Form2 frm2 = new Form2();
                frm2.ShowDialog();
            }
            this.label8.Text = "剩余时间" + lefttime.ToString() + "";
            lefttime--; 
        }
        private void button3_Click(object sender, EventArgs e)
        {
            label1.Text = "(";
            label13.Text = ")";


        }

        private void button4_Click(object sender, EventArgs e)
        {
            label16.Text = "(";
            label15.Text = ")";
        }

        private void button5_Click(object sender, EventArgs e)
        {
            label1.Text = "";
            label13.Text = "";
            label16.Text = "";
            label15.Text = "";
        }

        
    }
}

 Form2代码:

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

namespace sizeyunsuan
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            textBox1.Text = Form1.count.ToString();
            textBox2.Text = Form1.right.ToString();
            textBox3.Text = ((Form1.count - (double)(Form1.right))).ToString();
            textBox4.Text = ((Form1.right / (double)(Form1.count)) * 100).ToString("f2") + "%";
            textBox5.Text = (((Form1.time) - (Form1.lefttime)) / (double)(Form1.count)).ToString("f2");
            textBox6.Text = ((Form1.time) - (Form1.lefttime)).ToString();
        }
    }
}

 PSP分析

 

 代码测试

 

 增量开发

增量内容除了保证题目的重复性外,其他功能全部实现。

这是我们工作的图片,嘿嘿!

 思考题

新增功能:1不仅可以设置110的随机数范围,可以延伸到任意的范围,从而适合更多的学生

              2 系统可自动统计出来用户做题所用的时间和做题速度。

 总结

       这个是我们第二次进行的结对编程,现在对做这个结对编程的总结和感想对大家说一下吧。

     这个程序我们之前做了一个类似的,那个仅仅是四则运算,没有混合。这次增加了混合运算,起初感觉很难,一直想用逆波兰表达式,但是那个实在不会,只有用了这个比较笨的方法,但是基本的要求已经实现了,感觉还不错。同时,为了使用户能够更好的使用软件,我们两个经过商讨,所以进行了页面的优化。在这个程序的实现过程中,遇到了一些困难,不过比以前的要少很多,我们查阅了相关资料,进行代码的修改,从而把完整的程序作了出来!每一次做完程序,感觉都有进步,特棒!

   接下来是我对做结对编程这一个过程的总结:

 1.两个人的基础知识一定要扎实,只要这样才能更好的应对问题

 2.结对编程一定要有耐心,多进行沟通,思路要保持一致

 3.结对编程可以进行工作内容的转换调整

 4.两个人一定要保持高度的默契,这样才会更好,更快的完成任务

 5.要有团队精神,遇到问题共同解决,这次较上次有明显进步,加油!

 ...........

 这就是我第二次结对编程的整个过程,感觉整个过程棒棒哒!希望老师阅读后,批评指正,谢谢老师!

原文地址:https://www.cnblogs.com/wyh19941210/p/4917047.html