结对编程总结
1.代码复用以及前期准备
考虑到界面的美观性,本来打算使用html进行编程,但是因为两人的个人项目都采用了C++且二人对于网页都不熟悉,因此采用了Qt作为UI设计,以队友的语言作为逻辑语言,我进行UI前端设计以及各种逻辑衔接
2.项目过程
1.国庆前半段时间我两都比较慵懒,到10.5前都是各做各的,我们首先讨论了出题的逻辑,与个人项目不同是本次结对编程涉及到要给出答案以及打分,因此如何得到答案就成了一大问题,针对小学难度的问题,可以很容易的用逆波兰式解决。而初中和高中难度因存在根号以及三角函数,如果不加以处理,会出现无理数,而如果单纯的使用计算机运算的double作为结果,又不利于用户作题,而且在精度保留方面也会存在问题,因此经过讨论,我们得出了简化方法:
(1)对于根号,我们规定根号下必须为平方数,因为操作数限制在100以内,我们首先利用小学生成的随机数字,利用逆波兰式算出结果,再向平方数凑,例如:假如我们根号下随机生成的数为 2*9-4=15,我们为了凑到平方数,会对该式进行处理,凑成例如 2 * 9 -4 +1 =16,这样的数,就可以保证根号下一定会开出整数
(2)对于三角函数,我们采取了较为简单粗暴的方法:打表,因为三角函数不同于其他运算,即使同一数字,不同的操作得到的结果也会不同,例如 Π/6,sin处理就是1/2,cos就是(根号3)/2,显然我们不想要后一种情况,因此我们选取了50个只会计算出有理数的三角函数进行打表,进行题目生成时只需要在这50个式子中随机挑选即可
2.我们遇到的第二个逻辑上的问题是选项的生成,在项目后期进行测试时我们发现,题目的选项可能会出现重复,但重复答案一定不是正确选项,经过排查,我们发现问题是我们在进行生成选项时采用的方法是正确答案+随机数,然而我们没有考虑到随机数可能生成相同的数,之后我们通过改变随机数的范围解决了这一过程。
3.因为是第一次做前端,出现了许许多多的问题,本次项目涉及到多个界面,登录界面,注册界面,修改密码界面,选择难度界面,作答界面以及得分界面。因为没有用到课上学到的东西,根本没有提前写文档,也没有一起商量编程过程,完全就是想到什么就开始做什么,最后项目需要的许多.h以及.ui还有.cpp都非常无序,对debug产生了特别多的不便,有时候写的迷糊了,打开的都是错误的头文件,最后修改很久才发现错误.
3.经验教训总结
1.一定要备份,每次做出比较大的改进时一定要备份.在项目截止前一天,本来想给答题界面加一个显示答案的按钮,方便助教验收,结果加完发现改变了页面的布局,一删更了不得了,出现了信号槽错误,改了改去编译都过不了了,直接Segment Default,想死的心都有了,最后一个一个头文件复制粘贴重新建了一个项目,才把问题解决,,这次涨了经验,以后一定要留备份
2.做带UI的项目时时,尽量新做功能,再搞美观,刚刚说到的悲剧就是加了按钮以后发现改变了原本的布局,变得非常丑,就想着先删了,结果一删就出大问题.正常情况也是这样的,假如你先做好了界面,忽然就加一个或者减一个按钮,对于页面的布局影响是非常大的,所以我个人认为以后如果我再遇到类似的项目情况,会先做完功能,再考虑美观
3.前四天我和队友都是各做各的,一般就是我告诉他我想要什么什么函数,需要什么什么接口,然后他写完再发给我,但是这样效率非常低,因为有时设计到一些全局变量的问题,如果代码注释没有非常完备,是很难短时间内理解的,因此后来一段时间我们一起出去面对面编程,效率高了非常多,而且有一个人看着帮忙编程,可以解决非常多的问题,所谓当局者迷,旁观者清,就如我之前说到的,改错文件了,我想了半天也没想明白哪里出了问题,队友看了一眼就发现改错文件了= =
4.总结

浙公网安备 33010602011771号