时间:

2015/4/17-2015/4/23

基本要求:

在之前编写的四则运算程序基础之上做如下改进:

  1. 请参照教材Page57:4.2-4.3节中内容,修改原程序,使之符合 “代码风格和设计规范”的基本要求;
  2. 请采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来

    小提示:假如在C语言环境下,可将函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中;
  3. 通过测试程序和API 接口,测试其简单的加法功能。

    小提示:单元测试方法请参看教材Page21:2.1.1节内容

扩展程序功能(每组至少选做其中2个方向)

针对第一次作业添加功能点支持:

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
  4. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  5. 用户答题结束以后,程序可以显示用户答题所用的时间

封装,API和单元测试解释:

封装
  • 大家把所有的代码都写在一个main函数里,那么把加减乘除都提取出来成单独的函数就是一种封装。
  • 大家把scanf等等待用户输入的行为放在add函数里了,那么把sanf提取到函数外部,函数原型变成int add(int a,int b);这是一种封装
  • 错误处理的代码雷同,是否能写一个函数,然后供其他地方调用?这是封装
  • 进一步,大家把加减乘除函数的声明放到.h文件里,实现放到.c文件里,是一种封装步骤
  • 进一步,如果把计算函数、对错判断、以及错误处理等写到一个class里,是一种封装
  • 进一步,如果把函数抽象成一个统一的函数double calc(const char* operator,double a,double b);该函数内部可以转调用前面封装的加减乘除函数,那么这是进一步的封装,调用者可以只用calc("+",1,2)这样的方式,用一个函数实现四种调用行为。
  • 进一步,如果写简单的字符串解析,可以将calc做进一步封装,改为double calc(const char* expression),调用者这样使用calc("1+2"),calc("100/2")等,这是进一步的封装
  • 进一步,如果你会写dll(无论是基于c、c++还是c#),把计算功能封装成一个独立的dll+暴露接口的.h文件(c和c++需要头文件,java和c#则没有),那么这是更大粒度的封装,此时调用者不需要看到代码的实现,而只需要有dll以及头文件,就可以调用头文件里的函数。
API

API的全程是:Applicaton Programming Interface,翻译过来是应用程序接口。

  • 简单说,API就是函数,调用者只需要知道API函数就可以完成所需要的功能。
  • 但是,API是调用者完成功能必须的函数,比如说上面的封装过程中你写了Add,Subtraction,Multiplication,Division内部函数,但是最后封装了calc函数,那么,只需要在头文件里暴露calc函数给调用者就可以,其他几个函数都可以只放在cpp里。calc就是API。
  • 另外对于C++和Java来说,如果你封装了一个class,那么public的函数就是你需要暴露给调用者的,不需要暴露的函数应该是private的。
单元测试

单元测试,看个英文介绍怎样?:http://en.wikipedia.org/wiki/Unit_testing

啊,全英文,太难了,还是必应、Google、百度中文吧?对了,推荐必应词典,无论是pc还是手机app都有。超级好用。

举个栗子,前面封装了calc这个API,那么,可以这样做单元测试:

测试加法
void testAdd()
{
double result = calc("1+2");
assert(result==3); result = calc("0+100");
assert(result==100); ...
}

哈哈,然后你就可以针对除法的被除数为0等情况做单元测试了,单元测试就是大家来找茬的程序方式- -。

作业报告

须包括以下几个方面:

  • 对题目要求的分析、设计 和 代码实现。
  • 代码规范设计、风格讨论。
  • 两人合作步骤
  • 结对编程作业只要一个人发布博客就可以
  • 结对编程现场的照片一张(可选)

软件工程(GZSD2015)第三次作业的更多相关文章

  1. 软件工程(GZSD2015) 第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

  2. 软件工程(GZSD2015) 第三次作业

    时间: 2015/4/17-2015/4/23 基本要求: 在之前编写的四则运算程序基础之上做如下改进: 请参照教材Page57:4.2-4.3节中内容,修改原程序,使之符合 "代码风格和设 ...

  3. 17秋 软件工程 团队第三次作业 预则立&他山之石

    题目:团队作业-预则立&&他山之石 团队: 我说嘻(xì)哈(hà)你说侠 17秋 软件工程 团队第三次作业 预则立&他山之石 1.确立团队选题,建立和初步熟悉团队git的协作 ...

  4. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  5. 软件工程(GZSD2015)第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

  6. 248&258--高级软件工程第三次作业

    0 小组成员 马帅 / 2017202110248 齐爽爽 / 2017282110258 1 项目 GitHub 地址 GitHub:https://github.com/whumashuai/QT ...

  7. 高级软件工程2017第6次作业--团队项目:Alpha阶段综合报告

    高级软件工程2017第6次作业--团队项目:Alpha阶段综合报告 Deadline:2017-10-30(周一)21:00pm (注:以下内容参考集大作业4,集大作业5,集大作业6,集大作业7 一. ...

  8. 17秋 软件工程 团队第五次作业 Alpha

    题目:团队作业--Alpha冲刺 17秋 软件工程 团队第五次作业 Alpha 12次Scrum 第一次Scrum 第二次Scrum 第三次Scrum 第四次Scrum 第五次Scrum 第六次Scr ...

  9. 17秋 软件工程 团队第五次作业 Alpha 测试报告

    用户反馈博客:17秋 软件工程 团队第五次作业 Alpha 用户反馈 团队项目软件的总体测试计划 测试模块: 用户登录 部门信息模块 活动模块 部员管理模块 短信通知模块 测试计划: 注:测试结果Y代 ...

  10. 【西北师大-2108Java】第三次作业成绩汇总

    [西北师大-2108Java]第三次作业成绩汇总 熟悉PTA平台线上测试环境: 理解用户自定义类的定义: 掌握对象的声明: 学会使用构造函数初始化对象: 使用类属性与方法的使用掌握使用: 掌握pack ...

随机推荐

  1. Spring学习笔记之AOP配置篇(一)

    [TOC] 1. 创建并声明一个切面 首先,创建一个类,添加@Component注解使其添加到IoC容器 然后,添加@Aspect注解,使其成为一个切面 最后,在配置文件里面,使用<aop:as ...

  2. win10*64+vs2015+opencv3.0工程模板配置

    参考网上的资料,自己再次整合一下,为新手提供个方便,也为自己备份. 一.下载安装opencv3.0 1.首先下载opencv3.0的包(windows版本的) 2.安装opencv,路径自己选好,自动 ...

  3. 分辨率验证工具 - 【Firesizer】的使用升级-Firefox-29.0

    今天打算使用Firesizer,但是在Firefox浏览器的右下角找不到Firesizer了. 在官网搜了搜(https://addons.mozilla.org/en-US/firefox/addo ...

  4. .net core 2.0学习笔记(二):Hello World & 进阶

    官网已经有一个.net core的入手教程(https://www.microsoft.com/net/core#windowscmd),但这个教程完全没有顾及全宇宙第一IDE的感受.今天就跟大家体验 ...

  5. 页面引入css用link和import的区别

    假设有一个css文件a.css,文件里的内容如下: p { font-size: 18px; } 现在分别使用两种方式引入a.css: 1.使用html的link标签 <link rel=&qu ...

  6. 再起航,我的学习笔记之JavaScript设计模式10(单例模式)

    单例模式 单例模式(Singleton) : 又被称为单体模式,是只允许实例化一次的对象类.一个类有且仅有一个实例,并且自行实例化向整个系统提供. 命名空间 单例模式可能是JavaScript中我们最 ...

  7. Luogu P3390 【模板】矩阵快速幂

    题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...

  8. 京东地址导航js+css

    HTML------------------------------------------------<!DOCTYPE html><html lang="en" ...

  9. jQuery绑定事物处理器

    绑定与移除1..bind() 绑定事件可以有2个或者3个参数:第一个参数为事件类型 第二个参数为处理函数 第三个为布尔类型 on()事件代替2..delegate() 事件委托,三个参数,第一个为选择 ...

  10. MSF初体验 - kali linux 入侵XP系统

    最近做某安全竞赛平台的比赛,真正开始接触Metasploit这一渗透神器,同时也是装逼神器(2333-.),下面记录一下初步使用Metasploit的过程.首先在百度百科摘录了一段关于Metasplo ...