2017年秋季学期软件工程第二次作业

源代码链接:https://github.com/FredaCao/homework1.git

一. PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10 10
Estimate 估计这个任务需要多少时间 255 260
Development 开发 150 165
Analysis 需求分析 10 暂无
Design Spec 生成设计文档 10 暂无
Design Review 设计复审 10 暂无
Coding Standard 代码规范 10 5
Design 具体设计 10 30
Coding 具体编码 100 130
Code Review 代码复审 10  
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 30 30
Test Report 测试报告    
Size Measurement 计算工作量 5 5
Postmortem&Process Improvement Plan 事后总结,并提出过程改进计划 30 20
合计   255 910

二. 解题思路

 软件基本功能

  1. 参与运算的操作数(operands)除了100以内的整数以外,还要支持真分数的四则运算,例如:1/6 + 1/8 = 7/24。操作数必须随机生成
  2. 运算符(operators)为 +, ?, ×, ÷ (如运算符个数固定,则不得小于3)运算符的种类和顺序必须随机生成
  3. 要求能处理用户的输入,并判断对错,打分统计正确率。
  4. 使用 -n 参数控制生成题目的个数,或通过用户交互过程确定题目个数,例如执行下面命令将生成5个题目
    • (以C/C++/C#为例) calgen.exe -n 5
    • (以python为例) python3 calgen.py -n 5

 实现思路

  1. 四则运算采用将中序表达式转化为后缀表达式
  2. 将原来四则运算中的整数换成分数,抽象出分数的类,并实现+,-,x三个运算符的重载
  3. 计算后缀表达式的过程中将字符串转化为分数的类实例,然后使用重载的运算符进行计算
  4. 使用getopt方法来获取命令行中的参数
  5. 处理用户的输入并转化为分数类实例,通过==运算符判断是否正确

三. 设计过程

1. 分数类 包含分子分母两个类成员,+,-,x运算符实现过程中进行约分,先获得计算之后的分子分母最大公约数,再同时除以这个约数即可

2. 中序表达式转化后缀表达式 使用栈来存储优先级较低的运算符,当遇到运算符时,将相同和更高优先级的操作符出栈,并加入string流中,另外把带数字和带有分号的分数作为一个整体直接加入string流中,使用空格来分割

3. 后缀表达式计算,将字符串使用空格作为分隔符split,如果是代表数的字符串则构造分数对象,并入栈,如果是操作符则使用栈顶的第一个和第二个元素进行计算,计算完之后栈顶元素出栈,迭代后栈中只有一个元素即为所求

四. 代码说明

1. 乘法运算符重载

  • 分子与分子相乘,分母与分母相乘
  • 计算最大公约数,分子分母同时除以最大公约数

2. 计算后缀表达式

  • 将字符串使用空格作为分隔符split,如果是代表数的字符串则构造分数对象,并入栈,
  • 如果是操作符则使用栈顶的第一个和第二个元素进行计算,
  • 迭代之后最后一个元素即为所求

五. 代码截图

六. 项目小结

  中序表达式转化为后缀表达式的迭代过程结束之后,栈内可能还有操作符,此时需要注意一下先输入空格再依次出栈其他操作符。单元测试的编写应该采用更加自动化的过程,以后会尝试使用googletest框架。

原文地址:https://www.cnblogs.com/fredacao-123/p/8146732.html

时间: 2024-08-06 18:54:15

2017年秋季学期软件工程第二次作业的相关文章

2017年秋季学期软件工程第二次作业(陆祈祯)

一.源代码地址:https://github.com/lqzlqzlqz/-2 二. PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划     · Estimate · 估计这个任务需要多少时间  12x60  18x60 Development 开发     · Analysis · 需求分析 (包括学习新技术) 6x60 6x60 · Design Spec · 生成设计文档  60  60

2017年秋季学期软件工程第一次作业(曹洪茹)

作业一 在开始作业要求的正文之前,我先简单谈谈自此课开课以来,包括读了许多大牛写的博文之后的几点感悟和思考. 首先,作为一名有四年地方大学生活经验的军校研究生,我很激动也很庆幸在研究生阶段能遇到这么一门真正实现本科教育改革创新,以培养学生思维逻辑能力.切实达到教学目标为为目的的课程.同时,比较讽刺的是,在崇尚思想自由.开放.创新的地方本科院校没有邂逅的这种课程反倒让我在军校这个相对封闭化.教条化的环境中接触到了,这主要得益于何老师对教育的前瞻性的战略眼光.其次,我对这个课的课堂模式是持支持态度的

软件工程 第二周作业

##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5.3.5 老板驱动的流程,这种开发流程模式存在着一些问题,那要如何解决这些问题呢? 这种模式当然也有它的问题. 领导对许多技术细节是外行. 领导未必懂得软件项目的管理,领导的权威影响了自由的交流和创造. 领导最擅长的管理方式是行政命令,这未必能管好软件团队或任何需要创造力的团队. 领导的精力有限,领

2017秋-软件工程第二次作业

本周因为个人缘故,参加社团活动作业没能及时完成.对此我表示,做过就不后悔,至少我觉得生活是丰富多彩的,错过的时间就应该努力赶上!夜深人静的时候总是可以让人反省自己.本次作业我只实现了第一个功能和第二个功能的部分.对此我表示很不满,但是时间紧迫.个人能力有限,以至于自己没能让自己的软件看起来完美. 第二次作业的内容非常有趣,这也是我一直想做的一件事情,统计一篇文章里的字词.我知道自己的编程能力较差.距离完成提交时间很近,自己手写全部是不能及时按照约定提交的,于是就尝试借鉴前人的代码.第一晚的努力各

2017软件工程第二次作业(一)

第二周例行报告 PSP 本周进度条 累积进度图 博文字数累积折线图: 代码行数累积折线图: PSP饼状图

软件工程第二次作业--师兄采访

我采访的是李权师兄,虽然之前也有人采访过他,问题都是同样的问题,不过我挖掘出了和其他同学不一样的信息. 问题:    师兄,当时你们做的项目是什么,有多少用户, 现在还有人用吗? 李权师兄: 当时我们的项目名是约跑APP,当时用户有8人.在用户的手机上测试通过,能让用户找到一起跑步的小伙伴.现在已经没有人用了. 追问:该app给用户提供了什么样的服务? 李权师兄:app能提供给用户认识新朋友的平台.通过app,用户可以约人一起跑步. 第二个问题:师兄这个项目能否给我们团队继续开发,源代码还有么?

软件工程第二次作业(王伟东)

一周的时光转瞬即逝,第二周的作业也悄悄地开始了.杨老师的一言一行都深深地刻在我的心里,"不迟到"是做人做事的根本,努力则是成就人生的基石.正如<道德经>中所言"天地不仁,视万物为刍狗",上天对待世间万物是公平的,从来都是不偏不倚,只有勤奋好学的人才会得到垂青和奖赏. ㈠词频统计的四个功能 ①首先控制台输入内容到文件中,再对文件进行词频统计: ②命令行输入英文作品名,然后统计作品词频: ③命令行输入英文作品文件的目录名,再批量统计: ④从控制台读入英文单篇

软件工程第二次作业——git的使用

1. 参照 http://www.cnblogs.com/xinz/p/3803109.html 的第一题,每人建立一个GitHub账号,组长建立一个Project,将本组成员纳入此Porject中的Collaborators,并添加[email protected] 为Collaborator.   邓杰: 陈宗雷: (1)在之前已经建立了自己的github账号,账号名称为zongleichen. (2)以合作者身份加入到组长建立的项目: 2.   每人自己建立一个HelloWorld项目,练

2017年秋季学期获“领跑衫”感言

团队名称:Thunder 项目名称:爱阅app 团队成员:王航.李传康.代秋彤(原).翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 首先非常感谢邹欣老师和周筠老师资助的领跑衫,感谢杨贵福老师的教导,也感谢我们Thunder团队的所有成员对我的帮助. “获奖感言”这个词我虽然经常能听到,但是对于我来说还是一个比较陌生的词,因为这是我第一次写获奖感言.在这学期刚开学的时候杨老师就说过学期结束的时候会有一个领跑衫的奖励,当时听到这件事的时候还挺心动的,但是我觉得以我的水平应该也就只能想想罢了.随着时间的