2016012030+小学四则运算练习软件项目报告
代码仓库地址:https://git.coding.net/wangchaochao31/homework2.git
测试效果见src下生成的result.txt文件
一、需求分析
1、程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
2、为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
3、练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
4、当程序接收的参数为4时,以下为一个输出文件示例。
2018010203 13+17-1=29 11*15-5=160 3+10+4-16=1 15÷5+3-2=4 |
二、功能设计
1、基础功能:实现四则混合运算的出题和计算
2、扩展功能:支持有括号的运算式,包括出题与求解正确答案。
三、设计实现与算法详解
1、基本的四则运算;
int a = (int) (Math.random() * 100); int b = (int) (Math.random() * 100); int c = (int) (Math.random() * 4);
String question = ""; for (int i = 0; i < p; i++) { if (i < p - 1) { String con = calaulate1[(int) (Math.random() * 2)]; if (con.equals("*")) { String com = way()
2、括号的加入;
if (flag == 1) { question += "(" + com + ")" + con; } else { question += com + con; } } else { question +=way() + con; } } else { question += way();
3、多个混合运算;
public void way(int n) { for (int i = 0; i < n; i++) { int random = (int) (Math.random() * 3); if (random == 0 || random == 1) { route(); if(ifsame==1||answer==1){ i--; ifsame=0; answer=0;
4、程序的存储;利用栈进行存储以及输出。
四、运行测试
五、总结
优点:基本要求达到,括号可以加入。每一部分都相对独立,可以单独修改。
缺点:括号的加入没有达到要求,程序相对繁琐。
六、PSP
PSP |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
20 |
15 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
15 |
Development |
开发 |
15*60 |
28*60 |
· Analysis |
· 需求分析 (包括学习新技术) |
2*60 |
6*60 |
· Design Spec |
· 生成设计文档 |
60 |
50 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
40 |
50 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
50 |
60 |
· Design |
· 具体设计 |
30 |
40 |
· Coding |
· 具体编码 |
6*60 |
10*60 |
· Code Review |
· 代码复审 |
60 |
6*60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
60 |
Reporting |
报告 |
60 |
90 |
· Test Report |
· 测试报告 |
30 |
40 |
· Size Measurement |
· 计算工作量 |
20 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
20 |
1、 学习新知识的时间更长,原因:对其他的知识了解不多,有的知识没有任何基础。
2、代码的编码和复审时间更长,原因:代码的编码不熟悉,大部分代码改了又改;复审的时候因为代码过长,大幅删减,错误频出。