第三次课程作业

四则运算器课程作业三

github链接传送:

- caculate.h
- caculate.cpp
- caculater_main.cpp
- caculater.exe

要求:

  • 要求将第一次作业中使用静态变量的方法进行改进,推荐使用传参、定义函数有返回值。

  • 本次作业要求在第一次课程作业的基础上进行迭代,考察文件读写、多参数主函数的知识点。

  • 多参数主函数要求:在命令行中输入的参数为:用户要求题目数量的文件路径、最终结果的文件路径。

D:>a.exe  d://in.txt  d://out.txt

  a.exe为可执行文件,d://in.txt为用户要求的题目数量的文件路径,d://out.txt最终结果的文件路径
  • 要求将程序写成.cpp和.h分离的形式。

  • 主函数的设计如下:

int main(int argc,char *argv[]){
    readFile()//读取用户要求的题目数量(请注意参数设置)
    scan()//该函数用于与用户交互,获取输入数据
    randomNumber()//用于随机生成数字
    randomOperation()//用于随机生成运算符
    generateExpression()//用于生成运算式
    calculateResult()//用于计算生成的运算式的结果
    writeFile()//将最终结果写入文件,写入内容包括:用户输入的题目数,每个生成的表达式、正确答案、用户输入的答案,保存到命令行中第二个参数指定的路径。(请注意参数设置)
    print()//将统计结果输出给用户
    return 0;
  }

本次作业的感想:

本次作业中实现了文件读写,c++文件流以及多参数主函数。在以前默认从命令行中输入数据的简单的“带互动的界面”转变到文件流的界面,将这一四则运算器的使用性更提升了一个档次,而主函数main多参数,更打破了以前代码默认主函数不写参数的习惯,了解认识到这些主函数的参数,使调用更加方便。

对于文件读写和多参数主函数学习过程中遇到的问题:

刚开始并不懂c++中的文件流,记得寒假时在随笔中有提到这个(寒假的调查里好像有文件的有关问题),但开始时自己只会固定(同一路径下的文件读写)简单的c中的foreopen,所以实现这个文件的读写也是通过百度查阅然后现学现用的,其中遇到的问题有:文件读写中,一开始用了运算符的重载将输出写入文件,虽然代码简洁很多,但是不符合要求,于是强行写了writefile封装写入,代码就变长了很多。。
主函数参数需要判断,如果使用cmd打开,需要判断主函数参数的个数,否则出错。

	string infilepath, outfilepath;
	if (argc == 3)
	{
		infilepath = argv[1];
		outfilepath = argv[2];
	}
	else cin >> infilepath >> outfilepath;

一开始的想法:重载运算输出的代码

	template <typename T>
	MyFile &operator >>(T &t)
	{
		_ifs >> t;
		return *this;
	}
	template <typename T>
	MyFile &operator <<(T &t)
	{
		_ofs << t;
		return *this;
	}

函数分离的体现:

class Problem
{
public:
	Problem(string infilepath, string outfilepath);
	void init();				//初始化
	void scan();				//该函数用于与用户交互,获取输入数据
	void DisPlayAnswer();		//输出正确答案
	void print();				//将统计结果输出给用户

	//生成算式部分----------------------------------------------------------------------
	int randomNumber();			//用于随机生成数字
	char randomOperation();		//用于随机生成运算符
	template<typename T> string Tostring(T i);
	void generateExpression();	//用于生成运算式
	//----------------------------------------------------------------------------------

	//算式计算部分----------------------------------------------------------------------
	float calculateResult();	//计算结果 
	float caculate(float Operand1, float Operand2, char Operator);
	//----------------------------------------------------------------------------------

	//文件读写
	int readFile();
	template <typename T> void writeFile(T t);

程序运行截图:






原文地址:https://www.cnblogs.com/mercuialC/p/6828479.html