日期:2014-05-17  浏览次数:21103 次

实习分配系统(想模拟高考分配的系统)一些算法不太会 求大神指点
用软件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
    一边凉快去();
}

输出();