一:需求

 以下所有功能用图形化界面显示:  

1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;  
2、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;  
3、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;  
4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;  
5、最后一题提交后,界面显示分数,分数根据答对的百分比计算;  
6、用户在分数界面可选择退出或继续做题;  
7、小初高数学题目要求见个人项目。

二:个人项目复用

      在个人编程项目中我和队友使用的语言都是 C++,一开始我们有点纠结是使用 C++继续 完成结对编程呢,还是重新用 JAVA 去实现。由于之前在 java 课上我们了解过一些 JAVA 的 GUI 编程的知识,所以商量过后我们一致的认为用 JAVA 去实现会更好。 在结对编程项目中只是用到了个人项目中出题的那一部分代码,所以我们也只需将那一 部分需要的代码语言转换为 JAVA 就行。但是在结对编程项目中是不需要将题目输出到文件 夹,而是要将其显示到屏幕上,所以还要对之前的出题代码逻辑进行一些小小的调整,但是 整体上还是很好的复用了出题那一部分的代码。 

三:过程回顾

1、因为确定的是使用JAVA的GUI编程所以我们选择完成的是桌面应用。在短信验证码方面我们利用的是榛子云平台,刚好其原本的实现语言与我们编程语言一致,所以榛子云平台使用起来很方便,没有过多的流程。
2、对于图形化界面的实现,一开始我和队友都是一头雾水,虽然之前学过一些GUI编程的内容,但是真正要去实现的时候还是很困难。但是困难总会有解决的办法,我们就根据需求一步步来,需求上需要实现什么,我们就去学习那一步部分的知识,边学边做。比如说需求上要求用手机号注册加短信码验证,那我们就先实现一个登录界面出来,刚开始的时候对于Swing组件的使用非常不熟练,在写的过程中也出现了很多的错误,实现不出来的时候也很崩溃,就这样在一步步的学习与试错中成功的显示了第一个登录界面。当一个界面实现成功后,后面的界面只需在之前的模板上稍作改动就行。
3、在图形化界面上与用户的交互那部分出了很多bug。用JAVA编程,自己得很清楚JAVA程序在运行时候的先后顺序,比如说生成一个类的对象,JAVA程序在实际运行时先回去加载程序中静态资源,再去类加载,类加载时先去访问类构造函数,构造函数完成后再去访问类的属性等,所以在没有搞清这些顺序的时候写代码很容易出bug,好在最后都一一解决了。

四、经验教训与总结

1、在结对编程中对于个人项目代码语言的改写其实是一件本不必要的事,如果在个人编程的时候我们就有考虑到,这个项目后续继续开发为图形化界面显示,那么一开是就可以用JAVA去实现,这样在结对编程中不用再费时间精力去改写,好在改写的代码量不大,但这也算是给了我们一个教训。
2、对于自己不会的东西不要畏惧。一开始我和队友其实有点焦虑,感觉结对编程很有难度,我们啥也不会,但是当你真正静下心来去学习去做的时候,我们发现这件事儿好像也没有我们想象的那么难。都说万事开头难,只要你开了头,那么接下来的事情都会顺理成章的。回顾项目的整个过程,其实也不是那么容易,但好在我们沉下心,从一开始的啥也不会,到后来的慢慢走上正轨,再到后来的项目完成,当最后项目写完时,我和队友总觉得有点不真实,就好像一下子轻松了不少。
3、这个项目最后的完成效果其实也有一些不足——每一个界面弹出来后前一个界面都需要手动关闭,我也去找了有关方面的资料,也试着去实现了,但是这个问题最后还是没有实现,虽然实现了需求文档上所有的功能,但总觉得这里不是很方便。
4、这次的结对编程的过程其实给了我很大信心与动力,从中意识到——没有什么事情是一开始都会的,我们都是从一个不断学习的过程中收获与成长,主要是有敢于克服困难的勇气,不管是什么需求,只要自己静下心投入总会慢慢实现的。