Sau một thời gian nghiên cứu, phân tích và xây dựng “Phần mềm thi, đánh giá
câu hỏi, đề thi trắc nghiệm khách quan”, đề tài đã hoàn thành được mục tiêu đề ra là
xây dựng được phần mềm cho phép tổ chức thi các môn học dưới hình thức trắc nghiệm
trên máy tính với nhiều dạng câu hỏi, đề thi được tạo từ ngân hàng câu hỏi theo ma trận,
tự động trộn câu hỏi, câu trả lời để tạo sự khác biệt lớn giữa các đề thi. Hỗ trợ đánh giá
câu hỏi, đề thi, phân tích kết quả thi từ đó đưa ra kết luận về chất lượng câu hỏi và chất
lượng ngân hàng đề, tìm hiểu về một số phần mềm hỗ trợ thi trắc nghiệm nhằm đưa ra
bảng so sánh, đánh giá, qua đó có thể lựa chọn một số ưu điểm và ý tưởng tốt giúp cho
việc xây dựng chương trình hiệu quả hơn. Một số thuật toán chính trong chương trình
cũng được trình bày, để nhấn mạnh các yếu tố trọng tâm và quan trọng của đề tài
                
              
                                            
                                
            
 
             
            Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng phần mềm thi, đánh giá câu hỏi, đề thi trắc nghiệm khách quan, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cơ sở 
dữ liệu khác nhau, nhưng mô hình lập trình đối với tất cả các các data provider này đều 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 42 
làm việc giống nhau. Do đó, trên .NET một khi người lập trình đã biết làm việc với một 
data provider nào đó, thì cũng có thể dễ dàng làm việc với các data provider khác, chỉ 
là vấn đề thay đổi tên lớp và chuỗi kết nối. 
* Managed Code 
Các lớp của ADO.NET đều thuộc managed class (lớp bị quản lý bởi CLR). Các 
lớp này hưởng những ưu điểm của .NET CLR (Common Language Runtime), chẳng 
hạn thuộc tính độc lập của ngôn ngữ cũng như quản lý tự động các tài nguyên. Tất cả 
các ngôn ngữ .NET đều truy cập cùng một API. Do đó, nếu người lập trình đã biết sử 
dụng các lớp này trên C# thì cũng không gặp vấn đề gì khi sử dụng lớp đó trên VB.NET. 
Một ưu điểm khác rất lớn là tất cả mọi việc quản lý bộ nhớ sẽ do CLR lo liệu thông qua 
dịch vụ GC (garbage collector), chính vì vậy người lập trình khỏi phải bận tâm về việc 
cấp phát cũng như giải phóng bộ nhớ bị chiếm dụng. 
* Triển khai ứng dụng 
Trong thực tế, việc viết những ứng dụng cơ sở dữ liệu sử dụng ODBC, DAO và 
các công nghệ khác đi trước, rồi cho triển khai lên các máy client là một vấn đề cực kỳ 
khó khăn vì OBDC, DAO có quá nhiều phiên bản. Tuy nhiên, vấn đề này đã được ADO 
giải quyết ngoại trừ việc có những phiên bản khác nhau về MDAC (Microsoft Data 
Access Components). Bây giờ, với ADO.NET việc cài đặt trong môi trường phân tán, 
các thành phần .NET sẽ lo mọi việc. 
* Hỗ trợ của XML 
Ngày nay, XML là một chuẩn mực công nghệ và là một phương pháp được sử 
dụng nhiều nhất trong việc chia sẻ sử dụng dữ liệu giữa các ứng dụng chạy trên Internet. 
Trên ADO.NET dữ liệu sẽ được lưu trữ trên bộ nhớ cache và được chuyển giao theo 
dạng XML. Tất cả các ứng dụng có thể chia sẻ sử dụng kiểu dữ liệu này, và chuyển giao 
dữ liệu thông qua những giao thức khác nhau chẳng hạn là HTTP. 
* Hiệu năng và khả năng tăng quy mô ứng dụng (scalability) 
Performance và scalability là hai yếu tố quan trọng khi triển khai những ứng dụng 
và dịch vụ dựa trên web. Chuyển đổi dữ liệu trên Internet từ một dữ liệu nguồn này đến 
một nguồn dữ liệu khác là một việc tốn kém vì băng thông kết nối (connection 
bandwidth) giới hạn và như thế tăng nhanh việc lưu thông trên mạng. Bằng cách sử dụng 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 43 
dữ liệu tách rời được lưu trữ trên bộ nhớ (disconnected cached data) trên XML, ta giải 
quyết cả hai vấn đề trên. 
Hình 2.1 Kiến trúc ADO.NET 
 (Nguồn: www.msdn.microsoft.com) 
2.4 Tổng quan về hệ quản trị CSDL MS SQLServer và ngôn ngữ T-SQL 
- Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS): là một hệ 
thống phần mềm cho phép tạo lập cơ sở dữ liệu và điều khiển mọi truy nhập đối với cơ 
sở dữ liệu đó. 
- Hệ quản trị cơ sở dữ liệu quan hệ (Relation Database Management 
System - RDBMS) là một hệ quản trị cơ sở dữ liệu theo mô hình quan hệ. 
2.4.1 Giới thiệu hệ quản trị CSDL Microsoft SQL Server 
Microsoft SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ, cung cấp cách 
tổ chức dữ liệu bằng cách lưu chúng vào các bảng. Dữ liệu quan hệ được lưu trữ trong 
các bảng và các quan hệ đó được định nghĩa giữa các bảng với nhau. Người dùng truy 
cập dữ liệu trên Server thông qua ứng dụng. Người quản trị CSDL truy cập Server 
trực tiếp để thực hiện các chức năng cấu hình, quản trị và thực hiện các thao tác bảo trì 
CSDL. 
Ngoài ra, SQL Server là một CSDL có khả năng mở rộng, nghĩa là chúng 
có thể lưu một lượng lớn dữ liệu và hỗ trợ tính năng cho phép nhiều người dùng truy 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 44 
cập dữ liệu đồng thời. Các phiên bản của SQL Server phổ biến hiện này trên thị trường 
là SQL Server 2005, SQL Server 2008, SQL Server 2012. 
* Các đặc tính của SQL Server: 
- Cho phép quản trị một hệ CSDL lớn (lên đến vài tegabyte), có tốc độ xử lý dữ 
liệu nhanh đáp ứng yêu cầu về thời gian. 
- Cho phép nhiều người cùng khai thác trong một thời điểm đối với một CSDL 
và toàn bộ quản trị CSDL (lên đến vài chục ngàn user). 
- Có hệ thống phân quyền bảo mật tương thích với hệ thống bảo mật của công 
nghệ NT (Network Technology), tích hợp với hệ thống bảo mật của Windows NT hoặc 
sử dụng hệ thống bảo vệ độc lập của SQL Server. 
- Hỗ trợ trong việc triển khai CSDL phân tán và phát triển ứng dụng trên Internet. 
- Cho phép lập trình kết nối với nhiều ngôn ngữ lập trình khác dùng xây dựng các 
ứng dụng đặc thù (Visual Basic, C, C++, ASP...). 
- Sử dụng câu lệnh truy vấn dữ liệu Transaction – SQL. 
* Các Database hệ thống 
Khi cài đặt SQL Server có 4 database hệ thống được cài đặt, đó là: 
- master: Ghi nhận thông tin cấp hệ thống, thông tin khởi tạo SQL Server và thiết 
lập cấu hình SQL Server. Database này cũng ghi nhận tất cả các tài khoản đăng nhập, 
sự tồn tại của các Database khác, vị trí tập tin chính cho tất cả Database người dùng. 
- tempdb: Giữ các bảng tạm, các stored procedure tạm,.v.v... Được dùng cho các 
nhu cầu lưu trữ tạm của SQL Server. 
- model: là khuôn mẫu cho tất cả các CSDL khác được tạo trên hệ thống kể cả 
tempdb. Database model phải được tồn tại trên hệ thống, bởi vì nó được dùng để 
tạo lại tempdb mỗi khi SQL server được khởi động. 
- msdb: Giữ các bảng mà SQL Server Agent dùng để lập thời gian biểu thực thi 
các công việc, các cảnh báo và các operator. 
Trong khóa luận này, tác giả lựa chọn hệ quản trị cơ sở dữ liệu MS SQLServer 
phiên bản 2008 R2 để phục vụ cho việc lưu trữ và xử lý dữ liệu của mình. 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 45 
Hình 2.2 Hệ quản trị CSDL MSSSQL Server 2008 R2 
 (Nguồn: www. geekswithblogs.net) 
2.4.2 Giới thiệu ngôn ngữ T-SQL (Transact-SQL) 
T-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO (International 
Organization for Standardization) và ANSI (American National Standards Institute) 
được sử dụng trong SQL Server khác với P-SQL (Procedural-SQL) dùng trong Oracle. 
SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), 
là công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở 
dữ liệu. SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác 
với cơ sở dữ liệu quan hệ. 
 Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một 
công cụ (ngôn ngữ) dùng để truy xuất dữ liệu trong các cơ sở dữ liệu. Thực sự mà nói, 
khả năng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích 
ban đầu khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những 
chức năng quan trọng của nó. SQL được sử dụng để điều khiển tất cả các chức năng mà 
một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm: 
- Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các 
cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu. 
- Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện 
các thao tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu. 
- Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các 
thao tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu. 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 46 
- Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở 
dữ liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật 
cũng như các lỗi của hệ thống. 
 Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong 
các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ 
sở dữ liệu. Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java,... song 
các câu lệnh mà SQL cung cấp có thể được nhúng vào trong các ngôn ngữ lập trình 
nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu. Khác với các ngôn ngữ lập 
trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ có tính khai báo. Với SQL, người 
dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà không cần phải 
chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là ngôn ngữ dễ 
tiếp cận và dễ sử dụng. 
* Vai trò của SQL 
 Bản thân SQL không phải là một hệ quản trị cơ sở dữ liệu, nó không thể tồn tại 
độc lập. SQL thực sự là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các 
hệ quản trị cơ sở dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng 
và hệ quản trị cơ sở dữ liệu. 
Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ, SQL có những vai trò như sau: 
- SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông 
qua các trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu 
và nhận kết quả trả về từ cơ sở dữ liệu 
- SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các 
câu lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng 
dụng giao tiếp với cơ sở dữ liệu 
- SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở 
dữ liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều 
khiển truy cập cơ sở dữ liệu,... 
- SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ 
thống cơ sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các 
trình ứng dụng phía máy khách với máy chủ cơ sở dữ liệu. 
Trư
ờn
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 47 
- SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy 
chủ Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để 
tương tác với dữ liệu trong các cơ sở dữ liệu. 
- SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu 
phân tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, 
gởi và nhận các yêu cầu truy xuất dữ liệu với nhau. 
- SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ 
thống mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được 
sử dụng như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu. 
Hình 2.3 Mối liên hệ giữa SQLServer và C# 
 (Nguồn: www.data-miners.com) 
2.5. Các sơ đồ phân tích hệ thống 
Phân tích hệ thống nhằm xác định một cách chính xác và cụ thể các chức năng 
chính của hệ thống thông tin. Trong giai đoạn này cần phải xác định rõ ràng những gì 
mà hệ thống cần phải thực hiện mà chưa quan tâm đến phương pháp thực hiện chức 
năng đó. Như vậy việc phân tích phải đề cập đến những mô tả cơ sở. Để tiến hành phân 
tích hệ thống ta sẽ xây dựng các sơ đồ sau: 
- Sơ đồ Use-case: Use-case được dùng trong kỹ thuật phần mềm và hệ thống để 
nắm bắt yêu cầu chức năng của hệ thống. Use case mô tả sự tương tác đặc trưng giữa 
người dùng bên ngoài (actor) và hệ thống. Nó thể hiện ứng xử của hệ thống đối với bên 
ngoài, trong một hoàn cảnh nhất định, xét từ quan điểm của người sử dụng. Nó mô tả 
các yêu cầu đối với hệ thống, có nghĩa là những gì hệ thống phải làm chứ không phải 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 48 
mô tả hệ thống làm như thế nào?. Tập hợp tất cả Use case của hệ thống sẽ mô tả tất cả 
các trường hợp mà hệ thống có thể được sử dụng. 
- Sơ đồ phân rã chức năng (BFD – Business Function Diagram): xác địch 
chức năng của nghiệp vụ là bước đầu tiên của việc phân tích hệ thống. Để phân tích yêu 
cầu thông tin của tổ chức ta phải biết được tổ chức đó thực hiện những nhiệm vụ, chức 
năng gì. Từ đó, tìm ra các dữ liệu, các thông tin được sử dụng và tạo ra trong các chức 
năng. Đồng thời, cũng phải tìm ra những hạn chế mối ràng buộc đặt lên các chức năng 
đó. Mô hình BFD là công cụ biểu diễn việc phân rã có thứ bậc đơn giản các công việc 
cần thực hiện. Mỗi công việc được chia ra làm các công việc con, số mức chia ra phụ 
thuộc kích cỡ và độ phức tạp của hệ thống. 
- Sơ đồ ngữ cảnh (Context Diagram): là một dạng sơ đồ được dùng để hỗ trợ 
cho quá trình xây dựng sơ đồ dòng dữ liệu. Thể hiện khái quát nội dung chính của hệ 
thống thông tin. Sơ đồ chỉ bao gồm một xử lý chung nhất nêu bật chức năng của hệ 
thống thông tin. Xung quanh là các thực thể ngoài, chỉ nguồn phát và đích nhận thông 
tin cùng với các dòng thông tin đi vào và đi ra hệ thống thông tin. 
Việc sử dụng sơ đồ ngữ cảnh nhằm làm rõ biên giới của hệ thống và hỗ trợ việc 
nghiên cứu các mối quan hệ của hệ thống với thế giới bên ngoài, từ đó cũng có thể làm 
rõ các hoạt động của hệ thống, các thông tin vào ra của hệ thống. 
Sơ đồ ngữ cảnh bao gồm 3 nhóm thành phần: 
Thứ nhất, Thành phần chính nằm ở trung tâm của sơ đồ, biểu thị cho toàn bộ hệ 
thống đang được nghiên cứu. Ký hiệu là hình tròn. 
Thứ hai, Xung quanh vòng tròn trung tâm này là tất cả các phần tử bên ngoài (tác 
nhân ngoài) – đại diện cho một người hoặc một tổ chức bên ngoài lĩnh vực nghiên cứu 
của hệ thống nhưng có một số hình thức tiếp xúc với hệ thống, có quan hệ với hệ thống. 
Là nguồn gốc cung cấp thông tin cũng như là nơi nhận sản phẩm của hệ thống. Ký hiệu 
là hình chữ nhật. 
Thứ ba, tất cả các đường truyền thông tin vào và ra khỏi hệ thống, nối hệ thống 
với các tác nhân ngoài của nó). 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 49 
- Sơ đồ mô hình luồng dữ liệu (DFD – Data Flow Diagram): là một sơ đồ hình 
học nhằm diễn tả các luồng tài liệu thông qua các chức năng của hệ thống, nhằm mục 
đích bổ sung khiếm khuyết của mô hình phân rã chức năng bằng việc bổ sung các luồng 
thông tin nghiệp vụ cần để thực hiện chức năng, cho ta cái nhìn đầy đủ hơn về các mặt 
hoạt động của hệ thống và là một trong số các đầu vào cho quá trình thiết kế hệ thống. 
Mô hình DFD là một công cụ mô tả mối quan hệ thông tin giữa các công việc. 
Những hỗ trợ của DFD: 
- Xác định yêu cầu của người dùng. 
- Lập kế hoạch và minh hoạ những phương án cho phân tích viên và người 
dùng xem xét. 
- Trao đổi giữa những phân tích viên và người dùng trong hệ thống. 
- Làm tài liệu đặc tả yêu cầu hình thức và đặc tả thiết kế hệ thống. 
Sau khi có được sơ đồ chức năng BFD, tiếp theo ta cần xem xét chi tiết hơn về 
thông tin cần cho việc thực hiện các chức năng đã nêu trong sơ đồ BFD trên. Công cụ 
được sử dụng cho mục đích này là sơ luồng dữ liệu DFD. Ở sơ đồ này nêu ra một mô 
hình về hệ thống có quan điểm cân xứng cho cả dữ liệu và chức năng. Nó chỉ ra cách 
mà thông tin chuyển vận từ chức năng này của hệ thống qua chức năng khác của hệ 
thống. Điều quan trọng nhất là nó chỉ ra phải có sẵn những thông tin nào cần phải có, 
trước khi cho thực hiện một hàm hay một quá trình. 
Các kí pháp trong sơ đồ DFD: 
- Tiến trình (Proccess) hoặc chức năng: Có nhiệm vụ biến đổi thông tin. Kí 
pháp là hình tròn hoặc hình chữ nhật có góc tròn có thể được đánh số. Số đó chỉ mức 
phân rã của sơ đồ. Tên gọi là duy nhất và có dạng Động từ - Bổ ngữ. 
- Ví dụ kí pháp xử lý và chức năng. 
1.0
Chức năng
Tác nhân
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 50 
- Dòng dữ liệu (Data flow): Có nhiệm vụ biểu diễn việc chuyển dữ liệu trong hệ 
thống, dữ liệu vào hoặc ra khỏi một xử lý hoặc chức năng. Kí pháp là mũi tên một đầu 
hoặc hai đầu chỉ hướng thông tin. Tên gọi không cần phải duy nhất nhưng cần đặt khác 
để tránh nhầm lẫn. 
Ví dụ kí pháp dòng dữ liệu: 
- Kho dữ liệu (Data store): là nơi chứa dữ liệu, là các bảng đã được xác định trong 
quá trình phân tích thiết kế dữ liệu. Kí pháp là cặp đường song song chứa tên của thông 
tin được cất giữ. Hoặc hình chữ nhật hở bên phải, bên trái có tên kho dữ liệu kí hiệu là 
A1 ... Z1, A2 ... Z2, ... Dòng dữ liệu hướng về kho dữ liệu dùng để diễn tả hoạt động: 
thêm, sửa hay xóa dữ liệu. Dòng dữ liệu rời kho dữ liệu diễn tả hoạt động đọc dữ liệu 
trong kho. 
Ví dụ kí pháp kho dữ liệu : 
2.6. Thư viện công cụ thiết kế của DevExpress 
Quá trình thiết kế giao diện ứng dụng có sự hỗ trợ của bộ công cụ DevExpress 13.1.8 
Hình 2.4 DevExpress Framework 
2.7. Kết luận 
Ở chương này, khóa luận đã điểm qua môi trường, các công cụ, nền tảng, công 
nghệ và phương pháp để xây dựng hệ thống. Những nội dung đó sẽ là hữu ích cho quá 
trình phát triển ứng dụng sẽ được phân tích cụ thể ở chương 3. 
T ư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 51 
CHƯƠNG 3. PHÂN TÍCH, THIẾT KẾ, XÂY DỰNG PHẦN MỀM THI, ĐÁNH 
GIÁ CÂU HỎI, ĐỀ THI TRẮC NGHIỆM KHÁCH QUAN 
 Từ những kiến thức tìm hiểu lý thuyết tổng qua về trắc nghiệm và môi trường, 
công cụ, nền tảng để phân tích, xây dựng phần mềm. Nội dung chương 3 này sẽ đi sâu 
vào phân tích thiết kế và tiến hành lập trình để xây dựng ra sản phẩm hoàn chỉnh. 
3.1. Hệ thống hỗ trợ thi trắc nghiệm 
Một hệ thống hỗ trợ thi trắc nghiệm bao gồm các yếu tố được thể hiện trong sơ 
đồ use-case dưới đây: 
Giáo viên
Bộ soạn thảo
Quản trị viên
Quản trị hệ thống
Ngân hàng 
Trắc 
nghiệm
Chương trình 
thi trắc nghiệm
Công cụ đánh giá, 
thống kê
Sinh viên
Bảng đánh 
giá, thống 
kê
Hình 3.1 Sơ đồ Use-case hệ thống hỗ trợ thi trắc nghiệm 
Hệ thống này bao gồm các thành phần: 
- Ngân hàng trắc nghiệm: bao gồm ngân hàng trắc nghiệm, ngân hàng bố cục 
đề, ngân hàng đề trắc nghiệm của tất cả các môn học được phân theo từng bộ môn, từng 
khoa. 
- Chương trình Bộ soạn thảo đề thi trắc nghiệm: là chương trình giúp cho giáo 
viên soạn thảo câu hỏi trắc nghiệm, soạn thảo bố cục đề và soạn thảo đề trắc nghiệm. 
Trư
ờng
 Đạ
i họ
c K
i h
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 52 
- Chương trình Thống kê và Đánh giá trắc nghiệm: là chương trình dùng để 
thống kê và đánh giá câu hỏi và đề thi trắc nghiệm. Dữ liệu tính toán được sẽ lưu theo 
từng câu trắc nghiệm và từng đề trắc nghiệm giúp cho giáo viên sửa chữa hoặc giúp cho 
“bộ” bóc đề chọn câu trắc nghiệm phù hợp. 
- Chương trình Thi trắc nghiệm: đây là chương trình dành cho các thí sinh. 
Chương trình này sẽ lấy đề thi từ ngân hàng đề theo ca thi, thí sinh sẽ làm bài ngay trong 
chương trình. Sau khi xác nhận nộp bài, chương trình sẽ trả về kết quả của thí sinh. 
- Quản trị hệ thống: đây là chương trình nhằm để quản lý toàn bộ hệ thống. 
Người quản trị có thể phân quyền, bãi bỏ quyền, quản lý truy xuất ngân hàng trắc 
nghiệm, cập nhật, duy tu ngân hàng trắc nghiệm, 
Trong phạm vi của hệ thống này, khóa luận nghiên cứu 2 phần là Chương trình 
thi trắc nghiệm và Công cụ đánh giá, thống kê. Sau đây, khóa luận sẽ trình bày quá trình 
phân tích thiết kế và xây dựng các chức năng của chương trình. 
3.2. Phân tích hệ thống 
3.2.1. Sơ đồ phân rã chức năng (BFD – Business Function Diagram): 
Dựa vào sơ đồ use-case hệ thống hỗ trợ thi trắc nghiệm cùng với việc nghiên cứu 
các nghiệp vụ thì phần mềm thi, đánh giá câu hỏi, đề thi trắc nghiệm khách quan có các 
chức năng chính là: Hệ thống, Tạo đề - trộn đề - phân mã đề, Thi trắc nghiệm, Đánh giá, 
Thống kê. Dưới đây là sơ đồ chức năng thể hiện phần mềm được xây dựng với 5 chức 
năng sau: 
+ Quản lý hệ thống 
+ Tạo đề, trộn đề, phân mã đề 
+ Thi trắc nghiệm 
+ Đánh giá 
+ Thống kê Trư
ờng
 Đạ
i ọ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 53 
Phần mềm thi, đánh giá đề thi, câu hỏi trắc nghiệm khách quan
Quản lý hệ thống Thi trắc nghiệm
Tạo đề, trộn đề, 
phân mã đề
Đánh giá
Nhập danh sách 
thí sinh
Thống kê
Làm bài thi
Chấm bài
Trả kết quả
Lưu bài làm
Chọn thông tin 
môn thi
Tạo đề, trộn đề
Lưu đề cho ca 
thi, ngày thi
Xem đề
Đánh giá
độ khó câu hỏi
Đánh giá
độ phân cách câu 
hỏi
Đánh giá
độ tin cậy đề thi
Thống kê kết quả 
thi
Thống kê độ đo 
của câu hỏi
Đăng nhập
Đăng xuất
Tạo tài khoản
Hình 3.2 Sơ đồ chức năng BFD 
3.2.2. Mô tả chức năng 
a. Chức năng “Quản lý hệ thống” 
- Chức năng quản lý hệ thống bao gồm các chức năng: 
+ Đăng nhập 
+ Đăng xuất 
+ Nhập danh sách thí sinh 
+ Tạo tài khoản 
Quản lý hệ thống
Nhập danh sách 
thí sinh
Đăng nhập Đăng xuất Tạo tài khoản
Hình 3.3 Chức năng quản lý hệ thống 
Để sử dụng được hệ thống thì người dùng gồm người quản lý (giáo viên) và người 
dự thi (sinh viên) phải đăng nhập vào hệ thống thông qua một tài khoản được phân quyền 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 54 
trước đối với người quản lý, và đăng nhập bằng mã sinh viên đối với sinh viên dự thi 
được nhập từ danh sách cho trước. Người quản trị có quyền được tạo thêm tài khoản sử 
dụng hệ thống khi cần thiết. 
b. Chức năng “Tạo đề, trộn đề, phân mã đề thi” 
- Chức năng bóc đề, trộn đề, phân mã đề bao gồm các chức năng: 
+ Chọn thông tin môn học 
+ Tạo đề, trộn đề 
+ Lưu đề cho ca thi, ngày thi 
+ Xem đề 
Tạo đề, trộn đề, 
phân mã đề
Chọn thông tin 
môn thi
Tạo đề, trộn đề
Lưu đề cho ca 
thi, ngày thi
Xem đề
Hình 3.4 Chức năng tạo đề, trộn đề, phân mã đề thi 
Trước khi tổ chức thi cho một môn học, giáo viên được phân quyền sẽ tiến hành 
tạo đề, dựa theo tiêu chí đề tạo ra có giống nhau giữa các ca thi hay không để tiến hành 
trộn đề tạo thành các mã đề. Giáo viên sẽ xem qua đề ở chức năng “Xem đề” và sau đó 
là ấn định các mã đề vào các ca thi theo yêu cầu cho phù hợp. 
c. Chức năng “Thi trắc nghiệm” 
- Chức năng thi trắc nghiệm gồm các chức năng: 
+ Làm bài thi + Chấm bài 
+ Lưu bài làm + Trả kết quả 
Thi trắc nghiệm
Làm bài thi Chấm bài Trả kết quảLưu bài làm
Hình 3.5 Chức năng thi trắc nghiệm 
Trư
ờng
 Đạ
i họ
 Kin
h tế
 Hu
ế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 55 
Người dự thi đăng nhập vào hệ thống sẽ được điều hướng đến chức năng “Thi 
trắc nghiệm”, hệ thống sẽ kiểm tra tính hợp lệ và cho phép làm bài thi. Trong quá trình 
làm bài, mỗi lần trải qua một câu hỏi, thì bài làm sẽ được lưu trữ và chấm điểm. Sau khi 
người dự thi xác nhận nộp bài thì kết quả sẽ tự động được trả về cho mỗi bài làm. Nếu 
hủy thi thì toàn bộ kết quả sẽ bị hủy bỏ. 
d. Chức năng “Đánh giá” 
- Chức năng đánh giá gồm: 
+ Đánh giá độ khó câu hỏi + Đánh giá độ phân cách câu hỏi 
+ Đánh giá độ tin cậy của đề thi 
Đánh giá
Đánh giá
độ khó câu hỏi
Đánh giá
độ phân cách câu 
hỏi
Đánh giá
độ tin cậy đề thi
Hình 3.6 Chức năng đánh giá 
 Đánh giá chất lượng của các câu hỏi nói chung và đề thi nói riêng là công việc 
quan trọng mà bất cứ một hệ thống thi trắc nghiệm nào cũng phải hướng đến. Bởi vì, 
quá trình đánh giá sẽ giúp loại bỏ những câu hỏi, đề thi không đủ chất lượng trong việc 
đo lường kết quả học tập. Công việc đánh giá này thường diễn ra sau một giai đoạn đối 
với đánh giá câu hỏi và sau một kỳ thi đối với đề thi. 
e. Chức năng “Thống kê” 
- Chức năng thống kê gồm: 
+ Thống kê kết quả thi + Thống kê độ đo câu hỏi 
Thống kê
Thống kê kết quả 
thi
Thống kê độ đo 
của câu hỏi
Hình 3.7 Chức năng thống kê 
Trư
ờng
 Đạ
i ọ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 56 
Thống kê kết quả thi là chức năng hỗ trợ giúp cho giáo viên nắm bắt được chất 
lượng học tập dựa vào việc có bao nhiêu bài làm đạt điểm tốt và không tốt. Chức năng 
thống kê độ đo của câu hỏi nhằm cho biết, với một môn học nào đó, số lượng câu hỏi 
khó hoặc có độ phân cách không tốt chiếm bao nhiêu trong ngân hàng câu hỏi, từ đó 
giáo viên có thể đưa ra phương án thay thế hoặc sửa đổi phù hợp. 
3.2.3. Sơ đồ ngữ cảnh (Context Diagram) 
Trong giới hạn nội dung của khóa luận này là “Xây dựng phần mềm thi, đánh 
giá câu hỏi, đề thi trắc nghiệm khách quan” dựa trên “Phần mềm hỗ trợ quy trình 
soạn thảo đề thi trắc nghiệm khách quan” đã có, kết hợp với sơ đồ chức năng có thể 
phân tích để thu được sơ đồ ngữ cảnh của bài toán như sau: 
PHẦN MỀM THI, 
ĐÁNH GIÁ CÂU HỎI, 
ĐỀ THI TRẮC 
NGHIỆM KHÁCH 
QUAN
Người dự thi
(Sinh viên)
Người quản lý
(Giáo viên)
T
h
ô
n
g
 t
in
 b
ài
 t
h
i
K
ết
 q
uả
 b
ài
 t
hi
Thông tin đăng nhập
Kết quả đăng nhập
Thông tin bóc, xáo đề, phân đề
Kết quả bóc, xáo đề, phân đề
Thông tin đánh giá, thống kê
Kết quả đánh giá, thống kê
Thông tin danh sách thí sinh
Kết quả hiển thị
K
ết
 q
uả
 đ
ăn
g
 n
hậ
p
T
h
ô
n
g
 t
in
 đ
ăn
g
 n
h
ậ
p
Hình 3. 8 Sơ đồ ngữ cảnh 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 57 
3.2.4. Sơ đồ mô hình luồng dữ liệu (DFD – Data Flow Diagram): 
a. DFD mức 0: 
1.0 
Quản lý hệ 
thống
3.0
Thi trắc 
nghiệm
2.0
Tạo đề, 
trộn đề, 
phân mã đề
4.0
Đánh giá
5.0
Thống kê
Người quản lý
(Giáo viên)
T
h
ô
n
g
 t
in
 g
iá
o
 v
iê
n
Tài khoản 
người dùng
Ngân hàng 
câu hỏi
Thông tin 
yêu cầu xử lý
Ngân hàng đề
Đề thi
Thông tin 
người dùng
Câu hỏi Môn học
Thông tin môn học
Ca thi, kỳ thiThông tin ca thi, kỳ thi
T
h
ô
n
g
 t
in
 m
ô
n
 h
ọ
c
T
h
ô
n
g
 t
in
 c
a 
th
i,
 k
ỳ
 t
h
i
Đề thi
Tài khoản 
người dùng
Người dự thi
(Sinh viên)
T
h
ô
n
g
 t
in
 d
ự
 t
h
i
Thông tin 
thi
Người dự thi
(Sinh viên)
T
h
ô
n
g
 t
in
 t
rả
 l
ờ
iT
h
ô
n
g
 t
in
 s
in
h
 v
iê
n
T
h
ô
n
g
 t
in
si
n
h
 v
iê
n
Bài thi Thông tin bài thi
T
h
ô
n
g
 t
in
 b
à
i 
th
i
Thông tin 
yêu cầu đánh giá
Ngân hàng 
câu hỏi
Thông tin 
câu hỏi
Thông tin 
yêu cầu thống kê
Kết quả
Thông tin 
câu hỏi
Bài thi
Thông tin
 bài thi
Hình 3.9 Sơ đồ phân rã mức 0 
Trư
ờng
 Đạ
i ọ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 58 
b. DFD phân rã mức 1 cho chức năng 1.0: 
Tài khoản 
người dùng
1.2
Nhập danh 
sách thí sinh
1.1
Đăng nhập
1.3
Đăng xuất
Thông tin
người dùng
Thông tin
thí sinh
Người quản lý
(Giáo viên)
Thông tin
 giáo viên
Thông tin
trả lời
Thông tin đăng xuất
Thông tin 
phản hồi
Thông tin 
thí sinh
Thông tin
trả lời
Người dự thi
(Sinh viên)
Thông tin 
sinh viên
Thông tin 
trả lời
Thông tin đăng xuất
Thông tin
 phản hồi
Hình 3.10 Sơ đồ phân rã mức 1 cho chức năng 1.0 
Trư
ờng
 Đạ
i ọ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 59 
c. DFD phân rã mức 1 cho chức năng 2.0: 
2.1
Chọn thông 
tin môn thi
2.2
Tạo đề, trộn 
đề
2.3
Lưu đề cho ca 
thi, ngày thi
2.4
Xem đề
Ngân hàng 
câu hỏi
Ngân hàng đề
Môn học Ca thi, kỳ thi
Người quản lý
(Giáo viên)
Người quản lý
(Giáo viên)
Thông tin
môn thi
Thông tin 
phản hồi
Thông tin yêu cầu 
xử lý
Thông tin
 phản hồi
Thông tin yêu cầu
 xem đề
Đề thi
Thông tin yêu cầu 
lưu đề
Thông tin
 phản hồi
Thông tin
 môn học
Câu hỏi
Thông tin ca thi,
 kỳ thi
Đề thi
Thông tin môn học
Đề thi
Hình 3.11 Sơ đồ phân rã mức 1 cho chức năng 2.0 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 60 
d. DFD phân rã mức 1 cho chức năng 3.0: 
3.1
Làm bài thi
3.3
Chấm bài
3.4
Trả kết quả
3.2
Lưu bài làm
Ngân hàng đề
Môn học
Ca thi, kỳ thi
Tài khoản 
người dùng
Bài thiNgười dự thi
(Sinh viên)
Thông tin yêu cầu
 làm bài
Thông tin 
phản hồi
Thông tin 
phản hồi
Thông tin xác nhận 
nộp bài
Thông tin
 người dùng
Thông tin 
môn học
Thông tin ca thi, 
ngày thi
Đề thi Thông tin 
bài làm
Bài làm
Kết quả
Hình 3.12 Sơ đồ phân rã mức 1 cho chức năng 3.0 
e. DFD phân rã mức 1 cho chức năng 4.0: 
4.1
Đánh giá
độ khó 
câu hỏi
4.2
Đánh giá
độ phân cách 
câu hỏi
4.3
Đánh giá
độ tin cậy 
đề thi
Ngân hàng đề
Ngân hàng 
câu hỏi
Bài thi
Người quản lý
(Giáo viên)
Thông tin yêu cầu đánh giá
Thông tin yêu cầu đánh giá
Thông tin đề thi
Thông tin bài thi
Thông tin câu hòi
Kết quả
Thông tin yêu cầu 
đánh giá
Kết quả
Kết quả
Hình 3.13 Sơ đồ phân rã mức 1 cho chức năng 4.0 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 61 
f. DFD phân ra mức 1 cho chức năng 5.0: 
5.1
Thống kê 
kết quả thi
5.2
Thống kê 
độ đo của 
câu hỏi
Ngân hàng 
câu hỏi
Bài thi
Người quản lý
(Giáo viên)
Thông tin yêu cầu 
thống kê
Thông tin yêu cầu 
thống kê
Kết quả thống kê
Kết quả bài làm
Kết quả độ đo 
câu hỏi
Hình 3.14 Sơ đồ phân rã mức 1 cho chức năng 5.0 
3.3. Thiết kế cơ sở dữ liệu 
3.3.1. Liệt kê các tập thực thể và thuộc tính tương ứng 
Với bài toán đặt ra, ta tiến hành phân tích và đi đến xây dựng cơ sở dữ liệu với 
các thực thể và các thuộc tính tương ứng như sau: 
Thực thể: MONHOC (IdMonHoc, TenMonHoc, MoTa) 
Diễn giải: MÔN HỌC (Mã môn học, Tên môn học, Mô tả) 
Thực thể: CAUHOICHINHTHUC (IdCauHoiChinhThuc, NoiDung, NgayTao, 
NgayCapNhat,TyLeDuyet, DoPhanCach, CongKhai, TongSoTraLoi,TinhTrang, Khoa, 
NgayDanhGiaGanNhat, SoLuongTraLoiDung). 
Diễn giải: CÂU HỎI CHÍNH THỨC (Mã câu hỏi, Nội dung, Ngày tạo, Ngày 
cập nhật, Tỷ lệ duyệt, Độ phân cách, Công khai, Tổng số trả lời, Tình trạng, Khóa, Ngày 
đánh giá gần nhất, Số người trả lời đúng). 
Gọi “câu hỏi chính thức” là để phân biệt với “câu hỏi” được dùng trong “Phần 
mềm hỗ trợ quy trình soạn thảo đề thi trắc nghiệm khách quan” nhằm lưu trữ các câu 
hỏi đã được kiểm duyệt để tạo thành ngân hàng câu hỏi chính thức. Tuy nhiên, trong 
phạm vi của khóa luận này, để đơn giản trong việc gọi tên, ta sẽ quy ước 
CAUHOICHINHTHUC là CAUHOI. 
Trư
ờng
 Đạ
i họ
c K
i h
tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 62 
Thực thể: CAUTRALOICHINHTHUC (IdCauTraLoiChinhThuc, NoiDung1, 
NoiDung2, DapAn, CoDinh). 
Diễn giải: CÂU TRẢ LỜI CHÍNH THỨC (Mã câu trả lời, Nội dung 1, Nội dung 
2, Đáp án, Cố định). 
Tương tự cho CAUHOICHINHTHUC, ta sẽ gọi CAUTRALOICHINHTHUC là 
CAUTRALOI. 
Thực thể: LOAICAUHOI (IdLoaiCauHoi, TenLoaiCauHoi, MoTa). 
Diễn giải: LOẠI CÂU HỎI (Mã loại câu hỏi, Tên loại câu hỏi, Mô tả). 
Thực thể: GIATHIETCHUNG (IdGiaThietChung, NoiDung) 
Diễn giải: GIẢ THIẾT CHUNG (Mã giả thiết chung, Nội dung) 
Thực thể: 
MATRANKIENTHUC (IdMaTranKienThuc, SoCauNhap, SoCauQuyDinh) 
Diễn giải: MA TRẬN KIẾN THỨC (Mã ma trận kiến thức, Số câu nhập, Số câu 
quy định). 
Thực thể: DOKHO (IdDoKho, TenDoKho). 
Diễn giải: ĐỘ KHÓ (Mã độ khó, Tên độ khó). 
Thực thể: DETHI (IdDe, NgayThi, DeCungDe, TTKT) 
Diễn giải: ĐỀ THI (Mã đề, Ngày thi, Đề cùng đề, Thứ tự khởi tạo) 
Thực thể: KYTHI (IdKyThi, TenKyThi) 
Diễn giải: KỲ THI (Mã kỳ thi, Tên kỳ thi) 
Thực thể: SINHVIEN (Id, HoTen, MatKhau, Quyen) 
Diễn giải: SINH VIÊN (Mã sinh viên, Họ tên, Mật khẩu, Quyền) 
Thực thể: CATHI (IdCaThi, TuGio, DenGio) 
Diễn giải: CA THI (Ca thi, Từ giờ, Đến giờ) 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 63 
3.3.2. Mối quan hệ giữa các tập thực thể 
LOAICAUHOI có CAUHOI
(1, 1)
CAUHOI thuộc CAUTRALOI
(1, 1) (1, n)
GIATHIETCHUNG thuộc CAUHOI
(1, 1) (0, n)
DOKHO có CAUHOI
(0, n)
MATRANKIENTHUC thuộc CAUHOI
(1, 1) (0, n)
MONHOC có CAUHOI
(1, 1) (0, n)
(1, 1)
(0, n)
KYTHI có DETHI
(1, 1) (0, n)
CATHI thuộc DETHI
(1, n) (0, n)
DETHI có CAUHOI
(1, n) (1, n)
SINHVIEN thi DETHI
(0, n) (0, n)
MONHOC
(0, n) (1, 1)
SINHVIEN trả lời CAUHOI
(0, n) (0, n)
DETHI
(0, n)
(1, n)
NgayThi
DaThi
Dung/Sai
TraLoi
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 64 
3.3.3. Sơ đồ thực thể - mối quan hệ 
Hình 3.15 Sơ đồ thực thể mối quan hệ
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 65 
3.3.4. Chuyển các mối quan hệ thành lược đồ quan hệ 
- Mỗi mối quan hệ giữa các tập thực thể sẽ được chuyển thành một lược đồ quan 
hệ có tên là tên của mối quan hệ và nhận các thuộc tính là khóa của các tập thực thể 
tham gia vào mối quan hệ và có thể thêm vào thuộc tính riêng (nếu có). 
+ Giữa hai tập thực thể có mối quan hệ n-1 thì khóa chính của tập thực thể bên 1 
sẽ làm khóa phụ của tập thực thể bên n. 
+ Giữa hai tập thực thể có mối quan hệ n-n thì tập thực thể mới được xây dựng 
nên sẽ lấy khóa chính của hai tập thực thể tham gia vào mối quan hệ n-n làm khóa chính. 
CATHI thuộc DETHI
(1, n) (0, n)
 Lược đồ: CHITIETCATHI (IdCaThi, IdDe). 
Diễn giải: CHI TIẾT CA THI (Mã kỳ thi, Tên kỳ thi). 
DETHI có CAUHOI
(1, n) (1, n)
 Lược đồ: CHITIETDETHI (Id, IdDe, IdCauHoi) 
Diễn giải: CHI TIẾT ĐỀ THI (Vị trí xáo, Mã kỳ thi, Tên kỳ thi) 
SINHVIEN thi DETHI
(0, n) (0, n)
MONHOC
(0, n) (1, 1)
NgayThi
DaThi
 Lược đồ: CHITIETTHI (IdSinhVien, IdMonHoc, NgayThi, IdDe, DaThi). 
Diễn giải: CHI TIẾT THI (Mã sinh viên, Mã môn học, Ngày thi, Mã đề, Đã thi). 
SINHVIEN trả lời CAUHOI
(0, n) (0, n)
DETHI
(0, n)
(1, n)
Dung/Sai
TraLoi
 Lược đồ: TRALOICAUHOI (IdTraLoi, IdDe, IdCauHoi, IdSinhVien, Dung/Sai, 
TraLoi). 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 66 
Diễn giải: TRẢ LỜI CÂU HỎI (Mã trả lời, Mã đề, Mã câu hỏi, Mã sinh viên, 
Đúng/Sai, Trả lời). 
3.3.5. Mô hình dữ liệu quan hệ 
Sau khi chuẩn hóa các lược đồ quan hệ, ta thu được các bảng dữ liệu sau: 
Bảng CAUHOI (Câu hỏi) 
Thuộc tính Kiểu dữ liệu Thuộc tính Kiểu dữ liệu 
IdCauHoiChinhThuc int IdDoKho int 
NoiDung nvarchar(max) IdMonHoc int 
DoPhanCach real TyLeDuyet float 
NgayTao datetime NgayDanhGiaGanNhat date 
NgayCapNhat datetime SoLuongTraLoiDung int 
IdGiaThietChung int TongSoTraLoi int 
IdLoaiCauHoi int TinhTrang nvarchar(50) 
IdMaTranKienThuc int CongKhai bit 
IdGiaoVien int Khoa bit 
Bảng CAUTRALOI (Câu trả lời) 
Thuộc tính Kiểu dữ liệu Thuộc tính Kiểu dữ liệu 
IdCauTraLoiChinhThuc int NoiDung2 nvarchar(max) 
IdCauHoiChinhThuc int DapAn bit 
NoiDung1 nvarchar(max) CoDinh bit 
Bảng LOAICAUHOI Bảng GIATHIETCHUNG 
(Loại câu hỏi) (Giả thiết chung) 
Thuộc tính Kiểu dữ liệu 
IdLoaiCauHoi int 
TenLoaiCauHoi nvarchar(50) 
MoTa nvarchar(100) 
Thuộc tính Kiểu dữ liệu 
IdGiaThietChung int 
NoiDung nvarchar(max) 
Trư
ờng
 Đạ
i họ
c 
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 67 
Bảng DOKHO Bảng MATRANKIENTHUC 
 (Độ khó) (Ma trận kiến thức) 
Thuộc tính Kiểu dữ liệu 
IdDoKho int 
TenDoKho nvarchar(50) 
Bảng MONHOC (Môn học) Bảng SINHVIEN (Sinh viên) 
Thuộc tính Kiểu dữ liệu 
IdMonHoc int 
TenMonHoc nvarchar(500) 
MoTa nvarchar(500) 
Bảng DETHI (Đề thi) 
Thuộc tính Kiểu dữ liệu 
IdDe int 
IdMonHoc int 
NgayThi date 
IdDeCungDe bigint 
TTKT int 
IdKyThi int 
Thuộc tính Kiểu dữ liệu 
IdMaTranKienThuc int 
SoCauNhap int 
SoCauQuyDinh int 
Thuộc tính Kiểu dữ liệu 
Id varchar(50) 
HoTen nvarchar(50) 
MatKhau varchar(50) 
Quyen int 
Bảng CATHI (Ca thi) 
Thuộc tính Kiểu dữ liệu 
IdCaThi int 
TuGio datetime 
DenGio datetime 
Bảng KYTHI (Kỳ thi) 
Thuộc tính Kiểu dữ liệu 
IdKyThi int 
TenKyThi nvarchar(50) 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 68 
Bảng CHITIETCATHI (Chi tiết ca thi) 
Thuộc tính Kiểu dữ liệu 
IdCaThi int 
IdDe int 
Bảng CHITIETTHI (Chi tiết thi) 
Thuộc tính Kiểu dữ liệu 
Id varchar(50) 
IdMonHoc int 
NgayThi date 
IdDe int 
DaThi bit 
Bảng CHITIETDETHI (Chi tiết đề thi) 
Thuộc tính Kiểu dữ liệu 
Id bigint 
IdDe int 
IdCauHoi int 
Bảng TRALOICAUHOI (Trả lời câu hỏi) 
Thuộc tính Kiểu dữ liệu 
IdTraLoi bigint 
IdDe int 
IdCauHoi int 
IdSinhVien varchar(50) 
Dung/Sai Bit 
TraLoi nvarchar(max) 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 69 
Từ các lược đồ quan hệ ở trên, ta có mô hình dữ liệu quan hệ như sau: 
Hình 3.16 Mô hình dữ liệu quan hệ 
tb
l_
C
a
T
h
i
Id
C
a
T
h
i
T
u
G
io
D
e
n
G
io
tb
l_
c
a
u
h
o
ic
h
in
h
th
u
c
Id
C
a
u
H
o
iC
h
in
h
T
h
u
c
N
o
iD
u
n
g
D
o
P
h
a
n
C
a
ch
N
g
a
y
T
a
o
N
g
a
y
C
a
p
N
h
a
t
Id
G
ia
T
h
ie
tC
h
u
n
g
Id
Lo
a
iC
a
u
H
o
i
Id
M
a
T
ra
n
K
ie
n
T
h
u
c
Id
G
ia
o
V
ie
n
Id
D
o
K
h
o
Id
M
o
n
H
o
c
T
y
Le
D
u
y
e
t
N
g
a
y
D
a
n
h
G
ia
G
a
n
N
h
a
t
S
o
Lu
o
n
g
T
ra
Lo
iD
u
n
g
T
o
n
g
S
o
T
ra
Lo
i
T
in
h
T
ra
n
g
C
o
n
g
K
h
a
i
K
h
o
a
tb
l_
c
a
u
tr
a
lo
ic
h
in
h
th
u
c
Id
C
a
u
T
ra
Lo
iC
h
in
h
T
h
u
c
Id
C
a
u
H
o
iC
h
in
h
T
h
u
c
N
o
iD
u
n
g
1
N
o
iD
u
n
g
2
D
a
p
A
n
C
o
D
in
h
tb
l_
C
h
iT
ie
tC
a
T
h
i
Id
C
a
T
h
i
Id
D
e
tb
l_
C
h
iT
ie
tT
h
i
Id Id
M
o
n
H
o
c
N
g
a
y
T
h
i
Id
D
e
D
a
T
h
i
tb
l_
D
e
_
C
a
u
H
o
i
Id Id
D
e
Id
C
a
u
H
o
i
tb
l_
D
e
_
C
a
u
T
ra
L
o
i
Id Id
D
e
C
a
u
H
o
i
Id
C
a
u
T
ra
Lo
i
N
o
iD
u
n
g
1
N
o
iD
u
n
g
2
D
a
p
A
n
tb
l_
D
e
T
h
i
Id
D
e
Id
M
o
n
H
o
c
N
g
a
y
T
h
i
Id
D
e
C
u
n
g
D
e
S
T
T
D
o
T
in
C
a
y
Id
K
y
T
h
i
tb
l_
d
o
k
h
o
Id
D
o
K
h
o
T
e
n
D
o
K
h
o
tb
l_
g
ia
th
ie
tc
h
u
n
g
Id
G
ia
T
h
ie
tC
h
u
n
g
N
o
iD
u
n
g
tb
l_
lo
a
ic
a
u
h
o
i
Id
Lo
a
iC
a
u
H
o
i
T
e
n
Lo
a
iC
a
u
H
o
i
M
o
T
a
tb
l_
m
a
tr
a
n
k
ie
n
th
u
c
Id
M
a
T
ra
n
K
ie
n
T
h
u
c
Id
M
u
cK
ie
n
T
h
u
c
Id
M
u
cT
ri
N
a
n
g
S
o
C
a
u
N
h
a
p
S
o
C
a
u
Q
u
y
D
in
h
tb
l_
ta
ik
h
o
a
n
Id H
o
T
e
n
M
a
tK
h
a
u
M
a
Q
u
y
e
n
tb
l_
tr
a
lo
i
Id Id
T
ra
Lo
i
T
ra
Lo
i
D
a
p
A
n
tb
l_
tr
a
lo
ic
a
u
h
o
i
Id
T
ra
Lo
i
Id
D
e
C
a
u
H
o
i
Id
S
in
h
V
ie
n
[D
u
n
g
/S
a
i]
tb
l_
m
o
n
h
o
c
Id
M
o
n
H
o
c
T
e
n
M
o
n
H
o
c
M
o
T
a
Id
T
o
B
o
M
o
n
tb
l_
K
y
T
h
i
Id
K
y
T
h
i
T
e
n
K
y
T
h
i
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 70 
3.4. Thiết kế thuật toán 
3.4.1. Đăng nhập hệ thống 
Nhập username, 
password
Kiểm tra
Nhập sai, yêu cầu 
nhập lại
Đăng nhập hệ 
thống
Sai
Đúng
Bắt đầu
Kết thúc
Hình 3.17 Giải thuật đăng nhập hệ thống 
3.4.2. Tạo đề, trộn đề 
Lấy câu hỏi từ 
ngân hàng câu 
hỏi
Chọn môn học,
Nhập số lượng đề
Kiểm tra 
hợp lệ
Yêu cầu nhập lạiSai
Đúng
Bắt đầu
Tạo đề, trộn đề
Kết thúc
Lưu vào ngân 
hàng đề
Hình 3.18 Giải thuật tạo đề, trộn đề 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 71 
3.4.3. Đánh giá độ đo câu hỏi, bài trắc nghiệm 
Chọn môn học cần 
đánh giá 
Kiểm tra 
thông tin
Không có kết quả
SaiĐúng
Bắt đầu
Kết thúc
Kết quả đánh giá
Hình 3.19 Giải thuật đánh giá độ đo câu hỏi, bài trắc nghiệm 
3.4.4. Thống kê kết quả bài làm của thí sinh 
Chọn môn học, kỳ 
thi cần thống kê 
Kiểm tra 
thông tin
Không có kết quả
Yêu cầu chọn lại
SaiĐúng
Bắt đầu
Kết thúc
Kết quả thống kê
Hình 3.20 Giải thuật thống kê kết quả bài làm 
3.4.5. Xây dựng lớp DataProvider dùng chung 
Xây dựng lớp dùng chung có mức truy cập trong toàn chương trình. Lớp dùng 
chung này dùng để kết nối cơ sở dữ liệu và thực hiện các thao tác với cơ sở dữ liệu. 
Trư
ờng
Đại
 ọc
 K n
h tế
 Hu
ế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 72 
3.5. Thiết kế giao diện 
Dưới đây là một số hình ảnh giao diện của chương trình. 
Giao diện ban đầu 
Hình 3.21 Giao diện chính chương trình 
Giao diện tạo đề, trộn đề, xem đề 
Hình 3.22 Giao diện tạo đề, ấn định đề, xem đề 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 73 
Giao diện nhập danh sách thi sinh 
Hình 3.23 Giao diện nhập danh sách thí sinh 
Giao diện làm bài thi trắc nghiệm 
Hình 3.24 Giao diện làm bài thi trắc nghiệm 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 74 
Giao diện đánh giá 
Hình 3.25 Giao diện đánh giá 
3.6. Kết luận 
Chương 3 đã tập trung giải quyết bài toán đặt ra của đề tài: đi từ xác định yêu 
cầu, mục tiêu đến phân tích, thiết kế hệ thống, đồng thời giới thiệu các tính năng trong 
chương trình và cuối cùng là các hình ảnh và số liệu mà đề tài đã đạt được. 
Trư
ờng
 Đạ
i ọ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 75 
PHẦN 3. KẾT LUẬN 
Sau một thời gian nghiên cứu, phân tích và xây dựng “Phần mềm thi, đánh giá 
câu hỏi, đề thi trắc nghiệm khách quan”, đề tài đã hoàn thành được mục tiêu đề ra là 
xây dựng được phần mềm cho phép tổ chức thi các môn học dưới hình thức trắc nghiệm 
trên máy tính với nhiều dạng câu hỏi, đề thi được tạo từ ngân hàng câu hỏi theo ma trận, 
tự động trộn câu hỏi, câu trả lời để tạo sự khác biệt lớn giữa các đề thi. Hỗ trợ đánh giá 
câu hỏi, đề thi, phân tích kết quả thi từ đó đưa ra kết luận về chất lượng câu hỏi và chất 
lượng ngân hàng đề, tìm hiểu về một số phần mềm hỗ trợ thi trắc nghiệm nhằm đưa ra 
bảng so sánh, đánh giá, qua đó có thể lựa chọn một số ưu điểm và ý tưởng tốt giúp cho 
việc xây dựng chương trình hiệu quả hơn. Một số thuật toán chính trong chương trình 
cũng được trình bày, để nhấn mạnh các yếu tố trọng tâm và quan trọng của đề tài. 
 Khóa luận đã xây dựng thành công phần mềm ở dạng WinForm có giao diện thân 
thiện, dễ sử dụng, đáp ứng được nhu cầu tổ chức thi, đo lường kết quả học tập, đo lường 
câu hỏi góp phần xây dựng ngân hàng câu hỏi chất lượng, hướng tới tạo ra một phần 
mềm chuẩn mực với đầy đủ tính năng cần thiết. Tuy nhiên, do trình độ còn hạn chế cũng 
như sự gấp rút về mặt thời gian nên một số ý tưởng vẫn chưa thực hiện được, các dạng 
câu hỏi trắc nghiệm chương trình hỗ trợ chỉ dừng lại ở mức cơ bản, thường gặp. Hình 
thức thi hỗ trợ hiện tại là làm bài thi trên máy tính. Hy vọng trong tương lai với sự trau 
dồi thêm kiến thức tác giả sẽ hoàn thiện đề tài với thêm những mục tiêu sau : 
 - Về mặt lý thuyết : 
 + Nghiên cứu thêm các dạng câu hỏi trắc nghiệm khách quan khác để xây 
dựng được phần mềm thi phong phú về chủng loại trắc nghiệm. 
 + Nghiên cứu công nghệ lưu trữ dữ liệu để có thể lưu trữ tối ưu và tiến 
hành thi ở những nơi không có cơ sở dữ liệu. 
 - Về mặt thực tiễn : 
 Sau khi khắc phục được hạn chế và phát triển được các mục tiêu đặt ra, sẽ 
hướng đến có thể xây dựng thêm hình thức thi trên nhiều nền tảng, web, di động, trên 
giấy. Từ đó có thể sở hữu được một sản phẩm hoàn thiện để có thể tổ chức thi, luyện thi 
thành công như các trang web hiện có ở Việt Nam. 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
Sinh viên thực hiện: Đỗ Văn Quý 76 
TÀI LIỆU THAM KHẢO 
 [1] Vũ Hoàng Mạnh Hải – Nguyễn Đình Ngọc Duy, Xây dựng phần mềm quản 
lý ngân hàng câu hỏi trắc nghiệm tuyển sinh đại học. Khoa công nghệ thông tin, Đại 
học khoa học tự nhiên, 2005. 
 [2] Hà Trọng Nhân – Hà Nhật Tâm, Xây dựng hệ thống hỗ trợ thi trắc nghiệm. 
Khoa công nghệ thông tin, Đại học khoa học tự nhiên, 2005. 
 [3] Trần Nguyên Phong. Giáo trình SQL. Trường đại học Khoa học Huế. Khoa 
công nghệ thông tin. Huế, 2004. 
 [4] Hàn Viết Thuận. Giáo trình hệ thống thông tin quản lý, Trường đại học Kinh 
tế quốc dân, Khoa tin học kinh tế. Nhà xuất bản đại học Kinh tế quốc dân Hà Nội, 2008. 
[5] Dương Quang Thiện, Lập trình căn cứ dữ liệu dùng ADO.NET và C#. Nhà 
xuất bản tổng hợp TP.HCM, xuất bản 2005. 
[6] MSDN Libary,  
[7] DevExpress Document, https://documentation.devexpress.com 
Trư
ờng
 Đạ
i họ
c K
i h
 tế 
uế
Khóa luận tốt nghiệp 
SVTH: Đỗ Văn Quý 
PHỤ LỤC 
1. Code lớp dùng chung DataProvider 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 
using System.Windows.Forms; 
using System.Data.SqlClient; 
using DevExpress.XtraEditors; 
namespace QMTest_ThiTN.DAL 
{ 
 public class DataProvider : IDisposable 
 { 
 protected SqlConnection conn; 
 public void Dispose() 
 { 
 Dispose(true); 
 GC.SuppressFinalize(this); 
 } 
 protected virtual void Dispose(bool disposing) 
 { 
 if (disposing) 
 if (conn != null) 
 { 
 conn.Dispose(); 
 conn = null; 
 } 
 } 
 ~DataProvider() 
 { 
 Dispose(false); 
 } 
 private bool Connect() 
 { 
 try 
 { 
 conn = new SqlConnection(@"Data Source=(local)\QUYSQL;Initial 
Catalog=qm_test;Persist Security Info=True;User ID=sa;Password=admin1234"); 
 conn.Open(); 
 return true; 
 } 
 catch 
 { 
 XtraMessageBox.Show("Không thể kết nối đến cơ sở dữ liệu!", "Thông 
báo", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 return false; 
 } 
 } 
 private void Disconnet() 
 { 
 conn.Close(); 
 conn.Dispose(); 
 } 
public DataTable GetAllEntity(string spname) 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
SVTH: Đỗ Văn Quý 
 { 
 if (Connect()) 
 { 
 SqlCommand cmd = new SqlCommand(spname, conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 SqlDataAdapter da = new SqlDataAdapter(cmd); 
 DataTable dt = new DataTable(); 
 da.Fill(dt); 
 Disconnet(); 
 return dt; 
 } 
 else return null; 
 } 
 public DataTable GetEntity(string spname, SqlParameter[] param) 
 { 
 if (Connect()) 
 { 
 SqlCommand cmd = new SqlCommand(spname, conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 cmd.Parameters.AddRange(param); 
 SqlDataAdapter da = new SqlDataAdapter(cmd); 
 DataTable dt = new DataTable(); 
 da.Fill(dt); 
 Disconnet(); 
 return dt; 
 } 
 else return null; 
 } 
 public object GetFirstValue(string spname, SqlParameter[] param) 
 { 
 if (Connect()) 
 { 
 SqlCommand cmd = new SqlCommand(spname, conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 cmd.Parameters.AddRange(param); 
 object obj = cmd.ExecuteScalar(); 
 Disconnet(); 
 return obj; 
 } 
 else return null; 
 } 
 public object GetFirstValue(string spname) 
 { 
 if (Connect()) 
 { 
 SqlCommand cmd = new SqlCommand(spname, conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 object obj = cmd.ExecuteScalar(); 
 Disconnet(); 
 return obj; 
 } 
 else return null; 
 } 
 public int ExecuteCommand(string spname, SqlParameter[] param) 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
SVTH: Đỗ Văn Quý 
 { 
 if (Connect()) 
 { 
 try 
 { 
 SqlCommand cmd = new SqlCommand(spname, conn); 
 cmd.CommandType = CommandType.StoredProcedure; 
 cmd.Parameters.AddRange(param); 
 cmd.ExecuteNonQuery(); 
 Disconnet(); 
 return 1; 
 } 
 catch 
 { 
 return -1; 
 } 
 } 
 else return -1; 
 } 
 } 
} 
2. Code thực hiện tạo đề, trộn đề 
- Tạo đề 
CREATE proc qm_TaoMaDe 
( 
 @SoLuongMaDe int, 
 @Idmonhoc int, 
 @NgayThi date=null 
) 
as 
BEGIN 
 declare @list varchar(max) 
 set @list='' 
 declare @dem int, @made int 
 set @dem=1 
 declare @max bigint 
 set @max = (select max(IdDeCungDe) from tbl_DeThi) 
 if @max is not null 
 set @max=@max+1 
 else 
 set @max=1 
 while @dem<=@SoLuongMaDe 
 begin 
 select @made=round(rand()*1000,0) 
 if not exists (select IdDe from tbl_DeThi where 
IdDe=@made) 
 begin 
 Begin Transaction T_TaoMaDe 
 Insert into tbl_DeThi(IdDe, IdMonHoc, NgayThi, 
IdDeCungDe) 
 Values(@made, @Idmonhoc, @NgayThi, @max) 
 if len(@list)=0 
 set @list = convert(varchar(10),@made) 
 else 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
SVTH: Đỗ Văn Quý 
 set @list = 
@list+','+convert(varchar(10),@made) 
 set @dem=@dem+1 
 IF @@ERROR0 Goto Abort 
 commit Transaction T_TaoMaDe 
 Goto Finish 
 Abort: 
 Rollback Transaction T_TaoMaDe 
 Finish: 
 end 
 end 
 if @@Error=0 EXEC qm_TaoDe_CauHoi @Idmonhoc,@list 
END 
- Trộn câu hỏi 
CREATE proc qm_TaoDe_CauHoi 
( 
 @idmh int, 
 @listmade varchar(max) 
) 
as 
Begin 
 --bóc đề ngẫu nhiên theo ma trận 
 declare @table table(idcauhoi int, idloaicauhoi int, 
idmatrankienthuc int, idmonhoc int) 
 declare @IdMaTranKienThuc int 
 declare @SoCauQuyDinh int 
 declare c cursor for select IdMaTranKienThuc, SoCauQuyDinh 
 from (select distinct 
tbl_matrankienthuc.* 
 from tbl_matrankienthuc 
inner join 
tbl_cauhoichinhthuc on 
tbl_matrankienthuc.idmatrankienthuc=tbl_cauhoichinhthuc.idmatrankien
thuc 
 where 
tbl_cauhoichinhthuc.idmonhoc=@idmh) as Tab 
 open c 
 fetch next from c into @IdMaTranKienThuc, @SoCauQuyDinh 
 while @@fetch_status=0 
 begin 
 insert into @table 
 select top(@SoCauQuyDinh) 
ch.idcauhoichinhthuc,ch.idloaicauhoi,ch.idmatrankienthuc,ch.idmonhoc 
 from tbl_cauhoichinhthuc as ch 
 where IdMaTranKienThuc=@IdMaTranKienThuc and 
IdMonHoc=@idmh and ch.Khoa1 
 order by newid() 
 fetch next from c into @IdMaTranKienThuc, 
@SoCauQuyDinh 
 end 
 CLOSE c 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
Khóa luận tốt nghiệp 
SVTH: Đỗ Văn Quý 
 DEALLOCATE c 
 declare @ma int 
 declare @made varchar(500) 
 declare @idcauhoi int 
 while len(@listmade)>0 
 begin 
 set @made = 
LEFT(@listmade,isnull(nullif(charindex(',',@listmade)-1,-
1),len(@listmade))) 
 set @listmade = 
substring(@listmade,isnull(nullif(charindex(',',@listmade),0),len(@l
istmade))+1,len(@listmade)) 
 set @ma=convert(int, @made) 
 declare c1 cursor for select idcauhoi from @table order 
by newid() 
 open c1 
 fetch next from c1 into @idcauhoi 
 while @@fetch_status=0 
 begin 
 Begin Transaction T_TaoDe 
 Insert into tbl_De_CauHoi(IdDe, IdCauHoi) 
 values(@ma, @idcauhoi) 
 ---trộn câu trả lời 
 exec qm_TaoDe_CauTraLoi @ma, @idcauhoi 
 IF @@ERROR0 Goto Abort 
 commit Transaction T_TaoDe 
 Goto Finish 
 Abort: 
 Rollback Transaction T_TaoDe 
 Finish: 
 fetch next from c1 into @idcauhoi 
 end 
 CLOSE c1 
 DEALLOCATE c1 
 end 
End 
Trư
ờng
 Đạ
i họ
c K
inh
 tế H
uế
            Các file đính kèm theo tài liệu này:
 khoaluantotnghiep_dovanquy_8438.pdf khoaluantotnghiep_dovanquy_8438.pdf