1 ///
2 ///取最优的时间片id3 ///
4 /// 教室id
5 /// 星期id
6 /// 授课id
7 /// 班级id
8 /// 教室id(S)
9 ///
10 private int GetBestTime(int roomid,int wk,int tlid,intclid)11 {12 //定义初始化存放已排的时间片的数组
13 ArrayList uTime = newArrayList();14 //定义初始化存放空时间片的数组
15 ArrayList nTime = newArrayList();16
17 for (int i = 1; i <= 20; i++)18 {19 if (i != 7 && i != 8)20 {21 //==判断当前时间片是否为空
22 int timeid =wbgd.GetTimeID(wk, i);23 int rtlid =wbgd.GetTlIDByRoomATime(roomid, timeid);24 if (rtlid == 0)25 {26 //检测冲突
27 bool flag = true;28 DataTable dtteach =wbgd.GetTeachNameByTLID(tlid);29 for (int t = 0; t < dtteach.Rows.Count; t++)30 {31 int teachid = int.Parse(dtteach.Rows[t]["id"].ToString());32 if (!wbgd.CheckClash(timeid, teachid, roomid, clid))33 {34 flag = false;35 }36 }37 if(flag)38 {39 //加入空时间片数组
40 nTime.Add(timeid);41 }42 else
43 {44 continue;45 }46 }47 else if (rtlid ==tlid)48 {49 //加入已排时间片数组
50 uTime.Add(timeid);51 }52 else
53 {54 continue;55 }56 }57 }58 if (nTime.Count == 0)59 {60 return 0;61 }62 //判断这门授课已经插入了几条记录
63 if (uTime.Count == 0)64 {65 //如果没有则取最近的
66 return (int)nTime[0];67 }68 else if (uTime.Count == 1)69 {70 //如果有一条则取最远的
71
72 return (int)nTime[nTime.Count - 1];73
74 }75 else
76 {77 //否则进入已下循环,求出权值最大的时间片78 //max 存放最大的权值,index 存放最大权值空时间片数组的索引
79 int max = 0,index=0;80 for (int p = 0; p < nTime.Count; p++)81 {82 //m存放uTime中略大于nTine[i]的数83 //l存放uTime中略小于nTine[i]的数
84 intm, l;85 m = (int)uTime[1];86 l = (int)uTime[0];87 for (int j = 0; j < uTime.Count; j++)88 {89 if ((int)nTime[p] < (int)uTime[j])90 {91 m = (int)uTime[j];92 l = (int)uTime[j - 1];93 break;94 }95 }96 //如果权值大于max 则记录新的权值和索引
97 if (Math.Abs(m - (int)nTime[p]) *Math.Abs ((int)nTime[p] - l) >max)98 {99 max = Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] -l);100 index =p;101 }102 }103 //返回权值最大的时间片id
104 return (int)nTime[index];105 }106 }107
108
109 ///
110 ///取最优的连课时间片id111 ///
112 ///
113 ///
114 ///
115 ///
116 ///
117 private int GetBestTimeLK(int roomid, int wk, int tlid, intclid)118 {119 //定义初始化存放已排的时间片的数组
120 ArrayList uTime = newArrayList();121 //定义初始化存放空时间片的数组
122 ArrayList nTime = newArrayList();123
124 for (int i = 1; i <= 20; i+=2)125 {126 if (i != 7)127 {128 //==判断当前时间片是否为空
129 int timeid1 =wbgd.GetTimeID(wk, i);130 int timeid2 = wbgd.GetTimeID(wk, i + 1);131 int rtlid1 =wbgd.GetTlIDByRoomATime(roomid, timeid1);132 int rtlid2 =wbgd.GetTlIDByRoomATime(roomid, timeid2);133 if (rtlid1 == 0 && rtlid2 == 0)134 {135 //检测冲突
136 bool flag = true;137 DataTable dtteach =wbgd.GetTeachNameByTLID(tlid);138 for (int t = 0; t < dtteach.Rows.Count; t++)139 {140 int teachid = int.Parse(dtteach.Rows[t]["id"].ToString());141 if ((!wbgd.CheckClash(timeid1, teachid, roomid, clid)) && (!wbgd.CheckClash(timeid2, teachid, roomid, clid)))142 {143 flag = false;144 }145 }146 if(flag)147 {148 //加入空时间片数组
149 nTime.Add(timeid1);150 }151
152 }153 else if (rtlid1 == tlid || rtlid2 ==tlid)154 {155 //加入已排时间片数组
156 uTime.Add(timeid1);157 }158 else
159 {160 continue;161 }162 }163 }164 if (nTime.Count == 0)165 {166 return 0;167 }168 //判断这门授课已经插入了几条记录
169 if (uTime.Count == 0)170 {171 //如果没有则取最近的
172 return (int)nTime[0];173 }174 else if (uTime.Count == 1)175 {176 //如果有一条则取最远的
177 return (int)nTime[nTime.Count - 1];178 }179 else
180 {181 //否则进入已下循环,求出权值最大的时间片182 //max 存放最大的权值,index 存放最大权值空时间片数组的索引
183 int max = 0, index = 0;184 for (int p = 0;p < nTime.Count; p++)185 {186 int m = 0, l = 0;187 m = (int)uTime[1];188 l = (int)uTime[0];189 for (int j = 0; j < uTime.Count; j++)190 {191 if ((int)nTime[p] < (int)uTime[j])192 {193 m = (int)uTime[j];194 l = (int)uTime[j - 1];195 break;196 }197 }198 //如果权值大于max 则记录新的权值和索引
199 if (Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] - l) >max)200 {201 max = Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] -l);202 index =p;203 }204 }205 //返回权值最大的时间片id
206 return (int)nTime[index];207 }208 }209
210
211 ///
212 ///检测授课id是否有变动213 ///
214 /// 授课表
215 /// 是否有变动