Yêu cầu về CSDL:Yêu cầu 1: Cho phép lưu thông tin về cá nhân của từng sinh viên học trong trường, bao gồm mã sinh viên, tên, ngày sinh, địa chỉ, khoa, và lớp.Yêu cầu 2: Cho phép lưu thôn
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN CƠ SỞ DỮ LIỆU
TÊN ĐỀ TÀI
“Quản lý thời khoá biểu sinh viên’’
Thành viên nhóm
1 Nguyễn Đức A MSSV
2 Lê Công B MSSV
3 Trần Minh S MSSV
Hà Nội, tháng năm
Trang 2STT Họ và Tên Nhiệm vụ Ký tên
1 Nguyễn Đức A
MSSV:
2 Lê Công B.
MSSV:
3 Trần Minh S.
MSSV:
STT Họ và Tên giảng viên Điểm số Ký tên
1
2
Trang 3I Mô tả bài toán
1.Sự cần thiết của bài toán:
a Sự cần thiết của bài toán:
Bài toán quản lý thời khóa biểu sinh viên là một vấn đề thiết yếu và cấp bách trong các trường học, đặc biệt là ở cấp đại học và cao đẳng Việc phát triển một chương trình cơ sở dữ liệu để quản lý thời khóa biểu sinh viên mang lại nhiều lợi ích quan trọng Trước hết, nó giúp tối ưu hóa quản lý thời gian và tài nguyên, cho phép nhà trường sắp xếp và phân bổ hợp lý các lớp học, phòng học, và giảng viên Điều này giúp tránh được
sự trùng lặp trong lịch học và đảm bảo các phòng học được sử dụng hiệu quả Ngoài ra, việc quản lý thời khóa biểu bằng cơ sở dữ liệu còn nâng cao trải nghiệm học tập của sinh viên, giúp họ dễ dàng tra cứu và theo dõi lịch học của mình, từ đó có kế hoạch học tập và làm việc hiệu quả hơn Điều này cũng giúp giảm bớt áp lực cho bộ phận quản lý giáo vụ, cho phép họ tập trung vào các công việc khác quan trọng hơn
b Yêu cầu về CSDL:
Yêu cầu 1: Cho phép lưu thông tin về cá nhân của từng sinh viên
học trong trường, bao gồm mã sinh viên, tên, ngày sinh, địa chỉ, khoa, và lớp
Yêu cầu 2: Cho phép lưu thông tin về giảng viên, bao gồm mã
giảng viên, tên, chuyên ngành, và các lớp mà giảng viên dạy
Yêu cầu 3: Cho phép lưu thông tin về từng môn học, bao gồm mã
môn học, tên môn học, số tín chỉ, và các điều kiện tiên quyết
Yêu cầu 4: Cho phép lưu thông tin về lớp học, bao gồm mã lớp,
môn học, giảng viên, thời gian, và địa điểm học
Yêu cầu 5: Cho phép lưu thông tin về phòng học, bao gồm mã
phòng, vị trí, sức chứa, và các trang thiết bị đi kèm
Yêu cầu 6: Cho phép xếp thời khóa biểu tự động hoặc bán tự động,
đảm bảo không có sự trùng lặp và tối ưu hóa việc sử dụng phòng học và giảng viên
Yêu cầu 7: Cho phép tra cứu thời khóa biểu của sinh viên và giảng
viên, và tạo các báo cáo chi tiết về thời khóa biểu, lịch sử học tập,
và tình trạng sử dụng phòng học
Yêu cầu 8: Đảm bảo tính bảo mật và phân quyền truy cập, cho
phép phân quyền cho các nhóm người dùng khác nhau như quản trị
Trang 4viên, giảng viên, và sinh viên, đảm bảo rằng chỉ những người có quyền mới có thể truy cập hoặc chỉnh sửa thông tin nhất định
II Xây dựng bài toán
1 Sơ đồ SQL
Tên CSDL: “Quản lý thời khoá biểu sinh viên”
Bảng SinhVien (masinhvien, tensinhvien, ngaysinh, diachi, khoa, lop) là bảng lưu thông tin của sinh viên Khoá chính –
Primary Key là masinhvien.
Ứng với Yêu cầu 1.
Bảng GiangVien (magiangvien, tengiangvien, chuyennganh) là bảng lưu thông tin của giảng viên Khoá chính – Primay Key là
magiangvien
Ứng với Yêu cầu 2.
Bảng MonHoc (mamonhoc, tenmonhoc, sotinchi,
dieukientienquyet) là bảng lưu thông tin của môn học Khoá
chính – Primary Key là mamonhoc.
Ứng với Yêu cầu 3.
Bảng LopHoc (malophoc, mamonhoc, magiangvien,
maphonghoc, thoigian, diadiem) là bảng lưu thông tin của lớp
học Khoá chính – Primary Key là malophoc, Khoá ngoại – Foreign Key là mamonhoc, magiangvien, maphonghoc
Ứng với Yêu cầu 4.
Bảng PhongHoc (maphonghoc, vitri, succhua, trangthietbi) là bảng lưu thông tin của phòng học Khoá chính – Primary Key là
maphonghoc
Ứng với Yêu cầu 5
Bảng ThoiKhoaBieu (matkb, masinhvien, malophoc) là bảng lưu thông tin của thời khoá biểu Khoá chính – Primary Key là
matkb, khoá ngoại – Foreign Key là masinhvien, malophoc
Ứng với Yêu cầu 6.
Trang 5 Bảng DiemDanh (madiemdanh, masinhvien, mamonhoc, songaynghi) là bảng lưu thông tin điểm danh, số ngày nghỉ của sinh viên theo môn học tín chỉ Khoá chính – Primary Key là
madiemdanh, khoá ngoại – Foreign key là masinhvien,
mamonhoc.
Ứng với Yêu cầu 7.
Bảng BaoCao (mabaocao, loaibaocao, noidungbaocao,
thoigiantao, magiangvien, masinhvien) là bảng tạo các báo cáo
về lịch sử học tập, tình trạng sử dụng phòng Khoá chính –
Primary Key là mabaocao Khoá ngoại – Foreign Key là
magiangvien, masinhvien.
Ứng với Yêu cầu 8.
Diagram:
Trang 62 Code T - SQL
- CREATE TABLE SinhVien (
masinhvien NVARCHAR(10) PRIMARY KEY,
tensinhvien NVARCHAR(50),
ngaysinh DATE,
diachi NVARCHAR(100),
khoa NVARCHAR(50),
lop NVARCHAR(10)
);
Chèn dữ liệu vào ba2ng SinhVien
INSERT INTO SinhVien VALUES
INSERT INTO SinhVien VALUES
Ba2ng GiangVien
CREATE TABLE GiangVien (
magiangvien NVARCHAR (10) PRIMARY KEY,
tengiangvien NVARCHAR (50),
chuyennganh NVARCHAR (50)
);
Chèn dữ liệu vào ba2ng GiangVien
INSERT INTO GiangVien VALUES ('GV001', 'Le Van
INSERT INTO GiangVien VALUES ('GV002', 'Nguyen
Ba2ng MonHoc
CREATE TABLE MonHoc (
mamonhoc NVARCHAR(10) PRIMARY KEY,
tenmonhoc NVARCHAR(50),
sotinchi INT,
dieukientienquyet NVARCHAR(50)
);
Chèn dữ liệu vào ba2ng MonHoc
INSERT INTO MonHoc VALUES('MH001', 'Lap trinh C',
3, NULL);
Trang 7INSERT INTO MonHoc VALUES('MH002', 'Toan cao cap', 3, NULL);
Ba2ng LopHoc
CREATE TABLE LopHoc (
malophoc NVARCHAR(10) PRIMARY KEY,
mamonhoc NVARCHAR(10),
magiangvien NVARCHAR(10),
maphonghoc NVARCHAR(10),
thoigian NVARCHAR(50),
diadiem NVARCHAR(50),
FOREIGN KEY (mamonhoc) REFERENCES
MonHoc(mamonhoc),
FOREIGN KEY (magiangvien) REFERENCES
GiangVien(magiangvien)
FOREIGN KEY (maphonghoc) REFERENCES
PhongHoc(maphonghoc)
);
Chèn dữ liệu vào ba2ng LopHoc
INSERT INTO LopHoc VALUES
INSERT INTO LopHoc VALUES
Ba2ng PhongHoc
CREATE TABLE PhongHoc (
maphonghoc NVARCHAR(10) PRIMARY KEY,
vitri NVARCHAR(50),
succhua INT,
trangthietbi NVARCHAR(100)
);
Chèn dữ liệu vào ba2ng PhongHoc
INSERT INTO PhongHoc VALUES ('PH001', 'Tang 1',
INSERT INTO PhongHoc VALUES ('PH002', 'Tang 2',
Trang 8Ba2ng ThoiKhoaBieu
CREATE TABLE ThoiKhoaBieu (
matkb NVARCHAR(10) PRIMARY KEY,
masinhvien NVARCHAR(10),
malophoc NVARCHAR(10),
FOREIGN KEY (masinhvien) REFERENCES
SinhVien(masinhvien),
FOREIGN KEY (malophoc) REFERENCES
LopHoc(malophoc)
);
Chèn dữ liệu vào ba2ng ThoiKhoaBieu
INSERT INTO ThoiKhoaBieu VALUES ('TKB001',
INSERT INTO ThoiKhoaBieu VALUES ('TKB002',
Ba2ng DiemDanh
CREATE TABLE DiemDanh (
madiemdanh NVARCHAR(10) PRIMARY KEY,
masinhvien NVARCHAR(10),
mamonhoc NVARCHAR(10),
songaynghi INT,
FOREIGN KEY (masinhvien) REFERENCES
SinhVien(masinhvien),
FOREIGN KEY (mamonhoc) REFERENCES
MonHoc(mamonhoc)
);
Chèn dữ liệu vào ba2ng DiemDanh
INSERT INTO DiemDanh VALUES('DD001', 'SV001',
INSERT INTO DiemDanh VALUES('DD002', 'SV002',
- Ba2ng BaoCao
CREATE TABLE BaoCao (
mabaocao NVARCHAR(10) PRIMARY KEY,
masinhvien NVARCHAR(10),
magiangvien NVARCHAR (10),
loaibaocao NVARCHAR(50),
Trang 9noidungbaocao NVARCHAR(100),
thoigiantao DATE,
FOREIGN KEY (masinhvien) REFERENCES
SinhVien(masinhvien),
FOREIGN KEY (magiangvien) REFERENCES
GiangVien(magiangvien)
);
Chèn dữ liệu vào ba2ng BaoCao
INSERT INTO BaoCao VALUES
INSERT INTO BaoCao VALUES
Bài Tập Và Lời Giải Chi Tiết
1 Danh sách các sinh viên cùng học lớp với sinh viên "Nguyen Van A"
SELECT DISTINCT SV2.tensinhvien
FROM ThoiKhoaBieu TKB1
JOIN ThoiKhoaBieu TKB2 ON TKB1.malophoc =
TKB2.malophoc
JOIN SinhVien SV1 ON TKB1.masinhvien =
SV1.masinhvien
JOIN SinhVien SV2 ON TKB2.masinhvien =
SV2.masinhvien
WHERE SV1.tensinhvien = 'Nguyen Van A' AND
SV1.masinhvien != SV2.masinhvien;
2 Tổ2ng sổJ tín chỉ2 mà sinh viên "Nguyen Van A"
đã đăng ký học
SELECT SUM(MH.sotinchi) AS tong_tinchi
FROM ThoiKhoaBieu TKB
JOIN LopHoc LH ON TKB.malophoc = LH.malophoc
JOIN MonHoc MH ON LH.mamonhoc = MH.mamonhoc
WHERE TKB.masinhvien = (SELECT masinhvien FROM
SinhVien WHERE tensinhvien = 'Nguyen Van A');
3 Danh sách các lớp học được gia2ng dạy bở2i gia2ng viên có sổJ lượng sinh viên đăng ký lớn
nhấJt
Trang 10SELECT LH.malophoc, COUNT(TKB.masinhvien) AS
so_luong_sv
FROM LopHoc LH
JOIN ThoiKhoaBieu TKB ON LH.malophoc =
TKB.malophoc
GROUP BY LH.malophoc
HAVING COUNT(TKB.masinhvien) = (
SELECT MAX(so_luong)
FROM (
SELECT COUNT(TKB.masinhvien) AS so_luong FROM LopHoc LH
JOIN ThoiKhoaBieu TKB ON LH.malophoc = TKB.malophoc
GROUP BY LH.malophoc
) AS temp
);
4 Tìm các gia2ng viên gia2ng dạy nhiê[u mổn học nhấJt và sổJ lượng mổn học họ gia2ng dạy
SELECT GV.tengiangvien, COUNT(DISTINCT
LH.mamonhoc) AS so_luong_monhoc
FROM GiangVien GV
JOIN LopHoc LH ON GV.magiangvien = LH.magiangvien
GROUP BY GV.tengiangvien
HAVING COUNT(DISTINCT LH.mamonhoc) = (
SELECT MAX(so_luong)
FROM (
SELECT COUNT(DISTINCT LH.mamonhoc) AS
so_luong
FROM LopHoc LH
GROUP BY LH.magiangvien
) AS temp
);
5 Danh sách các gia2ng viên cùng gia2ng dạy một mổn học cụ thê2 (mổn "Lap trinh C")
SELECT DISTINCT GV.tengiangvien
FROM LopHoc LH
JOIN GiangVien GV ON LH.magiangvien =
GV.magiangvien
WHERE LH.mamonhoc = (SELECT mamonhoc FROM MonHoc
WHERE tenmonhoc = 'Lap trinh C');
Trang 116 Danh sách các phòng học có thiêJt bị "May chieu" và sổJ lượng lớp học tổ2 chức trong các phòng đó
SELECT PH.maphonghoc, COUNT(LH.malophoc) AS
so_luong_lophoc
FROM PhongHoc PH
JOIN LopHoc LH ON PH.maphonghoc = LH.diadiem
WHERE PH.trangthietbi LIKE '%May chieu%'
GROUP BY PH.maphonghoc;
7 Danh sách báo cáo được tạo trong tháng 7 năm 2023
SELECT * FROM BaoCao
WHERE MONTH(thoigiantao) = 7 AND
YEAR(thoigiantao) = 2023;
8 Danh sách các mổn học mà khổng có sinh viên nào đăng ký
SELECT MH.tenmonhoc
FROM MonHoc MH
WHERE MH.mamonhoc NOT IN (
SELECT DISTINCT LH.mamonhoc
FROM LopHoc LH
JOIN ThoiKhoaBieu TKB ON LH.malophoc =
TKB.malophoc
);
9 Danh sách các báo cáo được tạo trong năm
2023, săJp xêJp theo thứ tự thời gian tạo báo cáo gia2m dấ[n
SELECT * FROM BaoCao
WHERE YEAR(thoigiantao) = 2023
ORDER BY thoigiantao DESC;
10 Tên các sinh viên có tổ2ng sổJ ngày nghỉ2
trong tấJt ca2 các mổn học nhiê[u nhấJt
SELECT SV.tensinhvien, SUM(DD.songaynghi) AS
tong_songaynghi
FROM DiemDanh DD
JOIN SinhVien SV ON DD.masinhvien = SV.masinhvien
GROUP BY SV.tensinhvien
HAVING SUM(DD.songaynghi) = (
SELECT MAX(tong_nghi)
FROM (
SELECT SUM(DD.songaynghi) AS tong_nghi
Trang 12FROM DiemDanh DD
GROUP BY DD.masinhvien ) AS temp
);