课程作业四

本次作业链接

采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。

1.类的描述

本次分类,我一共分离出4种类,分别是Equation、File、Language、Random.如图:

顾名思义,这四个类分别实现“算法生成和计算”,“文件操作”,“多语言提供”,“随机数生成”。
“Equation”这个类包含了creat()用来给四个随机数赋值、给三个符号赋值以及确定括号的位置;gengerateExpression()函数用来生成运算式,其实也就是把creat()赋完值的变量整合起来;calculatResult()则是用来计算递归计算,其实就是多次调用辅助函数float calculate(float a, int b, float c)。
“File”类包含了readFile()和writeFile()的功能,分别比从文件里读题数和将题目、正确答案、用户答案写入文件。
“Language”提供多语言支持,具体延续了之前C语言的实现方式。
“Random”就是包含多个不同的用来产生不同数字范围的函数,一共有randomNumber(),randOperation(),randombracket()这三种。

2.类的协作


3.采用算法

目前而言还是暴力解决,例如:result = calculate(number[0], sign_1, calculate(calculate(number[1], sign_2, number[2]), sign_3, number[3]));虽然有想过用逆波兰算法,不过突然意识到自己不会用堆栈,只会模拟堆栈做一些程序设计的小题目,所以暂时实现不了。

posted @ 2017-05-15 23:52  溯説  阅读(175)  评论(1编辑  收藏  举报