结对编程
结对伙伴学号 | 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软件弄熟悉,尽量减少对他人的询问,提高独立编译的能力。