仓库地址:https://git.coding.net/Mr_hat/mao1.git
修改后的仓库地址:https://git.coding.net/Mr_hat/mao1.git
正文:
1.需求分析
1.程序可接收一个输入参数n,然后随机产生n道加减乘除练习题
2.每个数字在 0 和 100 之间
3.运算符在3个到5个之间,且每个练习题至少要包含2种运算符
4.练习题在运算过程中不得出现负数与非整数
5.学号与生成的练习题及对应答案要输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致
2.功能设计
1.基本功能:根据用户输入的参数n自动生成n道符合需求的的练习题,并自动生成答案,并将式子与答案传输到特定文件当中
2.扩展功能:由于本人的技术不是很扎实,所以扩展功能目前还没法实现,但是一定会继续学习实现这个功能的
3.设计实现
我一共建了三个类,分别是Main、Question、Transport,功能如下:
Main类:用于接收用户给出的参数n,调用Question类
Question类:用于生成练习题并计算出每道练习题的答案,调用Transport类
Transport类:供Question类调用,将学号与练习题输出到指定文件中
三类关系:
首先我使用math.random函数生成随机数,由于需求规定,我将随机数定义为正整数输出,之后我直接调用js的eval函数,更加快捷的算出了练习题的答案并输出。
4.算法详解
拿到题目之后我百度查询了一下要用到哪些方法,无意间发现了用js能够更加简单的解决这个问题,没有用到调度场算法和逆波兰表达式,所以并没有具体的算法详解
5.测试运行
先在eclipse中运行并给参数赋值30
打开result文件,显示了学号和30道练习题
6.代码展示
获取参数并调用Question类生成练习题
public class Main { @SuppressWarnings("resource") public static void main(String[] args) throws ScriptException{ Scanner sc=new Scanner(System.in); System.out.println("请输入题目的个数\n"); int n=sc.nextInt(); new Question(n); } }
//实例化 private void init(){ random=new Random(); ar=new ArrayList<String>(); manager = new ScriptEngineManager(); se = manager.getEngineByName("js"); }
//生成随机题库并给出答案并输出 private void ques() throws ScriptException{ String qu = null; for(int i=0;i<n;i++){ qu=""; int time=t(); for(int j=0;j<time;j++){ qu=qu+ti(); if(j<time-1){ qu=qu+type(ope()); } } double result=Double.valueOf(se.eval(qu.toString()).toString()) ; if(result%1!=0 || result<0 || result>400){ i--; continue; } ar.add(qu); } wtf=new Transport("result.txt", ar, n);//输出 }
//生成运算符 private String type(int n){ if(n==0){ return "+"; }else if(n==1){ return "-"; }else if(n==2){ return "*"; }else{ return "/"; } }
7.总结
说实话,这次的作业量和作业难度的确有点重,不过作业还是得写,这两周不断的百度查资料,可是这次作业还是有很大的不足,也正是因为这次的作业让我意识到自己和别的同学的差距有多大,也意识到自己当初没有好好学语言是多么的错误,既来之则安之,只能从现在开始恶补,不然这个差距不止不会改变甚至会越来越大。不过说实话,上两次作业的成绩一出,心里还是挺失落的,如果说第一次作业是没有看清楚作业要求导致分数偏低,不过第二次作业真的是认真看了要求,花了很长时间去写,但是看到分数之后还是挺失落的,后来静下来想想,众口难调,只要自己在学习过程中真正学到了东西,那就足够了。
8.PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(h) | 实际完成需要的时间(h) |
Planning | 计划 | 5 | 4 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 5 | 4 |
Development | 开发 | 13 | 14 |
· Analysis | · 需求分析 (包括学习新技术) | 0.5 | 0.5 |
· Design Spec | · 生成设计文档 | 1 | 1 |
· Design Review | · 设计复审 (和同事审核设计文档) | 1.5 | 2 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 1 | 1.5 |
· Design | · 具体设计 | 2 | 2 |
· Coding | · 具体编码 | 4 | 5 |
· Code Review | · 代码复审 | 1 | 0.5 |
· Test | · 测试(自我测试,修改代码,提交修改) | 2 | 1.5 |
Reporting | 报告 | 3.5 | 2.5 |
· Test Report | · 测试报告 | 2 | 1 |
· Size Measurement | · 计算工作量 | 1 | 1 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 0.5 | 0.5 |