第六次作业--结对编程
结对情况
显东 114
松雄 126
队友博客链接
GitHub 项目链接(不是主页)
设计说明
接口设计(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的使用 |