结对编程项目中第一个任务是要分析搭档的个人项目代码,我是乔美萱,以下是我对我的搭档路宁的代码的思考和感想:
一、 项目需求
为了方便读者看懂代码,这里介绍一下个人项目的主要内容:
1、 判定输入的账号和密码是否为附表里的合法用户,若不是,则重新输入;若是,则显示登录状态;
2、 输入出题个数,并判定是否在合理范围内,并根据附表中的学历信息来决定题目内容,
并且此时可切换用户的学历信息;
3、 小学题目包含加减乘除,初中题目还包含根号和开平方,
高中题目则包含三角函数,将出的题目输出到txt文件,命名为当前的时间。
二、优缺点评价:
1、 缺点方面:
⑴ 我搭档项目的源代码一共500多行,可以从行数上看出代码写得过于繁杂和庞大,
而且我在阅读的过程中也看到了很多重复的代码,没有对其进行抽象化,这样写出来的代码容易出bug;
⑵ 代码运行时间达到10s以上,没有选择更加简洁效率更高的算法,如果数据量再庞大一点很有可能会运行不出来;
⑶ 代码是用C++写的,但是其中用到的都是最基本的字符串和数组等等,可以尝试用一下高级点的自带函数和数据结构;
2、 优点方面:
⑴ 将项目的各种功能模块化,函数模块之间逻辑关系清晰,没有多余且无用的参数,整体的代码框架一目了然;
⑵ 对题目的理解很到位,各项功能的实现较完备,生成的数学公式没有什么明显问题;
⑶ 代码语句书写规范,命名清楚,增强可读性,减少他人读代码时理解上的困难,提示清晰,交互体验良好;
三、代码具体分析
1. 用户登录创建文件夹
(1)使用c++中采用system函数创建文件夹;该函数是调用DOS命令来创建文件夹和删除文件、文件夹;
(2)通过流对文件进行操作,应先建立文件流对象fout ;fout是输出文件流对象。
其中使用ios::app确保wrong文件不会被覆盖;同时创建wrong文档用储存生成的公式;
2. 用户创建文件
(1)使用C++中流的使用,建立文件流对象out;
(2)使用strftime()函数将时间格式化为我们想要的格式,然后作为文档的名称来创建文档;
(3)保证每次生成的题目与该老师已经生成试卷的题目不相同;利用流进行文档内容的输入和输出,getline进行文档读入;
3. 试卷中题目生成
题目对映相应的年级要求;在确保不会重复的情况下,生成一定数量的数学题,并且在初高中要加入对应的操作符;
四、总结感想
这次个人项目给了我非常大的启发,虽然已经提交了工程,但是未完成的工作还有很多。在这几天阅读其他同学的代码中,
我发现了自身有许多的不足之处,比如插入括号的算法,有些同学用了二叉树的思想,也有些同学是用Java的面向对象的
方法完成的,这些都是很值得我吸取经验的地方。我也会在过几天提交完结对项目工程后找时间来写一篇自己的个人项目的
思路和总结,并分享我的改进之处。有比较才能进步,希望之后也有更多这样的机会来让我们多学习交流。