一、程序设计题目要求和设计思想
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)
存在的问题:当选择带括号的三位数的减法时,即使用户不想输出结果为负数的减法,该程序还会照样输出,这一点不满足用户的需求;
还有很多没有添加的题目要求,只是简单的实现了部分功能。