MathExam233

一、预估与实际

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

二、需求分析

我通过上网调查的方式了解到,小学一年级数学有如下的几个特点:

  • 特点1
  • 在数学加减方面加减法必须在100范围以内,减法得出的结果不是能为负数
  • 特点2
  • 在数学乘除方面乘法必须满足乘法口诀表,除法方面除数必须为个位数,而且商也必须为个位数。

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

  • 小学一年级
  • 使用的数字必须小于100
  • 减法方面得出的结果必须为正整数
  • 小学二年级
  • 在乘法方面两个数满足乘法口诀表,小于10
  • 在除法方面,被除数小于90,商和除数还有余数必须为个位数。
  • 乘除法得出的结果为正数

三、设计

1. 设计思路

说明你如何设计这个程序

比如:

-对输入的数进行判断分析是否符合要求以及随机数

  • 根据输入的数判断一年级还是二年级
  • 熟悉加减法在一年级的需求
  • 熟悉乘除法在二年级的需求
  • IO流文件将题目和答案写入

2. 实现方案

写出具体实现的步骤

比如:

  • 准备工作:先在Github上创建仓库,克隆到本地,在本地文件夹中创建psp文件,再用桌面版的github comit传到本地仓库。
  • 技术关键点:

    1根据args[]输入来判断一年级还是二年级

    2用do while语句来判断除法的合理性

    3如何输出out.txt文件

四、编码

  • 随机数的生成 Math.random()
  • 根据args[]的length与正则表达式语句判断输入的符合加减运算还是乘除运算
  • 用IO流写入文本out.txt

1. 调试日志

  • 在为输入判断时防止输入字母和0开头的数字,用正则表达式解决
  • 在如何将args[]如何转换为整型用integer.valueof解决

    -在除法方面忽略了除数不能等于0的问题,以及商不能为两位数。

    -在输入方面忽略了范围的缩小,后来将最大题目数修改为1000以内。

2. 关键代码

for(int i=0;i<num;i++) {
String j="("+(i+1)+")"+" ";
d=(int) (Math.random()*10);
if(d%2==0 ) {
a=(int) (Math.random()*9+1);
b=(int) (Math.random()*9+1);
p="*";
k=String.valueOf(a*b);
}else {
p="/";
do {
a=(int) (Math.random()*90+1);
b=(int) (Math.random()*10+1);
e=a/b;
f=a%b;
if(f!=0) {
k=e+"..."+f;
}else {
k=String.valueOf(e);
}
}while(e<=0 || e>=10 || b==0);

这是一段乘除法运算的代码,通过随机生成d是否整数2来判断时乘还是除,因为乘法满足惩罚口诀表内的范围,所以将两个数的随机生成范围缩小到1-9,在do while循环里如果除数等于0或者被除数小于除数或者商大于0的时候重新生成随机数再次运算。

3. 代码规范

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

  • 在for循环/do while/if等语句必须加括号以及字与括号间的空格
  • 在if里嵌套多个if 要对应好if 与else 防止出错
  • 一般情况下使用空格缩进
  • 在括号方面在结束的时候必须换行,左边大括号后面要换行,右边大括号换行
  • 不能使用未定义的变量

五、测试

测试输入 输出 是否符合预期效果
001 输入错误。请重新输入
0 输入错误。请重新输入
0.1 输入错误。请重新输入
-10 输入错误。请重新输入
-10 1 输入错误。请重新输入
-10 2 输入错误。请重新输入
10 -1 输入错误。请重新输入
10 -2 输入错误。请重新输入
a 输入错误。请重新输入
a a 输入错误。请重新输入
1000 输入错误。请重新输入
1000 1 输入错误。请重新输入
1000 2 输入错误。请重新输入
999 正确输出
999 1 正确输出
999 2 正确输出

六、总结

  • 是否使用了“软件开发的基本策略:分而治之”,是否需要重构

    • 使用了“软件开发的基本策略:分而治之”,没有明显用到重构方法
  • “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
    • 适当的采用,重构能力弱用的不是很多。

作业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小学一二年级计算题生成器V1.0

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

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

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

  6. SQLServer2005创建定时作业任务

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

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

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

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

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

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

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

随机推荐

  1. centos7 支持中文显示(转)

    centos7 支持中文显示 - kingleoric - 博客园https://www.cnblogs.com/kingleoric/p/7517753.html http://www.linuxi ...

  2. 联想ERP项目实施案例分析(10):回到最初再反思IT价值

    联想ERP项目实施案例分析(10):回到最初再反思IT价值 投入上千万(未来每年的维护费也非常高),投入一年实施时间,高级副总裁亲自挂帅,各级业务部门管理者亲自负责.骨干业务人员充当区域IT实施者/推 ...

  3. JQuery的ajax函数执行失败,alert函数弹框一闪而过

    先查看<form>标签是否有action属性,如果没有,并且最后<button>标签的type属性为'submit‘时,默认提交位置就是当前页面 如果在页面右键检查,点击网络, ...

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

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

  5. Linux-2.6驱动程序分层分离概念

    下面以一个按键的实验作为驱动分离时间简单学习: #include <linux/module.h> #include <linux/version.h> #include &l ...

  6. C中级 - 文件辅助操作

    引言 - 业务有点麻烦 C 功能很强大, 同样书写起来会谨慎(拖泥带水). 不妨通过一个小问题来描述裹脚的 C 需求: 用 C 创建一个文件! 难点在于 1. 文件路径切割成 目录 + 文件名 2. ...

  7. 基于R语言的结构方程:lavaan简明教程 [中文翻译版]

    lavaan简明教程 [中文翻译版] 译者注:此文档原作者为比利时Ghent大学的Yves Rosseel博士,lavaan亦为其开发,完全开源.免费.我在学习的时候顺手翻译了一下,向Yves的开源精 ...

  8. MySQL配置主主及主从备份

    原文:https://www.cnblogs.com/ahaii/p/6307648.html MySQL主从备份配置实例 场景: 1.主服务器192.168.0.225.从服务器192.168.0. ...

  9. WPF MessageContract DataContract

    个人理解: DataContract:都序列化在消息体内. MessageContract :能够定义数据字段的序列化位置,比如在头部或者在消息体内.

  10. 矩阵类的python实现

    科学计算离不开矩阵的运算.当然,python已经有非常好的现成的库:numpy. 我写这个矩阵类,并不是打算重新造一个轮子,只是作为一个练习,记录在此. 注:这个类的函数还没全部实现,慢慢在完善吧. ...