结对作业项目报告——四则运算UI设计

Posted WHYDD

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对作业项目报告——四则运算UI设计相关的知识,希望对你有一定的参考价值。

 

一、项目要求

UI要求:

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

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

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

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

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

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

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

UI组需对所有Core组的模块进行测试。

二、项目Github地址

https://github.com/Roarcannotprogramming/homework_2/tree/master/homework_2

三、需求分析

1、   为用户显示题目,并且接受用户答案从而评断是否正确;

2、   用户答题时需要有倒计时功能,限制为20秒;

3、   根据用户答题之后生成错题本;

4、   把用户每一次的答题记录生成历史记录;

5、   最后需要能产生文件将成绩分享。

四、PSP表格

 

五、准备阶段

1、   工具的选择与安装

我们小组选择了QT进行UI的设计。

首先是QT的下载与安装,下载地址:http://download.qt.io/archive/qt/

安装教程:https://www.cnblogs.com/chenmingjun/p/8392713.html

在Visual studio2017上配置QT:https://blog.csdn.net/qq_33154343/article/details/78587699

4月5日:经过一下午的下载与安装,成功在vs上创建了第一个QT项目。

    2、QT的学习

学习QT:http://www.qter.org/portal.php?mod=view&aid=26

4月5日晚上与4月6日的早上根据网上的教程开始了QT的学习,经过一个晚上和一个早上的学习与了解,我们放弃了vs的使用,原因是不太熟悉在vs中对UI界面的操作,最终选择了QT Creator,这个软件不仅与教程较为贴切,而且对于QT新手较为友好,很容易进行上手。

4月6日:下午开始了项目。

六、工作阶段(结对小伙伴为驾驶员,我为领航员)

1、   初始界面的设计

首先是任务栏,我们将任务栏分为:文件、工具两类,其中文件里包含了新建答题的选项,工具里包含了错题本、历史记录、生成成绩单的选项;

其次是快捷键一栏我们设置了新建答题、错题本、历史记录、生成成绩单的快捷键;

页面中心是“欢迎答题”四个字;

我们起初是只是设计了标语与“开始答题”的按钮,

 

       我们在之后的过程中逐步的进行了改进,考虑到Core组的算式生成,我们需要在答题之前确定用户需要做多少到题目,每一个题目是需要有多少个运算符,最后还要选择适合用户该年龄阶段的运算符种类,避免有用户没有学习乘除或乘方带来的问题,以及学过的用户的题过于简单只有加减乘除的不平衡问题,之后能紧接着生成算式。于是我们在首页的地方添加了题目数量、最多运算符、运算符种类的填写与选择以及高级选项(具体见下文),用户需要自行填写具体信息。

 

使用的工具:

2、   答题界面的设计

       首先我们思考的是答题界面是如何跳出来的,于是就有了不同想法,我想能不能在用户点击了“开始答题”的时候跳出一个单独的页面,在这个单独的页面进行题目的问答,但组队的小伙伴觉得这个可以类似现在的一些软件,在同一个页面上只不过是页面的内容变成题目的问答,我觉得这样做更加流利与便捷。于是我们确定了答题界面出现的方式,利用Stacked Widget工具可以实现在同一个页面下显示不同的内容。

 

       紧接着便是答题界面的具体布局,这个也遇到了一个需要思考的问题:如何显示问题?有两种方式摆在我们的面前,第一种是在一个页面上将所有的题目显示出来,再进行答题,第二种是在一个页面上只显示一道题,用户答完一道题之后,再点击按钮进行下一道。与Core组讨论了一下他们最后传递算式的方式,是一个一个算式提供给我们,于是我们就确定了一道一道题地显示。

        又一个问题出现了,我们要不要利用Stacked Widget工具根据题目数量生成相应数量的界面,在每一个界面都采用同样的格式与布局,但当时就被我们pass了,因为这样做不仅工作量大,而且最后的结构会很复杂,于是我们采取了一种“刷新”的机制,意思是只做一个答题的界面,而每答完一道题后显示题目的文本框便会清除里面的内容,答题的文本框也会将用户的答案读取后清除,从而达到要求。

       之后便是界面上的其他功能,第一个是计时器,根据要求每道题的答题时间为20秒,20秒时间到了便弹出一个提醒框,点击后就会跳到下一题;第二个是下一题的按钮,当用户作答完毕后,便可以点击进入下一题的回答;第三个是题目序号的显示,这个功能可以显示出用户当前是第几道题。

 

使用的工具:

 

3、   结束界面的设计

       在用户做完所有的题目之后,便会出现结束界面,这个界面我们也是在Stacked Widget工具中进行设计。首先是一个标题“恭喜你做完了”,提高一下用户的愉悦度;其次我们想在最后的页面上可以放什么?第一个功能便是 “退出”,这里的退出是整个页面全部关闭,第二个功能是“再来一次”,这个功能可以方便一些意犹未尽的用户再进行一次答题,点击这个按钮后便会跳转到初始界面,进行新一轮的答题,第三个功能是进入错题本,这个可以跳到错题本界面(具体见下文),第四个功能是显示题目总数与做对的题目数,这个可以更好的并及时的让用户看到自己的成绩。

 

使用的工具:

4、   高级选项界面的设计

       这个界面是独立与主页面的,它的主要功能是为算式的生成提供更详细的信息,可以说是对于算式的更高一层的限制,使得用户可以有针对性的进行算数训练,避免出现超纲或过于简单的事情,包括了运算符数、表达式类型(整数、小数、分数)、操作数最小值、操作数最大值、小数点后保留几位的算式限制条件,用户可以通过这个选项对自己的答题进行操控,如果没有选择,我们默认为5个运算符数、表达式类型为整数、操作数最小0、最大100,防止用户需要经常设置的尴尬。

 

使用的工具:

5、   错题本界面的设计

       这个页面,是独立于主页面存在的。用户点击有关“错题本”的按钮就会出现此页面,这个页面的主要功能是显示用户在这次答题中错题序号、错误题目、用户答案和正确答案,这个界面旨在更好的服务用户,让用户在使用我们的软件的时候能够通过错题的积累中得到进步,其中包括了显示信息的文本框,与清空文本框的功能。

 

使用的工具:

6、   历史记录界面的设计

       这个页面是独立与主页面的。这个界面的功能是查看用户过去的答题记录。这个页面包括了总题数、正确题数、正确率、正确答案的显示,这个可以让用户更好的回顾以前的答题,通过对比可以发现自己的问题以及进步,为用户提供最优质的服务。

 

使用的工具:

7、   与Core的对接

       我们尝试了与第15组和第9组的对接,通过API实现Core与UI的对接,首先通过用户的选项,进行判断,其次通过判断得出用户需要什么样的算式,于是调用Core组给的文件,将信息传给Core,在将Core根据要求产生的算式在答题的文本框中显示,并且会给我们正确答案,用户每做完一题后都会与正确答案进行字符串的比对,如果正确,则对正确的个数加一,如果错误则将算式、题号、用户的答案和正确答案直接送到错题本中。最后在结束界面显示总题数与正确的题目数量。

8、   测试与运行结果

 

9、   界面修饰与点缀

七、Bug

1、   出现的bug

A、  答案填写中出现回车就会影响最终的判定,并且会影响最终错题本的生成

 

B、   在历史记录里的表头中无法使用“总”、“率”等字

 

2、   原因

A、  没有对用户的输入进行一个筛选

B、   因为QT Creator使用的是MSVC2017的编译器,使用的字符编码是GB2312,而我们需要的是utf8

3、   调试时间

A、  耗费了半个小时

B、   耗费了半个小时

4、   教训

       总是在一些细节的问题上出现Bug,而这些细节是一些很难再编程的时候注意到的,需要在调试的过程中慢慢寻找,可以将自己视作为一个真正的用户,在不断的考验着最后的成果,通过各种作为一个用户可能会做的事来判断自己的项目是否有容错性,在使用的时候尽量不按照常规走,这样更可以在一个看似完美的地方找到从未发现的漏洞

八、结对编程与个人编程的差异

       这次的结对编程充分的显现了个人与团队的差别,不是说个人工作不好,而是结对工作实在是很有效。

       首先从合作的角度看,一个好的结对是很不容易的,这个里面需要避免个人的随意性,要随时为大局考虑,可以说自由性会有所下降,举个例子,在这次组队中如果两个人没有协调好,那么造成的危害是无法计量的,可能会出现重复的危害,也可能最终因为交流不及时造成项目不能及时完成,这是一个很需要我们明白的道理,因为以后的结对项目充斥着我们的工作。

       相比与个人而言,结对编程更加有效率,首先从分析用户需求的时候来看,两个人的想法不仅比一个人的想法多,这不是一个苹果加上另一个苹果这么简单,而是一种试剂加上另一种试剂会产生剧烈的化学反应。每个人都有在认知上面的盲点,没有一个人可以充分的看到一个事情的全部表现,如果两个人甚至是更多的人结对,对于需求的剖析绝对会达到一个人无法达到的地步,最终理解就是个人与结对无法相比的;其次是在正式码代码的时候,一个人可能会比两个人工作时快一点,但最终的结果却不一定比结对的好,两个人结对编码的时候思维是经过碰撞的,思路可能会更清晰,也更明确具体的方向,出现问题很容易就能及时发现并改正,一个人如果中途的想法有了一丝偏差,在过程中没有发现,最终带来的结果可能就会不尽人意;最后就是工作量上会有一点点的减少,减轻了一个人开发时的压力,面对令人头疼的问题是也会比个人而言更容易去解决。

       相比与个人而言,结对编程更有益于人的进步。“结对”的过程同样是“交流”的过程,也是学习的过程,这就是摆脱“闭门造车”的最好机遇。首先这次的UI,我们是对于QT不太了解的,通过结对学习也能增强自己对于这个的理解,对于工具的使用,在结对中可以不断的尝试与搜寻,这个就比个人工作所需要的时间少,对于新的事物可以通过讨论得到充分的理解。如果是俩个水平相当的同学,则可以互相进步,以他人之长补己之短,在结对中能够更快的提升自己,;如果是一个技术薄弱的人与一个能力很强的人,对于技术薄弱的一方就是一次很好的学习机会,通过与“大佬”的交流可以更快的看到自己的不足以及时弥补,而对于“大佬”而言,这是一次促进合作能力的工作,可以为以后步入社会与他人合作奠定基础。

       相比与个人而言,结对编程更能促进工作的积极性。一个人的工作可能不会受到打扰而影响进度,但是一个人的热情会很快就会下降,如果说在团队中工作,当你的热情下降的时候,你会发现同伴任在努力奋斗当中,这是快要熄灭的火苗会立即燃烧起来,这是一个相互的作用,不会有一个人从头到尾都一直保持着那种劲头,但在结对中可以提高保持冲劲的时间。如果当别人的工作进度已经达到了很快的地步,反观自己就会有一种压力,这也是一种动力,促进自己完成工作的动力,毕竟也不想出现,对方工作快完成了,而自己的还遥遥无期的尴尬,并且出现了可以相互监督的操作,已达到更好的工作状态。

      从而在这次结对编程中,深刻的感觉到了一个人的力量总是有限的,两个人甚至更多的创造是无限的。

九、个人看法(走上工作岗位后,是否选择结对编程用于解决部分任务?)

我的看法:说实话,结对编程是很有助于问题的解决,不仅体现在时间花费上面,还体现在最终成果的质量上,但是在工作岗位上还要考虑自己未来的发展,如果是为了更好的完成任务与向他人学习的时候,结对无疑是一个很有效的途径,但如果在个人完成后能够得到的收获比结对的收获更多的情况下,我会选择个人编程,从工作上看,结对无疑比个人更轻松的有收获,但是没有经历过一个人编程时的压力与绝望,作为一个程序员是无法得到正真的历练与成长。所以在正真工作岗位上,我比较倾向于结对,但我也不会放过个人编程的机会,在结对中弥补自己,在个人里锻炼自己。

小伙伴的看法:走上工作岗位后,希望可以继续有结对的机会,这主要是因为有的时候如果一个人编程,可能会出现懈怠的情绪,而两个人共同编程会互相激励,起到促进作用在个人编程时,有时会出现对整体架构把握不清的情况,这时如果能跟队友共同讨论分析,会大大加快理解以及设计的速度。在一个人敲代码时,另一个人可以反思这部分代码有什么问题,哪里可以进行优化,与其他部分的关系是什么,下一步应该如何进行处理。这些都能够使代码质量得到极大的提升。总之,我认为这是一种非常适合我的编程方法,所以自己比较青睐于结对解决部分任务。

十、总结(今后的团队作业,每周的任务,准备如何吸收个人作业、结对作业,改善开发流程?)

       首先从团队作业说,这次的结对就是一次小型的团队作业,这个给了我们一次很重要的经历,让我们更好的理解什么是团队?如何适应团队?怎样在团队中更好的工作?最后如何能够在不影响他人的情况下发挥自己的优点?这些都能够在这次小小的结对作业中得到体现,最终反映在结果之中。今后的团队作业自然要吸取这次没有做好的地方的教训,继续保持能够提高效率的工作技巧,从最基本开始,每一个细节都有可能是决定未来胜负的关键,。

       对每周任务而言,可以提高自己的时间利用率,类似在个人与结对中会出现一些完全没有必要浪费时间的事情,在以后的任务中应该尽量避免,在经历了一次个人作业的磨砺中,明白了项目开始的越早,越可以把控全局,在当时自己没有领悟到这个精髓,导致自己在工作时很慌乱,脑海总会冒出完不成的想法影响工作的进程,然后熬了三天夜,才勉强完成,自然比不上一开始就进行项目的同学代码质量,在这次结对的作业中,我们一开始就对作业进行了分析,当时是没有UI 的要求,我们讨论的是Core的内容,从基础的需求分析到代码构建,我们可以说是做了大部分,当分组出来时,我们是UI组,之前的讨论并不是一无所用,而是给了我们在设计用户图形界面的时候提供了一个框架与模板,之后便是最基本的工作,所以越早开始越能把控全局。

       对于我们,一个好的开发流程是能够起到至关重要的作用,这好比自己的经历,遇到了第一次的个人项目,完全没有一个流程,就是遇到啥就解决啥,就出现了以前解决问题的方法导致了现在问题的复杂化,这个困难的增长是几何增长的,没有一个好流程就会对工作造成很多无法预知的困难与不知如何下手的尴尬局面,但是在这次结对中我们体会到了拥有一个开发流程的便捷,从初步的构型,到实际的设计,每一步我们都有很明确的方向,不会在寻找出口的问题上浪费时间,正如小伙伴在进行页面的设计时,我可以进行界面功能的构思与探索,这个可以很好的提高我们之间的工作效率

       每一次的作业都对于我们来说都是意义非凡的,这其中包括了知识的积累,眼界的开阔,思维的重构等,收获的不仅仅是最终的结果,更是开发的过程。

十一、看法与意见

对于本课的看法:

      有效的将同学们从书本中拽了出来,让我们体验了在战场上的惊险与刺激,俗话说的好“实践出真知”,只有在一次次的真枪真刀的战斗中,一个程序员才能够得到正真的成长,而在这堂课中老师充分的模拟了未来在工作岗位上我们会遇到的问题,例如在规定的时间内交付给用户完整并可使用的原型,还有就是在工作中需要在一个团队中共同工作的情况等,这个课不单单的是在教我们如何编程,而是在教我们如何成为一个公司或者实验室真正需要的程序员,老师经常强调我们已经不是代码层次,而是软件开发层次,这是一个质的飞跃,同样是对我们的一次烈火考验。

对于本课的意见:

      可以多进行一些“干货”的讲解,对于未来有帮助的工具进行一些大致的介绍。

十二、工作时刻

 

   

 

 

以上是关于结对作业项目报告——四则运算UI设计的主要内容,如果未能解决你的问题,请参考以下文章

现代软件工程结对编程 —— 四则运算UI

结对编程项目作业2-结对编项目设计文档

结对编程项目作业2-结对编项目设计文档

实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告

作业四: 结对编程项目---四则运算

软件工程结对作业 四则运算界面设计