结对编程-OR & Creddit对个人项目代码的复用与扩展

项目题目:

 

用户:

小学、初中和高中学生。

功能:

1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;

2、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;

3、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;

4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;

5、最后一题提交后,界面显示分数,分数根据答对的百分比计算;

6、用户在分数界面可选择退出或继续做题;

7、小初高数学题目要求见个人项目。

 

项目需求分析:(结合个人项目后)

l  ui界面开发

l  注册码api的实现或调用

l  能够计算所出题目并给出相关选项。

 

一:设计思路

对于结对编程,比较关键的一点就是配合gui界面设计后的整体项目逻辑。我们可以理解为一个简单的前后端结合的项目。前端负责向用户展示所有的功能,设计。而后端则实现相应逻辑并提供接口,所以在个人项目部分的代码可以有一部分转换为本次后端逻辑,而前端则需要从头开始开发。

 

二:功能实现

 

(1) 前端

本程序的前端并不是我开发的,仅简单介绍:

利用逻辑就是java awt包,以及布局,控件及相应事件监听,比较关键的是调试并寻找较为美观的设计方法。

 

(2)后端

后端主要新增需求与难点为

l  所出题目的计算(重点!)

l  给出相关选项并尽量合理

l  分数的统计

 

下面我们以题目计算这一需求为主来介绍后端逻辑:

 

面对解析数学表达式,我们有一个著名的算法:逆波兰表达式,相关知识大家可以自行百度。该算法的核心思想就是将普通的数学表达式转换为后缀表达式。

对于我们常见的表达式,称为中缀表达式,每个中缀表达式都有相应的后缀表达式。如:

 

中缀表达式:-2*(1+6/3)+4

后缀表达式:-2 1 6 3 / + * 4 +

 

而在解析后缀表达式时,只需要遵守以下原则即可:

 

l  从左往右遍历

l  遇到数字直接放入容器

l  遇到运算符,按单双目将最后数字取出,进行概运算,将结果放入容器

l  遍历结束后容器中的数字即为运算结果

 

因此我们可使用列表和栈这两个数据结构来完成上述设计

 

 

 

如该例所示。

逆波兰表达式相应资料:

https://baike.baidu.com/item/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F/9841727?fr=aladdin

 

得到答案以后,以此答案为基准,利用随机数生成该答案附近的几个数字作为不同选项,而后统计所有题目正确选项的个数,并统计相应成绩(百分比计算,百分制)。

 

三:代码复用与扩展方法

代码的复用与扩展也是我们在设计之初考虑使用OR同学的个人项目版本作为主要参考的原因——java语言。作为面向对象语言,有较好的复用和可扩展性,且前后端设计可以相对分离。

 

那么结合上述实现方法我们来看一下,如何对个人项目的代码进行复用。

 

该图是我们最终的后端逻辑块,其中account,question,login和generator均有来自个人项目的复用。不同的是,在新建了answer类并实例化表达式计算方法后,对于每一个question类的构造方法,均新建answer对象用以求值给新增私有变量result。

 

 

再例如login类,在账户登陆逻辑以及出题规则不变情况下,我们需要的仅仅是加入注册及写入账户文件的逻辑,而不在控制台进行操作。账户account类的成员均可以不做调整。

而新增的类则用于实现新增需求,最终返回相应值给前端进行展示。

所以说,灵活的根据需求变更来继承或复用之前的工程,对于一个有后续发展需求的项目来说是比较友好的,这也是java类继承,多态等功能的设计初衷。

 

四:项目总结

 

本次结对编程在实现难度和项目与现实的联系上都有了较大程度的提高,这也要求我们更加用心的去学,去做。这次结对编程在后端上的主要难点是生成一个算式你要怎么按照数学逻辑将其运算出来,而后更加重要的,我认为也是结对编程中结对的意义所在的是两人的配合。谁做哪一部分,前端后端的接口怎么对接,前端需要后端提供什么,并返回什么。在这样的沟通和结伴开发场景下我们可以撰写软件需求文档,共同统一并完善代码风格。还有一点很重要的事是,保持一定程度的步履一致,才能知道做的每一部分的预计和队友实现的预计是否相符。如果双方无法配合的默契,那么双方的设计有可能在合并时就会出现问题。

 

五:个人收获与感想

 

这次比较大的一个感想就是团队配合的重要性吧,面对更多的工程量较大,需求较多的项目,比如microsoft的著名的windows操作系统,office软件,这些都是很多人乃至一个庞大的团队集数年之力才完成的,那相关的统筹协调就无比重要。本次结对编程双方其实对对方的逻辑都有一定了解(OR同学后端开发逻辑十分熟练,我在个人项目的时候利用pyqt5做了gui),在这样的条件下双方就比较容易沟通。那么在接下来的,更大的挑战—团队项目中,相信我们能做得更加优秀。

 

部分资料引用来源:https://blog.csdn.net/qq_37969433/article/details/81200872

猜你喜欢

转载自www.cnblogs.com/creddit/p/11600194.html
今日推荐