结对编程项目实现功能:在个人项目生成小学、初中、高中不同难度题目文件的基础上
1.增加了生成题目答案。
2.加入UI界面实现用户交互注册验证和答题,计算出正确率。
3.运用阿里云的短信服务功能实现发送短信验证码验证的功能。
项目语言和环境:java、eclipse。
项目分工:
陈惠民:实现生成题目文件,以及计算题目答案,实现短信验证码功能。
曹原:负责图形界面设计,以及把各个功能对接起来。
项目效果:
“愉快”的国庆假期——我们的结对编程总结-LMLPHP“愉快”的国庆假期——我们的结对编程总结-LMLPHP“愉快”的国庆假期——我们的结对编程总结-LMLPHP“愉快”的国庆假期——我们的结对编程总结-LMLPHP“愉快”的国庆假期——我们的结对编程总结-LMLPHP“愉快”的国庆假期——我们的结对编程总结-LMLPHP
项目总结:
陈惠民:
1.复用个人项目实现结对项目:在之前的个人项目中还存在许多不足的地方需要比如特殊运算平方和开方的符号表示,以及括号的产生等等,另外还有图形界面的加入,如果使用c++的QT可能会太复杂花去许多时间(教程每集30分钟,共15集),所以我们改变策略把开发语言改成了java,虽然个人项目写的很辛苦也基本实现,但是如果换一种新的语言,借鉴之前的部分重要思路,但是加入自己的改进思路,有能很好地加入图形界面,岂不是更好么。对于结对项目我们主要用到了之前的随机数产生运算符和操作数的方面,其他许多部分都是全新的,比如将平方和开方转变为具体的特殊符号,通过两个函数,一个产生对应难度的操作数,一个随机生成对应难度的操作数(包含比其更低难度的操作数),以此来产生题目,对于括号的生成方面,借鉴了网上的思路,每产生一个操作数,随机产生括号打在当前产生算式两边,再随机将新生成的操作数与当前算式作交换,达到随机产生括号的目的,也不会有个人项目中出现没有意义的括号的情况,看上去更加规范和正确。
然后就是生成题目答案方面,这里就跟个人项目没有太多关系了,通过上网查找得到通过算式的字符串得到具体的题目答案的思路,就是用中缀表达式向量将算式中的操作数以及操作符储存在向量其中,然后就是用后缀表达式向量将中缀表达式转成后缀表达式储存,这样就把所有的括号给去掉了,最后就是通过对应算法将后缀表达式向量表示的算式个计算出来返回一个double的结果。
最后就是我做的短信服务方面,说实话其实不是太难,不走弯路的话不超过30分钟就能完成,但是我做了一个上午加一个下午,其实还是对Java的语言和环境的不够熟悉,不知道怎么操作,在阿里云注册账号,并通过签名和模板的验证,在阿里云的官方网站下载好java的相关压缩文件,解压后在文件夹里面找到两个对应的jar包,再在项目project中build path中将两个jar包加入到library库,这样就成功的加入的阿里云的包,然后百度import需要的库,然后将官网提供的代码复制改变对应的参数,测试即可成功发送短信验证码到对应的手机上,加上图形界面中的判断验证码正误即可。
2.经验:结对编程项目做完了之后说难也不难,但是说不难也是需要花一定功夫的,绝对不是基础一般的同学一己之力能够很好的完成的(尤其在国庆假期),所以一定要合理分配好任务,并且要按照要求在规定的时间内准确的完成好任务,虽然大部分的任务是可以同时进行的,但还是有的任务是不能通是进行的,比如实现不同功能类函数接合的方面,虽然不需要知道函数的实现原理,但是了解每个函数的功能也已经是需要花费许多的时间了,所以在接合代码方面,最好还是两个同学面对面才是最好讲清楚,接合代码效率会更高。
在结对编程中一定要相互帮助,不能说自己做完了自己的部分之后就拍拍屁股走人了,其他的都事不关己了,这样的想法是不对的,项目是两个人共同的东西,只有整个项目完成出色才能体现出每个部分完成出色,所以一定要相互帮助,相互理解,,不能相互埋怨和责备,确实敲了这么久的代码心情也不好,但是一定要克制,理解对方,这样才能完成好共同的项目。
结对编程一定不能说有一个人全做完了,或者说完全没做,这样会导致没做的同学参与感很低,而且会造成许多不必要的误解,要充分信任对方,两个人共同进步才是好的。
遇到无法解决的问题多方面多途径地寻求帮助,你所遇到的问题一定也有其他人遇到过,问同学,百度等都可以,一个人纠结太久不仅花费时间,更是没有必要。
教训:
首先第一个教训肯定是在做项目的时候一定要多思考这个项目有哪些可以发散推进的地方,留一部分余地,实现低耦合,就像这里我们把变成语言和环境给换了,要是项目更加大型一点肯定是会造成许多的麻烦。
在项目最开始的时候一定要把每个部分需要实现的所有功能尽量说清楚,考虑全面,不然到后面写完了再进行修改和添加就会出现不必要的bug,导致怕出错不太想添加了,但是当你实现完了功能之后就不要老是想还有什么功能没有实现了,因为这是考虑不完的。
完成项目的时候一定要注意用类分装好,虽然这样可能会增加许多的调用和测试,但是这样不仅在测试当前类功能方面方便,,而且在接合调用方面也更加简练和容易发现错误并改正。
在出现无法理解的错误,一定不要放过任何一个小细节,比如我的短息服务功能实现方面画了一个上午和下午一直检测不到包,首先被官网上面误导了以为要用到maven打包,做了很多无用功,其次两个文件夹下面都包含这两个需要的同名的jar包,而我恰好就用了另外一个文件夹的,检查了好久才发现,这两个包虽然同名,但文件大小其实还是有差异的,最后才终于成功了。
 
曹原:
 结对项目分析
在结对项目中,我主要负责窗体界面的实现。整体布局上其实比较简单,即通过网格布局初始化生成窗体,每一个窗体都为一个函数(类),窗体的具体内容通过面板实现。面板中添加标签,文本域,密码文本域等组件来填充窗体,将数据采集,获取,处理功能放入按钮的事件监听中,实现界面的切换、题目文件读取、题目文件的生成、分数计算等功能,简单一句话:“一个按钮一个窗,一个界面一功能”。
思路上,窗体实现主要是3大模块:登录注册模块,题目生成模块,答题及分数模块。
登录注册模块:输入手机号——短信验证码接收——验证后登录。在调用了阿里云的验证码文件后,本质上三个窗体大同小异,“接收文本域内容——判定是否输入符合条件——格局判定结果进入不同的窗体”。
题目生成模块:填写题目数量——选择题目难度——点击生成题目。主要原理是监听获取文本域内容以及JRadioButton的选项结果,通过调用题目生成类中的函数生成所需要的文件,同时在此时定义路径进入生成的文件。
答题及分数模块:利用readline()函数按行依次读取文件,读取后调用计算函数得到正确结果,后再生成3个错误答案总计4个答案组成新的按钮组,点击按钮进行后台结果判定以及新题目的读取。最后生成一个分数。
本次项目,我遇到的最大的问题有两个:1)对变量的处理;2)将结对伙伴的运算代码与窗体接好。
1)其实在码代码过程中,界面的大体实现并不是难点,但是对于按钮监听这一功能的理解不够,所以在思路上走了一些弯路,比较大的思路错误包括“没有监听就想获取文本域”(可以运行但当要获取文本域内容时点击按钮报错),“生成题目界面用循环调用按钮监听函数”(直接生成了多个界面,根本不是预期的每按一次按钮界面改变一次)。在理解了按钮监听的原理后,又引发了下一个问题:变量的作用域。因为多模块的结构,很多时候需要在下一个窗体方法(类)中调用上一个方法的数据,但是很明显不可能直接调用。这里要用到的变量我们设定为private权限,做成类的全局变量。同时改为static静态成员。同时涉及到输
入输出时的异常处理上也吃了一些苦头,最后总结了一个颇有些搞笑的口令“要么throw,要么try-catch”。
2)第二个问题也是困扰了我许久。这里我首先要感谢一下我的结对伙伴,他的计算功能实现真的很棒,而且使用多个类去实现功能很方便我的对接。但是,即使如此,因为代码风格的不同我依然在对接时花费了一些时间。大的思路方向上我修改了两次,最后采用了较为合理的一个方法实现了对接。
总的来说,首先这次结对编程一方面让我认识到了自己的不足,尤其是算法方面比较薄弱,仍需要加强练习。同时在代码上可以更加简洁,“高内聚,低耦合”应该作为一个主线始终贯穿我们的程序开发过程。最后,也是最最重要的,一定要对自己,对伙伴充满信心,永远不要质疑自己。只要花费精力和心思,个人的潜力,自主学习能力将迸发出巨大能量来帮助你完成你的目标。不要畏惧困难,所有的困难都是我们必须面对的,要去思考,去查找资料,去询问他人。最后的最后,给自己加油打个气,小组项目加油!
10-08 20:35