本篇博客为对结对编程队友的个人项目——《中小学数学卷子自动生成程序》进行评价,编程语言为java。该项目主要用于用户登录,自动生成相应的小学、初中、高中数学卷子,并以.txt形式在文件中保存。
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:账户、密码
附表-2:小学、初中、高中题
获取用户名、密码、年级
在数据库中添加需求中不同账户类型的账户及密码形成数据库,并用调用函数Check_user(String name,String password)来验证输入的与数据库里的用户名与密码是否匹配
调用各种函数实现登录、切换类型、生成题目、查重、生成试卷
InitSystem()函数初始化用户数据库 Login()函数生成登录页面,并调用Check_user函数进行登录判定 Showmenu(String name)函数生成登录后的界面,根据用户的输入使用if...else if...else调用不同的函数实现不同的功能Change_type(String name)函数切换用户的账户类型以生成不同类型的题目及试卷,用while循环来确保正确的切换类型,只有当正确的切换类型后才跳出while循环 GeneratePapers(String name, int number)函数生成相应的试卷,为当前老师创建文件夹(若该老师的文件夹不存在)和以当前时间命名创建格式为.txt的试卷文件并生成文件的相对路径
GenerateProblem()函数生成相应难度的题目,先随机生成一个操作数数组存放操作数,再随机生成对应类型的符号数组存放符号下标,再规范化(即对特殊符号进行处理),然后就可以生成对应类型的题目,调用了FormatProblem(String math_problem)、bracket(String math_problem)、int[] Find_Left(String math_problem)、int[] Find_Right(String math_problem)、boolean Check_repeat(String name, String math_problem)函数
FormatProblem(String math_problem)函数对平方符号进行了特殊处理,将平方符号挪到了操作数的后面,因为其他的如√、sin、cos、tan都是符号在前操作数在后
bracket(String math_problem)函数实现了加括号的功能, int[] Find_Left(String math_problem)函数对左括号i进行了处理,得到左括号的位置 int[] Find_Right(String math_problem)函数对右括号i进行了处理,得到右括号的位置
boolean Check_repeat(String name, String math_problem)函数检查题目是否与该老师曾出过的题目相同,即查重
验证成功
只有当第一次输入正确时才能正确切换类型
验证成功
1)有页面设计,页面美观;
2)Data类中使用了链表,比数组更加的高级和方便;
3)if中判断两个字符串是否相等用了字符串函数equals(),很高级也很有亮点;
4)文件的路径时相对的,不是绝对路径,使项目发送给他人时不需要修改路径就可以使用;
5)代码规范,符合Google代码规范;
6)函数分类清晰、功能完善;
1)出题的思路做法复杂化了;
2)最多只能加一个括号,无法实现括号的叠加等复杂的运算;对括号的位置判断很繁琐;
3)查重函数打开文件读数据后没有在正确位置关闭;
4)PaperSystem类代码量很大;
5)切换类型出现问题,只有当第一次输入正确时才能正确切换;
1)Showmenu(String name)函数中根据用户的输入调用不同的函数实现不同的功能,个人认为使用switch更加的高大上一点;
2)出题可以采用字符串拼接的方法,对于初高中,可以根据符号来决定操作数与特殊符号"²", "√", "sin", "cos", "tan"拼接的顺序,再进行四则运算;
3)用文件流写入读出文件会更简洁;
总的说来,洪同学的代码功能模块划分得清晰、功能进行了封装、注释简洁明了形象易懂,较高程度实现了个人项目的需求,有很多值得我学习的地方