结对编程项目总结
结对编程项目:带UI的小初高数学学习软件
用户:
小学、初中和高中学生。
本次结对编程的功能要求是:
1、 实现登录和注册,使用手机短信验证
2、 用户在登录状态下可以修改密码
3、 用户通过选择题目类型(小学、初中、高中)和题目的数量来生成试卷。
4、 试题不能重复出现
5、 试卷做完后需要显示最终得分
6、 用户在分数界面可以选择退出或者继续做题
我们实现了上述需求,并增加了:
1、 注册时判断账户是否已存在,存在则询问是否忘记密码,通过手机短信重置密码
2、 获取验证码的按钮设置了连续按下间隔180秒…
3、 做题时,每个题目都有一个按钮与之对应,可以通过各个按钮跳转到对应题目。
4、 交卷时,如果题目没做完所有题目直接提交会有提示。
5、 题目做完后,显示分数和做对、做错、没做的题号,可以查看自己哪里做错了。
UI的设计:
最初我们模仿百度的登录界面、学校机考的做题界面做。两个人分别做两个界面,发现模块太多,java swing也用的不熟练,然后两个人做的风格不统一。最终选择了一个MAC风格的java swing主题。
逻辑
整个项目的设计是基于上次的个人项目做的。很多功能(比如注册登录、修改密码、产生题目、账号信息和题库信息的读取)都是可以直接拿来用的。因为之前的项目是用的JAVA写的,这次也就直接用JAVA来写GUI。
一开始的界面是登录界面,登录界面有注册和忘记密码两个按钮,用户可以通过这两个按钮进入 注册\重置密码 界面。
注册的短信服务我使用的阿里云的短信服务,直接调用他们的API即可
在注册界面我对获取验证码设置了180s的连按间隔,思路借鉴各大平台的注册系统。
注册时判断账户是否存在
在忘记密码和修改密码时,我复用了RESET_PASS 函数和修改密码的界面,它们除了title几乎是一模一样的功能。
表达式求值
运用了逆波兰表达式的算法,参考了网上大牛的源码,写了一个求表达式的函数。
做题界面
最重要的做题界面,我们先从题库中取出对应数量对应难度的题目,放在一个ArrayList中,对每一个题目都求出它的正确答案。
我们设计了一个Option的数据结构,它保存每个题目的四个选项,用户选择的选项和题目的正确选项。
然后遍历ArrayList,利用rand生成所有题目的三个错误选项,并随机的分配答案对应的选项,记录正确答案的选项是哪一个。
在用户按下ABCD四个按钮进行选择时,我们将属性user_choose设成对应的值,在用户提交试卷(提示试卷未完成)后,生成对应的分数,并将做错的题目和没做的题目标记出来。
经验教训:
我们在之前的项目中,大部分逻辑处理的函数都是可以直接拿过来使用的,这样可以少写很多代码。在GUI的开发中,前人已经给我们留下了模板,我们只用修改这些控件的一些属性,以及完成我们的监听函数即可。在界面实现时,别人的界面是很有参考价值的,我们完成这个结对编程的过程中,参考了百度、腾讯、哔哩哔哩等注册登录的界面,参考了学校高数机考、马原机考、以及科目一科目四的做题界面,最终融合成了我们自己的风格。
在代码的实现中,选择合适的数据结构是很重要的,选择合适的数据结构能让代码逻辑更加清晰、代码不容易出bug、维护也更加容易。