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


    结对情况

    松雄 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的使用
  • 相关阅读:
    LevelDB的源码阅读(二) Open操作
    LevelDB的源码阅读(一)
    Linux上leveldb的安装和使用
    Linux下安装jdk8的详细步骤
    Linux下用ls和du命令查看文件以及文件夹大小
    pytorch实现VAE
    Caffe实现VAE
    pytorch实现DCGAN、pix2pix、DiscoGAN、CycleGAN、BEGAN以及VAE
    PyTorch教程之Training a classifier
    PyTorch教程之Neural Networks
  • 原文地址:https://www.cnblogs.com/BLLeen/p/7674136.html
Copyright © 2020-2023  润新知