Sự phát triển mạnh mẻ của Công Nghệ Thông Tin cùng với sự đòi hỏi ngày càng cao sự tự động hóa , tin học hóa của con người vào tất cả các lỉnh vực khiến cho xã hội luôn đổi mới . Qua quá trình tìm hiểu , nghiên cứu và áp dụng những công nghệ mới của lĩnh vực Tin Học trong công cuộc cải cách của Bộ Giáo Dục , chúng em xây dựng đề tài này với mong muốn được góp một phần công sức vào công cuộc đổi mới này .
Dựa trên những mặt đạt được và chưa đạt được của đề tài , chúng em hy vọng sẽ nhận được nhiều ý kiến đóng góp , nhận xét để có điều kiện phát triển ứng dụng này lên cao hơn nữa .
102 trang |
Chia sẻ: baoanh98 | Lượt xem: 903 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Xây dựng chương trình thi trắc nghiệm bằng Visual basic.net, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hải sử dụng với kiểu số nguyên (int , smallint , tinyint) hoặc kiểu number , decimal (phải khai báo scale=0 ).
+ Có thể khai thêm tham số IDENT_SEED (giá trị bắt đầu) và IDENT_INCR (giá trị tăng thêm) .
+ Hàm @@IDENTUTY cho biết giá trị identity cuối cùng đã sử dụng để đưa giá trị vào 1 hàng trong phiên làm việc (session) .
+ Có thể sử dụng từ khoá IDENTITYCOL thay thế tên cột khi truy vấn dữ liệu
Cú pháp
CREATE TABLE(
IDENTITY [(seed, increment)] {NOT NULL], [ ,...})
Sử dụng kiểu dữ liệu UNIQUEIDENTIFIER và HÀM NEWID
Kiểu uniqueidentifier và hàm NEWID được dùng chung với nhau . Đặc điểm :
+ Kiểu uniquedentifier lưu một số 16 bytes (128 bit) duy nhất (unique). Kiểu này dùng để lưu giá trị này duy nhất toàn cục (GUID – Globaly Unique Identifier) .
+ Hàm NEWID tạo một GUID có thể dùng để lưu giá trị vào kiểu uniqueidentifier . Giá trị GUID sẽ không giống nhau trong tất cả các table của một database, kể cả trong database khác . Thường dùng trong việc nhân bản , khi cần đến một mà nhận diện trên cả các hệ thống.
Nhập một mẩu tin mới vào table :
Cú pháp :
INSERT [INTO] table_name VALUES (val1 , val2 , , valn)
Hoặc :
INSERT [INTO] table_name (column_list) VALUES (val1 , val2 , , valn)
Xóa dữ liệu :
Cú pháp :
TRUNCATE TABLE table_name
Hoặc :
DELETE table_name
WHERE condition
Xóa dữ liệu bên trong table
RÀNG BUỘT TOÀN VẸN :
Các loại ràng buộc toàn vẹn dữ liệu (DATA INTERGRITY)
Có thể chia làm 4 loại toàn vẹn dữ liệu :
+ Toàn vẹn về miền giá trị (domain integrity)
+ Toàn vẹn đối với thực thể (entity integrity)
+ Toàn vẹn tham chiếu ( referential integrity)
+ Toàn vẹn do người sử dụng định nghĩa .
Loại toàn vẹn
Ràng buột
Domain
DEFAULT
CHECK
FOREIGN KEY
Check
PRIMARY KEY
UNIQUE
Referential
FOREIGN KEY
User-defined
CHECK
Ta có thể khai báo ràng buộc khi tạo bảng ( CREATE TABLE), hoặc bổ sung điều chỉnh sau khi đã tạo xong (ALTER TABLE)
Để liệt kê các ràng buộc đã cài đặt cho một table, ta dùng
EXEC sp_helpconstraint
Xoá một ràng buộc :
ALTER TABLE
DROP CONSTRAINT
Giá trị mặc nhiên (DEFAULT) :
Cách 1 :
CREATE TABLE
( DEFAULT , [ , ... ])
Cách 2 :
CREATE TABLE (
COSNTRAINT DEFAULT , [, ... ])
Cách 3 :
ALTER TABLE
ADD CONSTRAINT
DEFAULT FOR
CHECK constraint
CHECK cho phép kiểm tra giá trị trong một hoặc nhiều cột trong table. Dữ liệu phải thỏa mãn biểu thức logic trong ràng buộc CHECK thì mới được chấp nhận
Cách 1 :
CREATE TABLE(
CHECK [ , ... ],
CONSTRAINT CHECK )
Cách 2 :
CREATE TABLE (
CONSTRAINT CHECK [ , ])
Cách 3 :
ALTER TABLE
ADD CONSTRAINT CHECK
PRIMARY KEY:
Cách 1 :
CREATE TABLE
( PRIMARY KEY [ , ], )
Cách 2 :
CREATE TABLE ( [ , ],
CONSTRAINTPRIMARY KEY(,, )
Cách 3 :
ALTER TABLE
ADD CONSTRAINTPRIMARYKEY(,,)
UNIQUE:
Cách 1 :
CREATE TABLE (UNIQUE[,....], )
Cách 2 :
CREATE TABLE (
CONSTRAINT UNIQUE, [,......] )
Cách 3 :
CREATE TABLE ( [,.........],
CONSTRAINT UNIQUE (,,.....))
Cách 4 :
ALTER TABLE
ADD CONSTRAINTUNIQUE,,...)
FOREIGN KEY:
Cách 1 :
CREATE TABLE
( REFERENCES ) [,...], )
Cách 2:
CREATE TABLE ( ,
CONSTRAINTREFERENCES()[,...])
Cách 3 :
CREATE TABLE([,...] , CONSTRAINT REFERENCES ([,.. ] ))
Cách 4 :
ALTER TABLE
ADD CONSTRAINTREFERENCES(, [,..])
TRUY VẤN DỮ LIỆU BẰNG PHÁT BIỂU SELECT :
Câu lệnh SELECT :
Câu lệnh SELECT trên một Table:
Cú pháp :
SELECT [ DISTINCT] [TOP n]
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Chú ý :
( % ) : Đại diện cho nhiều ký tự
( _ ) : Đại diện cho một ký tự
Câu lệnh SELECT trên nhiều table:
Hai table:
Cách 1:
SELECT
FROM T1,T2
WHERE
Cách 2 :
SELECT
FROM T1 [INNER] JOIN T2
ON
Chú ý: Có thể bỏ chữ INNER trên FROM
Kết nhiều hơn hai table:
Cách 1:
SELECT
FROM T1 , T2 , .......... , Tn
WHERE
Cách 2:
SELECT
FROM T1 [INNER] JOIN T2
ON[INNER] JOIN T3
ON. . .
Chú ý:
n table có ít nhất (n-1) điều kiện liên kết .
Thay đổi tiêu đề cột :
Cú pháp :
SELECT column_heading = column_name
FROM table_name
Biến đổi dữ liệu :
Các toán tử số học :
Kiểu dữ liệu
Phép toán +
Phép toán -
Phép toán chia (/)
Phép toán nhân (*)
Phép toán Module (%)
Bigint
Yes
Yes
Yes
Yes
Yes
Decimal
Yes
Yes
Yes
Yes
No
Float
Yes
Yes
Yes
Yes
No
Int
Yes
Yes
Yes
Yes
Yes
Money
Yes
Yes
Yes
Yes
No
Numeric
Yes
Yes
Yes
Yes
No
Real
Yes
Yes
Yes
Yes
No
Smallint
Yes
Yes
Yes
Yes
Yes
Smallmoney
Yes
Yes
Yes
Yes
No
Tinyint
Yes
Yes
Yes
Yes
Yes
Các hàm toán học thường dùng :
Các hàm toán học cho phép bạn thực hiện các phép toán cần thiết thông thường trên dữ liệu toán học . Bạn có thể trả về dữ liệu toán học bằng cách sử dụng cú pháp sau :
Cú pháp :
SELECT function_name(parameters)
Hàm
Kết quả
ABS (numeric_expr)
Giá trị tuyệt đối.
COS | SIN | COT | TAN(float_expr)
Là số cos , sin hoặc tan của góc (theo radian).
EXP(float_expr)
Giá trị mũ của giá trị xác định .
LOG(float_expr)
Số log tự nhiên .
LOG10(float_expr)
Log cơ số 10 .
PI( )
Hằng số 3.141592653589793.
POWER(numeric_expr , y )
Giá trị của numeric_expr lũy thừa y .
ROUND(numeric_expr , len )
Số numeric_expr làm tròn đến chiều dài xác định trong một số nguyên
SQUARE(float_expr)
Bình phương giá trị xác định .
SQRT(float_expr)
Căn của giá trị xác định .
Các hàm chuỗi thường dùng:
Bạn có thể trả về dữ liệu ký tự bằng cách sử dụng cú pháp sau :
Cú pháp : SELECT function_name(parameters)
Hàm
Kết quả
‘expr’+’ expr’
Kết nối hai hay nhiều chuỗi ký tự .
ASSCII(char_ expr)
Trả về giá trị mã ASSCII của ký tự sát bên trái .
CHAR(integer_ expr)
Trả về ký tự tương ứng với giá trị mã ASSCII
LEFT(char_ expr1,integer_ expr)
Trả về một chuỗi ký tự bắt đầu từ bên trái và đứng trước integer_ expr ký tự .
LOWER(char_ expr)
Chuyển thành chữ thường .
LTRIM(char_ expr)
Trả về dữ liệu không có khoảng trắng đằng trước .
REPLACE(‘string1’,’string2’,’string3’)
Thay thế tất cả lần xuất hiện string2 trong string1 bằng string3
RIGHT(char_ expr,integer_ expr)
Trả về một chuổi ký tự bắt đầu từ integer_expr ký tự tính từ bên phải .
RTRIM(char_ expr)
Trả về dữ liệu không có khoảng trắng ở đằng sau .
SPACE(integer_ expr)
Trả về một chuỗi lập lại integer_expr khoảng trắng .
SUBSTRING(expr , stary,length )
Trả về một phần chuổi ký tự hoặc chuỗi nhị phân .
UNICODE(‘nchar_string’)
Trả về giá trị số theo mã Unicode của ký tự đầu tiên trong ‘nchar_expr’
UPPER(char_ expr)
Chuyển thành chữ hoa .
Các hàm ngày tháng :
Bạn có thể biến đổi các giá trị thuộc kiểu datetime bằng cách sử dụng các hàm ngày tháng . Bạn có thể sử dụng các hàm ngày tháng trong column_list , mệnh đề WHERE hoặc bất kỳ biểu thức nào có thể được sử dụng . Để làm được như vậy , sử dụng cú pháp sau :
Cú pháp : SELECT date_name(parameters)
Hàm
Kết quả
DATEADD(datepart,number, date)
Thêm số datepart vào date.
DATEDIFF(datepart, date1, date2)
Trả về số datepart giữ hai ngày .
DATENAME(datepart, date)
Trả về giá trị ASCII cho giá trị datepart của ngày date.
DATEPART(datepart, date)
Trả về giá trị integer cho giá trị của datepart của ngày date .
DATE(date)
Trả về một giá trị số nguyên thể hiện ngày .
GETDATE()
Trả về ngày giờ hiện hành .
MONTH(date)
Trả về một giá trị số nguyên thể hiện tháng .
YEAR(date)
Trả về một giá trị số nguyên thể hiện năm
Chuyển đổi dữ liệu :
Bởi vì nhiều hàm yêu cầu dữ liệu theo một dạng hoặc kiểu dữ liệu nào đó , bạn có thể cần chuyển đổi từ một kiểu dữ liệu này sang kiểu dữ liệu khác . Bạn sử dụng hàm CONVER( ) hoặc CAST( ) để hiệu chỉnh các kiểu dữ liệu của bạn. Bạn có thể sử dụng hàm CONVERT( ) ở bất kỳ nơi nào biểu thức cho phép ; nó có cú pháp như sau :
Cú pháp : CONVERT (datatype [(length)], expr [,style])
Tương quan dữ liệu :
Kết nối trong (Inner join):
Các Inner Join tạo ra các thông tin khi thông tin so sánh tìm thấy trong cả hai bảng . Loại thông thường nhất của kết nối Inner Join là
+ Equijoin các giá trị cột được so sánh bằng nhau và các cột thừa được thể hiện là các cột trong tập kết .
+ Natural join các cột thừa không được thể hiện hai lần . Trong một Natural join , các giá trị cột được so sánh bằng nhau nhưng các cột dư thừa bị giới hạn từ các cột trong tập kết quả .
OUTER JOIN :
Bạn có thể trích xuất các dòng từ một bảng trong khi cho chép tất cả các dòng từ các bảng khác thành tập kết quả của bạn bằng cách sử dụng outer join . Các toán tử của outer join và các từ khóa của cú pháp ANSI như sau :
+ LEFT OUTER JOINT : Bao gồm tất cả các dòng từ bảng thứ nhất và chỉ các dòng so khớp trong bảng thứ hai .
+ RIGHT OUTER JOIN : Bao gồm tất cả các dòng từ bảng thứ hai và chỉ các dòng so khớp trong bảng thứ nhất.
+ FULL OUTER JOIN : Bao gồm tất cả các dòng từ hai bảng cũng như các dòng so khớp .
CROS hay UNRESTRICTED SELF JOIN :
Các kết nối chéo hoặc không giới hạn trả về một sự kết hợp của tất cả các dòng của tất cả các bảng trong kết nối thành tập kết quả .
Tự kết nối :
Một Self join liên kết các dòng của một bảng với các dòng khác trong cùng một bảng Các truy vấn so sánh đối với cùng thông tin được sử dụng hầu hết các kết nối tự kết (Self join).
Làm việc với các truy vấn con (Subquery) :
Một phép kết nối có thể được sử dụng thay cho truy vấn con ; Tuy nhiên , một số trường hợp đặc biệt chỉ có thể thực hiện câu truy vấn con . Một truy vấn con có thể chứa các truy vấn con khác và truy vấn con đó có thể chứa một truy vấn con khác Trong thực tế không có gì giới hạn số lượng các truy vấn con có thể được thực hiện trừ các tài nguyên của hệ thống .
Cú pháp :
(SELECT [ ALL | DISTINCT ] subquery_column_list
[FROM table_list]
[WHERE clause]
[GROUP BY clause]
[HAVING clause])
Bạn có thể tạo và sử dụng một truy vấn con theo các quy tắc sau :
+ Nó phải được đặt trong các dấu ngoặc đơn .
+ Nếu sử dụng khi một biểu thức giá trị đơn được sử dụng , nó phải trả về một giá trị đơn .
+ Nó không thể được sử dụng trong mệnh đề ORDER BY .
+ Nó không thể chứa một mệnh đề ORDER BY , COMPUTE hoặc SELECT INTO.
+ Nó không thể có nhiều hơn một cột trong column_list nếu sử dụng trong mệnh đề IN .
+ Nó phải có SELECT * nếu sử dụng với mệnh đề EXISTS.
+ Các kiểu dữ liệu Text và Image không cho phép có trong danh sách chọn (field) (ngoại trừ đối với việc sử dụng *)
+ Nó không thể bao gồm các mệnh đề GROUP BY và HAVING nếu sử dụng với một phép toán so sánh không biến đổi (một truy vấn không có bất kỳ từ khóa ANY hoặc ALL).
Phát biểu Select Into :
Phát biểu Select Into cho phép bạn tạo một bảng mới dựa trên các kết quả truy vấn .
Cú pháp :
SELECT column_list
INTO new_table_name
FROM table_name
WHERE search_criteria
Toán tử Union :
Bạn có thể kết nối các kết quả của hai hay nhiều truy vấn thành một tập kết quả đơn bằng cách sử dụng toán tử UNION
HIỆU CHỈNH DỮ LIỆU :
Chèn dữ liệu :
Phát biểu INSERT cơ bản ở một thời điểm thêm một dòng vào trong một bảng.
Cú pháp :
INSERT [ INTO ] { table_or_view }{{ [(column_list)]
VALUES
({DEFAULT | constant_expr}[,n]) | select_statement} | DEFAULT VALUES}
Table_or_view ::= { table_name | view_name | rowset_function} [, n]
Xóa dữ liệu :
Khi bạn sử dụng câu lệnh DELETE , bạn có thể gỡ bỏ một hoặc nhiều dòng từ một bảng .
Cú pháp :
DELETE [FROM]{table_name | view_name}
[WHERE clause]
Cập nhật dữ liệu :
Phát biểu UPDATE cho phép bạn thay đổi các giá trị của cột trong phạm vi các dòng có sẳn .
Cú pháp :
UPDATE
{table_name | view_name}
SET
Column_name1 ={expr | NULL | select_statement )}[, col_name2 = ]
[ WHERE search_conditions ]
SỬ DỤNG CÁC PHẦN MỞ RỘNG CỦA TRANSACT-SQL :
Sript :
Sau khi tạo các đối tượng như table, view,... trong 1 database. Ta có thể sử dụng SQL Server Enterprise Manager để lập sưu liệu cho database bằng cách tạo ra một hoặc nhiều Transact-SQL script. những script này sẽ chứa các câu lệnh để ta có thể dễ dàng tạo lại database và các đối tượng bên trong nó.
các bước để sinh script
+ Mở SQL Server Enterprise Manager
+ Chọn database muốn sinh script. bấm nút phải chuột trên database này, chọn All Task -> Generate SQL Scripts...
+ Trên tab Generate, mặc nhiên tất cả các đối tượng đều được đưa vào script, ta chọn lựa lại các đối tượng cần đưa vào scripts.
+ Có thể nút Preview... để xem trước kết quả sinh ra.
Chọn OK -> đặt lại tên cho file lưu lại (mặc nhiên phần mở rộng .sql)
Các thành phần của ngôn ngữ Control-of-flow :
Khối IF ELSE :
Khối If else cho phép một phát biểu được thực thi tùy theo điều kiện .
Cú pháp :
IF Boolean_expr
{sql_statement | statement_block}
ELSE[Boolean_expr]
{ sql_statement | statement_block}
Biểu thức CASE :
Biểu thức CASE cho phép các biểu thức T-SQL , được đơn giản so với giá trị điều kiện
Cú pháp :
CASE expr
WHEN expr1 THEN expr1
[[WHEN expr2 THEN expr2 ] []]
ELSE exprN
END
TẠO CHỈ MỤC :
tại sao phải dùng chỉ mục :
Có hai lý do chính để sử dụng chỉ mục là :
+ Tốc độ .
+ Chỉ mục tạo tính duy nhất .
Tạo chỉ mục :
CREATE[UNIQUE][CLUSTERED | NONCLUSTERED]INDEX Index_Name
ON Table ( column] [, ])
Xóa chỉ mục :
DROP INDEX table.Index_Name [, ]
TẠO VIEW , TRIGGER , STORE PROCEDURE VÀ FUNCTION
Tạo và thao tác trên View :
View là phương tiện cho phép ta lưu một câu truy vấn thành một đối tượng trong CSDL . Sau khi tạo xong ta có thể làm việc với view tương tự như với Table. Tuy nhiên view chỉ là một khung nhìn, dữ liệu thực sự chỉ chứa trong table mà thôi. Các View (bảng nhìn ) cho phép bạn chia ngang hoặc chia dọc thông tin từ một hoặc nhiều bảng trong một CSDL .
Tạo View :
Cú pháp :
CREATE VIEW View_name [(colunm1] [,])]
AS Select statement
Xóa View :
DROP VIEW View_Name [, ]
Điều chỉnhView :
ALTER VIEW View_name [(column] [, ])]
AS Select_statement
Làm việc với các thủ tục lưu trữ hệ thống :
Các thủ tục lưu trữ hệ thống là các tập lệnh T-SQL chạy nhanh được lưu trữ trong một CSDL của SQL Server . Các thủ tục lưu trữ hệ thống có rất nhiều lợi ích như :
+ Sau khi nó thực hiện , lược đồ của thủ tục được lưu trữ trong vùng đệm có thủ tục .
+ Bạn có thể sử dụng thủ tục lưu trữ hệ thống để đóng gói các quy tắc nghiệp vụ + Hiệu quả thực hiện được nâng lên cho tất cả các thủ tục lưu trữ hệ thống và thậm chí nhiều hơn so với các thủ tục lưu trữ hệ thống được chạy nhiều hơn một lần là do kế hoạch truy vấn được lưu trong vùng đệm thủ tục .
+ Với các thủ tục lưu trữ hệ thống , bạn có thể truyền đối số vào và nhận dữ liệu trả về .
+ Các thủ tục lưu trữ hệ thống có thể được thiết lập để chạy tự động .
+ Các thủ tục lưu trữ hệ thống có thể được sử dụng để trích xuất hoặc hiệu chỉnh dữ liệu .
+ Các thủ tục lưu trữ hệ thống được gọi một cách rõ ràng . Không giống như trigger , các thủ tục lưu trữ hệ thống phải được gọi bởi ứng dụng , script , batch , tác vụ của bạn .
Cú pháp :
CREATE PROC[ EDURE ] procedore_name {;number}
[{@parameter data_type} [ VARYING] [ = default] [ OUTPUT ]] [, n ]
[WITH { RECOMPILE | ENCRYTION | RECOMPILE ,ENCRYPTION} ]
[ FOR REPLICATION] AS sql_statement [ n]
Làm việc với Trigger :
Trigger là một loại thủ tục lưu trữ đặc biệt tự động thực hiện khi bạn cố hiệu chỉnh dữ liệu mà được thiết kế là được bảo vệ . Các Trigger bảo đảm toàn vẹn dữ liệu bằng cách bảo vệ các sự thay đổi không nhất quán và không được phép .
Bạn có thể sử dụng các trigger để thực hiện các quy tắc nghiệp vụ phức tạp hơn là bạn có thể làm với các ràng buộc .Các trigger không có thông số và không thể được thực thi rõ ràng . Bạn có thể lồng các trigger tới 32 cấp .
Về mặc hiệu quả , các trigger có tổng phí tương đối thấp vì hầu hết thời gian thực hiện của trigger là được sử dụng cho việc tham chiếu các bảng khác .
Cú pháp :
CREATE TRIGGER [ower.] trigger_name
ON [ower.] table_name | view_name
[ FOR . . ALTER | INSTEAD OF | INSERT | UPDATE | DELETE
[ WITH ENCRYPTION] AS sql_statement
Làm việc với các hàm do người dùng định nghĩa :
Một tính năng mạnh của SQL Server 2000 là hàm do người dùng định nghĩa (UDF) . Bạn có thể tạo một UDF để trả về một giá trị vô hướng (một giá trị đơn) hoặc một bảng .
Các hàm vô hướng :
Hầu hết các hàm không phức tạp để tạo và làm việc với các hàm vô hướng .
Cú pháp :
CREATE FUNCTION [owner_name.]function_name
([{@parameter_name scalar_parameter_data_type [= default]} [ , n]])
RETURN scalar_returnt_data_type
[WITH ENCRYPTION | SCHEMABINDING] [ AS ]
RETUNR [ ( ] select_statement [ ) ]
Các hàm Inline Table – Value :
So với hai hàm của bảng , hàm inline table – value đơn giản hơn :
Cú pháp :
CREATE FUNCTION [owner_name.]function_name
([{@parameter_name scalar_parameter_data_type [= default]} [ , n]])
RETURN TABLE
[WITH ENCRYPTION | SCHEMABINDING] [ AS ]
RETUNR [ ( ] select_statement [ ) ]
Các hàm Multistatement Table – Value :
Bạn sử dụng các hàm multistatement table – Value để trả về một bảng
Cú pháp :
CREATE FUNCTION [owner_name.]function_name
([{@parameter_name scalar_parameter_data_type [= default]} [ , n]])
RETURN @return_variable TABLE Table_type_definition
[WITH ENCRYPTION | SCHEMABINDING] [ AS ]
BEGIN
Function_body
Return [ ( ]select_statement[ ) ]
END
RETUNR [ ( ] select_statement [ ) ]
PHẦN II. PHÂN TÍCH THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH
PHÂN TÍCH ĐỀ TÀI :
Đặt tả sơ lược hệ thống xây dựng chương trình thi trắc nghiệm :
Hiện nay , hình thức thi trắc nghiệm đã được Bộ Giáo Dục và đào tạo khuyến khích đưa vào sử dụng trong các trường , lớp . Tổ chức các cuộc thi trắc nghiệm như thế rất cần thiết để đánh giá đúng khả năng và kiến thức của học viên .
Hệ thống này sẽ tạo ra công cụ cho Giáo Viên soạn câu hỏi trắc nghiệm và công cụ hổ trợ Giáo Viên soạn đề thi . Sinh Viên sẽ thi trực tiếp trên máy Client và hệ thống sẽ tự chấm điểm . Điểm thi sẽ được hệ thống công bố liền hoặc được công bố sau . Giáo Vụ sẽ lên danh sách sinh viên dự thi của các môn thi và qui định bộ đề thi của sinh viên lấy từ ngân hàng đề thi . Nếu Giáo Vụ không qui định bộ đề thi thì sinh viên sẽ thi trực tiếp từ ngân hàng đề . Sinh Viên đến dự thi đúng lịch thi , và thi trực tiếp trên máy tính Client . Sau khi thi xong hệ thống sẽ tính toán điểm thi , cập nhật điểm thi và bài làm của sinh viên vào cơ sở dữ liệu trên máy . Để đảm bảo tính công bằng của cuộc thi , các đề thi của sinh viên đều được hệ thống hoán đổi ngẫu nhiên vị trí các câu hỏi và câu trả lời của đề thi đó .
Sau khi thi xong dữ liệu được cập nhật về Sever
SEVER
Chứa CSDL của chương trình
Thí sinh tiến hành thi trắc nghiệm trên các CLIENT
Phân tích hệ thống Thi Trắc Nghiệm bằng Rational Rose :
Xây dựng Use_Case Diagram :
Nhận diện các actor và các trường hợp sử dụng :
Qua đặt tả hệ thống ở trên ta xác định các actor sau tác động đến hệ thống :
Giáo Viên , Sinh Viên , Giáo Vụ , Người quản lý thông số hệ thống
Sơ đồ Use_Case diagram cho từng actor :
Xây dựng Class Diagram :
Nhận diện các đối tượng /lớp và các Package:
Hệ thống này dễ dàng nhận thấy những đối tượng : Sinh viên , Giáo viên , GiáoViênDạy , Lớp , Môn ,KỳThi , CâuHỏi , CâuTrảLời ,ĐềThi ,Câu Hỏi Đề Thi , BộĐềRaThi ,Câu Trả Lời Đề Thi , DSSVDựThi , CâuHỏiBàiLàm , CâuTrảLờiBàiLàm , GiáoViênCoiThi , Users , Groups . Ngoài ra còn có các đối tượng tạo ra cửa sổ giao tiếp với các Actor có stereotype là > :
+ Lớp LoginForm tạo cửa sổ để Actor truy cập theo quyền của mình .
+ Lớp MainFormtạo cửa sổ Menu chính .
+ Lớp DanhMụcMônHọc Form tạo cửa sổ để Actor xem danh mục môn học
+ Lớp QuảnLýDanhMụcMônHọc Form tạo cửa sổ để Actor chỉnh sửa môn học
+ Lớp DanhMụcLớpHọcFormtạo cửa sổ để Actor xem danh mục lớp .
+ Lớp QuảnLýDanhMụcLớpHọcForm tạo cửa sổ để Actor chỉnh sửa lớp học .
+ Lớp DanhSáchSinhViênForm tạo cửa sổ để Actor xem danh sách SinhViên
+ Lớp QuảnLýDanhSáchSinhViênForm tạo cửa sổ để Actor chỉnh sửa DSSV
+ Lớp DanhSáchGiáoViênForm tạo cửa sổ để Actor xem DSGV
+ Lớp QuảnLýDanhSáchGiáoViênForm tạo cửa sổ để Actor chỉnh sửa GiáoViên
+ Lớp QuảnLýMônDạyGiáoViênForm tạo cửa sổ để Actor chỉnh sửa Môn của GV
+ Lớp DanhMụcCâuHỏiForm tạo cửa sổ để Actor xem danh mục câu hỏi
+ Lớp QuảnLýDanhMụcCâuHỏiForm tạo cửa sổ để Actor chỉnh sửa câu hỏi
+ Lớp DanhMụcĐềThiForm tạo cửa sổ để Actor xem danh mục đề thi
+ Lớp QuảnLýDanhMụcĐềThiForm tạo cửa sổ để Actor chỉnh sửa đề thi
+ Lớp TạoĐềThiForm tạo cửa sổ để Actor tạo đề thi .
+ Lớp DanhMụcKỳThiForm tạo cửa sổ để Actor xem danh mục kỳ thi
+ Lớp QuảnLýDanhMụcKỳThiForm tạo cửa sổ để Actor chỉnh sửa kỳ thi
+ Lớp DanhSáchSinhViênDựThiForm tạo cửa sổ để Actor xem DSSV dự thi
+ Lớp QuảnLýDanhSáchSinhViênDựThiForm tạo cửa sổ để Actor chỉnh sửa DSSV dự thi
+ Lớp DanhMụcBộĐềThiForm tạo cửa sổ để Actor xem danh mục bộ đề thi
+ Lớp QuảnLýDanhMụcBộĐềThiForm tạo cửa sổ để Actor chỉnh sửa bộ đề thi
+ Lớp DanhSáchGiáoViênCoiThiForm tạo cửa sổ để Actor xem DSGV coi thi
+ Lớp QuảnLýDanhSáchGiáoViênCoiThiForm tạo cửa sổ để Actor chỉnh sửa DSGV coi thi
+ Lớp KếtQuảThiForm tạo cửa sổ để Actor xem kết quả thi
+ Lớp BàiLàmSinhViênForm tạo cửa sổ để Actor xem bài làm sinh viên
+ Lớp ĐổiMậtKhẩuForm tạo cửa sổ để Actor đổi mật khẩu
+ Lớp QuảnLýThôngSốForm tạo cửa sổ để Actor chỉnh sửa thông số hệ thống
+ Lớp LịchThiForm tạo cửa sổ để Actor xem lịch thi
+ Lớp ThiForm tạo cửa sổ để Actor làm bài thi .
+ Lớp ĐăngKýThiForm tạo cửa sổ để Actor đăng ký dự thi
Ngoài ra còn xuất hiện lớp Database có stereotype là > có chức năng giao tiếp với cơ sở dữ liệu để thực hiện các tác vụ cập nhật dữ liệu
Class Diagram:
Nhận diện các mối quan hệ giữa các lớp:
Quan hệ giữa các lớp giao diện với lớp Database là dependency . Sử dụng các stereotype > giữa LoginForm với các lớp giao diện khác . Trong khi quan hệ dependency giữa chúng có tereo là > . Ta tạo ra 2 packge là :
* Packge Interface để quản lý tất cả các giao diện giao tiếp với người dùng gồm hai class diagram chính là :
+ Class diagram QuảnLýDữLiệu gồm tất cả các giao diện có liên quan đến cơ sở dữ liệu và chứa các lớp : Login Form , Main From , Danh Mục Môn Học Form , Quản Lý Danh Mục Môn Học Form , Danh Mục Lớp Học Form , Quản Ly ùDanh Mục Lớp Học Form , Danh Sách Sinh Viên Form , Quản Lý Danh Sách Sinh Viên Form , Danh Sách Giáo Viên Form , Quản Lý Danh Sách Giáo Viên Form , Quản Lý Môn Dạy Giáo Viên Form , Danh Mục Câu Hỏi Form , Quản Lý Danh Mục Câu Hỏi Form , Danh Mục Đề Thi Form , Quản Lý Danh Mục Đề Thi Form , Tạo Đề Thi Form , Danh Mục Kỳ Thi Form , Quản Lý Danh Mục Kỳ Thi Form , Danh Sách Sinh Viên Dự Thi Form , Quản Lý Danh Sách Sinh Viên Dự Thi Form , Danh Mục Bộ Đề Thi Form , Quản Lý Danh Mục Bộ Đề Thi Form , Danh Sách Giáo Viên Coi Thi Form , Quản Lý Danh Sách Giáo Viên Coi Thi Form , Bài Làm Sinh Viên Form , Quản Lý Thông Số Form
+ Class diagram Thi gồm các giao diện cho Sinh Viên thi và chứa các lớp :
ĐổiMậtKhẩuForm , KếtQuảThiForm , LịchThiForm , ThiForm , ĐăngKýThiForm
* Packge Data gồm : SinhViên,GiáoViên,GiáoViênDạy,Lớp,Môn,KỳThi,Câu Hỏi,CâuTrảLời,ĐềThi,CâuHỏiĐềThi,BộĐềRaThi,CâuTrảLờiĐềThi,DSSVDự Thi,CâuHỏiBàiLàm,CâuTrảLờiBàiLàm,GiáoViênCoiThi,Users,Groups .
Sơ đồ class diagram :
+ Sơ đồ Class diagram của package Data :
+ Sơ đồ Class diagram của Quản Lý Dữ Liệu trong package Interface :
+ Sơ đồ Class diagram Sinh Viên thi trong package Interface :
Xây dựng Sequence Diagram :
Các Sequence Diagram của GiáoVụ :
Xét UseCase QuảnLýBộĐềThi:
Giáo vụ đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo vụ sẽ chọn form QuảnLýBộĐềThi.
Trong Form QuảnLýBộĐềThi Giáo Vụ sẽ chọn Kỳ Thi , Môn Thi , Giáo Viên ra đề thi. Hệ thống load các đề thi lên form.Giáo Vụ sẽ chọn các đề thi ra thi . Giáo Vụ hoàn thành việc chọn thì hệ thống sẽ lưu lại các đề thi vừa mới chọn vào Bộ đề thi trong cơ sở dữ liệu .
+ Sequence Diagram QuảnLýBộĐềThi:
Xét UseCase QuảnLýDSSVDựThi:
Giáo vụ đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo vụ sẽ chọn form QuảnLýDSSVDự Thi . Giáo vụ sẽ chọn Môn , chọn kỳ thi , nhập ngày giờ và chọn các sinh viên dự thi . Hệ thống sẽ thêm danh sách Sinh Viên dự thi vào cơ sở dữ liệu.
+ Sequence Diagram QuảnLýDSSVDựThi :
Xét UseCase ThêmSV:
Giáo vụ đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo vụ sẽ chọn form QuảnLýDanhSách SinhViên . Giáo vụ sẽ nhập mã số sinh viên , họ , tên , phái , địa chỉ, Ngày sinh , username , password và chọn lớp của sinh viên . Hệ thống sẽ thêm SV vào CSDL.
+ Sequence Diagram ThêmSV :
Xét UseCase SửaThôngTinSV:
Giáo vụ đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo vụ sẽ chọn form Quản Lý Sinh Viên . Giáo vụ chọn Sinh Viên cần sửa và nhập lại thông tin SV gồm : Mã Số Sinh Viên , Họ , Tên , Phái , Địa Chỉ, Ngày inh , username , password và chọn lớp của sinh viên Hệ thống sẽ cập nhật lại Sinh Viên này vào cơ sở dữ liệu.
+ Sequence Diagram SửaThôngTinSV
Xét UseCase QuảnLýDSGVCoiThi :
Giáo vụ đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo vụ sẽ chọn form QuảnLýDSGVCoiThi . Giáo vụ sẽ chọn kỳ thi và chọn các Giáo Viên coi thi . Hệ thống sẽ thêm danh sách Giáo Viên coi thi vào cơ sở dữ liệu.
+ Sequence Diagram QuảnLýDSGVCoiThi
Các Sequence Diagram của GiáoViên :
Xét UseCase ĐổiMậtKhẩu:
Giáo Viên đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo Viên sẽ chọn form ĐổiMậtKhẩu
Giáo viên nhập mật khẩu mới . Hệ thống sẽ cập nhật lại Giáo Viên này vào cơ sở dữ liệu.
+ Sequence Diagram ĐổiMậtKhẩu :
Xét UseCase ThêmCâuHỏi:
Giáo Viên đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo Viên sẽ chọn form Quản Lý Danh Mục Câu Hỏi.Giáo Viên chọn Môn , hệ thống sẽ kiểm tra môn này Giáo Viên có dạy không . Nếu có Giáo Viên sẽ nhập thông tin Câu hỏi . Hệ thống sẽ thêm Câu Hỏi vào cơ sở dữ liệu .
+ Sequence Diagram ThêmCâuHỏi :
Xét UseCase Xóa Câu Hỏi :
Giáo Viên đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo Viên sẽ chọn form Quản Lý Câu Hỏi . Giáo viên sẽ chọn câu hỏi cần xóa . Hệ thống sẽ kiểm tra cho xóa không , và thông báo cho Giáo viên . Nếu hệ thốâng cho phép và Giáo viên đồng ý thì hệ thống sẽ xóa Câu Hỏi này trong CSDL .
+ Sequence Diagram Xóa Câu Hỏi :
Xét UseCase ThêmĐềThi
Giáo Viên đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form Mainenu sẽ được kích hoạt , từ form này Giáo Viên sẽ chọn form ThêmĐềThi Giáo viên sẽ chọn Môn và nhập thông tin đề thi . Hệ thống sẽ phát sinh đề theo yêu cầu của Giáo Viên và sau đó thêm Đề Thi này vào cơ sở dữ liệu .
+ Sequence Diagram ThêmĐềThi
Các Sequence Diagram của SinhViên :
Xét UseCase Thi :
Sinh Viên đăng nhập vào hệ thống bằng username và password của mình . Hệ thống sẽ kiểm tra trong cơ sở dữ liệu việc đăng nhập có hợp lệ không và nếu hợp lệ form MainMenu sẽ được kích hoạt , từ form này Sinh Viên sẽ chọn form Đăng Ký Thi. Sinh viên chọn môn , chọn kỳ thi . Hệ thống sẽ kiểm tra xem Sinh Viên này có được thi hay không . Nếu được thì hệ thống sẽ kích hoạt From thi .Sau khi hoàn tất bài thi , hệ thống sẽ tính điểm và lưu bài thi vào cơ sở dữ liệu.
+ Sequence Diagram Thi :
Chọn mô hình cài đặt về cơ sở dữ liệu :
Có hai phương pháp lựa chọn : Dữ liệu tập trung và dữ liệu phân tán . Ta chọn phương pháp cơ sở dữ liệu tập trung vì :
+ Khối lượng dữ liệu không lớn
+ Số lượng thí sinh và giáo viên chủ yếu tập trung trong phạm vi nhà trường .
+ Quản lý đào tạo tại nước ta vẫn là hình thức tập trung tại một cơ sở chính . Nếu có nhiều cơ sở thường thì chỉ trong bán kính nhỏ .
THIẾT KẾ CHƯƠNG TRÌNH
SQL Server 2000 thích hợp để làm DBMS cho chương trình này vì :
+ Cơ sở dữ liệu ở đây trung bình .
+ SQL Server 2000 có thể chạy trong các hệ điều hành Windows NT 4.0 (từ Srevice Pack 5 trở đi) , Windows 2000 , Windows 98 hoặc Windows Me và có thể sử dụng với hệ điều hành Windows CE .
+ SQL Server của Microsoft là một phương tiện cơ sở dữ liệu Client/Server .
Từ điển dữ liệu :
SINHVIENID
Mã Sinh Viên
MASINHVIEN
Mã số Sinh Viên
LOPID
Mã Lớp
HO
Họ
TEN
Tên
PHAI
Phái
NGAYSINH
Ngày Sinh
DIACHI
Địa Chỉ
MALOP
Mã Số Lớp
TENLOP
Tên Lớp
MONID
Mã Môn
MAMON
Mã số môn
TENMON
Tên môn
SODVHT
Số đơn vị học tập
KYTHIID
Mã kỳ thi
MAKYTHI
Mã số kỳ thi
TENKYTHI
Tên kỳ thi
GIAOVIÊNID
Mã Giáo Viên
MAGIAOVIEN
Mã số GV
DIENTHOAI
Điện Thọai
CHUCDANH
Chức Danh
ACTIVE
Nghĩ/còn dạy
CAUHOIID
Mã câu hỏi
NOIDUNG
Nội dung
MUCDO
Mức độ
DETHIID
Mã đề thi
THOIGIANLAMBAI
Thời gian làm bài
SOCH
Số Câu Hỏi
CAUTRALOIID
Mã Câu Trả Lời
NOIDUNG
Nội Dung
STT
Số thứ tự câu hỏi
CAUTRALOIIDCHON
Mã câu trả lời
BAILAMID
Mã bài làm
DIEM
Điểm Thi
NGAYTHI
Ngày Thi
GROUPID
Mã nhóm
TENGROUP
Tên Nhóm
USERID
Mã User
USERNAME
Tên Đăng Nhập
PASSWORDS
Mật Khẩu
CAUTRALOIDUNG
Câu Trả Lời Đúng
Mô tả các Table :
SINHVIEN ( SINHVIENID , MASINHVIEN , LOPID , HO , TEN , PHAI , NGAYSINH , DIACHI , USERID)
FieldName
Keys
Data Type
Size
Allow Nulls
SINHVIENID
Khóa
Numeric
9
MASINHVIEN
Varchar
15
Not null
LOPID
Numeric
9
Not null
HO
Varchar
50
Not null
TEN
Varchar
50
Not null
PHAI
Bit
1
Not null
NGAYSINH
Date/Time
8
Not null
DIACHI
Varchar
50
Null
USERID
Numeric
9
Not null
LOP ( LOPID , MALOP , TENLOP )
Field Name
Keys
Data Type
Size
Allow Nulls
LOPID
Khóa
Numeric
9
MALOP
Varchar
15
Not null
TENLOP
Varchar
50
Not null
MON (MONID, MAMON , TENMON , SDVHT )
Field Name
Keys
Data Type
Size
Allow Nulls
MONID
Khóa
Numeric
9
MAMON
Varchar
15
Not null
Ten MON
Varchar
50
Not null
SODVHT
Integer
4
Not null
KYTHI ( KYTHIID , MAKYTHI , TENKYTHI)
Field Name
Keys
Data Type
Size
Allow Nulls
KYTHIID
Khóa
Numeric
9
MAKYTHI
Varchar
15
Not null
TENKYTHI
Varchar
50
Not null
GIAOVIEN (MAGV ID, MAGIAOVIEN, HO , TEN , PHAI , DIA CHI , DIENTHOAI , CHỨC DANH , ACTIVE , UERID )
Field Name
Keys
Data Type
Size
Allow Nulls
GIAOVIÊNID
Khóa
Numeric
9
MAGIAOVIEN
Varchar
15
Not null
HO
Varchar
50
Not null
TEN
Varchar
20
Not null
PHAI
Bit
1
Not null
DIACHI
Varchar
50
Not null
DIENTHOAI
Varchar
20
null
CHUCDANH
Varchar
50
Not null
ACTIVE
Bit
1
Not null
USERID
Numeric
9
Not null
GIAOVIENDAY (GIAOVIENID , MONID )
Field Name
Keys
Data Type
Size
Allow Nulls
GIAOVIENID
Khóa
Numeric
9
Not null
MONID
Khóa
Numeric
9
Not null
CAUHOI ( CAUHOIID , MONID , GIAOVIENID, NOIDUNG , MUCDO , CAUTRALOIDUNGID )
Field Name
Keys
Data Type
Size
Allow Nulls
CAUHOIID
Khóa
Numeric
9
MONID
Numeric
9
Not null
GIAOVIENID
Numeric
9
Not null
NOIDUNG
Varchar
200
Not null
MUCDO
Integer
4
Not null
CAUTRALOIDUNGID
Numeric
9
Null
CAUTRALOI ( CAUTRALOIID , CAUHOIID , NOIDUNG )
Field Name
Keys
DataType
Size
Allow Nulls
CAUTRALOIID
Khóa
Numeric
9
Not null
CAUHOIID
Numeric
9
Not null
NOIDUNG
Varchar
60
Not null
DETHI ( DETHIID , MONID, GIAOVIENID , THOIGIANLAMBAI , SOCH )
Field Name
Keys
DataType
Size
Allow Nulls
DETHIID
Khóa
Numeric
9
MONID
Numeric
9
Not null
GIAOVIENID
Numeric
9
Not null
THOIGIANLAMBAI
Integer
4
Not null
SOCH
Integer
4
Not null
CAUHOIDETHI ( CAUHOIID , DETHIID , NOIDUNG , MUCDO , CAUTRALOIDUNGID )
Field Name
Keys
Data Type
Size
Allow Nulls
CAUHOIID
Khóa
Numeric
9
Not null
DETHIID
Numeric
9
Not null
NOIDUNG
Varchar
200
Not null
MUCDO
Integer
4
Not null
CAUTRALOIDUNGID
Numeric
9
Null
BODERATHI ( DETHIID ,KYTHIID )
Field Name
Keys
Data Type
Size
Allow Nulls
DETHIID
Khóa
Numeric
9
Not null
KYTHIID
Khóa
Numeric
9
Not null
CAUTRALOIDETHI (CAUTRALOIID , CAUHOIID , NOIDUNG )
Field Name
Keys
Data Type
Size
Allow Nulls
CAUTRALOIID
Khóa
Numeric
9
Not null
CAUHOIID
Numeric
9
Not null
NOIDUNG
Varchar
60
Not null
CAUHOIBAILAM (BAILAMID , CAUHOIID, STT, CAUTRALOIIDCHON)
Field Name
Keys
Data Type
Size
Allow Nulls
STT
Numeric
9
Not null
CAUHOIID
Khóa
Numeric
9
Not null
CAUTRALOIIDCHON
Numeric
9
Null
BAILAMID
Khóa
Numeric
9
Not null
CAUTRALOIBAILAM (STT, CAUTRALOIID, BAILAMID)
Field Name
Keys
Data Type
Size
Allow Nulls
STT
Numeric
9
Not null
CAUTRALOIID
Khóa
Numeric
9
Not null
BAILAMID
Khóa
Numeric
9
Not null
DSSVDUTHI ( MONID , SINHVIENID , KYTHIID , BAILAMID , DETHIID , DIEM , NGAYTHI )
Field Name
Keys
Data Type
Size
Allow Nulls
MONID
Khóa
Numeric
9
Not null
SINHVIENID
Khóa
Numeric
9
Not null
KYTHIID
Khóa
Numeric
9
Not null
BAILAMID
Numeric
9
Not null
DETHIID
Numeric
9
Not null
DIEM
Integer
4
Not null
NGAYTHI
Date / time
8
Not null
GROUPS (GROUPID , TENGROUP)
Field Name
Keys
Data Type
Size
Allow Nulls
GROUPID
Khóa
Numeric
9
TENGROUP
Varchar
50
Not null
USERS ( USERID , USERNAME , PASSWORDS , GROUPID )
Field Name
Keys
Data Type
Size
Allow Nulls
USERID
Khóa
Numeric
9
Not null
USERNAME
Varchar
50
Not null
PASSWORDS
Varchar
50
Not null
GROUPID
Numeric
9
Not null
GIAOVIENCOITHI (GIAOVIENID , KYTHIID , MONID)
Field Name
Keys
Data Type
Size
Allow Nulls
GIAOVIENID
Khóa
Numeric
9
Not null
KYTHIID
Khóa
Numeric
9
Not null
MONID
Khóa
Numeric
9
Not null
Ràng buột toàn vẹn :
RBTV có bối cảnh trên một lược đồ quan hệ
RBTV về miền giá trị :
R1 : " m Ỵ MON
m.DVHT > 0
Tầm ảnh hưởng :
R1
Thêm
Xóa
Sửa
MON
+
-
+
R2 : " sv Ỵ SINHVIEN
sv.NGAYSINH < GETDATE ( )
Tầm ảnh hưởng :
R2
Thêm
Xóa
Sửa
SINHVIEN
+
-
+
R3 : " dt Ỵ DETHI
dt.THOIGIANLAMBAI >0
R4 : " dt Ỵ DETHI
dt.SOCAUHOI >0
Tầm ảnh hưởng :
R3,4
Thêm
Xóa
Sửa
DETHI
+
-
+
R 5 : " d Ỵ DSSVDUTHI
d.DIEM BETWEEN 0 AND 10
R 6 : " d Ỵ DSSVDUTHI
d.NGAYTHI > = GETDATE ( )
Tầm ảnh hưởng :
R5,6
Thêm
Xóa
Sửa
DSSVDUTHI
+
-
+
R 7 : " ch Ỵ CAUHOI
ch.MUCDO BETWEEN 1 AND 3
( MUCDO = 1 : Khó , 2: Trung Bình , 3: Dễ )
Tầm ảnh hưởng :
R7
Thêm
Xóa
Sửa
CAUHOI
+
-
+
R 8 : " chdt Ỵ CAUHOIDETHI
chdt.MUCDO BETWEEN 1 AND 3
( MUCDO = 1 : Khó , 2: Trung Bình , 3: Dễ )
Tầm ảnh hưởng :
R8
Thêm
Xóa
Sửa
CAUHOIDETHI
+
-
+
RBTV liên bộ (khóa nội ) :
R9 : " sv1 ¹ sv2 Ỵ SINHVIEN
sv1.SINHVIENID ¹ sv2.SINHVIENID
R10 : " sv1 ¹ sv2 Ỵ SINHVIEN
sv1.MASINHVIEN ¹ sv2.MASINHVIEN
R11 : " sv1 ¹ sv2 Ỵ SINHVIEN
sv1.USERID ¹ sv2.USERID
R12 : " lop1 ¹ lop2 Ỵ LOP
lop1.LOPID ¹ lop2.LOPID
R13 : " lop1 ¹ lop2 Ỵ LOP
lop1.MALOP ¹ lop2.MALOP
R14 : " m1 ¹ m2 Ỵ MON
m1.MONID ¹ m2.MONID
R15 : " m1 ¹ m2 Ỵ MON
m1.MAMON ¹ m2.MAMON
R16 : " k1 ¹ k2 Ỵ KYTHI
k1.KYTHIID ¹ m2.KYTHIID
R17 : " k1 ¹ k2 Ỵ KYTHI
k1.MAKYTHI ¹ m2.MAKYTHI
R18 : " gv1 ¹ gv2 Ỵ GIAOVIEN
gv1. GIAOVIENID ¹ gv2. GIAOVIENID
R19 : " gv1 ¹ gv2 Ỵ GIAOVIEN
gv1.MAGIAOVIEN ¹ gv2.MAGIAOVIEN
R20 : " gv1 ¹ gv2 Ỵ GIAOVIEN
gv1.USERID ¹ gv2.USERID
R21 : " gvd1 ¹ gvd2 Ỵ GIAOVIENDAY
gvd1.GIAOVIENID ¹ gvd2.GIAOVIENID OR
gvd1.MONID ¹ gvd2.MONID
R22 : " ch1 ¹ ch2 Ỵ CAUHOI
ch1.CAUHOIID ¹ ch2.CAUHOIID
R23 : " ctl1 ¹ ctl2 Ỵ CAUTRALOI
ctl1. CAUTRALOIID ¹ ctl2.CAUTRALOIID
R24 : " dt1 ¹ dt2 Ỵ DETHI
dt1. DETHIID ¹ dt2.DETHIID
R25 : " chdt1 ¹ chdt2 Ỵ CAUHOIDETHI
chdt1.CAUHOIID ¹ ch2dt.CAUHOIID
R26 : " bd1 ¹ bd2 Ỵ BODERATHI
bd1.DETHIID ¹ bd2.DETHIID OR
bd1.KYTHIID ¹ bd2.KYTHIID
R27 : " ctldt1 ¹ ctldt2 Ỵ CAUTRALOIDETHI
ctldt1. CAUTRALOIID ¹ ctldt2.CAUTRALOIID
R28 : " chbl1 ¹ chbl2 Ỵ CAUHOIBAILAM
chbd1.CAUHOIID ¹ chbd2.CAUHOIID OR
chbd1.BAILAMID ¹ chbd2.BAILAMID
R29 : " chbl1 ¹ chbl2 Ỵ CAUHOIBAILAM
chbd1.STT ¹ chbd2.STT OR
chbd1.BAILAMID ¹ bd2.BAILAMID
R30 : " ctlbl1 ¹ ctlbl2 Ỵ CAUTRALOIBAILAM
chtld1.CAUTRALOIID ¹ chbd2. CAUTRALOIID OR
ctlbd1.BAILAMID ¹ ctlbd2.BAILAMID
R31 : " dssvdt1 ¹ dssvdt2 Ỵ DSSVDUTHI
dssvdt1.MONID ¹ dssvdt2. MONID OR
dssvdt1.SINHVIENID ¹ dssvdt2.SINHVIENID OR
dssvdt1.KYTHIID ¹ dssvdt2. KYTHIID
R32 : " dssvdt1 ¹ dssvdt2 Ỵ DSSVDUTHI
dssvdt1.BAILAMID ¹ dssvdt2. BAILAMID
R33 : " gvct1 ¹ gvct2 Ỵ GIAOVIENCOITHI
gvct1.GIAOVIENID ¹ gvct2. GIAOVIENID OR
gvct1.KYTHIID ¹ gvct2. KYTHIID OR
gvct1.MONID ¹ gvct2. MONID
R34 : " u1 ¹ u2 Ỵ USERS
u1.USERID ¹ u2.USERID
R35 : " u1 ¹ u2 Ỵ USERS
u1.USERNAME ¹ u2.USERNAME
R36 : " g1 ¹ g2 Ỵ GROUPS
g1. GROUPID ¹ g2. GROUPID
RBTV có bối cảnh trên nhiều lược đồ quan hệ
RBTV phụ thuộc tồn tại (khóa ngoại ) :
R37 : " sv Ỵ SINHVIEN
$ lop Ỵ LOP : sv.LOPID = lop.LOPID
Tầm ảnh hưởng :
R37
Thêm
Xóa
Sửa
SINHVIEN
+
-
+
LOP
-
+
+
R38 : " sv Ỵ SINHVIEN
$ u Ỵ USERS : sv.USERID = u.USERID
Tầm ảnh hưởng :
R38
Thêm
Xóa
Sửa
SINHVIEN
+
-
+
USERS
-
+
+
R39 : " gv Ỵ GIAOVIEN
$ u Ỵ USERS : gv.USERID = u.USERID
Tầm ảnh hưởng :
R39
Thêm
Xóa
Sửa
GIAOVIEN
+
-
+
USERS
-
+
+
R40 : " gvd Ỵ GIAOVIENDAY
$ gv Ỵ GIAOVIEN : gvd.GIAOVIENID = gv.GIAOVIENID
Tầm ảnh hưởng :
R40
Thêm
Xóa
Sửa
GIAOVIENDAY
+
-
+
GIAOVIEN
-
+
+
R41 : " gvd Ỵ GIAOVIENDAY
$ m Ỵ MON : gvd.MONID = m.MONID
Tầm ảnh hưởng :
R41
Thêm
Xóa
Sửa
GIAOVIENDAY
+
-
+
MON
-
+
+
R42 : " ch Ỵ CAUHOI
$ gv Ỵ GIAOVIEN : ch.GIAOVIENID = gv.GIAOVIENID
Tầm ảnh hưởng :
R42
Thêm
Xóa
Sửa
CAUHOI
+
-
+
GIAOVIEN
-
+
+
R43 : " ch Ỵ CAUHOI
$ m Ỵ MON : ch.MONID = m.MONID
Tầm ảnh hưởng :
R43
Thêm
Xóa
Sửa
CAUHOI
+
-
+
MON
-
+
+
R44 : " ctl Ỵ CAUTRALOI
$ ch Ỵ CAUHOI : ctl.CAUHOIID = ch.CAUHOIID
Tầm ảnh hưởng :
R44
Thêm
Xóa
Sửa
CAUTRALOI
+
-
+
CAUHOI
-
+
+
R45 : " dt Ỵ DETHI
$ gv Ỵ GIAOVIEN : dt.GIAOVIENID = gv.GIAOVIENID
Tầm ảnh hưởng :
R45
Thêm
Xóa
Sửa
DETHI
+
-
+
GIAOVIEN
-
+
+
R46 : " dt Ỵ DETHI
$ m Ỵ MON : dt.MONID = m.MONID
Tầm ảnh hưởng :
R46
Thêm
Xóa
Sửa
DETHI
+
-
+
MON
-
+
+
R47 : " chdt Ỵ CAUHOIDETHI
$ dt Ỵ DETHI : chdt.DETHIID = dt.DETHIID
Tầm ảnh hưởng :
R47
Thêm
Xóa
Sửa
CAUHOIDETHI
+
-
+
DETHI
-
+
+
R48 : " bd Ỵ BODERATHI
$ dt Ỵ DETHI : bd.DETHIID = dt.DETHIID
Tầm ảnh hưởng :
R48
Thêm
Xóa
Sửa
BODERATHI
+
-
+
DETHI
-
+
+
R49 : " bd Ỵ BODERATHI
$ kt Ỵ KYTHI : bd.KYTHIID = kt.KYTHIID
Tầm ảnh hưởng :
R49
Thêm
Xóa
Sửa
BODERATHI
+
-
+
KYTHI
-
+
+
R50 : " ctldt Ỵ CAUTRALOIDETHI
$ chdt Ỵ CAUHOIDETHI : ctldt.CAUHOIID = chdt.CAUHOIID
Tầm ảnh hưởng :
R50
Thêm
Xóa
Sửa
CAUTRALOIDETHI
+
-
+
CAUHOIDETHI
-
+
+
R51 : " dssv Ỵ DSSVDUTHI
$ m Ỵ MON : dssv.MONID = m.MONID
Tầm ảnh hưởng :
R51
Thêm
Xóa
Sửa
DSSVDUTHI
+
-
+
MON
-
+
+
R52 : " dssv Ỵ DSSVDUTHI
$ sv Ỵ SINHVIEN : dssv.SINHVIENID = sv.SINHVIENID
Tầm ảnh hưởng :
R52
Thêm
Xóa
Sửa
DSSVDUTHI
+
-
+
SINHVIEN
-
+
+
R53 : " dssv Ỵ DSSVDUTHI
$ kt Ỵ KYTHI : dssv.KYTHIID = kt.KYTHIID
Tầm ảnh hưởng :
R53
Thêm
Xóa
Sửa
DSSVDUTHI
+
-
+
KYTHI
-
+
+
R54 : " dssv Ỵ DSSVDUTHI
IF dssv.DETHIID ¹ NULL THEN
$ dt Ỵ DETHI : dssv.DETHIID = dt.DETHIID
END IF
Tầm ảnh hưởng :
R54
Thêm
Xóa
Sửa
DSSVDUTHI
+
-
+
DETHIID
-
+
+
R55 : " gvct Ỵ GIAOVIENCOITHI
$ kt Ỵ KYTHI : gvct.KYTHIID = kt.KYTHIID
Tầm ảnh hưởng :
R55
Thêm
Xóa
Sửa
GIAOVIENCOITHI
+
-
+
KYTHI
-
+
+
R56 : " gvct Ỵ GIAOVIENCOITHI
$ gv Ỵ GIAOVIEN : gvct.GIAOVIENID = gv.GIAOVIENID
Tầm ảnh hưởng :
R56
Thêm
Xóa
Sửa
GIAOVIENCOITHI
+
-
+
GIAOVIEN
-
+
+
R65 : " gvct Ỵ GIAOVIENCOITHI
$ m Ỵ MON : gvct.MONID = m.MONID
Tầm ảnh hưởng :
R65
Thêm
Xóa
Sửa
GIAOVIENCOITHI
+
-
+
MON
-
+
+
R57 : " chbl Ỵ CAUHOIBAILAM
$ chdt Ỵ CAUHOIDETHI : chbl.CAUHOIID = chdt.CAUHOIID
Tầm ảnh hưởng :
R57
Thêm
Xóa
Sửa
CAUHOIBAILAM
+
-
+
CAUHOIDETHI
-
+
+
R58 : " chbl Ỵ CAUHOIBAILAM
$ dssv Ỵ DSSVDUTHI : chbl.BAILAMID = dssv.BAILAMID
Tầm ảnh hưởng :
R58
Thêm
Xóa
Sửa
CAUHOIBAILAM
+
-
+
DSSVDUTHI
-
+
+
R59 : " ctlbl Ỵ CAUTRALOIBAILAM
$ ctldtỴCAUTRALOIDETHI :ctlbl.CAUTRALOIID = ctldt.CAUTRALOIID
Tầm ảnh hưởng :
R59
Thêm
Xóa
Sửa
CAUHOIBAILAM
+
-
+
CAUTRALOIDETHI
-
+
+
R60 : " ctlbl Ỵ CAUTRALOIBAILAM
$ dssv Ỵ DSSVDUTHI : ctlbl.BAILAMID = dssv.BAILAMID
Tầm ảnh hưởng :
R60
Thêm
Xóa
Sửa
CAUTRALOIBAILAM
+
-
+
DSSVDUTHI
-
+
+
R61 : " u Ỵ USERS
$ g Ỵ GROUPS : u.GROUPID = g.GROUPID
Tầm ảnh hưởng :
R61
Thêm
Xóa
Sửa
USERS
+
-
+
GROUPS
-
+
+
RBTV liên thuộc tính liên quan hệ :
R62 : " ch Ỵ CAUHOI
$ ctl Ỵ CAUTRALOI :
ch.CAUTRALOIDUNGID = ctl.CAUTRALOIID
AND ctl.CAUHOIID = ch.CAUHOIID
R63 : " chdt Ỵ CAUHOIDETHI
$ ctldt Ỵ CAUTRALOIDETHI :
chdt.CAUTRALOIDUNGID = ctldt.CAUTRALOIID
AND ctldt.CAUHOIID = chdt.CAUHOIID
R64 : " chbl Ỵ CAUHOIBAILAM
IF chbl.CAUTRALOIIDCHON ¹ NULL THEN
$ ctldt Ỵ CAUTRALOIDETHI :
chbl.CAUTRALOIIDCHON = ctldt.CAUTRALOIID
AND ctldt.CAUHOIID = chbl.CAUHOIID END IF
4. Sơ đồ quan hệ ERD:
CÀI ĐẶT CHƯƠNG TRÌNH
Các giao diện chính :
Giao diện MainMenu quản lý dữ liệu :
Giao diện Quản Lý Môn :
Giao diện Quản Lý Sinh Viên :
Giao diện Quản Lý DSSV Dự Thi
Giao diện Quản Lý Câu Hỏi :
Giao diện Tạo Đề Thi :
Report In Bảng Điểm :
Giao diện MainMenu Sinh Viên :
Giao diện Thi
PHẦN III. TỔNG KẾT
NHẬN XÉT CHUNG :
Đánh giá kết quả của chương trình
Qua quá trình nghiên cứu , học hỏi và xây dựng chương trình Thi Trắc Nghiệm , chương trình đã đạt được một số kết quả là :
+ Hổ trợ Giáo Viên soạn Câu Hỏi và tạo Đề Thi theo yêu cầu .
+ Hổ trợ Sinh Viên thi trên máy Client được dễ dàng hơn và được xem lịch thi , xem kết quả thi .
+ Trong quá trình Sinh Viên thi trên máy , Giám Thị Coi Thi có thể can thiệp trực tiếp vào bài làm của Sinh Viên ( cấm thi , hủy bài thi , tạm ngưng thời gian thi của Sinh viên , cho Sinh Viên tiếp tục thời gian thi của mình ) nếu Sinh Viên hoặc bài làm của Sinh Viên đó có vấn đề .
+ Giáo Vụ được hổ trợ nhiều tác vụ về nghiệp vụ như quản lý Giáo Viên , Sinh Viên , Môn Học , Lớp và tổ chức một Kỳ Thi bao gồm các công việc : lên danh sách Sinh Viên Dự Thi , quy định các Đề Ra Thi , lên danh sách Giáo Viên Coi Thi .
+ Và với chương trình Thi Trắc Nghiệm này Giáo Viên không còn phải chấm từng bài thi của SV bằng tay nữa , mà hệ thống sẽ tự chấm điểm và in bảng điểm ra theo yêu cầu .
+ Để phân biệt được người sử dụng hệ thống , người sử dụng đăng nhập vào hệ thống bằng tên đăng nhập và mật khẩu riêng của mình , và để bảo mật các mật khẩu của người sử dụng đựơc an toàn , hệ thống sẽ mã hóa mật khẩu trước khi lưu vào cơ sở dữ liệu.
Hạn chế của chương trình :
Trong thời gian ngắn , với tất cả sự nổ lực của chúng em để hoàn thành đề tài này .Tuy đạt được những kết quả cụ thể nhưng vẫn không tránh khỏi những thiếu sót , hạn chế , và còn tồn tại vấn đề chưa giải quyết tốt cần được góp ý bổ sung thêm .
Ngoài ra do kiến thức và kinh nghiệm hạn hẹp nên đề tài muốn phát triển thêm thì cần có thời gian để tiếp tục nghiên cứu , tiếp thu ý kiến đóng góp và hoàn thiện về mặt kỹ thuật để chương trình có thể trở thành một ứng dụng tốt và đạt hiệu quả cao.
HƯỚNG PHÁT TRIỂN CHƯƠNG TRÌNH :
Với đề tài này chúng ta có thể phát triển thêm :
+ Mở rộng phạm vi soạn thảo đề thi của Giáo Viên bằng một trình soạn thảo nào đó và lưu vào file , chương trình sẽ tự động kết nối file đó vào cơ sở dữ liệu
+ Câu Hỏi bổ sung thêm hình ảnh minh họa .
+ In đề thi và cho Sinh Viên thi trên giấy .
+ Thay đổi quyền sử dụng hệ thống một cách linh động
KẾT LUẬN
Sự phát triển mạnh mẻ của Công Nghệ Thông Tin cùng với sự đòi hỏi ngày càng cao sự tự động hóa , tin học hóa của con người vào tất cả các lỉnh vực khiến cho xã hội luôn đổi mới . Qua quá trình tìm hiểu , nghiên cứu và áp dụng những công nghệ mới của lĩnh vực Tin Học trong công cuộc cải cách của Bộ Giáo Dục , chúng em xây dựng đề tài này với mong muốn được góp một phần công sức vào công cuộc đổi mới này .
Dựa trên những mặt đạt được và chưa đạt được của đề tài , chúng em hy vọng sẽ nhận được nhiều ý kiến đóng góp , nhận xét để có điều kiện phát triển ứng dụng này lên cao hơn nữa .
TÀI LIỆU THAM KHẢO
[1] TEACH YOURSELF OBJECT- ORIENTED PROGRAMMING WITH VISUAL BASIC.NET IN 21 DAYS
Tác giả : Richard J.Simon
NXB : Sam
[2] KỸ NĂNG LẬP TRÌNH VISUAL BASIC.NET
Tác giả : Nguyễn Tiến Dũng
NXB : Nhà Xuất Bản Thống Kê
[3] LẬP TRÌNH CHUYÊN SÂU VISUAL BASIC.NET
Tác giả : Phương Lan
NXB : Nhà Xuất Bản Lao Động - Xã Hội
[4] ADO.NET LẬP TRÌNH VÀ ỨNG DỤNG
Tác giả : Nguyễn Tiến _Nguyễn Vũ Thịnh
NXB : Nhà Xuất Bản Thống Kê Lao Động – Xã Hội
[5] SQL SERVER 2000 DATABASE DESIGN
Tác giả : Louis Davidson
NXB : Wrox
[6] MICROSOFT SQL SERVER 2000
Tác giả : Nguyễn Ngọc Minh_Hoàng Đức Hải
NXB : Nhà Xuất Bản Lao Động – Xã Hội
[7] VISUAL MODELING WITH RATIONAL ROSE 2000 AND UML
Tác giả : Terry Quatrani
NXB : Grady Booch
[8] PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG BẰNG UML
Tác giả : Dương Anh Đức
NXB : Nhà Xuất Bản Thống Kê