小学生快乐寒暑假
程序员文章站
2024-01-16 12:28:52
一个大气又可爱的算术题 一、预估与实际 | PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | | | | | | | Planning | 计划 | 500 | 750 | | • Estimate | • 估计这个任 ......
一个大气又可爱的算术题
一、预估与实际
psp2.1 | personal software process stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
planning | 计划 | 500 | 750 |
• estimate | • 估计这个任务需要多少时间 | 500 | 750 |
development | 开发 | 400 | 480 |
• analysis | • 需求分析 (包括学习新技术) | 50 | 50 |
• design spec | • 生成设计文档 | 10 | 15 |
• design review | • 设计复审 | 10 | 10 |
• coding standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 50 |
• design | • 具体设计 | 30 | 30 |
• coding | • 具体编码 | 240 | 350 |
• code review | • 代码复审 | 20 | 20 |
• test | • 测试(自我测试,修改代码,提交修改) | 30 | 45 |
reporting | 报告 | 30 | 50 |
• test repor | • 测试报告 | 20 | 20 |
• size measurement | • 计算工作量 | 10 | 10 |
• postmortem & process improvement plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 750 |
二、需求分析
我通过网站搜索的方式了解到,小学一年级数学有如下的几个特点:
- 特点1
- 小学一年级的数学题只有加减法运算。
- 特点2
- 相减不会产生负数。
- 特点3
- 小学二年级的数学题为四则运算。
- 特点4
- 除法商不能有小数,并且除法的除数不能为0。
经过分析,我认为,这个程序应当:
- 通过命令行输入数据。
- 程序需要判断年级,从而随机出不同的题目。
- 生成的式子的符号也需要判断,如果不符合,需要重新输入,因为首次输入为命令行输入,所以需要加入写入数据的代码。
- 将生成的式子写入到.txt文本中,最后从cmd中打开文本。
- 使用的数字小于100
三、设计
1. 设计思路
说明你如何设计这个程序
- 需要判断是否存在txt文件,如果不存在需要自动生成一个。
- 生成不同年级的题目需要判断语句去判断。
- 根据年级的不同随机生成不同的符号。
- 判断式子是否合理。
- 合理,计算,写入txt文档中。
- 如果需要继续出题用循环判断。
2. 实现方案
写出具体实现的步骤
- 准备工作:先在github上创建仓库,克隆到本地.
- 在本地仓库新建psp6343文件夹,创建源文件mathexam6343.java
- 判断输入条件是否正确,运用while循环加if语句的判断。
- 用数组储存产生的随机数,并且写入到txt文本中。
- 技术关键点:数字的判断,符号的判断,式子是否成立,数据写入txt中,字符的转换。
四、编码
- 生成随机数 math.random()
- if语句判断年级,符号,题目规范
- io流写入
1. 调试日志
记录编码调试的日志,请记录下开发过程中的 debug 历程
一年级减法数学计算,有答案为负数的。
解决方案:判断第一个传入的数是否大于第二个传入的数,如果小于,符号由“-”变为“+”。输入年级时,如果输入1或者2以外的数,程序不会运行。
解决方案:用while循环判断输入是否合理,如果不对,重新输入。二年级除法计算,除数生成了0.
解决方案:在生成随机数时+1.输入题目个数时,输入负数,会报错。
解决方案:判断是否大于0且个数不超过9999.否则重新输入。
2. 关键代码
if(n[1]==1) { //判断年级 for(int i =1;i<=n[0];i++) { //通过for循环产生随机数,并且将随机数写入数组 int a=(int)(math.random()*100+1); as[i] = a; int c=(int)(math.random()*100+1); { if(c%2==1) { //判断符号 cs[i] = '-'; } else { cs[i] = '+'; } } int b=(int)(math.random()*100+1); //b值 bs[i] = b; if(c%2==1 && a<b) { int answer = a+b; cs[i]='+'; ds[i]=(char) answer; } else if(c%2==1 ) { int answer = a-b; ds[i] = (char) answer; } else { int answer =a+b; //判断式子是否 ds[i] = (char) answer; } } } for(int i=1;i<=n[0];i++) { //通过for循环把数组里的数字写入txt中 try { bw.write(string.valueof("("+i+")")); bw.write(string.valueof(as[i])); bw.write(string.valueof(cs[i])); bw.write(string.valueof(bs[i])); bw.newline(); } catch (ioexception e) { //捕获异常 e.printstacktrace(); } }
3. 代码规范
请给出本次实验使用的代码规范:
- 类名统一,txt文件名统一。
- 类名首字母大写。
- 备注代码功能。
- 代码缩进对齐。- 左小括号和字符之间不出现空格。
- 循环嵌套换行,使代码对应。
五、测试
测试编号 | 具体输入 | 预期结果 | 实际结果 |
---|---|---|---|
1 | 10 1 | 输出10题一年级题目 | 符合预期 |
2 | -5 1 | 提示重新输入一个数 | 符合预期 |
3 | -5 -1 | 提示重新输入两个数 | 符合预期 |
4 | 5 - 1 | 提示重新输入一个数 | 符合预期 |
5 | -5 | 程序报错,停止运行 | 符合预期 |
六、总结
请总结过程中的教训和经验,思考
- 是否使用了“软件开发的基本策略:分而治之”,是否需要用重构。
使用了“软件开发的基本策略:分而治之”,没有使用重构。 - “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
适当采用。 - 从开始计划到写完代码需要很长的一段时间。在编写过程中,需要用到很多基础的知识,但是由于知识运用的不熟练需要花去更长的时间去写,所以
基础学习很重要。在计划时候想好思路,会节省很多的时间,并且会减少后面添加代码带来的bug。
上一篇: mysql 性能的检查和优化方法