HNU个人项目互评:中小学数学卷子自动生成程序

发布时间 2023-09-19 21:24:00作者: Qianqiu77

一、功能测试

1.登录功能

  命令行输入用户名与密码,当用户名与密码都正确时,显示当前为XX出题

   正常输入时功能正常,但是当只输入用户名时发生了异常,应该是没有考虑只输入一个(没有测试bug呀!)

String str[] = in.nextLine().split("\\s+");
      nuser.setName(str[0]);
      nuser.setPassword(str[1]);

  代码没错是将字符串分成两个部分,但是没有想到人心险恶,测试的人会只输一串哈哈

2.出题功能

  当登录成功后,默认为当前老师出题难度,输入题目数量即可在对应老师文件夹生成对应难度的卷子

  经过测试后并没有发现bug,只是初中题目中的平方没有用要求的“²”而是“^”,还有在左括号右边多出来了一个空格(这都被我发现了)

  建议出题后提示一下出完的题目的路径,方便查找,还有将所有存放卷子的文件夹放在一个总的文件夹中

3.切换与退出

  当登录后,输入-3后可以切换出题难度,输入切换为XX即可切换到对应难度

  可以正常切换,并且切换后显示已切换到对应难度,也可以进行正常的出题

  输入-1后可进行退出,每当切换一次难度过后,就要多输入一次-1才可以退出(应该可以进行优化)

二、代码分析

1.Start

  Start类用来登录程序,并且根据登录老师的职位来生成不同难度的出题类,即ptest、mtest、htest,使用了面向对象设计模式的工厂模式,但是没有生成一个抽象基类,这个分被扣的有点可惜。

2.ptes、mtest、htest

  这三个类的逻辑相同都是生成对应难度的卷子,使用get_Pastproblem类来返回该文件夹所有生成的卷子的一个Hashset集合用来查重,使用Creat_problem类来生成不同难度的题目,使用循环来生成多次题目,但是在切换难度时,调用了change函数,导致出现了一点点小Bug(用户出不去了T_T)

3.change

 

  public static void change1(String uName, String cTo) {
    if (cTo.equals("切换为小学")) {
      ptest pnewType = new ptest();
      pnewType.pCreate(uName);
    }
    if (cTo.equals("切换为初中")) {
      mtest mnewType = new mtest();
      mnewType.mCreate(uName);
    }
    if (cTo.equals("切换为高中")) {
      htest snewType = new htest();
      snewType.sCreate(uName);
    }
  }

  因为每次切换都会生成一个出题类,导致每次切换都要多退出一次

三、优缺总结

优点:韩旭同学的代码使用面向对象的知识,将之前所学过的知识充分利用,我在看过代码之后才意识到之前学习过的设计模式可以用在所写的项目中,代码所使用的类很多,很多都是我没有见过的函数,这点我要学习,因为我发现好多java自带的函数要比自己写出的函数要高效且简洁,可以大大提高代码的效率

缺点:有几处不经过多次测试而出现的Bug,希望可以多检查几次代码,防止出现这种隐藏的Bug