GIỚI THIỆU
1.Mục đích của chương trình
Ngày nay với sự phát triển mạnh mẽ của nghành công nghệ thông tin thì nhu
cầu học hỏi nâng cao kiến thức ngày càng tăng. Đặc biệt đối với những sinh viên
nghành tin học thì việc nâng cao kiến thức để đáp ứng yêu cầu của công việc là
một điều cần thiết. Quá trình học hỏi này luôn gắn liền với máy tính cá nhân.
Trong điều kiện hiện nay khi mà hầu hết các sinh viên không trang bò cho mình
một máy tính hoặc nếu có thì cũng không tham gia các tiện ích của máy tính như
mạng Intenet thì việc học trở nên khó khăn với sự thay đổi từng ngày của các
công nghệ cũng như kỹ thuật.
Để giải quyết tình trạng trên khoa CNTT trường Đại Học Kỹ Thuật Tp Hồ
Chi Minh đã cố gắng trang bò cho các phòng máy để tạo điều kiện cho các sinh
viên thực tập máy.
Nhưng vấn đề cũng phải đặt ra là làm sao tạo điều kiện tốt nhất cho các sinh
viên thực tập cũng như cũng như sử dụng hết công suất của phòng máy. Đồng
thời cũng cần phải quản lý một số lượng lớn các sinh viên của khoa ra vào phòng
máy để thực tập và bảo vệ cơ sở vật chất đã được trang bò mà ở đây là các máy
tính. Ngòai ra cũng cần phải giám sát chặt chẽ các họat động của sinh viên trong
phòng máy để ngăn ngừa tình trạng quấy phá máy server. Cuối cùng là khi phân
phối lòch đăng ký của từng sinh viên cũng cần đảm bảo sự công bằng, hợp lý và
tính tự do của sinh viên.
2.Nhiệm vụ
Từ mục đích được nêu ra ở trên ta thấy cần thiết phải xây dựng một chương
trình thực hiện việc đăng ký giờ thực tập qua Web. Chương trình này phải có
tính năng như sau :
Đối với sinh viên chương trình phải cho phép sinh viên đăng ký máy
và tự động phân phối máy cho sinh viên đó và trả kết quả về lại cho sinh
viên.
Và có những công cụ để trợ giúp người quản lý phòng máy theo dõi
được tiến trình thực tập của từng sinh viên cũng như quản lý các tình trạng
của các máy tính thuộc phòng máy.
ngăn ngừa sự truy cập.
Remote login
Đây là một ứng dụng rất hay của mạng Internet, remote login cho
phép người sử dụng ngồi trên một máy và kết nối đén một máy từ xa và
thiết lập một quá trình login tương tác. Người sử dụng giao tiếp với máy
tính từ xa qua bàn phím và màn hình của mình còn các công việc tính toán
thì thực hiện trên máy mà họ kết nối vào.
World Wide Web – WWW
WWW là một kiến trúc cho phép truy cập vào các tài liệu liên kết
được phân bố rộng rãi trên hàng triệu máy tính trên mạng Internet. Các tài
liệu này cũng rất đa dạng từ những trang tài liệu thông thường cho đến
những hình ảnh âm thanh cũng như các công cụ để trao đổi dữ liệu qua
World Wide Web. Mô hình CGI được sử dụng để giao tiếp với Web
server cho phép mở rộng các chức năng của Web server.
Ứng dụng mà chúng em hiện thực cũng là một ứng dụng Web thực
hiện theo mô hình CGI. Nó cho phép một sinh viên thông qua mạng
Internet có thể thực việc đăng ký giờ thực tập của mình một cách dễ dàng.
Đồng thời cũng cho phép quản lý các thông tin về phòng máy và sinh
viên qua Web đây là một hình thức quản trò cơ sở dữ liệu qua mạng.
PHẦN A PHÂN TÍCH
CHƯƠNG I CÁC VẤN ĐỀ CÓ LIÊN QUAN
1.Thực tế tình hình sử dụng máy tại khoa Công Nghệ Thông
Tin trường Đại Học Kỹ Thuật –Tp Hồ Chí Minh.
Hiện nay khoa có ba phòng máy dành cho sinh viên thực tập. Mỗi phòng máy
có khoảng 30 máy.
Các sinh viên thuộc khoa có làm Luận văn tốt nghiệp, Thực tập tốt
nghiệp hoặc Đồ án môn học, muốn sử dụng máy phải đăng ký với người
quản lí phòng máy và được sắp xếp máy để sử dụng.
Các máy thuộc của khoa đều nối mạng nên việc sử dụng các phần
mềm khá dể dàng. Tuy nhiên về Hệ Điều Hành thì có một số máy có cài
xếp máy cho sinh viên.
Sinh viên sử dụng chương trình để đăng ký và được xếp máy nếu máy
còn trống.
Sau khi xếp máy cho sinh viên sẽ lưu các thông tin cần thiết vào
database, để hệ thống giám sát việc sử dụng máy của sinh viên sẽ truy
xuất database này và cho phép sử dụng nếu xét thấy việc login của sinh
viên đó là đúng.
Việc xếp máy cho sinh viên sao cho sinh viên ít phải thay đổi máy khi
sử dụng các ca liên tiếp.
Sau xếp máy cho sinh viên thì các máy còn lại có số ca trống ít bò phân
mảnh nhất.
Sinh viên đăng ký được máy mình mong muốn (hệ điều hành và
chương trình chạy trên máy đó).
Sinh viên được phép thay đổi lòch đăng ký của mình.
Administrator sẽ phân bổ tài nguyên có được như thế nào để đảm bảo
mọi sinh viên đều có thể sử dụng máy và tài nguyên của phòng máy được
sử dụng với hiệu suất cao nhất.
Administrator có một số công cụ để giám sát việc sử dụng máy của
sinh viên trước hoăc sau đó .
Administrator có thể thu hồi một số máy vào các thời điểm nhất đònh.
3.Một số khó khăn khi thực hiện các vấn đề trên
Thông thường mỗi đề tài mà sinh viên thực hiên ,sẽ được làm trên một
môi trường hệ điều hành nào đó và cần một số phần mềm nào đó. Tất nhiên
điều này sẽ ảnh hưởng đến việc đăng ký máy thực tập của sinh viên ,chẳng
hạn sinh viên sẽ đăng ký vào những máy có cài những chương trình mà sinh
viên cần để làm đề tài chứ không đăng ký vào những máy không có chương
trình này. Như vậy để phân bổ máy thích hợp cho sinh viên chúng ta cần phải
lưu giữ các thông tin về mỗi máy, chẳng hạn như hệ điều hành, phần mềm
được cài đặt trên máy đó. Nhưng trên thực tế là chúng ta không biết trước sự
phân bổ chẳng hạn các đề tài yêu cầu về môi trường hệ điều hành cũng như
Việc tính số ca sử dụng máy để phân bổ cho sinh viên chỉ đảm bảo
nếu tất cả các sinh viên đăng ký đều đặn vào các tuần thì mọi sinh viên đều
có máy sử dụng.
Khi Administrator thu hồi máy vì một lý do nào đó. Bản thân chương
trình có thể tự động sắp xếp lại các máy, sinh viên sẽ bò xoá các ca có máy bò
thu hồi và sẽ được chuyển đến đăng ký các máy khác. Lúc đó sinh viên sẽ
nhận được lòch mới hoặc login vào trang đăng ký để biết lòch mới.
Nếu thời gian bắt đầu ,kết thúc của mỗi ca có sự thay đổi thì rất khó
khăn cho việc tìm kiếm các sinh viên sử dụng máy trong một khoảng thời gian
nào đó vì lúc này ta không thể biết các ca trước khi thay đổi có thời gian bắt
đầu, kết thúc bằng bao nhiêu.
Tập tin thể hiện mối liên quan giữa sinh viên làm đề tài được cung cấp
bởi phòng Đào Tạo của trường, tuy nhiên hiện nay format của các tập tin dữ
liệu này vẫn chưa được cung cấp một cách đầy đủ.
4.Các điều kiện cần thiết để xây dựng chương trình
Tất cả các máy là như nhau ,các sinh viên không cần phải đăng ký
phần mềm để sử dụng cũng như vò trí của phòng máy.
Có những đề tài phải sử dụng hai máy,sinh viên được phép sử dụng 2
máy (sẽ sắp xếp cho sinh viên hai máy), sinh viên không cần phải đăng ký
hai máy. Tuy nhiên số ca sử dụng của sinh viên thì vẫn được tính như là sử
dụng một máy
Mỗi tuần có 6 ngày sinh viên được thực tập ,mỗi ngày có 6 ca máy,
khoảng thời gian sử dụng máy của mỗi ca là 2 giờ. Ca đầu tiên bắt đầu từ 8h.
Vào đầu năm học Administrator phải có một số thông tin nhất đònh
các hệ số đối với từng loại hình (LVTN, ĐAMH, TTTN… ).
thời gian bắt đầu và kết thúc của từng loại hình (LVTN, ĐAMH, TTTN)
và khóa thực hiện (chính khóa).
số lượng sinh viên của từng loại hình (LVTN, ĐAMH, TTTN) và khóa
thực hiện (chính khóa).
số lượng máy hiện có.
về việc thay đổi máy).
Ưu điểm của cách sắp xếp này:
Tuy nhiên đứng về phía sinh viên thì cách sắp xếp này tỏ ra rất thuận
tiện, vì sinh viên khi nhận được lòch đăng ký sẽ xác đònh được các ca
không đăng ký được ngay tức thời và sẽ đăng ký lại.
Chờ đến một thời gian nhất đònh rồi hãy sắp xếp.
Với cách sắp xếp này sinh viên sẽ không biết được các ca mà mình không
đăng ký được để từ đó đăng ký lại (chỉ biết được sau một thời gian nhất đònh).
Ưu điểm của cách sắp xếp này :
Chúng ta hoàn toàn có thể chủ động cho việc sắp xếp vào giờ Server
rảnh rỗi.
Chương trình sắp xếp còn có thể để trên một máy nào đó khác với
Web Server.
Tạo ra được lòch sắp xếp hợp lý (lòch thực tập của sinh viên ít bò tách ra
trên nhiều máy và sau khi sắp xếp các ca còn trông ít bò phân mảnh).
Tạo tâm lý cho sinh viên đăng ký không tập trung vào một thời điểm .
Việc đăng ký của sinh viên có hai thời điểm quan
trọng mà chúng ta cần chú ý đến đó là:
Sinh viên đăng ký trong đợt đăng ký thực tập quy đònh.
Sinh viên đăng ký sau thời điểm kết thúc đăng ký quy
đònh (có thể xem như sinh viên đăng ký lại).
Do cách sắp xếp tức thời không thích hợp với một số lượng sinh viên đăng ký
nhiều.
Như vậy ứng với hai thời điểm đăng ký của sinh viên ta có thể đưa ra hai cách
sắp xếp khác nhau để đạt được hiệu quả cao nhất và đồng thời tiện lợi cho sinh
viên nhất.
Nếu sinh viên đăng ký trong khoảng thời gian cho phép đăng ký (bắt
đầu đăng ký đến kết thúc đăng ký) thì sẽ được sắp xếp lòch đăng ký vào
cuối ngày kết thúc đăng ký. Với cách sắp xếp này chương trình sẽ nhận
được nhiều lòch sau đó mới sắp xếp. Trong thời gian chương trình sắp xếp
theo thứ tự thời gian do đó khi SELECT ta cũng nhận được lòch đăng
ký của sinh viên theo thứ tự thời gian. Việc xét từng liên ca cũng sẽ
theo thứ tự đó.
Khi xét liên ca trống có thể đăng ký được cho liên ca của sinh viên
đó, ta sẽ xét liên ca trống từ nhỏ đến lớn.
Ví dụ: nếu sinh viên đăng ký 12 ta sẽ xét liên ca trống 12 rồi mới đến
123,. . .
Nếu xét đến một liên ca trống nào đó mà vừa đủ cho các liên ca
đăng ký thì chọn ngay vì nếu xét tiếp thì kết quả thu được (có thể sau
khi đăng ký số ca trống ) cũng không thay đổi.
Ví dụ: các liên ca đăng ký 12, 34, 56. Các liên ca có máy trống 1234,
123456. Khi đó nếu xét liên ca 12 sẽ chọn liên ca trống 1234 (vì 12 và 34
vừa đủ cho 1234) mà không cần xét tiếp. Sau đó xét tiếp 56 nếu không có
sự kết hợp nào vừa đủ thì đăng ký 123456. Như vậy cuối cùng liên ca còn
dư vẫn là 1234.
Nếu các liên ca trống sau khi đăng ký cho sinh viên vẫn còn dư ,
thì ta nên chọn liên ca nào : liên ca có số ca dư nhiều, liên ca có số ca
dư ít.
Chọn liên ca có số ca dư nhiều: với cách chọn này thì số
ca trống còn lại sẽ ít bò phân mảnh hơn cả.
Ví dụ:liên ca đăng ký 12, 123 liên ca trống 123, 1234. Xét liên ca
12 sẽ chọn liên ca trống 1234, sau đó xét tiếp 123 sẽ chọn liên ca
trống 123. Như vậy sau khi đăng ký liên ca trống còn lại là 34.
Ngược lại với cách chọn liên ca trống có số ca dư ít nhất thì liên ca
trống sau đăng ký sẽ là 3, 4.
Tuy nhiên với cách chọn này thì một số trường hợp liên ca đăng ký
của sinh viên sẽ bò tách ra làm nhiều liên ca .
Ví dụ:liên ca đăng ký 123, 12345. Liên ca có máy trống 1234,
123456. Khi xét liên ca 123 sẽ đăng ký vào 123456 còn dư 456, sau đó
xét tiếp 12345 không đăng ký được phải tách ra 1234 và 5. Như vậy
được phép tuỳ ý đăng ký trong số ca đó và trong thời gian cho phép thực tập.
Do đó có thể dẫn đến khả năng sinh viên không có máy để sử dụng vào một
số tuần đăng ký dồn, việc này rất khó giải quyết một cách triệt để vì đây là
sự sắp xếp riêng của từng sinh viên. Chương trình của chúng ta tính toán số
ca sử dụng cho cả đợt thực tập dựa vào nhu cầu sử dụng máy đều đặn vào các
tuần. Như vậy khi tính số ca sử dụng ta không quan tâm đến việc đăng ký dồn
vào một số tuần của sinh viên.
Như chúng ta cũng biết, hiện tại khoa có nhiều loại hình đào tạo (chính quy,
kỹ sư II, cao đẳng, giáo viên) và mỗi loại hình đào tạo thì thời gian sử dụng
máy cũng khác nhau. Tuy nhiên việc phân bổ máy cho sinh viên lại tuỳ thuộc
vào lòch của các đợt thực tập của một năm học.
Giả sử chúng ta có được một lòch phân bố thực tập như sau:
100sv
100sv
150sv 50sv
tuần 1 7
LVT N
T T T N
DAMH
155 86
100sv
20
11 25 32
100sv
Theo lòch trên ta có thể dự đoán từ các tuần 6 đến tuần 7 nhu cầu sử dụng
máy có thể lớn nhất.
Ta có các hệ số để tính số ca như sau:
LVTN :a
TTTN :b
DAMH :c
sinh viên không thể giải quyết hoàn toàn bằng máy mà phải có sự hỗ trợ
của con người, đó có thể là Administrator. Tuỳ theo tình hình cụ thể mà
Administrator có thể tăng số ca được cấp cho sinh viên để đảm bảo tính
hiệu quả và đúng với nhu cầu sử dụng thực tế đối với từng sinh viên (có
một số sinh viên không sử dụng máy hoặc sử dụng rất ít không cần phải
tăng thêm).
Như vậy đòi hỏi phải có một công cụ cho phép Administrator thay
đổi số ca được cấp cho sinh viên.
4.Sinh viên thay đổi lòch đăng ký và nhận được kết quả tức
thời.
Khi sinh viên muốn thay đổi lòch đăng ký khác với lòch đăng ký ở lần đầu của
mỗi đợt làm đề tài, thì sẽ nhận được kết quả sau đó.
Như vậy nếu có nhiều sinh viên thay đổi lòch cùng một lúc có thể cac sinh
viên này đều được nhận được cùng một máy trống. Tuy nhiên khi đăng ký thì chỉ
có một máy trông được đăng ký mà thôi, ở đây vấn đề giao dòch đồng thời phải
được giải quyết.
Khi sinh viên gởi lòch đăng ký đến chương trình, chương trình sẽ so sánh và
lấy ra được các ca sinh viên mới đăng ký của sinh viên,các ca cũ không có trong
lòch này sẽ bò xoá đi. Lần lượt xét đến các ca mới đăng ký của sinh viên chọn ra
được liên ca (máy tương ứng) tốt nhất để đăng ký cho sinh viên. Lúc đăng ký
(thao tác INSERT vào TABLE dangky ) nếu nhận được mã lỗi trả về ( ràng buộc
tính duy nhất –tức là đã có một sinh viên đăng ký trước đó ) thì thực hiện việc
chọn máy tiếp theo và tiếp tục đăng ký cho đến lúc được mới thôi (nếu đã xét hết
máy mà không đăng ký được thì kết quả là không đăng ký được). Nếu INSERT
không được do hết máy thì kết quả trả về cho sinh viên là không đăng ký được
các ca đó.
5.Giải phân mảnh các máy trống.
Theo giải thuật sắp xếp đã trình bày ở phần trên ,có một số trường hợp gây ra
sự phân mảnh ở các máy sau khi đăng ký. Do đó việc giải phân mảnh các ca ở
các máy trống luôn cần thiết.
A-3-B
C-4-D
E-5-F
PC001 PC002 PC003
Hình chữ nhật biểu diễn liên ca từ ca 1 -> ca 6,số trong hình chữ nhật thể hiện
ca còn trống, các chữ ở trong hình chữ thể hiện các sinh viên đăng kýù.Theo lưu
đồ như hình vẽ sau khi giải phân mảnh máy PC003 sẽ trống các ca 3,4,5 là liên
tiếp.
Từ ví dụ trên ta nhận thấy nếu các máy trống ở các liên ca kế tiếp nhau thì
việc giả phân mảnh chúng sẽ thực hiện được.
Tuy nhiên cũng nảy sinh vấn đề đó là khi giải phân mảnh thì lòch đăng ký sử
dụng máy của các sinh viên có sự thay đổi như vậy phải thông báo về cho các
sinh viên đó .Ta phải lưu vào database đòa chỉ email của từng sinh viên.
6.Administrator thu hồi và chỉ đònh xếp máy cho sinh
viên.
Administrator sẽ làm công việc thu hồi máy.Hoặc Administrator có thể thu
hồi các ca máy theo đề tài (lúc cho phép sinh viên đăng ký sử dụng để tối ưu hiệu
suất phòng máy).
Tuy nhiên do việc thu hồi máy đơn thuần chỉ là việc delete các ca đăng ký
của các sinh viên trên bảng đăng ký , nên tức thời sau khi thu hồi máy một sinh
viên nào đó vẫn có thể đăng ký lại và vẫn được cấp vào máy đó.Do đó nếu
Administrator muốn thu hồi máy để cấp cho một nhóm sinh viên nào đó thì sau
khi thu hồi máy Administrator lập tức xếp cho các sinh viên đó.
Đối với một số trường hợp , chúng ta không nên dùng chương trình tự động
sắp xếp , mà Administrator sẽ tự sắp xếp cho sinh viên vào một số máy nhất đònh
nào đó .Trường hợp này Administrator sẽ cập nhật vào bảng đăng ký máy.
Chúng ta sẽ sử dụng chức năng này khi :
Vào một số thời điểm phòng máy còn trống
Administrator cho phép các sinh viên đăng ký sử dụng .Sau này khi có
một đợt thực tập mới đăng ký thực tập Administrator sẽ thu hồi các máy
Trong quá trình tách ta chọn cách tách thành hai hoặc ba liên ca:
Nếu việc tách liên ca thành hai liên ca mà vẫn không tìm được
cách tách nào kết hợp với các liên ca của sinh viên khác là tổ hợp
đầy đủ đối với các liên ca trống của các máy ,thì mới tách thành ba
liên ca và cũng tiếp tục chọn cách tách nào tối ưu nhất.
Nếu việc tách thành hai và ba liên ca không thành công, ta
không nên tách tiếp nữa mà sẽ xét liên ca kế tiếp của sinh viên.
Ta nhận thấy rằng để các máy sau khi sắp xếp ít bò phân mảnh
ta cần có hàm chọn ca dư tốt.Hàm chọn ca dư dùng để chọn giữa
ca dư trước (trong các lần xét trước) so với ca dư ở lần xét hiện
tại .Hàm này thể hiện một cách chọn như sau:
Nếu ca dư sau khi kết hợp với các máy = 0 (tức là kết hợp
vừa đủ) thì chọn liên ca trống này.
Nếu ca dư sau khi kết hợp với các máy khác 0 thì chọn liên
ca trống nào có số ca dư liên tiếp ít nhất.
Nếu ca dư là không liên tiếp sẽ được chọn cuối cùng.
Sau đây là một ví dụ minh hoạ cho việc tìm liên ca trống thích hợp
4 5
1234 56
1234 5
123
123
1234
4 56
dư 4 (sau khi dò trên mọi sv)
d
ư
0
(
e
ân
v
a
øo
d
s
dư 0 tốt
hơn dư 4 ,
chọn liên ca 1234 5
34 56
d
ư
0
(
k
e
át
h
ơ
ï
p
l
i
e
hơn dư 3,
chọn liên ca 1234 56
1234
dư 0,chọn liên ca 1234
liên ca sinh viên
đăng ký
Liên ca các
máy trống
7.a.Viết một số hàm chính bằng mã giả
Dưới đây chỉ là đoạn chương trình bằng mã giả mô tả ý tưởng của giải
thuật,tuy nhiên để hiện thực chương trình cần thực hiện nhiều chương trình con
,và nhiều cấu trúc dữ liệu phức tạp để hổ trợ cho công việc sắp xếp.
Tổ chức dữ liệu
Danh sách các sinh viên đăng ký được sắp theo thứ tự đăng ký của
sinh viên(theo dạng các ca liên tiếp gọi là liên ca ).
Ở mỗi liên ca chứa danh sách các sinh viên đăng ký liên ca này.
Danh sách các máy ,ứng với mỗi máy có những liên ca trống tương
ứng.
Ứng với mỗi liên ca có các máy trống nào.
Giải thuật xếp máy
Xét một sinh viên (theo thứ tự)
xét một liên ca của sinh viên này
Xét các máy mà liên ca này có thể đăng ký(dựa vào bảng
xét từ phải sang),tính cadư ở mỗi máy sau khi đăng ký liên ca
này (kết hợp với các sinh viên khác),máy được chọn do(hoặc
dùng FUNCTION choncadu(cadutruoc,cadu) để chọn máy nào
đăng ký cho sinh viên):
máy có cadư=0,xếp cho các sinh viên ,xét liên ca kế tiếp
mà không cần tính cadư của các máy khác.
/*nếu có nhiều máy có cùng cadư chọn máy trước đó có hai liên
dssvbdau=svdklienca;
cadu=INIT;
REPEAT
chonsv di chuyen xuong duoi 1 hang
ptxet=Bang[chonsv][liencatrong];
cadutruoc=cadu;
dssvtam:=NULL;
if (ptxet =nguyen duong) then
begin
if (co SV A đk chonsv) and (có SV B đk ptxet) then
begin
insert(dstam,mssvA,chonsv);
insert(dstam,mssvB,ptxet);
cadu.socadu=0;
end;
if (có SV A đk chonsv) and (không có SV đk ptxet) then
begin
insert(dstam,mssvA,chonsv);
if (ptxet là ca đơn) then
cadu.socadu=1;
else
cadu.socadu=toiuu(ptxet,dstam);
end;
if (không có SV đk chonsv) and (chonsv là hàng cuối) and (cadu=INIT) then
begin
cadu.socadu=length(liencatrong);
cadu.lientiep=CO
end;
end;
if (ptxet là số thực) then