一、简介

本篇博客主要介绍结对项目的基本实现,以及总结如何复用个人项目实现结对编程项目,以及结对编程的经验、教训。
分工:
登录注册:郭琪
选择做题:李世健
前端界面由Tkinter到PyQt5的更换设计:郭琪

二、复用个人项目实现结对编程项目

1. 个人项目与结对编程项目的对比:

个人项目中我们实现的主要要求有登录系统给出相应的提示,生成题目、更改试卷类型以及退出系统等。结对编程项目也涵盖了个人项目中的这些功能,只是在此基础上用UI界面显示出来。除此之外结对项目多了用户注册、短信验证、做题以及分数总结的等功能,而这些功能是完全可以建立在个人项目之上的。且除去UI框架,总体分为两个类:用户类与系统类。系统都要能够为用户生成试卷,而且教师类与学生类具有相似之处,比如他们具有相同的属性:用户名、密码、类型(小学、初中以及高中),以及相似的行为:登录、题目生成等。

2.复用个人项目实现结对编程项目部分功能:

因此,在结对编程项目中,我们对于用户类(学生)的成员属性及成员函数的定义都沿用了个人项目中的,对于系统类生成试卷这一功能,我们也是在个人项目的做题模块中稍作修改便是

三、项目总体分块及实现

1.项目分块

用户登录:
1)功能:输入用户名、密码并进行验证
2)要求:密码6-10位,必须含大小写字母和数字,用户在登录状态下可修改密码,修改密码时需要输入原密码以及两次相同的新密码
3)实现:针对新增要求,编写相应的函数
用户注册:
1)这是结对编程项目中的新增功能,个人项目中没有,新增注册时只要在保存用户信息对应的文件中存储新增的用户信息即可。
2)实现:
① 短信发送选用榛子云平台,先在本地生成验证码,通过榛子云平台发送到用户的手机上,用户根据收到的短信验证码进行验证注册。
② 保存用户信息:采用pickle库实现文件的写入输出。
题目生成及做题
1)要求:根据输入的题目数量生成题目以及答案,在UI界面将题干、正确答案和三个错误答案显示出来,且题目不能重复
2)实现:
① 出题方面复用个人项目模块,直接调用相应函数即可
② python中提供eval函数可以计算算术表达式的值,因此只需要将原生成的算术表达式转化为eval可以识别的表达式即可得出题目答案。
③ 选择题实现:得到正确答案以后,生成三个错误答案,随机摆放,以UI的形式给出四个选项,加上题目,即可得到选择题。

2.编程实现

本次项目的编程语言采用的是Python,UI界面的实现采用PyQt5+QSS,短信发送平台:榛子云
用户登录注册System.py文件System类:
结对编程总结_复用
生成题目question_builder.py文件:
结对编程总结_结对编程_02
做题及相应UI界面part2.py文件——ChooseInterface类:
结对编程总结_结对编程_03

四、项目成果概览

登录界面:
结对编程总结_python_04
若是未注册过的账号,则会出现提示:
结对编程总结_复用_05
注册界面:
结对编程总结_复用_06
若手机号已注册过,则会有相应提示:
结对编程总结_个人项目_07
若输入错误的手机号,也会有相应提示
结对编程总结_个人项目_08
手机号验证可用会出现相应提示进入下一步:
结对编程总结_复用_09
设置密码:
结对编程总结_ui界面_10
题目类型选择:
结对编程总结_ui界面_11
输入题目数量:
结对编程总结_个人项目_12
答题界面:
结对编程总结_ui界面_13
若不选择直接提交则会出现提示:
结对编程总结_ui界面_14
分数界面:
结对编程总结_python_15
修改密码:
结对编程总结_结对编程_16
结对编程总结_个人项目_17
结对编程总结_python_18

五、总结
  1. 通过本次结对编程的项目,我学习到了许多。之前我从未接触过过PyQt5和Tkinter,除了一些实验平时也基本不使用python进行项目编程,本次结对项目促进了我用python编程的能力,也让我接触和认识到了PyQt5和Tkinter两种实现图形界面的工具。
  2. 除了所学到的关于python方面的知识,结对编程还促进了我和编程伙伴郭琪同学之间的沟通交流能力,在一开始我们分工比较明确,我负责从选择题目类型往后的部分,郭琪同学负责用户登录、注册以及解题部分,所采用的UI库是tkinter,过程很顺利,两天就基本实现了。
  3. 上面的所描述的顺利马上就迎来了打击,由于我们没有定义好项目需求,一开始只是为了做出一个界面来,所以使用了较为简单的tkinter,但是实现了后我们发现界面过于简陋,观感不是很好,在我和郭琪同学的商议之下,我们决定更换UI框架,改用pyqt5+qss。这是痛苦的开始,我尝试了一个晚上对我所负责的部分进行修改,但是收效甚微,由于第二天我有重要的事不得不去做,而截止日期也快到了,所以基本上框架的修改是由郭琪同学一个人完成的,感谢郭琪同学!!!而我只是做了一点最后的修改以及BUG的修复。惨痛的教训!不管怎么样,本次结对编程还是学到了很多东西,最后,感谢我的搭档郭琪同学!