作业1-MathExam
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的更多相关文章
- MathExam第二次作业
第二次作业:MathExam 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 30 • ...
- MathExam作业
作业 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 50 40 • Estimate • ...
- MathExam第二次作业(升级版)
MathExamLv2——林华伟 211506319 陈珍 211406263 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实 ...
- 作业MathExam
MathExam233 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 650 • ...
- MathExam小学一二年级计算题生成器V1.0
MathExam小学一二年级计算题生成器v1.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning ...
- python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
- SQLServer2005创建定时作业任务
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
- 使用T-SQL找出执行时间过长的作业
有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下: SELECT sj.name , ...
- T-SQL检查停止的复制作业代理,并启动
有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...
- Python09作业思路及源码:高级FTP服务器开发(仅供参考)
高级FTP服务器开发 一,作业要求 高级FTP服务器开发 用户加密认证(完成) 多用户同时登陆(完成) 每个用户有不同家目录且只能访问自己的家目录(完成) 对用户进行磁盘配额,不同用户配额可不同(完成 ...
随机推荐
- html5的拖拽事件
原生拖放 一.若要一个元素可以被拖放,首先要为元素添加draggable属性 true 可以被拖放 false 不可以被拖放 auto 除img或url以外都可以被拖放 其他值 都不可以被拖放 注释: ...
- 06_Java基础语法_第6天(自定义类、ArrayList集合)_讲义
今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...
- 解决MAC下修改系统文件没权限的问题
问题 用brew在mac上可以轻松的管理软件, 不过最新的mac系统升级后, brew执行update命令时会报权限不足的错误, 而且会提示执行命令sudo chown -R $(whoami) /u ...
- Delphi的idhttp报508 Loop Detected错误的原因
一般是访问https时才出现“508 Loop Detected”,idhttp+IdSSLIOHandlerSocketOpenSSL,这个在上篇文章中讲过了. 由于该问题网上资料极少,连外文资料也 ...
- GoldData学习实例-采集官网新闻数据
概述 在本节中,我们将讲述抓取政府官网地方新闻.并将抓取的新闻数据融入到以下两张数据表news_site和news中. news_site(新闻来源) 字段 类型 说明 id bigint 主键,自动 ...
- 从0开始学golang--1.1--连接ms sql server数据库
package main import ( "database/sql" "fmt" "strings" ) imp ...
- An Introduction to the Basics of Modern CSS Buttons
https://www.sitepoint.com/modern-css-buttons/
- JavaWeb基础—MySQL入门小结
一.数据库概述 RDBMS:关系型数据库管理系统 == 管理员(manager)+仓库(database) 常见数据库: Oracle(神喻):甲骨文 MySQL: 归于甲骨文旗下(高版本系统已经开 ...
- MTCNN(Multi-task convolutional neural networks)人脸对齐
MTCNN(Multi-task convolutional neural networks)人脸对齐 .
- 15-[JavaScript]-ECMAScript 1
0.javaScript的发展历程 https://zhuanlan.zhihu.com/p/27985124 1.javaScript是什么? javaScript是一种web前端的描述语言,也是一 ...