随机生成50道加减算术题 您所在的位置:网站首页 python自动生成加减法 随机生成50道加减算术题

随机生成50道加减算术题

2023-09-12 20:03| 来源: 网络整理| 查看: 265

一、项目要求

随机生成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,点击此处跳转



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有