Professional Documents
Culture Documents
Đề tài
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
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ệt
Nam 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 đẩy
mạnh công cuộc công nghiệp hoá hiện đại hoá đất nước, tiến đến nền kinh tế tri
thứ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ều
nă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ếp
cậ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 con
ngườ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ỏ 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 nhanh
chó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 nhanh
chó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ìm
hiểu khai thác ngôn ngữ mới, vừa thực hiện chương trình quả là khó khăn đối
vớ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ác
khả 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ếu
sót .Vậy nên e kình mong được cô góp ý , bổ sung để nhóm em hoàn thiện cho
bài tập tốt hơn .
1
LỜI CẢM ƠN
Thời giạn một học kỳ trôi qua chỉ trong nháy mắt, em học hỏi được nhiều
kiến thức chuyên ngành mới, được tiếp xúc với nhiều loại kiến thức trong thực
tế, cũng hiểu được các nguyên tắc trong quá trình làm việc học tập và nghiên
cứu. Em xin cảm ơn cô Nguyễn Ngọc Quỳnh Châu đã đào tạo và giảng dạy cẩn
trọng em trong thời gian vừa qua, thái độ làm việc nghiêm túc, tinh thần học tập
và 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. Trong
quá 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ình
nghiê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ến
thứ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. Trong
mỗ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ảm
cao 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òn
giú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âu
chọ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ô!
2
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à ghi
nhậ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 1
sinh viên làm bài cho 1 môn học nào đó theo điểm hệ 10
3
5.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)
- NienKhoa (MaNK,NamBD,NamKT)
- SinhVien
(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)
- MonHoc (MaMH,TenMH,SoTinChi)
- Lop(MaLop,TenLop)
TenKhoa
MaKhoa
NamTha
nhLap
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
⇨ Thực thể :NienKhoa (MaNK,NamBD,NamKT)
4
NamBD
MaNK MaNK NamKT
MaNK MaNK
NienKhoa
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
GioiTinh QueQuan
DanToc
NgaySinh
Email
HoTen
SDT
MaSV
SinhVien
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)
TenMH
MaMH SoTinChi
MonHoc
DiemThi
NamHoc
HocKi
m n
Khoa GiangKhoa MonHoc
5.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
⇨ Thực Thể :Lop(MaLop,TenLop)
MaLop TenLop
6
Lop
Lop
Khoa BaoGom
1 n
Co
n SinhVien
Lop
1
7
Bướ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)
8
Quan hệ SinhVien:
(MaSV,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,SDT)
Quan hệ MonHoc:(MaMH,TenMH,SoTinChi)
MaMH TenMH SoTinChi
Bước 2: Thực thể yếu à bảng (Khóa của chủ sẽ thành khóa ngoại)
Không có thực thể yếu
Bước 3: Liên kết 1-1: khoá của 1 bên sang làm khoá ngoại ở bên kia.
Không Có liên kết 1-1
Bước 4: Liên kết 1-N -> Khóa của bảng bên 1 trở thành khóa ngoại của bên
nhiều
Quan hệ
SinhVien(MaSV,MaLop,HoTen,NgaySinh,GioiTinh,QueQuan,DanToc,Email,
SDT)
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
9
Quan 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
-Không có liên kết bậc >2
Bước 8: Xử lý quan hệ cha con, chuyên biệt và tổng quát hóa
Không có
Khoa
MaKhoa TenKhoa NamThanhLap
NienKhoa
MaNK NamBD NamKT
SinhVien
MaSV MaLop HoTe NgaySinh danToc GioiTin QueQua DanToc Emai SDT
n h n l
MonHoc
MaMH TenMH SoTinChi
Lop
MaLop MaKhoa MaNK maKhoaHoc
KetQua
MaSV MaMH DiemThi
10
GiangKhoa
MaKhoa MaMH NamHoc HocKy
11
(Name = QLSV1_Log,
filename='D:\HQTCSDL\Anh\QLSV1_log.ldf',
size = 5MB,
Maxsize = 20MB,
filegrowth = 1MB
);
-- tạo bảng khoa
12
MaLop varchar(30),
HoTen nvarchar(100),
NgaySinh date,
GioiTinh nvarchar(10),
QueQuan nvarchar(50),
DanToc nvarchar(30),
Email nvarchar(20),
SDT float )
--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ữ’:
ALTER TABLE 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
ALTER TABLE Lop
ADD CONSTRAINT fk_Makhoa1
FOREIGN KEY (MaKhoa)
REFERENCES Khoa(MaKhoa);
--Thiết lập khóa phụ cho MaNK tham chiếu đến MaNKcủa bảng NienKhoa
ALTER TABLE Lop
ADD CONSTRAINT fk_MaNK
FOREIGN KEY (MaNK)
REFERENCES NienKhoa(MaNK);
14
--Thiết lập khóa phụ cho MaLop tham chiếu đến MaLopcủa bảng Lop
ALTER TABLE SinhVien
ADD CONSTRAINT fk_MaLop
FOREIGN KEY (MaLop)
REFERENCES Lop(MaLop);
--Thiết lập khóa phụ cho MaSV tham chiếu đến MaSV của bảng SinhVien
ALTER TABLE KetQua
ADD CONSTRAINT fk_MaSV
FOREIGN KEY (MaSV)
REFERENCES SinhVien(MaSV);
--Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHoc
ALTER TABLE KetQua
ADD CONSTRAINT fk_MaMH1
FOREIGN KEY (MaMH)
REFERENCES MonHoc(MaMH);
--Thiết lập khóa phụ cho MaKhoa tham chiếu đến MaKhoa của bảng Khoa
ALTER TABLE GiangKhoa
ADD CONSTRAINT fk_MaKhoa2
FOREIGN KEY (MaKhoa)
REFERENCES Khoa(MaKhoa);
--Thiết lập khóa phụ cho MaMH tham chiếu đến MaMH của bảng MonHoc
ALTER TABLE GiangKhoa
ADD CONSTRAINT fk_MaMH2
FOREIGN KEY (MaMH)
REFERENCES MonHoc(MaMH);
15
B:THÊM DỮ LIỆU CHO BẢNG
('NK01',1980,1984),
('NK02',1984,1988),
('NK04',1988,1992),
('NK05',1996,2000)
16
('L002','MK01','NK01','80CNTT2'),
('L003','MK02','NK02','84KTQT1'),
('L004','MK02','NK02','84KTQT2'),
('L005','MK02','NK02','84KTQT3'),
('L006','MK03','NK04','88CTQT1'),
('L007','MK03','NK04','88CTQT2'),
('L008','MK03','NK04','88CTQT3'),
('L009','MK04','NK05','96KTN1'),
('L0010','MK04','NK05','96KTN2'),
('L0011','MK04','NK05','96KTN3'),
('L0012','MK05','NK01','80CK1'),
('L0013','MK05','NK01','80CK2'),
('L0014','MK06','NK02','84KĐ1'),
('L0015','MK06','NK02','84KĐ2'),
('L0016','MK07','NK04','88HMT1'),
('L0017','MK07','NK04','88HMT2'),
('L0018','MK08','NK05','96NN1'),
('L0019','MK08','NK05','96NN2'),
('L0020','MK09','NK05','96KL1'),
('L0021','MK09','NK05','96KL2'),
('L0022','MK10','NK05','96TMĐT1'),
('L0023','MK10','NK05','96TMĐT2'),
('L0024','MK10','NK02','96TMĐT3')
17
('SV01','L001',N'Hoàng Ngọc Lan','11/07/2001',N'nữ',N'Đắk
Lắk',N'Kinh','lanhoaiquy@gmail.com',0399612138),
('SV02','L001',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyen@gmail.com',0999612138),
('SV03','L001',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvan@gmail.com',0989612138),
('SV04','L002',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choang@gmail.com',0979612138),
('SV05','L002',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthia@gmail.com',0588612138),
('SV06','L003',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','hoangb@gmail.com',0979612138),
('SV07','L003',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimoc@gmail.com',0568612138),
('SV08','L003',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Chongd@gmail.com',0979612138),
('SV09','L004',N'Nguyễn Thị
Anh','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhs@gmail.com',0582612138),
('SV10','L004',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdaue@gmail.com',0588612138),
('SV11','L004',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangr@gmail.com',0979612138),
('SV12','L005',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyeng@gmail.com',0999612138),
('SV13','L005',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvanh@gmail.com',0989612138),
('SV14','L006',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangj@gmail.com',0979612138),
('SV15','L006',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthio@gmail.com',0588612138),
('SV16','L007',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangv@gmail.com',0979612138),
('SV17','L007',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimox@gmail.com',0568612138),
18
('SV18','L008',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangy@gmail.com',0979612138),
('SV19','L008',N'Nguyễn Thị
An','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhz@gmail.com',0582612138),
('SV20','L009',N'Nguyễn Thị Hảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauw@gmail.com',0588612138),
('SV21','L0010',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangt@gmail.com',0979612138),
('SV22','L0011',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyenp@gmail.com',0999612138),
('SV23','L0012',N'Nguyễn Văn Báu','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvani@gmail.com',0989612138),
('SV24','L0013',N'Hoàng Văn Chuyền','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangk@gmail.com',0979612138),
('SV25','L0014',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bthil@gmail.com',0588612138),
('SV26','L0015',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangm@gmail.com',0979612138),
('SV27','L0016',N'Nguyễn Thị Bích','04/02/2001',N'nữ',N'Hà
Nam',N'kinh','Bthimok@gmail.com',0568612138),
('SV28','L0017',N'Hoàng Văn Chí','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangi@gmail.com',0979612138),
('SV29','L0018',N'Nguyễn Thị
Anh','11/02/2001',N'nữ',N'TPCHM',N'kinh','Banhtt@gmail.com',0582612138),
('SV30','L0019',N'Nguyễn Thị Bảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauaa@gmail.com',0588612138),
('SV31','L0020',N'Nguyễn Thị Hảo','11/02/2001',N'nữ',N'Hải
Phòng',N'kinh','Bdauu@gmail.com',0588612138),
('SV32','L0021',N'Lê Văn Diệu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangyy@gmail.com',0979612138),
('SV33','L0022',N'Nguyễn Văn An','10/05/2000',N'nam',N'Hà Nội',N'Ê
Đê','Anguyenxx@gmail.com',0999612138),
('SV34','L0023',N'Nguyễn Văn Bích','11/02/2001',N'nam',N'Hải
Phòng',N'kinh','Bvanjj@gmail.com',0989612138),
19
('SV35','L0024',N'Hoàng Văn Châu','09/01/2001',N'nam',N'Nam
Định',N'Kinh','Choangio@gmail.com',0979612138)
20
('SV01','MH03',7.8),
('SV02','MH01',9.5),
('SV02','MH04',7.5),
('SV03','MH01',9),
('SV03','MH06',8),
('SV04','MH02',5),
('SV04','MH04',6),
('SV05','MH02',6),
('SV05','MH04',9),
('SV06','MH01',7),
('SV06','MH02',5.5),
('SV07','MH03',5),
('SV07','MH04',9),
('SV08','MH03',8),
('SV08','MH01',9.5),
('SV09','MH04',8.5),
('SV09','MH01',9),
('SV10','MH04',6.5),
('SV10','MH03',9.5),
('SV11','MH05',7.5),
('SV11','MH07',6),
('SV12','MH05',6),
('SV12','MH02',8.5),
('SV13','MH05',7),
('SV13','MH01',9.5),
('SV14','MH01',9.5),
('SV14','MH06',7.5),
('SV15','MH06',9),
21
('SV15','MH02',9.5),
('SV16','MH06',5),
('SV16','MH01',9.5),
('SV17','MH07',6),
('SV17','MH04',9.5),
('SV18','MH07',5.5),
('SV18','MH01',4.5),
('SV19','MH08',5),
('SV19','MH01',3.5),
('SV20','MH08',8),
('SV20','MH05',9.5),
('SV21','MH08',8.5),
('SV21','MH07',9.5),
('SV22','MH09',6.5),
('SV22','MH07',2.5),
('SV23','MH01',5.5),
('SV23','MH09',6),
('SV24','MH03',3.5),
('SV24','MH09',6),
('SV25','MH06',6),
('SV25','MH01',7),
('SV25','MH05',7),
('SV26','MH02',7.5),
('SV26','MH01',7),
('SV27','MH03',9),
('SV27','MH01',7),
('SV28','MH04',5),
('SV28','MH01',7),
22
('SV29','MH02',6),
('SV29','MH07',7),
('SV30','MH02',5.5),
('SV30','MH01',7),
('SV31','MH03',5),
('SV31','MH04',7),
('SV32','MH01',7),
('SV32','MH03',8),
('SV33','MH01',3),
('SV33','MH04',8.5),
('SV34','MH01',7),
('SV34','MH04',6.5),
('SV34','MH05',7),
('SV35','MH01',7),
('SV35','MH04',7),
('SV35','MH05',6)
select *from Ketqua
('MK01','MH01',1980,1),
('MK01','MH02',1980,2),
('MK01','MH05',1981,1),
('MK01','MH06',1981,2),
('MK02','MH02',1980,1),
('MK02','MH03',1980,2),
23
('MK02','MH06',1981,1),
('MK03','MH03',1984,1),
('MK03','MH01',1984,2),
('MK04','MH01',1988,1),
('MK04','MH04',1988,2),
('MK04','MH06',1988,2),
('MK05','MH04',1988,1),
('MK05','MH05',1988,1),
('MK05','MH08',1988,2),
('MK06','MH01',1996,1),
('MK06','MH06',1996,2),
('MK06','MH09',1996,2),
('MK07','MH01',1996,1),
('MK07','MH07',1996,2),
('MK07','MH10',1996,2),
('MK08','MH05',1988,1),
('MK08','MH08',1988,2),
('MK09','MH09',1988,1),
('MK09','MH10',1988,2),
('MK10','MH01',1996,1),
('MK10','MH07',1996,1),
('MK10','MH10',1996,2)
LÊ HỒNG ÁNH
24
select *from GiangKhoa
-- Viết thử tục lưu trữ sinh viên của 1 khoa
Create proc 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
-- 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);
25
-- viết con trỏ đếm số sinh viên dân tộc kinh
declare con_tro_sinh_vien cursor
Dynamic Scroll
for
select count(*) from SinhVien where DanToc=N'Kinh'
Open con_tro_sinh_vien;
Close con_tro_sinh_vien;
DeAllocate con_tro_sinh_vien;
26
-- tạ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
27
Create Trigger Trig_SV on KetQua for insert
as
if (( select DiemThi from inserted) is not null)
Begin
print 'bạn đã thêm thành công'
end
Insert into KetQua values
('SV01','MH10',10)
--tạo giao dịch chuyển số tín chỉ của môn 'Toán rời rạc' từ 4 thành 2
begin tran MH
update MonHoc set SoTinChi=2 where TenMH=N'Toán rời rạc'
if(not exists(select * from MonHoc where TenMH=N'Toán rời rạc'))
rollback tran MH
else commit tran MH
print N'chuyển thành công'
select* from MonHoc
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
@MaSV char(10),
@MaLop varchar(30),
@HoTen nvarchar(100),@NgaySinh date,@GioiTinh nvarchar(10),@QueQuan
nvarchar(50),
@DanToc nvarchar(30),@Email nvarchar(20),@SDT float
as begin
update SinhVien set MaSV=@MaSV ,
HoTen=@HoTen,NgaySinh=@NgaySinh,GioiTinh=@GioiTinh,QueQuan=@Q
ueQuan,DanToc=@DanToc,
Email=@Email ,SDT=@SDT
where MaSV=@MaSV
end
29
exec 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
(
@masv varchar(10),
@makhoa varchar(10)
)
returns varchar(5)
as
begin
declare @ketqua varchar(5);
30
left join Lop ON Lop.MaLop=SinhVien.MaLop
left join Khoa on Lop.MaKhoa = Khoa.MaKhoa
where SinhVien.MaSV=@masv
and Khoa.MaKhoa = @makhoa
)
)
set @ketqua='true'
else
set @ketqua='false'
return @ketqua
end
select dbo.kt_check_SV_IN_Khoa('SV06',N'Công Nghệ Thông Tin')
--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
as begin
if(update(MaSV))
begin
print N'Bạn không đc phép cập nhật cột masv'
rollback tran;
end
else
print N'bạn đã cập nhật thành công';
31
end
select*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,
--từ 3 bảng SinhVien,MonHoc,KetQua
create view KQThi
as
select SinhVien.MaSV,HoTen,MonHoc.MaMH,TenMH,SoTinChi,DiemThi
from SinhVien
left join KetQua on SinhVien.MaSV = KetQua.MaSV
left join MonHoc on KetQua.MaMH = MonHoc.MaMH
32
--câu 5 sử dụng cursor để hiển thị danh sách MaSV,HoTen,GioiTinh
declare con_tro_SV cursor
DYNAMIC SCROLL
for
select MaSV,HoTen,GioiTinh from SinhVien
open con_tro_SV;
33
close 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
Begin Tran monhoc
Update MonHoc set SoTinChi=4 where TenMH =N'Hệ quản trị csdl'
IF(not exists (select * from MonHoc where TenMH =N'Hệ quản trị csdl'))
Begin
print N' Hủy thực hiện chuyển'
ROLLBACK TRAN monhoc
End
ELSE
Begin
print N'thực hiện chuyển'
commit tran monhoc
End
34
select * from MonHoc
--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')
36
--b 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
37
end
exec sp_update_sv 'SV03','L002', N'Hoàng Chí Nguyên',
'11/11/2001', N'Nam', N'Ninh Binh','kinh',
N'nguyen@gmail.com',0344445555
--b,Viết 1 thủ tục cho biết danh sách sv thi lại 1 môn học nào
đó
Create proc cau2
@MaMonHoc char(10)
as
begin
declare @MaSV char(10), @Hoten nvarchar(50)
Select @MaSV=SinhVien.MaSV, @Hoten=Hoten from SinhVien, KetQua,
MonHoc Where SinhVien.MaSV = KetQua.MaSV and MonHoc.MaMH =
KetQua.MaMH and MonHoc.MaMh = @MaMonHoc and DiemThi<5
print N'Sinh viên '+@MaSV + N'tên '+ @Hoten
end
-- in ra kết quả
exec cau2 'MH03'
--III,TRIGGER
38
-- Tạo Trigger để đảm bảo rằng khi sửa một sinh viên trong
bảng SinhVien
--thì sinh viên sau khi sửa phải khác tên sinh viên trước khi
sửa và tên sinh viên
-- sau khi sửa không trùng với tên sinh viên đã có trong bảng.
Nếu vi phạm
--thì thông báo lỗi.*/
Create trigger Trig_cau1 on SinhVien for update
as
if(((select HoTen from inserted) != (select HoTen from
deleted))
and (select count(*) from SinhVien where Hoten = (select HoTen
from inserted))<=1)
print N'Sửa thành công';
else begin
print N'Sửa không thành công, nhập tên khác';
rollback tran;
end
update SinhVien set HoTen= N'Nguyễn Thị Nụ' where HoTen=N'Hoàng
Ngọc Lan'
--IV,VIEW
--a,sử dụng khung nhìn KetQuaThi để hiển thị thông tin điểm
--thi môn Hệ Quản trị CSDL bao gồm MaSV, HoTen, Diem
Create view KetQuaThi
as
39
select SinhVien.MaSV,HoTen,MonHoc.MaMH,TenMH,KetQua.DiemThi
from SinhVien
left join KetQua on SinhVien.MaSV=KetQua.MaSV
left join MonHoc on KetQua.MaMH=MonHoc.MaMH
-- hiển thị thông tin với truy vấn trong bảng
Select SinhVien.MaSV,HoTen,DiemThi
from SinhVien,KetQua,MonHoc
where SinhVien.MaSV=KetQua.MaSV
and KetQua.MaMH=MonHoc.MaMH
and MonHoc.TenMH=N'Hệ quản trị csdl'
--V,CON TRỎ
--a,sd con trỏ để in ra điểm trung bình của những sinh viên
Nguyễn THị A theo định dạng
--sinh viên Nguyễn THị A mã số SV...có DTB....
40
declare con_tro_sinh_vien cursor
Dynamic Scroll
for
Select SinhVien.MaSV, AVG(DiemThi) from SinhVien, KetQua where
SinhVien.MaSV = KetQua.MaSV and HoTen = N'Nguyễn Thị Hảo' group
by SinhVien.MaSV
--mở con trỏ
Open con_tro_sinh_vien
41
--Tạo Role giảng viên cấp quyền cho giảng viên thêm,sửa,xóa
bảng điểm
sp_addrole GiangVien;
grant INSERT,DELETE,UPDATE on KetQua for GiangVien;
--Xếp user GiangVien vào role tương ứng
sp_addrolemember 'GiangVien','Minh';
--xóa role
sp_droprole GiangVien;
--VII, TRANSACTION
--viết 1 giao dịch tường minh để chuyển 'SV04' sang lớp 'L003'
42