代码作者:CLZ
所用语言:C++
程序功能一:用户登陆
流程图:
简述:
将预设的九个账户信息存入User对象数组,通过遍历数组检查账户合法性。
优点:
没有简单的通过if条件判断,方便添加/注册用户,可扩展性高。
缺点:
User对象的数组长度没有参数化,导致添加新用户时要修改遍历代码。
程序功能二:登陆后切换年级
流程图:
简述:
两个while循环和一个continue语句形成输入判断和跳转。
优点:
流程结构清晰,只用了一个continue。
缺点:
1,输入都用的是cin,cin无法读取空格,用户的不规范操作可能会导致不可预料后果。
2,在输入题目数量时无法切换年级,切换年级只能在最外层循环执行。
程序功能三:生成题目
简述:
传递参数调用MakePaper(user_no,type_flag,question_num)函数,三个参数分别表示:用户编号、生成题目的年级,生成题目的数量。
MakePaper函数根据参数类型进行条件判断分别调用生成小学(BasicMake)、初中(NormalMake)、高中(HardMake)题目的函数。
小学题目生成算法:
根据运算符个数随机出括号的插入位置===>依此随机出运算符和整数添加到字符串末尾===>返回字符串
初中题目生成算法:
根据运算符个数随机出括号的插入位置===>随机flag数组(用来控制题目每个位置应插入数字、运算符)==>for循环形成题目,在每生成一个数字
后随机判断是否要添加^0.5和^2。
高中题目生成算法:
在初中题目的基础上再添加一个flag数组,用来控制三角函数插入的位置。
优点:
1,按顺序生成一个题目中的所有数字和符号,只用到了字符串的append()操作,运行速度快。
2,根号和平方都以次方表示,生成起来较方便。
缺点:
1,只生成了一对括号。
程序功能四:查重
简述:
读取目标文件夹下所有txt文件,将题目序号全替换为0,查找新生成的题目是否在文件中。
优点:
能完整的查重
缺点:
没生成一道题目都要全部读取文件一遍,实际上可以只读取一遍文件,存入内存,之后只需遍历就行。
总结:
总体效果很好,除了查重部分的文件读取。全部代码几乎全是面向过程的c语言写法,建议采用C++面向对象写法。