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.
66 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2329 | Lượt tải: 2
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