Thiết kế phần mềm - Xếp thời khóa biểu cho trường đại học kỹ thuật TP Hồ Chí Minh

Muïc Tieâu cuûa ÖÙng Duïng Tạo và in ấn số liệu dự kiến cho từng học kỳ như kế hoạch giảng dạy trong học kỳ, kế hoạch giảng dạy của các nhóm lớp–môn học, kế hoạch giảng dạy của các nhóm lớp ghép-môn học trước khi phân công và sau khi phân công cho cán bộ giảng dạy. Xếp thời khóa biểu dự kiến trên cơ sở số nhóm lớp-môn học ứng với số sinh viên của các khoa, đăng ký giờ bận của cán bộ giảng dạy và những dữ liệu về phòng học trong học kỳ. Hiệu chỉnh thời khóa biểu theo thời gian thực (ví dụ dời thời khóa biểu 1 cụm tiết, 1 buổi học, xóa TKB 1 cụm tiết ) Quản lý tình trạng báo dạy cho giảng viên, bộ môn, lịch học của các nhóm lớp,phòng học. In ấn các biểu mẫu liên quan đến thời khóa biểu cán bộ giảng dạy, lớp, phòng học. Đề tài là một ứng dụng thực tế, được xây dựng để phục vụ cho việc Xếp thời khoá biểu dự kiến cho Trường Đại Học Kỹ Thuật Thành Phố Hồ Chí Minh. Đây cũng là một phân hệ trong hệ thống chương trình Quản lý Học Vụ của Trường Đại Học Kỹ Thuật.

doc66 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2218 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Thiết kế phần mềm - Xếp thời khóa biểu cho trường đại học kỹ thuật TP Hồ Chí Minh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
aõn caùc nhoùm lôùp ñöôïc gheùp trong nhoùm lôùp gheùp - moân hoïc maø coù maõ ngaønh hoaëc maõ khoa khaùc nhau. Xoùa thôøi khoùa bieåu : Cho pheùp xoùa thôøi khoùa bieåu ñaõ ñöôïc taïo ôû hai baûng THOI_KHOA_BIEU_LOP vaø THOI_KHOA_BIEU ôû hoïc kyø vaø naêm hoïc muoán xoùa . Sau khi xoùa chöông trình seõ töï ñoäng caäp nhaäp vaøo field DA_XEP cuûa baûng NHOM_LOP_GMH (DA_XEP = 0 ôû hoïc kyø vaø naêm ñöôïc xoùa) Xeáp thôøi khoùa bieåu theo möùc öu tieân tuyeät ñoái : Cho pheùp choïn caùc nhoùm lôùp gheùp-moân hoïc ñöôïc xeáp öu tieân tuyeät ñoái . ÖÙng vôùi moãi nhoùm lôùp gheùp-moân hoïc ñöôïc choïn : + Phaân phoái (mapthongtin) caùc giaù trò cuûa nhoùm lôùp gheùp-moân hoïc vaøo caùc maûng moät chieàu : 1 2 3 4 5 6 ¼ qcummax pphoi 3 3 2 2 thuxep 2 4 0 0 tietxep 1 1 0 0 mphxep 205B1 206B3 Teân ph döï kieán Teân ph döï kieán buoixep S S 0 0 daykq .T. .T. .F. .F. Chæ soá coät laø thöù töï caùc phaân tieát (pt1, pt2, ¼) msopphoi : chæ soá cao nhaát cuûa maûng phaân phoái (vôùi ví duï treân msopphoi = 4) pphoi : chöùa soá tieát cuûa caùc phaân tieát. thuxep : thöù xeáp cho caùc phaân tieát. mphxep : teân phoøng hoïc cuûa moãi phaân tieát ( neáu phaân tieát chöa ñöôïc xeáp thì ñoù chính laø teân cuûa phoøng döï kieán) buoixep : buoåi xeáp cuûa caùc phaân tieát (S, C, T) daykq : neáu phaân tieát naøo ñaõ ñöôïc xeáp thì giaù trò seõ ñöôïc gaùn = .T., neáu chöa thì = .F. mcumdaxep : chæ soá cao nhaát cuûa phaân tieát maø ñaõ ñöôïc xeáp thôøi khoùa bieåu (vd treân mcumdaxep = 2) + ÖÙng vôùi töøng phaân tieát cuûa nhoùm lôùp gheùp - moân hoïc maø chöa ñöôïc xeáp thôøi khoùa bieåu : · nhaäp vaøo thöù, tieát baét ñaàu, phoøng maø öu tieân tuyeät ñoái cho phaân tieát ñang xeùt. + Thöïc hieän thuû tuïc xepmautin, ñaây laø thuû tuïc chính cuûa giaûi thuaät xeáp thôøi khoùa bieåu nhöng töông öùng trong tröôøng hôïp naøy laø xeáp öu tieân tuyeät ñoái (thuû tuïc naøy seõ ñöôïc trình baøy sau) Xeáp thôøi khoùa bieåu cho caùc moân hoïc : · Thaät ra laø ôû ñaây cho pheùp choïn caùc nhoùm lôùp gheùp – moân hoïc naøo seõ ñöôïc xeáp (neáu muoán xeáp thôøi khoùa bieåu cho taát caû caùc nhoùm lôùp gheùp – moân hoïc thì choïn heát) · Chöông trình seõ queùt caùc record cuûa baûng NHOM_LOP_GMH theo thöù töï töø maãu tin ñaàu (top) ñeán maãu tin cuoái xem coù record naøo ñöôïc choïn (field X = ‘x’ ) thì xeáp cho maãu tin ñoù(caùc maãu tin naøy ñaõ ñöôïc index theo 1 thöù töï naøo ñoù). · ÔÛ ñaây chöông trình phaûi coù chieán löôïc ñaùnh giaù xem caùc maãu tin naøo neân ñöôïc xeáp tröôùc thì thôøi khoùa bieåu ñöôïc taïo ra môùi coù theå toát ñöôïc. Ví duï : coù tröôøng hôïp laø taøi nguyeân phoøng phuïc vuï cho 1 moân hoïc coù tính chaát ñaëc bieät (thí nghieäm, theå duïc ¼) thì ít maø soá lôùp söû duïng phoøng ñoù laïi quaù ñoâng. Neáu ta khoâng xeáp nhöõng nhoùm lôùp gheùp – moân hoïc coù söû duïng phoøng naøy tröôùc thì coù theå seõ daãn ñeán tröôøng hôïp cuïm tieát raõnh cuûa phoøng thì coù nhöng öùng vôùi cuïm tieát ñoù nhoùm lôùp gheùp – moân hoïc ñaõ hoïc moân khaùc Þ thôøi khoùa bieåu chöa ñöôïc toái öu. Ví duï : thôøi khoùa bieåu phoøng :  2 3 4 5 6 7 1 2 3 4 5 6 : b b b b b b b b b b b b b b b b b b qtiettong thôøi khoùa bieåu lôùp :  2 3 4 5 6 7 1 2 3 4 5 6 : b b b b b b b b b b b b b b b b b b b b b b qtiettong vôùi : . b : laø baän . troáng laø raõnh + Chæ muïc ñeå index caùc maãu tin : iif(empty(tinh_chat_phong),"0","1")+iif(phti.st_phan_tiet_1>=4.or. phti.st_phan_tiet_2>=4,"1","0")+iif(xep_song_song = 0,"0","1") + iif(phti.st_phan_tiet_6 =0,"0","1")+iif(phti.st_phan_tiet_5=0,"0","1")+iif(phti.st_phan_tiet_4=0,"0","1")+ iif(phti.st_phan_tiet_3=0,"0","1")+ iif(phti.st_phan_tiet_2 = 0,"0","1")+ str(so_lop_ghep,2) + str(so_tiet_tkb,2) + ma_mh haøm iif(x,a,b) coù nghóa : neáu x laøTrue thì seõ traû veà giaù trò a, ngöôïc laïi traû veà gía trò b chæ muïc naøy ñöôïc index theo thöù töï giaûm daàn .Nhö vaäy : thöù töï öu tieân laø . caùc phoøng coù tính chaát ñaëc bieät . soá tieát trong cuïm tieát thöù nhaát vaø thöù hai lôùn hôn hoaëc baèng boán . caùc nhoùm lôùp gheùp-moân hoïc ñöôïc gheùp song song vôùi nhau . caùc nhoùm lôùp gheùp-moân hoïc coù nhieàu phaân tieát . caùc nhoùm lôùp gheùp-moân hoïc naøo maø coù soá löôïng nhoùm lôùp-moân hoïc ñöôïc gheùp laïi vôùi nhau caøng nhieàu thì caøng ñöôïc öu tieân tröôùc . caùc nhoùm lôùp gheùp-moân hoïc coù soá tieát thôøi khoùa bieåu trong tuaàn caøng nhieàu thì caøng ñöôïc öu tieân . xeáp cho töøng moân hoïc - ÖÙng vôùi töøng maãu tin nhoùm lôùp gheùp – moân hoïc caàn ñöôïc xeáp thôøi khoùa bieåu, chöông trình seõ thöïc hieän : · phaân phoái caùc giaù trò cuûa nhoùm lôùp gheùp – moân hoïc vaøo caùc maûng 1 chieàu : pphoi, thuxep, tietxep, mphxep, buoixep, daykq · thöïc hieän thuû tuïc xepmautin nhöng trong tröôøng hôïp naøy mxepuutien = .F. (neáu = .T. laø xeáp öu tieân tuyeät ñoái) 7.4 Xeáp thôøi khoùa bieåu theo nhoùm lôùp : Cho pheùp choïn caùc nhoùm lôùp trong töø ñieån NHOM_LOP caàn xeáp thôøi khoùa bieåu (ñaùnh daáu X = ‘x’ laø ñöôïc choïn) ÖÙng vôùi töøng nhoùm lôùp ñöôïc choïn : chöông trình seõ tieán haønh xeáp thôøi khoùa bieåu cho caùc moân hoïc maø lôùp ñoù hoïc, nghóa laø chöông trình seõ ñi tìm xem caùc maãu tin nhoùm lôùp gheùp – moân hoïc trong baûng NHOM_LOP_GMH xem coù maãu tin naøo coù nhoùm lôùp ñang xeùt laø thaønh phaàn cuûa nhoùm lôùp gheùp khoâng ? § ÖÙng vôùi töøng maãu tin nhoùm lôùp gheùp – moân hoïc thoûa maõn ñieàu kieän choïn ôû treân chöông trình seõ thöïc hieän thuû tuïc xepmautin nhöng vôùi mxepuutien = .F. vaø trong thuû tuïc xepmautin seõ coù thuû tuïc mapthongtin ñöôïc thöïc hieän . ¨ Thuû tuïc xepmautin :moân hoïc cuûa maãu tin trong baûng NHOM_LOP_GMH, xeáp moân hoïc ñoù. Thuû tuïc naøy tieán haønh xeáp thôøi khoùa bieåu cho maãu tin nhoùm lôùp gheùp – moân hoïc trong NHOM_LOP_GMH. mdaubuoi = N (khoâng phaûi laø ñaàu buoåi hay cuoái buoåi) thöïc hieän thuû tuïc gaùn thoâng soá moät moân hoïc (ganttmhoc) : . mmscb = nlgmh.ma_can_bo (maõ caùn boä daïy lôùp gheùp) . mmsmh = nlgmh.ma_mh (maõ moân hoïc) . mtcph = nlgmh.tinh_chat_phong (tính chaát phoøng cuûa moân hoïc) . mssv = nlgmh.tong_so_sv (soá sinh vieân trong nhoùm lôùp gheùp) . mmng = nlgmh.ma_nganh (maõ ngaønh cuûa nhoùm lôùp gheùp) . msongsong = nlgmh.xep_song_song (ghi nhaän maõ gheùp song song) . msldd = nlgmh.ma_nl (maõ nhoùm lôùp ñaïi dieän) . mstdx = nlgmh.da_xep (soá tieát ñaõ xeáp) . mtiettuan = nlgmh.so_tiet_tkb (soá tieát trong tuaàn) . giomaxcb = soá giôø daïy toái ña trong moät ngaøy cuûa caùn boä . buoimincb = soá buoåi toái thieåu maø caùn boä phaûi ñi daïy ¨ khôûi taïo caùc maûng moät chieàu : 1 2 3 ¼ qlopghepmax mbcphepmax buoihoc mslpg 0 0 0 0 0 0 ² ² ² . chæ soá coät laø chæ soá cuûa caùc lôùp trong lôùp gheùp Thöïc hieän thuû tuïc laáy thoâng tin cuûa caùc nhoùm lôùp trong nhoùm lôùp gheùp (thtinnhlop) : . mslpg(k) = manhlp(k) /* maûng manhlp chöùa maõ cuûa caùc nhoùm lôùp trong nhoùm lôùp gheùp */ . buoihoc(k) = pbuoinum(nl.buoi_hoc_uu_tien) /* haøm pbuoinum() coù nhieäm vuï ñoåi buoåi hoïc ôû daïng chöõ (S,C,T) sang daïng soá (1,2,3) */ . mbcphepmax(k) = (haøm ptietbuoi : laáy soá tieát trong 1 buoåi hoïc) 1 2 3 ¼ qlopghepmax mdaysiso xsttonglp . mdaysiso(k) = nl.si_so_lop . xsttonglp(k) = nl.so_tiet § yù nghóa : . mbcphepmax : soá buoåi cho pheùp toái ña trong moät tuaàn cuûa moãi nhoùm lôùp (chæ soá naøy ñeå ñaùnh giaù ñieàu kieän toái öu cuûa raøng buoäc meàm) . buoihoc : buoåi hoïc ôû daïng soá (1,2,3 laø S,C,T) cuûa caùc nhoùm lôùp . mslpg : maõ soá lôùp trong nhoùm lôùp gheùp . mdaysiso : só soá cuûa moãi nhoùm lôùp trong nhoùm lôùp gheùp . xsttonglp : soá tieát hoïc trong moät tuaàn cuûa moãi nhoùm lôùp trong nhoùm lôùp gheùp Sau thuû tuïc thtinnhlop thì msolopgh chính laø soá nhoùm lôùp thöïc söï coù trong nhoùm lôùp gheùp ñang xeùt . ÖÙng vôùi moãi phaân tieát chöa ñöôïc xeáp (coù daykq(pt) = .F.) : . thöïc hieän thuû tuïc ñi tìm caùc cuïm tieát raõnh (teân thuû tuïc laø timctiranh vôùi thoâng soá laø 1), thuû tuïc naøy seõ ñi tìm taát caû caùc khaû naêng raõnh maø thoûa maõn soá tieát trong phaân tieát ñang xeùt, thôøi khoùa bieåu cuûa caùn boä giaûng daïy, thôøi khoùa bieåu cuûa caùc lôùp trong lôùp gheùp, thôøi khoùa bieåu phoøng vaø phaûi thoûa maõn caùc yeâu caàu maø raøng buoäc cöùng ñöa ra (phaàn cuï theå cuûa thuû tuïc seõ ñöôïc trình baøy sau) . thöïc hieän thuû tuïc choïn moät toái öu (teân thuû tuïc laø chon1toiuu), thuû tuïc naøy coù nhieäm vuï döïa vaøo taäp caùc raøng buoäc meàm (caùc ñieàu kieän toái öu) ñeå ñaùnh giaù choïn ra moät khaû naêng toái öu nhaát trong soá caùc khaû naêng ñöôïc tìm ra ôû thuû tuïc treân (phaàn cuï theå cuûa thuû tuïc cuõng seõ ñöôïc trình baøy sau). . thöïc hieän thuû tuïc ghi nhaän cuïm tieát vöøa ñöôïc choïn (ghinhctiet) coù nhieäm vuï : ñaùnh giaù xem cuïm tieát vöøa ñöôïc choïn laø ñaàu buoåi, cuoái buoåi hay giöõa buoåi. Ghi nhaän naøy seõ giuùp ñaùnh giaù ñieàu kieän toái öu cho phaân tieát tieáp theo seõ ñöôïc xeáp. ghi nhaän thôøi khoùa bieåu cuûa phaân tieát vöøa ñöôïc xeáp (thöù, tieát baét ñaàu, soá tieát,maõ moân hoïc, maõ caùn boä, teân phoøng söû duïng, maõ nhoùm lôùp ñaïi dieän) vaøo thôøi khoùa bieåu caùn boä (THOI_KHOA_BIEU) vaø ghi nhaän vaøo thôøi khoùa bieåu lôùp (THOI_KHOA_BIEU_LOP) öùng vôùi taát caû caùc maõ nhoùm lôùp trong nhoùm lôùp gheùp, nghóa laø boä ñoù seõ goàm coù (maõ nhoùm lôùp trong nhoùm lôùp gheùp, thöù, tieát baét ñaàu, soá tieát, maõ moân hoïc, maõ caùn boä, teân phoøng söû duïng). sau ñoù caäp nhaät vaøo field DA_XEP cuûa baûng NHOM_LOP_GMH öùng vôùi maãu tin ñang xeùt = DA_XEP + soá tieát trong phaân tieát vöøa ñöôïc xeáp . neáu nhö maãu tin nhoùm lôùp gheùp – moân hoïc ñang xeùt coù yeâu caàu xeáp song song vôùi caùc maãu tin nhoùm lôùp gheùp – moân hoïc khaùc thì noù seõ thöïc hieän thuû tuïc xtietss. Thuû tuïc naøy coù nhieäm vuï : . ghi nhaän thôøi khoùa bieåu cuûa phaân tieát cuûa maãu tin ñang xeùt vaøo thôøi khoùa bieåu lôùp vaø thôøi khoùa bieåu caùn boä cuûa maãu tin ñöôïc gheùp song song vôùi maãu tin ñang xeùt . . caäp nhaät laïi field DA_XEP cuûa maãu tin ñöôïc gheùp song song . I .Giaûi thuaät cuûa thuû tuïc tìm caùc cuïm tieát raõnh (timctiranh) : . mstpp = pphoi(lanxep) . mthu = thuxep(lanxep) . mtiet = tietxep(lanxep) . mbuoi = buoixep(lanxep) . mtphong = mphxep(lanxep) Thöïc hieän thuû tuïc taoranh : thuû tuïc naøy coù nhieäm vuï taïo zero cho daõy thôøi khoùa bieåu, nghóa laø gaùn raõnh cho caùc daõy chöùa thôøi khoùa bieåu. dimcb 1 2 3 ¼ qtiettong 2 3 4 : .F. .F. .F. .F. .F. .F. .F. .F. .F. qthumax dimlopgh 1 2 3 ¼ qtiettong 2 3 4 : ² ² ² ² ² ² ² ² ² qthumax dimtkb 1 2 3 ¼ qtiettong 2 3 4 : ² ² ² ² ² ² ² ² ² qthumax + dimcb, dimlopgh, dimtkb laø caùc maûng 2 chieàu vôùi : . chæ soá haøng : thöù hai, thöù ba, ¼ . chæ soá coät : tieát thöù 1, tieát thöù 2, ¼ + dimcb : minh hoïa thôøi khoùa bieåu cuûa caùn boä daïy lôùp gheùp ñang xeùt vôùi giaù trò .F. laø raõnh, .T. laø baän. + dimlopgh : minh hoïa thôøi khoùa bieåu cuûa lôùp gheùp ñang xeùt. Thôøi khoùa bieåu naøy laø thôøi khoùa bieåu chung cho caùc lôùp ôû trong lôùp gheùp, vôùi giaù trò ² laø raõnh vaø ngöôïc laïi neáu khaùc ² laø baän. + dimtkb : ñaây laø thôøi khoùa bieåu toång hôïp cuûa hai thôøi khoùa bieåu ôû treân laø dimcb vaø dimlopgh, vôùi giaù trò ² laø raõnh vaø khaùc ² laø baän . + Ngoaøi ra thôøi khoùa bieåu cuûa töøng lôùp trong lôùp gheùp cuõng ñöôïc minh hoïa baèng maûng 2 chieàu dimlop vaø ñöôïc khôûi taïo giaù trò raõnh laø .F. dimlop 1 2 3 ¼ qlopghepmax 1 2 3 thöù hai 12 13 thöù ba  24 25 : : .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. .F. qtiettong ´ qthumax ñeå deã minh hoïa giaû söû ôû ñaây qtiettong = 12 . chæ soá coät : soá thöù töï cuûa lôùp trong lôùp gheùp ñang xeùt . chæ soá haøng : soá thöù töï cuûa tieát trong moät ngaøy (tieát 1, tieát 2 ¼) . töø 1 ® qtiettong cuûa chæ soá haøng ñöôïc xem laø caùc tieát ôû thöù hai, töông töï töø (qtiettong + 1) ® (2 ´ qtiettong) ñöôïc xem laø caùc tieát ôû thöù ba vaø cöù nhö vaäy. § Do ôû ñaây ñeå deã nhìn ta veõ nhö treân, thöïc ra chæ soá coät cuûa hình treân laø chæ soá thöù nhaát vaø chæ soá haøng cuûa hình treân laø chæ soá thöù hai cuûa maûng dimlop(ilop,itiet). § giaûi thuaät : FOR ithu=2 TO qthumax FOR itiet=1 TO qtiettong idim=(ithu-2)*qtiettong+itiet store .F. TO dimcb(ithu,itiet) /* gaùn giaù trò False cho phaàn töû maûng dimcb */ store ' ' to dimtkb(ithu,itiet),dimlopgh(ithu,itiet) /*gaùn giaù trò roãng cho phaàn töû cuûa 2 maûng dimtkb vaø dimlopgh */ FOR ilop=1 TO msolopgh STORE .F. TO dimlop(ilop,idim) /* töông töï gaùn giaù trò False cho phaàn töû maûng dimlop */ ENDFOR ENDFOR ENDFOR Ghi chuù : . qtiettong : laø toång soá tieát cuûa moät ngaøy . msolopgh : laø soá lôùp ñöôïc gheùp trong nhoùm lôùp gheùp Thöïc hieän thuû tuïc axatkblop : thuû tuïc naøy coù nhieäm vuï laáy thôøi khoùa bieåu cuûa taát caû caùc nhoùm lôùp (coù trong nhoùm lôùp gheùp ñang xeùt) töø baûng THOI_KHOA_BIEU_LOP (tkblop) aùnh xaïvaøo maûng ñaõ ñöôïc khôûi taïo laø dimlop, dimlopgh vaø khôûi taïo, aùnh xaï caùc giaù trò vaøo maûng khaùc nhö : xbuoi, mtdaxep, xbuoixep, svban. § giaûi thuaät : ÖÙng vôùi töøng nhoùm lôùp trong nhoùm lôùp gheùp,laáy thôøi khoùa bieåu cuûa nhoùm lôùp ñoù : FOR jmlop=tkblop.tiet_bat_dau TO tkblop.tiet_bat_dau+tkblop.so_tiet-1 idim=(tkblop.thu-2)*qtiettong+jmlop dimlop(imlop,idim)=.T. if empty(dimlopgh(tkblop.thu,jmlop)) dimlopgh(tkblop.thu,jmlop)=str(imlop,1) endif ENDFOR ¨ Khôûi taïo caùc maûng xbuoi, mtdaxep, xbuoixep, svban : § giaûi thuaät : FOR imlop=1 TO msolopgh FOR iban=2 TO qthumax FOR ibuoi=1 TO qbuoimax idim=(iban-2)*qbuoimax+ibuoi xbuoi(imlop,idim)=0 ENDFOR ENDFOR mtdaxep(imlop)=0 xbuoixep(imlop)=0 ENDFOR Xbuoi 1 2 3 ¼ qlopghepmax 1 thöù hai 2 3 4 thöù ba 5 6 0 0 0 0 0 0 qbuoimax ´ qthumax . ñeå deã minh hoïa giaû söû qbuoimax = 3, chæ soá coät cuûa hình treân laø chæ soá thöù 1 vaø chæ soá haøng cuûa hình treân laø chæ soá thöù 2 cuûa maûng xbuoi(ilop,ibuoi) . moãi phaàn töû cuûa maûng 2 chieàu xbuoi mang yù nghóa (giaû söû taïi coät ilop, taïi haøng ibuoi) : soá tieát ñaõ xeáp trong buoåi ibuoi cuûa thöù _ ôû lôùp ilop + caùc maûng 1 chieàu : 1 2 3 ¼ qlopghepmax mtdaxep xbuoixep 0 0 0 0 0 0 . giaù trò cuûa moãi phaàn töû trong caùc maûng 1 chieàu (giaû söû coù chæ soá laø ilop) mang yù nghóa : mtdaxep : soá tieát ñaõ xeáp cuûa lôùp ilop trong lôùp gheùp xbuoixep : soá buoåi ñaõ xeáp cuûa lôùp ilop trong lôùp gheùp . maûng svban (cho moãi lôùp trong lôùp gheùp) : FOR iban=2 TO qthumax svban(iban)=0 ENDFOR 2 3 4 ¼ qthumax Svban 0 0 0 moãi phaàn töû cuûa maûng (giaû söû coù chæ soá laø ithu) mang yù nghóa : soá tieát sinh vieân ñaõ hoïc ôû thöù ithu ÖÙng vôùi töøng nhoùm lôùp trong nhoùm lôùp gheùp,laáy thôøi khoùa bieåu cuûa nhoùm lôùp ñoù töø baûng tkblop gaùn vaøo trong caùc maûng vöøa ñöôïc khôûi taïo ôû treân : . svban(tkblop.thu) = svban(tkblop.thu) + tkblop.so_tiet . mbbx = pbuoi(tkblop.tiet_bat_dau,1) // haøm pbuoi() laáy buoåi ôû daïng soá cuûa tieát ñang xeùt . idim = (tkblop.thu -2) ´ qbuoimax +mbbx . xbuoi(imlop,idim) = xbuoi(imlop,idim) + tkblop.so_tiet . mtdaxep(imlop) = mtdaxep(imlop) + tkblop.so_tiet + Neáu khoâng phaûi laø öu tieân tuyeät ñoái vaø coù giôùi haïn soá tieát cöïc ñaïi trong moät ngaøy cho sinh vieân thì : . kieåm tra xem soá tieát ñaõ hoïc trong moät ngaøy cuûa sinh vieân + soá tieát cuûa phaân tieát döï ñònh xeáp coù vöôït quaù giôùi haïn ñoù hay khoâng ? Neáu coù thì gaùn baän caû ngaøy cho maûng dimlopgh (kyù töï gaùn = ‘S’ + str(imlop,1)) töông öùng vôùi ngaøy bò vi phaïm. (ñieàu kieän : svban(ithu) + mstpp > pmaxngaysv ?) § giaûi thuaät : IF .not. mxepuutien .and. pmaxsv FOR ithu=2 TO qthumax IF svban(ithu)+mstpp>pmaxngaysv FOR itiet=1 TO qtiettong if empty(dimlopgh(ithu,itiet)) dimlopgh(ithu,itiet)='S'+str(imlop,1) endif ENDFOR ENDIF ENDFOR ENDIF . mxepuutien = .T. laø xeáp öu tieân tuyeät ñoái . pmaxsv = .T. laø coù giôùi haïn soá tieát trong moät ngaøy cho sinh vieân . qthumax : thöù max ôû daïng soá (ví duï : hoïc töø thöù hai ® thöù baûy thì qthumax = 7) . mstpp : soá tieát cuûa cuïm tieát ñang xeáp . pmaxngaysv laø soá tieát toái ña ñöôïc giôùi haïn cho sinh vieân + Ñeám soá buoåi ñaõ xeáp trong tuaàn cuûa töøng nhoùm lôùp trong nhoùm lôùp gheùp löu vaøo maûng xbuoixep, döïa vaøo maûng xbuoi . § giaûi thuaät : FOR imlop=1 TO msolopgh // msolopgh : soá nhoùm lôùp trong nhoùm lôùp gheùp FOR ingay=2 TO qthumax FOR ibuoi=1 TO qbuoimax idim=(ingay-2)*qbuoimax+ibuoi xbuoixep(imlop)=xbuoixep(imlop)+IIF(xbuoi(imlop,idim)>0,1,0) ENDFOR ENDFOR ENDFOR Thöïc hieän thuû tuïc maptkbcb : thuû tuïc naøy coù nhieäm vuï khôûi taïo maûng tietban,laáy thôøi khoùa bieåu cuûa caùn boä (töø baûng tkbcb) aùnh xaï vaøo maûng dimcb vaø tính soá tieát ñaõ daïy cuûa caùn boä ôû caùc buoåi cuûa caùc ngaøy trong tuaàn (giaù trò naøy ñöôïc löu trong maûng tietban). Sau ñoù seõ ñeám soá buoåi ñaõ xeáp cuûa caùn boä. Khôûi taïo maûng tieát baän : FOR ithu=2 TO qthumax FOR ibuoi=1 TO qbuoimax tietban(ithu,ibuoi)=0 ENDFOR ENDFOR . qbuoimax : soá buoåi trong moät ngaøy (ví duï : neáu soá tieát trong buoåi saùng, chieàu, toái > 0 thì qbuoimax = 3) tietban 1 2 3 ¼ qbuoimax 2 3 4 0 0 0 0 0 0 0 0 0 qthumax (giaû söû qbuoimax = 3) . giaù trò cuûa 1 phaàn töû trong maûng 2 chieàu laø : soá tieát ñaõ xeáp cuûa caùn boä giaûng daïy trong buoåi ibuoi ôû thöù ithu + Laáy thôøi khoùa bieåu cuûa caùn boä daïy nhoùm lôùp gheùp gaùn vaøo maûng dimcb vaø tính soá tieát ñaõ daïy cuûa caùn boä ôû caùc buoåi cuûa caùc ngaøy trong tuaàn löu vaøo maûng tietban : § giaûi thuaät : Queùt taát caû caùc maãu tin trong baûng THOI_KHOA_BIEU(tkbcb), neáu maãu tin naøo thoûa maõn ñieàu kieän tkbcb. ma_can_bo= maõ caùn boä daïy lôùp gheùp (mmscb) thì thöïc hieän : FOR j=tkbcb.tiet_bat_dau TO tkbcb.tiet_bat_dau+tkbcb.so_tiet-1 dimcb(tkbcb.thu,j)=.T. // .T. mang yù nghóa laø giaù trò True ENDFOR mbb=pbuoi(tkbcb.tiet_bat_dau,1) // haøm pbuoi() laáy buoåi ôû daïng soá cuûa tieát ñang xeùt tietban(tkbcb.thu,mbb)=tietban(tkbcb.thu,mbb)+tkbcb.so_tiet + ñeám soá buoåi ñaõ xeáp trong tuaàn cuûa caùn boä löu vaøo bieán sbxepcb. sbxepcb=0 FOR ingay=2 TO qthumax FOR ibuoi=1 TO qbuoimax sbxepcb = sbxepcb + IIF(tietban(ingay,ibuoi)>0,1,0) ENDFOR ENDFOR Thöïc hieän thuû tuïc ttkbchung : thuû tuïc naøy seõ döïa vaøo 2 maûng dimcb vaø dimlopgh ñeå taïo ra thôøi khoùa bieåu chung (dimtkb). Sau ñoù xem xeùt caùc raøng buoäc cöùng maø thôøi khoùa bieåu chung baét buoäc phaûi thoûa maõn : + Taïo ra thôøi khoùa bieåu chung : § giaûi thuaät : FOR ithu=2 TO qthumax FOR itiet=1 TO qtiettong IF (dimcb(ithu,itiet) .or. !empty(dimlopgh(ithu,itiet))) // ! laø pheùp not * Can Bo Ban Hoac Lop Ban if EMPTY(dimtkb(ithu,itiet)) dimtkb(ithu,itiet) = iif(dimcb(ithu,itiet),'C',dimlopgh(ithu,itiet)) endif ENDIF ENDFOR ENDFOR ví duï minh hoïa : dimcb 1 2 3 4 5 6 7 ¼ qtiettong 2 3 4 5 : F F T T T T F F F F F F F F F F T T T F F F F F F F F F F F F F qthumax dimlopgh 1 2 3 4 5 6 7 ¼ qtiettong 2 3 4 5 : ¢1¢ ¢1¢ ¢2¢ ¢2¢ ¢2¢ ¢2¢ ¢¢ ¢¢ ¢3¢ ¢3¢ ¢3¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢S1¢ ¢S1¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ qthumax dimtkb 1 2 3 4 5 6 7 ¼ qtiettong 2 3 4 5 : ¢1¢ ¢1¢ ¢C¢ ¢C¢ ¢C¢ ¢C¢ ¢¢ ¢¢ ¢3¢ ¢3¢ ¢3¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢1¢ ¢S1¢ ¢S1¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ qthumax . ‘C’ : cho bieát laø caùn boä baän . ‘1’, ‘2’, ‘3’ : lôùp 1,2,3 trong lôùp gheùp baän . ‘S1’ : soá tieát hoïc cuûa sinh vieân trong lôùp 1 vöôït quaù soá tieát cho pheùp hoïc toái ña trong 1 ngaøy . ‘’, .F. : cho bieát laø raõnh ª Baây giôø ta chæ quan taâm ñeán thôøi khoùa bieåu chung (dimtkb) : Xeùt caùc yeâu caàu raøng buoäc cöùng maø thôøi khoùa bieåu phaûi baét buoäc thoûa maõn : xem coù tieát nghæ chung trong thôøi khoùa bieåu khoâng (ptietnghi = ?). Neáu coù thì aùnh xaï caùc tieát nghæ chung töø baûng VNGHICHUNG vaøo dimtkb. Ñeå tieän phaân bieät ta cheøn kyù töï ‘N’. VNGHICHUNG laø local view chöùa caùc tieát nghæ chung trong tuaàn cuûa naêm hoïc, hoïc kyø hieän haønh . § giaûi thuaät : FOR ithu=2 TO qthumax FOR itiet=1 TO qtiettong if coù tieát nghæ chung ôû ithu,itiet if empty(dimtkb(ithu,itiet)) // ùchöa baän ôû thöù, tieát coù nghæ chung thì gaùn loaïi baän laø // nghæ chung dimtkb(ithu,itiet) = 'N' endif endif ENDFOR ENDFOR coù traùnh tieát lieân tuïc giöõa 2 buoåi khoâng (ptranhsct = ?) ví duï : giöõa buoåi saùng vaø chieàu . neáu baän tieát cuoái saùng thì boû tieát ñaàu chieàu . neáu baän tieát ñaàu chieàu thì boû tieát cuoái saùng - cheøn vaøo kyù töï ‘D’ laø boû - ª : laø baän buoåi saùng buoåi chieàu buoåi toái ª ª ‘D’ ‘D’ ª § giaûi thuaät : IF ptranhsct .and. .not. mxepuutien mtiets1=qtiets do mtranhnt with mtiets1 // do x with a : thöïc hieän thuû tuïc x vôùi thoâng soá a if qbuoimax=3 mtiets2=qtiets+qtietc do mtranhnt with mtiets2 endif ENDIF Ptranhsct = True : coù traùnh tieát lieân tuïc giöõa hai buoåi Thuû tuïc mtranhnt : Procedure mtranhnt para mtiettr // para : khai baùo thoâng soá cuûa chöông trình FOR ithu=2 TO qthumax // neáu baän tieát cuoái saùng thì boû tieát ñaàu chieàu IF !empty(dimlopgh(ithu,mtiettr)) .OR. dimcb(ithu,mtiettr) // ! laø pheùp toaùn not if empty(dimtkb(ithu,mtiettr+1)) if dimcb(ithu,mtiettr) dimtkb(ithu,mtiettr+1)='D' else dimtkb(ithu,mtiettr+1)='D'+left(dimlopgh(ithu,mtiettr),1) endif endif ENDIF // neáu baän tieát ñaàu chieàu thì boû tieát cuoái saùng IF !empty(dimlopgh(ithu,mtiettr+1)) .OR. dimcb(ithu,mtiettr+1) if empty(dimtkb(ithu,mtiettr)) if dimcb(ithu,mtiettr) dimtkb(ithu,mtiettr)='D' else dimtkb(ithu,mtiettr)='D'+left(dimlopgh(ithu,mtiettr+1),1) endif endif ENDIF ENDFOR ENDPROC Xoùa caû ngaøy neáu xeùt thaáy ngaøy ñoù caùn boä daïy nhieàu hôn möùc quy ñònh trong ngaøy (giomaxcb) . tietban(ithu,1) + tietban(ithu,2) + iif(qbuoimax = 3, tietban(ithu,3), 0) + mstpp > giomax ? . neáu xoùa thì cheøn kyù töï ‘X’ § giaûi thuaät : IF pmaxcb .and. .not. empty(mmscb) .and. .not. mxepuutien // mmscb : maõ caùn boä // pmaxcb = True mang yù nghóa laø coù giôùi haïn soá tieát toái ña trong moät ngaøy cho caùn boä FOR ithu=2 TO qthumax IF tietban(ithu,1)+tietban(ithu,2)+iif(qbuoimax=3,tietban(ithu,3),0)+mstpp>giomaxcb for itiet=1 TO qtiettong if empty(dimtkb(ithu,itiet)) dimtkb(ithu,itiet)='X' endif endfor ENDIF ENDFOR ENDIF Boû khaû naêng gaùn cuøng 1 ngaøy cho caùc laàn ñaõ xeáp tröôùc cuûa cuøng 1 moân hoïc (nghóa laø caùc phaân tieát cuûa cuøng 1 moân hoïc seõ khoâng ñöôïc xeáp cuøng 1 ngaøy) Löu yù : chæ xeùt cho caùc laàn xeáp töø laàn thöù hai trôû leân . cheøn vaøo kyù töï ‘M’ ví duï : dimtkb 1 2 3 4 5 ¼ qtiettong 2 3 4 5 : ¢M¢ ¢M¢ pt1 pt1 ¢M¢ ¢M¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢M¢ ¢M¢ pt2 pt2 pt2 ¢M¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ ¢¢ qthumax pt1 : tieát cuûa phaân tieát 1 pt2 : tieát cuûa phaân tieát 2 . ñang xeáp cho phaân tieát thöù 3 § giaûi thuaät : IF lanxep ³ 2 .and. .not. mxepuutien FOR jxep = 2 TO lanxep IF daykq(jxep-1) nxep = thuxep(jxep-1) for itiet=1 TO qtiettong if empty(dimtkb(nxep,itiet)) dimtkb(nxep,itiet) = 'M' endif endfor ENDIF ENDFOR ENDIF Neáu söû duïng baûng caùn boä baän giôø : . Tìm maõ caùn boä (daïy cho nhoùm lôùp gheùp – moân hoïc ñang xeùt) coù trong baûng HO_SO_BAN_GIO khoâng ? neáu coù thì laáy maõ giôø baän (ma_gio_ban) . Tìm maõ giôø baän trong trong baûng TU_DIEN_GIO_BAN, neáu coù thì map vaøo trong maûng dimtkb luoân. Vôùi caùch laøm nhö vaäy seõ khoûi caàn baûng HO_SO_CB_BAN_GIO. . Tuy nhieân ñeå cho quaù trình xeáp TKB nhanh hôn ta seõ taïo ra baûng HO_SO_CB_BAN_GIO töø caùc baûng HO_SO_BAN_GIO , TU_DIEN_GIO_BAN vaø baûng CHI_TIET_GIO_BAN . . Cheøn vaøo kyù töï ‘U’ cho bieát tieát baän naøy laø trong tröôøng hôïp söû duïng baûng caùn boä baän giôø . § giaûi thuaät : Tìm maõ caùn boä (daïy cho nhoùm lôùp gheùp – moân hoïc ñang xeùt) coù trong baûng HO_SO_CB_BAN_GIO khoâng neáu coù thì aùnh xaï vaøo : for j=tiet_bat_dau TO tiet_bat_dau + so_tiet - 1 if empty(dimtkb(thu,j)) dimtkb(thu,j)='U' endif endfor ¨ Neáu coù xeáp song song vôùi nhoùm lôùp gheùp - moân hoïc khaùc thì xeáp song song (döïa vaøo field xep_song_song) : + ÖÙng vôùi moãi nhoùm lôùp gheùp – moân hoïc caàn xeáp song song vôùi nhoùm lôùp gheùp – moân hoïc ñang xeùt : . aùnh xaï thôøi khoùa bieåu cuûa caùn boä giaûng daïy vaøo dimtkb (söû duïng baûng tkbcb) . neáu coù söû duïng baûng HO_SO_CB_BAN_GIO thì aùnh xaïvaøo . aùnh xaï thôøi khoùa bieåu cuûa töøng nhoùm lôùp coù trong nhoùm lôùp gheùp ñang xeùt vaøo maûng dimtkb, neáu baän ôû thöù, tieát naøo thì gaùn dimtkb(thöù,tieát) = ‘G’ . Kyù töï ‘G’ cho bieát laø caùc nhoùm lôùp gheùp song song bò baän giôø . § Löu yù : caùc raøng buoäc cöùng ta xeùt ôû ñaây laø öùng vôùi tröôøng hôïp khoâng phaûi laø xeáp öu tieân tuyeät ñoái. Neáu laø tröôøng hôïp xeáp öu tieân tuyeät ñoái thì : mthu, mtiet, mbuoi môùi coù khaû naêng ¹ 0. Ta thöïc hieän caùc thuû tuïc mapthu, maptiet, mapbuoi. Caùc thuû tuïc naøy thöïc chaát laø che taát caû caùc tieát trong thôøi khoùa bieåu dimtkb maø khoâng phaûi laø cuïm tieát ñöôïc xeáp öu tieân tuyeät ñoái. Sau caùc thuû tuïc naøy neáu coù khaû naêng cuïm tieát raõnh thoûa maõn phaân tieát ñang xeùt thì chæ coù 1 khaû naêng duy nhaát. § giaûi thuaät : Thuû tuïc mapthu : Procedure mapthu for ithu=2 to qthumax if ithumthu // mthu : thöù cuûa cuïm tieát ñang xeáp for itiet=1 to qtiettong dimtkb(ithu,itiet)='T' endfor endif endfor Endproc Thuû tuïc maptiet : Procedure maptiet for ithu=2 to qthumax for itiet=1 to qtiettong if .not. between(itiet,mtiet,mtiet+mstpp-1) // mtiet : tieát baét ñaàu cuûa cuïm tieát ñang xeáp dimtkb(ithu,itiet)='I' // haøm between(x,a,b) : xeùt a £ x £ b ? endif // mstpp : soá tieát cuûa cuïm tieát ñang xeáp endfor endfor Endproc Thuû tuïc mapbuoi : Procedure mapbuoi for ithu=2 to qthumax for ibuoi=1 to qbuoimax if ibuoimbuoi // mbuoi : buoåi cuûa cuïm tieát ñang xeáp stor 0 to mmb1,mmb2 // gaùn giaù trò 0 cho caùc bieán mmb1,mmb2 do pforbuoi with ibuoi,mmb1,mmb2,1 // pforbuoi : haøm naøy vôùi caùc thoâng soá ôû for itiet=mmb1 to mmb2 //beân seõ traû veà mmb1: tieát baét ñaàu cuûa buoåi ibuoi, dimtkb(ithu,itiet)='B' // vaø mmb2: tieát cuoái cuøng cuûa buoåi ibuoi endfor endif endfor endfor Endproc Thöïc hieän thuû tuïc danhgia : thuû tuïc naøy coù nhieäm vuï tìm phoøng cho caùc khaû naêng, neáu coù phoøng thì khaû naêng ñoù môùi ñöôïc chaáp nhaän. Sau ñoù ñeám soá khaû naêng thöïc söï thoûa maõn. Caùc khaû naêng thöïc söï ñöôïc löu vaøo trong caùc maûng 1 chieàu : 1 2 3 ¼ qtiettong ´ qthumax dimthu dimtiet dimphong 2 7 203B1 . chæ soá cuûa maûng laø thöù töï cuûa caùc khaû naêng (khaû naêng 1, khaû naêng 2, ¼) . dimthu : phaàn töû cuûa maûng chöùa thöù cuûa khaû naêng . dimtiet : chöùa tieát baét ñaàu . dimphong : chöùa phoøng cuûa khaû naêng Neáu soá khaû naêng > 0 thì mketqua = .T. (tìm ñöôïc khaû naêng xeáp cho phaân tieát), ngöôïc laïi mketqua = .F. § giaûi thuaät : Procedure danhgia para m_khxetph,mthutranh,mtietbdtranh // m_khxetph : khoâng caàn xeùt phoøng if .not. empty(mthutranh) // mthutranh : thöù muoán traùnh mthuxy=mthutranh // mtietbdtranh : tieát baét ñaàu muoán traùnh mtietxy=mtietbdtranh else mthuxy=0 mtietxy=0 endif mkhanang=0 mbhoc1=buoihoc(1) //buoåi hoïc öu tieân ôû daïng soá cuûa nhoùm lôùp ñaïi dieän FOR ibuoi=1 TO qbuoimax ijbuoi=mod(mbhoc1+ibuoi+2,qbuoimax)+1 // qbuoimax : soá buoåi toái ña trong moät ngaøy stor 0 to mbbi1, mbbi2 // gaùn giaù trò 0 cho hai bieán mbbi1,mbbi2 do pforbuoi with ijbuoi,mbbi1,mbbi2,1 // laáy tieát baét ñaàu vaø tieát cuoái cuøng cuûa buoåi FOR ithu=2 TO qthumax // ijbuoi gaùn cho hai bieán mbbi1,mbbi2 FOR itiet=1 TO ptietbuoi(ijbuoi,1)+1-mstpp // ptietbuoi(ijbuoi,1) : laáy soá tieát trong mkq=.F. // buoåi ijbuoi if ithu=mthuxy .and. mbbi1-1+itiet=mtietxy loop // chöông trình seõ quay trôû veà thöïc hieän caùc leänh töø ñaàu voøng laëp ngay endif // maø khoâng thöïc hieän tieáp caùc leänh sau leänh loop trong voøng laëp FOR ist=1 TO mstpp mkq=mkq .OR. !empty(dimtkb(ithu,mbbi1-1+itiet+ist-1)) IF mkq EXIT FOR ENDIF ENDFOR IF .NOT. mkq // ñaõ raõnh tìm phoøng raõnh if !type('m_khxetph')='C' // neáu muoán xeùt phoøng mkqtp=.f. mphongtv='' // phoøng ñöôïc traû veà mthu=ithu mtiet=mbbi1-1+itiet // thöïc hieän thuû tuïc kieåm tra phoøng do ktraphong with mtphong,mthu,mtiet,mstpp,mtcph,mssv,mmsk,mkqtp,mphongtv else // khoâng muoán xeùt phoøng mkqtp=.t. mphongtv=m_khxetph endif IF mkqtp // ñaõ tìm ñöôïc phoøng Þ ghi nhaän khaû naêng naøy mkhanang=mkhanang+1 dimthu(mkhanang)=ithu dimtiet(mkhanang)=mbbi1-1+itiet dimphong(mkhanang)=mphongtv mtphong=mphongtv ELSE dimtkb(ithu,mbbi1-1+itiet)='P' // gaùn kyù töï naøy cho bieát laø khoâng tìm ñöôïc ENDIF // phoøng cho khaû naêng ñang xeùt ENDIF ENDFOR ENDFOR ENDFOR ENDPROC Thuû tuïc ktraphong : Procedure ktraphong para mtphong,mthu,mtiet,mstpp,mtcph,mssv,mmsk,mkqua,mphongtv ¼ ¼ Endproc . Caùc thoâng soá cuûa thuû tuïc : . mtphong : phoøng ñöôïc choïn trong quaù trình xeáp cuûa moät cuïm tieát . mthu : thöù caàn kieåm tra phoøng . mtiet : tieát baét ñaàu . mstpp : soá tieát cuûa cuïm tieát . mtcph : tính chaát phoøng . mssv : soá sinh vieân hoïc . mmsk : maõ khoa ñeå tìm phoøng öu tieân theo khoa . mkqua : keát quaû cuûa vieäc kieåm tra phoøng . mphongtv : maõ phoøng ñöôïc traû veà khi thuû tuïc keát thuùc . Nhieäm vuï : kieåm tra phoøng, neáu nhö chöa coù phoøng thì tìm phoøng phuø hôïp cho cuïm tieát ñang xeùt . § giaûi thuaät : ¨ neáu moân khoâng caàn phoøng (mtcph = '0') thì keát thuùc thuû tuïc vaø traû veà caùc giaù trò : . mkqua = True . mphongtv = '' ¨ ngöôïc laïi : moân hoïc phaûi caàn phoøng · neáu chöa coù phoøng : döïa vaøo caùc thoâng soá nhö : heä soá ñi hoïc cuûa sinh vieân (phesodihoc), heä soá laõng phí phoøng (phesophgcp) chöông trình seõ ñi tìm phoøng thoûa maõn theo thöù töï öu tieân : . tìm phoøng thoûa maõn theo khoa caàn öu tieân tröôùc . neáu khoâng coù phoøng thì môùi ñi tìm trong taøi nguyeân phoøng xem coù phoøng naøo thoûa maõn thì laáy (tìm töø söùc chöùa nhoû nhaát ñeán lôùn nhaát) · neáu ñaõ coù phoøng (phoøng naøy ñöôïc tính bôûi chöùc naêng tính phoøng döï kieán hay phoøng naøy laø phoøng ñöôïc nhaäp vaøo bôûi nguôøi söû duïng trong chöùc naêng xeáp öu tieân tuyeät ñoái ) thì ôû ñaây chính laø chöùc naêng kieåm tra, xem phoøng ñoù coù raõnh hay khoâng ? : _ neáu raõnh thöïc söï thì keát thuùc chöông trình vaø traû veà caùc giaù trò : . mkqua = True . mphongtv = phoøng caàn kieåm tra _ neáu phoøng naøy khoâng raõnh thì chöông trình seõ ñi tìm phoøng khaùc, luùc naøy ta xem nhö laø chöa coù phoøng vaø vieäc ñi tìm phoøng cuõng dieãn ra theo thöù töï öu tieân : . tìm theo khoa . neáu khoâng coù thì tìm trong taøi nguyeân phoøng theo söùc chöùa töø nhoû ñeán lôùn ¨ neáu khoâng tìm ñöôïc phoøng thì keát quaû traû veà laø : mkqua = False II . Giaûi thuaät cuûa thuû tuïc choïn khaû naêng(chon1toiuu) : tìm 1 toái öu trong caùc khaû naêng döïa vaøo taäp caùc raøng buoäc meàm. . laáy khaû naêng coù ñieåm toái öu cao nhaát ¨ Caùch tính ñieåm toái öu cho moãi khaû naêng : ÖÙng vôùi moãi ñieàu kieän toái öu : Xeùt cho moãi nhoùm lôùp trong nhoùm lôùp gheùp : neáu thoûa thì cho ñieåm, neáu khoâng thoûa thì xem coù thoûa ñieàu kieän naøo taïm chaáp nhaän ñöôïc khoâng, neáu coù thì cho ñieåm, neáu khoâng cho ñieåm = 0. ÔÛ ñaây chæ coù 2 caùch cho ñieåm : 1. ñieåm cuûa ñieàu kieän toái öu 2. cho ñieåm = 0 . Neáu ñaït ñieåm toái ña thì khoâng caàn xeùt caùc khaû naêng sau. ¨ Giaûi thuaät coù theå cho pheùp khi xeùt 1 khaû naêng : luùc ñang xeùt 1 ñieàu kieän toái öu, ñaùnh giaù cho ñieåm xong chöông trình seõ cho pheùp khoâng xeùt tieáp caùc ñieàu kieän toái öu thaáp hôn nöõa maø thoaùt ra ñi xeùt cho khaû naêng tieáp theo ,vì xeùt thaáy ñieåm toái öu cuûa khaû naêng naøy thaáp hôn ñieåm toái öu khaû naêng tröôùc. Ñieàu ñoù seõ laøm cho giaûi thuaät nhanh hôn, khoâng phaûi ñi tính tieáp cho taát caû caùc ñieàu kieän toái öu cuûa 1 khaû naêng roài môùi so saùnh. § giaûi thuaät cuï theå : ¨ Giaûi thích moät soá caùc teân bieán : . ÔÛ giaûi thuaät naøy coù 13 ñieàu kieän toái öu vôùi : . ñieåm cuûa ñieàu kieän toái öu coù möùc öu tieân cao nhaát = 216 . ñieåm cuûa ñieàu kieän toái öu coù möùc öu tieân thaáp nhaát = 24 goïi mdiemmax laø ñieåm toái ña ñaït ñöôïc Þ mdiemmax = 24 + 25 + 26 + ¼ + 215 + 216 = 24 ´ (1 + 21 + 22 + 23 + ¼ + 211 + 212) = 24 ´ (212 + 1 - 1) = 217 - 16 . msolopgh : soá nhoùm lôùp trong nhoùm lôùp gheùp moân hoïc . mdiemmaxtl : ñieåm toái ña ñaït ñöôïc tính cho taát caû caùc nhoùm lôùp trong nhoùm lôùp gheùp . mkhanang : soá khaû naêng ñaõ tìm ñöôïc cho cuïm tieát döï ñònh xeáp ôû thuû tuïc tìm cuïm tieát raõnh . qbuoimax, qtiettong : soá buoåi hoïc vaø toång soá tieát trong ngaøy Procedure chon1toiuu // Tìm moät toái öu trong caùc khaû naêng. Neáu coù thì xeáp luoân , neáu khoâng thì ñaùnh giaù giaù trò // cuûa töøng khaû naêng roài môùi choïn moät khaû naêng toát nhaát mdiemmaxtl=mdiemmax*msolopgh mdiemcnmax=-1 FOR jkn=1 TO mkhanang mthu=dimthu(jkn) // dimthu,dimtiet,dimphong : laø caùc maûng chöùa thöù,tieát baét ñaàu, mtiet=dimtiet(jkn) // phoøng cuûa caùc khaû naêng ñaõ tìm ñöôïc mtphong=dimphong(jkn) mbuoi=pbuoi(mtiet,1) // pbuoi(x) : laáy buoåi ôû daïng soá cuûa tieát x idimb=(mthu-2)*qbuoimax+mbuoi idimt=(mthu-2)*qtiettong+mtiet mdiemtu=0 // ñieåm toái öu FOR itu=1 TO mcapdiem-4 // mcapdiem : laø 1 haèng soá coù giaù trò = 17 mii=0 FOR mmlop=1 TO msolopgh jtu=LTRIM(STR(itu)) mdiemtp=toiuu&jtu() // mdiemtp : ñieåm cuûa töøng thaønh phaàn mdiemtu=mdiemtu+mdiemtp // toiuu&jtu() : caùc haøm tính ñieåm toái öu mii=mii+mdiemtp // ví duï : toiuu1,toiuu2,¼ ENDFOR mdiemgh=mdiemtu+(2^(mcapdiem-itu)-16)*msolopgh // ñieåm max coù theå ñaït ñöôïc IF mdiemgh<mdiemcnmax // trong luùc ñang tính ñieåm öùng vôùi 1 haøm tính toái öu naøo EXIT // ñoù cho taát caû caùc nhoùm lôùp trong nhoùm lôùp gheùp, neáu xeùt thaáy khaû naêng ENDIF // naøy coù ñieåm toái öu nhoû hôn caùc khaû naêng tröôùc ñoù thì khoâng caàn tính ENDFOR // tieáp cho caùc haøm toái öu khaùc, ñi xeùt khaû naêng tieáp theo Þ hieäu quaû hôn IF mdiemtu=mdiemmaxtl // neáu coù 1 khaû naêng ñaït ñöôïc ñieåm toái ña Þ thoaùt vaø return // choïn khaû naêng ñoù Þ chöông trình seõ chaïy nhanh hôn ELSE // vì khoâng caàn xeùt ñeán cho caùc khaû naêng sau IF mdiemtu>mdiemcnmax mthucn=mthu mtietcn=mtiet mtphongcn=mtphong mdiemcnmax=mdiemtu ENDIF ENDIF ENDFOR mthu=mthucn mtiet=mtietcn mtphong=mtphongcn mdiemtu=mdiemcnmax ENDProc ¨ Sau ñaây laø caùc ñieàu kieän toái öu (caùc raøng buoäc meàm) : Ñieåm cuûa caùc ñieàu kieän toái öu : caùc ñieåm naøy laø caùc thoâng soá ñoäng, chuùng coù theå ñöôïc thay ñoåi bôûi ngöôøi söû duïng (duøng chöùc naêng söûa ñoä öu tieân cuûa caùc ñieàu kieän toái öu) . mdiem1 : öu tieân soá buoåi sinh vieân < qui ñònh . mdiem2 : sinh vieân hoïc ñuùng buoåi qui ñònh . mdiem3 : khoaûng caùch giöõa 2 buoåi hoïc cuøng moân . mdiem4 : traùnh xeáp 5 tieát . mdiem5 : öu tieân traùnh buoåi leû 2 tieát, 1 tieát . mdiem6 : öu tieân cheøn khoaûng traéng ôû giöõa . mdiem7 : khoâng coù khoaûng caùch giöõa hai tieát hoïc cuûa lôùp . mdiem8 : öu tieân sinh vieân hoïc 1 buoåi trong 1 ngaøy . mdiem9 : öu tieân soá buoåi caùn boä < qui ñònh . mdiem10 : öu tieân caùn boä daïy 1 buoåi trong 1 ngaøy . mdiem11 : öu tieân caùn boä daïy < buoimincb . mdiem12 : khoaûng caùch giöõa 2 buoåi cuøng moân (neáu 2 phaân tieát) . mdiem13 : ñoái chieáu cho buoåi hoïc cuøng moân Toiuu1 : öu tieân soá buoåi sinh vieân < qui ñònh . neáu soá buoåi ñaõ xeáp cuûa lôùp ñang xeùt (chöa tính buoåi cuûa cuïm tieát döï ñònh xeáp) < soá buoåi cho pheùp toái ña cuûa lôùp ñoù thì thoûa maõn ñieàu kieän . ngöôïc laïi (³) : neáu xeùt thaáy buoåi cuûa cuïm tieát döï ñònh xeáp laø 1 buoåi môùi (buoåi môùi laø buoåi chöa coù tieát naøo) thì ñöôïc xem nhö vaãn thoûa maõn ñieàu kieän . ngöôïc laïi laø khoâng thoûa maõn § giaûi thuaät cuï theå : Function toiuu1 if xbuoixep(mmlop)>=mbcphepmax(mmlop) if xbuoi(mmlop,idimb)=0 // moät buoåi môùi return 0 endif endif return mdiem1 Toiuu2 : hoïc ñuùng buoåi qui ñònh . neáu cuïm tieát ñang xeùt coù loaïi buoåi truøng vôùi buoåi qui ñònh hoïc cuûa lôùp thì ñöôïc xem nhö laø thoûa . neáu khoâng truøng : - xeùt xem lôùp ñoù coù ñöôïc cho pheùp hoïc 2 loaïi buoåi hay khoâng (soá buoåi cho pheùp toái ña cuûa lôùp > (qthumax -1) ?). Neáu coù thì ñeám loaïi buoåi thöù 2 (loaïi buoåi naøy khoâng phaûi laø loaïi buoåi hoïc qui ñònh cuûa lôùp), löu yù ôû ñaây khi ñeám laø ñaõ tính luoân buoåi cuûa cuïm tieát döï ñònh xeáp. - neáu keát quaû ñeám £ (soá buoåi cho pheùp toái ña cuûa lôùp ñoù – soá buoåi toái ña trong 1 tuaàn cuûa loaïi buoåi qui ñònh) thì vaãn ñöôïc xem laø thoûa maõn ñieàu kieän ngöôïc laïi thì khoâng thoûa maõn § giaûi thuaät cuï theå : Function toiuu2 if (mbuoi=buoihoc(mmlop)) return mdiem2 endif if mbcphepmax(mmlop)>qthumax-1 mnxtbuoi=pbuoike(buoihoc(mmlop)) // pbuoike() : laáy buoåi keá cuûa buoåi hoïc öu tieân msobuoi=countbuoi(mnxtbuoi) // cuûa nhoùm lôùp if msobuoi<=mbcphepmax(mmlop)-(qthumax-1) return mdiem2 endif endif Return 0 // Haøm ñeám soá buoåi Function countbuoi para jbuoi msb=0 for jj=2 TO qthumax jdimb=qbuoimax*(jj-2)+jbuoi msb=msb+IIF(xbuoi(mmlop,jdimb)>0 .OR. (jj=mthu .AND. mbuoi=jbuoi),1,0) endfor Return msb Toiuu3 : xeùt khoaûng caùch giöõa 2 buoåi cuûa cuøng 1 moân hoïc Xeùt caùc tröôøng hôïp : . soá phaân tieát cuûa moân hoïc = 4 vaø chæ xeùt ôû laàn xeáp cuûa phaân tieát thöù 2, 3 . soá phaân tieát cuûa moân hoïc = 2 vaø ôû laàn xeáp cuûa phaân tieát thöù 2 . soá phaân tieát cuûa moân hoïc = 3 vaø ôû laàn xeáp cuûa phaân tieát thöù 2, 3 Neáu ñang xeùt ôû phaân tieát thöù 2 cuûa moân hoïc : . neáu thöù cuûa cuïm tieát döï ñònh xeáp saùt vôùi hay caùch 5 thöù vôùi thöù cuûa phaân tieát thöù 1 ñaõ ñöôïc xeáp thì xem nhö laø khoâng thoûa maõn ñieàu kieän toái öu naøy Neáu ñang xeùt ôû phaân tieát thöù 3 cuûa moân hoïc : . neáu thöù cuûa cuïm tieát döï ñònh xeáp saùt vôùi hay caùch 5 thöù so vôùi phaân tieát thöù 1 (hay phaân tieát thöù 2) ñaõ ñöôïc xeáp thì xem nhö khoâng thoûa ñieàu kieän toái öu Ngöôïc laïi thì ñöôïc xem laø thoûa maõn § giaûi thuaät cuï theå : Function toiuu3 if (msopphoi=4 .AND. INLIST(lanxep,1,4)) .OR. (lanxep=1) .OR. (msopphoi>4) return mdiem3 // msopphoi : soá phaân tieát cuûa moân hoïc endif for ilx=1 TO lanxep-1 if INLIST(ABS(mthu-thuxep(ilx)),1,5) // inlist(x,a,b) : xeùt a £ x £ b ? return 0 endif endfor Return mdiem3 Toiuu4 : khoâng ñeå laïi 1 tieát traéng trong buoåi xeáp . neáu soá tieát cuûa cuïm tieát döï ñònh xeáp = 1 hay ³ (soá tieát qui ñònh cuûa buoåi döï ñònh xeáp - 1) thì xem nhö laø thoûa maõn . xeùt : (soá tieát ñaõ xeáp trong buoåi, thöù döï ñònh xeáp + soá tieát cuûa cuïm tieát döï ñònh xeáp) = (soá tieát qui dònh cuûa buoåi döï ñònh xeáp - 1) nghóa laø coù ñeå laïi 1 tieát traéng trong buoåi, thöù döï ñònh xeáp thì xem laø khoâng thoûa maõn ñieàu kieän toái öu. . ngöôïc laïi thì ñöôïc xem laø thoûa 1 2 3 4 5 6 : ª ª ª ª * * * * * * qtiettong : cuïm tieát ñaõ ñöôïc xeáp * : cuïm tieát döï ñònh xeáp : tieát troáng chöa ñöôïc xeáp § giaûi thuaät cuï theå : Function toiuu4 if xbuoi(mmlop,idimb)+mstpp=ptietbuoi(mbuoi,1)-1 ; .and. .not. (mstpp=ptietbuoi(mbuoi,1)-1) return 0 endif Return mdiem4 Toiuu5 : khoâng ñeå xaûy ra tieát leû neáu ñaõ xeáp ñeán buoåi cuoái neáu soá buoåi ñaõ xeáp cuûa lôùp ³ soá buoåi cho pheùp toái ña cuûa lôùp ñoù thì : . neáu coù tieát leû 1, 2 (hoaëc = 3 neáu qbuoimax = 3) trong caùc buoåi ñaõ ñöôïc xeáp cuûa lôùp, thì buoåi coù tieát leû phaûi laø buoåi ôû thöù maø cuïm tieát döï ñònh xeáp muoán söû duïng, nhö vaäy môùi ñöôïc xem laø thoûa maõn. neáu thöïc söï laø ta ñang xeáp ôû buoåi cuoái cuûa lôùp (mtdaxep(mmlop) + mstpp = xsttonglp(mmlp)) vaø soá tieát cuûa cuïm tieát döï ñònh xeáp £ 2 thì khoâng ñöôïc söû duïng buoåi môùi, nhö vaäy môùi ñöôïc xem laø thoûa maõn. § giaûi thuaät cuï theå : Function toiuu5 mcotietle=.F. IF xbuoixep(mmlop)>=mbcphepmax(mmlop) // Tìm xem coù choã naøo moät tieát leû xaûy ra FOR ithu=2 TO qthumax for ibuoi=1 TO qbuoimax idim=qbuoimax*(ithu-2)+ibuoi if betw(xbuoi(mmlop,idim),1,qbuoimax) // xaûy ra mcotietle=.T. exit endif endfor if mcotietle exit endif ENDFOR ENDIF IF (.NOT. mcotietle) .AND. mstpp<=2 if mtdaxep(mmlop)+mstpp=xsttonglp(mmlop) // xeáp buoåi cuoái if xbuoi(mmlop,idimb)=0 // moät buoåi môùi mcotietle=.T. endif endif ENDIF if .not. mcotietle return mdiem5 endif IF xbuoixep(mmlop)>=mbcphepmax(mmlop) // Tìm xem coù choã naøo moät tieát leû xaûy ra for ithu=2 TO qthumax for ibuoi=1 TO qbuoimax idim=qbuoimax*(ithu-2)+ibuoi if betw(xbuoi(mmlop,idim),1,qbuoimax) .AND. mthu=ithu .AND. mbuoi=ibuoi return mdiem5 endif endfor endfor ENDIF Return 0 Toiuu6 : öu tieân cheøn 2 tieát vaøo khoaûng traéng neáu coù Trong tröôøng hôïp naøy tieát baét ñaàu cuûa cuïm tieát döï ñònh xeáp phaûi = (tieát baét ñaàu cuûa buoåi döï ñònh xeáp + 3), vaøsoá tieát ñaõ xeáp cuûa buoåi döï ñònh xeáp ñaõ laø 4. 1 2 3 4 5 6 : ª ª ª * * ª qtiettong ª : cuïm tieát ñaõ ñöôïc xeáp : cuïm tieát döï ñònh xeáp § giaûi thuaät cuï theå : Function toiuu6 if mstpp#2 return mdiem6 endif FOR ithu=2 TO qthumax FOR ibuoi=1 TO qbuoimax idim=(ithu-2)*qbuoimax+ibuoi stor 0 to mbb1,mbb2 do pforbuoi with ibuoi,mbb1,mbb2,1 idimtiet=(ithu-2)*qtiettong+mbb1+3 IF xbuoi(mmlop,idim)=4 .AND. (.NOT. dimlop(mmlop,idimtiet)) ; .AND. (.NOT. dimlop(mmlop,idimtiet+1)) mdd3=IIF(mthu=ithu .AND. mtiet=mbb1+3,mdiem6,0) return mdd3 ENDIF ENDFOR ENDFOR Return mdiem6 Toiuu7 : phaûi coù söï lieân tuïc giöõa caùc tieát trong 1 buoåi, traùnh xeù buoåi Neáu soá tieát trong phaân tieát ñang xeùt ³ soá tieát qui ñònh trong buoåi döï ñònh xeáp –1 thì ñöông nhieân thoûa. Neáu chöa coù xeáp tieát naøo trong buoåi maø döï ñònh xeáp thì cuïm tieát döï ñònh xeáp phaûi naèm ñaàu buoåi hoaëc cuoái buoåi thì môùi ñöôïc xem laø thoûa maõn ñieàu kieän Neáu ñaõ coù tieát trong buoåi döï ñònh xeáp thì : neáu cuïm tieát döï ñònh xeáp laø : . Ñaàu buoåi thì tieát keá döôùi cuûa cuïm tieát phaûi coù tieát ñaõ xeáp . Cuoái buoåi thì tieát keà treân cuûa cuïm tieát phaûi coù tieát ñaõ xeáp . Naèm ôû giöõa buoåi thì tieát keà treân vaø keà duôùi phaûi coù tieát ñaõ xeáp Nhö vaäy môùi ñöôïc xem laø thoûa maõn ñieàu kieän. 1 2 3 4 5 6 * ª * ª ª ª ª * ª ª * ª * ª * ª qtiettong ñaàu buoåi cuoái buoåi giöõa buoåi ª : cuïm tieát cuõ : cuïm tieát môùi § giaûi thuaät cuï theå : Function toiuu7 if mstpp>=ptietbuoi(mbuoi,1)-1 // ptietbuoi() : laáy soá tieát trong buoåi return mdiem7 endif mbb=pbuoi(mtiet,1) idimlp=(mthu-2)*qtiettong+mtiet idim=(mthu-2)*qbuoimax+mbb mban=IIF(xbuoi(mmlop,idimb)>0,.T.,.F.) IF .NOT. mban // Khoâng baän nhöng khoâng phaûi tieát ñaàu/ cuoái if .not. (ptietdau(mtiet) .OR. ptietcuoi(mtiet+mstpp-1)) return 0 endif ELSE IF ptietdau(mtiet) // ñaàu buoåi IF .NOT. dimlop(mmlop,idimt+mstpp) // Tieát keá döôùi ñang troáng RETURN 0 ENDIF ELSE IF ptietcuoi(mtiet+mstpp-1) // cuoái buoåi IF .NOT. dimlop(mmlop,idimt-1) // Tieát keà treân ñang troáng RETURN 0 ENDIF ELSE IF .NOT. (dimlop(mmlop,idimt+mstpp) .OR. dimlop(mmlop,idimt-1)) RETURN 0 // giöõa buoåi ENDIF ENDIF ENDIF ENDIF Return mdiem7 Toiuu8 : hoïc 1 buoåi 1 ngaøy Neáu chæ hoïc 1 buoåi trong 1 ngaøy thì thoûa Neáu laø 2 buoåi thì xeùt xem : . lôùp ñoù coù ñöôïc quyeàn hoïc 2 loaïi buoåi trong 1 ngaøy khoâng ? (mbcphepmax(mmlop) > (qthumax - 1)). Neáu coù thì xeùt toång soá cuûa loaïi buoåi khoâng laø loaïi buoåi qui ñònh hoïc cuûa lôùp £ (soá buoåi cho pheùp toái ña cuûa lôùp – toång soá buoåi cuûa 1 loaïi buoåi trong tuaàn) Neáu ñuùng thì vaãn xem laø thoûa maõn ñieàu kieän . Löu yù : trong tröôøng hôïp hoïc 2 buoåi thì neáu buoåi döï ñònh xeáp chính laø loaïi buoåi maø lôùp ñöôïc qui ñònh hoïc thì ñöông nhieân ñöôïc xem laø thoûa. Ta chæ xeùt ñeán tröôøng hôïp buoåi döï ñònh xeáp khoâng laøøloaïi buoåi qui ñònh hoïc cuûa lôùp. § giaûi thuaät cuï theå : Function toiuu8 ibuoike=pbuoike(mtiet,1) // buoåi keá tieáp idim=qbuoimax*(mthu-2)+ibuoike if xbuoi(mmlop,idim)=0 // buoåi keá khoâng baän return mdiem8 endif if mbcphepmax(mmlop)>(qthumax-1) mnxtbuoi=pbuoike(buoihoc(mmlop)) msobuoi=countbuoi(mnxtbuoi) if msobuoi<=mbcphepmax(mmlop)-(qthumax-1) return mdiem8 endif endif Return 0 Toiuu9 : khoâng vöôït quaù soá buoåi toái ña trong 1 tuaàn cuûa caùn boä giaûng daïy Neáu soá buoåi ñaõ xeáp trong 1 tuaàn cuûa caùn boä (sbxepcb) < soá buoåi toái ña trong 1 tuaàn cuûa caùn boä (buoimincb) thì ñöôïc xem laø thoûa (löu yù : ôû ñaây chöa tính vaøo buoåi döï ñònh xeáp) Ngöôïc laïi : xeùt xem coù soá tieát ñaõ xeáp trong buoåi döï ñònh xeáp chöa ?, töùc laø khoâng toán theâm 1 buoåi môùi, buoåi döï ñònh xeáp chính laø buoåi ñaõ ñöôïc xeáp thì ta vaãn xem laø thoûa maõn ñieàu kieän. § giaûi thuaät cuï theå : Function toiuu9 if sbxepcb<buoimincb .or. empty(mmscb) // soá buoåi max cuûa caùn boä return mdiem9 endif mbb=pbuoi(mtiet,1) if tietban(mthu,mbb)>0 // buoåi ñaõ xeáp return mdiem9 endif Return 0 Toiuu10 : caùn boä chæ daïy 1 buoåi trong 1 ngaøy Döïa vaøo maûng tieát baän tietban ñeå xeùt. § giaûi thuaät cuï theå : Function toiuu10 ibuoike=pbuoike(mtiet,1) // buoåi keá tieáp if (tietban(mthu,ibuoike)>0) return 0 // daïy nhieàu hôn 1 buoåi trong 1 ngaøy endif Return mdiem10 Toiuu11 : Neáu nhö soá tieát ñaõ daïy trong 1 ngaøy cuûa caùn boä + soá tieát cuûa cuïm tieát döï ñònh xeáp > buoimincb thì xem nhö laøkhoâng thoûa maõn ñieàu kieän naøy. § giaûi thuaät cuï theå : Function toiuu11 if tietban(mthu,1)+tietban(mthu,2)+iif(qbuoimax=3,tietban(mthu,3),0)+mstpp>buoimincb return 0 // Soá tieát cuûa caùn boä trong ngaøy nhoû hôn soá buoåi toái thieåu endif // trong tuaàn maø caùn boä phaûi ñi daïy Return mdiem11 Toiuu12 : xeùt cho tröôøng hôïp moân hoïc chæ coù 2 phaân tieát . neáu moân hoïc coù soá phaân tieát khaùc 2 hay laø ñang xeáp cho phaân tieát thöù 1 cuûa moân hoïc thì ñöôïc xem laø thoûa maõn ñieàu kieän . ngöôïc laïi (moân hoïc chæ coù 2 phaân tieát vaø ñaây laø laàn xeáp cho phaân tieát thöù 2 cuûa moân hoïc). Neáu nhö laàn xeáp thöù 2 naøy caùch laàn xeáp thöù nhaát 3 hay 4 thöù thì ñöôïc xem laø thoûa. ví duï 1 : laàn 1 : thöù hai laàn 2 : thöù naêm hay thöù saùu ví duï 2 : laàn 1 : thöù baûy laàn 2 : thöù ba hay thöù tö . ngöôïc laïi thì ñöôïc xem laø khoâng thoûa. § giaûi thuaät cuï theå : Function toiuu12 if lanxep=1 .or. msopphoi2 // msopphoi : soá phaân tieát cuûa moân hoïc return mdiem12 endif if (inlist(abs(mthu-thuxep(1)),3,4)) return mdiem12 endif Return 0 Toiuu13 : hai phaân tieát lieân tieáp cuûa moân hoïc thì khoâng cuøng ñaàu buoåi hoaëc cuoái buoåi § giaûi thuaät cuï theå : Function toiuu13 // Hai laàn lieân tieáp khoâng cuøng ñaàu buoåi hoaëc cuoái buoåi laø ñöôïc // Neáu khoâng vi pham hai laàn ñaàu buoåi hoaëc cuoái buoåi lieân tieáp // thì ñaùnh giaù laø 1 if mdaubuoi='N' return mdiem13 endif if mdaubuoi='C' .AND. .not. ptietcuoi(mtiet+mstpp-1) return mdiem13 endif if mdaubuoi='D' .AND. .not. ptietdau(mtiet) return mdiem13 endif Return 0 7.5 Xem/Hieäu chænh thôøi khoùa bieåu (TKB): Xem : . Xem TKB lôùp . Xem TKB caùn boä . Xem TKB phoøng Huûy boû : . Huûy boû TKB 1 cuïm tieát theo maõ lôùp/tieát/thöù . Huûy boû TKB 1 buoåi theo maõ lôùp/buoåi/thöù . Huûy boû TKB 1 moân hoïc theo maõ lôùp/maõ moân hoïc Dôøi : . Dôøi TKB 1 cuïm tieát theo maõ lôùp/tieát/thöù . Dôøi TKB 1 buoåi tieát theo maõ lôùp/buoåi/thöù Thay ñoåi : . Thay ñoåi caùn boä giaûng daïy cuûa moät moân hoïc theo maõ lôùp/tieát/thöù . Thay ñoåi phoøng cuûa moät cuïm tieát hoïc 7.6 Kieåm tra thôøi khoùa bieåu : thöïc hieän thuû tuïc ktratkb, thuû tuïc naøy coù nhieäm vuï : · Môû caùc file nlgmh, tkblop, tkbcb kieåm tra xem ñaõ xeáp thôøi khoùa bieåu chöa ? (ñeám soá record cuûa caùc file tkblop, tkbcb) · Neáu ñaõ xeáp thôøi khoùa bieåu roài thì môùi thöïc hieän vieäc kieåm tra : . copy caùc baûng tkblop,tkbcb,nlgmh ra caùc baûng taïm vaø xöû lyù treân caùc baûng taïm ño ù . boû caùc moân hoïc xeáp song song khoâng hôïp lyù . boû caùc moân hoïc coù tieát khoâng hôïp lyù . boû caùc moân hoïc truøng thôøi khoùa bieåu lôùp, caùn boä, phoøng . Neáu coù truøng thì boû vaøo caùc file sai (saitkb, saitkbcb, ¼) . Thöïc hieän thuû tuïc kieåm tra chính (xkiemtrach) : thuû tuc naøy coù nhieäm vuï kieåm tra xem soá tieát ñaõ xeáp cuûa töøng maãu tin trong baûng nlgmh coù ñuùng baèng toång cuûa soá tieát coù trong caùc baûng tkblop vaø tkbcb, töông öùng vôùi maõ moân hoïc, maõ caùn boä giaûng daïy, maõ töøng nhoùm lôùp trong nhoùm lôùp gheùp khoâng ? Chöông 5 : GIAO DIEÄN CUÛA CHÖÔNG TRÌNH

Các file đính kèm theo tài liệu này:

  • docbaocao.doc
  • rar78888_Thiết kế phần mềm - Xếp_.rar
  • pdfbaocao.pdf