2016011991 小学四则运算练习软件项目报告
代码地址:https://git.coding.net/sheep47/xiaoxuesizeyunsuan.git
一、前言
这次的作业是用java来写一个四则运算练习软件,虽然已经在大一的时候学过Java这门课程,但我并没有学的很好,甚至由于在这半年里没有代码的练习,忘记了很多基础知识,所以这样的作业对我来说有些困难。刚开始的时候不知道该如何让下手,也导致写作业的时间有些仓促,在看过先教作业的几个同学的代码之后才开始动手。在此感谢宇欣给我的帮助,她详细给我解释了如何运用java将简单等式连接起来,如何运算,如何测试,还交给我如果增加括号的解决方法,虽然我没有实现这个功能,但是在此次作业的完成过程中,我学到了很多。
二、需求分析
1、软件基本功能:
程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
2、用户需求:
为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
3、基本要求:
练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
三、设计实现
整体思路:在这里我采用的是宇欣教给我的方法,先用Math.random()生成两个随机数进行加减乘除的运算生成简单式,由于在运算过程中要保证能整除和不出现负数,所以再用+或*连接几个简单式就可以得到有3-5个运算符的式子,然后利用栈来运算答案。代码中共用到了四个函数,分别实现了:两个数的四则运算题目、将运算符增加至3-5个、实现n个混合四则运算、计算答案。
四、算法详解和代码展示
1、生成运算式
int x = (int) (Math.random() * 100);// 产生100以内的随机数 int y = (int) (Math.random() * 100); int z = (int) (Math.random() * 4);// 产生整数0到3 if (z == 1) { if (x < y) { int temp = x; x = y; y = temp; } } if (z == 3) {// 如果是除法,保证能整除 y = (int) (Math.random() * 20) + 1; x = (int) (Math.random() * 6) * y; } String m = x + op[z] + y; if (op[z].equals("-") || op[z].equals("+")) { flag = 1; } return m;
2、产生3-5个运算符
String question = ""; for (int i = 0; i < p; i++) { if (i < p - 1) { String con = op1[(int) (Math.random() * 2)]; question += MakeQuestion1() + con; } else { question += MakeQuestion1(); } flag = 0; }
3、产生n个混合运算
for (int i = 0; i < n; i++) { MakeQuestion3(); if(ifsame==1||answer==1){ i--; ifsame=0; answer=0; } }
五、测试运行
六、项目总结
这次项目中遇到了一些小的问题,比如在刚开始运行的时候没有注意到题目要求,需要保证整除,于是在计算一些除法问题时出现了错误,以及我的自学能力太差,很多地方都要向同学请教,而且没有看懂老师提供的调度场算法,希望老师在课上的时候可以讲解一下。完成此次作业的过程中,也让我意识到自己在时间分配上的不足,以及了解了一个项目的制作过程,学到了很多经验,相信在下次的作业中,可以做到更合理的时间分配,以及学习利用老师提供的资源。
七、psp
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
15 |
20
|
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
8 |
Development |
开发 |
360 |
900 |
Analysis |
需求分析 (包括学习新技术) |
6 |
8 |
Design Spec |
生成设计文档 |
0 |
0 |
Design Review |
设计复审 (和同事审核设计文档) |
30 |
20 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
8 |
Design |
具体设计 |
30 |
40 |
Coding |
具体编码 |
300 |
360 |
Code Review |
代码复审 |
30 |
15 |
Test |
测试(自我测试,修改代码,提交修改) |
30 |
20 |
Reporting |
报告 |
60 |
90 |
Test Report |
测试报告 |
5 |
3 |
Size Measurement |
计算工作量 |
10 |
10 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
3 |
3 |