结对编程——中小学数学卷子自动生成程序分析

个人项目:中小学数学卷子自动生成程序
用户:
小学、初中和高中数学老师。
功能:
1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;
2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

小学

张三1

123

 

张三2

123

 

张三3

123

 

初中

李四1

123

 

李四2

123

 

李四3

123

 

高中

王五1

123

 

王五2

123

 

王五3

123

 
 

小学

初中

高中

 

难度要求

+,-,*./

平方,开根号

sin,cos,tan

 

备注

只能有+,-,*./()

题目中至少有一个平方或开根号的运算符

题目中至少有一个sin,costan的运算符

 

下面对队友的代码进行简要分析:

1.代码模块结构清晰,层次明显。

队友把整个工程分为几个模块,大致是用户登录(其中确定试卷类型),获取操作数值,获取随机操作,获取操作符,生成单个问题表达式,生成试卷,切换试卷类型等等。这些都基本吻合“高内聚,低耦合”。结构逻辑非常清晰,通俗易懂。

2.部分设计构思巧妙,让人眼前一亮。

登录函数部分,队友选择使用从txt文件导入教师信息进行登录,我认为这是一个十分不错的想法。这样设计更符合用户需求,能够灵活的增删用户数量。而使用嵌套的if语句则只能供特定的几个用户使用,虽达到了老师所给的要求,却没什么实用性。

3.代码性能好,效率比较高。

在仔细品味队友代码的过程中,一些小细节让我感触很深。队友的整体代码只有二百行出头,主体功能实现部分十分简洁,对各种随机组成的式子做出了归纳条件并总结起来,使用rand函数来进行随机操作,更加方便简洁。

 4.注释详尽,益于读者理解

队友在各个代码块都有进行注释,这是一个良好的习惯。对于读者来说,注释能让人快速准确的理解作者所要表达的意思。对于作者,注释也能让自己的逻辑更加清晰。

 

5.随机操作符的设计

队友对于产生随机操作符的思路是:使用rand函数并对操作符的总个数来求余,然后根据余数来判断到底是哪一个操作符,彻底贯彻随机的概念。

总体而言

队友的代码比较简练高效,在部分功能实现时,考虑了现实性问题,具有更好的交互性,用户使用时,每一步都有详细的提示。实现的功能具有很好的实用性。实在要挑一点小问题的话就是在定义类时,选用词汇能更贴近其作用可以使代码更简明易懂。希望我们在接下来的项目中扬长避短,写出更好的代码。

 

导航