zoukankan      html  css  js  c++  java
  • 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语句。

    • 源文件头部应进行注释,列出:生成日期、作者、模块目的/功能等。

    示例:

    示例:  
    下面这段源文件的头注释比较标准,可以不局限于此格式,但上述信息要包含在内。

    示例:  
    下面这段源文件的头注释比较标准,可以不局限于此格式,但上述信息要包含在内。    
    说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。

    /************************************************************

    FileName: test.cpp

    Author:

    Version :

    Date:

    Description:     // 模块描述

    Version:         // 版本信息

    Function List:   // 主要函数及其功能

    1. -------

    History:         // 历史修改记录

    < author >  < time >   < version >   < desc >

    ​ David      96/10/12     1.0     build this moudle   ***********************************************************/

    History是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

    • 函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值等

    示例:

    /*************************************************

    Description:    // 函数功能、性能等的描述

    Input:          // 输入参数说明,包括每个参数的作                  用、取值说明及参数间关系。

    Output:         // 对输出参数的说明。

    Return:         // 函数返回值的说明

    Other          // 其它说明

    *************************************************/

    • 函数名以大写字母开头,采用谓宾结构(动名),且应反映函数执行什么

    操作以及返回什么内容。

    • 类、结构、联合、枚举的命名须分别以C、S、U、E开头,其他部分遵从一般变量命名规范。

    5.代码展示

    int main(int argc,char *argv[])
    {
    	srand((unsigned)time(NULL));             //重置种子 
    	Printf().ShowLanguageList();             //展示可选择语言列表 
    	cout << endl << endl;
    	char language[20];                    //获取用户所选择的语言 
    	do
    	{
    		Printf().printfNeedWhat();
    		gets_s(language);
    	} while (!Control().JudgeIfGet(language));//判断语言资源文件是否载入成功
    	string Resource[30];
    	Control().GetResource(Resource, language);  //将语言资源导入resouce数组 
    	int wrong = 0, right = 0;
    	int counts = Control().ReadFile(argv[1]);
    
    	for (int i = 0; i < counts; i++)
    	{
    		string exp;
    		double res;
    		do
    		{
    			exp = Generate().generateExpression();   //生成算式
    			res = Calculate().calculateResult(exp);  //计算算式结果
    		} while (Control().judgeExpression(exp) || Control().judgeResult(res));  //判断生成的算式是否符合要求
    		cout << exp << endl << Resource[1] << i + 1 << Resource[2];
    		Printf().PrintfExpressionToFile(argv[2],exp, "
    ", Resource[1], i + 1, Resource[2]);
    		double number;
    		cin >> number;
    		Printf().FilePrint(argv[2], number);
    		if ((Control()).getKeyAndExit())  //输出e退出循环并统计答题情况 
    		{
    			Control().StatisticalResult(wrong, right, res, number, Resource,argv[2]);
    		}
    		else break;
    	}
    	cout << Resource[5] << right << Resource[6] << wrong << Resource[7] << endl;
    	Printf().FilePrint("
    ");
    	Printf().PrintfResultToFile(argv[2], Resource[5], right, Resource[6], wrong, Resource[7], "
    ");  
    	system("pause");
    	return 0;
    }
    
    void Printf::FilePrint(char *filePath,int x)
    {
    	fstream fout;
    	fout.open(filePath, ios::app);
    	fout << x;
    	fout.close();
        
    }
    
    void Printf::FilePrint(char *filePath,string x)
    {
    	fstream fout;
    	fout.open(filePath, ios::app);
    	fout << x;
    	fout.close();
    }
    
    void Printf::PrintfExpressionToFile(char* filePath, string x1, string x2, string x3,int x4, string x5)
    {
    	Printf().FilePrint(filePath, x1);
    	Printf().FilePrint(filePath, x2);
    	Printf().FilePrint(filePath, x3);
    	Printf().FilePrint(filePath,x4);
    	Printf().FilePrint(filePath, x5);
    }
    
    void Printf::PrintfResultToFile(char* filePath, string x1, int x2, string x3, int x4, string x5, string x6)
    {
    	Printf().FilePrint(filePath, x1);
    	Printf().FilePrint(filePath, x2);
    	Printf().FilePrint(filePath, x3);
    	Printf().FilePrint(filePath, x4);
    	Printf().FilePrint(filePath, x5);
    	Printf().FilePrint(filePath, x6);
    }
    

    6.提交日志证明

    7.程序测试


    8.个人感受

    本次的代码版本更迭,主函数加入了参数,通过DOS命令行运行,虽然我暂时不知道这样做有什么好处。。。但是关于文件的读写方面我想到了一种应用的方式,当两个人是用两种不可兼容的语言来进行程序的开发的时候,要做到两个程序的合作,这时候文件的处理就派上了用处。

    其他,这次又过了一遍程序,又把主函数精简了一点,每次都有新的想法,每次进步一点。

  • 相关阅读:
    WIndows 常见问题解决方案合集
    【日常摘要】- RabbitMq实现延时队列
    【工具】- HttpClient篇
    【java面试】- 集合篇
    【Java面试】- 并发容器篇
    【mysql】- 锁篇(上)
    【mysql】- 锁篇(下)
    【mysql】- 事务隔离级别和MVCC篇
    【mysql】- 索引使用篇
    【mysql】- 索引简介篇
  • 原文地址:https://www.cnblogs.com/linshen/p/6822799.html
Copyright © 2011-2022 走看看