第四次作业,结对编程做增量

增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况;
             2)用户可以设定倒计时;
             3)用户可以设定随机整数的范围和题目数量;
             4)用户可以选择哪种计算类型,比如加减乘除,或可选择软件随机生成四则运算中的一种;

             5)用户可以选择随机生成的题目中是否带有小括号,比如(2+3)*5,如果是gui程序,添加这个功能可以用复选框实现;

             6)保证生成过的题目不再重复出现。

要求:要有需求分析,具体设计思路,代码实现,测试,书中PSP耗时分析,总结。
以上内容都写到博客中,代码也写到博客中,要求写程序时要有屏幕截图,把程序代码也写到博客中,但是请注意排版,排版不好代码规范这一项0分,最后把测试的界面也截图发到博客上,PSP表也截图到博客上,更重要的是把两个人合作结对编程时的照片也发到博客上。

<1>需求分析

用户还可以自行输入所要计时的时间,从而进行倒计时。

同时用户还可以输入所要答的总题数。

单击停止按钮时也会弹出统计结果!

用户还可以自行输入随机数的产生范围!

运算符号的随机产生!

用户还可以选择是否加括号!分为前两个数加和后两个数加!

<2>设计思路

创建windows窗体,设计窗体,并根据窗体的设计进行代码的编写!

因为要获取文本框中的数值,同时要统计正确的总数和总题数所以首先要定义变量!

然后用suiji()方法产生随机数。

再然后技术textbox1的keydown事件代码的编写!

单击停止,按钮弹出窗体二!

comboBox1_SelectedIndexChanged事件的代码编写!

判断正误代码的编写!

加减乘除的随机产生的代码编写!

form2统计总题数,正确的总数,以及错误的总数和正确率!

<3>代码的实现

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 算
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义变量
        public static int count = -1;
        public static int right = 0;
        public static int sun;
        public static int shi = 0;
        //产生随机数
        private void suiji() 
        {

            Random ra = new Random();
            int h = int.Parse(textBox4.Text) + 1;
            int j = int.Parse(textBox5.Text);
            int a, b, c;
            a = ra.Next(h, j);
            b = ra.Next(h, a);
            c = ra.Next(a, j);
            label2.Text = a.ToString();
            label4.Text = b.ToString();
            label7.Text = c.ToString();
            if (label3.Text == "-")
            {
                if (a <= b)
                {
                    int k=0;
                    b = k;
                    b = a;
                    a = k;
                }
 
            }
            
            textBox1.Text = "";
            count++;


        }
        //随机产生加减乘除
        private void suanfa()
        {
            Random op = new Random();
            int d = op.Next(1, 5);
            int e = op.Next(1, 5);
            switch (d)
            {
                case 1:
                    label3.Text = "+";
                    break;
                case 2:
                    label3.Text = "-";
                    break;
                case 3:
                    label3.Text = "*";
                    break;
                case 4:
                    label3.Text = "/";
                    break;
              
            }
            switch (e)
            {
                case 1:
                    label6.Text = "+";
                    break;
                case 2:
                    label6.Text = "-";
                    break;
                case 3:
                    label6.Text = "*";
                    break;
                case 4:
                    label6.Text = "/";
                    break;

            }
 
        }
        //得到正确答案!
        private void zhengqu()
        {
            string f = label3.Text;
            String g = label6.Text;
            string fg = f + g;
            if (comboBox1.Text == "前两个加括号")
            {
                switch (fg)
                {
                    case "++":
                        sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) + int.Parse(label7.Text);
                        break;
                    case "+-":
                        sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) - int.Parse(label7.Text);
                        break;
                    case "+*":
                        sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) * int.Parse(label7.Text);
                        break;
                    case "+/":
                        sun = (int.Parse(label2.Text) + int.Parse(label4.Text)) / int.Parse(label7.Text);
                        break;
                    case "-+":
                        sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) + int.Parse(label7.Text);
                        break;
                    case "--":
                        sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) - int.Parse(label7.Text);
                        break;
                    case "-*":
                        sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) * int.Parse(label7.Text);
                        break;
                    case "-/":
                        sun = (int.Parse(label2.Text) - int.Parse(label4.Text)) / int.Parse(label7.Text);
                        break;
                    case "*+":
                        sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) + int.Parse(label7.Text);
                        break;
                    case "*-":
                        sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) - int.Parse(label7.Text);
                        break;
                    case "**":
                        sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) * int.Parse(label7.Text);
                        break;
                    case "*/":
                        sun = (int.Parse(label2.Text) * int.Parse(label4.Text)) / int.Parse(label7.Text);
                        break;
                    case "/+":
                        sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) + int.Parse(label7.Text);
                        break;
                    case "/-":
                        sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) - int.Parse(label7.Text);
                        break;
                    case "/*":
                        sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) * int.Parse(label7.Text);
                        break;
                    case "//":
                        sun = (int.Parse(label2.Text) / int.Parse(label4.Text)) / int.Parse(label7.Text);
                        break;

                }
            }
            if (comboBox1.Text == "不加括号")
            {
                switch (fg)
                {
                    case "++":
                        sun = int.Parse(label2.Text) +int.Parse(label4.Text) + int.Parse(label7.Text);
                        break;
                    case "+-":
                        sun = int.Parse(label2.Text) +int.Parse(label4.Text) - int.Parse(label7.Text);
                        break;
                    case "+*":
                        sun = int.Parse(label2.Text) +int.Parse(label4.Text) * int.Parse(label7.Text);
                        break;
                    case "+/":
                        sun = int.Parse(label2.Text)+ int.Parse(label4.Text) / int.Parse(label7.Text);
                        break;
                    case "-+":
                        sun = int.Parse(label2.Text) - int.Parse(label4.Text) + int.Parse(label7.Text);
                        break;
                    case "--":
                        sun = int.Parse(label2.Text) - int.Parse(label4.Text) - int.Parse(label7.Text);
                        break;
                    case "-*":
                        sun = int.Parse(label2.Text) - int.Parse(label4.Text) * int.Parse(label7.Text);
                        break;
                    case "-/":
                        sun = int.Parse(label2.Text) - int.Parse(label4.Text) / int.Parse(label7.Text);
                        break;
                    case "*+":
                        sun = int.Parse(label2.Text) * int.Parse(label4.Text) + int.Parse(label7.Text);
                        break;
                    case "*-":
                        sun = int.Parse(label2.Text) * int.Parse(label4.Text) - int.Parse(label7.Text);
                        break;
                    case "**":
                        sun = int.Parse(label2.Text) * int.Parse(label4.Text) * int.Parse(label7.Text);
                        break;
                    case "*/":
                        sun = int.Parse(label2.Text) * int.Parse(label4.Text) / int.Parse(label7.Text);
                        break;
                    case "/+":
                        sun = int.Parse(label2.Text) / int.Parse(label4.Text) + int.Parse(label7.Text);
                        break;
                    case "/-":
                        sun = int.Parse(label2.Text) / int.Parse(label4.Text) - int.Parse(label7.Text);
                        break;
                    case "/*":
                        sun = int.Parse(label2.Text) / int.Parse(label4.Text) * int.Parse(label7.Text);
                        break;
                    case "//":
                        sun = int.Parse(label2.Text) / int.Parse(label4.Text) / int.Parse(label7.Text);
                        break;

                }
            }
            if (comboBox1.Text == "后两个加括号")
            {
                switch (fg)
                {
                    case "++":
                        sun = int.Parse(label2.Text) + int.Parse(label4.Text) + int.Parse(label7.Text);
                        break;
                    case "+-":
                        sun = int.Parse(label2.Text) + (int.Parse(label4.Text) - int.Parse(label7.Text));
                        break;
                    case "+*":
                        sun = int.Parse(label2.Text) + (int.Parse(label4.Text) * int.Parse(label7.Text));
                        break;
                    case "+/":
                        sun = int.Parse(label2.Text) + (int.Parse(label4.Text) / int.Parse(label7.Text));
                        break;
                    case "-+":
                        sun = int.Parse(label2.Text) - (int.Parse(label4.Text) + int.Parse(label7.Text));
                        break;
                    case "--":
                        sun = int.Parse(label2.Text) - (int.Parse(label4.Text) - int.Parse(label7.Text));
                        break;
                    case "-*":
                        sun = int.Parse(label2.Text) -(int.Parse(label4.Text) * int.Parse(label7.Text));
                        break;
                    case "-/":
                        sun = int.Parse(label2.Text) -(int.Parse(label4.Text) / int.Parse(label7.Text));
                        break;
                    case "*+":
                        sun = int.Parse(label2.Text) * (int.Parse(label4.Text) + int.Parse(label7.Text));
                        break;
                    case "*-":
                        sun = int.Parse(label2.Text) * (int.Parse(label4.Text) - int.Parse(label7.Text));
                        break;
                    case "**":
                        sun = int.Parse(label2.Text) * (int.Parse(label4.Text) * int.Parse(label7.Text));
                        break;
                    case "*/":
                        sun = int.Parse(label2.Text) * (int.Parse(label4.Text) / int.Parse(label7.Text));
                        break;
                    case "/+":
                        sun = int.Parse(label2.Text) / (int.Parse(label4.Text) + int.Parse(label7.Text));
                        break;
                    case "/-":
                        sun = int.Parse(label2.Text) / (int.Parse(label4.Text) - int.Parse(label7.Text));
                        break;
                    case "/*":
                        sun = int.Parse(label2.Text) / (int.Parse(label4.Text) * int.Parse(label7.Text));
                        break;
                    case "//":
                        sun = int.Parse(label2.Text) / (int.Parse(label4.Text) / int.Parse(label7.Text));
                        break;

                }
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (shi <= 0)
            {
                timer1.Enabled = false;
                textBox1.Enabled = false;
                MessageBox.Show("时间到!");
                Form2 da = new Form2();
                da.ShowDialog();

            }


            shi = shi - 1;
            textBox2.Text = shi.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            shi = int.Parse(textBox2.Text);
            textBox2.Text = shi.ToString();
            timer1.Enabled = true;
            timer1.Interval = 1000;
            timer1.Start();
            suiji();
            suanfa();

        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                //判定数字是否合法!
                int i = 0;
                string an = textBox1.Text;
                if (int.TryParse(an, out i) == false)
                {
                    MessageBox.Show("你输得的数字不合法!");

                }
                //判定是否正确
                zhengqu();
                if (textBox1.Text == sun.ToString())
                {
                    right++;
                }
                suiji();
                suanfa();
                //判断是否达到总题数
                int q = int.Parse(textBox3.Text);
                if (count == q)
                {
                    timer1.Enabled = false;
                    textBox3.Enabled = false;
                    Form2 da = new Form2();
                    da.ShowDialog();
                }

            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            textBox3.Enabled = false;
            Form2 da = new Form2();
            da.ShowDialog();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string a=comboBox1.Text;
            switch(a)
            {
                case"前两个加括号":
                    label1.Text = "(";
                    label5.Text = ")";
                    label14.Text = "";
                    label15.Text = "";
                    break;
                case"后两个加括号":
                    label14.Text = "(";
                    label15.Text = ")";
                    label1.Text = "";
                    label5.Text = "";
                    break;
                case"不加括号":
                    label1.Text = "";
                    label5.Text = "";
                    label14.Text = "";
                    label15.Text = "";
                    break;

            }
        }

        

        

      
    }
}

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 算
{
    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();
            textBox4.Text = ((Form1.right / (double)(Form1.count)) * 100).ToString() + "%";
            textBox3.Text = (Form1.count - Form1.right).ToString();
        }

       
    }
}

代码实现

<5>psp耗时

PSP2.1 Personal Software Process Stages Time(h)
Planning 计划 4
  • Estimate 估计这个任务需要多长时间 8
Development 开发  
  • Analysis 需求分析 1
  • Design Spec 生成设计文档  
  • Coding Standard 代码规范 1
  • Design 具体设计 1
  • Coding 具体代码 3
  • Code Review 代码复审 1
  • Text 测试 1
Reporting 报告  
  • Test Report 测试报告  
  • Size Measurement 计算工作量

0.5

  • Postmortem 事后总结

1

<6>总结

总结前几次的作业,已经有了相对的进步,但是明显的还是不够,在输入字母,负数上,不能重复出现题目上还是有一定的不足,,这需要不断的进步,今天见到助教老师,听老师讲,明显的感觉到自己知道的太少,在做程序中有自己的思路,在实现上有明显的不足,需要学习,多读编程类的书籍,有老师的辅导,有很大的进步,这是不可否认的,还需要努力,

原文地址:https://www.cnblogs.com/zwt0626/p/4907761.html