GitHub:https://github.com/zsl1996/UI/commits/master

一、            实验内容

这是交付给最终用户的软件,有一定的界面和必要的辅助功能。完成Windows和Linux电脑图形界面的程序,需实现以下功能:

l  对上述各属性参数(生成题目的数量,操作数的数量,题目及答案中的数值的范围……)进行设置

l  调用Core模块得到题目和运算结果,显示题目,接受输入,并能判断答案是否正确

l  增加“倒计时”功能,每个题目必须在20秒内完成,否则,得0分并进入下一题

l  增加“错题记录”功能,对于答错的题,将其保存下来,当下次进行“复习”时,增大错题在练习题中的概率

l  增加”历史纪录“功能,把用户做题的成绩纪录下来并可以展现历史纪录

l  增加“成绩分享”功能,生成成绩单,想一想成绩单里要展现什么,仅仅是最后的得分吗?错题的类型及数量?帮用户分析其薄弱的环节,提出合理的学习建议?

二、            设计方案

技术选型:

  • C# 是微软收购不成JAVA搞得一套IDE开发框架,高效但封闭,只能在WIN下运行,对跨平台支持不太好,C# WPF不开源,遇到坑只能绕开。
  • QT是一套为了开发C++ 图文界面而作的一套IDE开发框架,、是一款既可以开发UI界面也可以开发非UI界面的工具程序,也可用来开发服务器。QT作为跨平台开发工具,现今支持的系统有:WINDOWS、IOS、OSX、ANDROID、Linux、UNIX 等等;

考虑到需要跨平台,本次选择Qt&C++做开发。

三、            界面细节以及BUG修复

  • 界面首页,设有答题、设定、答题记录、成绩分享及分析四个菜单栏

在一个centerwiget放置4个wiget,利用点击事件与wiget的show(),close()函数实现四个功能界面的无缝切换.

例如点击设定界面,就激发其他三个界面的close(),仅仅让设定界面展示出来:

开发过程的bug:在图形界面开发(拖拽),四个界面很容易相互包括,最终在代码中设定正确的父类解决。

  • 开始答题后界面,在方框中输入答案,确认键和enter均可提交。

使用时候应先点击开始答题计时器启动,减到0自动进入下一题。

增加复习模式,此模式是在代码中增加一个vector保留所有错题,在选择复习模式后,会循环所有错题,直到所有题目都答对。

题目显示框设为不可编辑,避免复制到计算器作弊。

增加平均分功能,注意此为此阶段(即core中的一次产生题目数目)的平均分,成绩分享中的平均分为此次打开软件所有的题目(有可能利用core产生多次题目)的平均分。

计时器是绑定一个1s触发一次的定时器,计时结束会自动跳到下一题。

因为20s事件有时候来不及点击鼠标,加入了了enter快捷键,代表确认。

开发过程的bug:

这个界面是最麻烦的,因为涉及事件最多,最开始每个槽函数我们都单独写处理,后来发现,其实就两件事,一个是正确的保存数据,再一个就是合理的刷新界面,这样分割出void MainWindow::pushvector(),int MainWindow::RefreshUI()后,整个代码的可读性与逻辑都变得清晰了许多。

再就是解决三个按键的点击顺序,最开始乱点会出现bug,后来利用flag进行限制,得到解决。

  • 一组题目回答完毕后显示答题结束

交互中多处利用提示框对下一步操作进行提示或者对不当的操作进行警告

开发过程的bug:

显示中文时候,有些时候会变成乱码,没有解决,部分不得不改为英文。

  • 题目设置菜单,可进行题目个数,运算符种类,最大操作数,是否支持整数、分数、小数、乘方运算设置;确认后保存设置即可,或恢复默认设置。

  可以进行题目要求的所有设定,可以恢复默认选项,设定成功会出现提示框。

  • 查看近期答题记录

在此可以查看回答过的所有题目,包括复习模式中回答的题目,对用时,得分都有显示,实现是用的Qtablewiget实现,自动关联滚动条,非常友好。

开发过程的bug:

:因为储存方式不对,最开始的时候用时以及题目数目都不对,多次样本单步运行debug,多次更改了答题界面逻辑才解决。

  • 勾选方框,进入复习模式,循环做错的题目,遍历结束提示复习完毕。

使用的是一个vector装错题,答对了就去除掉,只有所有问题都答对才会结束此模式。

开发过程的bug:

最开始一开始就选择复习模式,并直接答题,得分会变成100,加了判别vector是否为空。

  • 成绩分享菜单内,对近期成绩做出分析,提供分享。

平均分50以上建议加大难度,50以下建议建议使用复习模式。

Bug解决:依旧是文本框settext()设置中文会乱码,不得不使用中文。

四、            结对开发流程

  1. 各自分析题目,做技术选型,交流讨论,确定方案。
  2. 确立代码风格规范及开发规范。
  3. 学习“三明治”提建议方法。
  4. 采取一小时轮换制。
  5. 驾驶员:选取模块进行开发,做单元测试。
  6. 领航员:监督驾驶员对开发流程的执行,考虑单元测试的覆盖率。

五、            BUG分析

详见三、界面细节部分各功能详情。

六、            经验总结

  1. 结对编程的意义

首先不得不承认,每个在各自独立设计,实现软件的过程中不免要犯各种错误。在结对编程中,因为有随时的复审和交流,每个人都有强项,恰恰与木桶效应相反,最后的结果是各方面两个人的最高水平!这样,错误少了,程序的初始质量就高很多。自然省下很多修改时间。尤其是对于(==写成=)这种低级无脑难以发现的问题。

结对编程的过程也是一个相互督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。这种督促的压力,让双方都变得更有执行力。

磨练了两个人的友谊,如何怼的别人心服口服,还能继续做朋友。

  2.工作后是否选择结对编程

如果可以的话,我选择和女生结对编程。

工作中他一方面可以提高效率:结对编程的主要目的是控制品质和风险,同时建设团队。会给人看的代码和不会给人看的代码品质上有天壤之别。经过讨论的实现也往往比自己独自决定的考虑的更加全面。技术细节掌握在一个人手里对于团队是危险的。而结对既可以让避免这种情况,还能让工程师更快的进步,让团队更多交流,更加融洽。要说效率,两个高度自律的高手结对编程可能在效率上要付出代价。但是即使如此,也是完全值得的。另一方面,好的品质,会让测试更顺利,对应需求变化更快速。也可以说是增加了效率。

结对编程绝对可以大幅度提高工作效率,但同时,他让工程师一分钟都不能走神,每天高强度工作n个小时。结对编程虽然很好,但绝对是大体力劳动,太累人,不是一般人干得来的,实践当中很少有团队能够坚持下来。

  3.学到的经验

规划时间,增加执行力,通过别人监督使自己工作时更专注避免犯错,学会给对方积极的反馈,三明治方法几乎可以适用于左右的情况。团队和睦共进才是生存之道。

  4.关于对接,起初每次对接一个组,我都要修改事件函数,后来想到我自己定义一个接口为myapi.hpp,定义我自己的设定函数,然后对接每个组的core的时候,只需要在myapi中调用他们的设定函数,但是传出我需要的参数,实现view与control的分割(MVC框架思想),大大加快了对接速度。

七、   PSP表格

附、            课程建议

希望能有学习的过程,而不是通过留作业的方式倒逼学习。作业繁重,远远超出两个学分的任务。

结对编程UI的更多相关文章

  1. 结对编程——四则运算器(UI第十组)

    博客目录: 一.问题描述                   二.设计思路                   三.UI开发过程                       四.对接过程       ...

  2. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

  3. 结对编程收获——UI真的没有那么简单

    结对编程收获——UI真的没有那么简单                                                      詹元成 初看作业要求,心里还有一点欣喜,不就是做一个UI ...

  4. 结对编程——带UI的小初高数学学习软件

    一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...

  5. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  6. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

  7. GUI、模块化与结对编程(homework-03)

    摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...

  8. 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结

    软件工程结对编程作业总结 11061160  顾泽鹏 11061151  庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...

  9. 结对编程四则运算gui

    码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...

随机推荐

  1. jdk紧急漏洞,XMLDecoder反序列化攻击

    昨天在公司发现了一个jdk中的XMLDecoder反序列化的漏洞,看起来很危险!下面通过两个示例来看看这个漏洞的危害! 示例1:利用XmlDecoder删除本地文件 首先来看这个xmldecoder. ...

  2. Javascript中的相等比较

    在比较相等或不相等之前,会对操作数进行类型转换,然后比较相等性 在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 1.如果由一个操作数是布尔值,则在比较相等性之前先将其转换为数值:2.如果 ...

  3. CF1223D

    CF1223D 不需要动的一定值域连续 #include<iostream> #include<cstring> #include<cstdio> #include ...

  4. ORACLE PL、SQL编程

    PL(Procedural Language)过程化的编程语言,是在SQL的基础上增加的部分,如:变量的使用.流程控制等, 重点学习Oracle和MySQL创建存储过程及流程控制的异同. 一.存储过程 ...

  5. translation

    *过渡写到本体上(谁做动画写谁身上) transition transition-property  规定应用过渡的CSS属性的名称. transition-duration  定义过渡效果花费的时间 ...

  6. goto和函数调用

      goto: 函数调用: 作用域 label在函数内定义,所以函数内   跳转操作 无条件 调用时先保存现场,复制实际参数,然后才是跳转 生存期 由于不是左值,它没有生存期,仅在编译期有意义.   ...

  7. vector注意事项

    vector注意事项: 如果你添加元素,但是vector的容量(是容量,不是大小,容量比大小大,会预先多分配空间)不够的话,系统就会重新分配一段内存,然后把原先的内容全部拷贝过去,然后删除原先的内容. ...

  8. 影响Acorn for Mac图像打印质量的因素有什么?怎样处理这些因素才能得到打印效果最佳的图像?

    Acorn for Mac是Mac OS平台上一款比较不错的图像处理软件.acorn mac版用起来都很像神器 Photoshop,是的,它的设计目标就是成为 Photoshop 的轻量替代者,拥有所 ...

  9. vue 项目 跳转 页面 不刷新 问题

    vue项目中需要导出下载客户数据,因为数据太多,响应太慢.后台直接上传给七牛  然后返回一个下载链接  前端通过跳转链接 来下载 riskManagementApi.friendExprotAll(t ...

  10. git stash 保存和恢复进度

    1. stash当前修改 git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录. 比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工 ...