高校自动排课系统

上传人:时间****91 文档编号:120889814 上传时间:2022-07-18 格式:DOCX 页数:17 大小:13.94KB
收藏 版权申诉 举报 下载
高校自动排课系统_第1页
第1页 / 共17页
高校自动排课系统_第2页
第2页 / 共17页
高校自动排课系统_第3页
第3页 / 共17页
资源描述:

《高校自动排课系统》由会员分享,可在线阅读,更多相关《高校自动排课系统(17页珍藏版)》请在装配图网上搜索。

1、/简化版高校自动排课系统/排课任务简化后涉及:年级专业(教学班级,如计科13)、课程名称、任课教师、上课地点和时间/教学班级简化为不分人数,不分专业方向。/上课教室简化为不分理论课、实验课,不分教室容纳人数,不分与否多媒体。/上学时段简化为:一周五天,周一到周五,白天上课,上午四节,下午四节,/12(8:009:400)、34(10:0011:40)、56(14:0015:40)、78(16:0017:40)/为了便于解决,将五天的所有上学时段用数字019表达/上课地点和时间组合成一种整数数组(位集,bitset),每20个为1组为一种教室的上学时段安排/约束条件:1、教学班级的上学时间不能冲

2、突/2、每个教室不能同步安排多种教学班级上课/3、任课教师的上学时间不能冲突/#include #include #include #include #include #include #include #include using namespace std;/原始数据文献中的每一行数据的数据构造struct schedule string grade_special; /年级专业string course; /课程名称string teacher; /任课教师string total_hour; /总学时string teach_hour; /授课学时string experiment_h

3、our; /实验学时string practice_hour; /课程实践学时string credit; /学分string week_hour; /周学时string start_stop; /起止周string speciality_orientation; /专业方向string person_num; /人数;/排课任务的数据构造struct arrange arrange(string gs, string c, string t, int ct = -1) : grade_special(gs), course(c), teacher(t), classroom_time(ct)

4、 string grade_special;/年级专业string course;/课程名称string teacher;/任课教师/string classroom;/上课地点/string time;/上学时间int classroom_time;/上课地点、时间;/教师倒排表数据构造,通过教师姓名找到该教师的排课状况struct teacher_inverted teacher_inverted(string tea, int cl = -1, int ar = -1) : teacher(tea), class_loc(cl), arrange_loc(ar) string teach

5、er;int class_loc;int arrange_loc;/教室倒排表数据构造,通过教室名称查找该教室的排课状况struct classroom_inverted classroom_inverted(string cr, int cl = -1, int ar = -1) : classroom(cr), class_loc(cl), arrange_loc(ar) string classroom;int class_loc;int arrange_loc;int main(int argc, char* argv) if (argc != 3) cout 程序调用格式错误!n调用

6、格式:csp 排课筹划文献 可用教室文献n;return 0;ifstream infile(argv1);vector plan;string s;getline(infile, s);while (getline(infile, s) schedule sch;istringstream record(s);record sch.grade_special sch.course sch.teacher sch.total_hour sch.teach_hour sch.experiment_hour sch.practice_hour sch.credit sch.week_hour sc

7、h.start_stop sch.speciality_orientation sch.person_num;plan.push_back(sch);infile.close();vectorvector arranges; /整个系的排课安排vector arr; /一种班的排课安排string gs(); /教学班级for (auto it = plan.begin(); it != plan.end(); +it) if (gs != it-grade_special) if (!arr.empty() arranges.push_back(arr); /教学筹划按教学班级顺序排列arr

8、.clear();gs = it-grade_special;arr.push_back(arrange(it-grade_special, it-course, it-teacher);arranges.push_back(arr);vectorvector teachers; /教师数组for (unsigned i = 0; i arranges.size(); +i) for (unsigned j = 0; j arrangesi.size(); +j) string tea = arrangesij.teacher;if (tea = 未定) continue;unsigned k

9、 = 0;for (; k teachers.size(); +k) if (teachersk0.teacher = tea) teachersk.push_back(teacher_inverted(tea, i, j);break;if (k = teachers.size() vector ti; /一种教师的排课信息倒排表ti.push_back(teacher_inverted(tea, i, j);teachers.push_back(ti);const int N = 256;bitset ct; /教室时段的分派状况infile.open(argv2);vector clas

10、srooms;/教室数组while (getline(infile, s) classrooms.push_back(s);infile.close();unsigned arrange_num = plan.size(); /待排课数目unsigned class_num = arranges.size(); /教学班级数目unsigned classroom_num = classrooms.size(); /教室数目uniform_int_distribution u(0, classroom_num * 20 - 1); /为教室时段分派随机数default_random_engine

11、 e(time(0);vector class_loc(class_num, 0); /教学班级已分派状况unsigned class_cur = 0; /待分派的教学班级序号,轮流为每个班级排课,一次安排一种班的一门课for (unsigned n = 0; n arrange_num; +n) unsigned k = u(e);/如果某个班级的排课任务已经分派完毕,则选择下一种班级继续排课while (class_locclass_cur = arrangesclass_cur.size() class_cur = (class_cur + 1) % class_num;/找到待排课任务

12、的相应教师string tea = arrangesclass_curclass_locclass_cur.teacher;unsigned i = 0;for (; i teachers.size(); +i) if (tea = teachersi0.teacher) break;/找出与该教师无时间冲突的时段do do while (ct.test(k) k = (k + 1) % (classroom_num * 20); unsigned m = 0;for (; m class_locclass_cur; +m) if (arrangesclass_curm.classroom_t

13、ime % 20 = k % 20) break;if (m = class_locclass_cur) break; /如果与前面已安排的该班级时间无冲突,则k可用k = (k + 1) % (classroom_num * 20); /如果有冲突则检查下一种教室时段与否可用 while (1);if (i = teachers.size() break; /教师未定unsigned j = 0;for (; j teachersi.size(); +j) int m = arrangesteachersij.class_locteachersij.arrange_loc.classroom

14、_time;if (m != -1 & (m % 20 = k % 20) break;if (j = teachersi.size() break; /如果与该教师的时间无冲突,则k可用k = (k + 1) % (classroom_num * 20); /如果有冲突则检查下一种教室时段与否可用 while (1);/排课arrangesclass_curclass_locclass_cur.classroom_time = k;ct.set(k);/将目前班级的排课号+1+class_locclass_cur;/将待排课班级号+1class_cur = (class_cur + 1) %

15、 class_num;loop: /输出cout tt高校自动排课系统n;cout 选择查询条件:1. 按班级 2. 按教师 3. 按教室n;cout choice;if (-1 = choice) cout 正常退出系统n;return 0;else if (1 = choice) unsigned i = 0, j = 0;for (; i arranges.size(); +i) cout i . arrangesi0.grade_special t;if (i + 1) % 4 = 0) cout n;cout n;do cout i;if (i = -1) break;else if

16、 (i = arranges.size() cout 非法选择n;continue;int class_table45;for (unsigned m = 0; m 4; +m)for (unsigned n = 0; n 5; +n)class_tablemn = -1;for (j = 0; j arrangesi.size(); +j) unsigned m = arrangesij.classroom_time % 20;class_tablem / 5m % 5 = j;string time_slot4 = 8:00-9:40, 10:00-11:40, 14:00-15:40,

17、16:00-17:40 ;cout setiosflags(ios_base:left);cout setw(54) arrangesi0.grade_special 班级课程表n;cout =n;cout setw(12) setw(24) 星期一 setw(24) 星期二 setw(24) 星期三 setw(24) 星期四 setw(24) 星期五 n;for (unsigned m = 0; m 4; +m) if (m % 2 = 0)cout =n;elsecout -n;for (unsigned m1 = 0; m1 3; +m1) if (m1 = 1)cout setw(12

18、) time_slotm;elsecout setw(12) ;for (unsigned n = 0; n 5; +n) if (class_tablemn != -1) j = class_tablemn;if (m1 = 0)cout setw(24) arrangesij.course;else if (m1 = 1)cout setw(24) classroomsarrangesij.classroom_time / 20;elsecout setw(24) arrangesij.teacher;elsecout setw(24) ;cout n;cout =n;cout reset

19、iosflags(ios_base:left); while (1);else if (2 = choice) unsigned i = 0, j = 0;for (; i teachers.size(); +i) cout i . teachersi0.teacher t;if (i + 1) % 4 = 0) cout n;cout n;do cout i;if (i = -1) break;else if (i = teachers.size() cout 非法选择n;continue;int class_table45;for (unsigned m = 0; m 4; +m)for

20、(unsigned n = 0; n 5; +n)class_tablemn = -1;for (j = 0; j teachersi.size(); +j) unsigned m = arrangesteachersij.class_locteachersij.arrange_loc.classroom_time / 20;class_tablem / 5m % 5 = j;string time_slot4 = 8:00-9:40, 10:00-11:40, 14:00-15:40, 16:00-17:40 ;cout setiosflags(ios_base:left);cout set

21、w(54) teachersi0.teacher 教师课程表n;cout =n;cout setw(12) setw(24) 星期一 setw(24) 星期二 setw(24) 星期三 setw(24) 星期四 setw(24) 星期五 n;for (unsigned m = 0; m 4; +m) if (m % 2 = 0)cout =n;elsecout -n;for (unsigned m1 = 0; m1 3; +m1) if (m1 = 1)cout setw(12) time_slotm;elsecout setw(12) ;for (unsigned n = 0; n 5; +

22、n) if (class_tablemn != -1) j = class_tablemn;if (m1 = 0)cout setw(24) arrangesteachersij.class_locteachersij.arrange_loc.course;else if (m1 = 1)cout setw(24) classroomsarrangesteachersij.class_locteachersij.arrange_loc.classroom_time / 20;elsecout setw(24) arrangesteachersij.class_locteachersij.arr

23、ange_loc.grade_special;elsecout setw(24) ;cout n;cout =n;cout resetiosflags(ios_base:left); while (1); else if (3 = choice) vectorvector classroomes;for (unsigned i = 0; i classrooms.size(); +i) classroom_inverted cr(classroomsi);vector crs;crs.push_back(cr);classroomes.push_back(crs);unsigned i = 0

24、, j = 0;for (i = 0; i arranges.size(); +i) for (j = 0; j arrangesi.size(); +j) unsigned m = arrangesij.classroom_time;if (classroomesm / 200.class_loc = -1) classroomesm / 200.class_loc = i;classroomesm / 200.arrange_loc = j;else classroomesm / 20.push_back(classroom_inverted(classroomesm / 200.clas

25、sroom, i, j);for (i = 0; i classrooms.size(); +i) cout i . classroomsi t;if (i + 1) % 4 = 0) cout n;cout n;do cout i;if (i = -1) break;else if (i = classrooms.size() cout 非法选择n;continue;int class_table45;for (unsigned m = 0; m 4; +m)for (unsigned n = 0; n 5; +n)class_tablemn = -1;for (j = 0; j class

26、roomesi.size(); +j) unsigned m = arrangesclassroomesij.class_locclassroomesij.arrange_loc.classroom_time % 20;class_tablem / 5m % 5 = j;string time_slot4 = 8:00-9:40, 10:00-11:40, 14:00-15:40, 16:00-17:40 ;cout setiosflags(ios_base:left);cout setw(54) classroomsi 教室课程表n;cout =n;cout setw(12) setw(24

27、) 星期一 setw(24) 星期二 setw(24) 星期三 setw(24) 星期四 setw(24) 星期五 n;for (unsigned m = 0; m 4; +m) if (m % 2 = 0)cout =n;elsecout -n;for (unsigned m1 = 0; m1 3; +m1) if (m1 = 1)cout setw(12) time_slotm;elsecout setw(12) ;for (unsigned n = 0; n 5; +n) if (class_tablemn != -1) j = class_tablemn;if (m1 = 0)cout

28、 setw(24) arrangesclassroomesij.class_locclassroomesij.arrange_loc.course;else if (m1 = 1)cout setw(24) arrangesclassroomesij.class_locclassroomesij.arrange_loc.teacher;elsecout setw(24) arrangesclassroomesij.class_locclassroomesij.arrange_loc.grade_special;elsecout setw(24) ;cout n;cout =n;cout resetiosflags(ios_base:left); while (1);else cout 非法选择n;goto loop;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!