实习分配系统(想模拟高考分配的系统)一些算法不太会 求大神指点
用软件VS2008C# 和 SQL SERVER2008
给各位大神大概介绍一下要实现的功能吧
就是和高考报志愿一样 我们专业40个人要去实习了
每人能填报3个想去的实习单位(分为第一第二第三志愿)
先有7家公司供选择,7家公司所需人数加起来刚好40人。
我想用的方法是已成绩为参考对象,把40个人按成绩从高到低排列,然后逐个分配。
现在已经把40个人的所有资料包括成绩,3个志愿等等录入数据库。C#也链接好了数据库。
想问大神们的就是如何按成绩高低把40个人的相关信息提取出来,然后逐个分配。
望指点
------解决方案--------------------
看不懂要求,我随便写点。
按成绩顺序在数据库排序后获得,你会用SQL语言排序吧。
如果你想把志愿加进去,可以这样,模拟一个临时表,有几个字段,学号,成绩,志愿编号(就是1、2、3),将你原来的表中的数据,即每一行拆开成新表中的三行(你不会?),按编号,成绩组合排序,获得表。
以上是数据库操作。
然后是算法,按编号、成绩排序后,首先循环编号,再按成绩高至低取N位,每取一位,将DataTable中的该学生的三行数据删除,继续刚才的过程,直到N位已满,再按新的编号继续刚才的过程。
------解决方案--------------------这东西如果你数据库设计比较合理的话,查询和显示都不太困难
查询先不说了,这个和你的表结构有关,你先把表结构列出来,我们在处理
而显示部分,可以用交叉透视表控件
ps:和上面一样,俺们只说查询和显示,至于分配俺们就不说了,这个和你分配的业务规则有关,因为实际上大部分这种分类都是手工挑选,机器一般只列查询结果,并不参与实际分配
------解决方案--------------------按7家公司循环分配,比如第一家公司A,循环一次1-40(依据分数高低来排),查找每个人的志愿,如果该人志愿含有A公司,即分配,做个标识!!!以此循环完7家公司,剩余没有分配出去的人员再手工处理!
------解决方案--------------------按部就班的根据需求写这个算法不就好了吗
------解决方案--------------------如果需求上没有说明志愿分配原则的话,你可以采取先报名先得的原则,先按报名时间排序
如果遇到三个志愿都已经满员的,则先暂时不分配,把后面的分配完
最后将没有分配到的人员随机分配到剩余的单位
------解决方案--------------------
下面是你的原话:
就是先把40个人按分数从高到低排好
然后从第一个(也就是分数最高的)的学生开始分配,看他的第一志愿是什么,然后非配到该志愿。
然后看第二个,以此类推。
假如看到第N个时,他的第一志愿已经够人了,不录取了,那就看他第二志愿,假如还有空缺,就非配到该志愿,要是还是够人了,就看第三志愿。若3个都满了,则先不分配。
一直到第40个人。
这就是分配规律,现在就想说这个算法该怎么在程序里实现
=============
“按部就班的根据需求写这个算法不就好了吗”,我觉得这话一点问题都没有啊,因为你的描述基本上已经是伪代码了啊。
按成绩排序();
for 第一名 to 第四十名
{
if (第一志愿没满)
分配(第一志愿);
else if (第二志愿没满)
分配(第二志愿);
else if (第三志愿没满)
分配(第三志愿);
else
一边凉快去();
}
输出();