结对编程队友代码优缺点分析
以下是对我结对编程的队友艾则孜同学的个人项目代码优缺点分析
编码规范
优点:
- 代码头部导入部分及类中各元素格式正确
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashSet;
- 变量命名规范(下划线命名法)
int len= 0 ;
int surplus=0;
int gap=0;
int sum_kuohao= r.nextInt(3);
-
该代码是采用的面向对象的方法,程序分为多个模块,如试卷生成模块,题目生成模块,账户初始化模块,登录后命令分析执行模块,代码的修改更加简单方便。今后的程序维护以及代码更新、升级上,其可变通性与可维护性更强
-
较好的运用了Java的各个库函数,很好的将各个功能需求实现且简单高效。
缺点:
-
类名命名不够规范,应当为大驼峰命名法
class Get_past_question
-
缺少@override标识
-
代码中一部分缩进不够规范
case 3:list.get(i).setGrade("高中");
System.out.println("准备生成高中数学题目,请输入生成题目数量");
j=sc.nextInt();
break;
- 代码中一部分空格使用不够规范,使得不够整洁美观
for(int i=0;i<num;i++)
-
没有自动换行,有的代码一行过长
String path=dirPath+"\\"+String.valueOf(year)+"-"+String.valueOf(month)+"-"+String.valueOf(day)+"-"+String.valueOf(hour)+"-"+String.valueOf(minute)+"-"+String.valueOf(second)+".txt";//设置文件名
代码结构和细节
优点:
-
类中结构清晰,每个函数分开,便于调用
-
获取试卷类中方法为静态方法,可以直接被主函数调用,节省空间提高了效率
static void getPaper(String name,String grade,int num){
-
题目生成方法巧妙且单独成类便于调用
-
代码整体较为简洁,重复代码段不多
缺点:
- 主函数过于冗长,可以把一部分功能放入静态函数
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);
}
}
}
-
所有文件读取都在各自的函数中,不便于管理,应当创建一个文件处理类
-
缺少注释,代码可读性差
-
方法名称 'Sign_in' 与其类名相同(方法命名不规范)
public static int Sign_in() {
功能实现
优点:
-
成功实现了项目需求中所有的功能要求
-
每个用户单独成文件夹,便于试卷的整理
HashSet<String> past=Get_past_question.getPast(name);
String dirPath = exam.dir+name;
- 实现了文件遍历查重功能确保题目不会重复
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;
}
}
缺点:
-
未使用数据库存储题目及用户信息,数据量不能太大
-
题目类型较少,只有计算题较为单一
-
用户密码没有被加密,信息安全有漏洞
-
没有生成答案,试卷不够完美
-
所有用户信息都存储在动态数组中,不可更改也不可变化且每次都需要初始化,项目不够完善
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", "高中"));
}
- 文件路径只存储在D盘且不是相对路径,不好寻找
public static String dir="D:\\";