面向对象程序设计第五次作业

Github地址点这里

题目要求

  • 添加一种读取四则运算的方式:输入第一个参数若为-f,则再输入两个参数,为两个文件的路径。分别为程序读取输入的文件和输出答案的文件。
  • 将输出的代码都写在Print类中。
  • 描述框架图

代码

#include<iostream> 
#include<string>
#include<queue>
#include<stdlib.h>
#include"Calculator.h"
#pragma warning(disable:4996)
using namespace std;

int main(int argc, char* argv[])
{
	Calculation calculation;
	Scan scan;
	Print print;
	string strData1;
	string strData2;
	strData1 = argv[1];
	queue<string>queue;
	double answer;
	if (strData1 == "-a")
	{
		strData2 = argv[2];
		queue = scan.ToStringQueue(argv[2]);
		answer = calculation.ToCalculate(queue);
		print.ToOutput(answer, strData2);
	}
	else if (strData1 == "-f")
	{
		string strData3;
		strData3 = scan.Open(argv[2]);
		queue = scan.ToStringQueue(strData3);
		answer = calculation.ToCalculate(queue);
		print.ToOutput(answer,strData3, argv[3]);
		strData3 = "";
	}

	else
	{
		queue = scan.ToStringQueue(strData1);
		answer = calculation.ToCalculate(queue);
		print.ToOutput(answer);
	}
	system("pause");
	return 0;
}

scan
把文件读取放在了scan类中

string Scan::Open(char *in)
{
	string temp;
	fstream file;
	file.open(in);
	file >> temp;
	return temp;
}

print
依照不同情况进行输出

void Print::ToOutput(double answer, string exp, char *out)
{
	ofstream file;
	file.open(out);
	file << exp  <<  answer << endl;
}

void Print::ToOutput(double answer)
{
	cout << answer << endl;
}

void Print::ToOutput(double answer, string exp)
{
cout << exp << answer << endl;

}

描述框架图

心得

这一次修改因为增加了多组数据输入,发现除了第一个答案之后都是错的。研究之后才发现是在每一组处理过后有数据残留在字符串和队列中影响了下一组,在增加了清空队列和字符串的部分才正确。所以明白以后应注意在使用各种操作之后应当还原。

原文地址:https://www.cnblogs.com/Wjianting/p/5474554.html