结对编程-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

原文地址:https://www.cnblogs.com/creddit/p/11600194.html

时间: 2024-07-30 06:27:04

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

结对编程 --- 分析搭档个人项目代码

优缺点分析 一. 个人项目需求 命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学.初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题.每

结对编程队友的个人项目代码分析

他的代码是用java在eclipse中编写的,基本实现了老师所要求的功能先说一下优点,优点就是代码精简,一百三十行完成,与我自己的代码相比,尤其是在生成题目的函数上,无疑更加精简并且算法巧妙,其函数只用一个n作为参数用来调控三种不同难度的题目转换,但精简的部分缺点就是生成题目方式比较单一,比如在括号的应用上,无法生成对整个括号进行乘方开方的题目.综合来说其整篇代码都是这种高效的风格,其中思路让我这种脑子不好且水平不高的人有所受益,但他的代码缺点也很明显,写代码的习惯有些差,比较杂乱且没有注释,通

20172327 结对编程项目-四则运算 第二周 阶段总结

20172327 结对编程项目-四则运算 第二周 阶段总结 结对编程项目-四则运算 第二周 输出阶段总结博客 结对对象: 学号:20172317 姓名:蒋子行 伙伴第二周博客地址: 学号:20172320 姓名:李闻洲 伙伴第二周博客地址: 担任角色: 驾驶员:蒋子行 副驾驶:李闻洲 马瑞蕃 小组结对编程的photo: 项目中自己负责的部分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我和李闻洲就是打杂的. 个人贡献度划分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我就是打杂的,提点建议和

结对编程学习-对梁同学的代码分析评价

本篇博文主要是对我的结对编程伙伴梁同学的代码进行分析,分析别人的代码对我来说是一种挑战,但在分析与总结中或许能找到逐渐变强的关键. 从main函数开始,着实震惊到了我,一个无限循环,一个初始化函数,最后输出一个字符串.三行便结束了main函数.由此观之,梁同学的代码模块化做得很好. 再看初始化函数,发现他将用户名与密码都用数组存储了起来,管理相对方便,有了些数据库的感觉,判断能否登陆的逻辑很清晰,字符提示也很到位. 然后是一个选择函数.这是我很看好的一个函数,通过这个函数将几种可能或者说分支都提

关于结对编程的一些问题

前言 最近由于公司项目,有机会尝试结对编程(pair programming),实践了3个月,也有了自己的一些心得体会,本文以Martin.Fowler的<结对编程模糊概念>来展开叙述. 1. 实践敏捷过程一定要“结对”吗? This is utterly false. 'Agile' is a very broad term defined only in terms of values and principles, most notably in the Manifesto for Ag

结对编程(三)

项目要求: 构造程序,分别是: 不能触发Fault. 触发Fault,但是不能触发Error. 触发Error,但是不能产生Failure. 结对对象:黄蓉蓉  学号:2013110417  博客地址:http://www.cnblogs.com/hrrpcy/ 双方贡献比例:1:1 结对编程照片: 分析:代码19行的for循环的控制条件i > 0这里应该是i>=0,否则将不会访问下标为0的元素; 1.不会触发fault的测试用例: str = null; 2.触发了fault但是没有触发er

结对编程作

结对编程(黄金点小游戏) 领航员:宋栿尧       驾驶员:罗松 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值.提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分.玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动. 现在请大家根据这个游戏规则,编一个可以多人一起玩的小游戏

结对编程 学习手记ver1.1

????团队成员: 226 高雅智 164刘浩然: 一 结对编程 辛辛苦苦搞了好久的时间,就是没有人家的快,明明算法都差不多,哎~~~ 结对的优势,在于双方互相督促,对于代码能贡献自己的能力,人多力量大,优缺点互补吧. 结对的劣势,在有些时候双方的进度不是很统一,而沟通上又出现了很大问题,导致一度我帮不上忙(不知道帮那里T0T),高哥执行力又强,想到啥就写啥,苦苦追了两三天啊,才拉齐进度.在此我要强调沟通的问题,这个事效率提升的最大问题,人和人间想法经常差的很多. ? 二 团队成员简评: 高雅智

第二次结对编程—四则运算自动生成程序

一.题目要求 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户设置最大数(如十以内.百以内等) 用户选择是否有括号.是否有小数 用户选择输出方式(如输出到文件.打印机等) 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主) 二.任务分配 驾驶员:王旭 领航员:张昊辰 驾驶员负责写代码,浏览文件,还有基础实现方法. 领航员则着眼更长远的考虑并且检查错误.进行代码测试和检查错误. 三.