高校自動排課系統(tǒng)_第1頁
高校自動排課系統(tǒng)_第2頁
高校自動排課系統(tǒng)_第3頁
高校自動排課系統(tǒng)_第4頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、_/簡化版高校自動排課系統(tǒng)/排課任務(wù)簡化后包含:年級專業(yè)(教學(xué)班級,如計科13)、課程名稱、任課教師、上課地點和時間/教學(xué)班級簡化為不分人數(shù),不分專業(yè)方向。/上課教室簡化為不分理論課、實驗課,不分教室容納人數(shù),不分是否多媒體。/上課時段簡化為:一周五天,周一到周五,白天上課,上午四節(jié),下午四節(jié),/12(8:009:400)、 34(10:0011:40)、 56(14:0015:40)、 78(16:0017:40)/為了便于處理,將五天的所有上課時段用數(shù)字019 表示/上課地點和時間組合成一個整數(shù)數(shù)組(位集,bitset ),每 20 個為 1 組為一個教室的上課時段安排/約束條件: 1、教

2、學(xué)班級的上課時間不能沖突/2 、每個教室不能同時安排多個教學(xué)班級上課/3 、任課教師的上課時間不能沖突/#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>#include <bitset>#include <random>#include <iomanip>精品資料_using namespace std;/原始數(shù)據(jù)文件中的每一行數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)struct schedule

3、 string grade_special; /年級專業(yè)string course; /課程名稱string teacher; /任課教師string total_hour; /總學(xué)時string teach_hour; /講課學(xué)時string experiment_hour; /實驗學(xué)時stringpractice_hour; /課程實踐學(xué)時string credit; /學(xué)分string week_hour; /周學(xué)時string start_stop; /起止周string speciality_orientation; /專業(yè)方向string person_num; /人數(shù);/排課任務(wù)

4、的數(shù)據(jù)結(jié)構(gòu)struct arrange arrange(stringgs,stringc,stringt,int ct= -1): grade_special(gs),course(c),精品資料_teacher(t), classroom_time(ct) string grade_special;/年級專業(yè)string course;/課程名稱string teacher;/任課教師/string classroom;/上課地點/string time;/上課時間int classroom_time;/上課地點、時間;/教師倒排表數(shù)據(jù)結(jié)構(gòu),通過教師姓名找到該教師的排課情況structtea

5、cher_inverted teacher_inverted(stringtea,intcl = -1,intar= -1): teacher(tea),class_loc(cl),arrange_loc(ar) string teacher;int class_loc;int arrange_loc;/教室倒排表數(shù)據(jù)結(jié)構(gòu),通過教室名稱查找該教室的排課情況struct classroom_inverted classroom_inverted(stringcr, int cl = -1, int ar = -1) : classroom(cr),class_loc(cl),arrange_lo

6、c(ar) 精品資料_string classroom;int class_loc;int arrange_loc;int main(int argc, char* argv) if (argc != 3) cout << " 程序調(diào)用格式錯誤!n 調(diào)用格式: csp 排課計劃文件可用教室文件n"return 0;ifstream infile(argv1);vector<schedule> plan;string s;getline(infile, s);while (getline(infile, s) schedule sch;istrings

7、tream 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 >> sch.start_stop精品資料_>> sch.speciality_orientation >>

8、; sch.person_num; plan.push_back(sch);infile.close();vector<vector<arrange>> arranges; /整個系的排課安排vector<arrange> arr; /一個班的排課安排string gs(""); /教學(xué)班級for (auto it = plan.begin(); it != plan.end(); +it) if (gs != it->grade_special) if (!arr.empty() arranges.push_back(arr);

9、/教學(xué)計劃按教學(xué)班級順序排列arr.clear();gs = it->grade_special;arr.push_back(arrange(it->grade_special, it->course, it->teacher);arranges.push_back(arr);精品資料_vector<vector<teacher_inverted>> teachers; /教師數(shù)組for (unsigned i = 0; i < arranges.size(); +i) for (unsigned j = 0; j < arrange

10、si.size(); +j) string tea = arrangesij.teacher;if (tea = " 未定 ") continue;unsigned k = 0;for (; k < teachers.size(); +k) if (teachersk0.teacher = tea) teachersk.push_back(teacher_inverted(tea, i, j);break;if (k = teachers.size() vector<teacher_inverted> ti; /一個教師的排課信息倒排表ti.push_ba

11、ck(teacher_inverted(tea, i, j);teachers.push_back(ti);const int N = 256;精品資料_bitset<N> ct; / 教室時段的分配狀況infile.open(argv2);vector<string> classrooms;/教室數(shù)組while (getline(infile, s) classrooms.push_back(s);infile.close();unsigned arrange_num = plan.size(); /待排課數(shù)目unsigned class_num = arranges

12、.size(); /教學(xué)班級數(shù)目unsigned classroom_num = classrooms.size(); /教室數(shù)目uniform_int_distribution<unsigned> u(0, classroom_num * 20 - 1); /為教室時段分配隨機(jī)數(shù)default_random_engine e(time(0);vector<unsigned> class_loc(class_num, 0); /教學(xué)班級已分配狀況unsigned class_cur = 0; /待分配的教學(xué)班級序號,輪流為每個班級排課,一次安排一個班的一門課for (u

13、nsigned n = 0; n < arrange_num; +n) unsigned k = u(e);精品資料_/如果某個班級的排課任務(wù)已經(jīng)分配完成,則選擇下一個班級繼續(xù)排課while (class_locclass_cur = arrangesclass_cur.size() class_cur = (class_cur + 1) % class_num;/找到待排課任務(wù)的對應(yīng)教師string tea = arrangesclass_curclass_locclass_cur.teacher;unsigned i = 0;for (; i < teachers.size()

14、; +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_time % 20 = k % 20) break;if (m = class_locclass_cur) break; /如果與前面已安排的該班級時間無沖突,則k 可用精品資料_k = (k

15、+ 1) % (classroom_num * 20); /如果有沖突則檢查下一個教室時段是否可用 while (1);if (i = teachers.size() break; /教師未定unsigned j = 0;for (; j < teachersi.size(); +j) intm=arrangesteachersij.class_locteachersij.arrange_loc.classroom_time;if (m != -1 && (m % 20 = k % 20) break;if (j = teachersi.size() break; /如果

16、與該教師的時間無沖突,則k 可用k = (k + 1) % (classroom_num * 20); /如果有沖突則檢查下一個教室時段是否可用 while (1); /排課arrangesclass_curclass_locclass_cur.classroom_time = k;ct.set(k);/將當(dāng)前班級的排課號+1+class_locclass_cur;/將待排課班級號+1class_cur = (class_cur + 1) % class_num;精品資料_loop: / 輸出cout << "tt高校自動排課系統(tǒng)n"cout <<

17、" 選擇查詢條件:1. 按班級2. 按教師3. 按教室 n"cout << " 請輸入查詢序號:(輸入 -1 退出系統(tǒng) )"unsigned choice = 0;cin >> choice;if (-1 = choice) cout << " 正常退出系統(tǒng)n"return 0;else if (1 = choice) unsigned i = 0, j = 0;for (; i < arranges.size(); +i) cout << i << ". &

18、quot; << arrangesi0.grade_special << "t"if (i + 1) % 4 = 0) cout << "n"cout << "n"do 精品資料_cout << "n請輸入待查詢班級的序號:(輸入 -1 結(jié)束查詢) "cin >> i;if (i = -1) break;else if (i >= arranges.size() cout << " 非法選擇 n"conti

19、nue;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;stringtime_slot4="8:00-9:40","10:00-11:40","14:00-15:40

20、","16:00-17:40" ;精品資料_cout << setiosflags(ios_base:left);cout << setw(54) << " " << arrangesi0.grade_special << "班級課程表 n"cout<<"=n"cout << setw(12) << " " << setw(24) << "星期一 "

21、; << setw(24) << "星期二 " <<setw(24) << " 星期三 " << setw(24) << "星期四 " << setw(24) << "星期五 " << "n"for (unsigned m = 0; m < 4; +m) if (m % 2 = 0)cout<<"=n"elsecout<<"-n&

22、quot;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 << setw(24) << arrangesij.course;else if (m1

23、 = 1)cout<<setw(24)<<classroomsarrangesij.classroom_time / 20;elsecout << setw(24) << arrangesij.teacher;elsecout << setw(24) << " "cout << "n"cout<<"=n"cout << resetiosflags(ios_base:left); while (1);精品資料_else if (2

24、 = 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 << "n請輸入待查詢教師的序號:(輸入 -1 結(jié)束查詢) "cin >>

25、i;if (i = -1) break;else if (i >= teachers.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 < teachersi.size(); +j) unsignedm=arrangesteachersij.class_locteachersij.arran

26、ge_loc.classroom_time / 20;class_tablem / 5m % 5 = j;stringtime_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) << " " << teachersi0.teacher << "老師課程表

27、 n"cout<<"=n"cout << setw(12) << " " << setw(24) << "星期一 " << setw(24) << "星期二 " <<setw(24) << " 星期三 " << setw(24) << "星期四 " << setw(24) << "星期五 "

28、<< "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 <

29、 5; +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)<&

30、lt;精品資料_arrangesteachersij.class_locteachersij.arrange_loc.grade_special;elsecout << setw(24) << " "cout << "n"cout<<"=n"cout << resetiosflags(ios_base:left); while (1); else if (3 = choice) vector<vector<classroom_inverted>> cl

31、assroomes;for (unsigned i = 0; i < classrooms.size(); +i) classroom_inverted cr(classroomsi);vector<classroom_inverted> crs;crs.push_back(cr);classroomes.push_back(crs);精品資料_unsigned i = 0, j = 0;for (i = 0; i < arranges.size(); +i) for (j = 0; j < arrangesi.size(); +j) unsigned m = a

32、rrangesij.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.classroom, i, j);for (i = 0; i < classrooms.size(); +i) cout << i << ". "

33、<< classroomsi << "t"if (i + 1) % 4 = 0) cout << "n"cout << "n"精品資料_do cout << "n請輸入待查詢教室的序號:(輸入 -1 結(jié)束查詢) "cin >> i;if (i = -1) break;else if (i >= classrooms.size() cout << " 非法選擇 n"continue;int class_tab

34、le45;for (unsigned m = 0; m < 4; +m)for (unsigned n = 0; n < 5; +n)class_tablemn = -1;for (j = 0; j < classroomesi.size(); +j) unsignedm=arrangesclassroomesij.class_locclassroomesij.arrange_loc.classroom_time % 20;class_tablem / 5m % 5 = j;精品資料_stringtime_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)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論