结对编程博客

一、前期准备

本次结对编程项目,我的合作伙伴是窦越群。因为用java能更轻松地实现GUI,而我的个人项目用的是c++,所以我们决定用窦哥的源码。所以我们的分工确定为:我实现GUI界面,实现登录、注册、界面跳转等前端功能;窦越群实现题目生成、计算答案及选项的生成。

还是保持着原先的习惯,在开始具体编程之前,先仔细分析项目需求。

首先,根据《结对编程项目需求》,我模拟了程序的总体流程,并根据流程,用PPT简单绘制了10个程序运行过程中需要的界面:从登录、注册到最后的成绩显示。由此得到总体框架。

 和窦越群的结对编程_用户信息

 

 

在思考GUI界面的同时,我也整合了项目编写过程中可能会遇到的困难:

  1. 如何实现界面的跳转。是关闭当前界面并新开启一个,还是清空当前界面内的组件再加入新的。
  2. 如何实现通过程序发送验证码。
  3. 如何实现用户的注册和登录。如何记录用户信息。

有了这些思考后,我并不着急解决它们,而是计划先将所有界面实现,形成整体逻辑框架,再实现具体功能。

二、编写GUI

虽然以前自学过java的GUI设计,但那时候并没有完全掌握,加上过了一个暑假,基本等于从零开始。国庆的7天时间不回家,正好可以好好学习一波。

我在网上找了GUI设计的案例,根据案例的格式进行修改,完善我所需要的细节设计,由此完成了界面的设计。其实这一步并不困难,只是需要时间对细节进行调试(包括所有组件的位置、大小)。

下一步就需要将这些界面串连起来,形成完整的逻辑。我的逻辑如下:

  1. 登录界面:

l  “注册”按键->注册界面

l  “登录”按键->年级选择界面

  1. 注册界面:

l  “获取验证码”按键->发送验证码(暂时不考虑)

l  “立即注册”按键->设置密码界面

  1. 设置密码界面:

l  “确定”->年级选择界面

  1. 年级选择界面:

l  “修改密码”->修改密码界面

l  “小学”->小学界面

l  “初中”->初中界面

l  “高中”->高中界面

  1. 修改密码界面:

l  “确认修改”->年级选择界面

  1. 小学界面:

l  “选择年级”->年级选择界面

l  “开始做题!”->做题界面

  1. 初中界面:与小学界面类似
  2. 高中界面:与小学界面类似
  3. 做题界面:

l  “上一题”->上一题界面

l  “下一题”(除去最后一题)->下一题界面

l  “提交”(最后一题才有)->考试结束界面

10.考试结束界面:

l  “继续做题”->年级选择界面

l  “退出”->登录界面

根据这样的逻辑,为按键添加事件监听,每当按键被按下时,实现相应的逻辑事件。

得到逻辑后,完善其余功能。在登录、注册、设置密码和修改密码界面中,通过对文件的打开、读取、写入及关闭,实现用户信息的存储与修改。

三、代码整合

在一、中提到过我和窦哥的分工,那么现在就是我们两个整合代码的时候了。因为题目、答案和选项的生成是窦哥实现的,所以由他实现具体的题目、答案字符串。

而我将字符串在相应的界面显示出来,并加入选项按键,设置为单选,显示相应的选项内容,在按下按键的事件发生时执行具体功能。在最后的考试结束界面计算分数并呈现出来。

然后,由窦哥实现验证码的获取与发送。

这时,整个项目的功能已经实现了。接下来就是测试环节。

我和窦哥尝试了不同的电话号码进行注册和登录,查看存储用户信息的txt文件,发现能够正确存储、修改和读取用户信息。我们多次生成小初高的题目并提交(为了节省时间和精力,我们用的计算器辅助计算),测试题目生成和分数计算是否正确。

最后我们修改了测试时遇到的bug,得到了最终版本的题目自动生成程序。至此,项目结束。

四、总结

完成本次项目,还是给了我很大的成就感。之前用c++编写个人项目,纯粹是因为对自己的java没有自信,遇到大的项目只敢拿出大一学的c++。这一次算是不得不用java,虽然过程比较坎坷,但最后的结果令我非常满意,由此获得了自信。下次遇到大型工程,我不会再拘泥于c++,而是会根据工程所需,选择最适合的开发语言。

编程过程中,我遇到了很多问题,而几乎全部都能通过网络资源得以解决。而有一些难度不大,只是难以描述的问题,通过和窦哥的交流也可以很好地解决。所以说,遇到问题不可怕,世上无难事,只怕有心人。

最后,我觉得结对的形式是非常能够激励我的。我找的是窦哥大神,这更让我觉得,如果自己不早一点出一份力,所有的活窦哥全都会做完。所以这7天假期我全拿来学习了,过得很充实。和窦哥的结对编程让我积累了学习的经验,学习效率得以提升。