HNU创新课程结对编程个人项目互评
一、简介
本篇博客为对结对编程搭档陈春蕾同学的个人项目(中小学数学卷子自动生成程序)的评价。该代码使用语言为c++,与我的个人项目语言一致,因此评价过程中也将与本人的代码进行比较,旨在总结反省,共同进步。
二、项目结构
1、Teacher类

1.1 优点
(1)将程序的主体功能都封装到Teacher类中,总体布局比较严密完整;
(2)各项数据成员与功能函数命名都语义清晰,可读性好,辅以注释理解更方便;
1.2 缺点(可优化之处):无
2、登录功能


2.1 优点
(1)if-else语句实现对登录用户用户名和密码的匹配确认,逻辑简单,便于理解。经检验,功能正常;
2.2 缺点(可改进之处)
(1)可复用性不高,当且仅当账户信息不变时使用正常,如需修改账户信息,则代码结构也必须随之发生变化;
3、输入题数,并检查合法性功能


3.1 优点
(1)文字提示内容明确,便于用户使用;
(2)if-else语句判断合法性,可读性强,方法合理;
3.2 缺点(可改进之处):与我的该部分代码实现逻辑相同,未发现可改进之处;
4、依据传入的题数参数生成试卷(由于代码量大,图略)
4.1 实现方法
(1)生成用户文件夹、试卷文件、查重文件;
(2)随机产生操作数数量,根据操作数数量相应出题(操作数数量<=2或>2);
(3)对生成题目查重,不重复则加入试卷文件和查重文件,否则重新出题;
(4)生成试卷后的再选择(切换类型、退出系统、重复当前类型出题);
4.2 优点
(1)结构逻辑性强,注释清晰,可读性好;
(2)生成试卷后的再选择文字提示内容较清楚,且增加了退出系统的选择,人性化;
(3)出题的逻辑根据实际情况划分为两种解决方案(无括号/考虑括号存在),避免了大段代码重复;
4.3 缺点(可改进之处)
(1)没有考虑登录时即需要改变类型的处理情况;
5、根据操作数的不同生成题目(由于代码量大,图略)
5.1 实现方法
(1)根据操作数数量相应出题(操作数数量<=2或>2);
(2)随机数生成操作数和操作符,依次加入;
(3)stringstream输出到目标字符串中;
5.2 优点
(1)实现逻辑较我的代码更加简洁,尤其是括号生成算法,在我的代码中为了追求随机性,且解决思路较为死板,就出现了代码大段冗余的问题;
(2)括号生成实现了我未能完成的括号嵌套情况;
5.3 缺点(可改进之处)
(1)具体生成部分代码缺少注释,可读性较差;
(2)随机生成括号时,有一个括号包裹整个式子的无意义情况,可以加以排除;
(3)不能保证高中题目至少有一个sin、cos或tan,只能保证至少有一个平方、根号、sin、cos或tan,即高中题目可能会有未含三角函数的情况,功能实现不完善;
6、主函数
6.1 优点
(1)主函数简洁,代码量小;
(2)功能清晰;
6.2缺点(可改进之处):与我的代码逻辑相同,未发现可改进之处
三、整体评价
1、优点
(1)总代码量373行,是我代码量的一半,在功能基本实现的基础上,有代码简洁,可重用性高,功能模块划分的优点;
(2)代码结构清晰,注释合理,整体来看可读性好;
(3)括号生成算法除前文提到的一点小缺陷,表现优异。由于我的代码大段篇幅耗费在括号随机生成,且只是简单的穷举法,未考虑括号嵌套情况,陈春蕾同学的算法是非常值得我学习的;
(4)程序中文字提示清晰,对用户友好;
2、缺点(可改进之处)
(1)全部代码都放在一个cpp中,修改编译成本高,模块性差(我的代码也存在该问题,且尚未习得解决的写法);
(2)高中题目生成不能保证至少有一个sin、cos或tan,只能保证至少有一个平方、根号、sin、cos或tan,即高中题目有时会缺少必要元素(三角函数),不满足项目需求,需在操作符生成算法处加以改进;
(3)查重算法采用直接循环遍历,在题目大量出现的情况下,查重效率低,可以思考改进之法(我的代码也存在该问题);
四、总结
第一次尝试结对编程搭档互评代码,体验新奇,同时在过程中发现了陈春蕾同学代码中很多值得我学习的地方,收获颇丰。本次任务的顺利完成让我对接下来的结对编程项目充满信心,倍感期待。

浙公网安备 33010602011771号