Yêu cầu của hệ thống quản lý thí sinh và điểm thi 3 Phần III: Chuần hóa Nhận diện các khóa chính và khóa ứng củ của các bảng 6 Từ điển dữ liệu của hệ thống đã được chuẩn hóa 9 Phần V
Trang 1BÁO CÁO BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU
HỆ THỐNG QUẢN LÝ THÍ SINH VÀ ĐIỂM THI
Giáo viên hướng dẫn: Thầy Nguyễn Hoài Giang Nhóm : AFC ĐT9 - K47
Các thành viên: Nguyễn Trung Thu (NT)
Đặng Hữu Tùng Nguyễn Đình Tuấn
Vũ Ngọc Hà Nguyễn Công Chiến Khuất Bá Đông
Hà nội, 5/2005
cuu duong than cong com
Trang 2Yêu cầu của hệ thống quản lý thí sinh và điểm thi 3
Phần III: Chuần hóa
Nhận diện các khóa chính và khóa ứng củ của các bảng 6
Từ điển dữ liệu của hệ thống đã được chuẩn hóa 9 Phần V: Lược đồ khái niệm của hệ thống đã được chuẩn hóa 12
Phần VII: Các thủ tục đảm bảo nguyên tắc toàn vẹn dữ liệu 15 Phần VIII: Chương trình nguồn
Form Nhập thông tin về Thí sinh 17
Form cập nhật Tỉnh/Thành phố 29 Form nhập môn thi cho từng khối 33
Form tìm kiếm điểm thi của thí sinh 41
Thống kê điểm trung bình của thí sinh theo vùng 47 Thống kê thí sinh đỗ của từng Tỉnh/Thành phố 48
cuu duong than cong com
Trang 3YÊU CẦU CỦA HỆ THỐNG QUẢN LÝ THÍ SINH VÀ
ĐIỂM THI
I Thông tin cần lưu trữ
Thông tin về thí sinh:
- Số báo danh của thí sinh
- Họ và tên của thí sinh
- Ngày tháng năm sinh
- Giới tính
- Địa chỉ (Bao gồm thành phố/tỉnh, quận/huyện, phường/xã, tên phố/xóm, số nhà)
- Mã vùng
- Số phách của từng môn thi
- Điểm của từng môn thi
II Các chức năng của chương trình
- Ngày tháng năm sinh
4 Tìm kiếm điểm thí sinh theo:
- Số báo danh
- Số phách
5 Xem toàn bộ thông tin được sắp xếp:
- Sắp xếp về thí sinh kèm theo các thông tin về điểm từng môn học của thí sinh
- Sắp xếp theo tổng điểm thi kèm theo các thông tin về thí sinh và điểm của từng môn thi
6 Lập báo cáo thống kê điểm trung bình của các thí sinh theo từng vùng gồm thông tin về:
- Số báo danh
- Họ và tên thí sinh
- Ngày tháng năm sinh
- Giới tính
- Điểm trung bình của từng thí sinh
- Điểm trung bình của các thí sinh trong từng vùng
7 Lập báo cáo thống kê tỷ lệ thí sinh đỗ của các tỉnh/thành phố, bao gồm các thông tin về:
- Số báo danh
- Họ và tên thí sinh
- Ngày tháng năm sinh
- Giới tính
- Điểm trung bình của từng thí sinh
- Tỷ lệ thí sinh thi đỗ trong từng thành phố/tỉnh
- Tỷ lệ thí sinh thi đỗ của tất cả các thành phố/tỉnh
cuu duong than cong com
Trang 4PHẦN I: NHẬN DIỆN THỰC THỂ
I Thực thể THÍ SINH
Để tiện cho việc sắp xếp thí sinh ta tách thuộc tính Họ và tên thí sinh thành Họ đệm thí sinh và Tên thí sinh
Để tiện cho việc quản lý thí sinh, ta đƣa thêm thuôc tính Đối tượng và
Mã đối tượng, Khối thi và Mã Khối thi
Để dễ dàng xác định thí sinh đỗ hay trƣợt ta thêm thuộc tính Điểm
chuẩn của mỗi khối
Tách thuộc tính Địa chỉ thành các thuộc tính nhỏ hơn
Vậy thực thể THÍ SINH bao gồm các thuộc tính sau:
STT Thuộc tính Ký hiệu Kiểu dữ liệu
4 Ngày tháng năm sinh NgaySinh Date/Time
II Thực thể ĐIỂM THI
Để xác định điểm thi của một môn ta đƣa thêm thuộc tính Môn thi và
Mã môn thi Vậy thực thể ĐIỂM THI gồm các thuộc tính sau:
STT Thuộc tính Ký hiệu Kiểu dữ liệu
2 Số phách (của một môn thi) SoPhach Character(15)
5 Điểm thi (của một môn thi) Diem Numeric(4)
cuu duong than cong com
Trang 5PHẦN II: CÁC GIẢ THIẾT VỀ CÁC PHỤ THUỘC HÀM
1 Giả thiết số báo danh là duy nhất đối với mỗi thí
sinh và mỗi thí sinh chỉ có duy nhất một Họ đệm,
Tên, Ngày sinh, Giới tính, Ghi chú, mỗi thí sinh chỉ
có duy nhất một địa chỉ: Thành phố/Tỉnh,
Quận/Huyện, Phường/Xã, Phố/Xóm Số nhà, Mã
vùng Do vậy các thuộc tính này phụ thuộc hàm vào
thuộc tính Số báo danh
Sbd Ho Sbd Ten Sbd NgaySinh Sbd GioiTinh Sbd Gchu Sbd Tp Sbd Qh Sbd Pxa Sbd Pxom Sbd SoNha Sbd Mv
2 Mỗi đối tượng được xác định duy nhất bởi một
Mã đối tượng nên Đối tượng phụ thuộc hàm vào Mã
Đối tượng
MaDt Dt
3 Giả thiết mỗi Khối thi chỉ có một điểm chuẩn, mà
mỗi khối thi được xác định duy nhất bởi Mã khối
nên Khối thi và Điểm chuẩn phụ thuộc hàm vào Mã
khối
MaKhoi Khoi MaKhoi DiemChuan
4 Giả thiết mỗi thí sinh chỉ thuộc duy nhất một loại
đối tượng mà Số báo danh xác định duy nhất một thí
sinh nên Đối tượng và Mã đối tượng phụ thuộc hàm
vào Số báo danh
Sbd Dt Sbd MaDt
5 Giả thiết với mỗi số báo danh chỉ dùng cho thí
sinh thi trong một khối nên khối thi và mã khối thi
phụ thuộc hàm vào Số báo danh
Sbd Khoi Sbd MaKhoi
6 Giả thiết mã vùng xác định duy nhất một thành
phố, mỗi thành phố cũng chỉ có duy nhất một mã
vùng
Mv Tp
Tp Mv
7 Mỗi môn thi được xác định duy nhất bởi Mã môn
thi nên Môn thi phụ thuộc hàm vào Mã môn
MaMon Mon
9 Giả thiết mỗi bài thi của một môn được đánh số
phách ngẫu nhiên và do đó có thể trùng nhau Vì
vậy mỗi số phách ứng với một môn thi nhất định
xác định một điểm thi môn đó
(SoPhach, Mon) Diem (SoPhach, Mon) Sbd
10 Một thí sinh thi nhiều môn thi khác nhau nên
điểm mỗi môn của thí sinh được xác định nhờ Số
báo danh và Tên môn Đồng thời với người quản trị
(Nhập/sửa dữ liệu), số phách của một bài thi hoàn
toàn xác định khi biết Số báo danh và Tên môn thi
(Sbd, Mon) Diem (Sbd, Mon) SoPhach
cuu duong than cong com
Trang 6PHẦN III: CHUẨN HÓA
1 Nhận diện các khóa chính và khóa ứng cử
Từ các thực thể và phụ thuộc hàm đã xác định ở trên ta có các quan hệ sau:
THÍ SINH(*Sbd, Ho, Ten, NgaySinh, GioiTinh, Tp, Qh, Pxa, Pxom,
SoNha, Mv, Dt, MaDt, Khoi, Makhoi, DiemChuan,
GChu)
P_key: Sbd C_key: Sbd
ĐIỂM THI(*Sbd, *Mon, *-MaMon, *-SoPhach, Diem)
P_key: (Sbd, Mon) C_key: (Sophach, Mon) C_key: (Sbd, MaMon) C_key: (SoPhach, MaMon)
ĐIỂM THI(*Sbd, *MaMon, *-SoPhach, Diem)
và MÔN THI(* MaMon, *-Mon)
Trang 7THÍ SINH(*Sbd, Ho, Ten, NgaySinh, GioiTinh, Qh, Pxa, Pxom,
SoNha, Mv, MaDt, Makhoi, Gchu)
Trang 85 Chuẩn hóa BCNF:
Các bảng MÃ VÙNG, ĐỐI TƢỢNG đều đã ở dạng chuẩn BCNF
vì mọi thuộc tính quyết định đều là khóa ứng cử và không còn phụ thuộc hàm bắc cầu
Bảng THÍ SINH đã ở dạng chuẩn vì chỉ có một khóa chính đồng thời là khóa ứng cử
Bảng Khối thi có phụ thuộc hàm bắc cầu MaKhoi Khoi
Khoi DiemChuan
MaKhoi DiemChuan
Ta tách bảng này thanh 2 bảng sau:
KHỐI THI(*MaKhoi, *-Khoi)
Và ĐIỂM CHUẨN(*Khoi, DiemChuan)
Bàng ĐIỂM THI có phụ thuộc hàm bắc cầu:
(Sbd, MaMon) SoPhach (Sbd, Sophach) Diem
(Sbd, MaMon) Diem
Ta tách bảng ĐIỂM THI thành 2 bảng sau:
SỐ PHÁCH(*Sbd, *MaMon, *-SoPhach)
Và ĐIỂM THI(*Sbd, *MaMon, Diem)
Do hai bảng MÔN THI VÀ KHỐI THI có quan hệ n – n nên ta có bảng mới MÔN KHỐI Bảng này có quan hệ n – 1 với các bảng MÔN THI, KHỐI THI
Trang 9PHẦN IV: SƠ ĐỒ THỰC THỂ LIÊN KẾT
1 Sơ đồ thực thể liên kết
Sơ đồ trên chỉ được dùng trong lập báo cáo Thực tế khi lập trình, việc chuẩn hóa chỉ dừng lại ở mức 3NF để cho đơn giản
2 Từ điển dữ liệu của hệ thống đã chuẩn hóa
THI SINH Thí sinh Thông tin về thí sinh
DIEM THI Điểm thi Điểm thi của thí sinh ứng với từng môn
MA VUNG Mã vùng Danh sách các thành phố/tỉnh kèm theo mã
vùng tương ứng MON THI Môn thi Danh sách môn thi và mã môn
KHOI THI Khối thi Danh sách khối thi và mã khối
MON KHOI Môn thi –
Khối thi
Danh sách các môn thi tương ứng với các
khối thi DOI TUONG Đối tượng Danh sách các đối tượng tương ứng với mã cuu duong than cong com
Trang 102.2 Danh sách các thuộc tính của từng bảng
1 Sbd Số báo danh Character 15 BKA11234 P_key
2 Ho Họ đệm của thí sinh Text 30 Nguyễn Trung
4 NgaySinh Ngày tháng năm sinh Date/time 10 08/10/1984
13 GChu Ghi chú Text 255 Không có gì
1 Sbd Số báo danh Character 15 BKA11234 P_key
4 Diem Điểm thi của môn number 5 8,25
1 Sbd Số báo danh Character 15 BKA11234 P_key
3 SoPhach Số phách Number 10 332114 C_key
2.2.5 Bảng KHỐI THI
TT
Tên viết
tắt Tên đầy đủ Kiểu dữ liệu Khoảng giá trị Giá trị mẫu Khóa
cuu duong than cong com
Trang 112.2.6 Bảng ĐIỂM CHUẨN
2.2.7 Bảng MÔN-KHỐI
TT Tên viết tắt Tên đầy đủ Kiểu dữ liệu Khoảng giá trị Giá trị mẫu Khóa
Khoảng giá trị Giá trị mẫu Khóa
Khoảng giá trị Giá trị mẫu Khóa
2 Dt Đối tượng text 30 Con thương binh C_key
TT Tên viết tắt Tên đầy đủ Kiểu dữ liệu Khoảng giá trị Giá trị mẫu Khóa
2 DiemChuan Điểm chuẩn Number 5 24,5
cuu duong than cong com
Trang 12PHẦN V: MÔ TẢ LƢỢC ĐỒ KHÁI NIỆM CỦA HỆ THỐNG ĐÃ ĐƢỢC CHUẨN HÓA
Domain NgaySinh Date/Time
Domain DiemChuan NUMERIC(5)
RELATION
THI SINH(Sbd, Ho, Ten, NgaySinh, GioiTinh, Mv,
Qh, Pxa, Pxom, SoNha, MaKhoi, MaDt, GChu) P_key: Sbd
RELATION DIEM THI(Sbd, MaMon, Diem)
P_key:(Sbd, MaMon)
RELATION MON(MaMon, Mon)
RELATION DIEM CHUAN(MaKhoi, DiemChuan)
P_key:
MaKhoi
RELATION SO PHACH(Sbd, MaMon, SoPhach)
P_key: (Sbd, MaMon) cuu duong than cong com
Trang 13PHẦN VI: THIẾT KẾ CHƯƠNG TRÌNH
1 Hệ thống Menu chính của chương trình
T
2 Chức năng của các mục chọn
Menu chính (frmMain) xuất hiện sau màn hình giới thiệu ban đầu (Main)
Thông tin về Thí sinh: frmThisinh cho phép xem, nhập và sửa, xóa các thông
tin về Thí sinh
Nhập Điểm thi : frmDiemThi cho phép xem, nhập và sửa, xóađiểm thi của Thí
sinh
Trở về Windows: Thoát khỏi chương trình
Danh sách Đối tượng: frmDoituong cho phép xem, nhập và sửa, xóa các đối
tượng
cuu duong than cong com
Trang 14Danh sách Tỉnh/Thành phố: frmMavung cho phép xem, nhập, sửa, xóa các
tỉnh/ thành phố
Tương tự với các lựa chọn Danh sách Khối thi (frmKhoi), Danh sách Môn thi (frmMon), Danh sách Môn thi của các Khối( frmMon_Khoi)
Sắp xếp theo họ tên: RptSapxepten
Sắp xếp theo Tổng điểm: RptsxTong
Tỷ lệ thí sinh đỗ của các Tỉnh/Thành phố: rptTylevung
Thống kê điểm trung bình theo vung: rptDTB
Tìm kiếm thí sinh: frmTimTs cho phép tìm kiếm thí sinh theo SBD, Tên, Ngày
tháng năm sinh và hiển thị tất cả thông tin về thí sinh tìm được
Tìm kiếm Điểm thi của thí sinh: frmTimDiem cho phép tìm kiếm Điểm của thí
sinh theo SBD, Số phách và hiển thị các thông tin về điểm,…
Hướng dẫn: frmTip Hướng dẫn cách sử dụng chương trình, file nguồn là
TIPOFDAY.txt nằm trong cùng thư mục cài đặt chương trình
Tác giả: frmAbout Giới thiệu về nhóm AFC và lời cảm ơn
cuu duong than cong com
Trang 15PHẦN VII: CÁC THỦ TỤC ĐẢM BẢO NGUYÊN TẮC TOÀN VẸN DỮ LIỆU
1 Quy tắc toàn vẹn thực thể
Để đảm bảo các khóa không được phép NULL, trong quá trình thiết kế CSDL,
ta đặt thuộc tính Required của các khóa chính là Yes Nhờ đó, khi người dùng
không nhập dữ liệu cho khóa chính của các bảng, DBMS sẽ đưa ra thông báo lỗi và không cho phép lưu dữ liệu
2 Quy tắc toàn vẹn quy chiếu:
Các bảng sau có quan hệ 1 – n
Để đảm bào tính toàn vẹn quy chiếu, dữ liệu khóa chinh ở bảng 1 luôn
phải được nhập trước và hiện thị trong mục lựa chọn của khóa ngoại lai của
bảng n Trong chương trình này, ta dùng công cụ DataCombo đuợc hỗ trợ bởi ADO có khả năng ràng buộc dữ liệu để hiển thị dữ liệu trong form nhập của
bảng n từ dữ liệu nguồn của bảng 1 Người dùng không thể nhập dữ liệu ở bảng
n mà bảng 1 chưa có vì chỉ được phép chọn những dữ liệu đã được nhập trước
từ DataCombo
Để sửa dữ liệu tại bảng n, người dùng phải sửa dữ liệu trước ở bảng 1
thông qua form nhập dữ liệu tương ứng
Muốn xóa dữ liệu ở bảng n, người dùng hoàn toàn yên tâm rằng dữ liệu
thuộc về bảng 1 (được chọn lựa từ DataCombo) không hề bị xóa
Sau đây là danh sách các thủ tục/hàm đảm bảo nguyên tắc toàn vẹn dữ liệu:
Tên thủ tục/hàm Mục đích Bảng dữ liệu
Commit() Lấy mã tương ứng của các dữ liệu được chọn ở
các DataCombo từ bảng 1 để lưu vào bảng n
Về mặt giao diện, người dùng lựa chọn các thông tin như bình thường nhưng chương trình chỉ lưu khóa của các thông tin đó bằng việc so sánh thông tin đó với danh mục thông tin trong một bảng 1 khác có quan hệ với bảng n đang được nhập thông tin VD: trong phần Tỉnh/Thành phố, người dùng chọn Hà Nội
ThiSinh, Mon_Khoi
Trang 16nhưng thực chất thông tin được lưu vào bảng Thí sinh là Mã vùng của Hà Nội vốn được lưu trong bảng Mã vùng
cmdSelect_Click Lấy tất cả các môn thi ứng với khối thi được
chọn để hiển thị lên các button cho phép người
sử dụng nhập điểm cho các môn thi đó Vì vậy người sử dụng không thể nhập điểm cho một môn thi chưa có tên trong bảng Môn thi hoặc không nằm trong khối thi của Thí sinh
DiemThi
cmdOther_Click() Chọn môn thi khác hoặc khối thi khác để nhập
điểm (có chức năng giống hàm Select_Click()
DiemThi
cuu duong than cong com
Trang 17PHẦN VIII: CHƯƠNG TRÌNH NGUỒN
1 Form nhập thông tin về thí sinh frmThiSinh
Sử dụng ADO Code xây dựng bởi VB ở giao diện Single Record
Option Explicit
Dim WithEvents adoPrimaryRS As Recordset
Dim WithEvents rsMv As Recordset
Dim WithEvents rsMadt As Recordset
Dim WithEvents rsMaKhoi As Recordset
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean
Private Sub Commit() ‘Đảm bảo tính toàn vẹn dữ liệu (xem phần VI)
Set rsMv = New Recordset
Set rsMadt = New Recordset
Set rsMaKhoi = New Recordset
rsMv.Open "select * from Mavung where Tp = '" & dcbMv & "'", db
Set adoPrimaryRS = New Recordset
cuu duong than cong com
Trang 18adoPrimaryRS.Open "select Gchu, Gioitinh, Ho, MaDt, MaKhoi, Mv, Ngaysinh, Pxa, Pxom, Qh, Sbd, Sonha, Ten from ThiSinh Order by Sbd", db, adOpenStatic,
adLockOptimistic
Dim oText As TextBox
‘Ràng buộc thông tin trên từng textbox với CSDL
For Each oText In Me.txtFields
Set oText.DataSource = adoPrimaryRS
Next
mbDataChanged = False
LockText
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
‘Thực hiện lệnh khi một số phím quen thuộc đƣợc bấm
If mbEditFlag Or mbAddNewFlag Then Exit Sub
Select Case KeyCode
Case vbKeyUp, vbKeyPageUp
If Shift = vbCtrlMask Then
cmdFirst_Click
Else
cmdPrevious_Click
End If
Case vbKeyDown, vbKeyPageDown
If Shift = vbCtrlMask Then
Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
‘Hiển thị số thứ tự của bản ghi hiện tại
lblStatus.Caption = "Record: " & CStr(adoPrimaryRS.AbsolutePosition)
Trang 19On Error GoTo DeleteErr
MsgBox " Ban co chac chan xoa thi sinh nay khong?", vbYesNo + vbQuestion,
On Error GoTo EditErr
lblStatus.Caption = "Edit record"
Trang 20Private Sub cmdCancel_Click() ‘Hủy bỏ
On Error Resume Next
Private Sub cmdUpdate_Click() ‘Lưu dữ liệu
Commit ' xac nhan viec chon Tp doi tuong va khoi thi
On Error GoTo UpdateErr
Private Sub cmdFirst_Click()
On Error GoTo GoFirstError
Private Sub cmdLast_Click()
cuu duong than cong com
Trang 21On Error GoTo GoLastError
Private Sub cmdNext_Click()
On Error GoTo GoNextError
If Not adoPrimaryRS.EOF Then adoPrimaryRS.MoveNext
If adoPrimaryRS.EOF And adoPrimaryRS.RecordCount > 0 Then
Private Sub cmdPrevious_Click()
On Error GoTo GoPrevError
If Not adoPrimaryRS.BOF Then adoPrimaryRS.MovePrevious
If adoPrimaryRS.BOF And adoPrimaryRS.RecordCount > 0 Then
cmdUpdate.Visible = Not bVal
cmdCancel.Visible = Not bVal