结对编程

结对伙伴学号 201831061427
结对伙伴姓名 赵强
伙伴博客地址 https://www.cnblogs.com/Drac/
个人博客地址 https://www.cnblogs.com/snowyouth/
Github地址 https://github.com/dracssr/WordCount

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 60
Estimate 估计这个任务需要多少时间 40 30
Development 开发 200 200
Analysis 需求分析 (包括学习新技术) 50 40
Design Spec 生成设计文档 20 20
Design Review 设计复审 (和同事审核设计文档) 25 25
Coding Standard 代码规范 (为目前的开发制定合适的规范) 15 15
Design 具体设计 100 80
Coding 具体编码 600 630
Code Review 代码复审 25 20
Test 测试(自我测试,修改代码,提交修改) 30 50
Reporting 报告 30 20
Test Report 测试报告 25 30
Size Measurement 计算工作量 30 20
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计 40 50
合计 1220 1290
  • 思路:因为基础还不够扎实,所以我们在独立设计代码过程中遇到了很多问题,花费了大量时间。最后我们决定先共同编译好代码,再慢慢修正。

讨论过程

图片
PS:比较羞涩,就不拍脸啦。

设计实现过程

代码设计流程如下:

图片

代码实现

#include<iostream>
#include<string>
#include<cstring>
#include<stdlib.h> 
#include<ctype.h>
#include<fstream>
#define N 20
using namespace std;
/*定义结构体*/
typedef struct wenjian{
	char data[N];
	int shu;
	struct wenjian *zuo;
	struct wenjian *you;
}wenjian,*bwenjian;
class Word{//定义一个词汇的类 
public:
	Word();
	int get_word(int start, int end, char* p, char* word);
	void create_wenjian(char* m, bwenjian& b);
	void Order(bwenjian b, FILE* q);
	int sum;
	int j;
	int i;
	char liang[N];
	char liang1[N];
	char word[N];
	char fwen[20];
	
};
/*初始化*/
Word::Word()
{
	sum = 0;
	j = 0;
	i = 0;
}
/*定义获取单词数的函数*/
int Word::get_word(int start, int end, char* p, char* word)
{
	memset(word, 0, sizeof(char));
	for (  i = start; i<end; i++)//使用循环读取文件 
	{
		if (isalpha(p[i]))
		{
			word[j] = p[i];
			j++;
		}
		else if (j == 0)
		{
			continue;
		}
		else
		{
			word[j] = '\0';
			j = 0;
			sum++;
			break;
		}
	}
	return i;
}
/*查找函数*/
void Word::create_wenjian(char* m, bwenjian& b)
{
	strcpy(liang, m);
	liang[0] = tolower(m[0]);
	if (b == NULL)
	{
		b = (bwenjian)malloc(sizeof(wenjian));//创建堆栈
		strcpy(b->data, m);
		b->shu = 1;
		b->zuo = NULL;
		b->you = NULL;
	}
	else
	{
		strcpy(liang1, b->data);
		liang1[0] = tolower(b->data[0]);
		if (strcmp(liang, liang1) == -1)
		{
			create_wenjian(m, b->zuo);
		}
		else if (strcmp(liang, liang1) == 1)
		{
			create_wenjian(m, b->you);
		}
		else
		{
			b->shu++;
		}
	}
}
/*写入文件*/
void Word::Order(bwenjian b, FILE* q)
{
	if (b != NULL)
	{
		Order(b->zuo, q);
		fprintf(q, "world:%-10s 次数:%-9d\n", b->data, b->shu);
		printf("world:%-10s 次数:%-9d\n", b->data, b->shu);
		Order(b->you, q);
	}
}
int main()
{
	Word w;//定义Word的类
	while (true)
	{
		memset(w.fwen, 0, sizeof(w.fwen));
		cout << "请输入你想打开的函数" << endl;
		cin >> w.fwen;
		FILE *q;  
		q=fopen(w.fwen,"rb");
		if (q==NULL)
		{
			cout << "打开文件失败!" << endl;
			return false;
		}
		cout << "已打开!" << w.fwen << endl;
		//开始进行文件统计 
		fseek(q, 0, SEEK_END);
		int len = ftell(q);
		rewind(q);
		char *p = new char[len + 1];
		p[len] = 0;
		fread(p, 1, len, q);
		fclose(q);
		cout << p << endl;
		bwenjian b = NULL;
		while (w.i<len)
		{
			w.i = w.get_word(w.i, len, p, w.word);
			if (strlen(w.word) == 0)
			{
				break;
			}
			w.create_wenjian(w.word, b);
		}
		memset(w.fwen, 0, sizeof(w.fwen));
	   cout<<"\n"<<"请输入写你想存储的文件: "<<endl;
		cin >> w.fwen;
		q=fopen(w.fwen,"w");
		if (q == NULL)
		{
			cout << "不能写入文件" << endl;
			return false;
		}
		fprintf(q, "词频统计结果: \n");
		cout<<"词频统计结果:\n"<<endl;
		fprintf(q, "\n");
		w.Order(b,q);
		fprintf(q, "\n");
		fprintf(q, "world总数: %d\n", w.sum);
		printf("world总数:%d\n", w.sum);
		fclose(q);
		cout<<"\n" << "已写入文件:" << w.fwen << endl;
	}
	return 0;
}

代码说明

(运行测试与结果)
图片

图片

总结

这次作业对我个人来说难度是挺大的,因为不会使用Github,在刚刚入手的时候花费了大量时间。还有就是代码实现过程,我们在代码分工编译时遇到了不少问题,尤其是最后代码合并的时候报错层出不穷,所以只有最后决定坐在一起写代码,还不停请教大佬。心得体会就是仍然需要扩大自己的代码量,开始工作之前一定要提前大致想好该怎么弄,有个基本的策划,这样可以节省不少工作时间。然后回去把怎么用GIT软件弄熟悉,尽量减少对他人的询问,提高独立编译的能力。

posted @ 2019-10-16 11:37  SnowYouth  阅读(126)  评论(1编辑  收藏  举报