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

结对情况

松雄 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 · 设计复审 (和同事审核设计文档) 10 10
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 60 30
· Design · 具体设计 30 45
· Coding · 具体编码 360 480
· Code Review · 代码复审 100 60
· Test · 测试(自我测试,修改代码,提交修改) 120 240
Reporting 报告 20
· Test Report · 测试报告 30 20
· Size Measurement · 计算工作量 5 3
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 40
合计 815 973
  • 学习进度条

第N周 新增代码(行) 累计代码(行) 本周学习耗时(小时 ) 累计学习耗时(小时) 重要成长
第一周 100 100 725 725 github的使用,项目分析技巧等
第二周 200 300 436 1161 学习了aurex rp的使用,以及php的入门
第三周 300 600 600 1761 学习了php,thinkPHP
第四周 200 800 800 2561 继续学习php
第五周 500 1300 1273 3834 学会了Jsoncpp的使用
posted @ 2017-10-15 20:52  我觉得ok  阅读(287)  评论(0编辑  收藏  举报