课程作业四
类图(Classdiagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性信息。类图(Class diagram)由许多(静态)说明性的模型 元素(例如类、包和它们之间的关系,这些元素和它们的内容互相连接)组成。类图可以组织在(并且属于)包中,仅显示特定包中的相关内容。.
1.采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?###
**分为四个类。(1)文件读写类 (2)输入类 (3) 随机生成类 (4)输出类 **
属性是对象的静态特征,行为则是对象的动态特征。.
execute方法里,可定义CQuestion的对象,根据要产生的题目数,循环调用CQuestion的方法即可。并累加answer方法返回的分数。
文件读写类####
行为大体上是读取题目数量,以及将生成数据存入文件中.
class readwrite
{
public:
int readfile(); //读取题目数量;
int writefile(); //存储输入的题目数,表达式、正确答案及输入的答案,正确与错误题数 ;
}
输入类(generate方法产生题目)####
此类具有语言、题目数量、题目答案等属性,它主要用于输入题目、结果统计等。.
class Question
{
public:
Question();
void generate(); // 随机生成题目,即生成有效随机数赋给成员变量;
int answer(); // 模拟答题过程,并返回答题所得分数;
private:
unsigned int a; // 题目的左操作数;
unsigned int b; // 题目的右操作数;
unsigned int oper; // 四则运算类型,加减乘除;
};
随机生成类####
此类具有随机字符、随机数字等属性,再利用数字和字符随机生成算式。.
class RandomGeneration
{
private:
int number;
char operation;
public:
void RandomNumber();//随机数字生成;
void RandomOperation();//随机字符生成;
void RandomExpretion();//随机算式生成;
}
输出类(answer方法模拟答题过程并返回结果。)####
输出用户正确与错误题数和要求的语言类型。.
class QuestionLib
{
public:
QuestionLib(int num)
{
m_questionNum = num;
m_score = 0;
}
void execute(); // 根据m_questionNum个数生成题目,并进行答题过程,记录答题分数;
void showResult(); // 显示结果;
void putLanguage();//输出用户所要求的语言;
private:
int m_questionNum;
int m_score;
};
类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?####
随机类生成算式传递给输出类计算。输出类持有随机类和输入类的引用。.
该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。####
考虑到需要完成真分数和假分数的运算,我定义了一个分数类(fraction),属性包括分子和分母两个整型数。操作数栈即为一个数据类型为分数类的栈。.
小结####
着重强化学习栈和文件读写类的知识。