BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN HỆ ĐIỀU HÀNH CƠ SỞ DỮ LIỆU Đề tàiXÂY DỰNG PHẦN MỀM QUẢN LÝ SINH VIÊN Giáo viên hướng dẫn: Sinh vi
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN HỆ ĐIỀU HÀNH CƠ SỞ DỮ LIỆU
Đề tàiXÂY DỰNG PHẦN MỀM QUẢN LÝ SINH VIÊN
Giáo viên hướng dẫn: Sinh viên thực hiện: LÊ HỒNG ÁNH Nguyễn Ngọc Quỳnh Châu VŨ THỊ MƠ HOÀNG NGỌC LAN
Lớp 61pm2
NHẬN XÉT CỦA GIẢNG VIÊN
Trang 2
-MỤC LỤC
Trang 3LỜI NÓI ĐẦU 1
II.XÁC ĐỊNH QUY TẮC /RÀNG BUỘC, XÂY DỰNG MÔ HÌNH HỰC
3 Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới
4 Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của mộtnăm nào đó Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết quả thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó 55.Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở ra cho một khóa học nhất định.Với mỗi lớp chúng ta lưu thông tin : mã Lớp, tên
C:THỰC HIỆN CÁC CÂU LỆNH TRUY VẤN VÀ PHÂN QUYỀN 20
Trang 4LỜI NÓI ĐẦU
Ngày nay, tin học đã có những bước tiến nhanh chóng về ứng dụng của nótrong mọi lĩnh vực của cuộc sống trên phạm vi toàn thế giới nói chung và ViệtNam nói riêng.Tin học được người ta quan tâm và nhắc đến nhiều hơn bao giờhết vì nó là một phần không thể thiếu trong cuộc sống văn minh,góp phần đẩymạnh công cuộc công nghiệp hoá hiện đại hoá đất nước, tiến đến nền kinh tế trithức Máy vi tính cùng với những phần mềm là công cụ đắc lực giúp ta quản lý,
tổ chức, sắp xếp và xử lý công việc một cách nhanh chóng và chính xác
Ở Việt Nam hiện nay, máy tính điện tử đặc biệt là máy vi tính trong nhiềunăm qua đã được sử dụng rất rộng rãi Sự phát triển của tin học, các công nghệphần mềm, phần cứng, các tải liệu tham khảo đã đưa chúng ta từng bước tiếpcận với công nghệ thông tin trong mọi lĩnh vực nhằm đáp ứng nhu cầu của conngười
Quản lý sinh viên là một đề tài không còn mới mẻ với các bài toán quản lý.Việc đưa tin học vào ứng dụng để quản lý là rất hữu ích, vì chúng ta phải bỏ rarất ít thời gian mà lại thu được hiệu quả cao, rất chính xác và tiện lợi nhanhchóng
Việc đưa tin học vào ứng dụng để quản lý là rất hữu ích, vì chúng ta phải bỏ
ra rất ít thời gian mà lại thu được hiệu quả cao, rất chính xác và tiện lợi nhanhchóng.Trong phạm vi bài kiểm tra nhóm chúng em đã được đề cập đến vấn đề
“Quản lýsinh viên”
Với khoảng thời gian không nhiều, vừa phân tích thiết kế, nghiên cứu tìmhiểu khai thác ngôn ngữ mới, vừa thực hiện chương trình quả là khó khăn đốivới chúng em Bởi “Quản lý sinh viên” là một đề tài có nội dung rộng, mặt kháckhả năng am hiểu về hệ thống của nhóm em vẫn còn nhiều hạn chế và thiếusót Vậy nên e kình mong được cô góp ý , bổ sung để nhóm em hoàn thiện chobài tập tốt hơn
Trang 5và sự chuyên nghiệp, đạo đức nhà giáo cao cả không mệt mỏi của cô đã có tácđộng tích cực đến em và mang lại lợi ích cho em trong cuộc sống này Trongquá trình học tập tại trường, cô không chỉ hướng dẫn tận tình trong quá trìnhnghiên cứu mà còn giúp em cải thiện đáng kể khả năng nghiên cứu và các kỹnăng khác, đồng thời cũng là người quan tâm và chăm sóc bổ sung các kiếnthức còn thiếu cho em, điều này làm cho em ngày càng hoàn thiện hơn Trongmỗi giai đoạn khó khăn cô đều hướng dẫn rất tận tình và nhiệt tình giúp đỡ em
để em mở rộng tầm nhìn và nâng cao khả năng chuyên ngành hơn Tình cảmcao quý trong học tập của cô là hình mẫu mà em tôn trọng trong suốt cuộc đời,thời gian vừa qua cô cũng là người đã dạy cho em rất nhiều kiến thức và kỹthuật mới, điều này không chỉ cho em đặt ra những mục tiêu cao hơn mà còngiúp em hiểu được những nguyên tắc sống, đồng thời vẫn giữ tinh thần sống,
em tin rằng nó sẽ giúp em rất nhiều cho công việc sau này của em Từ khâuchọn đề tài đến khi hoàn thành từng bước dưới sự hướng dẫn tận tâm tận tình vàrất nhiều công sức của cô, phong thái cao quý của cô, nghiêm khắc, kỷ luật vàkhoan dung với người khác đã truyền nhiễm sâu sắc cho em, khiến em hiểuđược rất nhiều điều trên đời Em xin bày tỏ lòng kính trọng và biết ơn cao nhấtđến cô!
Trang 6
I:MÔ TẢ BÀI TOÁN
=> Xây dựng chương trình “Quản lý sinh viên” nhằn hỗ trợ cho việc quản lý
khoa,lớp,niên khóa,thông tin ,điểm từng môn học của sinh viên:
-Quản lý được khoa Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghinhận năm thành lập khoa
-Quản lý lớp Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở
ra cho một niên khóa nhất định
-Quản lý niên khóa Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên khóa
-Quản lý Môn Học Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một năm nào đó
-Quản lý thông tin của sinh viên Mỗi sinh viên có một mã để quản lý,Họ
Tên,Ngày Sinh,Giới Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại
-Quản lý Điểm thi của sinh viên từng môn học Mỗi kết quả thi nhận điểm của 1sinh viên làm bài cho 1 môn học nào đó theo điểm hệ 10
II.XÁC ĐỊNH QUY TẮC /RÀNG BUỘC, XÂY DỰNG MÔ HÌNH HỰC THỂ LIÊN KẾT ER
- Bao gồm các mô tả và ràng buộc sau:
1 Mỗi khoa có một mã khoa để quản lý ,một tên khoa và ghi nhận năm thành lập khoa
2 Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên khóa
3 Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại
4.Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một năm nào đó Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết quả thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó theo điểm hệ 10
Trang 75.Một lớp có một mã lớp để quản lý,Thuộc về một khoa nào và mở ra cho một khóa học nhất định.Với mỗi lớp chúng ta lưu thông tin : mã Lớp, tên lớp
TruongHoc(MaKhoa, TenKhoa, NamThanhLap, MaNK ,NamBD,NamKT, MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT,
MaMH,TenMH,SoTinChi, MaLop ,TenLop)
Các loại thực thể và thuộc tính của chúng:
- Khoa (MaKhoa, TenKhoa, NamThanhLap)
⇨ Thực thể :Khoa (MaKhoa, TenKhoa, NamThanhLap)
2.Mỗi niên khóa có một mã đề quản lý ,năm bắt đầu và năm kết thuc niên khóa
⇨ Thực thể :NienKhoa (MaNK,NamBD,NamKT)
TenKhoa
NamTha nhLap MaKhoa
Khoa
Trang 83 Mỗi lớp có nhiều sinh viên có một mã để quản lý,Họ Tên,Ngày Sinh,Giới Tính,Quê Quán,Dân Tộc,Email,Số Điện Thoại
⇨ Thực thể : SinhVien
(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)
4 Mỗi môn học được giảng dạy trong một khoa nào đó trong học kì của một năm nào đó Mối môn cần một mã để quản lý,tên môn ,số tín chỉ.Mỗi kết quả thi nhận điểm của 1 sinh viên làm bài cho 1 môn học nào đó
Thực Thể :MonHoc (MaMH,TenMH,SoTinChi)
5
NamBDMaNK
MaNK
MaNK
NamKT MaNK
NienKhoa
DanToc
QueQuanGioiTinh
NgaySinh
HoTen
SDT MaSV
SinhVien
TenMH
Trang 9m n
Trang 101 n
n1
Trang 11Bước 1: Các thực thể (trừ thực thể yếu) -> các bảng/quan hệ
Quan hệ Khoa:(MaKhoa,TenKhoa,NamThanhLap)
Quan hệ NienKhoa: MaNK,NamBD, NamKT)
Trang 12Quan hệ Lop : (MaLop,TenLop)
SDT
Quan hệ Lop (MaLop,MaKhoa,MaNK,TenLop)
Bước 5: Liên kết M-N ->Thêm 1 bảng/quan hệ mới R, chuyển khóa chính
của 2 quan hệ phía M và N thành khóa ngoại của quan hệ R Khóa chính
của R là sự kết hợp của 2 khóa ngoại
Trang 13Quan Hệ KetQua(MaSV, MaMH, DiemThi)
Quan hệ GiangKhoa(MaKhoa, MaMH, NamHoc,HocKi)
Bước 6: Thuộc tính đa trị -> Thành 1 bảng/ quan hệ mới
-Không có thuộc tính đa trị
Bước 7: Liên kết bậc >2 -> Thêm 1 bảng/ quan hệ mới
Trang 14VI:TẠO DATABASE,TẠO BẢNG,THIẾT LẬP CÁC THUỘC TÍNH CHO BẢNG THÊM DỮ LIỆU,TRUY VẤN DỮ LIỆU VÀ PHÂN QUYỀN
A:TẠO DATABASE ,TẠO BẢNG VÀ THIẾT LẬP CÁC THUỘC TÍNH CHO BẢNG
Trang 15CreateTable Khoa
( MaKhoa varchar(30)PRIMARYKEY
TenKhoa nvarchar(50),
NamThanhLap int)
tạo bảng NienKhoa
CreateTable NienKhoa
(MaNK varchar(50)PRIMARYKEY
NamBD int,
NamKT int )
tạo bảng Lop
CreateTable Lop
(MaLop varchar(30)PRIMARYKEY,
MaKhoa varchar(30),
MaNK varchar(50),
TenLop nvarchar(50))
tạo bảng sinhvien
CreateTable SinhVien
(MaSV varchar (25)PRIMARYKEY
Trang 16CreateTable MonHoc
(MaMH varchar(20)PRIMARYKEY
Trang 17CreateTable GiangKhoa
Tạo thuộc tính unique cho cột email trong bảng SinhVien
Alter Table SinhVien
ADD Unique (Email);
Thiết lập ràng buộc CHECK cho trường GioiTinh sao cho GioiTinh chỉ có thểnhận giá trị
‘Nam’ hoặc ‘Nữ’:
ALTERTABLE SinhVien
ADD CONSTRAINT KTGioiTinh CHECK (GioiTinh=N'Nam' or
GioiTinh=N'Nữ');
Thiết lập khóa phụ cho Makhoa tham chiếu đến Makhoa của bảng Khoa
ALTERTABLE Lop
ADD CONSTRAINT fk_Makhoa1
FOREIGNKEY (MaKhoa)
REFERENCES Khoa(MaKhoa);
Thiết lập khóa phụ cho MaNK tham chiếu đến MaNKcủa bảng NienKhoaALTERTABLE Lop
ADD CONSTRAINT fk_MaNK
FOREIGNKEY (MaNK)
REFERENCES NienKhoa(MaNK);
Trang 18Thiết lập khóa phụ cho MaLop tham chiếu đến MaLopcủa bảng Lop
ALTERTABLE SinhVien
ADD CONSTRAINT fk_MaLop
FOREIGNKEY (MaLop)
REFERENCES Lop(MaLop);
Thiết lập khóa phụ cho MaSV tham chiếu đến MaSV của bảng SinhVienALTERTABLE KetQua
ADD CONSTRAINT fk_MaSV
FOREIGNKEY (MaSV)
REFERENCES SinhVien(MaSV);
Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHocALTERTABLE KetQua
ADD CONSTRAINT fk_MaMH1
FOREIGNKEY (MaMH)
REFERENCES MonHoc(MaMH);
Thiết lập khóa phụ cho MaKhoa tham chiếu đến MaKhoa của bảng KhoaALTERTABLE GiangKhoa
ADD CONSTRAINT fk_MaKhoa2
FOREIGNKEY (MaKhoa)
REFERENCES Khoa(MaKhoa);
Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHocALTERTABLE GiangKhoa
ADD CONSTRAINT fk_MaMH2
FOREIGNKEY (MaMH)
REFERENCES MonHoc(MaMH);
Trang 19B:THÊM DỮ LIỆU CHO BẢNG
Insertinto Khoa values
('MK01',N'Công nghệ thông tin',1970),
('MK02',N'Khoa Kinh tế và quản trị',1971),
('MK03',N'Khoa Công trình',1972),
('MK04',N'Khoa Kỹ thuật tài nguyên nước',1973),
('MK05',N'Khoa Cơ khí',1974),
('MK06',N'Khoa Điện - Điện tử',1975),
('MK07',N'Khoa Hóa và Môi trường',1975),
('MK08',N'Khoa Ngoại Ngữ',1972),
('MK09',N'Khoa Luật',1970),
('MK10',N'Thương mại điện tử',1976)
Select *from Khoa
Insertinto NienKhoa values
Trang 20select *from Lop
Insert into SinhVien values
Trang 21('SV08','L003',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Trang 22('SV18','L008',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Nam',N'kinh','Bthimok@gmail.com',0568612138),
('SV28','L0017',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Trang 23('SV35','L0024',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangio@gmail.com',0979612138)
select *from SinhVien
Insertinto MonHoc values
('MH01',N'Hệ quản trị csdl',3),
('MH02',N'Toán rời rạc',4),
('MH03',N'Pháp luật đại cương',2),
('MH04',N'Tiếng Anh chuyên ngành',3),
('MH05',N'Trí tuệ nhân tạo',3),
select *from MonHoc
Insertinto KetQua values
('SV01','MH01',9.5),
('SV01','MH02',6),
Trang 26select *from Ketqua
Insert into GiangKhoa values
Trang 28select*from GiangKhoa
Viết thử tục lưu trữ sinh viên của 1 khoa
Createproc svkhoa
@tenkhoa nvarchar(200)
as
begin
declare @makhoa char(10)
select @makhoa=Khoa.MaKhoa from Khoa
where Khoa.TenKhoa=@tenkhoa
Select SinhVien.MaSV,SinhVien.HoTen from SinhVien,Lop Where
Lop.MaLop=SinhVien.MaLop
and Lop.MaKhoa=@makhoa
end
exec svkhoaN'Công nghệ thông tin'
viết hàm trả về tên môn được các khoa dạy trong 1 năm học
create function bangmon(@namhoc int)
returns table
as
return (select MonHoc.TenMH from MonHoc,GiangKhoa
where MonHoc.MaMH=GiangKhoa.MaMH and
GiangKhoa.NamHoc=@namhoc)
select*from bangmon(1980);
Trang 29viết con trỏ đếm số sinh viên dân tộc kinh
declare con_tro_sinh_vien cursor
set @SoSV=@SoSV + 1
FetchNextfrom con_tro_sinh_vien
End
printN'Số sinh viên: '+cast(@SoSV as char(4));
Close con_tro_sinh_vien;
DeAllocate con_tro_sinh_vien;
Trang 30tạo khung nhìn MaSV,HoTen,TenLop,TenKhoa
create view viewSV(MaSV,HoTen,TenLop,TenKhoa)
as
select SinhVien.MaSV,SinhVien.HoTen,Lop.TenLop,Khoa.TenKhoa
from SinhVien,Lop,Khoa
where SinhVien.MaLop=Lop.MaLop and Khoa.MaKhoa=Lop.MaKhoa
select*from viewSV
trigg insert bảng KetQua
Trang 31CreateTrigger Trig_SV on KetQua for insert
update MonHoc set SoTinChi=2 where TenMH=N'Toán rời rạc'
if(notexists(select *from MonHoc where TenMH=N'Toán rời rạc'))
rollbacktran MH
elsecommit tran MH
printN'chuyển thành công'
select*from MonHoc
phân quyền tạo login và user nqchau và anh
sp_addlogin 'nqchau','123456'
Trang 32grant selecton KetQua TO sinhvien
Thêm user 'nqchau' vào role 'giangvien',Thêm user 'anh' vào role
'sinhvien'
sp_addrolemember 'giangvien','nqchau'
sp_addrolemember 'sinhvien', 'anh'
VŨ THỊ MƠ
/* Câu 1: viết thủ tục sp_update_sv có tham số dùng để cập nhật dữ
liệu mới cho 1 sinh viên khi biết MaSV trong bảng SinhVien*/
create procedure cau1
update SinhVien set MaSV=@MaSV ,
HoTen=@HoTen,NgaySinh=@NgaySinh,GioiTinh=@GioiTinh,QueQuan=@QueQuan,DanToc=@DanToc,
Email=@Email ,SDT=@SDT
where MaSV=@MaSV
end
Trang 33exec cau1 'SV01','L001',N'Hoàng Ngọc Lan','11/07/2001',N'nữ',N'Hà
Nội',N'Kinh','lanhoaiquy@gmail.com',0399612138;
select*from SinhVien;
Câu 2 Viết 1 function Với 1 mã sinh viên và 1 mã khoa ,kiểm tra xem sinh viên có
thuộc khoa này không(trả về đúng hoặc sai)
create function kt_check_SV_IN_Khoa
declare @ketqua varchar(5);
if(exists(select*from SinhVien
Trang 34leftjoin Lop ON Lop.MaLop=SinhVien.MaLop
leftjoin Khoa on Lop.MaKhoa = Khoa.MaKhoa
where SinhVien.MaSV=@masv
and Khoa.MaKhoa = @makhoa
) )
set @ketqua='true'
Câu 3:viết 1 trigger để ko cho phép cập nhật giá trị của cột MaSV
create trigger trig_cau3 on SinhVien for update
Trang 35select*from SinhVien
update SinhVien
set QueQuan =N'Hà Nội'
where GioiTinh=N'Nam';
câu 4:tạo view kết quả thi lấy dữ liệu về MaSV ,HoTen,MaMon,Diem,
left join KetQua on SinhVien.MaSV = KetQua.MaSV
left join MonHoc on KetQua.MaMH = MonHoc.MaMH
select *from KQThi
Trang 36câu 5 sử dụng cursor để hiển thị danh sách MaSV,HoTen,GioiTinh
declare con_tro_SV cursor
print @MaSV +' '+ @HoTen +' ' + @GioiTinh
FETCH NEXTfrom con_tro_SV into @MaSV,@HoTen, @GioiTinh end
Trang 37close con_tro_SV ;
DeAllocate con_tro_SV;
câu 6: viết 1 giao dịch thực hiện chuyển số tín chỉ của môn Hệ quản trị csdl
từ 3 thành 4 tín
BeginTran monhoc
Update MonHoc set SoTinChi=4 where TenMH =N'Hệ quản trị csdl'
IF(notexists (select*from MonHoc where TenMH =N'Hệ quản trị csdl')) Begin
printN' Hủy thực hiện chuyển'
ROLLBACK TRAN monhoc
End
ELSE
Begin
printN'thực hiện chuyển'
commit tran monhoc
End
Trang 38select*from MonHoc
câu 7:Phân quyền
Tạo login giaovien,có pass là :1234
sp_addlogin 'giaovien', '1234'
tạo user 'VuMo'
sp_grantdbaccess 'giaovien','VuMo'
với tư cách là admin tạo 1 role 'gvien',cấp quyền select,insert,delete,update trên bảng KetQua
cho role đó
sp_addrole 'gvien'
GRANTselect,insert,delete,update ON KetQua to gvien
thêm user 'VuMo' vào role 'gvien'
Trang 39sp_addrolemember 'gvien', 'VuMo'
HOÀNG NGỌC LAN
I,HÀM
a, Viết 1 hàm để trả về số sinh viên thi lại 1 môn học nào đó (tham số vào là mã môn)
gọi hàm để hiển thị số sv thi lại môn hệ quản trị csdl
Create function Func_cau1 ( @MaMon char ( 5 ))
Returns int
as begin
declare @SV_thilai int
Select @SV_thilai = ( Select COUNT ( MaSV ) from KetQua , MonHoc where MonHoc MaMh = @mamon AND KetQua MaMH = MonHoc MaMH and
DiemThi < 4 )
return @SV_thilai ;
end
Gọi hàm đó để hiển thị số SV thi lại môn hệ quản trị csdl
Select dbo Func_cau1 ( 'MH01' )
Trang 40b Viết câu lệnh SELECT gọi hàm trên để hiển thị danh sách các môn học có số SV thi lại nhiều nhất
Select MaMH , TenMH
from MonHoc
Where dbo Func_cau1 ( MaMH )=( Select Max ( dbo Func_cau1 ( MaMH )) from MonHoc )
select * from KetQua
select * from sinhvien
II,Thủ tục
a,viết thủ tục sp_update_sv có tham số dùng để cập nhật dữ liệu mới cho 1 sinh viên khi biết MaSV trong bảng SinhVien
create proc sp_update_sv
@masv varchar ( 25 ), @malop varchar ( 30 ), @hoten nvarchar ( 100 ),
@ngaysinh date , @gioitinh nvarchar ( 10 ), @quequan
nvarchar ( 50 ), @dantoc nvarchar ( 30 ), @email nvarchar ( 50 ), @SDT float
as begin
update SinhVien set malop = @malop , HoTen = @hoten , NgaySinh =
@ngaysinh , GioiTinh = @gioitinh , QueQuan = @quequan ,
dantoc = @dantoc , Email = @email , SDT = @sdt where MaSV = @masv