出题器

真·小学出题器设计报告

一、预估与实际

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

二、需求分析

我通过百度的方式了解到,小学一年级数学和二年级有如下的几个特点:

  • 特点1:小学数学一年级上学期学习20以内的加减。
  • 特点2:小学数学一年级下学期学习20以上的加减。
  • 特点3:小学数学一年级学习顺数,倒数,单数,双数。
  • 特点4:小学数学一年级学习比较大小和第几。
  • 特点5:小学数学二年级学习九九乘法表。
  • 特点6:小学数学一年级学习不借位的除法。
  • 特点7:小学数学一年级学习除法的余数。

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

  • 加减时使用的数字小于100。
  • 100以内的减法不能出现负数,即被减数小于减数。
  • 乘除时使用的数字小于10。
  • 100以内的除法不能出现分数,即被除数小于除数。
  • 除法时候除数被除数不能为0。

三、设计

1. 设计思路

说明你如何设计这个程序

  • 设计一个一年级的出题类和二年级的出题类,以及一个取余数的方法,和一个选择年级的方法。
  • 算法的关键的关键是随机生成限制内的数,以及随机的加减乘除。
  • 判断随机数是否为0,被减数要大于减数,被除数也要大于除数。

2. 实现方案

写出具体实现的步骤

  • 准备工作:先在Github上创建仓库,克隆到本地。
  • 技术关键点:梳理一下设计思路,如何解决余数的显示以及筛选随机数的限制。
  • 先解决一年级的出题库,在根据一年级的代码改成二年级的乘除的出题库。

四、编码

根据设计思路开始,先写出一年级的出题库,设置静态私有变量。对x和y的进行随机数的赋值。然后输出题目以及将题目和答案保存到数组里面输出来。最后将这些输入到文本里,并保存到电脑上。最后在将一年级提出来设计成类,根据一年级的代码方式形成二年级的代码方式。

1. 调试日志

记录编码调试的日志,请记录下开发过程中的 debug 历程

比如:

  • 在设计余数类的时候,(x%y==y)时输出出错,整出依旧显示余数0,例如8/1=1...0。解决方法 将(x%y==y)判断改成(x%y) == 0。
  • 在choiceGrade(i, g)在输出文件代码上面,这样就无法保存到文件中输出出来。解决方法将choiceGrade(i, g);放在输出文件代码下方。

2. 关键代码

    for (int i = 0; i < n; i++) {
    //随机10以内的X和y,并且生成一个0到1子内的f。
        x = new Random().nextInt(10) + 1;
        y = new Random().nextInt(10) + 1;
        f = (int)(Math.random()*2);
        //判断 f是否为0,0为加法。以及x和y不等于0。
        if ( f == 0 && y!=0 && x!=0) {
            System.out.println("(" + (i+1) + ")" +" " + x + "*" + y + " " + "=" + " ");
            str[i] = "(" + (i+1) + ")" +" " + x + "*" + y + " " + "=" + " " + (x*y);
        }
        else {
        //判断被除数小于除数。如果小于交换位置。
            if (x-y < 0 ) {
                System.out.println("(" + (i+1) + ")" +" " + y + "/" + x + " " + "=" + " ");
                str[i] = "(" + (i+1) + ")" +" " + y + "/" + x + " " + "=" + " " + (y/x) + judgementRemainder(y,x);//judgementRemainder(y,x)是一个判断余数的类
            }
            else {
                System.out.println("(" + (i+1) + ")" +" " + x + "/" + y + " " + "=" + " ");
                str[i] = "(" + (i+1) + ")" +" " + x + "/" + y + " " + "=" + " " + (x/y) + judgementRemainder(x,y);
            }
        }
    }

3. 代码规范

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

  • 第一条代码中的命名均不能以下划线或美元符号开始,也不能一下划线或美元符号结束。
  • 第二条代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
  • 第三条杜绝完全不规范的缩写,避免忘文不知义。
  • 第四条为了达到代码自己自解释的目标,任何自定义编程元素在命名时,使用精良完整的单词组合来表达其意。但是有些名称实在过于长,这个可以适当的缩写,不要忘文不知义就可以。
  • 第五条代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

五、测试

  • 输入5 2 预计显示5道二年级题目
    1472381-20180911232902523-2013971391.png
  • 输入5 1预计显示5道一年级题目
    1472381-20180911233015158-109387111.png
  • 输入超过2以上年级是显示其他
    1472381-20180911233213004-2127382322.png

六、总结

  • 第一次设计小的软件,看似不是很难。但实则考虑的东西太多了。作为一个程序开发人员的角度上,要将程序设计得简洁,高效。作为一个用户角度上来看应该要注重软件的使用是否方便。
  • 在代码的使用中要严格按照代码规范进行编写。

转载于:https://www.cnblogs.com/yehongqi/p/9631700.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值