第四次课程作业
题目描述:
采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。
本次作业的要求是根据需求对四则运算软件分成几个类,按照题目要求我认为是可以分为2个类的,一个是表达式类,另一个是用户交互类。而我们缩写的软件表达式类中包含的计算表达式的计算值时用的方法需要用到堆栈,因此我认为是分为三个类的(当然是针对于我们的四则运算拉说),直接上图吧!
类之间的关系:
用户与软件的交互过程可以为Interaction类,得到用户输入的语言以及题目数量,Interaction类将用户输入的消息发给Expression类使之生成表达式,生成表达式之后通过引用stack类计算表达式的结果,同时计算用户做题正确量并将消息发给Interaction让它输出用户做题正确度;
运算软件运行流程图:
四则运算内部算法:(搭档)
1.表达式生成:
2.通过转换成逆波兰并计算表达式的结果:
该过程不是很会画它的流程图(暂时不画);
代码实现:
class Stack
{
private:
int *Data;
int posi;
public:
Stack();
~Stack();
bool empty() const;
int top() const;
bool push(const int & item);
bool pop();
int size();
};
(搭档开始时就有写的栈类)
class Expression
{
private:
string expression;
string reversePolishNotation;
int value;
public:
Expression();
~Expression();
int RandomNum();
char RandomOperator();
string & AddOperator(const char oper);
string RandomPart();
string & AddPart(const string & part);
int PartValue(const string & part);
Expression CreateInfixExpression();
Expression ReversePolishNotation();
int ExpressionValue();
friend ostream & operator<<(ostream & os, const Expression &e);//重载<<运算符
};
(Expression表达式类)
class User
{
public:
int n;
char language[200];
char Langpath[255] = "";
void WrongAgain();
void MakeResource();
void Print(int numRight, int numWrong, double accuracy);
};
暂时还没有将其属性定义为私有的,字符串类型的输入传递还没有学完而且我感觉定义为私有的会显得更麻烦多了,所以就想等之后再予以改善;
作业感想:原本上次的作业我是以为自己做的挺不错的,至少一些部分其他同学相差不多,分数出来说之后的确我心里是有一些不平衡的,后来又想了想可能是真的还存在许多差距,所以就继续保持着热情写C++作业,希望可以每一次学习更进步,而非只是不满和抱怨!