题目要求
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:采用循环队列栈等等...至于博客园中大神们用到的逆波兰,目前还在研究中...
感想:
非常感谢各位大佬们的帮助,此次改进代码后类的思路较为清晰,也渐渐出现了模块化的水准,再一步步的向分装化改进,程序变得更加清楚,也纠正了自己的编码习惯。