结对编程项目: 带 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, 维护也更加容易.
来源: https://www.cnblogs.com/plllll/p/11600962.html