结对编程:带UI的小初高数学学习软件
前言:
本次结对编程项目为:带UI的小初高数学学习软件。此次项目由我和肖颖珂同学共同完成,在之前的个人项目中,由于我们两人都是用C++实现的,因此此次结对编程我们仍然用C++,利用Qt实现UI,同时,复用个人项目中的部分代码。
一、分析并确定项目所需界面
经过我和肖同学共同商量讨论后,基于项目的功能实现要求,确定了界面的大致设计。
最终实现的界面如下图所示:
1、注册和登录界面:

2、注册时设置密码界面:
3、难度选择界面:

4、修改密码界面:

5、题目界面:
(图示为小学题目界面,初中、高中题目界面类似)

6、分数界面:

二、主要源码列表及说明

1、main文件是主函数入口。
2、mainwindow文件实现注册与登录界面的设计:输入手机号点击注册,输入验证码点击确定即可跳转到设置密码界面;输入手机号和密码点击登录即可跳转到难度选择界面;点击退出则退出软件。
3、choose文件实现难度选择界面:输入题目数量点击小学或初中或高中即可跳转到相应难度题目界面;点击退出即可回到注册与登录界面;点击修改密码即跳转到修改密码界面。
4、set_password文件实现登录状态下修改密码界面的设计。
5、register_pwd文件实现注册时设置密码界面的设计。
6、primary_paper、middle_paper、senior_paper这三个文件分别实现小初高题目界面的设计。
7、score文件实现得分界面的设计。
三、项目实现过程及总结如何复用个人项目
我和队友都是第一次使用Qt,国庆期间队友因为必要的原因离校了,所以在本次项目的过程中我们一直使用线上会议的方式进行项目的讨论与交流,这种方式有个很大的好处是在发现问题时能够及时沟通解决,实现了共同学习与进步。
1、注册功能
我们使用互亿无线实现验证码短信的发送,互亿无线官网提供了demo程序,但是是linux版本的,通过查找资料发现linux和windows都是用socket来实现短信发送,于是我们将demo程序改为windows版本的,成功实现了验证码短信发送功能。这部分没有复用个人项目代码。
2、界面跳转功能
本次项目中多处地方需要跳转界面,我们使用Qt的信号-槽机制实现界面的跳转,connect函数设置接收到某个信号后执行相应的槽函数。
3、出题功能
这里我们复用了个人项目中出题的代码,个人项目中的要求是同一个账号下的试卷题目不能重复,一张卷子的题目都保存到一个文件中;而结对编程是要设置一张卷子不能出现重复题目,并且是提交一题后才能显示下一题,最后一题提交后显示分数。
实现方法:在接收到用户输入的题目数量后,使用while循环,复用个人代码生成题目,同时计算该题目的答案,并将每一道题的题目和答案对应保存到problem数组和result数组中,这也方便了题目的查重功能的实现。一开始先让界面显示第一题和它的四个选项,并把其他的题目和答案的显示设置在槽函数里,用户选择答案并点击提交即可执行槽函数,便可以实现提交后界面显示下一题的功能。关于计分功能,我们在槽函数里设置了若是选择正确则将计数器加一,最后一题提交后便将计数器值除以题目数量即可得到分数。
4、对于数据的非法输入,我们简单地设置:若输入非法数据,则在按功能键后输入框自动清空。这里要特别感谢队友的细心,考虑到了许多我没有想到的非法数据输入的情况,也避免程序出现异常而停止运行的情况。
四、项目实现的不足之处及改进方法
1、在初中和高中的计算答案部分,选项答案无法精确到小数,如计算中出现小数,则正确答案为向下取整。我暂未想到可实现的改进方法。
2、程序关闭后所有用户信息将重置,如需再次使用需重新注册。我认为此问题的改进方法是把所有用户信息存到一个数据库中。
五、总结结对编程的经验和教训
1、此次结对编程我们首次接触到了Qt,一边学习Qt的使用一边完成项目,发现Qt和C++还是有些不同的,例如:字符串类型在C++里是string,而在Qt里是QString,两者可用相应函数进行相互转换。
2、两人一起完成一个项目,感觉到效率明显提高,主要表现在遇到问题时可以相互讨论解决办法,或许换一个思路就发现问题变简单了,因为每个人看待同一问题的想法不总是一致的,这时有个队友在旁边或许能找到更好的解决办法。
3、此次结对编程我学到了做这种项目,最好一开始先把整体框架结构设计出来,之后再慢慢补充细节,不能想到什么就做什么。在用户信息那部分就是因为没有仔细考虑到程序关闭后所有用户信息将重置的问题,这是个教训。
浙公网安备 33010602011771号