MathExam6317
自己取一个大气又可爱的标题
- 小学二年级的还没来得及写,大部分时间还是花在巩固和查阅新旧知识上了,通过看学习视频,查资料,看博客园的博客...下次完善好了交上。
一、预估与实际
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | ||
| • Estimate | • 估计这个任务需要多少时间 | 24*60 | 24*60 |
| Development | 开发 | ||
| • Analysis | • 需求分析 (包括学习新技术) | 6*60 | 6*60 |
| • Design Spec | • 生成设计文档 | - | - |
| • Design Review | • 设计复审 | - | - |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 60 | 60 |
| • Design | • 具体设计 | 120 | 120 |
| • Coding | • 具体编码 | 360 | 360 |
| • Code Review | • 代码复审 | 120 | 120 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 60 | 60 |
| Reporting | 报告 | ||
| • Test Repor | • 测试报告 | - | - |
| • Size Measurement | • 计算工作量 | 60 | 60 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 60 | 60 |
| 合计 | 2640 |
二、需求分析
我通过百度的方式了解到,小学一年级数学有如下的几个特点:
- 1.100以内数的认识和加减法
- 2.两位数加、减一位数
- 3.两位数加、减整十数
经过分析,我认为,这个程序应当:
- 1.限制输入的题数太大
- 2.限制两数相加的其中一位是整十数或者是个位数
- 3.限制两数相减的减数是整十数或者是个位数
三、设计
1. 设计思路
说明你如何设计这个程序

- 这个程序就一个主函数
- 创建文件IO流
- 获取用户输入
- 判断输入参数是否符合
- 输出 ...
2. 实现方案
写出具体实现的步骤
- 准备工作:先在Github上创建仓库,克隆到本地...
- pull request提交
- 写代码:
创建文件IO流,后期将题目 和 题目+答案 写入out.txt文本中,再输出
获取用户输入并用正则表达式判断用户输入的参数是否符合题意
生成两个随机数组成加减法题目,第二个数要符合整十数或者个位数,然后写入将题目和答案文本中
按格式输出题目 题目+答案 - 技术关键点:判断用户输入的各种不符合参数,如:
少于或多于一个参数
参数为非数字
参数数字过大或参数为负数 - ...
四、编码
- main函数:
new File 创建文本文件“out.txt”
DataOutputStream 创建文件输出流
Scanner 获取用户输入的参数 String 类型
用正则表达式+while循环判断输入的参数是否少于或多于一个参数、参数为非数字、参数为负数,是的话重新输入,不是的话转换成int类型
用while循环判断输入的参数是否在范围内,参数数字是否过大或过小,符合的话break,不符合的话重新输入
利用random生成两个1~100的随机数,若第二个数大于10,num2%10*10,保证为整十数或个位数
用writeUTF写入数据
用readUTF读出数据
...
1. 调试日志
如何创建文件IO流
解决:通过查阅上学期的PPT课件输入的参数过大或过小
解决:利用while(true)和for循环判断参数范围输入的参数不是正整数、字符或小数,参数过多
解决:通过上网查阅,利用正则表达式和while循环解决
2. 关键代码
请展示一段程序的关键代码,并解释代码的作用
public static void main(String[] args) throws IOException {
//确定输出的文件
File file = new File("out.txt");
//创建指向文件的数据输出流
DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
// @SuppressWarnings("resource")
// Scanner input = new Scanner(System.in);
// System.out.println("小学一年级数学加减计算题");
// System.out.println("请输入题目数量:");
//获取控制台输入题目数量n,格式为String
// String args[0] = input.nextLine();
//循环判断:输入的是否是一个正整数
// while(true) {
// if(!(args[0].matches("\d+"))) {
// System.out.println("错误1.您的输入有误,请重新输入一个1~1000的整数:");
// args[0] = input.nextLine();
// }
// else {
// break;
// }
// }
// //将n从String类型转换为int类型
// int n = Integer.parseInt(args[0]);
//
// //循环判断:当n的范围属于1~1000时跳出死循环,否则重新获取控制台输入
// while(true) {
// if(n>0 && n<=1000) {
// break;
// }
// else {
// System.out.println("错误2.您的输入有误,请重新输入一个1~1000的整数:");
// args[0] = input.nextLine();
// }
// n = Integer.parseInt(args[0]);
// }
//判断输入
while(true) {
//非正整数
if(!(args[0].matches("\d+"))) {
return;
}
//范围 0~1000
else if(Integer.parseInt(args[0])>0 && Integer.parseInt(args[0])<=1000) {
break;
}
else {
return;
}
}
//生成题目
for (int i = 1; i <= Integer.parseInt(args[0]); i++) {
//生成两个0~100的随机数
int num1 = (int)(Math.random()*100+1);
int num2 = (int)(Math.random()*100+1);
//生成题序和题目
if(num1 > num2) {//被减数大于减数 保证得数不为负数
//生成减法
if(num2 >= 10) {
num2 = num2/10*10;//减数取整十数
}
System.out.println("("+ i +") " + num1 +" - "+ num2);
String str = ("("+ i +") " + num1 +" - "+ num2 + " = " + (num1-num2));
//写入数据
out.writeUTF(str);
// System.out.println(str);
}
else {
//生成加法
if(num2 >= 10)
num2 = num2/10*10;//取整十数
if(num1 + num2 >100)
num2 = num2/10;//保证两数和不大于100
System.out.println("("+ i +") " + num1 +" + "+ num2);
String str = ("("+ i +") " + num1 +" + "+ num2 + " = " + (num1+num2));
//写入数据
out.writeUTF(str);
// System.out.println(str);
}
}
out.close();
System.out.println();
//创建指向文件的数据输入流
DataInputStream in = new DataInputStream(new FileInputStream(file));
//读数据 输出题目和答案
for (int i = 0; i < Integer.parseInt(args[0]); i++) {
System.out.println(in.readUTF());
}
in.close();
}//main
3. 代码规范
请给出本次实验使用的代码规范:
- 第一条.注释必须通俗易懂,该要的要,不该要的不要
- 第二条.代码尽量精简,不要太冗长
并人工检查代码是否符合规范
五、测试
测试各种输入参数,如:0、100000、-22、9.3、asd、3 4 7...
六、总结
请总结过程中的教训和经验,思考
编程思想还不够严谨,基础知识掌握的不扎实,有很多较基础的代码或语句的运用还需通过查阅PPT课件和百度,博客园是个好东西啊,有很多大佬的各种经验和建议,很多不懂的知识点也可以在博客园上找到,GitHub的使用目前还很生疏,还需慢慢掌握,应该多花时间在基础知识的掌握上,掌握好了才去更深入的学习,不能操之过急。
- 是否使用了“软件开发的基本策略:分而治之”,是否需要重构
- “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
MathExam6317的更多相关文章
随机推荐
- 手把手教你写基于C++ Winsock的图片下载的网络爬虫
手把手教你写基于C++ Winsock的图片下载的网络爬虫 先来说一下主要的技术点: 1. 输入起始网址,使用ssacnf函数解析出主机号和路径(仅处理http协议网址) 2. 使用socket套接字 ...
- JS数组的赋值
var test=[1,2,3,4,5,6,7]; var arr=test; arr.splice(2,1); alert(test);//1,2,4,5,6,7 JS数组实质上是对象.因此, ...
- HTTP中常见的各种状态码详解及解决方案
总结了一些常见的http的状态码,以及常见的解决方案. 一.各范围内状态码大致含义 1xx:临时响应(Informational),需要请求者继续执行操作的状态代码,表示服务器正在接受请求. 2xx: ...
- centos7.4安装redis以及配置外网访问
一.安装redis 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz [root@VM_34_108_c ...
- 三、用Delphi10.3 创建一条JSON数据的第三种方法,非常简洁的写法
一.用Delphi10.3构造一个JSON数据的第三种方法,并格式化输出,代码如下: uses // System.JSON, System.JSON.Types, System.JSON.Write ...
- QT中QToolTip样式设置的两种方式
方式一 使用样式表设置 ui.label->setStyleSheet("QToolTip{border:1px solid rgb(118, 118, 118); backgroun ...
- SAP函数 CS_WHERE_USED_MAT 反查上层BOM
遇到用户要根据下层物料反查最上层BOM物料是什么. 试了一下,通过函数 CS_WHERE_USED_MAT 来查询,但是只能往上查询一层,类似事务码CS15的效果.如果要找最上层物料,需要自己写迭代进 ...
- ExcelVBA实现一键生成word文字报告及批量操作[原创]
在很多工作中,经常需要写一些类似的报告,使用同一个模板,只是里面的数据不同,人工操作工程量大且容易出错,如果能用程序直接实现可以省去不少麻烦. 本文使用ExcelVBA实现,主要思路是使用word邮件 ...
- C++引用的用处
原文:http://www.cnblogs.com/ddx-deng/archive/2012/12/16/3755864.html 一.什么是“引用”?声明和使用“引用”要注意哪些问题? 答:引用就 ...
- 双系统IOS\windows7 换成Windows10后果
昨天将双系统IOS 和Windows7 换成了Windows10后 发现原来在IOS盘"E"盘下面的文件都不显示了,而且盘符都打不开,那叫一个着急啊,开发项目的代码全在那个盘符里面 ...