热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2016012027+小学四则运算练习软件项目报告

git地址:https:git.coding.netlhycodingqylbc2.git一、需求分析程序可从命令行接收一个输入参数n,然后随机产生n道

git地址:https://git.coding.net/lhycoding/qylbc2.git

一、需求分析

  1. 程序可从命令行接收一个输入参数n,然后随机产生n道加减乘除练习题。
  2. 每个数字在0和100之间,运算符3个到5个之间。
  3. 每个练习题至少要包含2种运算符。
  4. 所出的练习题在运算过程中不得出现负数与非整数。
  5. 将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中。
  6. 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。(附加)
  7. 支持真分数的出题与运算(只需要涵盖加减法即可),且支持分数的自动化简。(附加)

二、功能设计

 1.基本功能:

    Ⅰ程序接收参数n,并对n的合法性作出判断,若出现错误则提示。

    Ⅱ自动生成n个运算式,并计算得出结果。

    Ⅲ将计算后的结果与运算式一同存入txt文件中,保存在指定目录下。

  2.扩展功能(附加):

    Ⅰ由于面向对象是小学生,因此数字在0-100之间。

    Ⅱ随机产生括号并保证括号的合法有效性。

    Ⅲ加入分数运算式,并且保证计算前后都是真分数,且不可化简。

三、设计实现

  1.先建一个类进行随机数的生成

  2.并用符号去进行随机数组的生成

  3.然后再去将他们合并的一个字符串中

  4.建两个字符串,一个用来输出,一个用来计算结果

  5.最后进行输出

四、算法详解

  将数字和符号输入到一个字符串中,判断如果为÷,则str1加一个/,否则str和str1同时加入产生的符号或者数字,最后对整串进行求解,截图上只是三个运算符的计算,四个和五个的原理相同,都通过这样去解决

for (int m=0;m) {int i=(int)(Math.random()*3+3);
// int i&#61;5;int a,b,c,d,e,f;char k,y,z,q,w;String temp;if(i&#61;&#61;3){a&#61;Operate.num();String str &#61; Integer.toString(a);String str1 &#61; Integer.toString(a);k&#61;Operate.getOperator();str &#43;&#61; String.valueOf(k);if(k&#61;&#61;&#39;÷&#39;){str1 &#43;&#61; &#39;/&#39;;}else{str1 &#43;&#61; String.valueOf(k);}b&#61;Operate.num();str &#43;&#61; b;str1 &#43;&#61; b;y&#61;Operate.getOperator();str &#43;&#61; String.valueOf(y);if(y&#61;&#61;&#39;÷&#39;){str1 &#43;&#61; &#39;/&#39;;}else{str1 &#43;&#61; String.valueOf(y);}c&#61;Operate.num();str &#43;&#61; c;str1 &#43;&#61; c;z&#61;Operate.getOperator();str &#43;&#61; String.valueOf(z);if(z&#61;&#61;&#39;÷&#39;){str1 &#43;&#61; &#39;/&#39;;}else{str1 &#43;&#61; String.valueOf(z);}d&#61;Operate.num();str &#43;&#61; d;str1 &#43;&#61; d;System.out.print(str);System.out.print("&#61;");System.out.println(jse.eval(str1));temp &#61; String.valueOf(jse.eval(str1));Double result &#61; Double.parseDouble(temp);if(result<0||result%1!&#61;0){m--;}else {System.out.print(str);System.out.print("&#61;");System.out.println(jse.eval(str1));fop.write(str.getBytes());fop.write(("&#61;" &#43; jse.eval(str1)).getBytes());fop.write("\r\n".getBytes());}

五、测试运行

  命令行中显示的结果

  

  文件中结果

  

六、部分代码展示

  

public class Operate {public static char getOperator() {char[] a &#61; {&#39;&#43;&#39;, &#39;-&#39;, &#39;÷&#39;, &#39;*&#39;};int b &#61; (int) (Math.random() * 4);char x &#61; a[b];return x;}public static int num() {int number &#61; (int) (Math.random() * 101);return number;}
}

 

 

 

  这段代码是用来产生随机数和运算符号&#xff0c;因为要求用÷显示&#xff0c;所以在除的时候显示÷。

import jdk.nashorn.internal.ir.CallNode;import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Main {public static void main(String [] args) throws ScriptException, IOException {int x;try {x &#61; Integer.parseInt(args[0]);if(x<1||x>1000){System.out.println("Sorry,you can only input the number between 1 to 1000!");return;}}catch (NumberFormatException e){System.out.println("Sorry,you can only input the number between 1 to 1000!");return;}MakeFile makeFile &#61; new MakeFile();makeFile.getFile(x);}
}

  这一段&#xff0c;让用户输入时出现错误的时候进行提醒&#xff0c;如果输入非法字符&#xff0c;则进行提示。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileOutputStream;
import java.io.IOException;public class MakeFile {public void getFile(int x) throws ScriptException, IOException {ScriptEngine jse &#61; new ScriptEngineManager().getEngineByName("Javascript");java.io.File file &#61; new java.io.File("result.txt"); //生成保存结果的文件FileOutputStream fop &#61; new FileOutputStream(file);if (!file.exists()) {file.createNewFile();}String serialNo &#61; "2016012027";fop.write(serialNo.getBytes());fop.write("\r\n".getBytes());for (int m&#61;0;m}

  这一段用来进行计算&#xff0c;一个str一个str1&#xff0c;一个进行显示&#xff0c;一个进行计算&#xff0c;最后结果result&#xff0c;用来加到显示str之后&#xff0c;让用户看到的式子是÷。题数上的话&#xff0c;我是通过for循环&#xff0c;如果结果是分数或者小数&#xff0c;使循环的数减一&#xff0c;即相当于不加&#xff0c;而如果是整数的话&#xff0c;则进行输出&#xff0c;这样就保证了输出的算式数量与用户需求一样。

  代码上的话&#xff0c;因为之前没学过Java&#xff0c;所以这一个星期&#xff0c;临阵磨枪&#xff0c;学了一些Java的简单输入输出语句&#xff0c;以及看了看网上的一些博客的做法&#xff0c;最后还是决定用js里的eval函数&#xff0c;这个函数用起来比较方便仅通过几行代码&#xff0c;便实现了需要好多行代码才能实现的功能

七、项目总结

  之前没有接触过Java&#xff0c;这个作业做了好多天&#xff0c;自从布置了作业一直在看这个东西怎么做&#xff0c;好多次因为在工作室看这个忘记时间&#xff0c;去了食堂已经没饭&#xff0c;只能回去泡面&#xff0c;不过所幸最后做出来一个基本功能&#xff0c;也算有所收获&#xff0c;周末也如杨老师说的一样&#xff0c;在补以前的东西&#xff0c;附加功能的话&#xff0c;实在是时间太短&#xff0c;做不出来&#xff0c;这次项目&#xff0c;学到了一些Java的基本语言&#xff0c;有所收获。

八、PSP展示

PSP2.1

任务内容

计划共完成需要的时间(h)

实际完成需要的时间(h)

Planning

计划

2

2

·        Estimate

·   估计这个任务需要多少时间&#xff0c;并规划大致工作步骤

1

1

Development

开发

20

37

·        Analysis

·         需求分析 (包括学习新技术)

0.5

0.5

·        Design Spec

·         生成设计文档

0.2

0.2

·        Design Review

·         设计复审 (和同事审核设计文档)

0.1

0.1

·        Coding Standard

·         代码规范 (为目前的开发制定合适的规范)

0.5

0.6

·        Design

·         具体设计

1

1

·        Coding

·         具体编码

15

20

·        Code Review

·         代码复审

2

2

·        Test

·         测试&#xff08;自我测试&#xff0c;修改代码&#xff0c;提交修改&#xff09;

1

2

Reporting

报告

1

3

·         Test Report

·         测试报告

1

1

·         Size Measurement

·         计算工作量

1

1

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

0.2

0.2


转:https://www.cnblogs.com/qylbc/p/8645886.html



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
author-avatar
天狼飞虎神印
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有