对Quin同学的试卷自动生成程序代码分析

我的partner Quin同学使用Python语言编写的中小学试卷生成系统,在此我对他的劳动成果进行一个简单分析。

项目需求:

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

6、个人项目9月17日早上8点以前提交至各自负责的助教处。提交方式:工程文件打包,压缩包名为“几班+姓名.rar”。

附表-1:账户、密码


账户类型


账户


密码


备注


小学


张三1


123


张三2


123


张三3


123


初中


李四1


123


李四2


123


李四3


123


高中


王五1


123


王五2


123


王五3


123

附表-2:小学、初中、高中题目难度要求


小学


初中


高中


难度要求


+,-,*./


平方,开根号


sin,cos,tan


备注


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


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


题目中至少有一个sin,cos或tan的运算符

他的工程优点是,整个工程清晰明了,且有相应注释帮助进行理解,格式规范、可读性佳,变量命名简单易懂,能将生成的试卷输出到相应文件夹。其中我觉得设计得非常优秀的部分是对括号的处理——结对、查重、排序等等。此段代码内先命名一个变量,每当出现一个左括号则加1,出现一个右括号则减1,当且仅当最后所得结果总和为0时最后才成立,这样很好地保证了避免括号落单的情况。

同时也有一些不足,例如源代码中有关于括号排序的处理,本应是为了防止大中小括号的包含关系出现错误从而进行的排序,思路非常棒,然而项目需求中只要求使用小括号,因而这段代码出现了冗余,可以考虑删去这一部分。同时还有一点我觉得可以改进的,就是在高中难度下的三角函数操作数是随机生成的1-100之间某个数字,考虑到实际做题时很多数都是不好求解、没意义的,因此可以自定义一个生成pai的函数,让题目更贴切生活实际。

代码中对于题目重复和和括号生成错误也有相应补救措施,增加了其代码的严谨性。总的说来这是个非常优秀的项目,可以多多借鉴学习。

原文地址:https://www.cnblogs.com/kisaragi11037/p/11553149.html

时间: 2024-08-30 15:26:28

对Quin同学的试卷自动生成程序代码分析的相关文章

结对编程——基于JAVA开发的中小学生数学试卷自动生成程序

这两个星期,我和马同学一起参与了基于个人项目的中小学生数学试卷的自动生成程序结对编程项目.结对编程的实现是基于个人编程的,不过由于我是用c++而同伴是用的PYTHON商量之后我们决定用JAVA从头开始写.原本打算使用mvc框架来完成这个项目,但是由于对其使用不够熟悉,最后还是没怎么能用上. 这次项目我负责的是前端部分,前端部分做起来还是挺麻烦的,我们使用的是java来完成这个项目,对于UI界面我们使用了jframe来编写,在项目过程中遇到几个很莫名奇妙的bug,原本是用阿里云短信服务返回的验证码

中小学数学试卷自动生成程序-对张凯翔同学代码的评价

张凯翔的优点: 面向对象编程,结构清晰,修改难度小 生成了UI界面,清晰美观 相比张惟盛的代码生成的题目更加科学,比如会在平方和开方的部分增加括号,以确保意义明确 相较于C语言,采用了更加方便的Java,调用函数以及捕获异常,确保了程度的稳定性 张凯旋的缺点: 代码习惯有点问题,杂乱且缺少注释 虽然采用了全随机生成运算符的方式,但在某些算式中也会出现无意义的括号,比如在正常的加减乘除中,第一个为乘法,已经是优先的但是还是会添加无意义的括号,有瑕疵 缺少了对同一老师的不同试卷进行题目查重的步骤,虽

中小学生试卷自动生成程序--jialin大佬代码分析

结对编程代码评价 有幸和小jialin结对编程.拿到jialin的代码后. 我先是尝试用idea运行.结果报了如下错误. 无法加载主类,再尝试用eclipse运行. 好的,可以运行,那为什么用idea跑不了呢? 度娘了一下,发现是环境变量设置的问题. 接下来步入正题,开始看代码. 打开工程,发现在只有一个class文件,头大,这样的架构肯定不够好.一个一个函数看下来吧. 第一个函数是 CheckNameAndPassword(),用于检测账号密码是否正确 boolean CheckNameAnd

中小学数学题生成程序代码分析

整体的排版: 针对同一代码段,写出优点和认为可能有的改进的地方. 代码段1: 将用户信息封装成Student类.Java的类型能够把相同属性的对象抽象出来,无论是概念上还是编程上都会帮助我们理解整个系统的架构. 虽然前面说到有将用户信息封装成类,方便管理.但是整个项目仅仅只有两个类,另外一个是主类,我觉得结构可以更加优化一些,因为Java是面向对象语言,类是很重要的一个概念,可以实现功能的解耦.比如这个项目的登陆模块和出题模块都可以设计成类,一方面可以对整个系统的架构有更清晰的认知,另一方面起码

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

在上一周的个人项目中队友用的是C++,代码运行正常,且基本实现了需求文档的要求,然后关于她的代码,我觉得有很多可以借鉴的地方,也有一些需要改进的地方. 优点: 1.总体结构很清楚,思路清晰.从登录到功能切换,从试卷生成到题目生成,以及重复性检测,每一步都有对应的函数代码,思路清晰,逻辑清楚. 2.代码的编写基本符合规范要求,且注释基本到位,可读性强.例如在前面的主要函数声明中注释很清楚地标明清楚了函数的作用,函数基本命名符合规范,可以根据名字而知其意,变量命名也基本符合规范,这一点我得向她学习.

个人项目:中小学数学卷子自动生成程序-队友代码测评

结对编程-队友代码分析 上一周,我们完成了个人项目编程.在经过对队友代码的分析,我感触颇深,觉得非常有必要来写一篇文章分析一下队友的代码,我是用的java,而队友用的c++,以下开始正文! ------------------------------------------------------------------------------- 项目需求简述: 个人项目:中小学数学卷子自动生成程序 用户: 小学.初中和高中数学老师. 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序

中小学数学卷子自动生成程序-结对编程之队友代码分析

一.编程语言:C++ 二.代码解读与分析: 1. 项目逻辑 通过输入信息与数组中存储账户信息比对完成用户登录.根据不同的类型要求生成相应类型的试卷并查重.将生成题目以指定的形式存放在指定文件夹下.过程中可切换试卷类型. 2.函数功能说明 int main():主函数负责调用各个功能函数,将各个功能模块按照项目实际的使用情况与应用逻辑结合适当的提示性信息进行组织和套用. void SetPrimary(int n):生成小学类型的试卷. void SetMiddle(int n):生成初中类型的试

身份证号码自动生成程序(Python)

今天收到一个小需求:需要一个自动生成身份证号码的小程序.近期用python较多,因此打算用python实现. 需求细化: 1.身份证必须能够通过身份证校验程序. 2.通过查询,发现身份证号码是有国家标准的,标准号为  GB 11643-1999  可以从百度下载到这个文档http://zhidao.baidu.com/share/b838c7683bb70af8166efd810a398fec.html 现行身份证号为18位,分别为6位地址码,8位生日,3位顺序码,一位校验码.具体例子可见下图.

第二次结对编程—四则运算自动生成程序

一.题目要求 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户设置最大数(如十以内.百以内等) 用户选择是否有括号.是否有小数 用户选择输出方式(如输出到文件.打印机等) 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主) 二.任务分配 驾驶员:王旭 领航员:张昊辰 驾驶员负责写代码,浏览文件,还有基础实现方法. 领航员则着眼更长远的考虑并且检查错误.进行代码测试和检查错误. 三.