结对编程队友代码优缺点分析

以下是对我结对编程的队友艾则孜同学的个人项目代码优缺点分析

编码规范

优点:

  1. 代码头部导入部分及类中各元素格式正确
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashSet;
  1. 变量命名规范(下划线命名法)
 int len= 0 ;
 int surplus=0;
 int gap=0;
 int sum_kuohao= r.nextInt(3);
  1. 该代码是采用的面向对象的方法,程序分为多个模块,如试卷生成模块,题目生成模块,账户初始化模块,登录后命令分析执行模块,代码的修改更加简单方便。今后的程序维护以及代码更新、升级上,其可变通性与可维护性更强

  2. 较好的运用了Java的各个库函数,很好的将各个功能需求实现且简单高效。

缺点:

  1. 类名命名不够规范,应当为大驼峰命名法
    class Get_past_question

  2. 缺少@override标识

  3. 代码中一部分缩进不够规范

case  3:list.get(i).setGrade("高中");
  System.out.println("准备生成高中数学题目,请输入生成题目数量");
    j=sc.nextInt();
     break;
  1. 代码中一部分空格使用不够规范,使得不够整洁美观
for(int i=0;i<num;i++)
  1. 没有自动换行,有的代码一行过长

    String path=dirPath+"\\"+String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day)+"-"+String.valueOf(hour)+"-"+String.valueOf(minute)+"-"+String.valueOf(second)+".txt";//设置文件名

代码结构和细节

优点:

  1. 类中结构清晰,每个函数分开,便于调用

  2. 获取试卷类中方法为静态方法,可以直接被主函数调用,节省空间提高了效率

static void getPaper(String name,String grade,int num){

  1. 题目生成方法巧妙且单独成类便于调用

  2. 代码整体较为简洁,重复代码段不多

缺点:

  1. 主函数过于冗长,可以把一部分功能放入静态函数
public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int i= Sign_in.Sign_in();
      int j= Change_count.change_grade(i);
      while (true)
      {

          switch (j)
          {
              case -1:i=Sign_in.Sign_in();
              j=Change_count.change_grade(i);
              break;
              case  1:list.get(i).setGrade("小学");
                    System.out.println("准备生成小学数学题目,请输入生成题目数量");
                    j=sc.nextInt();
                    break;
              case  2:list.get(i).setGrade("初中");
                  System.out.println("准备生成初中数学题目,请输入生成题目数量");
                  j=sc.nextInt();
                    break;

              case  3:list.get(i).setGrade("高中");
                 System.out.println("准备生成高中数学题目,请输入生成题目数量");
                  j=sc.nextInt();
                   break;
              default:Get_paper.getPaper(list.get(i).getName(),list.get(i).getGrade(),j);
             System.exit(0);

          }
      }

    }
  1. 所有文件读取都在各自的函数中,不便于管理,应当创建一个文件处理类

  2. 缺少注释,代码可读性差

  3. 方法名称 'Sign_in' 与其类名相同(方法命名不规范)

public static int Sign_in() {

功能实现

优点:

  1. 成功实现了项目需求中所有的功能要求

  2. 每个用户单独成文件夹,便于试卷的整理

HashSet<String> past=Get_past_question.getPast(name);
String dirPath = exam.dir+name;
  1. 实现了文件遍历查重功能确保题目不会重复
public class Get_past_question {
    static HashSet<String> getPast(String name){
        String path = exam.dir+name;
        File file = new File(path);
        if(!file.exists()){
            file.mkdir();
        }
        File[] fs = file.listFiles();
        HashSet<String> pastProblem= new HashSet<String>();
        for(File f:fs) {
            if (!f.isDirectory())
            {
                try {
                    BufferedReader brr = new BufferedReader(new FileReader(f));
                    String line;
                    while ((line = brr.readLine()) != null) {
                        pastProblem.add(line);
                    }
                    brr.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return pastProblem;
    }
}

缺点:

  1. 未使用数据库存储题目及用户信息,数据量不能太大

  2. 题目类型较少,只有计算题较为单一

  3. 用户密码没有被加密,信息安全有漏洞

  4. 没有生成答案,试卷不够完美

  5. 所有用户信息都存储在动态数组中,不可更改也不可变化且每次都需要初始化,项目不够完善

static ArrayList<User> list = new ArrayList<>();
static {
    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. 文件路径只存储在D盘且不是相对路径,不好寻找

public static String dir="D:\\";

posted @ 2022-09-14 00:44  Hengist_Z  阅读(88)  评论(0编辑  收藏  举报