四则运算生成器升级版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)加减有无负数可以用参数比较大小来实现
总体设计:程序里要涉及到很多条件判断,一层一层的设计,先把在所有要求都满足的情况下的结果输出,然后在一步步的展开,一项一项的完成。
二、程序源代码
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace sizeyunsuanqi 11 { 12 public partial class Form1 : Form 13 { 14 int shitishumu = 0; 15 int shuzhifanwei1 = 0; 16 int shuzhifanwei2 = 0; 17 string suoyoufuhao; 18 string fuhao; 19 string d; 20 21 public Form1() 22 { 23 InitializeComponent(); 24 } 25 private void Form1_Load(object sender, EventArgs e)//通常初始化在Form1_Load事件中完成 26 { 27 richTextBox1.Clear(); 28 textBox1.Clear(); 29 } 30 private void button2_Click(object sender, EventArgs e)//button2(清除按钮)的单击事件:清除功能,清除已选择选项内容 31 { 32 richTextBox1.Clear(); 33 textBox4.Text = ""; 34 textBox2.Text = ""; 35 textBox3.Text = ""; 36 checkBox3.Checked = false; 37 checkBox2.Checked = false; 38 checkBox1.Checked = false; 39 } 40 private void button1_Click(object sender, EventArgs e) //button2(确认按钮)的单击事件:单击后,输出题目 41 { 42 shitishumu = int.Parse(textBox4.Text);//用户控制输入试题数目 43 shuzhifanwei2 = int.Parse(textBox3.Text);//用户控制输入数值范围(大) 44 shuzhifanwei1 = int.Parse(textBox2.Text);//用户控制输入数值范围(小) 45 richTextBox1.Text += "尊敬的用户您好,您的请求已经得到确认"+"\r\n"; 46 richTextBox1.Text += "您将打印 " + shitishumu + " 道题目" + "\r\n"; 47 richTextBox1.Text += "您打印试题的数值范围是: " + shuzhifanwei1 + "-" + shuzhifanwei2 + "\r\n"; 48 if (checkBox3.Checked == true) 49 { 50 richTextBox1.Text += "试题输出结果存在括号" + "\n"; 51 } 52 if (checkBox3.Checked == false) 53 { 54 richTextBox1.Text += "试题输出结果不存在括号" + "\n"; 55 } 56 if (checkBox2.Checked == true) 57 { 58 richTextBox1.Text += "试题输出结果中减法的结果存在负数" + "\n"; 59 } 60 if (checkBox2.Checked == false) 61 { 62 richTextBox1.Text += "试题输出结果中减法的结果不存在负数" + "\n"; 63 } 64 if (checkBox1.Checked == true) 65 { 66 richTextBox1.Text += "试题输出结果存在乘除法" + "\n"; 67 } 68 if (checkBox1.Checked == false) 69 { 70 richTextBox1.Text += "试题输出结果不存在乘除法" + "\n"; 71 } 72 73 74 System.Random number = new Random(System.DateTime.Now.Millisecond); 75 //循环输出题目 76 for (int i = 0; i < shitishumu; i++) 77 { 78 int num1 = number.Next(shuzhifanwei1, shuzhifanwei2); 79 int num2 = number.Next(shuzhifanwei1, shuzhifanwei2); 80 int num3 = number.Next(shuzhifanwei1, shuzhifanwei2); 81 int yunsuan1 = number.Next(0, 4); 82 int yunsuan2 = number.Next(0, 2); 83 int fuhaonum = number.Next(0, 2); 84 if (fuhaonum == 0)//符号进行随机 85 { 86 fuhao = "+"; 87 }; 88 if (fuhaonum == 1) 89 { 90 fuhao = "-"; 91 }; 92 int suoyoufuhaonum = number.Next(0, 4); 93 if (suoyoufuhaonum == 0) 94 { 95 suoyoufuhao = "+"; 96 }; 97 if (suoyoufuhaonum == 1) 98 { 99 suoyoufuhao = "-"; 100 }; 101 if (suoyoufuhaonum == 2) 102 { 103 suoyoufuhao = "*"; 104 }; 105 if (suoyoufuhaonum == 3) 106 { 107 suoyoufuhao = "/"; 108 }; 109 110 if (checkBox3.Checked == true)//有括号情况 111 { 112 textBox1.Text += num3; 113 if (checkBox1.Checked == true)//有乘除法 114 { 115 if (checkBox2.Checked == true)//减法有负数 116 { 117 if (yunsuan1 == 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; } 118 else if (yunsuan1 == 1) { textBox1.Text += suoyoufuhao + "(" + num1 + "*" + num2 + ")" + "=" + "\r\n"; } 119 else if (yunsuan1 == 2) { textBox1.Text += suoyoufuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法有负数 120 else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "/" + num2 + ")" + "=" + "\r\n"; }//除法有余数 121 } 122 else if (checkBox2.Checked == false)//减法没有负数 123 { 124 if (yunsuan1 == 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; } 125 else if (yunsuan1 == 1) { textBox1.Text += suoyoufuhao + "(" + num1 + "*" + num2 + ")" + "=" + "\r\n"; } 126 else if (yunsuan1 == 2 && num1 > num2) { textBox1.Text += suoyoufuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法没有负数 127 else if (yunsuan1 == 2 && num1 <= num2) { textBox1.Text += suoyoufuhao + "(" + num2 + "-" + num1 + ")" + "=" + "\r\n"; }//减法没有负数 128 else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += suoyoufuhao + "(" + num1 + "/" + num2 + ")" + "=" + "\r\n"; }//除法有余数 129 130 } 131 } 132 else if (checkBox1.Checked == false)//没有乘除法 133 { 134 if (checkBox2.Checked == true)//减法有负数 135 { 136 if (yunsuan2 == 0) { textBox1.Text += fuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; } 137 else if (yunsuan2 == 1) { textBox1.Text += fuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法有负数 138 } 139 else if (checkBox2.Checked == false)//减法没有负数 140 { 141 if (yunsuan2 == 0) { textBox1.Text += fuhao + "(" + num1 + "+" + num2 + ")" + "=" + "\r\n"; } 142 else if (yunsuan2 == 1 && num1 > num2) { textBox1.Text += fuhao + "(" + num1 + "-" + num2 + ")" + "=" + "\r\n"; }//减法没有负数 143 else if (yunsuan2 == 1 && num1 <= num2) { textBox1.Text += fuhao + "(" + num2 + "-" + num1 + ")" + "=" + "\r\n"; }//减法没有负数 144 } 145 } 146 147 } 148 else if (checkBox3.Checked == false)//没有括号 149 { 150 if (checkBox1.Checked == true)//有乘除法 151 { 152 if (checkBox2.Checked == true)//减法有负数 153 { 154 if (yunsuan1 == 0) { textBox1.Text += num1 + "+" + num2 +"=" + "\r\n"; } 155 else if (yunsuan1 == 1) { textBox1.Text += num1 + "*" + num2 + "=" + "\r\n"; } 156 else if (yunsuan1 == 2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法有负数 157 else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += num1 + "/" + num2 +"=" + "\r\n"; }//除法有余数 158 } 159 else if (checkBox2.Checked == false)//减法没有负数 160 { 161 if (yunsuan1 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; } 162 else if (yunsuan1 == 1) { textBox1.Text += num1 + "*" + num2 + "=" + "\r\n"; } 163 else if (yunsuan1 == 2 && num1 > num2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法没有负数 164 else if (yunsuan1 == 2 && num1 <= num2) { textBox1.Text += num2 + "-" + num1 + "=" + "\r\n"; }//减法没有负数 165 else if (yunsuan1 == 3 && num2 != 0) { textBox1.Text += num1 + "/" + num2 + "=" + "\r\n"; }//除法有余数 166 167 } 168 } 169 else if (checkBox1.Checked == false)//没有乘除法 170 { 171 if (checkBox2.Checked == true)//减法有负数 172 { 173 if (yunsuan2 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; } 174 else if (yunsuan2 == 1) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法有负数 175 } 176 else if (checkBox2.Checked == false)//减法没有负数 177 { 178 if (yunsuan2 == 0) { textBox1.Text += num1 + "+" + num2 + "=" + "\r\n"; } 179 else if (yunsuan2 == 1 && num1 > num2) { textBox1.Text += num1 + "-" + num2 + "=" + "\r\n"; }//减法没有负数 180 else if (yunsuan2 == 1 && num1 <= num2) { textBox1.Text += num2 + "-" + num1 + "=" + "\r\n"; }//减法没有负数 181 } 182 } 183 184 } 185 186 } 187 188 } 189 190 private void button3_Click(object sender, EventArgs e)//清除输出结果按钮 191 { 192 textBox1.Text = ""; 193 } 194 195 private void checkBox3_CheckedChanged(object sender, EventArgs e) 196 { 197 198 } 199 200 private void checkBox1_CheckedChanged(object sender, EventArgs e) 201 { 202 203 } 204 205 private void checkBox2_CheckedChanged(object sender, EventArgs e) 206 { 207 208 } 209 210 private void textBox2_TextChanged(object sender, EventArgs e) 211 { 212 213 } 214 215 private void textBox3_TextChanged(object sender, EventArgs e) 216 { 217 218 } 219 220 private void textBox4_TextChanged(object sender, EventArgs e) 221 { 222 223 } 224 225 private void button4_Click(object sender, EventArgs e)//全屏清除按钮 226 { 227 richTextBox1.Clear(); 228 textBox1.Text = ""; 229 textBox4.Text = ""; 230 textBox2.Text = ""; 231 textBox3.Text = ""; 232 checkBox3.Checked = false; 233 checkBox2.Checked = false; 234 checkBox1.Checked = false; 235 236 } 237 } 238 }
三、运算结果截图
四、程序存在的问题
目前来说这个程序还存在很多的问题:
1、本程序交互能力比较差,发生问题是没有很好的反馈,打印数量只有输入正整数程序才能正常运行;
2、数值范围的输入,用户可以输入整数范围,例如:-100到100,范围包括所有整数,也可以输出,输出结果没有为负数加上括号来区分,如果用户真的输入负数范围,打印出来就会是像 “1--1=”情况,理想的情况应该是“1-(-1)=”;
3、题目要求的所有功能只实现了一部分,并没有完全实现,尤其是打印方式没有规范,一直是纵向输出;
4、由于本人能力以及时间等多重复杂因素在内,本程序还只是一个简简单单的雏形,忘广大博友批评指正,谢谢;
五、psp记录表
1、项目计划总结:
周活动总结表
姓名: 韩雪东 日期:2015/03/09
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日03/08 |
|
|
|
|
|
|
0 |
周一 |
200 |
|
60 |
|
|
|
260 |
周二 |
300 |
|
60 |
|
|
|
360 |
周三 |
100 |
180 |
|
|
|
|
280 |
周四 |
100 |
100 |
|
|
|
|
200 |
周五 |
200 |
100 |
20 |
|
|
|
320 |
周六 |
|
180 |
|
|
|
|
180 |
周总结 |
900 |
560 |
140 |
|
|
|
1600 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
以前各周的累计时间
总计 |
|
|
|
|
|
|
|
平均 |
|
|
|
|
|
|
|
最大 |
|
|
|
|
|
|
|
最小 |
|
|
|
|
|
|
|
2、时间记录表:
学生 韩雪东 日期 2015/03/09
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
03/11周三 |
10:30 |
11:00 |
0 |
30 |
写程序 |
|
03/11周三 |
14:30 |
17:30 |
30 |
150 |
写程序 |
|
03/12周四 |
14:30 |
17:30 |
80 |
100 |
写程序 |
|
03/13周五 |
15:30 |
17:30 |
20 |
100 |
写程序 |
|
03/14周六 |
14:30 |
18:00 |
30 |
180 |
写程序 |
|
|
|
|
|
|
|
|
3、缺陷记录日志:
学生 韩雪东
日期 2015/03/09
教员 王建民
程序号 四则运算生成器升级版1.0
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
03/11周三 |
01 |
|
|
|
|
|
RichtextBox控件里面不能输出30道题目,只能输出一道题目。 改正:用textbox控件,输出代码“=”前加上“+”号解决了问题 |
||||||
03/12周四 |
02 |
|
|
|
|
|
If判断语句里的条件出错,打印不出来想要的结果 改正:整理思路,重新整理代码 |
||||||
03/13周五 |
|
|
|
|
|
|
|
||||||
03/14周六 |
|
|
|
|
|
|
|