随机生成50道加减算术题
一、项目要求
- 随机生成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道加减算术题相关推荐
- Java小程序--随机生成50道加减法算数题
程序概述: 通过窗体随机生成50道加减法算数题并显示.用户可以做该50道算术题,做完提交系统之后,系统会给出用户的正确率.用户可以重置这50道算术题. 界面显示: 程序设计基本思路: (1)首先顺序建 ...
- 随机生成50道100以内的加减题(在线答题)
一.代码部分: import random def fun(i): score = 0 list = [] tup = () for i in range(i,51): num1 = ...
- 【软件构造-java编写】生成50道100以内加法/减法算式的习题,并输出。(和不能超过100,差不能小于0)
原题 (论述题) 生成50道100以内加法/减法算式的习题,并输出. (1)每个算式还需要答案: (2)加法算式的和不能超过100: (3)减法算式的差不能小于0: (4)每行整齐地多显示几个算式,不 ...
- 随机产生50道100以内 加减法的运算
随机产生50道 加减法的运算 题目分析 1.1. 50道随机数 需要用到 Random 类随机产生100个 100以内的随机数 Random.nextInt(100) + 1; 1.2 随机加减法 存 ...
- java编写随机程序,随机生成10道一百以内的加减法
Java随机生成10道一百以内的加减法 利用Java随机编程输出10道一百以内的加减法 在这里插入代码片 public static void main(String[] args){Scanner ...
- Java口算练习软件(随机生成10道100以内的数学练习题)
Java口算练习软件 使用Java编写口算练习软件 实现以下功能点: 1.随机生成10道100以内的加减法练习题 2.设计GUI界面(包含"生成题目"."上一题" ...
- python随机生成10道乘法题_python3 随机生成10以内的加法算术题
今晚晚饭过后,看到小孩在做加法题,全是10以内的,因为她现在只会10以内的加法题.而这些题是老婆手动出的题目. 看到这个情景,突然想到,可以用python来实现随机出题,而且可以指定出多少题,出多少以 ...
- java实现随机出题之随机产生50道100以内的加减法题目;
package test; import java.util.Random;public class Test {public static void main(String[] args) {//调 ...
- 个人项目1:随机生成30道整数四则运算题
使用的语言:C# 基本思路:运用最近学习的C#窗体应用程序设计两个按钮一个显示的窗口,运用Random生成随机数,编写程序,调试运行. 窗体设计 代码 namespace 随机四则运算 {public ...
- 一段Python代码自动出20以内的加减算术题
这是学习笔记的第 2199 篇文章 读完需要 9 分钟 速读仅需7分钟 假期的时候给孩子教了下算数的东东,为了检验学习效果,也会出一些题来验证下学习效果. 每次出题都会花一些时间,琢磨怎么能够用到知识 ...
最新文章
- oracle java api_oracle java api
- 【转】OpenGL随笔(1)—— mipmap 详解
- 使用Logstash filter grok过滤日志文件
- 基于IdentityServer4 实现.NET Core的认证授权
- 使用LayoutParams设置布局
- c++ stl stack_C ++ STL中的stack :: top()函数
- dns 服务器 linux_在Linux上构建自己的DNS服务器
- 字符大小端aix linux,Go交叉编译的那些事
- linux中级之lvs概念
- 机房服务器存放位置要求,服务器机房建设设计要求规范.doc
- XP安装QQ提示安装包可能被非法改动无法安装
- 企业内网DNS搭建,SmartDNS,网站访问加速,解决dns污染等问题
- 从IRQ到IRQL(PIC版)
- 进阶实验5-3.2 新浪微博热门话题 (30 分)
- OpenGL GLM 环境配置
- 论文解读:Predator-Pray biogeography Based Optimization (PPBBO)
- 安装驱动显卡重启计算机,Win7电脑安装显卡驱动后一直重启的解决方法
- LaTex关于数学公式的使用(11)--- 单位
- k8s pod内存溢出,自动重启
- 开发日记之linux杀进程与挂进程去后台运行
热门文章
- 时标网络图怎么画?详解两大画法
- cd linux menu.lst,Windows 7 中使用 grldr + menu.lst 引導 linux系統和win7.
- 回归预测 | MATLAB实现SSA-LSTM和LSTM多输入单输出
- Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义
- oracle宿主常量及变量,ORACLE之 LOB 数据类型
- python中fact_python中fact函数是什么及如何使用?
- erdas裁剪影像_ERDAS遥感图像的分幅裁剪
- runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
- 加解密技术基本使用指南(Base64、Hex、AES、SM4、RSA 算法)
- 荣耀10手机计算机科学计算器,荣耀赵明回应手机计算器10%问题:国外计算小费使用...