Tải bản đầy đủ (.doc) (130 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (507.76 KB, 130 trang )

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.


 Cung cấp một công cụ tự động để kiểm tra chính xác rằng một sinh
viên vào giờ đó đã thực hành đúng như lòch đăng ký hay không.
Trong giới hạn của đề tài này chưa thực hiện phần tự động kiểm tra sinh viên
có được phép thực tập đúng giờ và đúng máy của mình hay không.
3.Các ứng dụng trên mạng Internet
3.a.Ích lợi của mạng Internet
Trao đổi dữ liệu đã trở thành một phần căn bản của nghành máy tính.
Trong giới khoa học thì trao đổi dữ liệu trên mạng cũng cần thiết bởi vì nó
cho phép các nhà khoa học gởi dữ liệu và chương trình đến một
supercomputer từ xa để xử lí, hoặc tìm kiếm kết quả và thực hiện việc trao
đổi thông tin của những người cùng quan tâm đến vấn đề khoa học. Trong nền
kinh tế hiện nay mạng máy tính ngày càng trở nên quan trọng với sự phát
triển của thương mại điện tử. Người ta có thể thực hiện các cuộc mua bán qua
mạng mà không cần phải tới siêu thò, thực hiện các giao dòch chuyển tiền
ngay tại nhà mình. Đối với lónh vực văn hóa, giáo dục và giải trí mạng máy
tính cũng cung cấp nhiều tiện ích ví dụ như dạy học từ xa, hoặc có thể
download một bài hát ưa thích về máy của mình hoặc thực hiện các cuộc trò
chuyện qua hay cũng có thể gởi thư cho một người nào đó bằng email.
3.b.Các ứng dụng trên mạng Internet
Sau đây sẽ giới thiệu về các ứng dụng được sử dụng rộng rãi trên mạng
Internet.
 Thư điện tử ( Electronic mail )
Electronic mail cho phép người sử dụng sọan thảo một lá thư và gởi
chúng đến một cá nhân hay mộ nhóm người nào đó. Electronic mail cũng
cho phép người sử dụng đọc những lá thư của người khác gởi cho họ.
 Truyền file ( File transfer )
Mặc dù thỉnh thoảng thì người sử dụng truyền file bằng cách sử dụng
electronic mail nhưng chỉ để gởi các file text ngắn. Dòch vụ truyền file cho
phép người sử dụng nhận và gởi một file chương trình hoặc dữ liệu lớn.
Hệ thống sẽ có cách để kiểm tra các người sử dụng được phép hoặc là

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

Solaris(có cài Windows) và một số máy cài Windows(Không cài Solaris).
 Mỗi sinh viên của khoa đều được cấp một account, sinh viên muốn sử
dụng được máy phải sử dụng account của mình (như ở phòng máy số 2),
tuy nhiên các máy ở phòng số 1, số 3 chưa làm được như vậy.
Hiện nay khoa có hệ thống các máy sử dụng NIS+ của Solaris để
quản lí account của sinh viên, sinh viên ngồi ở bất cứ máy nào trên hệ
thống máy của khoa đều có thể login vào với một account và đều sử dụng
một home, nên rất thuận tiện cho việc thực tập của sinh viên.
 Việc quản lí số giờ sử dụng máy cho sinh viên hiện nay không đựoc
hợp lí nên có tình trạng một số sinh viên sử dụng quá số giờ cho phép của
sinh viên đó và ngược lại một số sinh viên không có máy sử dụng.
 Số lượng sinh viên của khoa hiện nay rất nhiều , bao gồm nhiều loại
hình đào tạo (Chính Qui,Kỹ Sư 2,Giáo Viên ,Cao Đẳng).
 Thời gian bắt đầu và kết thúc học kỳ của mỗi loại hình đào tạo (Chính
Qui, Kỹ Sư 2, Giáo Viên, Cao Đẳng) có sự chênh lệnh nên thời gian sử
dụng máy của mỗi loại hình đào tạo cũng khác biệt với nhau. Do đó
thường thì phòng máy luôn có nhóm sinh viên làm đề tài sử dụng máy cao
điểm một cách liên tục.
 Tùy theo đề tài sinh viên đang làm thuộc loai hình gì (thực tập tốt
nghiệp ,luận văn tốt nghiệp,đồ án môn học) mà số giờ sử dụng máy sẽ
được cấp sẽ khác nhau.
 Nếu trong cùng một khoảng thời gian 1 sinh viên làm cùng lúc 2 loại
hình (vừa thực tập tốt nghiệp và đồ án môn học) thì chỉ được tiêu chuẩn
máy của một loại hình có số giờ lớn hơn.
 Không có sự ưu tiên giữa các loại hình đào tạo (Chính Qui, Kỹ Sư 2,
Giáo Viên, Cao Đẳng) về sự sắp xếp lòch đăng ký cũng như số ca được
cấp giữa các loại hình đào tạo này.
Tuy nhiên có sự ưu tiên về số ca sử dụng máy giữa các loại hình Luận
văn tốt nghiệp, Thực tập tốt nghiệp, Đồ án môn học.
2.Các vấn đề cần đặt ra đối với một chương trình đăng ký và

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ư

những phần mềm nào. Hơn nữa những điều này đối với mỗi máy có thể
thường xuyên thay đổi nên để lưu giữ và cập nhật những thông tin này vào
trong database là một điều hết sức khó khăn. Tuy nhiên chúng ta hoàn toàn
có thể tổ chức các máy theo cách mà hiện nay chúng ta đã làm ở phòng máy
số 2, đó là về hệ điều hành mỗi máy gồm có Windows và Solaris còn các
phần mềm ứng dụng đã được cài đặt sẵn trên Server, hoặc sinh viên có thể
cài đặt thêm các phần mềm mình cần sử dụng.
Vì vậy đề tài của chúng ta sẽ thực hiện trên giả thiết rằng :các máy là như
nhau về mọi mặt .
 Do các học kỳ ở các loại hình đào tạo lệch nhau về thời gian bắt đầu
và kết thúc. Thường thì chu kỳ của các loại hình là một năm do đó ngay từ
đầu năm nếu Administrator không có thông tin về sinh viên sử dụng máy của
năm đó thì việc phân bổ giờ thực tập sẽ không thể chính xác được.
 Vấn đề sử dụng tài nguyên với hiệu suất cao nhất điều đó có nghóa là
tất cả các máy đều được sử dụng vào mọi thời điểm. Điều này dẫn đến vấn
đề khi có một nhóm sinh viên mới đăng ký sử dụng máy thì phải có một số ca
máy nhất đònh còn trống cho nhóm đó (Thu hồi lại một số máy, khi tất cả các
máy đó điều đã có sinh viên sử dụng trước đó mà vẫn chưa hết thời gian thực
tập của các sinh viên đó).
 Một giải pháp để phòng máy đạt hiệu suất cao là vào các thời điểm
phòng máy còn máy trống Administrator có thể cho phép các sinh viên đăng
ký sử dụng máy, tuy nhiên các máy này có thể bò thu hồi vào các thời điểm
cần thiết .
 Để tạo sự linh động cho sinh viên đăng ký (lòch đăng ký ở các tuần có
thể khác nhau). Nếu sinh viên đăng ký lại ở các tuần sau (lúc cao diểm của
phòng máy) có thể sẽ không được chấp nhận (do hết máy).
Như vậy tùy vào tình hình thực tế sử dụng máy mà sinh viên nên chọn
cách đăng ký phù hợp (đăng ký đều ở các tuần hoặc đăng ký dồn vào một số
tuần nhất đònh). Việc này hoàn toàn tùy thuộc vào sinh viên chứ bản thân
chương trình chỉ khuyến cáo cho sinh viên biết mà thôi.

 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ó.

 Từ Database của phòng đào tạo Administrator có thể nhận được tập
tin dữ liệu theo một format biết trước. Điều này hoàn toàn có thể thực hiện
được vì hiện nay các DBMS điều có kèm theo các công cụ cho phép
Inport/Export các file dữ liệu vào database và ngược lại từ các file dữ liêu ta
có thể đưa vào các table (DBMS Oracle có kèm theo công cụ SQL *Loader ).
CHƯƠNG II PHÂN TÍCH VÀ ĐƯA RA GIẢI PHÁP
HIỆN THỰC
1.Phân tích chiến lược sắp xếp.
Khi nhận lòch đăng ký của sinh viên chúng ta có thể:
 Nhận lòch và tìm các máy trống thích hợp rồi sắp xếp
ngay.
Trong quá trình tìm hiểu và phân tích chúng em nhận thấy với cách sắp xếp
này có những điểm không hợp lí như sau:
 Thông thường các sinh viên đều muốn đăng ký sớm để được lòch đăng
ký hợp lí (không bò tách các ca đăng ký liên tiếp trên một máy). Do đó có
thể xảy ra tình trạng vào đầu mỗi đợt thực tập sẽ có rất nhiều sinh viên
đăng ký (có thể đăng ký tại phòng máy của khoa) nên rất lộn xộn.
 Mặt khác với cách sắp xếp này nếu số lượng sinh viên đăng ký cùng
một thời điểm nhiều sẽ dẫn đến tình trạng Web Server sẽ quá tải do nhận
quá nhiều yêu cầu từ Browser và thực thi các yêu cầu này. Có thể để giải
quyết việc đăng ký đồng thời chúng ta phải dùng một cơ chế lock các
table của database lại ,như vậy việc đăng ký cho sinh viên sẽ bò chậm đi
rất nhiều.
 Khi chúng ta sắp xếp cho một lòch đăng ký của sinh viên thì chắc chắn
rằng việc sắp xếp như vậy sẽ không thể tối ưu được. Tuy chúng ta có thể
thực hiện công việc giải phân mảnh máy trống ở mỗi thời điểm trước khi
sắp xếp, nhưng kèm theo với công việc này là việc chúng ta phải thông
báo đến các sinh viên việc thay đổi máy của các sinh viên đó. Nếu việc
giải phân mảnh này thường xuyên xảy ra thì việc thông báo đến sinh viên
sẽ trở ngại (do sinh viên nhận được quá nhiều thông báo trong một ngày

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

nếu sinh viên đăng ký sẽ không được xếp tức thời (cho dù sau thời điểm
kết thúc đăng ký) mà chỉ nhận lòch đăng ký mà thôi, việc nhận lòch đăng
ký thì không ảnh hưởng đến các giao dòch đồng thời. Sau này sinh viên
dùng chức năng search hoặc login để xem kết quả đăng ký của mình.
 Nếu sinh viên đăng ký sau thời điểm kết thúc đăng ký có thể xem như
đã đăng ký lại. Sinh viên sẽ nhận được lòch đăng ký ngay sau đó. Như vậy
ở trường hợp này chúng ta phải giải quyết vấn đề về giao dòch đồng thời.
2.Phân tích giải thuật sắp xếp.
Dữ liệu chúng ta nhận được đó là các liên ca mà sinh viên đăng ký và các
liên ca trốâng trên các máy (liên ca : để chỉ các ca liên tiếp).
Như vậy công việc sắp xếp có thể trở thành việc tập hợp các liên ca của các
sinh viên đăng ký để đưa vào các liên ca có máy trống.
 Nếu việc tập hợp này không thành công (vẫn còn dư ở một số ca ) thì
phải chọn được trường hợp nào là tốt nhất.
 Nếu một số liên ca không đăng ký được thì ta phải tách các liên ca đó
ra thành nhiều liên ca, việc tách phải đảm bảo được hai yếu tố:
 Sinh viên ít phải chuyển qua các máy khác ở các ca liên tiếp.
 Sau khi tách thì các ca trống còn lại là ít phân mảnh.
Để tập hợp được các liên ca đăng ký của các sinh viên đưa vào các liên ca
của các máy trống chúng ta có thể thực hiện theo hai hướng sau đây:
 Chọn một liên ca của một sinh viên và tìm một liên ca
trống trong các máy trống thích hợp nhất (kết hợp với các liên ca của
các sinh viên khác).
 Chọn một liên ca có máy trống, tìm các liên ca thích hợp
của các sinh viên đăng ký vào liên ca có máy trống đó.
Mỗi hướng thực hiện đều có những khía cạnh hay của nó. Từng trường
hợp cụ thể khác biệt sẽ mang đến những kết quả tích cực khác nhau.
Để hiện thực việc sắp xếp chúng em xin chọn hướng thứ nhất. Với
hướng này chúng ta cần lưu ý một số điểâm sau:
 Các ca sinh viên đăng ký thì được INSERT vào table nhận đăng ký

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

sau khi đăng ký các ca trống sẽ là 4 và 6.
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à 4 và 6. Tuy nhiên liên ca sinh viên đăng ký sẽ
không bò tách ra.
 Chọn liên ca có số ca dư ít nhất :với cách chọn này liên
ca đăng ký của sinh viên sẽ ít bò tách ra hơn cách chọn trên.
 Nhưng ngược lại thì liên ca trống sau khi sẵp xếp sẽ bò phân
mảnh nhiều hơn. Tuy nhiên việc giải phân mảnh ta có thể thực
hiện một cách dễ dàng .
 Nếu một liên ca đang xét mà không có liên ca trống nào có thể đăng
ký cho liên ca đó ta thực hiện việc kiểm tra xem các ca nào không thể
đăng ký được (hết máy ở ca đó), tách liên ca ban đầu thành nhiều liên ca
trong đó có các ca không đăng ký được.
 Nếu một liên ca đăng ký được xét mà không có liên ca trống nào có
thể đăng ký cho liên ca đó và các ca đều có thể đăng ký được.
Ta thực hiên việc tách liên ca này thành nhiều liên ca :
 Hai liên ca: với một liên ca ban đầu có thể có nhiều cách tách
thành hai liên ca. Ứng với mỗi cách tách ta sẽ tính số ca dư tốt nhất
của các liên ca trống sau khi đăng ký cho hai liên ca này.
Nếu ta gặp một trường hợp nào làm cho số ca dư sau khi đăng ký của
các liên ca trống = 0 (đăng ký vừa đủ) thì ta sẽ dừng công việc tách.
Nếu số ca dư tốt nhất vẫn khác không (liên ca trống đăng ký vẫn còn
dư). Sẽ tiếp tục tách thành 3 liên ca.
 Ba liên ca:Tương tự như cách tách thành hai liên ca.
3.Phân tích việc phân bổ số ca sử dụng cho sinh viên.
Vấn đề này được đặt ra nhằm đảm bảo tính công bằng cho mọi sinh viên và đáp
ứng nhu cầu sử dụng máy đối với từng sinh viên khác nhau (làm luận văn tốt nghiệp,
đồ án môn học, thực tập tốt nghiệp . . .). Việc đăng ký sử dụng máy của sinh viên
dựa vào quan điểm :
 Sinh viên sẽ được cấp một số ca nhất đònh cho cả đợt thực tập, sinh viên

đượ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

Tổng số ca trong 1 tuần dự đoán các sinh viên sẽ sử dụng là
X=a.M.100 + b.M.100 + c.M.150
Giả sử chúng ta có N máy, 1 tuần có 36 ca sử dụng. Tổng số ca có được trong
1 tuần
Y=36.N
Như vậy để đáp ứng đủ nhu cầu của sinh viên, ta có : X=Y
=>M(100.a+100.b+150.c)=36.N
M =
cba
N
.150.100.100
.36
++
Số ca được cấp cho mỗi sinh viên làm LVTN là : a.M.i
Số ca được cấp cho mỗi sinh viên làm TTTN là : b.M.j
Số ca được cấp cho mỗi sinh viên làm DAMH là : c.M.k
Với i, j, k là số tuần qui đònh sử dụng máy cho từng loại hình đó.
 Tuy nhiên với cách tính như trên chúng ta có thể nhận thấy hạn chế như
sau:
Vào một số tuần tuy chỉ có một nhóm sử dụng máy nhưng việc phân bổ giờ
máy cho các sinh viên thuộc nhóm này vẫn được tính theo nhu cầu ở tuần cao
điểm nhất. Việc này dẫn đến tình trạng sinh viên được phân bổ ít số giờ hơn
so với tài nguyên mà chúng ta có được.
Để giải quyết vấn đề trên chúng em xin đưa ra giải pháp sau:
Tính số ca sử dụng cho từng giai đoạn (từ tuần n đến tuần m). Trong từng
giai đoạn sinh viên chỉ được đăng ký và sử dụng tối đa số ca được cấp trong
giai đoạn đó. Do đó chúng ta phải lưu vào database số ca sinh viên sử dụng
cho từng giai đoạn, trong giới hạn của đề tài chúng em chưa hiện thực được
vấn đề này.
 Theo chúng em nghó việc quản lí thực tập máy của

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.

Giả sử ta có các ca đã sắp xếp như sau:
MSSV MSCA MSMAY
59500001 1 PC001
59500001 2 PC001
59500002 4 PC001
59500002 5 PC001
59500002 6 PC001
59500003 1 PC002
59500003 2 PC002
59500003 3 PC002
59500004 5 PC002
59500004 6 PC002
Như vậy máy PC001 trống ca 3
máy PC002 trống ca 4
Nếu ta chuyển ca thực tập của sinh viên 59500001 sang máy PC002 và
chuyển ca thực tập của sinh viên 59500003 sang máy PC001 thì các ca dư ở máy
PC002 sẽ là 34 (liên tiếp).
Ta có bảng đăng ký sau khi giải phân mảnh như sau
MSSV MSCA MSMAY
59500003 1 PC001
59500003 2 PC001
59500003 3 PC001
59500002 4 PC001
59500002 5 PC001
59500002 6 PC001
59500001 1 PC002
59500001 2 PC002
59500004 5 PC002
59500004 6 PC002
Cách giải phân mảnh như sau:

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

đó lại để cho các sinh viên đợt mới sử dụng .
 Có một nhóm sinh viên có nhu cầu sử dụng một số
các máy nhất đònh (để sinh viên thi thực hành. . .).Thông thường chỉ sử
dụng một số ít ca mà thôi , Administrator sẽ sắp xếp nhóm sinh viên vào
các máy đó.
7.Giải thuật sắp xếp .
Để các máy còn trống sau khi đăng ký ít bò phân mảnh .Đối với các trường
hợp đăng ký lần đầu cho một đợt thực tập ta nhận các lòch đăng ký của sinh viên
rồi sắp 1 lần.
Như vậy với giả thiết đó ta sẽ có các lòch đăng ký của các sinh viên và các
máy trống.
Để đảm bảo sắp xếp các ca liên tiếp (gọi là liên ca) cho sinh viên trên cùng
một máy,ta sẽ thực hiện việc ánh xạ các liên ca đăng ký của sinh viên vào các
liên ca trống.
 Sinh viên A sẽ được xếp máy X
 Nếu liên ca mà Sinh viên A đăng ký và liên ca các Sinh viên khác là
kết hợp đầy đủ đối với máy X, X là máy đầu tiên thỏa có liên ca trống
nhỏ nhất thỏa.
 Nếu liên ca mà Sinh viên A đăng ký và liên ca các Sinh viên khác còn
dư thì đối với máy X là nhỏ nhất.
 Nếu không có máy nào có thể đăng ký cho liên ca này ta phải tách
liên ca này ra nhiều liên ca.Việc tách này phải đảm bảo 2 yêu cầu:
 sinh viên ít thay đổi máy nhất.
 tối ưu các ca dư ở các máy.
 Liên ca của Sinh Viên A không đăng ký được nếu có ca không thể đăng
ký được thì loại bỏ ca đó ra và tiếp tục xét liên ca kế tiếp sau khi tách ca
đó .Ví dụ liên ca 12345 có ca 3 không còn máy , như vậy xét hai liên ca 12 và
45.
 Liên ca của sinh viên A không đăng ký được nhưng tất cả các ca đều có
thể đăng ký được ta lần lượt tách liên ca này thành hai liên ca:

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
(

k
e
át

h
ơ
ï
p

l
i
e
ân

c
a
4
5
)
đ
ư
a

s
i
n
h

v
i

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

ân

c
a
1
2
3
)
đ
ư
a

s
i
n
h

v
i
e
ân

v
a
øo

d
s
dư 3
dư 0 tốt

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

ca trống trở lên*/
 sau mỗi lần xếp máy cập nhật lại danh sách máy trống và
danh sách sinh viên đăng ký.
 xét liên ca kế tiếp của sinh viên này.
 nếu không có máy nào đăng ký được cho liên ca này=>tách
liên ca thành nhiều liên ca khác:
 tách liên ca thành 2 liên ca tính tổng số ca dư ở mỗi lần
tách,chọn lần tách nào tối ưu nhất.
 nếu việc tách không thành công=>tách thành 3 liên ca,…,cứ
tiếp tục cho đến lúc nào đó tách thành n liên ca lẻ mà không
thành công=>báo cho user biết không còn ca trống(không tách
ra mà gởi trả cả liên ca ban đầu).
 xét sinh viên kế tiếp.
 Function tối ưu liên ca trống
Giả sử ta có một liên ca S ta cần xếp các sinh viên vào liên ca này sao cho
hợp lí nhất (theo hàm chọn,sẽ viết sau).Xét mọi sinh viên có thể đăng ký vào liên
ca này ,chọn ra các sinh viên đăng ký hợp lí nhất.
INPUT =liênca,svdklienca;
OUTPUT=số ca dư hợp lí nhất trong mọi trường hợp (các sinh viên đăng ký)
và danh sách sinh viên tương ứng đăng ký .
function toiuu(liencatrong : lienca;var svdklienca :dssv):integer;
VAR
chonsv,ptxet:lienca;
dssvbdau,dstam:dssv;
cadutruoc,cadu : record
socadu:integer;
lientiep:(CO,KHONG);
end;
BEGIN
chonsv=liencatrong;

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

begin
cadu.socadu=toiuu(phần_nguyen,dstam)+toiuu(phan_thuc,dstam);
if (toiuu(phan_nguyen,dstam)<>0) and (toiuu(phan_thuc,dstam)<>0) then
cadu.lientiep=KHONG
else cadu.lientiep=CO;
end;
if choncadu(cadutruoc,cadu) then svdklienca=insert(dssvbdau,dstam);
UNTIL (chonsv là phần tử thuộc hàng cuối hoac cadu.socadu=0)
END;
 Function choncadu(cadutruoc,cadu)
So sánh giữa cadưtrước và cadư bên nào tốt hơn nếu cadư là tốt hơn trả về
TRUE ngược lại FALSE.

×