欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第四次课程作业

程序员文章站 2022-07-14 21:41:28
...

题目要求

OOA(Object Oriented Analysis,面向对象分析): 从客观存在的事务和事务之间的关系,归纳出有关对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。建立一个能够反映真实情况的需求模型。
OOD(Object Oriented Design,面向对象设计):将面向对象分析阶段形成的需求模型进一步具体设计。如类的设计(继承、派生、类与类之间的消息协作)、算法的设计等。采取通用的工具,如流程图、类图等来描述。

Q1:采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?

A:大致可分为四个类。
1.文件读写类,将各种界面进行读取,输入输出流文件。

class file
{
private:
    int n;//题数
    char input[100];
    char output[100];
public:
    void readfile1();//读取文件
    void readfile2(char *p, int n, int right);//运行
    void writefile1(char *s,double right, double answer);//内容写入
};

2.用户交互类,用于不同用户的语言需求,根据用户需求生成语言,题目数和生成答案。

class ex
{
    private:
    int num;
    int answer;
    int random;
    public:
    void scanf();//选择语言,获取数据
    void answer();//输出正确答案
    void statistics();//统计题数
}

3.随机生成类,用于随机生成加减乘除,数字以及符号。

class random
{
    private:
    int number;
    char operation; 
    public:
    int randomnum();//随机数
    char randomoperation();//随机运算符
    char randomexpress();//随机算式
};

4.计算类,用于计算结果

class cal
{
    private:
    int answer;
    char express;
    public:
    int cal();//计算结果
    void judge();//统计答题情况
}

类图如下:
第四次课程作业

Q2:类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?

A:流程图如下:
第四次课程作业

Q3:该自动出题软件采取何种算法或者是如何实现的?

A:采用循环队列栈等等...至于博客园中大神们用到的逆波兰,目前还在研究中...

感想:

非常感谢各位大佬们的帮助,此次改进代码后类的思路较为清晰,也渐渐出现了模块化的水准,再一步步的向分装化改进,程序变得更加清楚,也纠正了自己的编码习惯。