《面向对象程序设计》课程作业 (四)
•采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
•类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
•该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。
类的划分
根据需求,我划分了三个类。
类1:UserInteraction
- 作用:负责与用户交互
- 属性:题数
- 行为:读取用户输入的题数、选择语言、
类2:Expression
- 作用:负责有关算式的部分
- 属性:算式字符串、符号字符数组
- 行为:产生随机数字、产生随机符号、产生算式
类3:Answer
- 作用:负责有关答案的部分
- 属性:算式结果、正确题数、错误题数
- 行为:运算算式答案、检验答案、统计结果
流程图
首先UserInteraction类负责与用户交互,输入题目数量n和选择语言后传递给Expression类,Expression类根据传递的消息进行算式的产生,然后传递给Answer类,Answer类根据产生的算式进行答案的运算,再根据UserInteraction类中输入的答案判断对错,最后输出统计结果。
代码构思
class UserInteraction //负责与用户交互
{
private:
int n;//题数
int language;
int ans;//答案
public:
void getNumber(int n);//获取题数
void chooseLanguage();//选择语言
void getQuestions();//统计题数
void getAnswer();//获取答案
};
class Expression //负责和算式有关的
{
private:
string equa;//算式
char sign[4];
public:
void randomNumber(); //随机数字
void randomOperation(); //随机符号
void generateExpression();//产生算式
};
class Answer() //负责跟答案有关的部分
{
private:
double result;
int right;
int wrong;
public:
void calculateResult (); //运算答案
void checkanswer(); //检验答案
void countQuestions();//统计结果
};