课程作业四

类图(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),属性包括分子和分母两个整型数。操作数栈即为一个数据类型为分数类的栈。.

小结####

着重强化学习栈和文件读写类的知识。

posted @ 2017-05-16 11:57  吾言  阅读(191)  评论(1编辑  收藏  举报