MathExam

一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 30
• Estimate • 估计这个任务需要多少时间 10 30
Development 开发 245 220
• Analysis • 需求分析 (包括学习新技术) 15 10
• Design Spec • 生成设计文档 60 120
• Design Review • 设计复审 20 10
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 20 10
• Design • 具体设计 30 20
• Coding • 具体编码 60 30
• Code Review • 代码复审 10 10
• Test • 测试(自我测试,修改代码,提交修改) 30 10
Reporting 报告 200 300
• Test Repor • 测试报告 30 30
• Size Measurement • 计算工作量 20 30
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 150 240
合计 490

二、需求分析

我通过搜索引擎查找资料的方式了解到,小学一年级数学有如下的几个特点:

  • 加减法大小在0-99区间内
  • 无负数运算
  • 无分数运算

我通过搜索引擎查找资料的方式了解到,小学二年级数学有如下的几个特点:

  • 表内乘法
  • 表内除法

经过分析,我认为,这个程序应当:

  • 不可输入除数字外其他字符
  • 注意辨别命令行参数个数
  • 所求结果在0-100范围内

三、设计

1. 设计思路

说明你如何设计这个程序

比如:

  • 这个程序有1个类,4个函数
  • 首先通过命令行接收参数
  • 然后通过函数来生成题目
  • 最后生成题目与答案文件
  • 关键函数是题目的生成函数认真构思

2. 实现方案

写出具体实现的步骤

比如:

  • 准备工作:先在Github上创建仓库,克隆到本地,完成代码后提交
  • 技术关键点:git的使用,cmd命令行运行java程序,一些java库函数的使用

四、编码

请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

1. 调试日志

  • 第一次编译测试的时候,出现了只有最后一道题有答案的情况,检查代码后发现是复制粘贴的时候复制了错误的临时变量
  • 第二次编译测试的时候,忘记删除输出的调试信息
  • 第三次编译测试的时候,发现有超出范围的数出现,检查后发现是随机数取值下限问题

2. 关键代码

	public static void GetQuestion(int num, int Grade) {
if(Grade==1) {
String TempQuestion = "";
String TempAnswer = "";
for(int i = 0;i < num;i++) {
int Temp = GetRandomNum();
int Temp2;
if(GetRandomNum() > 49) {
Temp2=(int)(0 + Math.random() * ((100 - Temp) - 0 + 1));
TempQuestion = TempQuestion + "("+String.valueOf(i + 1) + ") " + String.valueOf(Temp) + " + "+String.valueOf(Temp2) + " =" + "\r\n";
TempAnswer = TempAnswer + "("+String.valueOf(i + 1) + ") " + String.valueOf(Temp) + " + "+String.valueOf(Temp2) + " = " + String.valueOf(Temp + Temp2) + "\r\n";
}else {
Temp2=(int)(0 + Math.random() * (Temp - 0 + 1));
TempQuestion = TempQuestion + "(" + String.valueOf(i + 1) + ") "+String.valueOf(Temp) + " - "+String.valueOf(Temp2) + " ="+"\r\n";
TempAnswer = TempAnswer + "(" + String.valueOf(i + 1) + ") " + String.valueOf(Temp) + " - "+String.valueOf(Temp2) + " = "+String.valueOf(Temp - Temp2) + "\r\n";
}
}
System.out.println(TempQuestion + "\r\n" + TempAnswer);
OutAnswer(TempQuestion + "\r\n" + TempAnswer);
}else {
String Question = "";
String Answer = "";
for(int j=0;j<num;j++) {
int Ismul=GetRandomNum();
int mul1=(int)(0+ Math.random() * (10 - 0 + 1));
if(Ismul > 49) {
int mul2 = (int)(0 + Math.random() * (10 - 0 + 1));
Question = Question + "(" + String.valueOf(j + 1) + ") " + String.valueOf(mul1)+" × " + String.valueOf(mul2)+" =" + "\r\n";
Answer = Answer + "(" + String.valueOf(j + 1) + ") " + String.valueOf(mul1)+" × " + String.valueOf(mul2)+" = " + String.valueOf(mul1 * mul2) + "\r\n";
}else {
int roo;
// 数据范围需要注意
int mul2 = (int)(1 + Math.random() * (mul1 - 1 + 1));
roo = mul1 % mul2;
if(roo==0) {
Question = Question + "("+String.valueOf(j + 1)+") " + String.valueOf(mul1)+" ÷ " + String.valueOf(mul2) + " =" + "\r\n";
Answer = Answer + "("+String.valueOf(j + 1)+") "+ String.valueOf(mul1) + " ÷ " + String.valueOf(mul2) + " = " + String.valueOf(mul1 / mul2) + "\r\n";
}else {
Question = Question + "("+String.valueOf(j + 1) + ") " + String.valueOf(mul1) + " ÷ " + String.valueOf(mul2)+" =" + "\r\n";
Answer = Answer + "("+String.valueOf(j + 1) + ") " + String.valueOf(mul1) + " ÷ " + String.valueOf(mul2)+" = " + String.valueOf((int)mul1 / mul2) + "..." + String.valueOf(roo) + "\r\n";
} }
}
System.out.println(Question + "\r\n"+Answer);
OutAnswer(Question + "\r\n"+Answer); } }

3. 代码规范

请给出本次实验使用的代码规范:

  • 采用4个空格缩进,禁止使用tab字符。
  • 左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格
  • 注释的双斜线与注释内容之间有且仅有一个空格
  • 大括号的使用约定
  • 方法参数在定义和传入是,多个参数逗号后边必须加空格
  • 没有必要增加若干空格来是耨一行的字符与上一行对应位置的字符对齐
  • 不同逻辑、不同语义、不同业务的代码之间插入一个空行分割开来以提升可读性
  • 任何二目、三木运算符的左右两边都需要加一个空格

并人工检查代码是否符合规范

五、测试

  • 命令:

java MathExam 5 1

  • 输出:

(1) 70 - 15 =

(2) 54 - 40 =

(3) 11 - 2 =

(4) 7 - 6 =

(5) 85 - 14 =



(1) 70 - 15 = 55

(2) 54 - 40 = 14

(3) 11 - 2 = 9

(4) 7 - 6 = 1

(5) 85 - 14 = 71

  • 命令:

java MathExam 5 2

  • 输出:

(1) 10 ÷ 5 =

(2) 7 ÷ 2 =

(3) 4 ÷ 4 =

(4) 6 ÷ 3 =

(5) 7 ÷ 2 =



(1) 10 ÷ 5 = 2

(2) 7 ÷ 2 = 3...1

(3) 4 ÷ 4 = 1

(4) 6 ÷ 3 = 2

(5) 7 ÷ 2 = 3...1

六、总结

请总结过程中的教训和经验,思考

  • 使用了“软件开发的基本策略:分而治之”,不需要重构
  • “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,通过封装函数来执行代码,方便后期修改
  • 代码需求应该分析清楚,细节部分容易出错

作业1-MathExam的更多相关文章

  1. MathExam第二次作业

    第二次作业:MathExam 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 30 • ...

  2. MathExam作业

    作业 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 50 40 • Estimate • ...

  3. MathExam第二次作业(升级版)

    MathExamLv2——林华伟 211506319 陈珍 211406263   一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实 ...

  4. 作业MathExam

    MathExam233 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 650 • ...

  5. MathExam小学一二年级计算题生成器V1.0

    MathExam小学一二年级计算题生成器v1.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning ...

  6. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  7. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  8. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

  9. T-SQL检查停止的复制作业代理,并启动

        有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...

  10. Python09作业思路及源码:高级FTP服务器开发(仅供参考)

    高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...

随机推荐

  1. 浅谈IC行业产业链以及贸易商在产业链中的作用  2008-10-16 12:45[转自Michael的博客]

    随着集成电路行业在中国的迅猛发展, 中国的低成本劳动力和开放的引入外资政策, 使得全球电子产品生产厂商为了降低成本, 增加产品市场竞争力, 纷纷在中国设立生产线, 而中国不断膨胀的购买力也促进了这一产 ...

  2. #leetcode刷题之路40-组合总和 II

    给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的每个数字在每个组合中只能使用一次.说 ...

  3. 关于java8(Stream)的一些用法

    如果要处理int[] 转换成 List<Integer>这种形式的,可以用下面这个方法: List<Integer> orgIds = Arrays.stream(reqVo. ...

  4. 六、Delphi10.3通过Json.Serializers单元对大量数据序列化

    一.参考我之前的博客,Delphi可以很方便的把类和结构体转换成JSON数据,但是数据量大了,就会非常之慢,1万条数据需要20秒左右.如果引用Serializers单元,那么100万数据只需要4秒左右 ...

  5. Ghostscript远程代码执行漏洞利用方法

    昨天爆出来的Ghostscript远程代码执行漏洞,复现过程如下 1.确认系统是否安装了gs 执行命令 gs -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/ ...

  6. 时间序列深度学习:seq2seq 模型预测太阳黑子

    目录 时间序列深度学习:seq2seq 模型预测太阳黑子 学习路线 商业中的时间序列深度学习 商业中应用时间序列深度学习 深度学习时间序列预测:使用 keras 预测太阳黑子 递归神经网络 设置.预处 ...

  7. 1、算法介绍,lowB三人组,快速排序

    1.什么是算法 2.递归 # 一直递归,递归完成再打印 def func4(x): if x > 0: func4(x - 1) print(x) func4(5) 3.时间 复杂度 (1)引入 ...

  8. 【CQOI2017】小Q的棋盘

    题面 题解 根据题意,不回头是最好的(显然法) \(dfs\)找到最长链,设长度为\(\mathrm{L}\),然后分类讨论: 如果\(\mathrm{L} > m\),答案就是\(m + 1\ ...

  9. Unity3d之Hash&Slash学习笔记之(二)--角色基础类的构建

    Hash&Slash学习笔记之(二)--角色基础类的构建 BaseStat类的构建 基本成员变量: _baseValue //基础属性值 _buffValue //增加的buff值 _expT ...

  10. Kafka系列二 kafka相关问题理解

    1.kafka是什么 类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据. kafka是一个生产-消费模型. producer:生产 ...