作者:袁秀广
分析代码对象:夏礼顺
FileSystem.java
public File fileMaking(User currentUser) {
String mkdirName = "src/" + currentUser.getAccount(); // 相对路径
File mkdirFile = new File(mkdirName); // 根据相对路径创建File
if (!(mkdirFile.exists())) {
mkdirFile.mkdirs(); // 若不存在该文件夹则创建
}
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String dateString = mkdirFile + "/" + sdf.format(date) + ".txt";
File file = new File(dateString); // 在账号文件夹内创建年-月-日-时-分-秒.txt的File
try {
file.createNewFile(); // 创建年-月-日-时-分-秒.txt
} catch (IOException e) {
e.printStackTrace();
}
return file; // 返回该File
}
public int problemSearch(File file, String problem) throws FileNotFoundException {
int repeat = 0; // 描述是否重复
File parentDir = file.getParentFile(); // 获取上级目录
String parentPath = new File(file.getPath()).getParent();
File[] allFile = parentDir.listFiles(); // 获取上级目录的所有文件
String nonProblem = problem.substring(2, problem.length());
for (int index = 0; index < allFile.length; index++) {
Scanner scanner = new Scanner(allFile[index]);
while (scanner.hasNextLine()) {
String lineProblem = scanner.nextLine(); // 逐行读取文件中的每一行
if (lineProblem.length() == 0) { // 忽略空行
continue;
}
String tempProblem = lineProblem.substring(2, lineProblem.length()); // 提取文件中无序号题目
if (nonProblem.equals(tempProblem) == true) { // 若相同
System.out.println("该题重复");
repeat = 1;
}
}
}
return repeat; // 返回重复信息
}
这个代码实现了将题目写入文件并检查重复的功能。
优点:
-
使用了面向对象思想,将不同功能封装到方法中,代码结构清晰。
-
使用了File和IO流相关类来操作文件,实现了文件创建、写入和读取的功能。
-
在写入题目前检查是否重复,提高了题目质量。
缺点:
1.代码可以抽取出公共方法如获取文件路径来提高复用性。
总体来说,这个代码实现了基本的文件读写功能,但是在异常处理、通用性等方面还有改进空间。
LoginSystem.java
这段代码实现了用户登录和题目生成的功能。
优点:
-
将不同功能如登录、题目生成等抽象成方法,代码结构清晰。
-
使用ArrayList存储用户信息,实现了添加和查找用户功能。
-
根据用户类型生成不同难度的题目,满足个性化需求。
-
提供了退出和切换题目类型的功能,用户体验好。
缺点:
-
没有对用户输入进行格式验证,可能会因为输入错误导致异常。
-
用户信息存储在内存中,程序退出后数据会丢失。
public void addInformation() {
list.add(new User("小学", "张三1", "123"));
list.add(new User("小学", "张三2", "123"));
list.add(new User("小学", "张三3", "123"));
list.add(new User("初中", "李四1", "123"));
list.add(new User("初中", "李四2", "123"));
list.add(new User("初中", "李四3", "123"));
list.add(new User("高中", "王五1", "123"));
list.add(new User("高中", "王五2", "123"));
list.add(new User("高中", "王五3", "123"));
}
- 题目生成逻辑直接写在control方法中,不利于扩展和维护。
总体来说,这段代码实现了基本的登录功能,但是在持久化存储等方面需要优化,扩展和维护性不强。
Testpaper.java
这段代码实现了生成不同难度试卷的题目的功能。
优点:
-
将不同难度的题目生成逻辑封装到不同的方法中,如makePrimary()生成小学难度题目,makeJunior()生成初中难度题目等,代码结构清晰。
-
使用随机数生成题目各个元素,如操作数、符号等,可以实现自动随机生成大量题目。
-
将生成的每个题目写入文件中,实现了自动生成试卷的功能。
缺点:
-
代码重复度高,不同难度题目生成逻辑中有很多重复代码,如生成操作数、符号等基本逻辑,没有进行抽取。
-
没有对生成的题目进行错误检查,如是否包含非法表达式等,可能生成一些错误的题目。
总体来说,该代码实现了自动生成试卷的基本功能,但在代码结构和细节处理上还有改进空间。
运行bug:生成题目时只对数字范围判断,当输入其他字符时,程序异常退出