2017《面向对象程序设计》作业四

2017《面向对象程序设计》作业四

林燊 031602325 https://www.cnblogs.com/linshen/

github链接:https://github.com/Travaill/arithmetic.git

1.设计思路

2.程序功能

  • 能对0--10之间的整数进行四则运算(加减乘除)

  • 能实现选择中文,英文,德语法语,日语五种语言

  • 程序能接收用户输入的整数答案,并判断对错

  • 程序结束时,统计出答对、答错的题目数量

3.算法分析

  • 类generate 实现随机算式的生成
  • 类calculate 计算算式的结果
  • 类control 控制题目生成的数量 控制生成符合要求的算式 控制程序的退出 控制程序的语言
  • 类printf 输出算式、判断结果、统计答题情况

4.代码规范

  • 函数的命名必须使用英文单词,不使用拼音缩写
  • 函数的命名如果一个单词的必须首字母大写,如果多个单词的用下划线隔开
  • 程序结构清析,简单易懂,单个函数的程序行数不得超过100行。
  • 要随意定义全局变量,尽量使用局部变量。
  • 函数的旁边必须注释上本函数的功能
  • 禁止GOTO语句。

5.代码展示

类"control"

bool Control::JudgeIfGet(char *language)          //判断路径是否正确 
{
    fstream file;
	stringstream ss;
	char filepath[200] = "";
	ss<<"Languagerc\"<<language<<".txt";
	ss>>filepath;
	ss.str("");
	file.open(filepath,ios::in);
	if (file.is_open())
	{
		file.close();
		return true;
	}
}

void Control::GetResource(string *Resource,char *filepath)    //读取资源文件 
{
	fstream File;
	stringstream ss; 
	File.open(filepath,ios::in);
	int i,j;
	string Line;
	for (i=0;i<8;i++)
	{
	   getline(File,Line);
	   swap(Line,Resource[i]);
	}
	File.close();
}

main

    char language[20];
	gets(language);
	while(!Control().JudgeIfGet(language))
	{
		cout<<"请输入你所需要的语言的名称:"<<endl;
        cout<<"Please enter a name for the language you need:"<<endl;
        cout<<"Bitte geben sie ihren namen: die erforderlichen Sprachen"<<endl;
        cout<<"Prie dans la langue dont vous avez besoin:"<<endl;
	    cout<<"入力してください。あなたに必要な言叶の名称:" <<endl; 
		gets(language);
	}
	    fstream file;
	    stringstream ss;
	    char filepath[200] = "";
	    ss<<"Languagerc\"<<language<<".txt";
	    ss>>filepath;
	    ss.str("");
        string Resource[30];
		Control().GetResource(Resource,filepath);  
        Printf()._Printf(Resource);

6.提交日志证明

7.程序测试


9.个人感受

此次的作业其实目的是让我们学习C++对于文件操作,如下为个人觉得可以记录的东西.

文件操作

头文件 fstream: 可同时读写操作的文件类

打开文件(Open a file)

成员函数open():void open (const char * filename, openmode mode);

这里filename 是一个字符串,代表要打开的文件名,mode 是以下标志符的一个组合: ios::in 为输入(读)而打开文件 
ios::out 为输出(写)而打开文件 
ios::ate 初始位置:文件尾 
ios::app 所有输出附加在文件末尾 
ios::trunc 如果文件已存在则先删除该文件 
ios::binary 二进制方式

关闭文件(closing a file)

需要调用成员函数close(),它负责将缓存中的数据排放出来并关闭文件。

读取文件中的字符

getline(istream &in, string &s)

从输入流读入一行到string s

•功能:

–从输入流中读入字符,存到string变量

–直到出现以下情况为止:

•读入了文件结束标志

•读到一个新行

•达到字符串的最大长度

–如果getline没有读入字符,将返回false,可用于判断文件是否结束

检验文件是否打开

使用is_open()函数,如果打开成功返回1,失败返回0

小技巧

因为getline如果没有读取到字符直接返回false,所以可以直接使用getline(istream &in, string &s)作为进入循环的条件.

我没有应用strcpy来进行字符串的存储,而是直接使用,swap(string sub,string str)来进行二者的交换变向进行存储.

.ps

此次的作业,由于上次的作业基本由我一个人完成,所以这次作业我希望搭档能够完成更多的部分,但搭档由于自身原因,没有完成自己的部分,所以导致这次的作业不能及时上交,所以这次作业由我全部完成.

前期在寻找用rc文件来解决问题的时候用了大量的时间,走投无路,参考了赵畅同学的陈璟同学的方法,得知可以用txt文件来实现.

关于抄袭的现象,我个人认为学习计算机本来就是在借鉴别人的代码算法中慢慢的把这些东西熟练的应用,同时在借鉴的同时需要带有自己的思考,要把借鉴过来的东西变成自己的东西,借鉴完后,下次遇到同样的东西能解决吗?如果可以,那么就是一次成功的学习,如果不能就完全是一个毫无意义的复制黏贴.同时,在借鉴的时候你可以相出可以优化地方吗?亦或是你能想出更好的办法,我觉得各行各业都是这样发展起来的.借鉴,掌握,创新,这才是学习的正确方法.

原文地址:https://www.cnblogs.com/linshen/p/6559461.html