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

github连接:https://github.com/Travaill/RefactoringArithmetic.git

一、一个有待修改的类图

二、程序功能

  • 选择中文,英文,德语法语,日语五种语言
  • 程序能接收用户输入的整数答案,并判断对错
  • 程序结束时,统计出答对、答错的题目数量

三、代码规范

  • 函数的命名必须使用英文单词,不使用拼音缩写
  • 函数的命名如果一个单词的必须首字母大写,如果多个单词的用下划线隔开
  • 程序结构清析,简单易懂,单个函数的程序行数不得超过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开头,其他部分遵从一般变量命名规范。

四、代码展示

类Expression

#include<string>
using namespace std;
class CExpression
{
public:void InitExpression();void GetExpression(string &str);friend bool JudgeExpression(string str);friend bool JudgeResult(double res);
private:string exp;double res;int RandomNumber(int low, int high);char RandomOperation();double CalculateResult(string str);void CalculatePolynomial();int OpeRank(char x);
};

类Control

#include<string>
using namespace std;
class CControl
{
public:bool JudgeExpression(string str);bool JudgeResult(double res);bool GetKeyAndExit();void StatisticalResult();
private:int wrong;int right;
};

类File

#include<string>
using namespace std;
class CFile
{
public:int  ReadFile();bool JudgeIfGet();void OutputFile();
private:string inputFilePath;string outputFilePath;
};

类File的派生类 Resouce

class CResource:public CFile
{
public:private:string resouceFilePath;string recouce[8];
};

已经实现了生成表达式的功能

#include<string>
using namespace std;
class CExpression
{
public:void InitExpression();void GetExpression(string &str);friend bool JudgeExpression(string str);friend bool JudgeResult(double res);
private:string exp;double res;int RandomNumber(int low, int high);char RandomOperation();
#include"Expression.h"
#include<sstream>void CExpression::GetExpression(string &str)
{str = exp;
}
int CExpression::RandomNumber(int low, int high)  //生成[low,high]随机数
{return (rand() % (high - low + 1) + low);
}char CExpression::RandomOperation()     //生成四则运算符
{char ope;switch (RandomNumber(1,4)){case 1:ope = '+'; break;case 2:ope = '-'; break;case 3:ope = '*'; break;case 4:ope = '/'; break;}return ope;
}void CExpression::InitExpression()
{stringstream ss;string str[2] = { "" };for (int i = 0; i < 2; i++){int mode = RandomNumber(1, 3);if (mode == 1){ss << '(' << RandomNumber(1,10) << RandomOperation() <<RandomNumber(1,10) << ')';}if (mode == 2){ss << RandomNumber(1, 10) << RandomOperation() << RandomNumber(1, 10);}if (mode == 3){ss << RandomNumber(1, 10);}str[i] = ss.str();ss.str("");}ss << str[0] << RandomOperation() << str[1];string str1 = ss.str();ss.str("");exp = str1;
}
#include<stdlib.h>
#include<iostream>
#include<time.h>
#include<string>
#include"Expression.h"
using namespace std;
int main()
{srand((unsigned)time(NULL));CExpression obj;obj.InitExpression();string exp;obj.GetExpression(exp);cout << exp<<endl;system("pause");return 0;
}

五、提交日志证明

六、程序测试

七、个人感受

本次作业进行完全的代码重构,暂时只重构了一个生成表达式的部分,想先请教一下老师和YC学长,这样重构是否符合面对对象的思想。后续会逐渐完成其他部分的重构。

八、对栈知识的探索

要使用标准库的栈和队列,首先得添加头文件

#include < stack >

定义栈:

stack< int >  curStack;

栈的操作:

curStack.empty()      如果栈为空返回true,否则返回false;

curStack.size()        返回栈内元素的大小;

curStack.pop()       从栈顶弹出一个成员;

curStack.push()       向栈内压入一个成员;

curStack.top()         返回栈顶,但不删除成员;

转载于:https://www.cnblogs.com/linshen/p/6892096.html

2017《面向对象程序设计》课程作业五相关推荐

  1. 2017福州大学面向对象程序设计课程作业五

    作业链接 课程第五次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 111500206 赵畅 http://www.cnblogs.com/ZCplayground/p ...

  2. 兰州大学C语言程序设计课程作业,【兰州大学|兰州大学C语言程序设计课程作业( 五 )】语言程序设计|课程|作业-傻大方...

    『易坊知识库摘要_兰州大学|兰州大学C语言程序设计课程作业( 五 )』34.用户未作答标准答案exp04. 以下叙述中正确的是 在程序的一行上可以出现多个有效的预处理命令行使用带参的宏时,参数的类型应 ...

  3. C#面向对象程序设计课程实验五:实验名称:C#面向对象技术

    C#面向对象程序设计课程实验五:实验名称:C#面向对象技术 实验内容:C#面向对象技术 一. 实验目的及要求 二.实验环境 三.实验内容与步骤 3.1.实验内容:测试类,实现多态 3.2.实验步骤 3 ...

  4. 2017福州大学面向对象程序设计课程作业八

    作业链接 课程第七次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 111500206 赵畅 http://www.cnblogs.com/ZCplayground/p ...

  5. 2017福州大学面向对象程序设计课程作业七

    作业链接 课程第七次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 111500206 赵畅 http://www.cnblogs.com/ZCplayground/p ...

  6. 2017福州大学面向对象程序设计课程作业六

    作业链接 课程第六次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 111500206 赵畅 http://www.cnblogs.com/ZCplayground/p ...

  7. 2017福州大学面向对象程序设计课程作业四

    作业链接 课程第四次作业统计完成,本次作业满分100分,统计结果如下: 学号 姓名 作业地址 分数 111500206 赵畅 http://www.cnblogs.com/ZCplayground/p ...

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

    2017<面向对象程序设计>作业四 林燊 031602325 https://www.cnblogs.com/linshen/ github链接:https://github.com/Tr ...

  9. C++面向对象程序设计大作业:魔兽世界(三):开战

    C++面向对象程序设计大作业:魔兽世界(三):开战 问题描述 问题分析 代码 问题描述 问题来自于北京大学郭炜老师的C++慕课的大作业 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部.两个司令部 ...

  10. C++《面向对象程序设计课程设计》

    C++<面向对象程序设计课程设计> <面向对象程序设计课程设计>课程说明 适用专业:计算机科学与技术 课程周数:5周 一.根据计算机科学与技术专业人才培养方案制订. (一)课程 ...

最新文章

  1. pcb二次钻孔_PCB的内层制作流程,你学会了吗?
  2. idea创建maven项目的路径
  3. ASP.NET2.0数据操作之创建业务逻辑层
  4. 笔记本电脑频繁自动重启_笔记本电脑自动重启是什么原因
  5. Yaf框架视频教程之入门篇【已完成】
  6. Android 解锁app,应用锁「AppLock」v3.3.0 for Android 完美解锁版
  7. 黑苹果电池电量补丁_【黑苹果】用一次实战记录电池热补丁的编写方法
  8. Ku高通量卫星“星地一体化”应急通信系统解决方案
  9. 故障:PDF 文件打印失败
  10. 解决使用百度地图API时偏移问题并自适应中心点和比例
  11. html项目符号正方形,html – 列表项下的项目符号
  12. 通过Hook进行游戏的全局加速
  13. u盘中Trojan.Generic病毒
  14. 2021届 联发科技视频一面 嵌入式软件
  15. 饿了么想“蜕变”,张旭豪要把AI这顶“帽子”变成“呢子大衣”
  16. Plotly:最强Python可视化库,没有之一
  17. openssl enc 加密/解密文件
  18. 快速入门rsync远程同步
  19. android 8.0 華為m3,华为揽阅M3平板配置全曝光:8.0英寸+快充+麒麟950
  20. java map.put map_Java Map put()用法及代码示例

热门文章

  1. 适用于苹果Mac的 5 个 SSH 客户端软件
  2. 如何在 Mac 上控制对摄像头的访问?
  3. iOS开发之WKWebView的使用以及遇到的问题
  4. SVN客户端smartsvn详细功能
  5. 深度剖析Spring Cloud底层原理
  6. SQLServer之删除用户自定义数据库用户
  7. 【待填坑】js构造函数和内置对象的区别
  8. stm32cube和sw4stm32开发
  9. laravel路由基本知识
  10. 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染