关于《中小学生数学卷子自动生成程序》的解析
0. 项目概述
这个项目是由殷浩翔同学使用Python构建的中小学数学卷子自动生成程序,这个个人项目的构成由4个文件组成,DataProcess.py,GenerateProgram.py,Interface.py,Main.py。
1. 需求分析
面对项目首先应该进行需求分析,总结用户功能需求如下:
l 命令行界面
l 登录界面输入用户和密码并根据已有账户验证正确性
l 工作界面输入数字生成对应数量对应难度的题目,保存到本地目录的文件中;输入切换命令可切换生成题目难度;输入退出命令可退出到登录界面。
用户非功能需求如下:
l 命令行界面对于登录界面和工作界面的操作提示
l 输入用户名和密码用空格隔开,预设九个账户
l 生成题目时默认难度为账户等级;每题1到5个操作数,取值范围为1到100,数字类型可能为浮点数;生成题目合法数量为10到30,且同一用户题目不可重复;题目保存到本地的账号文件夹目录,文件命名格式为“年-月-日-时-分-秒.txt“,需要有题号,每题之间空一行
l 切换难度时只能输入“切换为XX“,XX为小学初中高中三者之一
l 工作界面输入-1可退出到登录界面
这个项目通过不同的文件将分解后的需求进行了归类,通过引用来联系各个功能之间的关系。
2. 项目逻辑
文件部分:
首先DataProcess和GenerateProgram这两个文件是相互引用相互依赖的关系:GenerateProgram给DataProcess提供了处理后生成的数据,之后DataProcess进行文件的写入。同时DataProcess给GenerateProgram提供生成题目前需要的文件里的信息。
之后GenerateProgram与DataProcess一同整合至Interface文件里作为被调用的部分,与界面的代码一同构成程序的核心部分:登陆,登陆后生成题目,不同状态之间的转换,文件的I/O。
最后Interface被作为主函数的一部分,经过主函数的外壳包装之后成为一个可以运行的逻辑完整的程序。

代码逻辑部分:
在最核心的生成题目部分,这个项目采用了GenerateQuestion类作为一个账户的生成载体,GenerateQuestion类具有GenerateQuestions函数与GenerateQuestionsForUser两个成员函数,并且具有账户姓名,生成题目数量,生成题目类型,操作符的成员,在一个类中集成了所有生成题目和之后操作需要的信息。
代码逻辑上,GenerateQuestion作为一个可变参数的复用性函数通过引用AcquirePastQuestions来获取该账户之前的题目来进行查重,之后另一个成员函数GenerateQuestionsForUsers通过修改参数来进行对不同种类的账户基于实例的信息来生成小学,初中或者高中的题目。

3. 项目测试
登陆操作测试:

可以看到在输入账号和密码的时候,只有输入了正确的账号和密码才能进入登陆状态,并且可以通过输入-1来退出登录。
题目数量检测与切换操作:

可以看到在题目数量满足10-30的时候才会触发生成题目,并且可以通过切换语句来进行切换的操作。

可以看到生成了三个文件,前两个文件的题目为正确的小学题目

第三个文件由于程序中切换到了初中,所以题目发生了变化

系统登出测试:

可以通过在未登录状态下输入-1退出系统。

4. 利弊分析
优点:
核心的生成题目部分把所有的需求的信息都整合到一个类中,在调用的过程中只需要构造好一个实例对象就可以方便的进行一系列操作。
生成函数采用一个多参数方式提高复用性,以便于不同种类的题目切换。
结构清晰,GenerateProgram和DataProcess相互依赖,为Interface提供功能接口,生成用户界面。主要采用多管道-过滤器风格和层次风格的异构组合,直接高效。
命名规范,局部变量采用小驼峰命名法,成员变量加上了前缀,函数参数采用匈牙利命名法。
缺点:
没有使用数据库来对数据进行处理而是直接使用了函数,这样对于大规模的数据来说会比较难以处理并且速度不如数据库。
题中并没有明确指出操作数为整数还是浮点数,考虑不完整。
从层次风格来看,层次不够分明,一些函数和字段仍然可以抽象出来作为一个类。(但是考虑到py语言特性,当前的架构应该已经为较优解)

浙公网安备 33010602011771号