0 小组成员

马帅 / 2017202110248

齐爽爽 / 2017282110258

1 项目 GitHub 地址

GitHub:https://github.com/whumashuai/QTcalgen

2 预估耗时与实际耗时

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10  5
· Estimate · 估计这个任务需要多少时间   10     5
Development 开发 1060   1160
· Analysis · 需求分析 (包括学习新技术)   30     120
· Design Spec · 生成设计文档   10     30
· Design Review · 设计复审 (和同事审核设计文档)   30     60 
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)   30     60
· Design · 具体设计   60     70
· Coding · 具体编码   600    600
· Code Review · 代码复审   180     180
· Test · 测试(自我测试,修改代码,提交修改)   120     40
Reporting 报告 90   180
· Test Report · 测试报告   50     130
· Size Measurement · 计算工作量   20     20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划   20    30
合计   1160  1345

3 解题思路

3.1 前期准备

因为我的partner马帅第二次完成的比我好,所以我们决定第三次作业,在他的代码基础上进行改进与升级,在这个基础上建立前台交互界面。在之前,项目只有math.h和calgen.cpp两个文件。我们意识到要实现接下来的功能,我们必须分模块,将代码分装。当拿到需求,需要建立前台界面,我们小组就很惆怅,因为C++在自己的印象中,C++是需要自己写很多东西的,但是吧又一想,现在发展的多块啊,肯定什么东西网上都已经实现了。于是就搜索,直接出来的QT,于是就确定下来,咱们用QT!简单粗暴。

3.2 前端

使用QT disigner设计简单界面;参考博客等等等。

实现功能:

(1)多语言:虽然一开始就看到老师要求,不是简单的if、else而是要体现低耦合。也看了博客其他人的解决办法,似乎他们都觉得这个功能很难实现。或许是我们第一次使用QT,很多东西都第一次知道,在知道有信号与槽的功能后,我们很兴奋,觉得这个好像框架,直接用就OK。但是在最后整理反思的时候,我们还是建立了不同语言的界面,在用户选择语言后,后台接收到不同信号,从而反馈不同的语言界面,似乎和if、else相仿。

(2)计时,实现比较容易,使用QTime类实例化一个对象,然后加一个信号与槽作为每秒更新,然后调用start和stop函数控制开始与结束即可。

3.3后端

使用马帅的代码,在原来基础上分装、修改。

3.4 流程图

3.5 分歧解决

我们两个都是比较好商量事情的人,所以任何一方提出一个问题,基本都是赞同的,所以没有分歧。尽管最后觉得页面很简陋,并且也有点不符合平时用户的习惯,但是在最开始,只想先实现每一个功能,最后再来修改,总觉得时间还够,以至于后面也来不及修改。包括前期,达成一致,先实现计时和多语言,后面再增加计数功能,发现也来不及了。

4 代码说明

因为关键代码基本和上次的差不多,就展示新加入的关键代码。

(1)多语言选择功能:语言切换功能通过信号与槽机制实现,在主界面(w表示),发送信号signaltra(),signalsim(),signalEng()分别由繁体,简体,英文界面的receiveshow()槽接受以显示该界面。具体代码如下:

QObject::connect(&w,SIGNAL(signaltra()),&tn,SLOT(receiveshow()));
    QObject::connect(&tn,SIGNAL(tranumshowmain()),&w,SLOT(receivereturn()));
    QObject::connect(&tn,SIGNAL(trashow()),&t,SLOT(receiveshow()));
    QObject::connect(&t,SIGNAL(trashownum()),&tn,SLOT(receivereturn()));
    QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
    QObject::connect(&t,SIGNAL(quit()),&a,SLOT(quit()));

    QObject::connect(&w,SIGNAL(signalsim()),&sn,SLOT(receiveshow()));
    QObject::connect(&sn,SIGNAL(simnumshowmain()),&w,SLOT(receivereturn()));
    QObject::connect(&sn,SIGNAL(simshow()),&s,SLOT(receiveshow()));
    QObject::connect(&s,SIGNAL(simshownum()),&sn,SLOT(receivereturn()));
    QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
    QObject::connect(&s,SIGNAL(quit()),&a,SLOT(quit()));

    QObject::connect(&w,SIGNAL(signalEng()),&en,SLOT(receiveshow()));
    QObject::connect(&en,SIGNAL(engnumshowmain()),&w,SLOT(receivereturn()));
    QObject::connect(&en,SIGNAL(engshow()),&e,SLOT(receiveshow()));
    QObject::connect(&e,SIGNAL(engshownum()),&en,SLOT(receivereturn()));
    QObject::connect(&w,SIGNAL(quit()),&a,SLOT(quit()));
QObject::connect(&e,SIGNAL(quit()),&a,SLOT(quit()));

(2)计时:在界面添加LCDnumber控件,使用QTimer类实例化一个时钟对象,用start和stop函数控制时钟的开始与暂停并给一个信号给timeUpdate开始时间的计时。使用QTime类实例化一个时间对象,初试化时间为0,调用addSecs函数并赋值参数为1,表示计时操作增加一秒,然后给出具体的输出形式(如“hh:mm:ss”),调用LCDnumber控件的display函数显示出计时。

.h文件

 QTimer *engtimer;
 QTime *engTimeRecord;//record time

.cpp文件

engtimer = new QTimer(this);//new Timer()
    engTimeRecord =,,);
QObject::connect(engtimer,SIGNAL(timeout()),this,SLOT(timeUpdate()));

timeUpdate()函数

*engTimeRecord = engTimeRecord->addSecs();
    QString strTime = engTimeRecord->toString("hh:mm:ss");
    ui->lcdNumber->display(strTime);

5 测试运行

由于后台代码没有怎么改动,所以单元测试用例情况和第二次相同。以下页面为进入之后每一步操作流程的页面。

模拟用户正确操作

(1)语言选择

后面以中文简体为例。

(2)自主选择表达式数量

(3)做题页面

当进入页面开始计时,中间反馈框会反馈正确性与正确答案。当做到最后一题时,显示得分与总耗时。

用户可能的错误操作及应对

除了表达式数量框与结果框,其他显示框,限制只能显示。

6 合作与总结

马帅

这是我第一次接触到结对编程,确实不知道如何去分配任务,还要考虑编程的方式,编程环境等,刚开始觉得很麻烦,慢慢接触后,和partner一起交流学习,碰到问题一起解决。帮助修改代码,效率大大提高,代码的质量也提高不少。
         本项目需要一个UI界面,由于使用的是C++编写该项目,也一直没用过C++写界面,在网上查找一些资料后,并且和partner商议后决定采用QT实现。由于第一次使用QT也确实遇到了一些问题,最开始是QT运行环境的问题,这个问题困扰了很久,也导致项目进展不顺,后来还是和partner交流过程中提到这个问题,在partner的帮助下终于解决了这个问题。后来在项目的编写过程中也遇到了一些问题,比如在多项目文件中使用全局变量,采用extern关键字来实现,但一直无法再其他文件中使用,在CSDN上查找N篇博客后依然没解决,后来和partner交流后再知道是我自己声明出错。在实现时钟的过程中,获取时钟显示值一直为0,在网上查找相关的一些资料后采用QTime的实例对象调用addSecs函数去刷新时钟,停止后直接把该实例按照“hh:mm:ss"表示为QString类型显示出来。等等。
         本次项目让我学到了很多,不但学习到了如何用QT对编写UI,更重要是学到如何和partner合作编程,去处理合作过程中出现的各种各样的问题。以后我会和partner继续合作,共同学习,提高自己的能力。

齐爽爽

很荣幸能在这次课上有结对编程的体验,也能有一个好的partner,合作至今,并没有出现老师之前提到的合作中的问题。1+1确实大于2,特别是对于我这种选择困难,并且也不知道到底怎么解决问题的人来说,有一个和你一起的小伙伴,多一个人可以交流,有什么想法都能立马说出来,不管最后我们达成的共识是否正确,但是至少能得到小伙伴的肯定还在赞同,还是能在项目里树立信心的。并且在结对编程中,有一个人在那里监督,少了懒散,并且有问题也能及时指出,提高效率。但是在这中间,肯定也会有不足,我和小伙伴的合作,正是我俩都是那种太好相处的伙伴,所以很多问题上面很容易就满足,没有过高要求自己,所以和其他团队的项目比起来会显得简陋。但是不管最后结果如何,这个合作过程是不可替代的。

7 结对照片

虽然一个在街道口一个在工学部,但是还是碰了三次面的,中间一些卡着的问题的解决。到最后一次才想起来拍照。

248&258--高级软件工程第三次作业的更多相关文章

  1. 高级软件工程第三次作业 赵坤&黄亦薇

    0.小组成员 赵坤2017282110261 黄亦薇201728210260 1.项目Github地址  https://github.com/zkself/homework3 PS:建议使用chro ...

  2. 高级软件工程第四次作业(C++)

    1 团队组成和选题情况说明 1.1 Git链接:https://github.com/WHUSE2017/C-team 1.2 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(26 ...

  3. test软件工程第三次作业

    零.前言 本次作业要求个人编写程序,截止日期2019年9月25日23:00. 请先阅读<构建之法>第一章至第三章的内容,并在下方作业里体现出阅读后的成果.特别是第2章中的效能分析及个人软件 ...

  4. 【ASE高级软件工程】第一次结对作业

    问题定义 具体规则见:讲义.大致规则如下: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数 ...

  5. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  6. 软件工程第三次作业(One who wants to wear the crown, Bears the crown.)

    最大连续子数组和 题目 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和 ...

  7. 【软件工程第三次作业】结对编程:四则运算( Java 实现)

    1. GitHub 地址 本项目由 莫少政(3117004667).余泽端(3117004679)结对完成. 项目 GitHub 地址:https://github.com/Yuzeduan/Arit ...

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

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

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

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

随机推荐

  1. Curator Framework的基本使用方法

    Curator Framework提供了简化使用zookeeper更高级的API接口.它包涵很多优秀的特性,主要包括以下三点: 自动连接管理:自动处理zookeeper的连接和重试存在一些潜在的问题: ...

  2. Redis安装手册

    转载请注明出处:http://www.cnblogs.com/robinjava77/p/5465146.html (Robin) 1)下载redis:wget http://download.red ...

  3. JS-改变页面的颜色(二)

    需求:点击页面的按钮,改变页面的颜色 思路:一先画出最简单的页面,二想办法获取页面的body节点,三想办法修改body节点的背景颜色属性,四通过一个方法获取随机的颜色值           和第一个例 ...

  4. 第一个Struts1步骤

    一.前端 :登陆页面 index.jsp <%@ page language="java" import="java.util.*" pageEncodi ...

  5. Java基础之访问文件与目录——列出目录内容(ListDirectoryContents)

    控制台程序,列出目录的全部内容并使用过滤器来选择特定的条目. import java.nio.file.*; import java.io.IOException; public class List ...

  6. C# 访问USB(HID)设备

    原文:C# 访问USB(HID)设备 二话不说,直接给代码,如果您真想做这方面的东西,还是稍微研究下,没有现成的好类用,就需要自己了解其原理 //引用空间 using System; using Sy ...

  7. [wikioi]二叉树最大宽度和高度

    简单的DFS,用数组w记录每一层的宽度就行了,就是遇到一层就++.中间发现在C++里面,如果int未初始化就是用也是有异常的.还有二叉树的数组表示时,从1开始计数会比较好.还有后来学会了数组这样的初始 ...

  8. POJ3080 - Blue Jeans(KMP+二分)

    题目大意 求N个字符串的最长公共字串 题解 和POJ1226做法一样...注意是字典序最小的...WA了一次 代码: #include <iostream> #include <cs ...

  9. 开始我的 JNI 入门吧

    JNI (java native interface)   java本地开发接口(一句话 : 就是1个 adapter). JNI  是一个协议  -   是用来让   java代码和C,C++ 代码 ...

  10. android中控件的使用

    http://www.cnblogs.com/linjiqin/category/284058.html