第四次课程作业

第四次课程作业

github仓库 arithmatic3.0

首先要谢谢老师给我了一周的时间进行一次大的改进,这次改进是我的项目更像是面向对象的项目,也更符合现在的水平,具体这次改动和有很多的经验我会再另发一篇博客进行说明,当然改动后最直接的成果就是本次作业不用改动,不废话,上图。

类图

这个就是我的类图,很简洁,分为三个类,去掉了所有的全局变量和静态变量,类之间没有影响,不需要在一个类中引用另一个类的属性,当然本来就不能,全定为private了,这里我没有定公有属性是因为我认为没有必要,三个类之间不需要传递消息,只需要主函数知道有init,result,和check的方法就可以了,知道了运算方法或者成员属性也没用,所以只有主函数中才会实例化三个类,只有主函数可以调用一个类的成员函数。

几个类的介绍:

  1. interface类是除了算式,其他的界面输出,当然语言的获取是输出的前提,所以有关语言的函数作为私有成员函数保存,first是程序刚开始的与使用者交互界面,mid每一道题结果告知界面,finally是最后统计结果界面。
  2. equation类是处理整数算式的类,和我上面的流程图一样,外部只可以调用init和result类,而不需要知道关于计算的成员方法。
  3. 与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;
}
posted @ 2017-05-14 21:16  土豆、  阅读(162)  评论(1编辑  收藏  举报