## 下面就开始对队友的代码进行简要分析:
经过多次测试不同难度、不同账户、不同环境下的题目,均符合需求,功能完整,有很多出彩的地方,也有一些不足。现陈列如下:
### 优点:
#### 1. 编程模块化,层次明显,,注释详尽
队友把整个工程分为四个模块,第一个模块是UserMaanager,实现了初始化程序所有用户的账户密码等级信息,等级信息和等级代码转换以及返回用户登录状态的登录函数;第二个模块是TestManager,通过等级信息生成不同难度的指定数量算式的试卷,其中算式由基本算式、平方根号以及三角函数创建的子算式递归构成;第三个模块FileManager,实现了获取当前系统时间,从文件读取账号信息,保存试卷试题,读取题库实现查重等文件操作;最后一个模块实现整个逻辑框架,保持程序正常运行。队友在各个函数都有进行注释,这是一个良好的习惯。而且对于任何一个模块的任意函数,队友都尽可能保证了代码不会特别长,尽可能模块封装,因此可读性非常强。
#### 2.代码性能好,效率比较高
队友的代码逻辑框架很好,让人一瞬间就可以理解。在仔细品味队友代码的过程中,一些小细节让我感触很深。比如在用户登录比较账户信息的时候,队友采用了map极大加快了比较速度,虽然本项目预置账户较少,但是在开发中这是一个很重要的技巧。又比如在试卷试题的查重中,队友采用了字符串,然后通过find来查找,这就比一个一个字符的对比更加快捷,而且开发更快。这样的例子还有很多,性能优良,效率很高。
#### 3.设计构思严谨,逻辑清晰
队友在设计交互引导时,切换跳转非常自然,逻辑线很巧妙,对用户使用十分友好,确保能够引导用户使用程序的同时尽可能地满足用户需求。这直接提供了一个好的界面设计思路,为我们的结对编程打下了坚实的基础,代码逻辑线的设计非常具有参考价值。
#### 4.功能实现代码设计充满智慧
第一,我非常钦佩的是,队友通过递归实现子算式——算式可以分成子算式--操作符---子算式的结构,其中最小的子算式为单个操作数或是只有单个操作数运算的操作符算式。这个实现避开了网上的很多方法,比如二叉树实现,逆波兰式等等,从我的角度来说,我觉得队友的思路是最优解。第二,容器的使用极大程度上加快了设计,虽然大多数的设计都可以通过简单的代码叠加实现,但是容器的使用极大加快了开发进度,是一个非常好的思路。第三,队友将账户信息也保存在文件中,便于数据的集中管理,是大型项目采用数据库的一个简单实现形式,值得我学习,账户信息因为如此设计方便集中管理,题库的映射也是如此,可以实现代码外的管理,值得学习!
### 缺点:
#### 1. 用户体验不足,引导逻辑需要更加友善
队友在设计交互引导时,切换跳转只有持续出题和切换类型,逻辑线显示对用户使用可以更加友善,确保能够引导用户使用程序的同时尽可能地满足用户需求。从而更好地实现下一步结对编程UI的设计和实现。
#### 2.类型变量和类型设计的全局变量
队友的代码采用了全局变量,其中的一部分,比如根据编号来确认某账户目前是高中、初中、还是小学的一个函数,实现在用户类,但是数据传输是通过全部变量的,其实可以通过传参来实现,从而更好地实现面向对象编程,然后确保类的封装性变得更好。
#### 3.while循环的设计
队友在主函数里面采用了一个循环,while(cin >> one >> two),这样一个函数,没有给用户提供退出程序的接口,程序只能一直保持运行(等待用户输入)或者是因为异常被操作系统中断,或者是人为强行中断,我觉得应该设计一个程序退出接口。
### 总结:
我自己花了很多的时间实现我的题目生成,所以生成题目的函数有点长,看了队友生成的题目的函数,一是思路很好,比我的开发难度小一些,递归实现;二是代码规范性更好,队友的开发经验很值得我的学习,我要在接下来的过程中好好学习队友的开发习惯;三是每个人都有自己的想法和习惯,每个人也有不同的实践和逻辑,在开发过程中要通力合作,戮力同心,因为我们是一个团队。任重而道远!
posted on
浙公网安备 33010602011771号