Thứ Tư, 19 tháng 10, 2016

Bài tập lớn CSDL- Quản lý điểm sinh viên








Hiện nay, công nghệ thông tin được xem là một ngành mũi nhọn của các quốc gia, đặc biệt là các quốc gia đang phát triển, tiến hành công nghiệp hóa và hiện đại hoá như nước ta. Sự bùng nổ thông tin và sự phát triển mạnh mẽ của công nghệ kỹ thuật số, yêu cầu muốn phát triển thì phải tin học hoá tất cả các ngành, các lĩnh vực.
Cùng với sự phát triển nhanh chóng về phần cứng máy tính, các phần mềm ngày càng trở nên đa dạng, phong phú, hoàn thiện hơn và hỗ trợ hiệu quả cho con người. Các phần mềm hiện nay ngày càng mô phỏng được rất nhiều nghiệp vụ khó khăn, hỗ trợ cho người dùng thuận tiện sử dụng, thời gian xử lý nhanh chóng, và một số nghiệp vụ được tự động hoá cao.
Ví dụ như việc quản lý điểm số học sinh trong trường trung đại học. Nếu không có sự hỗ trợ của tin học, việc quản lý này phải cần khá nhiều người, chia thành nhiều khâu, mới có thể quản lý được toàn bộ hồ sơ học sinh (thông tin, điểm số, học bạ,…), lớp học (sỉ số, giáo viên chủ nhiệm,…), giáo viên,… cũng như các nghiệp vụ tính điểm trung bình, xếp loại học lực cho học sinh toàn trường (số lượng học sinh có thể lên đến hàng ngàn). Các công việc này đòi hỏi nhiều thời gian và công sức, mà sự chính xác và hiệu quả không cao, vì đa số đều làm bằng thủ công rất ít tự động. Một số nghiệp vụ như tra cứu, thống kê, và hiệu chỉnh thông tin khá vất vả. Ngoài ra còn có một số khó khăn về vấn đề lưu trữ khá đồ sộ, dễ bị thất lạc, tốn kém,… Trong khi đó, các nghiệp vụ này hoàn toàn có thể tin học hoá một cách dễ dàng. Với sự giúp đỡ của tin học, việc quản lý học vụ sẽ trở nên đơn giản, thuận tiện, nhanh chóng và hiệu quả hơn rất nhiều.





1.1           LỜI GIỚI THIỆU


Trong những năm gần đây sự phát triển của ngành IT đã đem lại những thành tựu to lớn trong việc phát triển kinh tế.  Những chương trình tin học ứng dụng ngày càng nhiều, rất nhiều công việc thủ công trước đây nay đã được sử ly bằng các phần mềm chuyên dụng đã giảm đáng kể công sức, nhanh chóng và chính xác.  Để có một phần mềm ứng dụng đáp ứng được yêu cầu công việc đặt ra thì những người làm tin học phải biết phân tích thiết kế hệ thống làm việc của của chương trình để từ đó xây dựng nên một phần mền ứng dụng quản lý chương trình đó bằng ngôn ngữ lập trình nào đó những chương trình, phần mềm ứng dụng đóng vai trò quan trọng trong lĩnh vực quản lý, nó là những công cụ hỗ trợ đắc lực và hầu như không thể thiếu nhằm đáp ứng đầy đủ nhất thuận lợi nhất những đòi hỏi của công việc quản lý nhờ những công cụ trợ giúp có sẵn, access hay SQL sever la những phần mềm như vậy nó được ứng dụng rộng rãi trong công tác quản lý không những thế nó con là một ngôn ngữ lập trình khá mạnh giúp cán bộ quản lý có thể viết những chương trình để sử sụng cơ sơ dữ liệu hay giải quyết một yêu cầu nào đó, những phần mền ứng dụng này đã phần nào trợ giúp các nhà quản lý trở lên nhanh chóng, thuận lợi, chính xác và kịp thời với những tính năng có sẵn sát với thực tế quản lý .
Chương trình quản lý điểm sinh viên là một chương trình được xây dựng nhằm đáp ứng những đòi hỏi đặt ra của quá trình quản lý như  nhập thong tin sinh viên, tìm kiếm, thống kê, in báo cáo và rất nhiều công việc khác một cách nhanh chóng và thuận tiện, chính xác một cách hệ thống. Trong chương trình phần mền ứng dụng này thì chương trình nghiên cứu phân tích thiết kế hệ thống đóng vai trò rất quan trọng trong việc thiết kế chương trình phần mền, nhìn vào bản phân tích ta có thể hiểu được người lập trình muốn làm gì, hiểu được sự hoạt động của hệ thống.
Trong thời gian học tập, nghiên cứu tại trường, bằng kiến thức đồng thời được sự giúp đỡ nhiệt tình thầy cô giáo trong khoa CNTT đặc biệt là Cô giáo  đã giúp đỡ nhóm sinh viên chúng em hoàn thành tốt bài tập môn học, bài tập xây dựng một chương trình phần mền ứng dụng “quản lý kết điểm sinh viên khoa CNTT”. Nhưng do trình độ kiến thức và kinh nghiệm còn non kém tài liệu tham khảo còn thiếu thốn cho nên trong bài còn có nhiều hạn chế, chúng em mong thầy cô giáo cùng các bạn đóng góp ý kiến. Chúng em xin chân thành cảm ơn!

1.2           PHÂN TÍCH HỆ THỐNG QUẢN LÝ KẾT QUẢ HỌC TẬP SINH VIÊN

1.2.1           Thực trạng của hệ thống quản lý điểm (qld)

Điểm thi được quản lý dựa trên phương pháp thủ công.
      + Điểm thi của từng sinh viên được ghi chép và lưu dữ bằng sổ sách.
      + Quản lý điểm, thông tin về sinh viên quản lý bằng việc ghi chép và   
     kiểm kê.
      + Quản lý nhập điểm, xuất điểm bằng cách ghi chép thủ công, sinh viên
    muốn xem điểm bằng việc đối chiếu thủ công
      + Chưa có cơ chế kiểm tra bạn đọc
Nhược điểm:
    + Tốn rất nhiều thời gian và công sức.
    + Dễ nhầm lẫn, sai sót .
    + Khó kiểm tra quản lý.
    + Hiệu quả năng suất thấp.
Do đó hệ thống quản lý kết quả thi cần phải sửa đổi lại cơ cấu quản lý hoạt động nhằm nâng cao hiệu quả để dễ quản lý đến từng học sinh.
Giải pháp:
  + Cần tổ chức lại cơ cấu quản lý, thay thế một số công đoạn thủ công bằng “tin học hoá hoá” nhờ có   sự trợ của các chương trình, phần mềm ứng dụng
  + Việc nhập điểm, tìm kiếm, sửa chữa, báo cáo, thống kê cần được xử lý nhờ máy tính
  + Đưa ra máy in khi có yêu cầu
Các dữ liệu đầu vào:
 Dữ liệu đầu vào là nguồn thông tin được đưa vào máy tính để xử lý, bao gồm các thông tin sau :
  + thông tin sinh viên, thông tin về điểm
  + Các yêu cầu tìm kiếm
Dữ liệu đầu ra:
 Dữ liệu đầu ra là các thông tin sau khi xử lý bao gồm các thông tin sau:
  + Bảng danh sách điểm
  + Bảng thống kê báo cáo.
Từ thực trạng trên, chúng ta có sơ đồ luân chuyển thông tin:


Sơ đồ luân chuyển thông tin của hệ thống quản lý học tập sinh viên



Sau khi lưu hồ sơ sinh viên với các môn học và có điểm các môn thi, phòng giáo vụ tiến hành vào điểm của từng môn học.
Sinh viên sẽ đương nhiên bị điểm 0 đối với mỗi môn thi nếu:
+ Không dự thi, xin hoãn thi. 
+ Không thuộc diện được học hai trường, được nghỉ học một số môn mà nghỉ quá 25% số giờ của học phần (dù có phép hay không có phép).
Điểm thi sẽ tính theo thang điểm 10. 
Điểm tổng kết sẽ được tính bằng điểm các môn nhân với số đơn vị học trình tương ứng và chia cho tổng số đơn vị học trình.
Sinh viên có thể dự thi các học phần tích để có điểm cao hơn vào những kỳ thi chính thức tiếp theo.  Sau khi học lại hay thi lại hoặc thi nâng điểm, điểm tổng kết mới sẽ được tính theo điểm cao nhất của từng môn.
Sinh viên phải học lại những môn có điểm thi lại < 5 và thi lại những môn có điểm thi lần đầu < 5 vào thời điểm sớm nhất của nhà trường.
Nếu phải học lại một học phần làm cơ sở cho các học phần tiếp theo sau, sinh viên không được học và dự thi các học phần tiếp sau nếu nhà trường không cho phép.   
Sau mỗi học kỳ các khoa sẽ tiến hành xét khen thưởng/ kỷ luật, xếp loại cho sinh viên. 
    - Xếp loại học tập:
9. 00 -> 10. 00 xếp loại Xuất sắc
8. 00 -> 8. 99 xếp loại Giỏi
7. 00 -> 7. 99 xếp loại Khá
6. 00 -> 6. 99 xếp loại Trung bình - Khá
5. 00 -> 5. 99 xếp loại Trung bình
   < 5  xếp loại Yếu
-                  Xét loại học bổng:
   + Loại 1: Đạt điểm trung bình từ 8. 00 trở lên và không có môn nào có điểm dưới 7.
   + Loại 2: Đạt điểm trung bình từ 7. 00 -> 7. 99 và không có môn nào có điểm dưới 6. 

1.2.2           Biểu đồ phân cấp chức năng:



§   Quản lý môn học
-     Có các chức năng thêm, sửa,xoá các môn học theo yêu cầu của nhà quản lý.
-     Cung cấp thông tin  về các môn  học trong mỗi kỳ học cho nhà quản lý, giáo viên và sinh viên khi có yêu cầu .
§     Quản lý sinh viên
-     Có các chức năng thêm, sửa, xoá thông tin sinh viên theo yêu cầu của nhà quản lý
-    Cung cấp thông tin về  sinh viên cho nhà quản lý,giáo viên và sinh viên khi có yêu cầu.
§     Quản lý điểm
-    Có chức năng cập nhật điểm cho sinh viên sau mỗi kỳ học.
-    Thực hiện phúc khảo điểm cho sinh viên khi sinh viên yêu cầu.
-    Báo cáo, thống kê  điểm của sinh viên cho nhà quản lý, giáo viên và sinh viên khi có yêu cầu.
§     Thống kê,báo cáo
-     Thống kê danh sách sinh viên đỗ lần 1, lần 2, tỷ lệ sinh viên đỗ lần 1, lần 2 theo từng lớp học, môn học sau mỗi kỳ học.
-     Thống kê danh sách sinh viên trượt lần 1, lần 2(học lại),tỷ lệ sinh viên trượt lần 1, lần 2 theo từng lớp học, môn học sau mỗi kỳ học.
-     Thống kê danh sách  sinh viên bị lưu ban, tỷ lệ sinh viên bị lưu ban sau mỗi năm học.
-     Thống kê danh sách sinh viên đạt học bổng, tỷ lệ sinh viên đạt học bổng sau mỗi kỳ học.
-     Trong quá trình thống kê sẽ sử dụng chức năng tính điểm của quản lý điểm.

1.2.3           Biểu đồ luồng dữ liệu:


1: Sơ đồ luồng dữ liệu mức khung cảnh

1.2.4           Phân loại các thuộc tính vào một tập thực thể

  Kiểu thực thể liên kết là nguồn thông tin cần thiết cho hệ thống ,các kiểu thực thể có thể xuất  hiện ở các tác nhân ngoài , các luồng thông tin nội bộ hoặc các kho dữ liệu
Kiểu thực thể Môn Học gồm MaMH, TenMH, So Trinh.
Kiểu Thực Thể Điểm: MaSV, MaMH, Hoc Ky,Diem lan 1, Diem lan 2, Hoc lai.
Kiểu thực thể HeDT: Ma HDT, Ten HDT.
Kiểu thực thể Lớp gồm Ma Lop, Ten Lop,Ma Khoa, Ma HDT, Ma Khoa Hoc.
Kiểu thực thể Sinh Viên gồm MaSV, TenSV, Ngày Sinh, giới tính, Que quan, ma lop.
Kiểu thực thể Học Kỳ: Ma HK, Ten HK.
Kiểu thực thể Khóa Học: Ma Khoa Hoc, Ten Khoa Hoc.
Kiểu thực thể Khoa gồm: Ma Khoa,Ten Khoa, Dia Chi, Dien Thoai.

1.2.5            Mô hình thực thể liên kết



1.2.6     Biểu đồ cấu trúc dữ liệu theo mô hình quan hệ :

·   Danh sách các thuộc tính: MaHDT, TenHDT, MaKhoa, TenKhoa, MaKhoaHoc, TenKhoaHoc, MaLop, TenLop, MaSV, TenSV, MaMH, TenMH, MaHocKy, TenHocKy, Diem.
·   Danh sách các thuộc tính lặp: MaSV, TenSV, Diem.
·   Danh sách các phụ thuộc hàm:
               MaSV → TenSV, MaLop.
               MaLop → TenLop, MaKhoa, MaKhoaHoc, MaHDT.
               MaSV, MaMH→ Diem.
               MaKhoa → TenKhoa.
               MaKhoaHoc → TenKhoaHoc.
               MaHDT → TenHDT.
               MaMH → TenMH.
             






DS các thuộc tính


Dạng 1NF

Dạng 2NF

Dạng 3NF

Tên bảng
MaLop
TenLop
MaHDT
TenHDT
MaKhoaHoc
TenKhoaHoc
MaKhoa
TenKhoa
MaMH
TenMH
* MaSV
* TenSV
*  Diem
MaLop
TenLop
MaHDT
TenHDT
MaKhoaHoc
TenKhoaHoc
MaKhoa
TenKhoa
MaMH
TenMH

MaLop
TenLop
MaHDT
TenHDT
MaKhoaHoc
TenKhoaHoc
MaKhoa
TenKhoa
MaMH
TenMH



MaLop
TenLop
MaHDT
MaKhoa
MaKhoaHoc


Lop


MaHDT
TenHDT
HeDT
MaKhoa
TenKhoa
Khoa
MaKhoaHoc
TenKhoaHoc
KhoaHoc
MaSV
TenSV
MaLop

SinhVien
MaMH
TenMH
     MonHoc
MaSV
TenSV
MaMH
DiemLan1
DiemLan2
MaSV
TenSV
MaSV
MaMH
DiemLan1
DiemLan2



Diem
MaSV
MaMH
DiemLan1
DiemLan2

 

Sử dụng thuật toán phân rã để chuẩn hóa thành dạng 3NF như sau:
Ta có lược đồ quan hệ R(ABCDEFGHIJKLM) có các phụ thuộc hàm là F(K→AL, A→BCEF, IK→M, G→H, E→F, C→D, I→J)
B1: Tìm phủ tối tiểu của F
F= { K→AL, A→BCEF, IK→M, G→H, E→F, C→D, I→J}
Đặt G=F, Tách các phụ thuộc hàm của G có vế phải chỉ chứa 1 thuộc tính.
G={ K→A, K→L, A→B, A→C, A→E, A→F, IK→M, G→H, E→F, C→D, I→J }
G là tối tiểu
B2: Tách thành các lược đồ con
F=G
Xét K→A, K→L có 2 phụ thuộc hàm vế trái bằng K ta có R1(KAL) loại K→A, K→L khỏi F
Xét  A→B, A→C, A→E, A→F có 2 phụ thuộc hàm vế trái bằng A ta có R2(ABCEF) loại A→B, A→C, A→E, A→F khỏi F
Xét IK→M có 1 phụ thuộc hàm vế trái bằng IK ta có R3(IKM) loại IK→M khỏi F
Tương tự xét đến khi F=Æ dừng thuật toán
Kết luận: Lược đồ R(ABCDEFGHIJKLM) được tách thành 7 lược đồ con chuẩn 3NF như sau:
R1(KAL) khóa K
R2(ABCEF) khóa A
R3(IKM) khóa IK
R4( GH) khóa G
R5(EF) khóa E
R6(CD) khóa C
R7(IJ) khóa I

 


2.1.              Thiết kế cơ sở dữ liệu:

 

   


2.2.              Từ điển dữ liệu


          Thuộc tính                                         
Tên bảng
Tên cột
Kiểu dữ liệu
Độ rộng
Miêu tả

MONHOC
(Môn học)
MaMH
char
5
Mã môn học
TenMH
nvarchar
30
Tên môn học
SoTrinh
int

Số trình


DIEM
(Điểm)
MaSV
Char
15
Mã sinh viên
MaMH
char
5
Mã môn học
HocKy
      Int

Học kỳ
DiemLan1
      Int

Điểm tk lần 1
DiemLan2
     Int

Điểm tk lần 2

HEDT
(Hệ đào tạo)
MaHeDT
Char
5
Mã hệ đào tạo
TenHeDT
nvarchar
30
Tên hệ đào tạo


LOP
(Lớp)
MaLop
char
5
Mã lớp
TenLop
nvarchar
50
Tên lớp
MaKhoa
char
5
Mã khoa
MaHDT
char
5
MaHDT
MaKhoaHoc
char
5
Mã khóa học


SINHVIEN
    (Sinh viên)

MaSV
char
15
Mã sinh viên
TenSV
nvarchar
30
Tên sinh viên
GioiTinh
Bit

Giới tính
NgaySinh
Datetime

Ngày sinh
MaLop
char
5
Mã lớp
Que Quan
nvarchar
100
Que Quan
KHOAHOC
MaKhoaHoc
Char
5
Mã khóa học
TenKhoaHoc
nvarchar
30
Tên khóa học


        Khoa
MaKhoa
Char
5
Mã khoa
TenKhoa
nvarchar
50
Tên khoa
DiaChi
Nvarchar
100
Địa chỉ
DienThoai
varchar
15
Điện thoại


 

2.3.              Một số truy vấn SQL

 


Create Database BTLSQL
go
Use QLDiemSV
go
-- Tao Bang Mon Hoc --
Create Table MonHoc
 (
   MaMH char(5) primary key,
   TenMH nvarchar(30) not null,
   SoTrinh int not null check ( (SoTrinh>0)and (SoTrinh<7) )
 )
--- Tao Bang He Dao Tao ---
Create Table HeDT
 (
   MaHeDT char(5) primary key,
   TenHeDT nvarchar(40) not null
 )

--- Tao Bang Khoa Hoc ---
Create Table KhoaHoc
 (
   MaKhoaHoc char(5) primary key,
   TenKhoaHoc nvarchar(20) not null
 )
--- Tao Bang Khoa --
Create Table Khoa
 (
   MaKhoa char(5) primary key,
   TenKhoa nvarchar(30) not null,
   DiaChi nvarchar(100) not null,
   DienThoai varchar(20) not null
 )
-- Tao Bang Lop ---
Create Table Lop
 (
   MaLop char(5) primary key,
   TenLop nvarchar(30) not null,
   MaKhoa char(5) foreign key references Khoa (MaKhoa),
   MaHeDT char(5) foreign key references HeDT (MaHeDT),
   MaKhoaHoc char(5) foreign key references KhoaHoc (MaKhoaHoc),
 )
--- Tao Bang Sinh Vien ---
Create Table SinhVien
 (
   MaSV char(15) primary key,
   TenSV nvarchar(20) ,
   GioiTinh bit ,
   NgaySinh datetime ,
   QueQuan nvarchar(50) ,
   MaLop char(5) foreign key references Lop(MaLop)
 )
--- Tao Bang Diem ---
Create Table Diem
 (
   MaSV char(15) foreign key references SinhVien(MaSV),
   MaMH char(5) foreign key references MonHoc (MaMH),
   HocKy int check(HocKy>0) not null,
   DiemLan1 int ,
   DiemLan2 int
)

---Nhap Du Lieu Cho Bang He Dao Tao --
insert into HeDT values('A01',N'Ðại Học')
insert into HeDT values('B01',N'Cao Ðẳng')
insert into HeDT values('C01',N'Trung Cấp')
insert into HeDT values('D01',N'Công nhân')

  Select * from HeDT

-- Nhap Du Lieu Bang Ma Khoa Hoc ---
insert into KhoaHoc values('K1',N'Ðại học khóa 1')
insert into KhoaHoc values('K2',N'Ðại học khóa 2')
insert into KhoaHoc values('K3',N'Ðại học khóa 3')
insert into KhoaHoc values('K9',N'Ðại học khóa 4')
insert into KhoaHoc values('K10',N'Ðại học khóa 5')
insert into KhoaHoc values('K11',N'Ðại học khóa 6')

  Select * from KhoaHoc

-- Nhap Du Lieu bang Khoa --
insert into Khoa values('CNTT',N'Công nghệ thông tin',N'Tầng 4 nhà B','043768888')
insert into Khoa values('CK',N'Cõ Khí',N'Tầng 5 nhà B','043768888')
insert into Khoa values('DT',N'Ðiện tử',N'Tằng 6 nhà B','043768888')
insert into Khoa values('KT',N'Kinh Tế',N'Tầng 2 nhà C','043768888')

  Select * from Khoa

--- Nhap Du Lieu Cho Bang Lop --
insert into Lop values('MT1',N'MÁy Tính 1','CNTT','A01','K2')
insert into Lop values('MT2',N'MÁy Tính 2','CNTT','A01','K2')
insert into Lop values('MT3',N'MÁy Tính 3','CNTT','A01','K2')
insert into Lop values('MT4',N'MÁy Tính 4','CNTT','A01','K2')
insert into Lop values('KT1',N'Kinh tế 1','KT','A01','K2')

 select * from Lop

-- Nhap Du Lieu Bang Sinh Vien --
insert into SinhVien values('0241060218',N'Nguyễn Minh Một',1,'08/27/1989','Hải Dýõng','MT3')
insert into SinhVien values('0241060318',N'Nguyễn Minh Hai',1,'2/08/1989','Nam Dinh','MT1')
insert into SinhVien values('0241060418',N'Nguyễn Minh Ba',1,'7/04/1989','Ninh Binh','MT2')
insert into SinhVien values('0241060518',N'Nguyễn Minh Bốn',1,'7/08/1989','Ninh Binh','MT1')
insert into SinhVien values('0241060618',N'Nguyễn Minh Nãm',0,'7/08/1989','Nam Dinh','MT3')
insert into SinhVien values('0241060718',N'Nguyễn Minh Sáu',1,'7/08/1989','Ha Noi','MT3')
insert into SinhVien values('0241060818',N'Nguyễn Minh Bảy',1,'7/08/1989','Ha Noi','MT3')
insert into SinhVien values('0241060918',N'Nguyễn Minh Tám',1,'7/08/1989','Hai Duong','MT2')
insert into SinhVien values('0241060128',N'Nguyễn Minh Chín',1,'7/08/1989','Hai Duong','MT2')
insert into SinhVien values('0241060138',N'Nguyễn Minh Mýời',1,'7/08/1989','Ha Nam','MT2')
insert into SinhVien values('0241060148',N'Nguyễn Minh Mýời Một',0,'7/08/1989','Bac Giang','MT4')
insert into SinhVien values('0241060158',N'Nguyễn Minh Mýời Hai',0,'7/08/1989','Ha Noi','MT4')
insert into SinhVien values('0241060168',N'Nguyễn Minh Mýời Ba',1,'7/08/1989','Hai Duong','MT4')
insert into SinhVien values('0241060178',N'Nguyễn Minh Mýời Bốn',1,'7/08/1989','Nam Dinh','MT1')
insert into SinhVien values('0241060978',N'Nguyễn Minh Mýời Nãm',1,'7/08/1989','Nam Dinh','KT1')

select * from SinhVien

-- Nhap Du Lieu Bang Mon Hoc --
insert into MonHoc values('SQL','SQL',5)
insert into MonHoc values('JV','Java',6)
insert into MonHoc values('CNPM','Công Nghệ phần mềm',4)
insert into MonHoc values('PTHT','Phân tích hệ thống',4)
insert into MonHoc values('Mang','Mạng máy tính',5)

  select * from MonHoc
-- Nhap Du Lieu Bang Diem --
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060218','SQL',5,7)
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060418','SQL',5,6)
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060218','CNPM',5,8)
insert into Diem values('0241060518','SQL',5,4,6)
insert into Diem values('0241060218','Mang',5,4,5)
insert into Diem values('0241060218','JV',5,4,4)
insert into Diem values('0241060518','JV',5,4,6)
insert into Diem values('0241060218','PTHT',4,2,5)
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060318','SQL',4,9)
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060618','SQL',4,8)
insert into Diem values('0241060318','Mang',5,3,4)
insert into Diem values('0241060418','Mang',5,4,4)
insert into Diem(MaSV,MaMH,HocKy,DiemLan1) values('0241060518','Mang',5,8)

  select * from Diem



----- Cac Cau Lenh
 -- 1.Hiển thị danh sách sinh viên gồm các thông tin sau:MaSV,TenSV, NgaySinh, GioiTinh,Ten Lop
create proc show_sv
as
  
Select MaSV,TenSV,NgaySinh,GioiTinh,TenLop
   From SinhVien,Lop
   Where SinhVien.MaLop=Lop.MaLop


 -- 2.Hien Thi Top 3 sinh vien lop may tinh 3 co diem mon SQL >=7
create proc show_top3sv
as
   Select Top 3 TenSV,TenLop,DiemLan1,TenMH
   From SinhVien,Diem,Lop,MonHoc
   Where TenLop='MÁy tính 3' and DiemLan1>=7 and TenMH='SQL'
         And SinhVien.MaLop=Lop.MaLop And Diem.MaSV=SinhVien.MaSV And Diem.MaMH=MonHoc.MaMH

 -- 3.Hien Thi MaSV,TenSV,Ngay Sinh,Que Quan cua cac sinh vien ten la Ba va co tuoi lon hon 19.
create proc show_svba19
as  
Select MaSV,TenSV,NgaySinh,QueQuan
   From SinhVien
   Where (TenSV like '%Ba') And (Year(getdate()) - Year(NgaySinh) >19)

 -- 4. Hien Thi Tat Ca Nhung Sinh Vien Khoa Cong Nghe Thong Tin
 create proc show_svcntt
as
 Select TenSV,TenLop,NgaySinh,QueQuan
   From (SinhVien Inner join Lop on SinhVien.MaLop=Lop.MaLop)
         Inner join Khoa on Khoa.MaKhoa=Lop.MaKhoa
   Where TenKhoa=N'Công nghệ thông tin'

 -- 5. Hien Thi Diem cua sinh vien lop May Tinh 3 Khoa 2 Sap Xep Diem Giam Dan
   create proc show_diemsvmt3
as
Select TenSV,TenLop,DiemLan1
   From SinhVien,Lop,KhoaHoc,Diem
   Where SinhVien.MaLop=Lop.MaLop And Lop.MaKhoaHoc=KhoaHoc.MaKhoaHoc And Diem.MaSV=SinhVien.MaSV And TenKhoaHoc='dai hoc khoa 2' And TenLop='may tinh 3'
   Order By DiemLan1 DESC 
 
 --6. Tinh Trung Binh Diem Cac Mon Hoc Cua Cac Sinh Vien Lop May tinh 3
    create proc show_diemtbsvmt3
as
Select SinhVien.MaSV,TenSV,Lop.TenLop, SUM(DiemLan1*SoTrinh)/SUM(SoTrinh) as DiemTrungBinh
   From SinhVien,Diem,MonHoc,Lop
   Where SinhVien.MaLop=Lop.MaLop And Diem.MaSV=SinhVien.MaSV And Diem.MaMH=MonHoc.MaMH
         And TenLop=N'MÁy Tính 3'
   Group By SinhVien.MaSV,TenSV,Lop.TenLop

 --7.Hien Thi Tat Ca Sinh Vien Phai Hoc Lai Mon Mang May Tinh
    create proc show_svhlmt3
as
Select TenSV,TenMH,DiemLan1,DiemLan2
   From SinhVien,Diem,MonHoc
   Where SinhVien.MaSV=Diem.MaSV And Diem.MaMH=MonHoc.MaMH And (DiemLan1<5) And (DiemLan2<5) And TenMH='Mạng máy tính'
--SV phai thi lai
    create proc show_svthilai
as
Select TenSV,DiemLan1
   From SinhVien,Diem
   Where SinhVien.MaSV=Diem.MaSV And (DiemLan1<5)
--SV thi lai mang may tinh

create proc show_svthilaimmt
as
Select TenSV,DiemLan1,TenMH
   From SinhVien,Diem,MonHoc
Where SinhVien.MaSV=Diem.MaSV And Diem.MaMH=MonHoc.MaMH And (DiemLan1<5) And TenMH='Mạng máy tính'
  


 --8. Dem So Luong Sinh Vien Cua Khoa Cong Nghe Thong Tin
    create proc show_demsvcntt
as
     select count(*) as CNTT from SINHVIEN,KHOA,LOP
     where SINHVIEN.MALOP=LOP.MALOP and LOP.MAKHOA=KHOA.MAKHOA and TENKHOA=N'Công nghệ thông tin'

 --9. Dem So Luong Sinh Vien Cua Tung Khoa
      create proc show_demsvkhoa
as
     select KHOA.MAKHOA, count(*) as SoLuong from SINHVIEN,LOP,KHOA
     where SINHVIEN.MALOP=LOP.MALOP and LOP.MAKHOA=KHOA.MAKHOA
     group by KHOA.MAKHOA

 --10. Cho biet diem thap nhat cua moi mon hoc
     create proc show_diemthapnhat
as
     select MonHoc.MAMH,min(diemlan1) as [Min diem]
     from MonHoc inner join diem on MonHoc.MAMH=diem.MAMH
     group by MonHoc.MAMH

                   
---11. Tao cac Thu Tuc Sau:
    -- 11.1 Hien Thi Chi Tiet Sinh Vien Va Diem
  create proc hienthisv_diem
  as
  SELECT SinhVien.MaSV,TenSV,QueQuan,MaMH,DiemLan1
  from SinhVien join diem
  on Sinhvien.masv=diem.masv
  
   --11.4 Tao thu tuc nhap them sinh vien moi
    create procedure nhapmoiSV
    @Masv char(15),
    @Tensv nvarchar(20),
    @gioitinh bit,
    @ngaysinh datetime,
    @quequan nvarchar(50),
    @malop char(5)
    as
    begin
      insert into sinhvien
      values(@Masv,@Tensv,@gioitinh,@ngaysinh,@quequan,@malop)
    end
    --test
     nhapmoiSV '0241060898','my love',0,'5/5/1987','vung tau','KT1'
     go
     select * from sinhvien
 
 --12. CAC THAO TAC DU LIEU VOI CAC BANG
    -- 12.1 BANG SINH VIEN
       --A. THEM DU LIEU
          create PROCEDURE sp_insSINHVIEN
          (
          @MASV char(15),
          @TENSV nvarchar(20),
          @GIOITINH bit,
          @NGAYSINH DATETIME,
          @QueQuan nvarchar(50),
          @MALOP char(5)
          )
          AS
          BEGIN
          insert into SINHVIEN
          (
             MASV,
             TENSV,
             GIOITINH,
           NGAYSINH,
             QueQuan,
             MALOP
          )
           values (@MASV,@TENSV,@GIOITINH,@NGAYSINH,@QUEQUAN,@MALOP)
         END
  
          --TEST
              sp_insSINHVIEN '0241061298','BANG KIEU',1,'5/5/1987','HA NOI','MT3'
              SELECT * FROM SINHVIEN

      --B. XOA DU LIEU
          create procedure sp_delSINHVIEN
          @MASV char(15)
          as
            delete from SINHVIEN
            where MASV=@MASV
   
             -- TEST
              sp_delSINHVIEN '0241060218'
              select * from sinhvien

      --C. HIEN THI DU LIEU
          create proc sp_showSINHVIEN
          as
            select * from SINHVIEN
  
              --TEST
                 sp_showSINHVIEN
   
      --D. SUA DU LIEU
          create procedure sp_updateSINHVIEN
          (
           @MASV char(15),
           @TENSV nvarchar(20),
           @GIOITINH bit,
           @NGAYSINH DATETIME,
           @QUEQUAN nvarchar(50),
           @MALOP char(5)
          )
          as

          update SINHVIEN
            set  
               MASV=@MASV,
               TENSV=@TENSV,
           GIOITINH=@GIOITINH,
               NGAYSINH=@NGAYSINH,
               QUEQUAN=@QUEQUAN,
               MALOP=@MALOP
             where MASV=@MASV
         --- KIEM TRA
         sp_updateSINHVIEN '0241060218','BANG KIEU',1,'5/5/1987','HA NOI','MT3'
         select * from SINHVIEN
            
   -- 12.2 BANG LOP
     --A. THEM DU LIEU
          create PROCEDURE sp_insLOP
          (
          @MALOP char(5),
          @TENLOP nvarchar(30),
          @MAKHOA CHAR(5),
          @MaHeDT CHAR(5),
          @MaKhoaHoc CHAR(5)
          )
          AS
          BEGIN
          insert into LOP
          (
             MALOP,
             TENLOP,
             MAKHOA,
           MaHeDT,
             MaKhoaHoc
             )
     
         values (@MALOP,@TENLOP,@MAKHOA,@MaHeDT,@MaKhoaHoc)
         END

          --TEST
        
           sp_insLOP 'KT4','KINH TE 4','KT','A01','K2'
           select * from lop

      --B. XOA DU LIEU
          create procedure sp_delLOP
          @MALOP char(5)
          as
            delete from LOP
            where MALOP=@MALOP
          -- TEST
            sp_delLOP 'KT4'
 
       --C. HIEN THI DU LIEU
          create proc sp_showLOP
          as
            select * from LOP

     
       --D. SUA DU LIEU
          create procedure sp_updateLOP
          (
           @MALOP char(5),
           @TENLOP nvarchar(30),
           @MAKHOA CHAR(5),
           @MaHeDT CHAR(5),
           @MaKhoaHoc CHAR(5)
          )
          as

          update LOP
            set  
               MALOP=@MALOP,
               TENLOP=@TENLOP,
           MAKHOA=@MAKHOA,
               MaHeDT=@MaHeDT,
               MaKhoaHoc=@MaKhoaHoc
             where MALOP=@MALOP

   -- 12.3 BANG MON HOC
    
      --A. THEM DU LIEU
          create PROCEDURE sp_insMONHOC
          (
          @MaMH char(5),
          @TenMH nvarchar(30),
          @SoTrinh INT
          )
          AS
          BEGIN
          insert into MONHOC
          (
             MAMH,
             TENMH,
             SOTRINH
           )
     
         values (@MAMH,@TENMH,@SOTRINH)
         END
      --B. XOA DU LIEU
          create procedure sp_delMONHOC
          @MAMH char(5)
          as
            delete from MonHoc
            where MAMH=@MAMH
 
       --C. HIEN THI DU LIEU
          create proc sp_showMONHOC
          as
            select * from MONHOC

     
       --D. SUA DU LIEU
          create procedure sp_updateMONHOC
          (
           @MaMH char(5),
           @TenMH nvarchar(30),
           @SoTrinh INT
          )
          as

          update MONHOC
            set  
               MAMH=@MAMH,
               TENMH=@TENMH,
           SOTRINH=@SOTRINH
             where MAMH=@MAMH

  --- 12.4 BANG KHOA HOC
     --A. THEM DU LIEU
          create PROCEDURE sp_insKHOAHOC
          (
           @MaKhoaHoc char(5),
           @TenKhoaHoc nvarchar(20)
          )
          AS
          BEGIN
          insert into KHOAHOC
          (
             MaKhoaHoc,
             TenKhoaHoc
             )
     
         values (@MaKhoaHoc,@TenKhoaHoc)
         END
  
      --B. XOA DU LIEU
          create procedure sp_delKHOAHOC
          @MaKhoaHoc char(5)
          as
            delete from KHOAHOC
            where MaKhoaHoc=@MaKhoaHoc
 
       --C. HIEN THI DU LIEU
          create proc sp_showKHOAHOC
          as
            select * from KHOAHOC

     
       --D. SUA DU LIEU
          create procedure sp_updateKHOAHOC
          (
            @MaKhoaHoc char(5),
            @TenKhoaHoc nvarchar(20)
          )
          as

          update KHOAHOC
            set  
               MaKhoaHoc=@MaKhoaHoc,
               TenKhoaHoc=@TenKhoaHoc
            where MaKhoaHoc=@MaKhoaHoc

 --- 12.5 BANG KHOA
     --A. THEM DU LIEU
          create PROCEDURE sp_insKHOA
          (
            @MaKhoa char(5),
            @TenKhoa nvarchar(30),
            @DiaChi nvarchar(100),
            @DienThoai varchar(20)
          )
          AS
          BEGIN
          insert into KHOA
          (
             MaKhoa,
             TenKhoa,
             DiaChi,
           DienThoai
            )
     
         values (@MaKhoa,@TenKhoa,@DiaChi,@DienThoai)
         END
      --B. XOA DU LIEU
          create procedure sp_delKHOA
          @MAKHOA char(5)
          as
            delete from KHOA
            where MAKHOA=@MAKHOA
 
       --C. HIEN THI DU LIEU
          create proc sp_showKHOA
          as
            select * from KHOA

     
       --D. SUA DU LIEU
         create procedure sp_updateKHOA
          (
            @MaKhoa char(5),
            @TenKhoa nvarchar(30),
            @DiaChi nvarchar(100),
            @DienThoai varchar(20)
          )
          as

          update KHOA
            set  
               MaKhoa=@MaKhoa,
               TenKhoa=@TenKhoa,
           DiaChi=@DiaChi,
               DienThoai=@DienThoai
             where MaKhoa=@MaKhoa

 -- 12.6 BANG HE DAO TAO
   --A. THEM DU LIEU
          create PROCEDURE sp_HEDT
          (
           @MaHeDT char(5),
           @TenHeDT nvarchar(40)
          )
          AS
          BEGIN
          insert into HEDT
          (
             MaHeDT,
             TenHeDT
             )
     
         values (@MaHeDT,@TenHeDT)
         END
  
      --B. XOA DU LIEU
          create procedure sp_delHEDT
          @MaHeDT char(5)
          as
            delete from HEDT
            where MaHeDT=@MaHeDT
 
       --C. HIEN THI DU LIEU
         create proc sp_showHEDT
          as
            select * from HEDT

     
       --D. SUA DU LIEU
          create procedure sp_updateHEDT
          (
            @MaHeDT char(5),
            @TenHeDT nvarchar(40)
          )
          as

          update HEDT
            set  
               MaHeDT=@MaHeDT,
               TenHeDT=@TenHeDT
            where MaHeDT=@MaHeDT

 -- 12.7 BANG DIEM
      --A. THEM DU LIEU
         create PROCEDURE sp_insDIEM
          (
          @MaSV char(15),
          @MaMH CHAR(5),
          @HocKy INT,
          @DiemLan1 INT,
          @DiemLan2 INT
          )
          AS
          BEGIN
          insert into DIEM
          (
             MASV,
             MAMH,
             HOCKY,
           DIEMLAN1,
             DIEmLAN2
             )
     
         values (@MaSV,@MaMH,@HocKy,@DiemLan1,@DiemLan2)
         END
      --B. XOA DU LIEU
          create procedure sp_delDIEM
          @MASV char(15)
          as
            delete from DIEM
            where MASV=@MASV
 
       --C. HIEN THI DU LIEU
          create proc sp_showDIEM
          as
            select * from DIEM

     
       --D. SUA DU LIEU
          create procedure sp_updateDIEM
          (
           @MaSV char(15),
           @MaMH CHAR(5),
           @HocKy INT,
           @DiemLan1 INT,
           @DiemLan2 INT
          )
          as

          update DIEM
            set  
               MaSV=@MaSV,
               MaMH=@MaMH,
           HocKy=@HocKy,
               DiemLan1=@DiemLan1,
               DiemLan2=@DiemLan2
             where MaSV=@MaSV

     


 --- TAO TRIGGER

---13. Tao trigger khong cho phep xoa mon hoc

  --- Tao Trigger insert Bang Diem
   CREATE TRIGGER trginsert_Diem
   ON Diem
   For insert
   as
   DECLARE @DiemLan1 int
   DECLARE @DiemLan2 int
   SELECT @DiemLan1=DiemLan1,@DiemLan2=DiemLan2
   FROM Inserted
   IF (@DiemLan1 <0 ) or (@DiemLan1 >10) or (@DiemLan2 <0) or (@DiemLan2 >10)
     begin
     print 'Sai gia tri diem'
     Rollback transaction
     end
   else
     begin
     Print 'qua trinh chen dl thanh cong'
     end
   Go
  -- check
  INSERT INTO Diem VALUES ('0241060148','SQL',5,14,8)
  INSERT INTO Diem VALUES ('0241060158','SQL',5,-2,8)
  INSERT INTO Diem VALUES ('0241060168','SQL',5,8,8)
  INSERT INTO Diem VALUES ('0241060178','SQL',5,12,24)
  INSERT INTO Diem VALUES ('0241060918','JV',5,12,24)
 
  Go
  SELECT * FROM Diem

 -- Tao trigger de tat cac truong trong bang sv phai nhap

  create trigger trginsert_Sinhvien
  on Sinhvien
  for insert
  as
  begin
  -- khai bao 4 bien luu tru
  Declare @tensv nvarchar(20)
  Declare @quequan nvarchar(50)
  Declare @gioitinh bit
  Declare @ngaysinh datetime
  -- lay du lieu ra cac bien tu bang inserterd
  select @tensv=inserted.tensv,
         @quequan=inserted.quequan,
         @gioitinh=inserted.gioitinh,
         @ngaysinh=inserted.ngaysinh
  From Inserted
  if((@tensv is null) or (@quequan is null)
    or (@gioitinh is null) or (@ngaysinh is null))
    begin
    print'Ban phai day du cac thong'
    print'qua trinh them dl khong thanh cong'
    rollback tran
    end
  else
    begin
    print'ban da them du lieu thanh cong'
    end
end
  -- kiem tra

  select* from sinhvien



1.       Giáo trình SQL Server 2000-NXB Lao Động Xã Hội
2.       Một số Website tham khảo:
                  http://www.ddth.com/archive/index.php/t-87794.html
                  http://forum.csharpvn.com/default.aspx?g=posts&t=203