作业二


作业所属课程 软工2024
作业要求 查重率
作业目标 积累项目经验。体验项目制作流程。练习计算机语言语法。

github链接:https://github.com/jiongand/-jiongand/tree/main/3122004482/3122004482/x64/Release

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 40 45
Estimate 估计这个任务需要多少时间 20 25
Development 开发 60 90
Analysis 需求分析 (包括学习新技术) 30 60
Design Spec 生成设计文档 5 5
Design Review 设计复审 15 15
Coding Standard 代码规范 (为目前的开发制定合适的规范) 5 5
Design 具体设计 15 15
Coding 具体编码 60 90
Code Review 代码复审 20 34
Test 测试(自我测试,修改代码,提交修改) 56 66
Reporting 报告 5 5
Test Repor 测试报告 5 5
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10 20
合计 291 439

实现过程

本次项目选取实现语言为c++。

查重算法:重复字数/总字数

通过哈希表记录每个字出现的个数,遇到重复的字就减少。

所设计类如下:

class Check
{
	int same;//重复字个数
	std::unordered_map<char,int> g;
	int total;//总字数
	void load(const char* a);//将原文载入哈希表
	void find(const char* a);//把目标文章与原文章进行比对
public:
	Check();~Check();
	bool check(const char* f, const char* c, const char* a);//处理输入的文件路径,进行文件流操作
};

性能改进

分析图如下
p
主要耗时在哈希表的遍历。无力解决。

耗时最高函数如下:
pp

单元测试

部分测试情况。
以老师的样例做测试。
c

空文档测试
g

异常处理

命令行输入有误时

if (argc != 4) {
		std::cout << "输入不足或过多"<<std::endl;
		return -1;
	}

文件打开失败时

if (!(sample.is_open() && target.is_open() && answer.is_open())) {
		std::cout << "文件打开失败。" << std::endl;
		sample.close();
		target.close();
		answer.close();
		return false;
	}

被测试文章为空时

if (total == 0) {
		sample.close();
		target.close();
		answer.close();
		std::cout << "被测试文章无内容"<<std::endl;
		return false;
	}
posted @ 2024-03-13 17:31  格外后悔  阅读(16)  评论(0编辑  收藏  举报