四则运算生成器升级版1.0代码规范与测试程序

一、程序设计题目要求和设计思想

1、题目

    (1)、题目避免重复;
    (2)、可定制(数量/打印方式);
    (3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

2、设计思想

    要求1:题目避免重复
    设计思想:(1)通过srand(time(NULL));来控制。
    要求2:可以定制(数量/打印方式)
    设计思想:(1)定义一个参数,利用用户输入的数量来控制数量;
    设计思想:(2)输出格式可以目前可以设置两个方式,一个方式是纵向X道,另一个是X*Y格式输出,其中X、Y可以由用户选择来控制。
    要求3:控制参数
    设计思想:(1)所有的参数控制都要通过用户来选择,控制实现在主函数里,打印函数另行设计
    设计思想:(2)数值范围可以设置几个输出函数,用户进行选择
    设计思想:(3)是否有乘除法,可以在输出函数里控制,用户进行选择
    设计思想:(4)加减有无负数可以用参数比较大小来实现
    总体设计:程序里要涉及到很多条件判断,一层一层的设计,先把在所有要求都满足的情况下的结果输出,然后在一步步的展开,一项一项的完成。

二、代码规范

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 sizeyunsuanqi
{
    public partial class Form1 : Form
    {
        int shitishumu = 0;
        int shuzhifanwei1 = 0;
        int shuzhifanwei2 = 0;
        string suoyoufuhao;
        string fuhao;
        string d;

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)//通常初始化在Form1_Load事件中完成
        {
            richTextBox1.Clear();
            textBox1.Clear();
        }
        private void button2_Click(object sender, EventArgs e)//button2(清除按钮)的单击事件:清除功能,清除已选择选项内容
        {
            richTextBox1.Clear();
            textBox4.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            checkBox3.Checked = false;
            checkBox2.Checked = false;
            checkBox1.Checked = false;
        }
        private void button1_Click(object sender, EventArgs e)        //button2(确认按钮)的单击事件:单击后,输出题目
        {
            shitishumu = int.Parse(textBox4.Text);//用户控制输入试题数目
            shuzhifanwei2 = int.Parse(textBox3.Text);//用户控制输入数值范围(大)
            shuzhifanwei1 = int.Parse(textBox2.Text);//用户控制输入数值范围(小)
            richTextBox1.Text += "尊敬的用户您好,您的请求已经得到确认"+"\r\n";
            richTextBox1.Text += "您将打印 " + shitishumu + " 道题目" + "\r\n";
            richTextBox1.Text += "您打印试题的数值范围是: " + shuzhifanwei1 + "-" + shuzhifanwei2 + "\r\n";
            if (checkBox3.Checked == true)
            {
                richTextBox1.Text += "试题输出结果存在括号" + "\n";
            }
            if (checkBox3.Checked == false)
            {
                richTextBox1.Text += "试题输出结果不存在括号" + "\n";
            }
            if (checkBox2.Checked == true)
            {
                richTextBox1.Text += "试题输出结果中减法的结果存在负数" + "\n";
            }
            if (checkBox2.Checked == false)
            {
                richTextBox1.Text += "试题输出结果中减法的结果不存在负数" + "\n";
            }
            if (checkBox1.Checked == true)
            {
                richTextBox1.Text += "试题输出结果存在乘除法" + "\n";
            }
            if (checkBox1.Checked == false)
            {
                richTextBox1.Text += "试题输出结果不存在乘除法" + "\n";
            }
            

            System.Random number = new Random(System.DateTime.Now.Millisecond);
            //循环输出题目
            for (int i = 0; i < shitishumu; i++)
            {
                int num1 = number.Next(shuzhifanwei1, shuzhifanwei2);
                int num2 = number.Next(shuzhifanwei1, shuzhifanwei2);
                int num3 = number.Next(shuzhifanwei1, shuzhifanwei2);
                int yunsuan1 = number.Next(0, 4);
                int yunsuan2 = number.Next(0, 2);
                int fuhaonum = number.Next(0, 2);
                if (fuhaonum == 0)//符号进行随机
                {
                    fuhao = "+";
                }
                if (fuhaonum == 1)
                {
                    fuhao = "-";
                }
                int suoyoufuhaonum = number.Next(0, 4);
                if (suoyoufuhaonum == 0) 
                { 
                    suoyoufuhao = "+"; 
                }
                if (suoyoufuhaonum == 1)
                { 
                    suoyoufuhao = "-";
                }
                if (suoyoufuhaonum == 2)
                {
                    suoyoufuhao = "*";
                }
                if (suoyoufuhaonum == 3) 
                {
                    suoyoufuhao = "/"; 
                }

                if (checkBox3.Checked == true)//有括号情况
                {
                    textBox1.Text += num3;
                    if (checkBox1.Checked == true)//有乘除法
                    {
                        if (checkBox2.Checked == true)//减法有负数
                        {
                            if (yunsuan1 == 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan1 == 1) { textBox1.Text += suoyoufuhao + "(" + num1 + "*" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan1 == 2) { textBox1.Text += suoyoufuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法有负数
                            else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "/" + num2 + ")" + "=" + "\r\n"; }//除法有余数
                        }
                        else if (checkBox2.Checked == false)//减法没有负数
                        {
                            if (yunsuan1 == 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan1 == 1) { textBox1.Text += suoyoufuhao + "(" + num1 + "*" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan1 == 2 && num1 > num2) { textBox1.Text += suoyoufuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan1 == 2 && num1 <= num2) { textBox1.Text += suoyoufuhao + "(" + num2 + "-" + num1 + ")" + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "/" + num2 + ")" + "=" + "\r\n"; }//除法有余数

                        }
                    }
                    else if (checkBox1.Checked == false)//没有乘除法
                    {
                        if (checkBox2.Checked == true)//减法有负数
                        {
                            if (yunsuan2 == 0) { textBox1.Text += fuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan2 == 1) { textBox1.Text += fuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法有负数
                        }
                        else if (checkBox2.Checked == false)//减法没有负数
                        {
                            if (yunsuan2 == 0) { textBox1.Text += fuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; }
                            else if (yunsuan2 == 1 && num1 > num2) { textBox1.Text += fuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan2 == 1 && num1 <= num2) { textBox1.Text += fuhao + "(" + num2 + "-" + num1 + ")" + "=" + "\r\n"; }//减法没有负数
                        }
                    }

                }
                else if (checkBox3.Checked == false)//没有括号
                {
                    if (checkBox1.Checked == true)//有乘除法
                    {
                        if (checkBox2.Checked == true)//减法有负数
                        {
                            if (yunsuan1 == 0) { textBox1.Text += num1 + "+" + num2 +"=" + "\r\n"; }
                            else if (yunsuan1 == 1) { textBox1.Text += num1 + "*" + num2 + "=" + "\r\n"; }
                            else if (yunsuan1 == 2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法有负数
                            else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += num1 + "/" + num2 +"=" + "\r\n"; }//除法有余数
                        }
                        else if (checkBox2.Checked == false)//减法没有负数
                        {
                            if (yunsuan1 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; }
                            else if (yunsuan1 == 1) { textBox1.Text += num1 + "*" + num2 + "=" + "\r\n"; }
                            else if (yunsuan1 == 2 && num1 > num2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan1 == 2 && num1 <= num2) { textBox1.Text += num2 + "-" + num1 + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += num1 + "/" + num2 + "=" + "\r\n"; }//除法有余数

                        }
                    }
                    else if (checkBox1.Checked == false)//没有乘除法
                    {
                        if (checkBox2.Checked == true)//减法有负数
                        {
                            if (yunsuan2 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; }
                            else if (yunsuan2 == 1) { textBox1.Text +=  num1 + "-" + num2 + "=" + "\r\n"; }//减法有负数
                        }
                        else if (checkBox2.Checked == false)//减法没有负数
                        {
                            if (yunsuan2 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; }
                            else if (yunsuan2 == 1 && num1 > num2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法没有负数
                            else if (yunsuan2 == 1 && num1 <= num2) { textBox1.Text += num2 + "-" + num1 + "=" + "\r\n"; }//减法没有负数
                        }
                    }

                }

            }
            
        }

        private void button3_Click(object sender, EventArgs e)//清除输出结果按钮
        {
            textBox1.Text = "";
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)//全屏清除按钮
        {
            richTextBox1.Clear();
            textBox1.Text = "";
            textBox4.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            checkBox3.Checked = false;
            checkBox2.Checked = false;
            checkBox1.Checked = false;

        }
    }
}

三、测试程序

1、测试程序代码

// sizeyuansuanqitest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "time.h"
#include "stdlib.h"

//整体函数
void display()
{
    int num1,num2,num3;
    int shitishumu,shuzhifanwei2,shuzhifanwei1,shuzhifanweicha;
    int khao,ccfa,fshu;
    int yunsuan1,yunsuan2,fuhaonum,suoyoufuhaonum;
    char fuhao[2],suoyoufuhao[2];
    printf("尊敬的用户您好,欢迎使用四则运算生成器升级版1.0\n");

    printf("请输入你想打印的试题数量:");
    scanf("%d",&shitishumu);

    printf("\n请输入数值范围(例如:0 100):");
    scanf("%d%d",&shuzhifanwei2,&shuzhifanwei1);

    printf("\n请输入试题里是否携带括号(“是”请输入1,“不是”请输入0):");
    scanf("%d",&khao);

    printf("\n请输入试题里是否存在乘除法(“是”请输入1,“不是”请输入0):");
    scanf("%d",&ccfa);

    printf("\n请输入试题里是否存在结果为负数的减法(“是”请输入1,“不是”请输入0):");
    scanf("%d",&fshu);

    printf("\n试题如下:\n");

    srand(time(NULL));

    for (int i = 0; i < shitishumu; i++)
    {
        shuzhifanweicha=shuzhifanwei1-shuzhifanwei2+1;
        num1=rand()%shzhifanweicha+shuzhifanwei2;
        num2=rand()%shzhifanweicha+shuzhifanwei2;
        num3=rand()%shzhifanweicha+shuzhifanwei2;
        yunsuan1=rand()%4;
        yunsuan2=rand()%2;
        fuhaonum=rand()%2;
        suoyoufuhaonum=rand()%4;

        if (fuhaonum == 0)//符号进行随机
        {
            fuhao[0] ='+';
        }
        if (fuhaonum == 1)
        {
            fuhao[0] = '-';
        }
        if (suoyoufuhaonum == 0) 
        { 
            suoyoufuhao[0] ='+'; 
        }
        if (suoyoufuhaonum == 1)
        { 
            suoyoufuhao[0] = '-';
        }
        if (suoyoufuhaonum == 2)
        {
            suoyoufuhao[0] = '*';
        }
        if (suoyoufuhaonum == 3) 
        {
            suoyoufuhao[0] ='/'; 
        }
        
        if (khao==1)//有括号情况
        {
            //printf("%d",num3);
            if (ccfa==1)//有乘除法
            {
                if (fshu == 1)//减法有负数
                {
                    printf("%d",num3);
                    if (yunsuan1 == 0) { printf("%c(%d+%d)=",suoyoufuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan1 == 1) { printf("%c(%d*%d)=",suoyoufuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan1 == 2) { printf("%c(%d-%d)=",suoyoufuhao[0],num1,num2); printf("\n"); }//减法有负数
                    else if (yunsuan1 == 3 && num2 != 0) { printf("%c(%d/%d)=",suoyoufuhao[0],num1,num2); printf("\n");}//除法有余数
                }
                else if (fshu == 0)//减法没有负数
                {
                    printf("%d",num3);
                    if (yunsuan1 == 0) { printf("%c%d+%d)=",suoyoufuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan1 == 1) { printf("%c(%d*%d)=",suoyoufuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan1 == 2 && num1 > num2) { printf("%c(%d-%d)=",suoyoufuhao[0],num1,num2); printf("\n"); }//减法没有负数
                    else if (yunsuan1 == 2 && num1 <= num2) { printf("%c(%d-%d)=",suoyoufuhao[0],num2,num1); printf("\n"); }//减法没有负数
                    else if (yunsuan1 == 3 && num2 != 0) { printf("%c(%d/%d)=",suoyoufuhao[0],num1,num2); printf("\n");}//除法有余数
                    
                }
            }
            else if (ccfa == 0)//没有乘除法
            {
                if (fshu == 1)//减法有负数
                {
                    printf("%d",num3);
                    if (yunsuan2 == 0) { printf("%c(%d+%d)=",fuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan2 == 1) { printf("%c(%d-%d)=",fuhao[0],num1,num2); printf("\n");}//减法有负数
                }
                else if (fshu == 0)//减法没有负数
                {
                    printf("%d",num3);
                    if (yunsuan2 == 0) { printf("%c(%d+%d)=",fuhao[0],num1,num2); printf("\n");}
                    else if (yunsuan2 == 1 && num1 > num2) { printf("%c(%d-%d)=",fuhao[0],num1,num2); printf("\n");}//减法没有负数
                    else if (yunsuan2 == 1 && num1 <= num2) { printf("%c(%d-%d)=",fuhao[0],num2,num1); printf("\n");}//减法没有负数
                }
            }
            
        }
        else if (khao == 0)//没有括号
        {
            if (ccfa==1)//有乘除法
            {
                if (fshu == 1)//减法有负数
                {
                    if (yunsuan1 == 0) { printf("%d+%d=",num1,num2); printf("\n");}/////////////////////////////////////////
                    else if (yunsuan1 == 1) { printf("%d*%d=",num1,num2); printf("\n");}
                    else if (yunsuan1 == 2) { printf("%d-%d=",num1,num2); printf("\n");}//减法有负数
                    else if (yunsuan1 == 3 && num2 != 0) { printf("%d-%d=",num1,num2); printf("\n");}//除法有余数
                }
                else if (fshu == 0)//减法没有负数
                {
                    if (yunsuan1 == 0) {  printf("%d+%d=",num1,num2); printf("\n");}
                    else if (yunsuan1 == 1) {printf("%d*%d=",num1,num2); printf("\n");}
                    else if (yunsuan1 == 2 && num1 > num2) { printf("%d-%d=",num1,num2); printf("\n");}//减法没有负数
                    else if (yunsuan1 == 2 && num1 <= num2) { printf("%d-%d=",num2,num1); printf("\n");}//减法没有负数
                    else if (yunsuan1 == 3 && num2 != 0) {  printf("%d-%d=",num1,num2); printf("\n");}//除法有余数
                    
                }
            }
            else if (ccfa == 0)//没有乘除法
            {
                if (fshu == 1)//减法有负数
                {
                    if (yunsuan2 == 0) {  printf("%d+%d=",num1,num2); printf("\n");}
                    else if (yunsuan2 == 1) { printf("%d*%d=",num1,num2); printf("\n");}//减法有负数
                }
                else if (fshu == 0)//减法没有负数
                {
                    if (yunsuan2 == 0) { printf("%d+%d=",num1,num2); printf("\n");}
                    else if (yunsuan2 == 1 && num1 > num2) { printf("%d*%d=",num1,num2); printf("\n");}//减法没有负数
                    else if (yunsuan2 == 1 && num1 <= num2) {printf("%d-%d=",num2,num1); printf("\n");}//减法没有负数
                }
            }
            
        }
     }
}

int main(int argc, char* argv[])
{
    display();
    printf("Hello World!\n");
    return 0;
}

2、测试结果截图

(1)边界测试

存在问题:没有设置边界,用户在输入数值范围的时候输入自然数会成功输出,但是输入负数就会输出错误的结果,没有对负数进行判断,这是一大缺陷

(2)各种情况测试(参数的选择,情况为111、110、101、100、011、010、001、000)

存在的问题:当选择带括号的三位数的减法时,即使用户不想输出结果为负数的减法,该程序还会照样输出,这一点不满足用户的需求;

还有很多没有添加的题目要求,只是简单的实现了部分功能。

posted @ 2015-03-16 17:37  韩东东  阅读(257)  评论(0编辑  收藏  举报