• 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.代码展示

    类"generate"

    int Generate::randomNumber(int low,int high)  //生成[low,high]随机数 
    {
    	return (rand()% (high - low+1) + low);
    }  
    
    string Generate::randomOperation(int rand)     //生成四则运算符 
    {
    	string ope;
        switch(rand) 
        {
        	case 1:ope='+'; break;
        	case 2:ope='-'; break;
        	case 3:ope='*'; break;
        	case 4:ope='/'; break;
    	}
    	return ope;
    }
    
    string Generate::generatePolynomial(int rand1,int rand2,string ope,int mode)  //生成多项式 
    {
       stringstream ss;
       if(mode==1) 
      {
      	ss << '(' << rand1<<ope<<rand2<<')';
      } 
        if(mode==2)
      {
        ss<<rand1<<ope<<rand2;
      }
        if(mode==3)	
      {
      	if(rand1!=0)
      	{
      	  ss<<rand1;
    	}
      }
      	string str = ss.str();  
      	ss.str("");
        return str;
    }
    
    string Generate::generateExpression()     //生成算式 
    {
    	stringstream ss;
    	int rand1=randomNumber(1,10);
    	int rand2=randomNumber(1,10);
    	int mode =randomNumber(1,3);
    	string ope=randomOperation(randomNumber(1,4));
    	ss<<generatePolynomial(rand1,rand2,ope,mode);
    	for(int i=1;i<randomNumber(2,4);i++)
    	{
    		int rand1=randomNumber(1,10);
    	    int rand2=randomNumber(1,10);
     	    int mode =randomNumber(1,3);
    	    string ope=randomOperation(randomNumber(1,4));
    	    ss<<generatePolynomial(rand1,rand2,ope,mode);
    		ss<<randomOperation(randomNumber(1,4)<<generatePolynomial(rand1,rand2,ope,mode);
    	}
    	string str = ss.str();  
    	ss.str("");
        return str;
        return str;
    }
    

    main

      int main(void)
    {
    	srand((unsigned)time(NULL));             //重置种子 
    	Printf().ShowLanguageList();             //展示可选择语言列表 
    	cout<<endl<<endl;
    	Printf().printfNeedWhat();
    	char language[20];           
    	gets(language);                         //获取用户所选择的语言 
    	while(!Control().JudgeIfGet(language)){  //判断语言资源文件是否载入成功 
    	Printf().printfNeedWhat();
    	gets(language);
    	}
        string Resource[30];       
    	Control().GetResource(Resource,language);  //将语言资源导入resouce数组 
    	
    	int wrong=0;
    	int right=0;
       	cout<<Resource[0];
       	int counts;
       	cin>>counts;
    	for (int i=0;i<counts;i++){
    	string exp = Generate().generateExpression();   //生成表达式 
    	cout << exp << "="<<endl;
        double res=Calculate().calculateResult(exp);     //计算表达式结果 
    	cout << Resource[1]<<i+1<<Resource[2];
    	double number;
    	cin >> number;
    	if((Control()).getKeyAndExit()) {              //输出e退出循环并统计答题情况 
    	 if(number==res) {
    	    cout <<Resource[3]<<endl;
    	    right++;
    	 }
    	 else {
    	    cout << Resource[4]<<res<<endl;
            wrong++;
    	 }
    	}
    	else break;	
    	}
    	cout <<Resource[5]<< right << Resource[6] << wrong <<Resource[7]<<endl;
    	system("pause");
    	return 0;
    }
    

    6.提交日志证明

    7.程序测试


    9.个人感受

    本次的代码版本更迭,我主要把目标放在打造高内聚低耦合上面,减弱每个模块内部在这里我们可以看做每个类之间的联系,加强模块与模块间的联系。

    以上述的generate类作为例子,之前下一个函数都会调用前一个函数,这样很不利于程序的维护,所以,对于这些功能比较单一,较为底层的函数,我运用参数的方法,减少其与其他函数的联系。同时,在最后一个函数中引用前面所有的函数,加强了模块的内部的联系。

    同时,在其他类中,我基本做到了,不引用另外类中的函数,可见,类与类的联系是很低的,这就是所谓的低耦合。

  • 相关阅读:
    作业01
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言II博客作业04
    C语言II—作业03
    C语言II博客作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/linshen/p/6758562.html
Copyright © 2020-2023  润新知