结对编程项目在欢快的国庆假期中也顺利结束了。从最初拿到结对编程项目的思考,再到一步一步实现,中间经历了一个漫长的过程。在我和队友的多次协商下,最终我们还是选择使用基于python来实现这一次结对编程项目,并且最终选择了以eric6 + pyqt5 +Anaconda3以及pycharm混搭的开发环境来实现了此次带UI的中小学生题目生成系统。
设计实现:
关于此次结对项目,我和队友总结了一下,主要分为两个方面,UI加上后台的实现,我们也进行了明确的分工,我去实现UI界面,队友实现后台系统,后期再根据我每个页面提供给队友的接口,把UI和后台实现进行整合。在实现的过程中,我们也遇到了很多困难,然后我们也对此分别进行了总结。
UI的实现:
起初最开始拿到结对编程项目的需求的时候,先是冷静分析了一波,UI的实现具体需要哪些页面,页面与页面之间的关系是什么,怎么去实现页面之间的相互跳转。起初分析完后,最开始是用的python自带的tkinter模块进行每一个界面的设计,但当设计第一个界面的时候,便出现了问题,关于label控件在背景图片上的显示问题,尝试了很多方法,画布,背景图片和label控件的组合方法或者分开来按照顺序贴图,但是设计出来都达不到自己预期所想要的效果。最终还是放弃了tkinter,选择了功能更为强大的pyqt5,加上以前学习UI所搭建好的eric6和Anconda3,最终实现了所想要的效果。
后台的实现:
因为队友最初的个人项目是用C++来写的,但是我们决定整个项目基于python来实现之后,队友还是选择了重新把C++代码改成了python代码,并且在以前所遇到的出题的出现的问题上进行了优化,还多加实现了项目所需要的其他功能,比如题目的计算,短信验证,统计成绩等等。尤其是在对题目进行计算的时候我们遇到了些许困难,队友最开始的时候想的是使用队列这一结构对题目答案进行计算,先只考虑小学的情况,用一个队列来保存算式里面的运算数,用另一个队列来保存算式里的运算符,定义括号长度从2开始递增,然后先对算式进行遍历,将括号长度为2包含的两个操作数放入到队列1里,然后将其中的运算符放入队列2里,依次类推,最终将所有运算数和操作符全部放完,再每次从队列1中取出两个元素,并从队列2中取出一个操作符,然后进行计算,将得到的值重新放入到队列1的队尾,一直循环,直到队列2为空,队列1里所得到的数值便是最后的计算结果。对于初中生和高中生来说,只需要先将加入的某数的平方开方或者三角函数替换为具体数值,再复用小学计算的方法便能实现。但最后还是有点小bug,最终我们根据查找资料,然后运用的python里面的自带的eval()函数进行计算,最终能算出具体的数值。
组合的实现:
在进行UI开发的时候,采用的思想是页面与逻辑的分离,每一个UI都有一个UI界面的py文件和一个具体控件逻辑行为实现的py文件,而控件逻辑行为实现的文件,恰好为我们后台代码与UI界面的结合提供了一个很好的接口,我们只需要将我们后台具体实现的某个页面所需要的代码糅合进槽函数中,便能实现后台与UI界面的完美融合。
成果展示:
结对编程的经验教训: