自己取一个大气又可爱的标题

  • 小学二年级的还没来得及写,大部分时间还是花在巩固和查阅新旧知识上了,通过看学习视频,查资料,看博客园的博客...下次完善好了交上。

一、预估与实际

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的更多相关文章

随机推荐

  1. KVM的初始化过程

    之前打算整理一下在Guest VM, KVM, QEMU中IO处理的整个流程,通过查阅资料和阅读源码,已经大致知道IO在Guest KVM中的处理流程.当想要整理IO在KVM和QEMU中的处理时,发现 ...

  2. 聊聊iOS Keychain

    某天,小熊碰见这样一个错误 Couldn't update the Keychain Item问题处理 ,网上搜索了下网上很多解决方案,依然百撕不得骑姐.后来参考下面两篇文章.才发现是用法不正确,网上 ...

  3. Linux入门基础(一):Linux基本操作

    命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...

  4. Scala模式匹配常用

    今天在工作中遇到的几个小问题,总结一下: 1.因为业务需要调用PHP的接口,获取到的返回体需要做一段逻辑处理,然而某个字段接收到的参数是io.serializable类型,字段的类型不是预期的stri ...

  5. WPF 自定义MenuItem样式

    原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...

  6. WPF 学习笔记-设置属性使窗口不可改变大小

    原文:WPF 学习笔记-设置属性使窗口不可改变大小 调整Windows下的ResizeMode属性: ResizeMode = NoResize Resize属性是控制Windows是否可以改变大小, ...

  7. mfc 带参数的构造函数

    知识点 默认的构造函数 带参数的构造函数 重载构造函数 一.默认的构造函数 二.带参数的构造函数 三.重载构造函数 class Tdate { public: int year;//年 int mon ...

  8. nginx后端节点健康检查

    一.nginx健康检查的三种方式 .ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带) 官网地址:http://nginx.org/en/d ...

  9. Openstack入门篇(十三)之云主机创建

    1.知识回顾与端口总结 service 功能 MySQL 为各个服务提供数据存储 RabbitMQ 为各个服务之间通信提供交通枢纽 Keystone 为各个服务器之间通信提供认证和服务注册 Glanc ...

  10. ant property file刷新不及时

    一.问题 ant脚本定义file的property,有时往里面写了新的值,去访问时还是旧的值 二.原因分析 应该是已定义的file property,后续更新其值的时候,ant的内存缓存没有及时更新, ...