6. Bố cục luận văn
2.3. Các chức năng sẽ ứng dụng KNT
Các chức năng sẽ ứng dụng KNT là các chức năng mà việc tạo ra dữ liệu sử dụng phải được tính toán nhiều/phức tạp làm tốn nhiều thời gian hoặc bị truy cập đồng thời với số lượng lớn người dùng.
2.3.1. Đăng ký học phần
- Mô tả quá trình thao tác dữ liệu của chức năng: Gồm 2 quá trình + Quá trình 1: lấy danh sách học phần có thể đăng ký
Dữ liệu vào: Masv, KyThu
Dữ liệu ra: Danh sách các lớp học phần mà sinh viên có thể đăng ký: ds
Xử lý: - Danh sách lớp học phần đang mở có thể đăng ký bổ sung: A TrangThai = true count(MaSV)<50 (LOPHOCPHAN)
- Danh sách các môn học có lớp đang mở: B MONHOC.* (A MONHOC)
- Các môn học trong kỳ hiện tại của sinh viên masv:
C MONHOC.* ((SINHVIEN.MaSV = masv KyHT = KyThu) (SINHVIEN
LOP NGANH CHUONGTRINH MONHOC)) - Các môn học mà sinh viên masv đã học:
D MONHOC.* ( SINHVIEN.MaSV = masv (SINHVIEN HOC
LOPHOCPHAN MONHOC))
- Các môn học mà sinh viên masv còn nợ hoặc được phép cải thiện: E MONHOC.* ( (MaSV = masv (DiemTP*0.4 + DiemThi*0.6)<5.5) Cuoi=1
(SINHVIEN HOC LOPHOCPHAN MONHOC)) - Các môn học mà sinh viên masv được phép học vượt:
F MHTruoc in D.MaMH (MONHOC)
- Danh sách môn học mà sinh viên masv được đăng ký: G B (C E F)
- Danh sách các lớp học phần mà sinh viên có thể đăng ký: H MaMH in G.MaMH (A)
ds = H SELECT dbo.LOPHOCPHAN.* FROM dbo.LOPHOCPHAN WHERE ( (TrangThai = 1) AND (dbo.LOPHOCPHAN.MaLopHP in (
select dbo.LOPHOCPHAN.MaLopHP FROM dbo.LOPHOCPHAN INNER JOIN
dbo.HOC ON dbo.LOPHOCPHAN.MaLopHP = dbo.HOC.MaLopHP GROUP BY dbo.LOPHOCPHAN.MaLopHP HAVING (count(MaSV)<50)) ) AND dbo.LOPHOCPHAN.MaMH in ( SELECT dbo.MONHOC.MaMH
FROM dbo.LOPHOCPHAN INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH WHERE (dbo.LOPHOCPHAN.TrangThai = 1) INTERSECT ( SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN
dbo.LOP ON dbo.SINHVIEN.MaLop = dbo.LOP.MaLop INNER JOIN
dbo.NGANH ON dbo.LOP.MaNg = dbo.NGANH.MaNg INNER JOIN
dbo.CHUONGTRINH ON dbo.NGANH.MaNg = dbo.CHUONGTRINH.MaNg INNER JOIN
dbo.MONHOC ON dbo.CHUONGTRINH.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.LOP.KyHT - dbo.CHUONGTRINH.KyThu = 0) AND (dbo.SINHVIEN.MaSV = masv)
SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.SINHVIEN.MaSV = masv) AND (dbo.HOC.Cuoi = 1) AND (dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 < 5.5) UNION
SELECT dbo.MONHOC.MaMH FROM dbo.MONHOC
WHERE dbo.MONHOC.MAMH in ( SELECT dbo.MONHOC.MaMH FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH WHERE (dbo.HOC.Cuoi = 1) ) ) ) )
+ Quá trình 2: đăng ký lớp học phần
Dữ liệu vào: masv, danh sách lớp học phần đăng ký ds
Dữ liệu ra: Thông báo kết quả đăng ký tb
Xử lý: - Tính tổng số tín chỉ tong mà sv đăng ký: tong Sum(SoTC) (ds MONHOC)
Nếu tong phù hợp thì chấp nhận đăng ký, tb = ‘Thành công’. Ngược lại, không chấp nhận đăng ký, tb = ‘Số tín chỉ đăng ký không phù hợp’
SQL truy vấn số tín chỉ đăng ký
SELECT SUM(dbo.MONHOC.SoTC) AS tong FROM dbo.LOPHOCPHAN INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.LOPHOCPHAN.MaLopHP IN (ds)) - Nhận xét:
+ Vào đợt đăng ký lớp học phần, sinh viên toàn trường tập trung đăng ký/hủy đăng ký làm tạo ra một lượng lớn user truy cập đồng thời.
+ Để có được danh sách lớp học phần mà sinh viên có thể đăng ký, chương trình phải tính nhiều dữ liệu trung gian, đặc biệt là tính các môn học: sinh viên đã học, sinh viên còn nợ hoặc được phép học cải thiện và các môn học được phép học vượt. Các phép tính này dùng nhiều phép nối (). Trong đó phép tính các môn học sinh viên còn nợ hoặc được phép học cải thiện phải dùng thêm phép thống kê (Max).
- Tiểu kết: Chức năng đăng ký học phần cần được hỗ trợ KNT.
2.3.2. Hủy đăng ký học phần
- Mô tả quá trình thao tác dữ liệu của chức năng: Gồm 2 quá trình + Quá trình 1: lấy danh sách học phần có thể hủy đăng ký
Dữ liệu vào: masv
Dữ liệu ra: Danh sách các lớp học phần mà sinh viên có thể hủy đăng ký: ds
Xử lý: - Danh sách các lớp học phần mà sinh viên masv đang đăng ký A LOPHOCPHAN.* ( SINHVIEN.MaSV = masv TrangThai = 1 (SINHVIEN
HOC LOPHOCPHAN)) ds = A SQL truy vấn danh sách học phần mà sinh viên SELECT dbo.LOPHOCPHAN.*
FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
masv đang đăng ký
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP
WHERE (dbo.LOPHOCPHAN.TrangThai = 1) AND (dbo.SINHVIEN.MaSV = masv )
+ Quá trình 2: hủy đăng ký lớp học phần
Dữ liệu vào: masv, danh sách lớp học phần còn lại sau hủy đăng ký ds Dữ liệu ra: Thông báo kết quả hủy đăng ký tb
Xử lý: Tính tổng số tín chỉ còn lại tong sau khi sv hủy đăng ký:
tong Sum(SoTC) (LOPHOCPHAN.MaLopHP in ds (LOPHOCPHAN
MONHOC))
Nếu tong phù hợp thì chấp nhận đăng ký, tb = ‘Thành công’. Ngược lại, không chấp nhận đăng ký, tb = ‘Không thể hủy đăng ký quá số tín chỉ cho phép’
SQL truy vấn số tín chỉ hủy đăng ký
SELECT SUM(dbo.MONHOC.SoTC) AS tong
FROM dbo.LOPHOCPHAN INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.LOPHOCPHAN.MaLopHP IN (ds)) - Nhận xét:
+ Vào đợt đăng ký lớp học phần, sinh viên toàn trường tập trung đăng ký/hủy đăng ký làm tạo ra một lượng lớn user truy cập đồng thời.
+ Sử dụng 02 phép nối () trong câu truy vấn xử lý dữ liệu. - Tiểu kết: Nên hỗ trợ KNT cho chức năng hủy đăng ký học phần
2.3.3. Xem điểm
- Mô tả quá trình thao tác dữ liệu của chức năng xem điểm: Dữ liệu vào: masv
Dữ liệu ra: Danh sách kết quả điểm ds, số tín chỉ tích lũy sotctl, điểm trung bình tích lũy diemtbtl
Xử lý: - Danh sách điểm chưa tính điểm học phần:
A SINHVIEN.MaSV = masv (SINHVIEN HOC
LOPHOCPHAN MONHOC HOCKY NAMHOC) - Danh sách điểm đã tính điểm học phần:
B A.*, diemtbDiem4(DiemTP*0.4+DiemThi*0.6)(A) ds = B
- Số tín chỉ tích lũy, điểm trung bình tích lũy:
C sotctlSum(SoTC),tongdiemtbSum(diemtb)(Cuoi = true (B)) - Điểm trung bình tích lũy:
D diemtbtl (tongdiemtb/sotctl) (C) SQL truy
vấn danh sách điểm hiện tại của sinh viên
SELECT dbo.SINHVIEN.MaSV, dbo.SINHVIEN.HoDem, dbo.SINHVIEN.TenSV, dbo.MONHOC.TenMH, dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 AS diem,
CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END AS diemtb
FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH
WHERE (dbo.HOC.Cuoi = 1) AND (dbo.SINHVIEN.MaSV =
masv)
SQL truy vấn số tín chỉ tích lũy, điểm tich lũy của sinh viên
SELECT dbo.SINHVIEN.MaSV, dbo.SINHVIEN.HoDem, dbo.SINHVIEN.TenSV, dbo.MONHOC.TenMH, dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 AS diem,
CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END AS diemtb, SUM(dbo.MONHOC.SoTC)
AS sotctl, SUM((CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END) * dbo.MONHOC.SoTC)
/ SUM(dbo.MONHOC.SoTC) AS diemtbtl FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC.MaMH
WHERE (dbo.HOC.Cuoi = 1)
GROUP BY dbo.SINHVIEN.MaSV, dbo.SINHVIEN.HoDem, dbo.SINHVIEN.TenSV, dbo.MONHOC.TenMH, dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6
HAVING (dbo.SINHVIEN.MaSV = masv) - Nhận xét:
+ Để xem được bảng điểm, chương trình phải thực hiện 05 phép nối.
+ Để có được số tín chỉ tích lũy, điểm trung bình tích lũy, chương trình phải thực hiện thêm 02 phép thống kê (Sum).
- Tiểu kết: chức năng xem điểm cần được hỗ trợ KNT.
2.3.4. Lọc danh sách xét học bổng
- Chức năng này chỉ lọc danh sách điểm của những sinh viên đủ tiêu chí xét học bổng học tập trong năm học cụ thể. Từ danh sách này, Khoa, Phòng CT HSSV sẽ xem xét lại, cân đối, chọn lọc để cấp học bổng học tập.
- Mô tả quá trình thao tác dữ liệu của chức năng lọc danh sách xét học bổng: Dữ liệu vào: manh
Dữ liệu ra: Danh sách xét cấp học bổng ds
Xử lý: - Danh sách điểm chưa tính điểm học phần:
A NAMHOC.MaNH = manh (SINHVIEN HOC
LOPHOCPHAN MONHOC HOCKY NAMHOC
LOP NGANH KHOA) - Danh sách điểm đã tính điểm học phần: B A.*, diemtbDiem4(DiemTP*0.4+DiemThi*0.6)(A) - Danh sách sinh viên đạt đạt điều kiện:
C Min(diemtb)≥1.0 Average(diemtb)≥ 2.5 Sum(SoTC) ≥ 15 (B) - Danh sách sau sắp xếp:
D Sort MaKhoa Asc, MaLop Asc, diemtbnh Desc( diemtbnh(Sum(diemtb)/Sum(SoTC)) (C)) ds = D SQL truy vấn danh sách xét cấp học bổng
SELECT TOP (100) PERCENT dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 AS diem,
CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1
ELSE 0 END AS diemtb, dbo.SINHVIEN.MaSV,
SUM(dbo.MONHOC.SoTC) AS sotctl, SUM(CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END) * 'dbo.MONHOC.SoTC)' /
SUM(dbo.MONHOC.SoTC) AS diemtbtl,
dbo.LOPHOCPHAN.MaMH, dbo.SINHVIEN.HoDem,
dbo.SINHVIEN.TenSV, dbo.KHOA.MaKhoa, dbo.NGANH.MaNg, dbo.LOP.MaLop FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH INNER JOIN
dbo.LOP ON dbo.SINHVIEN.MaLop = dbo.LOP.MaLop INNER JOIN
dbo.NGANH ON dbo.LOP.MaNg = dbo.NGANH.MaNg INNER JOIN
dbo.KHOA ON dbo.NGANH.MaKhoa = dbo.KHOA.MaKhoa
GROUP BY dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6,
dbo.SINHVIEN.MaSV, dbo.LOPHOCPHAN.MaMH,
dbo.SINHVIEN.HoDem, dbo.SINHVIEN.TenSV,
dbo.KHOA.MaKhoa,
dbo.NGANH.MaNg, dbo.LOP.MaLop
HAVING (dbo.LOPHOCPHAN.MaMH = 123) AND (MIN(CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END)
> 0) AND (SUM(CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END)
SUM(dbo.MONHOC.SoTC) >= 2.5)
ORDER BY dbo.KHOA.MaKhoa, dbo.NGANH.MaNg, dbo.LOP.MaLop, dbo.SINHVIEN.TenSV, dbo.SINHVIEN.HoDem, diemtbtl DESC
- Nhận xét:
+ Để có được bảng điểm, chương trình phải thực hiện 08 phép nối, lấy dữ liệu từ nhiều bảng SINHVIEN, HOC, LOPHOCPHAN, MONHOC, HOCKY, NAMHOC, LOP, NGANH, KHOA
+ Để có được danh sách xét cấp học bổng cuối cùng, chương trình phải thực hiện thêm 05 phép thống kê (Sum, Min, Average).
- Tiểu kết: Chức năng lọc danh sách xét học bổng cần được hỗ trợ KNT.
2.3.5. Lọc danh sách nợ học phần
- Chức năng này chỉ lọc danh sách điểm của những sinh viên nợ học phần. Từ danh sách này, Khoa, Phòng Đào tạo sẽ xem xét lại, để cố vấn cho sinh viên. Trong những trường hợp nặng (điểm tích lũy thấp, số môn nợ nhiều, đã cảnh báo học tập…) thì sẽ ra cảnh báo học tập.
- Mô tả quá trình thao tác dữ liệu của chức năng lọc danh sách nợ học phần: Dữ liệu vào:
Dữ liệu ra: Danh sách nợ học phần sv, danh sách số tín chỉ tích lũy t, danh sách điểm tích lũy d
Xử lý: - Danh sách điểm chưa tính điểm học phần:
A (SINHVIEN HOC LOPHOCPHAN MONHOC
LOP NGANH KHOA) - Danh sách điểm đã tính điểm học phần: B A.*, diemtbDiem4(DiemTP*0.4+DiemThi*0.6)(A) - Danh sách sinh viên nợ học phần:
C diemtb = 0 Cuoi = true (B)
- Danh sách số tín chỉ tích lũy, điểm trung bình tích lũy:
D Sort MaKhoa Asc, MaLop Asc, diemtbtl Desc( diemtbtl(Sum(diemtb*SoTC)/Sum(SoTC)), sotctlSum(SoTC) (C))
ds = C
t = sotctl (D) d = diemtbtl (D)
SQL truy vấn danh sách sinh viên nợ học phần dsno
SELECT dbo.SINHVIEN.*, dbo.MONHOC.TenMH,
CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END AS diemtb
FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH INNER JOIN
dbo.LOP ON dbo.SINHVIEN.MaLop = dbo.LOP.MaLop INNER JOIN
dbo.NGANH ON dbo.LOP.MaNg = dbo.NGANH.MaNg INNER JOIN
dbo.KHOA ON dbo.NGANH.MaKhoa = dbo.KHOA.MaKhoa
WHERE (dbo.HOC.Cuoi = 1) AND (dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6 < 4) SQL truy vấn số tín chỉ tích lũy, điểm trung bình tích lũy của sinh viên masv
SELECT TOP (100) PERCENT dbo.SINHVIEN.MaSV,
dbo.SINHVIEN.HoDem, dbo.SINHVIEN.TenSV,
SUM(dbo.MONHOC.SoTC) AS sotctl,
SUM(CASE WHEN diem >= 8.5 THEN 4 WHEN diem >= 7 THEN 3 WHEN diem >= 5.5 THEN 2 WHEN diem >= 4 THEN 1 ELSE 0 END)
* 'dbo.MONHOC.SoTC)' / SUM(dbo.MONHOC.SoTC) AS diemtbtl, dbo.KHOA.MaKhoa, dbo.NGANH.MaNg
FROM dbo.SINHVIEN INNER JOIN
dbo.HOC ON dbo.SINHVIEN.MaSV = dbo.HOC.MaSV INNER JOIN
dbo.LOPHOCPHAN ON dbo.HOC.MaLopHP = dbo.LOPHOCPHAN.MaLopHP INNER JOIN-
dbo.MONHOC ON dbo.LOPHOCPHAN.MaMH = dbo.MONHOC.MaMH INNER JOIN
dbo.LOP ON dbo.SINHVIEN.MaLop = dbo.LOP.MaLop INNER JOIN
dbo.NGANH ON dbo.LOP.MaNg = dbo.NGANH.MaNg INNER JOIN
dbo.KHOA ON dbo.NGANH.MaKhoa = dbo.KHOA.MaKhoa
WHERE (dbo.HOC.Cuoi = 1)
GROUP BY dbo.HOC.DiemTP * 0.4 + dbo.HOC.DiemThi * 0.6,
dbo.SINHVIEN.MaSV, dbo.SINHVIEN.HoDem,
dbo.SINHVIEN.TenSV, dbo.KHOA.MaKhoa, dbo.NGANH.MaNg HAVING (dbo.SINHVIEN.MaSV = masv)
ORDER BY dbo.KHOA.MaKhoa, dbo.NGANH.MaNg, dbo.SINHVIEN.TenSV, dbo.SINHVIEN.HoDem
- Nhận xét:
+ Để có được bảng điểm, chương trình phải thực hiện 06 phép nối.
+ Để có được danh sách cuối cùng, chương trình phải thực hiện thêm 02 phép thống kê (Sum).
- Tiểu kết: Chức năng lọc danh sách nợ học phần cần được hỗ trợ KNT.