一、项目要求

  • 随机生成50道100以内的加减法及混合运算习题数字。
  • 可以实现批改操作。
  • 可以统计正确及错误数量。

二、内容

(一)模块化软件构造

在模块化软件构造中,有如下几个重要问题:

  • 采用什么数据结构类,这里采用的是Equation这个算式内部类,包括四个变量left,right,result,op;
  • 构成算式时如何生成随机数:我们使用generateRandom( )方法,通过Random随机类来产生随机数;
  • 口算题重复:使用occursIn( )方法以及存储算式的习题数据结构,将当前生成的算式和习题中所有算式对比,判断是否重复,重复则继续生成,不重复则加入习题集;
  • 生成加减法混合算式:根据generateEquation( )方,通过生成随机数来实现,若生成随机数为1,则生成加法运算,若为0 ,则生成减法运算。

缺点:若干独立的功能集中在一个类中,不利于发现和修改程序中出现的错误,也不便于扩充程序的功能,所以将算法进行改进。

(二)面向对象软件构造

通过分析模块化程序设计结构,我们可以把所有算法划分为分别以算式和习题为中心的两大函数簇,进而应用面向对象的抽象和封装把两大函数簇设计为两个类:

  • 算式类:封装算式数据结构以及生成算式、生成随机数、判断算式是否相等以及转换为字符串等操作。
  • 习题类:封装习题数据结构及生成习题、输出习题、判断算式在习题中是否存在等操作。
  • 算式类和习题类之间是聚合的关系。也就是整体与部分的关系。在这个关系中,Equation是Exercise的一部分,但是它也可以脱离Exercise独立存在。

由于算式类中封装了特别多的操作,不符合高内聚原则,而且,生成加法算式和减法算式存在很多相同代码,但是计算加法和计算减法的代码缺完全不同,所以将加减法的公共部分抽象出来,定义为算式类。把不同的部分定义为不同的子类,就是加法子类和减法子类。

这里用到的面向对象设计原则为:单一职能原则,里氏代换原则,依赖倒转原则:

  • 单一职能原则:加减法类只封装了自己相关的操作,不会因为某一部分的改变影响它的职责。
  • 里氏代换原则:任何基类Equation可以出现的地方,子类SubEquation和AddEquation一定可以出现。
  • 依赖倒转原则:程序依赖于抽象接口,而没有依赖于具体的实现。 用到的设计模式是策略模式,即定义了SubEquation和AddEquation类,并将它们封装起来,它们之间也可以相互替换。

通过抽象类和接口去实现父类和子类的联系,UML类图如下所示:

缺点:虽然面向对象的软件构造实现了习题类和算法类的抽象与封装,但是缺少与用户的交互界面,所以将程序进一步细化。

运行结果如下:

(三)用户交互的软件构造

这部分主要涉及两个较为重要的问题,即菜单交互逻辑过程和何时结束程序运行。菜单交互逻辑过程也就是程序功能之间的操作逻辑,何时结束程序运行即交互界面是一个循环的逻辑控制过程,用户执行完某一操作后,程序就会回到菜单命令界面,这时选择退出程序即可。
主要涉及主函数中的函数调用,主函数如下:

运行结果如下:

缺点:虽然增加了用户交互界面,但是当题目过多时,需要不停的滑动鼠标查看,比较麻烦,所以下面将涉及独立窗口进行实现。

(四)GUI软件构造

实现的功能:界面上共显示20道练习题(类型可以进行选择),用户可以点击按钮更换到下一页的练习题。用户完成后提交答案,显示判题结果。

用到的技术:

  • 窗口布局borderLayout五区:上(菜单栏),中(答题区面板),下(批改面板)
  • 答题区:行列流式布局,设定组件和窗口大小匹配
  • 功能逻辑:按照用户交互软件构造部分设计交互菜单

运行结果如下:


三、出现的问题及解决方案

在窗口部分的设计实现中出现了较多的错误,开始不能实现翻页也不能统计正确错误率,但是通过对青岛大学软件构造慕课的学习,将代码进行了修改,最终实现了这些功能。

四、源代码

项目源码已上传至gitee,点击此处跳转

随机生成50道加减算术题相关推荐

  1. Java小程序--随机生成50道加减法算数题

    程序概述: 通过窗体随机生成50道加减法算数题并显示.用户可以做该50道算术题,做完提交系统之后,系统会给出用户的正确率.用户可以重置这50道算术题. 界面显示: 程序设计基本思路: (1)首先顺序建 ...

  2. 随机生成50道100以内的加减题(在线答题)

    一.代码部分: import random def fun(i):  score = 0  list = []  tup = ()  for i in range(i,51):     num1 = ...

  3. 【软件构造-java编写】生成50道100以内加法/减法算式的习题,并输出。(和不能超过100,差不能小于0)

    原题 (论述题) 生成50道100以内加法/减法算式的习题,并输出. (1)每个算式还需要答案: (2)加法算式的和不能超过100: (3)减法算式的差不能小于0: (4)每行整齐地多显示几个算式,不 ...

  4. 随机产生50道100以内 加减法的运算

    随机产生50道 加减法的运算 题目分析 1.1. 50道随机数 需要用到 Random 类随机产生100个 100以内的随机数 Random.nextInt(100) + 1; 1.2 随机加减法 存 ...

  5. java编写随机程序,随机生成10道一百以内的加减法

    Java随机生成10道一百以内的加减法 利用Java随机编程输出10道一百以内的加减法 在这里插入代码片 public static void main(String[] args){Scanner ...

  6. Java口算练习软件(随机生成10道100以内的数学练习题)

    Java口算练习软件 使用Java编写口算练习软件 实现以下功能点: 1.随机生成10道100以内的加减法练习题 2.设计GUI界面(包含"生成题目"."上一题" ...

  7. python随机生成10道乘法题_python3 随机生成10以内的加法算术题

    今晚晚饭过后,看到小孩在做加法题,全是10以内的,因为她现在只会10以内的加法题.而这些题是老婆手动出的题目. 看到这个情景,突然想到,可以用python来实现随机出题,而且可以指定出多少题,出多少以 ...

  8. java实现随机出题之随机产生50道100以内的加减法题目;

    package test; import java.util.Random;public class Test {public static void main(String[] args) {//调 ...

  9. 个人项目1:随机生成30道整数四则运算题

    使用的语言:C# 基本思路:运用最近学习的C#窗体应用程序设计两个按钮一个显示的窗口,运用Random生成随机数,编写程序,调试运行. 窗体设计 代码 namespace 随机四则运算 {public ...

  10. 一段Python代码自动出20以内的加减算术题

    这是学习笔记的第 2199 篇文章 读完需要 9 分钟 速读仅需7分钟 假期的时候给孩子教了下算数的东东,为了检验学习效果,也会出一些题来验证下学习效果. 每次出题都会花一些时间,琢磨怎么能够用到知识 ...

最新文章

  1. oracle java api_oracle java api
  2. 【转】OpenGL随笔(1)—— mipmap 详解
  3. 使用Logstash filter grok过滤日志文件
  4. 基于IdentityServer4 实现.NET Core的认证授权
  5. 使用LayoutParams设置布局
  6. c++ stl stack_C ++ STL中的stack :: top()函数
  7. dns 服务器 linux_在Linux上构建自己的DNS服务器
  8. 字符大小端aix linux,Go交叉编译的那些事
  9. linux中级之lvs概念
  10. 机房服务器存放位置要求,服务器机房建设设计要求规范.doc
  11. XP安装QQ提示安装包可能被非法改动无法安装
  12. 企业内网DNS搭建,SmartDNS,网站访问加速,解决dns污染等问题
  13. 从IRQ到IRQL(PIC版)
  14. 进阶实验5-3.2 新浪微博热门话题 (30 分)
  15. OpenGL GLM 环境配置
  16. 论文解读:Predator-Pray biogeography Based Optimization (PPBBO)
  17. 安装驱动显卡重启计算机,Win7电脑安装显卡驱动后一直重启的解决方法
  18. LaTex关于数学公式的使用(11)--- 单位
  19. k8s pod内存溢出,自动重启
  20. 开发日记之linux杀进程与挂进程去后台运行

热门文章

  1. 时标网络图怎么画?详解两大画法
  2. cd linux menu.lst,Windows 7 中使用 grldr + menu.lst 引導 linux系統和win7.
  3. 回归预测 | MATLAB实现SSA-LSTM和LSTM多输入单输出
  4. Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
  5. oracle宿主常量及变量,ORACLE之 LOB 数据类型
  6. python中fact_python中fact函数是什么及如何使用?
  7. erdas裁剪影像_ERDAS遥感图像的分幅裁剪
  8. runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
  9. 加解密技术基本使用指南(Base64、Hex、AES、SM4、RSA 算法)
  10. 荣耀10手机计算机科学计算器,荣耀赵明回应手机计算器10%问题:国外计算小费使用...