第四次课程作业
首先要谢谢老师给我了一周的时间进行一次大的改进,这次改进是我的项目更像是面向对象的项目,也更符合现在的水平,具体这次改动和有很多的经验我会再另发一篇博客进行说明,当然改动后最直接的成果就是本次作业不用改动,不废话,上图。
类图
这个就是我的类图,很简洁,分为三个类,去掉了所有的全局变量和静态变量,类之间没有影响,不需要在一个类中引用另一个类的属性,当然本来就不能,全定为private了,这里我没有定公有属性是因为我认为没有必要,三个类之间不需要传递消息,只需要主函数知道有init,result,和check的方法就可以了,知道了运算方法或者成员属性也没用,所以只有主函数中才会实例化三个类,只有主函数可以调用一个类的成员函数。
几个类的介绍:
- interface类是除了算式,其他的界面输出,当然语言的获取是输出的前提,所以有关语言的函数作为私有成员函数保存,first是程序刚开始的与使用者交互界面,mid每一道题结果告知界面,finally是最后统计结果界面。
- equation类是处理整数算式的类,和我上面的流程图一样,外部只可以调用init和result类,而不需要知道关于计算的成员方法。
- 与equation类相似,也只留下一个init和result方法。
程序实现
代码实现
这是主函数的构想
int main()
{
Interface inter;
int n = inter.first(); //多少题
for (int j = 0;j < n;j++)
{
Fraction fra;
Equation equ;
{
equ.initequation(); //初始化整数算式
result=equ.result(); //计算并返回答案
}
else
{
fra.initFraction(); //初始化分数算式
result=fra.result(); //计算并返回答案
}
inter.mid(answer,result); //当前答案结果输出
}
inter.finally();
}
这是主函数代码(与构想一致)
#include "stdafx.h"
#include "equation.h"
#include "Fraction.h"
#include "Interface.h"
#include <time.h>
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main()
{
Interface inter;
double result;
int n = inter.first(); //多少题
srand((unsigned(time(NULL))));
for (int j = 0;j < n;j++)
{
Fraction fra;
equation equ;
int judge = rand() % 5; //出现分数运算的几率,目前1/5
if (judge != -1)
{
equ.initequation(); //初始化整数算式
result=equ.result(); //计算并返回答案
}
else
{
fra.initFraction(); //初始化分数算式
result=fra.result(); //计算并返回答案
}
int answer;
cin >>answer;
inter.mid(answer,result); //当前答案结果输出
cout << endl;
}
inter.finally();
return 0;
}