【实现思路】
- 命令行输入用户名和密码,匹配试卷难度,每个类的账号只能生成当前难度下的试卷;
- 根据试卷难度生成题目,主要是随机生成操作数的个数,每个操作数的形式,两个操作符之间的操作符,最后是随机生成括号,因为设计题目的合理性,所以在写随机生成的时候需要考虑到各种可能的情况;
- 最后生成的试卷以“年-月-日-时-分-秒.txt”命名方式生成到以用户名命名的文件夹中。
【函数结构】
public static void main(String[] args)
static void init()
static void menu()
static void login()
static void logout()
static void OperatorChoose()
static void ChangeRank()
static void GetNumber()
static String GetProblem()
static void ProblemLoad()
static boolean ProblemCheck( String p)
static void PrintTest(int num)
static void Print(int num)
【重难点分析】
- 题目的生成(最难):需要考虑题目的合理性,各种操作符的可能存在的位置,主要是利用while和random随机数,将需要用到的符号存在一个g_operator的数组里。括号在匹配的时候要考虑他的位置,不能在操作符的后边,并且要考虑到括号的意义,不能是没有意义的括号。之后是初高中的符号都需要考虑后面跟的数是括号里的还是没有括号的几种情况;
- 账户的匹配:此处使用两个数组,通过下标来匹配每个用户和他的密码,用全局变量g_grade来存储难度级别;
- 题目的打印:通过SimpleDateFormat类来实现文件的命名,通过FileWriter来实现题目的内容输入;
- 查重部分:设置三个难度的题库,每次在一个账号生成题目之前刷新题库中有的题,因为格式相同,所以通过substring方法检查有无重复部分。
【优点】
- 界面设置简洁明了;
- 每个选项的输入都考虑了不存在的情况,会有提醒几面;
- 考虑到了每个账号的安去性问题,各个账户之间不能随意切换难度,因此添加了无敌模式,只有指定的最高权限的账户可以每个难度都能登进去;
- 题目种类考虑的较完整,运算符和括号的位置很人性化,避免了很多不合理的存在,并且使每个符号都有自己存在的意义;
- 添加了很多人性化的提示。
【缺点】
- 用户登陆部分利用两个数组存储安全性和自由性都过低,可以考虑使用User类来实现;
- 没有做UI界面很可惜;
- 代码中有些重复的部分可以封装成函数。
原文地址:https://www.cnblogs.com/hysxxn/p/11552532.html
时间: 2024-10-10 09:27:02