第二次结对编程作业——毕业导师智能匹配

结对人员 031402606 贺翎 031402340 牛妍辉

问题描述

编码实现一个毕设导师的智能匹配的程序。提供输入包括:30个老师(包含带学生数的要求的上限,单个数值,在[0,8]内),100个学生(包含绩点信息),每个学生有5个导师志愿(志愿的导师可以重复但不能空缺)。实现一个智能自动分配算法,根据输入信息,输出导师和学生间的匹配信息(一个学生只能有一个确认导师,一个导师可以带少于等于其要求的学生数的学生)及未被分配到学生的导师 和 未被导师选中的学生。

问题分析

开始前的讨论

1.随机生成多组信息
2.数据的输入方式是TXT还是数据库
3.实现编程语言的选择
4.学生教师智能匹配算法的实现原则
5.智能匹配算法的效果评价

讨论的结果

1.student与teacher中要设置的属性以及命名的规范化,随机生成的信息要贴近现实
2.采用TXT的数据输入方式
3.java语言实现
4.参考稳定婚姻算法
5.引用幸福指数与学生志愿命中率

问题处理流程

1021338-20160930204902031-1297670974.png

算法描述

参考:http://blog.csdn.net/cscmaker/article/details/8291131
我们在这篇博客中获得灵感:

首先学生与导师两个之间的联系为n:n;学生与导师之间的互选要尽量满足他们的喜好;在这里,我们小组规定学生对于导师的喜好是取决于志愿的顺序,而导师对于学生的选择仅仅凭借绩点(其实这里要改进一下,绩点不能代表学生的全部实力),由此,产生互选的两个集合。

以下是实现的步骤:

1.确定志愿轮数
2.遍历一遍学生selected属性,挑出其中未被分配的学生
3.将选择同一导师的学生按照绩点高低排序,截止到教师上限人数的学生即被选中
4.如果导师人数已满,该生绩点要与选择该导师最低绩点的学生(假设学生b)进行比较,如果大于最低绩点,则被选中,b则重置selected属性,重新分配导师。
5.达到循环学生填写的总志愿数,退出循环。

关键代码实现

实现语言java 开发工具 eclipse
主页菜单类 mainMenu

public class mainMenu {
    public static void main(String args[]){
     String choice=null;
     while(true){                               //输出主菜单供用户选择
            System.out.print("Student&Teacher Match - Main Menu\n"
                    +"================================================================\n"
                    +"1 -current records\n"
                    +"2 -enter the current student teachers' information\n"
                    +"3 -Print result\n\n"
                    +"Q - Quit\n\n"
                    +"Your Selection : ");
            choice=Tool.input_string().trim();
            if("".equals(choice)){
                //用户没有任何输入
                System.out.print("No selection entered.Press Enter to continue...");
                if(Tool.input_string().trim().equals(""))
                    continue;
            }
            if("1".equals(choice))
                txtRead.test(); 
            else if("2".equals(choice))
                stuTeaRandom.random();
            else if("3".equals(choice)){
                Tool.match.stuTeaReasult();
                 txtResult.ansTxt();
            }
                 else if("Q".equals(choice)||"q".equals(choice))
                        //退出程序
                        break;
                    else {
                        //用户输入错误选择
                        System.out.print("Invalid code! Press Enter to continue...");
                        if(Tool.input_string().equals(""))
                            continue;
                    }
                    System.out.println("\n\nPress Enter to continue...");   
                    if(Tool.input_string().equals(""))
                        continue;
             
             }
    }
}

在这里输入"1":主要是显示当前TXT文档里在线教师与学生数
输入"2":主要是产生随机相关信息
输入"3":主要是对当前用户进行智能匹配
详情请见流程图


People 类 算法所需的数据结构的类

public class Teacher {
public int id;
public int stu[];
public int numMax;
public int numStu=0;
}       
public class Student {
    public int id;
    public int tea;
    public String name;
    public double grade;
    public boolean selected=false;
    public int chooseTea[]=new int [5];

}

随机生成相关用户的信息

public class randomData {
        int sum=0;
        int num;
        Random r1=new Random();
        for(int i=0;i<numTea;i++){                                 //随机生成教师信息
            num=r1.nextInt(numMax+1);
            while(numStu-numSum-num>numMax*(numTea-i-1))
                num=r1.nextInt(num_max+1);
            teachers[i].numMax=num;
            numSum+=num;
        }
        
        for(int i=0;i<numStu;i++){                             //随即生成学生信息
            students[i].grade=r1.nextFloat()*3+1.5;        //随机生成绩点在1.5-4.5之间
            for(int j=0;j<5;j++)
                students[i].chooseTeacher[j]=r1.nextInt(numTea)+1;
        }
    
}

这里首先输入老师的数量与学生的数量,然后采用此randomData()生成教师的职工号,教师所定的学生上限人数;生成学生的学号,所选志愿,与绩点


distribution 方法类

//稳定婚姻法改
public void Distribution(){
        int nowR;
        int min=0;                         
        double minG;
        int minId=0;
        int tmpStuId;
        int circulation=0;
        for(circulation=0;circulation<5;circulation++){
            for(int i=0;i<numStu;i++){
                if(students[i].selected==false){                          //未被导师选中的学生
                    nowR=students[i].chooseTeacher[circulation]-1;
                    if(teachers[nowR].numStu<teachers[nowR].numMax){      //导师限制人数未满
                        teachers[nowR].stu[teachers[nowR].numStu++]=students[i].id;
                        students[i].tea=teachers[nowR].id;
                        students[i].selected=true;
                    }
                    else {                                                   //导师限制人数已满
                        minG=5;
                        for(int k=0;k<teachers[nowR].numStu;k++){
                            tmpStuId=teachers[nowR].stu[k]-1;
                            if(students[tmpStuId].grade<minG){
                                minG=students[tmpStuId].grade;
                                min=tmpStuId;
                                minId=k;
                            }
                        }
                        if(minG<students[i].grade){
                            students[min].selected=false;
                            students[i].selected=true;
                            students[i].tea=teachers[nowR].id;
                            teachers[nowR].stu[minId]=students[i].id;
                        }
                    }
                }
            }
        }
    }

运行结果

Student&Teacher Match - Main Menu
================================================================
1 -current records
2 -enter the current student teachers' information
3 -Print result

Q - Quit

Your Selection : 1
num of teacher:30
num of student:100


Press Enter to continue...

enter 2
1021338-20161002082854016-654470734.png1021338-20161002073304421-1495706517.png

enter 3
1021338-20161002073331392-867298598.png1021338-20161002073407472-1697067259.png


算法效率评估

测试数据第一组 30:100
1021338-20161002081346937-1094339555.png
测试数据第二组 300:1000
1021338-20161002081407954-784480088.png
测试数据第三组 3000:10000
1021338-20161002081331311-994414561.png

改良后的稳定婚姻算法,测试数据越大,平均志愿数越高,但是相对而言,我们的匹配度有所下滑,考虑到我们算法的实现,缺少导师热度,在一定程度上给予冷门导师和底绩点学生的人文关怀不够高,在此后我们会对此进行改良,尽快完善我们的算法。


项目链接

project coding.net链接

结对编程感受

贺翎 :编程作业对我来说是个挺大的挑战,因为之前没做过项目开发之类的,所以都是边做边学,大部分的工作都是队友动手的,我在旁边观看,感觉在一定程度上拖了队友后腿,才使作业这么晚完成。还有git在之前没学好怎么使用,使得两人在在最后要提交阶段有点不知所措。之后的作业一定要提前下好功夫,尽快学习好项目开发的基本东西。

牛妍辉:结对编程这项作业我们并没有做到最好,由于搭档告诉我之前没怎么用过java写项目,所以在编程一方面工作量没有平衡好,在git上的学习对我来说是一项极大地挑战,我想可能是我的学习方法出现了问题,在使用命令行几乎让我崩溃,最后最后无奈手动录入,但是就是这么不认命,在这一天内决定再次挑战,主保佑我成功,结对上感觉到大家交流不是很多,可能是彼此都比较内向吧,个人觉得如果加强沟通,在算法上我们可能会做的更好,当然,后续算法的实现版本也会不断完善。我的大致思路本来是类似于一个CUI项目,希望有一种交互过程,当然功能目前不全,特色还是比较多的,但估计我们有的有些也有,比如随机数据的随机上并没有写死,用户可根据自己的测试手动输入,在算法自动匹配后,还有相关的平均志愿 匹配度对当前的匹配进行一个评估,但是这些都不是什么特别的特色,我们主要还是一个功能的整合,主界面上已将将其大致分为4部分,这些帮助我们很好的回顾了自己写的代码。希望下次能做到更好,也对队友表示抱歉,感觉没有和他沟通好。

转载于:https://www.cnblogs.com/ACE0404/p/5924841.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值