031402339 林锦
031402342 许玲玲 ----------功能分析
这次作业的要求是要求做一个毕设导师智能匹配的程序:30个导师,100个学生,老师可带最多8个学生,学生有5个志愿选择(老师可重复),要求未被分配到学生的导师 和 未被导师选中的学生尽可能的少。
此次作业实现的程序语言我们选择的是C/C++,所以我们的实现步骤有以下几点:
- 1.随机生成两个文本文件:学生选择导师汇总文件(student.txt),老师想带的学生数汇总文件(teacher.txt);
- 2.将两个文件导入到所编写的C/C++程序中,并进行选择操作;
- 3.将选导师结果送入新的文件里面(out.txt);
实现思路
- Student.txt和teacher.txt的实现 1.C++随机生成数:rand()函数; 2.C++文件的读写操作;
- 将两个文件导入C/C++程序中
- 程序算法的编程
- 将最终结果导入到out.txt
算法的实现过程
实现学生和导师未被选中的人数尽可能少
- 根据老师的可选学生人数,从小到大排序
- 根据学生的可选导师人数,从小到大排序,遍历这些学生: (1) 学生可选导师人数少的优先被选中; (2)如果学生可选导师人数相等,则按照绩点高的优先被选中。
代码的规范性
看了《构建之法》,我们觉得代码的规范性就是能够让别人也可以看懂你所写的代码,但是,讲道理,就算懂这个道理,如果是多个人编程的话,还是很难在编程中实现代码的规范性。
源码的链接
算法评估
- 根据随机生成的程序,100个学生里面有11个未选到导师,30个导师里面有3个导师未分配到学生,其中有2个导师的计划学生数是0,有另一位老师可选学生数为0,所以剩下的学生可能是老师计划数为0(随机问题)或者竞争压力大,老师的计划学生数总额是125,还剩36个名额,学生可进行二轮选择。我们只进行了一组数据测试,应多进行几组测试。
我们的算法排序是按照可选老师数由小到大,再按绩点排序,有可能出现绩点高却选不到导师的情况,我们做了图表分析,由图表可知没有导师(纵轴为0)的相应的绩点也较小,绩点较高的都有分配到导师,所以这个问题不大。
PSP表格
总的来说,这次效率比上次提高了很多,O(∩_∩)O哈哈~。
结对过程
- 这是我们在分工各自敲代码的情景
结对心得
- 我的感受: 这次编程我们是分工编写不同模块,模块编写过程中有个人编码的时候,也有结对编程,一个在旁边看,一个敲,遇到问题讨论,轮流编程。旁边有个人一起敲代码的感觉很nice,而且是第二次结对,有问题一起解决,压力不会那么大,有点压力分担的感觉。结对编程,两双眼睛对着一段代码,查bug的效率比较高。分工编码,再模块整合,效率也是有提高的,一个人负责整个程序,要考虑到方方面面,难免漏了,分工有所专一减轻了工作压力,提高了质量。 "队"友说她对这次作业的热情没有上次结对作业高,因为不大喜欢编码,如果不是这次结对编程作业,做下来敲半天代码了的情形已经很久没有发生了。她主要写随机和输入输出模块,这个模块的编码她是不熟悉的,所以是一边百度,一边查书学习写出来的,最后完成了,真的很棒,不管是不是作业所迫的结果,我的“队”友最后完成了,她还是很开心的。“队”友对问题的态度很积极,一起想办法解决问题,提高了我们的工作质量。四个字总结就是“合作愉快”。
- "队"友的感受 这次作业是编程,对于我这个C/C++菜鸡来说,难度很大,作为一个计算机的学生,不会编程,确实是个大问题。对于我个人来说,算法太难了,所以我觉得我的队友真是太厉害了,能把这么复杂的东西简单化讲给我听,然后和队友一起讨论,他提出可以用什么什么方式来做,我觉得非常的棒,她在敲具体的解决算法的时候,我在旁边看,遇到了不懂的东西,她还会认真的给我讲解,感觉又学到了一点技术(开心.jpg)。 我觉得结对编程最好的就是两个人都不会,两个人一起百度,查书,然后再一起学习,虽然分工不一样,但是都把两个人学习的内容也学习了呢。学着学着我们的感情也比以前深厚了呢。(^_^)。
- 编程总结(两个人) (1)关于代码规范性,在编程之前,应该先把要用到的变量,函数名等都要先约定名称参数等,不然的话,后期整合太痛苦了。我们之前有约定好一部分,但是不够详细,导致后面整合的时候,花费了大量的时间。 (2)合作很愉快。