结对项目对方个人项目代码分析

发布时间 2023-09-20 10:56:39作者: 软件2104袁秀广

作者:袁秀广
分析代码对象:夏礼顺

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; // 返回重复信息
  }

这个代码实现了将题目写入文件并检查重复的功能。

优点:

  1. 使用了面向对象思想,将不同功能封装到方法中,代码结构清晰。

  2. 使用了File和IO流相关类来操作文件,实现了文件创建、写入和读取的功能。

  3. 在写入题目前检查是否重复,提高了题目质量。

缺点:

​ 1.代码可以抽取出公共方法如获取文件路径来提高复用性。

总体来说,这个代码实现了基本的文件读写功能,但是在异常处理、通用性等方面还有改进空间。

LoginSystem.java

这段代码实现了用户登录和题目生成的功能。

优点:

  1. 将不同功能如登录、题目生成等抽象成方法,代码结构清晰。

  2. 使用ArrayList存储用户信息,实现了添加和查找用户功能。

  3. 根据用户类型生成不同难度的题目,满足个性化需求。

  4. 提供了退出和切换题目类型的功能,用户体验好。

缺点:

  1. 没有对用户输入进行格式验证,可能会因为输入错误导致异常。

  2. 用户信息存储在内存中,程序退出后数据会丢失。

 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"));
  }
  1. 题目生成逻辑直接写在control方法中,不利于扩展和维护。

总体来说,这段代码实现了基本的登录功能,但是在持久化存储等方面需要优化,扩展和维护性不强。

Testpaper.java

这段代码实现了生成不同难度试卷的题目的功能。

优点:

  1. 将不同难度的题目生成逻辑封装到不同的方法中,如makePrimary()生成小学难度题目,makeJunior()生成初中难度题目等,代码结构清晰。

  2. 使用随机数生成题目各个元素,如操作数、符号等,可以实现自动随机生成大量题目。

  3. 将生成的每个题目写入文件中,实现了自动生成试卷的功能。

缺点:

  1. 代码重复度高,不同难度题目生成逻辑中有很多重复代码,如生成操作数、符号等基本逻辑,没有进行抽取。

  2. 没有对生成的题目进行错误检查,如是否包含非法表达式等,可能生成一些错误的题目。

总体来说,该代码实现了自动生成试卷的基本功能,但在代码结构和细节处理上还有改进空间。

运行bug:生成题目时只对数字范围判断,当输入其他字符时,程序异常退出