工程概论第二次作业--个人项目
# 工程概论第二次作业--个人项目
github链接:https://github.com/hytsszd/202121331072/tree/main
## 需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
- 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
- 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
- 从**命令行参数**给出:论文原文的文件的**绝对路径**。
- 从**命令行参数**给出:抄袭版论文的文件的**绝对路径**。
- 从**命令行参数**给出:输出的答案文件的**绝对路径**。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/jmu/ComputerScience21 |
|---|---|
| 这个作业要求在哪里 | |
| 这个作业的目标 | 一次工程项目练习 |
| *PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | |
|---|---|---|---|
| Planning | 计划 | ||
| · Estimate | · 估计这个任务需要多少时间 | 255 | 313 |
| Development | 开发 | ||
| · Analysis | · 需求分析 (包括学习新技术) | 60 | 74 |
| · Design Spec | · 生成设计文档 | 10 | 15 |
| · Design Review | · 设计复审 | 30 | 42 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 15 |
| · Design | · 具体设计 | 30 | 41 |
| · Coding | · 具体编码 | 30 | 36 |
| · Code Review | · 代码复审 | 20 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 20 | 12 |
| Reporting | 报告 | ||
| · Test Repor | · 测试报告 | 10 | 15 |
| · Size Measurement | · 计算工作量 | 15 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 13 |
| · 合计 | 255 | 313 |
## 算法思路
- 利用FileReader类与BufferedReader类结合读取txt文档中的文件
- 使用编辑距离算法计算相似度
- 最后将相似度以规定格式输出到指定文件中
因为代码较为简单,所以我只有一个Ujjwal类(即主类),关于论文查重和输入输出的函数都在其中
| 函数 | 作用 |
|---|---|
| main | 主函数 |
| readFile | 读取文件内容 |
| calculateSimilarity | 计算相似度 |
| writeAnswer | 将结果写入答案文件 |
性能分析图

## 单元测试函数
显而易见就是测试三种方式,分别为正常测试、路径错误和文件为空的测试,第一个能完成基本能完成其他类似测试。
public class test {
public static void main(String[] args) {
//主测试函数
String[] arg = new String[3];
arg[0] = "C:\\Users\\92445\\Desktop\\论文查重\\org.txt";
arg[1] = "C:\\Users\\92445\\Desktop\\论文查重\\org_add.txt";
arg[2] = "C:\\Users\\92445\\Desktop\\论文查重\\ans.txt";
Ujjwal.main(arg);
//测试路径错误
String[] arg1 = new String[3];
arg1[0] = "C:\\Users\\92445\\Desktop\\错误的\\before.txt";
arg1[1] = "C:\\Users\\92445\\Desktop\\论文查重\\after.txt";
arg1[2] = "C:\\Users\\92445\\Desktop\\论文查重\\ans.txt";
Ujjwal.main(arg1);
//测试文件为空
String[] arg2 = new String[3];
arg2[0] = "C:\\Users\\92445\\Desktop\\论文查重\\before.txt";
arg2[1] = "C:\\Users\\92445\\Desktop\\论文查重\\after.txt";
arg2[2] = "C:\\Users\\92445\\Desktop\\论文查重\\ans.txt";
Ujjwal.main(arg2);
}
}
得到以下结果

### 覆盖率截图

## 异常处理

文件为空就用一个很简单的if,文件不存在就是用catch抛出异常,具体测试例子在上一部分已经给出。

浙公网安备 33010602011771号