此篇博客是对杨同学的个人项目“中小学数学卷子自动生成程序”的代码分析。
完成自己的个人项目之后再来看杨同学的项目,会比较容易看出他人程序与自己程序的不同之处。
优点:
由于感觉自己的程序最不足的地方在于括号的添加,所以首先关注杨同学题目中的括号是怎么生成的。
我的括号是在算式生成的过程中随机添加的,导致只能生成括号内括号,而不能生成两个相互独立的括。
类似下图
而对方的代码是在算式生成之后添加的括号,
如下图
并给算式中的每个数字左右两边分别建了两个数组来记录括号的个数,这样就解决了我没有实现的独立括号问题。
发现几个不足之处:
1、首先程序流程问题。
大体的流程图应该是如图所示的
个人项目需求中要求”登陆后系统提示‘准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):’”,
还要求“在登录状态下,如果用户需要切换类型选项,命令行输入‘切换为XX’,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示‘请输入小学、初中和高中三个选项中的一个’”。
综合上述两个要求,可以分析出要求在用户登录成功的情况下,需要对输入的内容进行三种形式的判断,
符合题目数量要求的数字、"切换为XX"这种字符串式的切换年级指令、退出当前用户指令-1,
输入这三种之中的一种,程序都应该能够进行相应的判断与操作。
但是对方的程序中只能在登录用户之后,输入相应的初始年级题目数量并生成题目之后才能转换年级,而不是在登录状态下的任何时候都能够切换年级、退出用户登录、生成相应的题目数量。
这一方面是程序的流程问题,另一方面对方程序没有一个可以判断三种情况并进行相应操作的函数。
2、第二个不合理的地方我的程序也存在,sin、cos、tan的值不是很合理,sin、cos和tan是生成算式之后随机添加进去的,所以他们的值不是简单的30°、45°、60°之类的简单三角函数值,不利于口算,需要用到计算器。
3、生成题目的存储位置可以更详细一点,分出小学初中高中三个文件夹。这样会方便题目查重过程的工作量,只需查该用户相同年级下的题目即可,不需要该用户全部年级的题目。
总结:
看了对方同学的程序,收获还是比较大的。
1、杨同学的程序可读性非常强,代码模块非常清晰明了,这是我的程序代码所不具备的。
2、因为对方用的是c++语言而不是python语言,看代码的过程中不仅让我复习了基本的c++语法,还学习了一些库函数的使用和新的C++语法,提高了自己写程序的基本能力。
3、同时也提高了自己分析代码的能力。
4、整个结对编程过程其实是对自己代码复查、反思、提高的一个过程,是对他人代码学习、思考、学习并发现问题的一个过程,是对整个项目全面审查的一个过程,使我较为全面地、更加深入地了解了整个项目,能够汲取借鉴对方程序中的优点,添加到自己的程序中,逐渐完善代码的bug,取其精华,去其糟粕。
原文地址:https://www.cnblogs.com/Super-Fan/p/11551329.html