天天看点

第六次作业--结对编程第二次

结对情况

松雄 126

显东 114

队友博客链接

显东博客

GitHub 项目链接(不是主页)

https://github.com/mangoqiqi/test/tree/master/testjson

设计说明

接口设计(API)

bool wish(DDepartment *d, SStudent *s)//判断部门是否满足学生志愿
 bool right(DDepartment *d, SStudent *s)//判断学生是否与部门的活动时间满足
 match(int D_num, int S_num)//进行匹配
           

内部实现设计(类图)

第六次作业--结对编程第二次

匹配算法设计(思想/流程等)

1.匹配的依据是:

1.志愿部门

2.学生空闲时间与部门的活动时间(学生空闲时间能够满足部门其中一项活动即可)

-

match算法

通调用wish()函数判断志愿和right()函数判断是否满足时间要求

void match(int D_num, int S_num)
{
	int i, j, k = 0;
	bool  b;
	for (i = 0; i < D_num; ++i)
	{
		for (j = 0; j < S_num; ++j)
		{
			b = right(&D[i], &S[j]);
			if ( b)
			{
				Department_view[D[i].department_no].append(S[j].student_no);
				Student_view[S[j].student_no].append(D[i].department_no);
				//repeat[i][j] = false;
				k++;
			}
		}
		k = 0;
	}
}
           

志愿判断

bool wish(DDepartment *d, SStudent *s)
{
	int i;
	for (i = 0; i < s->wd; ++i)
	{
		if (d->department_no == s->Wish_department[i])
		{
			return true;
		}
	}
	return false;
}
           

时间判断

bool right(DDepartment *d, SStudent *s)
	{
		if (s->hbmatch < 5 && d->hbmatch < d->member_limit && wish(d, s))
	{
		int i, j;
		for (i = 0; i < d->dschedules_num; ++i)
		{
			for (j = 0; j < s->sschedules_num; ++j)
			{
				if (d->event_schedules[i] == s->event_schedules[j])
				{
					//
					s->event_schedules[j] = " ";
					d->hbmatch++;
					s->hbmatch++;
					return true;
				}
			}
		}
		//
		
		return false;
	}
	return false;
}
           

2.算法实现

1.遍历各个部门其中进行遍历学生匹配,如果部门的人限已满则continue

2.遍历的学生如果参加部门限满了则continue

3.满足人限的人员进行时间判断,如果部门活动时间小于该生任一空闲时间这收入

测试数据如何生成?

学生:

学号
学生绩点   
标签  
空闲时间  
部门意愿     // 最多不超过5个,数据为部门编号 
           

部门:

部门编号    
部门需要的学生数  // 15
标签   
工作时间://以两个小时为单位比如“Monday 8:00~10:00” 
           

如何评价自己的匹配算法?

匹配算法效率还可以

关键代码

随机生成编号

double Random_gra()
{
	return (1 + (double)(rand() / (double)RAND_MAX) + (double)(rand() / (double)RAND_MAX) + (double)(rand() / (double)RAND_MAX));
}int Ramdom_one_to_sev()
{
	return (rand() % 7 + 1);
}
string int_to_string(int x, int num)
{
	string tmp;
	int j;
	if (num >= 1000)x -= 3;
	if (num > 9 && num < 100)x -= 2;
	else if (num >= 100)x -= 3;
	else x -= 1;
	for (j = 0; j < x; ++j)tmp += "0";
	tmp += to_string(num);
	return tmp;
}
           

随机生成时间

string Schedule(int map[][7])
{
	int i, j;
	string str;
	i = (rand() % 7);
	j = (rand() % 7);
	if (map[i][j] == 0)
	{
		str = Schedules[i][j];
		map[i][j] = 1;
		return str;
	}
	else  return Schedule(map);

}
           

随机生成标签

string Tag(int *map1)
{
	int i;
	string str;
	i = (rand() % 15);
	if (map1[i] == 0)
	{
		str = Tags[i];
		map1[i] = 1;
		return str;
	}
	else return Tag(map1);
}

           

运行及测试结果展示

cmd运行结果

xxx.exe -c 200 20 //  -c   生成随机数据,第一个数据 studengt数量,第二个数据department数量
xxx.exe -m 200 20 //  -m 进行数据匹配,第一个数据 studengt数量,第二个数据department数量
           
第六次作业--结对编程第二次

生成数据

第六次作业--结对编程第二次

测试200位同学,20个部门的情况

数据

运行结果

测试500位同学,30个部门的情况

测试1000位同学,50个部门的情况

测试5000位同学,100个部门的情况

效能分析报告

第六次作业--结对编程第二次

遇到的困难及解决方法

困难描述

生成的生成随机数据有重复

做过哪些尝试

数据查重

代码排查

更换生成算法

是否解决

OK

有何收获

在进行多次应用Json::value变量时候没有进行

Json::value::clear()

对队友的评价

有哪些好的地方值得学习

代码写的6,写的条理清晰,简洁明了

善于发现代码的问题,debug技术一流

能够很好的设计代码和实现代码

长得还帅

有哪些不好或者需要改进的地方

问题的话就是太不爱惜身体!代码打到晚上3,4点。

PSP表格

  • PSP

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

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时 ) 累计学习耗时(小时) 重要成长
第一周 725 github的使用,项目分析技巧等
第二周 200 300 436 1161 学习了aurex rp的使用,以及php的入门
第三周 600 1761 学习了php,thinkPHP
第四周 800 2561 继续学习php
第五周 500 1300 1273 3834 学会了Jsoncpp的使用