1.项目的简单介绍

项目名称:中小学数学卷子自动生成程序

主要功能:

a.登陆

通过命令行输入账号和密码进行登陆,成功后出现提示,否则需要重新输入;

b.切换难度

可以输入“切换为XX”,修改生成题目的类型,如小学,初中,高中,不符合要求时提示重新输入

c.随机生成试卷

根据提示,输入数字,可以随机生成需要的数量的题目,题目难度默认为账户类型,亦可输入切换;生成的试卷以txt格式和固定格式的文件名保存在特定的目录下;新生成的题目不能与同文件夹下的题目重复。

 

2.队友与我的思路结构的分析对比

与我选择的C++不同,我的队友选择了用java实现本次的个人项目:
(1) 将用户封装为一个类,通过类函数获取用户的各项信息,然后通过HashMap存储用户信息列表;而我是通过一个UserList.txt的文档形式存储着各个用户的基本信息,然后通过ifstream对象读取文件每一行的内容来获取用户各项信息。

 

(2) 对于项目各功能的实现,我们都采用了将程序分为几个小模块的方法,并且都是分为了登录、切换类型、生成试卷、对文件的操作这四个主要模块,然后通过一些小模块去完善主要模块的功能。

 

对于登录模块:
由于我们之间存储用户信息的方式不同,导致这一模块的实现方法差异较大,  

他直接通过HashMap的对象自带的查找功能去比对账号和密码是否匹配;

而我需要通过循环读取文件每一行的内容并逐行比对。

 

对于切换类型模块:

我的队友将输入题目数量与切换类型在同一个模块中实现了,即在提示输入生成题目数量时,不仅可以输入-1登录,还可以在此时直接输入“切换为XX”切换所生成题目的类型,主要是通过java中字符串类型的一些自带函数及if条件判断语句来实现的;

而我是将切换类型单独作为一个模块,通过简单的if判断语句实现了切换类型后的一系列逻辑,并且在此部分中添加了一个通过输入-1来结束整个出题的功能。

 

对于文件操作模块:

我的队友编写了一个FileOperation类,在其中实现了文件夹的初始创建、创建文档并向其中添加文本、重命名这三个函数,并且在创建文档以及添加文本的过程中加入了异常检测,判断是否出现IO异常或其他异常;

我也采用了类似的方法,不过我的添加文本是直接使用了stringstream对文档进行写入。

 

对于生成试卷模块:

这是最复杂的一个模块,主要难点集中在题目严谨的数学逻辑与随机出题的结合以及出题不重复的实现这些地方。

我和队友这一模块基本思想都是以random为核心,随机生成符合要求的操作数,然后根据不同难度会用到不同的符号去匹配操作符,并随机生成括号加入到式子;

但是我们的具体实现差异比较大,他使用了类的继承方式,一个基类实现基本操作,三个子类重载父类中的函数分别实现小学、初中、高中不同类型难度下的出题,并且还额外考虑到了不能出现tan90°以及除数不能为0即cos90°的情况;

而我则是直接在一个类函数中实现了三个类型的不同操作,通过编写一个操作符(无 / ^2 /√ / sin / cos / tan)匹配函数,以一个代表难度类型的变量作为参数实现了控制操作数能匹配哪些操作符,并且编写了一个查重函数将生成后的式子与check.txt文档中的内容逐行比较,如果能在文档找到则说明重复,并重新生成。

 

3. 队友项目实现的优缺点

我个人觉得可以打个优秀°\(^-^)% !

(1)  分类去实现各个功能模块,封装性好,并且有利于代码的更新、升级;

(2)  在存储用户信息时采用了HashMap的方法,查找核对信息的效率Max! ;

(3)  文件创建及编辑其内容部分存在异常检查;

(4)  出题逻辑严谨,考虑到了除数不能为0等情况;

(5)  不同难度类型下的出题由函数重载实现;

(6)  程序编写符合代码规范,结构清晰。

 

稍微美中不足的地方:

(1)  可以再多加一点注释,虽然大部分代码比较易懂,但是试卷生成模块较为繁杂,可读性较差;

(2)  未实现查重功能;

(3)  文件路径未使用相对路径,绝对路径可能会使得程序的可重用性差,而在程序中使用相对路径则会变的有极强的适应性,是提高代码健壮性的点睛之笔;

(4)  题目之间忘记空行#(-_-)#

 

PS:

本人在完成生成题目的进行难度操作符匹配时,只需要改变传入的option参数就可以控制代码选择相应的操作符,避免了各自对小学、初中、高中写代码,但是我觉得我队友使用重载这种实现方式也很棒!而且对比起C++,感觉队友通过java语言实现的代码封装性更好,虽然将各模块实现整合感觉比较麻烦,也就是编写时会比较复杂,但是更有逻辑性,而且以后有类似项目时可以直接使用或稍微修改现在编写的某个类。

posted on 2020-09-30 12:04  徐静茹  阅读(111)  评论(0)    收藏  举报