Hình 1: Thông tin thiếu trọng tâm, không nhất quánVì thế, thay vì dành quá nhiều thời gian vào việc tra cứu file Excel này, em nhận thấy cần có một phần mềm cung cấp thông tin đã qua xử
Trang 1TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO PROJECT I
ĐỀ TÀI: Tạo thời khoá biểu cho sinh viên ĐHBK
dự a vào file Excel l p h c c a trư ng ớ ọ ủ ờ
Giảng viên hư ng d ớ ẫn : ThS Vũ Đức Vượng
Sinh viên thực hiện : Phan Huy Hiệp – 20210328
Hà Nội, Tháng 1 năm 2024
Trang 22
MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI 3
1.1 Đặt vấn đề 3
1.2 Định hư ng gi ớ ải pháp 3
CHƯƠNG 2 MÔ TẢ BÀI TOÁN 5
2.1 Mô t cơ b ả ản 5
2.2 Sơ lư c v ợ ề phần mềm cần xây dựng 5
CHƯƠNG 3 GIẢI QUYẾT BÀI TOÁN 7
3.1 Công nghệ sử dụ ng 7
3.2 Giải quy t bài toán ế 7
3.2.1 Xử lý đầu vào 7
3.2.2 Xử lý trả về thông tin dựa vào mã h c phọ ần nh p vàoậ 8
3.2.3 Xử lý thông tin đăng ký lớp: 9
3.2.4 Thuật toán kiểm tra trùng thời gian 10
3.2.5 Đặt các môn học hợ ệ p l vào thời gian biểu 11
CHƯƠNG 4: KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN 12
4.1 Kết luận 12
4.2 Định hư ng phát tri ớ ển .12
Trang 33
CHƯƠNG 1 GIỚI THIỆU ĐỀ TÀI
1.1 Đặt vấn đề
Đầu mỗ ọc kì, sinh viên Đạ ọc Bách Khoa Hà Nộ cần đăng kí i h i h i các môn học phần Tuy vậy phương pháp giúp sinh viên lựa chọn những lớp họ mình muốn đăng ký c là một file Excel với nhiều thông tin thiếu trọng tâm, không ực quan và thiếu tính nhất quán tr
Hình 1: Thông tin thiếu trọng tâm, không nhất quán
Vì thế, thay vì dành quá nhiều thời gian vào việc tra cứu file Excel này, em nhận thấy cần có một phần mềm cung cấp thông tin đã qua xử lí sơ bộ, giúp sinh viên dễ hình dung hơn các lớp mình có thể chọn, đồng thời tối ưu hoá thời gian đăng kí tín chỉ
1.2 Định hướng giải pháp
Một vấn đề rất lớn của file Excel mà nhà trường gửi sinh viên là thời gian tiết học tới Nhà trường dành ra 4 cột để hiển thị thời gian học, tuy nhiên lại không có sự nhất quán và cũng không dễ dàng để theo dõi được hết toàn bộ thông tin Một học phần có thể có nhiều tiết học rời rạc không thống nhất Nhưng vì bản chất file Excel chỉ có thể hiển thị duy nhất một khoảng thời gian học liên tục, sinh viên sẽ mất thêm thời gian để kiểm tra đầy đủ tất cả các tiết của học phần đó Chính vì thế, phần mềm của em sẽ gộp lại toàn bộ các mốc thời gian này và giúp sinh viên tiết kiệm được nhiều thời gian và thao tác hơn trong việc đăng kí lớp học phần Hơn nữa, file Excel, cũng như trang web đăng ký môn học của trường không thể hiện một cách trực quan các môn mà sinh viên đã đăng ký Nguồn thông tin duy nhất sinh viên có
th thể ấy được khi (chuẩn bị trước) đăng ký môn học là những dòng số Vì thế, em muốn bổ sung một thời gian biểu giúp sinh viên dễ hình dung và quản ời gian môn học hơn lí th
Trang 44
Một vấn đề nữa của file Excel là file hiển thị nhiều lượng thông tin không cần thiết / không quan trọng đố với sinh viên Phần lớn sinh viên không quá quan i tâm đến tên các học phần bằng tiếng Anh hay kì học đăng ký Vì thế em muốn giảm thiểu lượng thông tin không cần thiết được hiển ị cho sinh viên khi đăng ký môn học th
Trang 55
CHƯƠNG 2 MÔ TẢ BÀI TOÁN 2.1 Mô tả cơ b ản
Cho đầu vào là file Excel của trường với toàn bộ các lớp của một kì, bao gồm 24 cột
chỉ ra các loại thông tin khác nhau cho sinh viên, cụ ể như sau: th
• Kỳ học;
• Trường/Viện;
• Mã học phần;
• Mã lớp học;
• Mã lớp đi kèm;
• Tên học phần;
• Tên học phần ếng Anh; ti
• Khối lượng tín chỉ;
• Ghi chú;
• Buổi số;
• Thứ trong tuần;
• Thời gian tiết học;
• Tiết bắt đầu;
• Tiết kết thúc;
• Kíp học;
• Các tuần học;
• Phòng học;
• Cần TN hay không;
• Số ợng đăng ký; lư
• Số ợng đăng ký tối đa; lư
• Trạng thái đăng ký;
• Loại lớp;
• Đợt mở;
• Mã quản lý
Như vậy, công việc của phần mềm là xử lý toàn bộ thông tin ở trên, xử lý các edge cases
và các thông tin không nhất quán, loạ ỏ toàn bộ i b các loại thông tin không cần thiết đối với sinh viên, và ến hành gộp thông tin nếu cần ti
2.2 Sơ lư ợc về phầ n m ềm cầ n xây d ựng
Giao diện phần mềm sẽ xử lý các phần chính sau:
• Một phần để cho sinh viên gửi phần mềm file Excel;
• Một phần cho sinh viên nhập vào mã học phần mình muốn đăng ký;
• Một thời gian biểu để sinh viên có thể hình dung đượ các môn họ mình đã đăng c c ký;
• Một phần hiển thị thông tin các lớp;
• Cho sinh viên biết các lớp cần có lớp thí nghiệm
Phần hệ ống cần phải giải quyế th t:
• Xử lý được file Excel;
Trang 66
• Trả về những thông tin quan trọng cho sinh viên;
• Xử lý những lớp có nhiều mốc thời gian;
• Xử lý các lớp bắt buộc phải có mã đi kèm;
• Thêm, xoá các lớp đã chọn khỏi hệ ống lưu trữ, thời gian biểu th
Trang 77
CHƯƠNG 3 GIẢI QUYẾT BÀI TOÁN
3.1 Công nghệ sử dụng
Vì bản chấ ủa bài toán là giúp sinh viên lựt c a chọn lớp học cho kì tới, mục đích của phần mềm là sử dụng mộ ần mỗi khi chuẩn bị đến thời điểm đăng ký môn học, cho nên em t l quyết định không sử dụng hệ thống cơ sở dữ liệu, thay vào đó là lưu toàn bộ thông tin vào bộ nhớ RAM của hệ ống, tuy vậy không ảnh hưởng đến hiệu năng của phần mềm th
IDE Lập trình Visual Studio Code https://code.visualstudio.com/download
TailwindCSS
3.2 Giải quyết bài toán
3.2.1 Xử lý đầu vào
Hệ ống sẽ xử lý đầu vào là một file Excel được tải lên từ sinh viên, thể hiện qua mộth t chiếc nút (như hình dưới đây), chỉ giới hạn cho (một) file loại Excel (xlsx, xls):
Hình Nút cho ngư2: ời dùng chọn file Excel
Trang 88
Hình 3: Màn hình chọn file Excel Sau đó, hệ ống sẽ ến hành đọc và lưu lại thông tin cho đến khi cần sử dụng đến từ th ti file Excel nhận đượ c
3.2.2 Xử lý trả về thông tin dựa vào mã họ c ph n nh p vào ầ ậ
Sinh viên sau khi tải lên file Excel thành công, có ể nhập mã học phần của môn họth c
mà mình muốn đăng ký Hệ ống sẽ dựa vào thông tin nhận đượ để ả về thông tin củth c tr a các lớp học có chứa mã học phần được nhập vào, rồi trả về dướ dạng json để đượi c xử lý bởi frontend và trả về cho sinh viên:
Trang 99
Hình 4: Thông tin nhập vào và thông tin trả về Khi điền mã học phần vào “input box”, hệ ống chỉ nhận mã học phần chính xác để th trả về thông tin các mã lớp Các thông tin về thời gian đã được thu gọn và kết hợp nếu cần thiế t Khi điền thông tin mã học phần không tồn tại hoặc sai, hệ ống sẽ không trả về kết quả, đồng th thời báo lỗi về cho sinh viên biết mã lớp đó không tồn tại trong file đầu vào
3.2.3 Xử lý thông tin đăng ký lớp:
Khi sinh viên nhấn “Choose” ở trong các ẻ môn học, hệ ống sẽ ến hành đối chiếu th th ti
2 điều kiện sau đây:
• Mã lớp đi kèm có phải chính mã lớp học hoặc là “NULL ”;
• Lớp có yêu cầu thí nghiệm hay không
Nếu sinh viên chọn lớp có mã lớp đi kèm có điều kiện khác đã nêu trên, hệ ống sẽ th trả thêm mộ lời nhắc báo cho sinh viên rằng nếu muốn đăng ký học phần này, sẽ bắt buột c phải đăng ký cả học phần đi kèm Sinh viên có thể nhấn “OK” để hệ ống đăng ký cả 2 học phần th cho sinh viên, hoặc “Huỷ bỏ” để huỷ đăng ký môn họ c
Trang 1010
Hình 5: Màn hình xác nhận đăng ký 2 môn học Nếu sinh viên chọn môn học có yêu cầu thí nghiệm, hệ thống sẽ lưu trữ mã học phần, rồi hiển thị cho sinh viên thấy ở góc trên bên phải phần chọn học phần Vì có nhiều lớp thí nghiệm cho một học phần, và cũng có những học phần không yêu cầu phải hoàn thành thí nghiệm và lý thuyết trong cùng 1 học kì, em để học phần thí nghiệm như một tác vụ tuỳ chọn
Hình 6: Các học phần cần lớp TN Khi sinh viên quyế ịnh chọn môn học và thông qua 2 điều kiện nêu trên ở frontend, t đ thông tin lớp học sẽ được trả về cho backend xử lý Backend sẽ ến hành kiểm tra xem thờti i gian môn họ đã chọn có bị trùng vớc i thời gian của các môn khác hay không, rồi trả về kết quả cho sinh viên
3.2.4 Thuật toán kiểm tra trùng thời gian
Thời gian bắ ầu và kết thúc môn họt đ c là một Integer 4 chữ số, nên việc so sánh giữa các số với nhau là hoàn toàn có thể Chính vì vậy, em đã tạo ra mộ cấu trúc dữ ệu: t li Vec<Vec<i32>> để ứa thông tin ch các mốc thời gian này Các vector trong sẽ ứa các giờ, ch
và vector ngoài sẽ chứa các ngày Vì thế, để gọ ập các thời gian trong thứ 2, chúng ta sẽ có: i t Vec[0]
Từ đó, chúng ta sẽ nhập các thông tin về các giờ học dựa theo ngày, rồi sort lại cái vector chứa thời gian Hàm Vec.sort() của Rust có worst-case time complexity là O(n*logn), best-case là O(n) Sử dụng vector đã sort, chúng ta đi qua từng giá trị của vector đến khi tìm thấy ời gian bắ ầu củ ớp đã chọn, rồi kiểm tra xem giá trị ếp theo có phảth t đ a l ti i thời gian kết thúc củ ớp đã chọn Nếu giá trị đằng sau không phảa l i thời gian kết thúc, chúng
ta có thể một cách chắc chắn kết luận rằng lớp học đã chọn đã trùng thời gian với m t lộ ớp khác Việc kiểm tra này có worst-case time complexity là O(n), best case là O(1) Từ đó có thể
Trang 1111
thấy time complexity của cả thuật toán ở trường hợp tệ nhất là O(n^2*log(n)) và trường hợp tốt nhất là O(n)
3.2.5 Đặ t các môn học hợp l vào thời gian bi ệ ểu
Hình 7: Thời gian biểu Sau khi được lựa chọn, các môn họ ẽ tự động hiển thị trong ời gian biểu như trên c s th Thời gian biểu là mộ bảng vớt i mỗi hàng là 10p và có 7 cộ ổng cộng Để xử lý thông tin đưa t t vào thời gian biểu, hệ thống lập ra một array 2D để lưu trữ các thông tin các môn học, với array ngoài là ngày học, array trong là các thông tin của môn học, điểm bắt đầu cho card môn học,
và độ dài của card Điểm bắt đầu của card được tính là mộ ố ập phân, với phần nguyên là t s th
số giờ, phần thập phân là số phút /60
Trang 1212
4.1 Kế t lu ận
Tại thời điểm viết báo cáo, phần mềm vẫn còn một vài vấn đề chưa được giải quyết triệt để, ví dụ như chưa thể hiện được thời gian là “NULL” trên thời gian biểu, và chưa tách ra được thành tuần chẵn lẻ Tuy vậy, phần mề đã thực hiện được thành công gần như toàn bộ m vấn đề cơ bản đặt ra ban đầu: Tạo ra một môi trường trực quan, đầy đủ thông tin cơ bản để sinh viên có thể ọn 1 trong số ch các lớp của một học phần đưa ra, và tạo ra một thời gian biểu để sinh viên có thể sắp xếp các môn họ sao cho hợp lý c
Qua dự , em đã học được cách xây dựng một phần mềán m cơ bản sử dụng API và các cách trình bày thông tin lên màn hình chính, đồng thờ ọc được cách xử lý thông tin phù hợp i h
để giảm thiểu thời gian chờ đợi giữa các bước async
4.2 Định hư ng phát tri ớ ển
Đầu tiên, phần mềm hiện tạ ẫn còn tồn đọng một vài vấn đề cần được giải quyết: Vấn i v
đề ời gian “NULL” của các môn đồ án có thể được giải quyế ằng cách tạo ra mộth t b t cột mới
để ứa những môn đó, từ đó có thể một cách hợp lý đi kèm nút xoá môn học đi vớch i học phần Vấn đề tách tuần chẵn lẻ có thể giải quyết bằng cách tạo thêm một thời gian biểu nữa, kèm theo một array 2D để điền thông tin, kèm theo xử lý cột tuần trong file Excel
Hơn nữa, em dự định áp dụng một số bướ để cải thiện phần mềm, cụ ể như sau: c th
1 Phần mềm hoàn toàn có thể lưu trữ lại thông tin sinh viên đã đăng ký vào một file JSON để sinh viên có thể mở lại vào thời điểm đăng ký lớp, do các thông tin được lưu trữ ở backend, hoàn toàn có thể tạo ra một nút “Export” để ả về file JSON và tr tạo ra một method để đọc lại thông tin
2 Do phần mềm đã có sẵn khả năng đọc file Excel, em thấy rằng em có thể xử lý cả file Excel lịch thi giữa kì, cuối kì để ả về tr các mốc ời gian thi cho sinh viên Từ th
đó, tạo thêm lý do để sinh viên export các môn mình đã đăng ký, và lý do để sử dụng phần mềm thường xuyên hơn
3 Phần mềm cũng có thể được bổ sung ức năng nhập điểch m số, cùng vớ phân phối i điểm thí nghiệm/quá trình/cuối kì Sinh viên có thể nhập các đầu điểm của mình vào để phần mề tính ra điểm theo bậc ữ, bậc 4, và tính toán điểm ch m thấp nhấ ần t c đạt được cho các đầu điểm để đạt đượ bậc điểm theo mong c muốn
Trang 1313
Sau khi thực hiện các dự định trên, kết quả sẽ là một phần mề toàn diện giúp sinh m viên quản lý việc học trên trường, giảm thiểu thời gian thao tác chuyển dị giữa ch các trang web của trường để xem những đầu mục thông tin khác nhau