1. Trang chủ
  2. » Công Nghệ Thông Tin

Phân hệ đăng ký môn học

18 358 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phân hệ đăng ký môn học
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Quản Trị Giáo Dục / Quản Trị Hệ Thống Thông Tin
Thể loại Báo cáo môn học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 18
Dung lượng 328,69 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Phân hệ ĐKMH cho phép sinh viên gia nhập vào hệ thống logon để xem thời khoá biểu dự kiến của khoá học , lựa chọn môn học và đăng ký môn học.. CÁC RÀNG BUỘC - R1 : Một sinh viên đăng ký

Trang 1

PHÂN HỆ ĐĂNG KÝ MÔN HỌC

CHƯƠNG 1 :

PHÂN TÍCH VÀ THIẾT KẾ

I MỤC ĐÍCH:

Phân hệ Đăng ký môn học (ĐKMH) có 2 nhiệm vụ chính :

- Quản lý việc đăng ký môn học của sinh viên Phân hệ ĐKMH cho phép sinh viên gia nhập vào hệ thống (logon) để xem thời khoá biểu dự kiến của khoá học , lựa chọn môn học và đăng ký môn học

- Xử lý việc ĐKMH của sinh viên Mục đích chính của phân hệ này là : cập nhật lưu trữ, xếp lịch ĐKMH một cách hợp lý

II CÁC RÀNG BUỘC

- (R1) : Một sinh viên đăng ký những Nhóm lớp môn học không được trùng thời khóa biểu (TKB) với nhau Một Nhóm lớp môn học chỉ học một môn học

- (R2) : Giải quyết ưu tiên cho những sinh viên đăng ký đúng ngành

- (R3) : Không xếp đăng ký những môn học không hợp lệ hay đã bị vi phạm môn học tiên quyết, môn học song hành, môn học trước

- (R4) : Ưu tiên xếp theo nguyện vọng ĐKMH của sinh viên Tuy nhiên khi không thể đáp ứng nguyện vọng do lớp hết chỗ, thì giải quyết cho sinh viên học vào một buổi khác mà môn học có mở Để có thể lưu ý đến nguyện vọng đăng ký, các môn học sẽ được xét theo thứ tự đăng ký môn học của sinh viên

- (R5) : Điều hoà số lần thay thế nhóm lớùp giưã các sinh viên, tránh trường hợp

một sinh viên bị đổi qua nhiều nhóm trong khi sinh viên khác hoàn toàn được xét theo nguyện vọng Ràng buộc này chỉ có tính tương đối

Số lần thay thế nhóm lớp : khi không thể đáp ứng được nguyện vọng đăng

ký vào một nhóm lớp môn học cuả sinh viên do nhóm lớp hết chỗ hay bị huỷ thì ta sẽ tìm một nhóm lớp khác thích hợp để thay thế nhóm lớp sinh viên đăng ký Số lần thay thế nhóm lớp cuả một sinh viên càng ít thì thời khoá biểu cuả sinh viên càng tốt

- (R6) : Sinh viên không được phép đăng ký quá số tín chỉ tối đa / học kỳ.

- (R7) : Một sinh viên có số giờ học không vượt quá Số giờ tối đa / ngày cho

phép (nếu có chỉ định) Thường tiêu chuẩn này không bắt buộc phải tuân theo Tiêu chuẩn này thường được dùng để đánh giá mức độ tốt của các nhóm môn

Trang 2

học trong trường hợp không thể đáp ứng nguyện vọng ĐKMH của sinh viên

do lớp hết chỗ và từ đó chọn ra lớp thay thế tốt nhất cho sinh viên

- (R8) : Tránh tiết liên tục giữa 2 buổi (nếu có chỉ định ) Tương tự như trên , tiêu chuẩn này chỉ dùng để tham khảo

- (R9) : Số sinh viên được phép đăng ký trong một nhóm lớp môn học được tính theo công thức sau:

So_sv = si_so * (1 +  )

 : hệ số nghỉ học tối đa cuả sinh viên Các môn học khác nhau sẽ có hệ số  khác nhau Chọn =0 cho môn học thí nghiệm, thực hành, các môn học khác thường có =0.1 Người sử dụng có thể thay đổi hệ số  này

- (R10) : Số lượng sinh viên tối thiểu cuả một môn học Nếu số lượng sinh viên thấp hơn chuẩn tối thiểu này, nhóm lớp môn học sẽ không được tổ chức Những sinh viên học nhóm lớp này sẽ được chuyển sang học những nhóm lớp khác cuả môn học

III HƯỚNG GIẢI QUYẾT

Như ta đã biết , xét ĐKMH dựa trên thời khoá biểu dự kiến do phân hệ xếp thời khoá biểu tạo nên Vấn đề xét ĐKMH cũng gần giống như xếp thời khoá biểu, do đó ta khó có thể tìm được một phương án tối ưu nhất để xét ĐKMH Vì thế em chọn hướng phát triển công cụ cung cấp các tuỳ chọn cho phép người sử dụng có thể chọn lưạ, đánh giá dữ liệu và điều chỉnh các tiêu chuẩn nhằm mục đích làm cho quá trình xếp thời khoá biểu đăng ký môn học tối ưu

III.1 Sơ đồ các luồng công việc

NHẬP DỮ LIỆU ĐĂNG KÝ MÔN

HỌC

KIỂM TRA CÁC RÀNG BUỘC VỀ MÔN

HỌC ĐĂNG KÝ

Trang 3

a) Nhập dữ liệu đăng ký môn học: mỗi sinh viên sẽ có môt tài khoản

riêng Vào thời điểm đăng ký môn học sinh viên sẽ được phép log vào hệ thống xem thời khoá biểu, chọn môn học và đăng ký môn học Trong khoảng thời gian đó sinh viên có thể vào thay đổi môn học đăng ký Cho phép mỗi sinh viên có tối đa 2 lần vào đăng ký hay chỉnh sửa môn học đăng ký để tránh trường hợp sinh viên vào sửa đổi đăng ký nhiều lần Sau khoảng thời gian đăng ký môn học hệ thống sẽ khoá lại ,cấm sinh viên vào đăng ký hay sửa đổi môn học đăng ký Trong thời gian này sinh viên có thể log vào hệ thống để xem kết quả đăng ký môn học

b) Kiểm tra các ràng buộc về môn học đăng ký: đánh dấu các môn học vi

phạm môn học trước/ tiên quyết, môn học song hành

c) Thống kê dữ liệu sinh viên đăng ký trên từng môn học :dựa trên dữ

liệu thống kê được từ đó ta có thể quyết định huỷ bỏ một nhóm lớp

KIỂM TRA CÁC RÀNG BUỘC VỀ MÔN

HỌC ĐĂNG KÝ

THỐNG KÊ CÁC DỮ LIỆU SINH VIÊN

ĐĂNG KÝ TRÊN TỪNG MÔN HỌC

XẾP THỜI KHOÁ BIỂU ĐĂNG KÝ

MÔN HỌC CHO SINH VIÊN

XÉT VÉT ĐĂNG KÝ MÔN HỌC CHO

SINH VIÊN

PHÂN TỔ

Trang 4

môn học Nếu số lượng sinh viên đăng ký quá ít so với số lượng sinh viên dự kiến ta nên huỷ bỏ bớt một nhóm lớp môn học trước khi xét đăng ký Điều này giúp hạn chế số lần thay thế nhóm so với trường hợp huỷ nhóm lớp sau khi xét đăng ký Nhóm lớp bị huỷ vì không đủ số lượng sinh viên mở lớp (vi phạm ràng buộc R10)

d) Xếp thời khoá biểu ĐKMH cho sinh viên:

- Giải quyết ưu tiên cho những sinh viên đăng ký đúng ngành Trong một Khoá ngành ta chia đều số sinh viên đăng ký đúng ngành vào tất cả các luồng

- Xét ĐKMH dựa theo nguyện vọng đăng ký môn học của sinh viên Trường hợp nhóm lớp hết chỗ hay bị huỷ ta đánh dấu lại

e) Xét vét đăng ký môn học cho sinh viên : bước này tập trung xét các

môn học chưa xếp được cho sinh viên do nhóm lớp sinh viên (A) đăng ký đã hết chỗ

- Xác định các luồng còn Chọn những sinh viên học đúng ngành từ các luồng đầy cho vào những luồng còn trống Việc này giúp giải quyết một số chỗ cho những sinh viên chưa xếp được

- Sau đó xét lại đăng ký môn học cho những sinh viên chưa xếp được

- Đối với những nhóm lớp vẫn chưa xếp được ta chọn nhóm lớp khác thích hợp – không trùng thời khoá biểu với các môn học đã xét Thay thế nhóm lớp cũ bằng nhóm lớp mới đã tìm được

- Trường hợp không thể tìm được một nhóm lớp nào thích hợp vì tất cả các nhóm khác đều trùng thời khoá biểu, ta tìm một sinh viên (B) thuộc nhóm lớp sinh viên A muốn đăng ký mà có khả năng thay thế một nhóm lớp khác Khi đó ta sẽ hoán chuyển vị trí của hai sinh viên này: sinh viên A được đặt vào chỗ cuả sinh viên B, sinh viên B sẽ được thay thế một nhóm lớp khác thích hợp

- Khi chọn sinh viên thích hợp để thay thế, cần chọn ra những sinh viên có số lần thay thế nhóm lớp ít nhất Đánh giá này giúp cân bằng số lần thay thế giữa các sinh viên đăng ký môn học tránh trường hợp một sinh viên bị thay thế nhóm quá nhiều trong khi các sinh viên khác (sinh viên diện không được ưu tiên) hoàn toàn được xếp theo nguyện vọng

f) Phân tổ: sau khi xét ĐKMH cho sinh viên , ta phân tổ cho từng nhóm

lớp môn học theo nguyên tắc:

- Các nhóm lớp học trong các phòng đặt biệt ( như phòng thí nghiệm, thực hành, sân thể dục ) : không phân tổ

- Các nhóm lớp học trong các phòng bình thường : dựa vào tiêu chuẩn sỉ số sinh viên/tổ (SS_TO), hệ số tách min (HS_MIN) và hệ số tách max (HS_MAX) ta xác định:

 Nếu sỉ số nhóm < SS_TO*HS_MIN : chia làm một tổ

 Nếu SS_TO*HS_MIN < sỉ số nhóm < SS_TO*HS_MAX: chia làm 2 tổ

Trang 5

 Nếu sỉ số nhóm > SS_TO*HS_MAX : lấy sỉ số tổ bằng SS_TO

Số sinh viên còn lại của nhóm =sỉ số nhóm – SS_TO Tiếp tục xét cho đến hết nhóm

III.2 Thiết kế dữ liệu:

Phân hệ ĐKMH sử dụng các bảng sau:

Bảng VI_PHAM : lưu các loại mã vi phạm của môn học đăng ký

VI_PHẠM(MA_VP, TEN)

Thuộc tính:

- MA_VP : mã vi phạm ( ví dụ : 0, 1, 2, … )

- TEN : tên của vi phạm ( ví dụ : vi phạm quan hệ môn học trước/tiên quyết…)

Bảng DKMH : lưu các phiếu ĐKMH

- MA_SV : mã sinh viên

- MA_MH : mã môn học

- MA_VP : mã vi phạm

- MA_NGANH : mã ngành

- NAM_VAO_TRUONG : năm vào trường

- NHOM : nhóm

- NHOM_TO : nhóm tổ

Bảng SS_PHONG : lưu sỉ số hiện tại của các nhóm lớp môn học

- MA_PHONG : chỉ nhóm lớp môn học (ví dụ : ‘MT199511 501095’ )

- SI_SO : sỉ số hiện tại của nhóm lớp môn học

Bảng DANH_GIA : lưu giữ điểm đánh giá kết quả đăng ký môn học hiện tại của sinh viên

- MA_SV : mã sinh viên

- DIEM_DG : điểm đánh giá

Bảng TKB_SV : là bảng dùng để xác định thời khoá biểu bận giờ của các sinh viên Bảng TKB_SV bao gồm 7 trường đại diện cho 7 ngày trong tuần của sinh viên Mỗi ngày có 12 tiết và được khởi gán giá trị ban đầu bằng ‘0’ Khi xét đăng ký môn học , nhóm môn học nào hợp lệ ta sẽ đánh dấu vào lịch học nhóm lớp đó vào thời khoá biểu của sinh viên Bảng TKB_SV được thiết

Trang 6

kế nhằm mục đích tạo sự dễ dàng và tăng tốc độ truy xuất khi xếp đăng ký môn học

- MA_SV : mã sinh viên

- T2, T3, T4, T5, T6, T7, CN : lưu giữ lịch học của sinh viên

III.3 Các tiêu chuẩn xét đăng ký môn học:

- Số tín chỉ tối đa / học kỳ : Sinh viên không được phép đăng ký quá số tín chỉ tối đa / học kỳ.

- Số tiết tối đa / ngày

- Hệ số dôi nhóm môn học bình thường : số sinh viên được phép đăng ký nhóm môn học thường được tính theo công thức:

Sỉ số nhóm=sỉ số * hệ số dôi nhóm môn học bình thường

- Hệ số dôi nhóm môn học đặt biệt : môn học đặt biệt được định nghĩa là những môn học học ở những phòng đặt biệt như các môn thí nghiệm, thực hành, thể dục Sỉ số sinh viên được phép đăng ký các môn học này được tính theo công thức :

Sỉ số nhóm=sỉ số * hệ số dôi nhóm môn học đặt biệt

Vì các phòng thí nghiệm, thực hành thường có số chỗ cố định nên hệ số dôi nhóm môn học đặt biệt thường bằng 0 Tuỳ vào dữ liệu thống kê, cho phép người sử dụng có thể sửa đổi hệ số này

- Sỉ số sinh viên/ nhóm tổ : đây là một trong các tiêu chuẩn để phân tổ

- Hệ số min tách tổ : tiêu chuẩn phân tổ

- Hệ số max tách tổ : tiêu chuẩn phân tổ

- Sỉ số tố thiểu mở lớp

III.4 Các chiến lược xét đăng ký môn học trên cơ sở dữ liệu phân bố:

Phiếu đăng ký môn học của sinh viên được lưu giữ ở hai site : site MT và site DT Có 4 phương án để chạy xét đăng ký môn học:

a) Chạy tập trung: với phương án này dữ liệu đăng ký môn học ở 2 site sẽ được chép về phòng Đào tạo Vì toàn bộ dữ liệu đều được tập trung ở một chỗ nên thời gian xét đăng ký môn học sẽ rất nhanh, nhưng phải trả giá cho những chi phí khác Thường số lượng sinh viên của cả trường rất lớn nên thời gian chép dữ liệu và dung lượng cần để lưu trữ dữ liệu ở site PDT là rất nhiều Ngoài ra trong suốt thời gian sao chép dữ liệu ứng dụng sẽ chiếm đường truyền, làm ảnh hưởng các user khác muốn log vào hệ thống

b) Chạy tập trung trên dữ liệu phân bố : quá trình xét đăng ký môn học vẫn được thực hiện ở phòng DT ,nhưng không chép dữ liệu về mà thực hiện các phép chọn phân bố Ở phương án này quá trình xét đăng ký môn học sẽ diễn

Trang 7

ra khá chậm , đặt biệt là nếu phiếu đăng ký của sinh viên phải xét lại nhiều lần vì thế số lần thực hiện các phép chọn phân bố cũng sẽ trở nên rất lớn, làm giảm hiệu suất của ứng dụng

c) Kết hợp giưã hai phương án trên: dựa vào tần suất sử dụng và hệ số chọn của ứng dụng mà ta quyết định chọn phương án a hay b Thường dữ liệu đăng ký môn học rất bất kỳ , vì thế ta khó có thể đánh giá chính xác tần suất và hệ số chọn của ứng dụng Sự lựa chọn giữa hai phương án này chỉ có tính tương đối d) Thực hiện nhiều quá trình xét đăng ký môn học ở nhiều nơi song song: phương án này khá tốt vì tận dụng được tài nguyên của hệ thống, nhưng khó thực hiện Sử dụng phương án này cần đề ra một chiến lược quản lý giao dịch và dữ liệu hợp lý nhằm tránh vấn đề tranh chấp các tài nguyên dùng chung

- Để có thể xét ĐKMH một cách nhanh chóng do số lượng sinh viên xét ĐKMH quá lớn ta nên chia công việc này cho nhiều máy (server) thực hiện Mỗi máy sẽ xét cho từng phiếu ĐKMH riêng biệt tức là xét cho các sinh viên riêng biệt Trong trường hợp sinh viên khoa này đăng ký môn học của khoa khác đặt ở nơi (site) khác sẽ dẫn đến đụng độ về nhóm lớp xét cho sinh viên

Ví dụ :

- Sinh viên A đăng ký nhóm MH1, MH2

- Sinh viên B đăng ký nhóm MH1, MH3

Khi xét đăng ký đồng thời cho 2 sinh viên ở hai nơi ta điều phải sử dụng thông tin về số lượng sinh viên hiện có trong nhóm MH1 Nêùu số lượng sinh viên hiện có của nhóm < sỉ số tối đa cho phép của nhóm : nhóm còn trống -> cho phép sinh viên vào nhóm và cập nhật lại số lượng nhóm Giả sử số lượng sinh viên của nhóm là 20, quá trình xét ĐKMH ở 2 nơi cùng lúc đọc số lượng nhóm Sau đó quá trình xét ĐKMH 1 kiểm tra, tăng số lượng nhóm lên 21 và cập nhật Tương tự quá trình xét ĐKMH 2 cũng kiểm tra , thấy hợp lệ và cập nhật lại số lượng nhóm bằng 21 Như vậy, kết quả số lượng nhóm chỉ tăng lên 1 trong khi thêm 2 sinh viên Quá trình xét ĐKMH ở hai nơi cùng tranh chấp trên 1 phần tử dữ liệu Để tránh trường hợp này,trước khi đọc dữ liệu ta khoá (lock) vùng dữ liệu đó lại, sau khi cập nhật dữ liệu mới ta gỡ khoa.ù

IV PHÂN QUYỀN

Phân hệ ĐKMH sử dụng 3 vai trò:

 User của site MT : được phép log vào site MT để xem thời khoá biểu dự kiến, chọn và đăng ký môn học , đồng thời xem kết quả đăng ký môn học

 User của site DT : dược phép log vào site DT và cũng có những quyền tương tự như đối với user của site MT

 Admin : cũng log vào phân hệ ĐKMH nhưng có quyền khác so với các user của từng site Admin log vào hệ thống để duyệt xét phiếu ĐKMH của tất cả các sinh viên đồng thời lập lịch đăng ký môn học ở các học kỳ sau

Trang 8

Cùng là phân hệ ĐKMH nhưng những user khác nhau sẽ có quyền khác nhau, vì thế ứng dụng sẽ mở ra những giao diện khác nhau

Trang 9

CHƯƠNG 2 :

CÁC CHỨC NĂNG TRONG

PHÂN HỆ

CHỨC NĂNG THỐNG KE Â :

Chức năng: thống kê số lượng sinh viên đăng ký theo môn học trước và sau khi đăng ký được, đồng thới cho phép người sử dụng huỷ bỏ một nhóm lớp môn học nếu như số lượng sinh viên đăng ký không đủ để mở lớp

Input:

 Tính số sinh viên dựa vào bảng DKMH

 Lấy thông tin về các nhóm thời khóa biểu từ bảng GV_LOP_MH

Output:

 Xem dữ liệu thống kê

 Huỷ bỏ một nhóm lớp môn học

- Khi huỷ bỏ một nhóm lớp môn học, nếu chưa xét nhóm lớp môn học -> chỉ cần đánh dấu huỷ nhóm lớp môn học đó trong bảng GV_LOP_MH (bảng lưu thời khoá biểu) Ngược lại nếu như xét nhóm môn học đó rồi -> xoá toàn bộ các sinh viên tham gia học nhóm lớp đó Việc làm này rất nguy hiểm vì nó sẽ gây ảnh hưởng đến kết quả đăng ký môn học của các sinh viên và nhóm lớp

bị huỷ sẽ không có khả năng khôi phục lại Vì thế cần thông báo cho người sử dụng rõ ràng trước khi thực hiện

Thiết kế giao diện:

Trang 10

Form gồm 4 khối thông tin:

 Khối trên cùng hiển thị khoá ngành, gồm 3 trường MA_NGANH, NAM_VAO_TRUONG, DOT và số sinh viên đăng ký học đầy đủ tất cả các môn học thuộc khoá ngành đó Người sử dụng truy vấn theo từng khoá ngành để thống kê từng nhóm lớp môn học Khối này sử dụng bảng GV_LOP_MH và DKMH ,chỉ có thể truy vấn để xem

 Khối dưới cùng bên trái hiển thị tất cả các nhóm lớp môn học thuộc khoá ngành đó, đồng thời cho biết số nhóm lớp và số sinh viên dự kiến của môn học được hiện sáng Người sử dụng có thể truy vấn theo từng nhóm lớp môn học để xem các dữ liệu thống kê Khối này sử dụng bảng GV_LOP_MH và chỉ để xem

 Khối ở giữa bên phải hiển thị dữ liệu thống kê trước khi xét DKMH Từ đó cho phép người sử dụng xem xét và huỷ bỏ một nhóm lớp môn học Khối này sử dụng bảng DKMH và chỉ để xem

 Khối cuối cùng ở góc trái bên phải hiển thị dữ liệu thống kê sau khi xét DKMH Khối này sử dụng bảng DKMH và chỉ để xem

II.CHỨC NĂNG XÉT ĐĂNG KÝ MÔN HỌC

II.1 Form xét đăng ký theo dữ liệu nhập

Chức năng:

 Cung cấp 2 tuỳ chọn cho người sử dụng để xét ĐKMH:

- Xét theo khoá ngành

- Xét theo toàn bộ dữ liệu

 Xem thời khoá biểu đã xét

Input:

- Dữ liệu lấy từ bảng DKMH, GV_LOP_MH, SS_PHONG

Output:

- Trả về thời khoá biểu cho các sinh viên

- Cập nhật lại các bảng SS_PHONG, TKB_SV, DKMH, DANH_GIA

Thiết kế giao diện:

Ngày đăng: 28/09/2013, 10:20

HÌNH ẢNH LIÊN QUAN

• Tính số sinh viên dựa vào bảng DKMH - Phân hệ đăng ký môn học
nh số sinh viên dựa vào bảng DKMH (Trang 9)
- Dữ liệu lấy từ bảng DKMH, GV_LOP_MH, SS_PHONG Output: - Phân hệ đăng ký môn học
li ệu lấy từ bảng DKMH, GV_LOP_MH, SS_PHONG Output: (Trang 10)
• Khối bên trái hiện thị các khoá ngành. Khối này sử dụng bảng GV_LOP_MH và chỉ để xem. - Phân hệ đăng ký môn học
h ối bên trái hiện thị các khoá ngành. Khối này sử dụng bảng GV_LOP_MH và chỉ để xem (Trang 11)
- Dữ liệu lấy từ bảng DKMH, GV_LOP_MH, SS_PHONG Output: - Phân hệ đăng ký môn học
li ệu lấy từ bảng DKMH, GV_LOP_MH, SS_PHONG Output: (Trang 12)
• Khối bên trái hiện thị các khoá ngành. Khối này sử dụng bảng GV_LOP_MH và chỉ để xem. - Phân hệ đăng ký môn học
h ối bên trái hiện thị các khoá ngành. Khối này sử dụng bảng GV_LOP_MH và chỉ để xem (Trang 13)
nào đã xếp được thời khoá biểu rồi nút Xét vét sẽ ẩn. Khối này sử dụng bảng GV_LOP_MH, DKMH và chỉ cho phép xem. - Phân hệ đăng ký môn học
n ào đã xếp được thời khoá biểu rồi nút Xét vét sẽ ẩn. Khối này sử dụng bảng GV_LOP_MH, DKMH và chỉ cho phép xem (Trang 14)
- Lấy thông tin từ bảng TIEU_CHUAN Output: - Phân hệ đăng ký môn học
y thông tin từ bảng TIEU_CHUAN Output: (Trang 15)
- Lấy thông tin từ bảng LICH_DKMH Output: - Phân hệ đăng ký môn học
y thông tin từ bảng LICH_DKMH Output: (Trang 16)
- Lấy thông tin từ bảng LICH_REP Output: - Phân hệ đăng ký môn học
y thông tin từ bảng LICH_REP Output: (Trang 17)

TỪ KHÓA LIÊN QUAN

w