Báo Cáo

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 48

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC KINH TẾ KỸ THUẬT CÔNG NGHIỆP

ĐỀ CƯƠNG HẾT MÔN HỌC


NGÀNH: MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG DỮ LIỆU

Xây dựng chương trình quản lý đề thi trắc nghiệm cho


một trường Đại Học
Sinh viên thực hiện:
- Hoàng Tuấn Anh - 21103200010
- Đào Quang Anh -
- Nguyễn Việt Anh -
- Phạm Đình Hưởng -
Lớp: DHMT15A1HN
Giáo viên hướng dẫn:
Nguyễn Thùy Dung

Hà Nội, ngày … tháng … năm 2023


1
Lời nói đầu
Ngày nay với sự phát triển về mọi mặt đời sống, văn hóa, giáo dục cho đến
công nghệ và đặc biệt là lĩnh vực công nghệ thông tin đang có bước phát triển
chóng mặt. Việc áp dụng công nghệ thông tin vào việc học tập và làm việc cũng
không còn quá mới mẻ. Có rất nhiều các hãng công nghệ lớn tham gia vào việc
sản xuất các ứng dụng công nghệ nhằm giúp đỡ cho công việc, cũng như học
tập.
Việc áp dụng công nghệ vào học tập mang lại nhiều tiện tích và cơ hội nâng
cao trải nghiệm giáo dục. Công nghệ tạo điều kiện cho môi trường học tập
tương tác hơn. Học viên có thể tham gia vào các hoạt động trực tuyến như diễn
đàn, thảo luận, và bình luận trên các nền tảng giáo dục. Điều này tăng cường sự
tương tác giữa học viên và giảng viên cũng như giữa các học viên.
Công nghệ cho phép học viên tiếp cận tài liệu học mọi lúc, mọi nơi thông qua
các nền tảng trực tuyến. Điều này giúp họ có thể tự quản lý thời gian học tập và
tiếp cận nguồn thông tin phong phú từ nhiều nguồn khác nhau.
Ứng dụng và nền tảng học trực tuyến giúp học viên tự quản lý quá trình học
tập của mình. Họ có thể chọn lựa tài liệu, bài giảng, và phương pháp học phù
hợp với phong cách học cá nhân.
Công nghệ giúp tự động hóa quá trình đánh giá hiệu suất học viên thông qua
các bài kiểm tra trực tuyến, bài tập tự động chấm điểm và phản hồi tức thì. Điều
này giúp học viên nhanh chóng đo lường tiến độ và hiệu suất của mình.
Việc tích hợp công nghệ vào học tập mang lại nhiều ưu điểm, tạo ra môi trường
học tập đa dạng, linh hoạt và thú vị cho học viên.

2
Mục lục

Lời nói đầu............................................................................................................2


Mục lục.................................................................................................................3
Phần 1: Tổng quan về đề tài và cơ sở lý thuyết....................................................5
I. Tổng quan về đề tài ....................................................................................5
1. Lý do chọn đề tài......................................................................................5
2. Các chức năng cần xây dựng ...................................................................5
3. Các công cụ sử dụng để xây dựng ...........................................................6
4. Ý nghĩa thực tiễn......................................................................................6
II. Cơ sở lý thuyết.........................................................................................6
1. Giới thiệu về ngôn ngữ lập trình được sử dụng.......................................6
2 Giới thiệu về chương trình quản lý đề thi .............................................11
Phần 2: Phân tích thiết kế chương trình..............................................................14
I. Phân Loại...................................................................................................14
II. Biểu đồ Use case....................................................................................15
1.1 Đặc tả UC cho một số chức năng chính :...............................................17
1.3 Các bảng thực thể sử dụng..................................................................24
Chương 3: KỸ THUẬT XÂY DỰNG BỘ ĐỀ TRẮC NGHIỆM......................25
I. Xây dựng bộ đề trắc nghiệm.....................................................................25
II. Kỹ thuật chuyển sang câu hỏi tiếp theo.................................................27
2.1 Kỹ thuật tính thời gian trắc nghiệm........................................................29
2.2 Kỹ thuật tính điểm trắc nghiệm..............................................................32
CHƯƠNG 4: THIẾT KẾ GIAO DIỆN...............................................................35
 Giao diện màn hình chính:........................................................................35
 Giao diện đăng nhập Admin......................................................................35
 Giao diện đăng nhập User.........................................................................36
 Giao diện chọn môn thi.............................................................................36
 Giao diện chọn đề thi:...............................................................................37
3
 Giao diện làm bài:.....................................................................................37
 Giao diện hoàn thành bài thi:....................................................................38
 Giao diện quản lý đê thi:...........................................................................38
 Giao diện thêm đề thi:...............................................................................39
 Giao diện quản lý người dùng:..................................................................39
 Giao diện đăng ký.....................................................................................40
 Giao diện xác nhận tài khoản....................................................................41
 Giao diện cấp lại mật khẩu:.......................................................................41
 Giao diện thông tin cá nhân.......................................................................42
 Giao diện lịch sử làm bài:..........................................................................43
CHƯƠNG 5: KIỂM THỬ BẢO TRÌ.................................................................44
I. Kiểm thử chương trình..............................................................................44
II. Bảo trì chương trình...............................................................................44
CHƯƠNG 6 : KẾT LUẬN.................................................................................46
1. Đề tài đạt được một số kết quả sau............................................................46
1. Hạn chế......................................................................................................46
2. Hướng phát triển........................................................................................46
TÀI LIỆU THAM KHẢO..................................................................................47

4
Phần 1: Tổng quan về đề tài và cơ sở lý thuyết

I. Tổng quan về đề tài .


1. Lý do chọn đề tài.
Những năm gần đây, hình thức thi trắc nghiệm rất phổ biến và ngày
càng được ưa chuộng hơn. Nó giúp kiểm tra được kiến thức tổng quát thuộc
nhiều khía cạnh, cũng như thời gian chấm thi nhanh hơn. Bởi vậy nhu cầu
của mọi người về ôn luyện trắc nghiệm cũng tăng cao, ngày càng có nhiều
người tìm đến những phần mền thi trắc nghiệm. Đó chính là lý do chúng em
chọn đề tài này.
Với sự phát triển nhanh chóng của khoa học công nghệ và đặc biệt là
ngành công nghệ thông tin, làm từng bước thay đổi cuộc sống của con người
bởi các ứng dụng sản phẩm của công nghệ. Đi cùng với sự phát triển của
ngành công nghệ thông tin là sự ra đời ngày càng nhiều thiết bị điện thoại di
động. Nhu cầu của con người về việc sử dụng và giải trí trên các thiết bị di
động cũng ngày càng cao và đa dạng. Một trong những bộ phận ứng dụng
công nghệ thông tin chính là thay đổi và giúp đỡ việc sinh hoạt hàng ngày
của mọi người trong cuộc sống. Vì vậy nhóm 6 đã lựa chọn đề tài “ Chương
trình quản lý đề thi và luyện thi trắc nghiệm ” với mong muốn giúp cho
người dùng có thể quản lý cũng như luyện thi các đề trắc nghiệm một các
nhanh chóng, mọi lúc mọi nơi vừa tiết kiệm thời gian cũng như chi phí thực
hiện.
2. Các chức năng cần xây dựng .
- Xây dựng giao diện đăng nhập chính
- Thiết kế giao diện cho phép xử lý các chức năng chính.
- Thiết kế giao diện chương trình chính thực hiện các công việc:
• Sửa, xóa, tìm kiếm, kiểm tra thông tin người dùng
5
• Sửa, xóa, thêm mới đề thi từ các file exe hoặc nhập tay
• Tự chấm điểm khi thời gian kết thúc -> Hiển thị kết quả
• Người làm bài xem bài mình làm-> Xem kết quả -> Lưu điểm ->
Xóa điểm -> Thoát.

3. Các công cụ sử dụng để xây dựng .


- Sử dụng ngôn ngữ Java , Java swing bằng phần mền phần mền Apache
Netbean.
- Kết nối cơ sở dữ liệu SQL bằng phần mềm XamPP và PhpMyAdmin.
4. Ý nghĩa thực tiễn
Chương trình quản lý đề thi và luyện thi trắc nghiệm giúp cho thầy cô,
cũng như các bạn học sinh, sinh viên có thể dễ dàng học tập và ôn luyện
kiến thức, tiết kiệm được thời gian ôn tập, tra cứu tài liệu, hơn nữa có thể
học mọi lúc mọi nơi.
II. Cơ sở lý thuyết
1. Giới thiệu về ngôn ngữ lập trình được sử dụng
1.1 Ngôn ngữ lập trình java
 Java là một ngôn ngữ lập trình thông dụng và mạnh mẽ, được
thiết kế để có thể chạy trên nền tảng đa dạng, từ thiết bị di
động cho đến máy chủ và máy tính cá nhân. Dưới đây là một
số điểm quan trọng về Java:
- Độc lập nền tảng (Platform Independence): Mã nguồn Java được
biên dịch thành bytecode, một dạng ngôn ngữ trung gian không phụ
thuộc vào nền tảng. Bytecode này sau đó có thể chạy trên bất kỳ máy
ảo Java (JVM - Java Virtual Machine) nào. Điều này giúp ứng dụng
Java có khả năng chạy trên nhiều hệ điều hành khác nhau mà không
cần sửa đổi.
- Đối tượng hóa (Object-Oriented): Java là một ngôn ngữ lập trình
hướng đối tượng, nghĩa là nó hỗ trợ các khái niệm như lớp, đối tượng,
6
kế thừa, đóng gói, và đa hình. Điều này giúp xây dựng mã nguồn dễ
duy trì, mở rộng và tái sử dụng.
- Bảo mật (Security): Java có mô hình bảo mật mạnh mẽ. Mã bytecode
chạy trên JVM được kiểm tra tại thời điểm chạy, giúp ngăn chặn nhiều
vấn đề bảo mật, như truy cập không an toàn vào bộ nhớ và mã nguồn
độc hại.
- Thu gọn rác (Garbage Collection): Java tự động quản lý bộ nhớ
thông qua thu gom rác, giúp giảm bớt gánh nặng cho lập trình viên khi
quản lý bộ nhớ.
- Phong cách cú pháp (Syntax): Cú pháp của Java tương đối dễ đọc và
viết, giúp làm giảm lỗi và tăng tính nhất quán của mã nguồn.
- Thư viện và API phong phú (Rich Standard Library): Java đi kèm
với một bộ thư viện và API phong phú, cung cấp nhiều chức năng tiện
ích, từ xử lý chuỗi đến mạng và đồ họa.
- Hỗ trợ đa luồng (Multithreading): Java hỗ trợ lập trình đa luồng,
giúp tận dụng hiệu suất của hệ thống trong khi xử lý nhiều tác vụ đồng
thời.
- Nhập và xuất (Input/Output): Java cung cấp một số lượng lớn các
công cụ và thư viện để xử lý nhập và xuất dữ liệu, từ đọc và ghi tệp
đến tương tác với các luồng đầu vào và đầu ra.
 Java được sử dụng rộng rãi trong nhiều lĩnh vực, bao gồm
phát triển ứng dụng di động (Android), phát triển ứng dụng
máy tính cá nhân, phát triển ứng dụng web và xây dựng các
hệ thống máy chủ mạnh mẽ.
1.2 Giới thiệu về Java swing.
Java Swing là một bộ công cụ phát triển giao diện người dùng (GUI) cho
ngôn ngữ lập trình Java. Được giới thiệu từ Java 2 (JDK 1.2) trở đi, Swing
thay thế Abstract Window Toolkit (AWT) cũ, mang lại nhiều tính năng và
linh hoạt hơn trong việc xây dựng các ứng dụng giao diện đồ họa.

7
Dưới đây là một số điểm quan trọng về Java Swing:
- Độc lập nền tảng (Platform Independence): Như Java, Swing được
thiết kế để làm cho ứng dụng GUI có thể chạy trên nhiều nền tảng
khác nhau mà không cần sửa đổi mã nguồn.
- Linh hoạt và đa dạng: Swing cung cấp một loạt các thành phần giao
diện người dùng như JButton, JTextField, JTable, và JTree, giúp phát
triển giao diện đa dạng và phong phú.
- Lập trình hướng sự kiện (Event-Driven): Swing sử dụng mô hình
lập trình hướng sự kiện, nghĩa là các sự kiện như nhấn nút, di chuyển
chuột, hay nhập liệu từ bàn phím kích thích việc thực thi các đoạn mã
nguồn đã được định nghĩa trước đó.
- Look and Feel tùy chỉnh (Customizable Look and Feel): Swing cho
phép bạn tùy chỉnh giao diện của ứng dụng bằng cách sử dụng các
giao diện người dùng khác nhau, gọi là "Look and Feel." Bạn có thể
chọn giữa các gói Look and Feel có sẵn hoặc tạo ra một giao diện
người dùng riêng của mình.
- Đa luồng (Multithreading): Swing hỗ trợ lập trình đa luồng, giúp xử
lý các tác vụ đồng thời mà không làm đóng băng giao diện người
dùng.
- Hỗ trợ Accessibility: Swing tích hợp các tính năng hỗ trợ truy cập
cho người dùng có khuyết tật, giúp đảm bảo rằng ứng dụng của bạn có
thể được sử dụng một cách thuận tiện cho mọi người.
- Phong cách cú pháp (Syntax): Sử dụng Java, cú pháp của Swing là
rất dễ đọc và hiểu, giúp lập trình viên tạo và duy trì mã nguồn một
cách dễ dàng.
Java Swing thường được sử dụng để phát triển ứng dụng desktop, từ ứng
dụng quản lý dữ liệu đơn giản đến các ứng dụng đồ họa phức tạp.

8
1.3 Giới thiệu về cơ sở dữ liệu SQL.
SQL (Structured Query Language) là một ngôn ngữ lập trình được thiết kế
để quản lý và tương tác với các hệ thống quản lý cơ sở dữ liệu (Database
Management Systems - DBMS). Dưới đây là một giới thiệu về cơ sở dữ liệu
SQL:
Định nghĩa:
- Cơ sở dữ liệu (Database): Một cơ sở dữ liệu là một tập hợp có tổ
chức của dữ liệu, thường được tổ chức theo các bảng để lưu trữ và
quản lý thông tin.
- Hệ thống quản lý cơ sở dữ liệu (DBMS): Là một phần mềm quản lý
và tương tác với cơ sở dữ liệu. Nó cung cấp các chức năng như lưu
trữ, truy xuất, cập nhật và quản lý dữ liệu.
SQL:
- SQL là ngôn ngữ lập trình chung được sử dụng để truy vấn và quản lý
cơ sở dữ liệu.
- Một số lệnh SQL phổ biến bao gồm SELECT (truy vấn dữ liệu),
INSERT (chèn dữ liệu mới), UPDATE (cập nhật dữ liệu), DELETE
(xóa dữ liệu) và nhiều lệnh khác.
Kiểu dữ liệu:
- SQL hỗ trợ nhiều kiểu dữ liệu, bao gồm INTEGER (số nguyên),
VARCHAR (chuỗi kí tự biến đổi), DATE (ngày tháng), và nhiều kiểu
dữ liệu khác.
Bảng và quan hệ:
- Dữ liệu trong SQL được tổ chức thành các bảng, trong đó mỗi hàng
của bảng tương ứng với một bản ghi và mỗi cột tương ứng với một
trường dữ liệu.

9
- Mối quan hệ giữa các bảng có thể được thiết lập thông qua các khóa
chính (primary key) và khóa ngoại (foreign key).
Chỉnh sửa dữ liệu:
- SQL cho phép thêm, sửa đổi và xóa dữ liệu từ các bảng thông qua các
lệnh như INSERT, UPDATE và DELETE.
Truy vấn dữ liệu:
- Lệnh SELECT được sử dụng để truy vấn dữ liệu từ cơ sở dữ liệu. Bạn
có thể sử dụng các điều kiện, sắp xếp và nhóm dữ liệu theo nhiều cách
khác nhau.
- Chức năng tự động (Functions) và thủ tục lưu trữ (Stored Procedures):
- SQL hỗ trợ các hàm như AVG, SUM, MAX, MIN để thực hiện các
phép toán trên dữ liệu.
- Stored Procedures là các đoạn mã lưu trữ có thể được thực thi từ xa và
giúp tối ưu hóa và bảo mật quy trình xử lý dữ liệu.
Bảo mật:
- SQL cung cấp các cơ chế bảo mật như quyền truy cập, để quản trị
người dùng và giữ cho dữ liệu an toàn.
- Cơ sở dữ liệu SQL rất phổ biến và được sử dụng rộng rãi trong
nhiều ứng dụng, từ ứng dụng web cho đến hệ thống doanh nghiệp
lớn. Một số hệ thống quản lý cơ sở dữ liệu phổ biến sử dụng SQL
bao gồm MySQL, PostgreSQL, Microsoft SQL Server và Oracle
Database.

1.4 Giới thiệu về Apache NetBean


- NetBeans, một môi trường phát triển tích hợp (IDE) nổi tiếng,
đứng đầu trong việc hỗ trợ phát triển ứng dụng Java và nhiều ngôn
ngữ lập trình khác. Với sự linh hoạt và đa nhiệm, NetBeans không
chỉ giới hạn trong việc xây dựng mã nguồn Java mà còn mở rộng

10
sức mạnh đến C, C++, HTML, JavaScript, và PHP thông qua việc
tích hợp các plugin mở rộng.
- NetBeans đồng hành với lập trình viên bằng một môi trường phát
triển tích hợp đầy đủ, cung cấp trình soạn thảo mã nguồn thông
minh, trình biên dịch mạnh mẽ, và gỡ lỗi hiệu quả. Quản lý dự án
trở nên dễ dàng với tính năng tổ chức mã nguồn và tài nguyên dự
án một cách có tổ chức.
- Khác biệt của NetBeans không chỉ là ở sự đa ngôn ngữ và môi
trường phát triển tích hợp mạnh mẽ. IDE này còn chú trọng đến
việc thiết kế giao diện người dùng, với trình thiết kế giao diện đồ
họa giúp lập trình viên tạo ra giao diện thân thiện, mang lại trải
nghiệm người dùng tốt nhất.
- Hỗ trợ cho Apache Maven là một điểm mạnh khác của NetBeans,
giúp quản lý dependencies và xây dựng dự án trở nên hiệu quả và
thuận tiện. Bên cạnh đó, khả năng mở rộng của NetBeans thông
qua plugin làm cho IDE trở thành một công cụ linh hoạt, có thể đáp
ứng mọi nhu cầu của nhà phát triển trên nhiều nền tảng và ngôn
ngữ lập trình khác nhau. NetBeans không chỉ là một công cụ, mà là
một đối tác đáng tin cậy trên hành trình sáng tạo ứng dụng.

2 Giới thiệu về chương trình quản lý đề thi .


II.1 Yêu cầu chức năng
Chương trình quản lý đề thi và luyện thi trắc nghiệm được xây dựng
những chức năng như sau:
 Tài khoản Admin
Đăng nhập :
- Người dùng đăng nhập theo tài khoản đã tạo. Nếu đăng nhập
sai,yêu cầu nhập lại.
Quản lý tài khoản người dùng :

11
- Admin có thể xem thông tin cá nhân của các tài khoản người dùng.
- Có thể chỉnh sửa, tìm kiếm và xóa thông tin của các tài khoản người
dùng.

Quản lý đề thi :
- Admin có thể thực hiện thao tác thêm, sửa, xóa, tìm kiếm các đề thi
trắc nghiệm đã được lưu vào chương trình.
 Tài khoản User
Đăng ký :
- Người dùng nhập các trường thông tin theo yêu cầu để đăng ký tài
khoản.
Đăng nhập :
- Người dùng đăng nhập theo tài khoản đã tạo. Nếu đăng nhập sai,yêu
cầu nhập lại.
- Trong trường hợp người dùng quên mật khẩu, có thể sử dụng tính năng
quên mật khẩu để có thể được cấp lại mật khẩu thông qua việc xác
minh số điện thoại.
Kiểm tra thông tin :
- Người dùng có thể kiểm tra các thông tin cá nhân như : Họ tên , mã
sinh viên, ngày sinh, địa chỉ, số điện thoại, giới tính.
Lựa chọn đề thi :
- Người dùng có thể lựa chọn các môn thi đã có để tham gia làm bài thi
trắc nghiệm.
Kiểm tra lịch sử làm bài :
- Người dùng có thể kiểm tra lại lịch sử các bài đã làm về: thời gian làm
bài, số điểm, số câu làm đúng, môn thi và mã đề.
II.2 Yêu cầu phi chức năng
Bảo mật

12
- Thông tin được bảo mât.
- Phần quyền người dùng
Màn hình hiển thị
- Hiển thị nhanh chóng.
- Sửa đổi nhanh chóng.
- Đơn giản, dễ quản lý.
Khả năng bảo trì
- Sao lưu thường xuyên
- Theo dõi , ghi lỗi
Độ tin cậy
- Hệ thống luôn sẵn sàng hoạt động

13
Phần 2: Phân tích thiết kế chương trình

I. Phân Loại
 Yêu cầu chức năng

Stt Yêu cầu Mô tả


1 Chức năng Đăng Nhập, Đăng Cập nhật các thông tin người dùng
ký, Quên mật khẩu

2 Chức năng Admin: Quản lý đề thi cũng như người dùng, có các
- Quản lý đề thi chức năng cơ bản như them, sửa, xóa, tìm
- Quản lý Users kiếm….
3 Chức năng Users Làm bài kiểm tra, xem lại thông tin cá nhân,
lịch sử làm bài

Bảng 2.1.1: Yêu cầu chức năng

 Yêu cầu phi chức năng

Stt Yêu cầu Mô tả


1 Giao diện thân thiện với người dùng Màu sắc tươi tắn tạo cảm giác
thoải mái cho người
sử dụng
2 Bảo đảm tính toàn vẹn cho dữ liệu Dữ liệu hóa đơn sẽ được khôi
phục nguyên vẹn khi xảy ra sự
cố
3 Khả năng xử lý phản hồi nhanh Độ chậm trễ phải thấp từ khi
sự kiện được sinh ra từ cú
click chuột của người dùng

14
4 Khả năng cập nhật dữ liệu nhanh chóng Dữ liệu được chỉnh sửa/thêm
mới phải được cập nhật nhanh
chóng

Bảng 2.1.2: Yêu cầu phi chức năng


II. Biểu đồ Use case
 Biểu đồ UC tổng quan

Hình 2.2.1 Biểu đồ UC tổng quan


 Biểu đồ UC phân rã :
 Use case Đăng nhập :

15
Hình 2.2.2 UC Đăng nhập

 Use case Quản lý Đề thi :

Hình 2.2.3 UC Quản lý đề thi

 Use case quản lý người dùng :

Hình 2.2.4 UC quản lý người dùng

16
 Use case quản lý bài thi

Hình 2.2.5 UC Quản lý bài thi

1.1 Đặc tả UC cho một số chức năng chính :


- Cập nhật thông tin
Use_Case Nội dung
Tên Use-Case Đăng Nhập
Actor Admin or Users

Sự kiện kích hoạt Đăng nhập phân quyền với admin hoặc
users, nhập tài khoản mật khẩu => login

Tiền điều kiện NULL


Hậu điều kiện Điền đầy đủ thông tin và ấn vào login

Luồng sự kiện chính -Hiển thị ô để nhập username


-Hiển thị ô để nhập password
Luồng sự kiện phụ -Nếu nhập sai thông tin hiện ra thông báo
sai tài khoản hoặc mật khẩu
-Nếu không nhập đầy đủ thông tin sẽ in
ra thông báo không được để trống các ô

Bảng 2.3.1: UC Cập nhật thông tin


17
- Quản lý đề thi

Use_Case Nội dung


Tên Use-Case Quản lý đề thi
Actor Admin
Sự kiện kích hoạt Sau khi đăng nhập vào được admin =>
chọn quản lý đề thi
Tiền điều kiện Không có
Hậu điều kiện Không có
Luồng sự kiện chính - Hiện thị list đề thi ra bảng dữ liệu
- Thêm đề thi
- Xóa đề thi
- Tìm kiếm theo tên đề thi và đề số
- Sửa đề thi(double click vào đề cần sửa)
- Import đề thi từ file txt
Luồng sự kiện phụ -Không có.

Bảng 2.3.2: UC quản đề thi

- Quản lý người dùng :

Use_Case Nội dung


Tên Use-Case Quản lý người dùng
Actor Admin
Sự kiện kích hoạt Sau khi đăng nhập vào được admin =>
chọn quản lý người dùng

Tiền điều kiện -Không có.


Hậu điều kiện -Không có.
Luồng sự kiện chính -Hiển thị màn hình bảng dữ liệu về
thông tin người dùng
-Tìm kiếm người dùng theo tên người
dùng
- Sửa thông tin người dùng
-Xóa thông tin người dùng

Luồng sự kiện phụ -Không có.

Bảng 2.3.3: Quản lý người dùng


18
- Quản lý bài thi:
Use_Case Nội dung
Tên Use-Case Làm bài thi
Actor Users
Chọn chức năng đăng nhập vào hệ
Sự kiện kích hoạt thống => Users => Login

-Tiến hành chọn môn thi, chọn đề thi


Tiền điều kiện -Làm bài test
-Ấn nộp bài:
-Nhấn nút Thoát để thoát ra ngoài
Hậu điều kiện -Nhấn nút Làm lại để làm lại bài kiểm tra
-Nhấn nút xem đáp án để xem lại bài làm
-Hiển thị màn hình Kết quả
Luồng sự kiện chính -Hiển thị số câu đúng, sai
-Hiển thị thời gian làm bài và Tổng điểm

Luồng sự kiện phụ -Không có.

Bảng 2.3.4: UC quản lí bài thi

19
1.2Vẽ sơ đồ đặc tả cho từng chức năng

Hình 2.4.1 Sơ đồ hoạt động Đăng nhập

20
21
Hình 2.4.2 Sơ đồ hoạt động Đăng Kí

22
Hình 2.4.3 Sơ đồ hoạt động Users

23
Hình 2.4.5 Sơ đồ hoạt động Admin

24
1.3 Các bảng thực thể sử dụng

Hình 2.4.7 Sơ đồ Lớp

25
Chương 3: KỸ THUẬT XÂY DỰNG BỘ ĐỀ TRẮC NGHIỆM

I. Xây dựng bộ đề trắc nghiệm


MySQL
MySQL là một hệ quản trị cơ sở dữ liệu (Database Management System -
DBMS) mã nguồn mở, phổ biến và mạnh mẽ. Nó được sử dụng để lưu trữ và
quản lý dữ liệu trong các ứng dụng web và nhiều hệ thống khác.

MySQL thường được sử dụng trong các dự án phát triển web để lưu trữ thông
tin như thông tin người dùng, dữ liệu sản phẩm, và nhiều loại dữ liệu khác. Được
phát triển bởi Oracle Corporation, MySQL có nhiều phiên bản và đã trở thành
một trong những hệ quản trị cơ sở dữ liệu phổ biến nhất trên thế giới, đặc biệt là
trong cộng đồng phần mềm mã nguồn mở.

MySQL hỗ trợ nhiều tính năng như truy vấn SQL, quản lý giao dịch, cơ sở dữ
liệu phân tán, và nhiều tính năng khác giúp người phát triển xây dựng và duy trì
các ứng dụng web hiệu quả và ổn định.

Ta sử dụng công cụ là Xampp, PHP admin để xây dựng cơ sở dữ liệu cho bộ đề


trắc nghiệm

Trong cấu trúc bộ đề gồm có 10 cột, mỗi cột chứa một thông tin khác nhau:
+ id: Định danh cho câu hỏi
+NameExam: Tên kỳ thi
+NumberExam: Đề số
+question: câu hỏi
+AnswerA,B,C,D: các đáp án
+Answer correct : đáp án đúng
+Status: trạng thái

26
Hình 3.1.1. Cấu trúc bộ đề thi

- Bước 2:
Sau đó ta sử dụng các câu lệnh truy vấn của SQL(Insert into,….) , tiến hành
thêm các dữ liệu cần thiết

Hình 3.1.2. Thêm các dữ liệu cần thiết


27
II. Kỹ thuật chuyển sang câu hỏi tiếp theo
Để có thể chuyển tiếp câu hỏi tiếp theo, ta làm như sau:

public void goToNextQuestion() {


if (pos < dataList.size() - 1) { // Kiểm tra xem còn câu hỏi tiếp theo không
q.setStatus(Choice()); // Lấy trạng thái câu hỏi hiện tại
dataList.set(pos, q); // Cập nhật câu hỏi hiện tại trong danh sách

pos++; // Tăng chỉ số câu hỏi để chuyển đến câu hỏi tiếp theo
View(); // Hiển thị câu hỏi tiếp theo
// ViewResult(); // Cập nhật kết quả
}
// Có thể thêm thông báo nếu không còn câu hỏi tiếp theo
}
private void NextBtnActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
goToNextQuestion();
}
Hàm `goToNextQuestion` được thiết kế để chuyển đến câu hỏi tiếp theo trong danh
sách câu hỏi (`dataList`).

1. **`if (pos < dataList.size() - 1) {`**: Kiểm tra xem còn câu hỏi tiếp theo trong
danh sách không.
- `pos` là biến chỉ số hiện tại của câu hỏi trong danh sách.
- `dataList.size() - 1` là chỉ số của câu hỏi cuối cùng trong danh sách.
2. **`q.setStatus(Choice());`**: Lấy trạng thái cho câu hỏi hiện tại.
- Gọi phương thức `Choice()` để lấy trạng thái cho câu hỏi hiện tại (`q`) và thiết lập
trạng thái đó cho câu hỏi.
3. **`dataList.set(pos, q);`**: Cập nhật câu hỏi hiện tại trong danh sách.
- Sử dụng `pos` (chỉ số hiện tại) để cập nhật câu hỏi hiện tại (`q`) trong danh sách.

28
4. **`pos++;`**: Tăng chỉ số câu hỏi để chuyển đến câu hỏi tiếp theo.
- Sau khi đã cập nhật câu hỏi hiện tại và nếu còn câu hỏi tiếp theo, chỉ số `pos` được
tăng lên để trỏ đến câu hỏi tiếp theo trong danh sách.
5. **`View();`**: Hiển thị câu hỏi tiếp theo.
- Gọi phương thức `View()` để hiển thị câu hỏi tiếp theo.
6. **`// ViewResult();`**: Dòng này đã được comment, có nghĩa là đoạn mã hiện tại
không sử dụng phương thức `ViewResult()`.
- Nếu bạn muốn sử dụng và cập nhật kết quả sau khi chuyển đến câu hỏi tiếp theo,
bạn có thể bỏ comment (bỏ dấu `//`) và gọi phương thức `ViewResult()`.
7. **`// Có thể thêm thông báo nếu không còn câu hỏi tiếp theo`**: Ôn lại ý của bạn,
nếu không còn câu hỏi tiếp theo, bạn có thể thêm một thông báo để thông báo cho
người dùng.

Tóm lại, hàm `goToNextQuestion` thực hiện việc cập nhật trạng thái, chỉ số và hiển
thị câu hỏi tiếp theo trong danh sách.
Hàm `NextBtnActionPerformed` là một phương thức xử lý sự kiện được gọi khi
người dùng thực hiện một hành động trên giao diện người dùng, ví dụ như nhấn nút
"NextBtn". Trong trường hợp này, nó gọi phương thức `goToNextQuestion()` khi sự
kiện xảy ra.
private void NextBtnActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
goToNextQuestion();
}
```

1. **`private void NextBtnActionPerformed(java.awt.event.ActionEvent evt) {`**:


Đây là khai báo của phương thức xử lý sự kiện. Nó sẽ được gọi khi sự kiện xảy ra. Sự
kiện này là một sự kiện `ActionEvent`, thường được kích hoạt bởi người dùng thực
hiện một hành động nhất định, như nhấn nút.

29
2. **`// TODO add your handling code here:`**: Một ghi chú chỉ định nơi bạn có thể
thêm mã xử lý cho sự kiện.

3. **`goToNextQuestion();`**: Gọi phương thức `goToNextQuestion()`.


- Khi người dùng nhấn nút "NextBtn", phương thức `NextBtnActionPerformed`
được gọi và nó gọi phương thức `goToNextQuestion()` để thực hiện chuyển đến câu
hỏi tiếp theo.

Tóm lại, `NextBtnActionPerformed` là nơi bạn đặt mã xử lý khi người dùng thực hiện
hành động trên giao diện người dùng, và trong trường hợp này, nó chủ yếu là gọi
phương thức `goToNextQuestion()`.

2.1 Kỹ thuật tính thời gian trắc nghiệm


Để sát hạch trình độ học viên một cách khách quan và chính xac ta thực
hiện có tính toán về mặt thời gian. Trong mỗi phần thì hệ thống ấn định cho
mỗi phần thi số phút tùy vào để thi. Em đã tạo ra hàm startCountDown như
sau:

private void startCountdown() {

initialTimeInSeconds = totalTimeInSeconds;

countdownTimer = new Timer(1000, e -> {

if (totalTimeInSeconds > 0) {

int minutes = totalTimeInSeconds / 60;

int seconds = totalTimeInSeconds % 60;

String timeString = String.format("%02d:%02d", minutes,


seconds);

time.setText(timeString);

totalTimeInSeconds--; // Giảm thời gian tổng cộng

30
} else {

// Hết giờ

time.setText("Hết giờ!");

countdownTimer.stop();

ResultForm rf = new ResultForm(this.getKq(), this.getScore(),


this.getTime(), dataList, idU.getText(), nameU.getText(),
nameExam.getText());

rf.setVisible(true);

this.dispose();

// Dừng đồng hồ đếm ngược khi hết giờ

// Tuỳ chọn: thực hiện các hành động cần thiết khi hết giờ

});

countdownTimer.start(); // Bắt đầu đồng hồ đếm ngược

1. **Khởi tạo biến và đối tượng đồng hồ đếm ngược:**

```java

initialTimeInSeconds = totalTimeInSeconds;

countdownTimer = new Timer(1000, e -> {

```

- `initialTimeInSeconds`: Biến này giữ giá trị thời gian ban đầu (tính
bằng giây) để sử dụng sau này, có thể được sử dụng để đặt lại thời gian.

- `countdownTimer`: Đối tượng `Timer` được sử dụng để tạo đồng hồ


đếm ngược.
31
2. **Xử lý sự kiện cho đồng hồ đếm ngược:**

```java

if (totalTimeInSeconds > 0) {

// Xử lý khi thời gian còn dương

int minutes = totalTimeInSeconds / 60;

int seconds = totalTimeInSeconds % 60;

String timeString = String.format("%02d:%02d", minutes, seconds);

time.setText(timeString);

totalTimeInSeconds--; // Giảm thời gian tổng cộng

} else {

// Xử lý khi hết giờ

time.setText("Hết giờ!");

countdownTimer.stop();

ResultForm rf = new ResultForm(this.getKq(), this.getScore(),


this.getTime(), dataList, idU.getText(), nameU.getText(),
nameExam.getText());

rf.setVisible(true);

this.dispose();

// Dừng đồng hồ đếm ngược khi hết giờ

// Tuỳ chọn: thực hiện các hành động cần thiết khi hết giờ

```

- Nếu `totalTimeInSeconds` (thời gian tổng cộng) còn lớn hơn 0, thì
thực hiện các bước dưới đây để cập nhật hiển thị thời gian và giảm thời gian
32
tổng cộng.

- Nếu `totalTimeInSeconds` không còn lớn hơn 0, thì đồng hồ đếm đã


hết giờ. Hiển thị thông báo "Hết giờ!", dừng đồng hồ đếm
(`countdownTimer.stop()`), tạo một đối tượng `ResultForm` và hiển thị nó. Sau
đó, đóng cửa sổ hiện tại.

3. **Bắt đầu đồng hồ đếm ngược:**

```java

countdownTimer.start(); // Bắt đầu đồng hồ đếm ngược

```

Bắt đầu đồng hồ đếm ngược, đưa mã vào hoạt động, để nó bắt đầu giảm
thời gian dựa trên sự kiện được kích hoạt mỗi 1000 milliseconds (1 giây).

2.2 Kỹ thuật tính điểm trắc nghiệm


double getScore() {
double d = 0;
for (Question x : dataList) {
if (x.getAnswer() == x.getStatus()) {
d++;
}
}

double score = d * (10.0 / dataList.size());

// Sử dụng DecimalFormat để chỉ giữ lại hai số sau dấu phẩy


DecimalFormat df = new DecimalFormat("#.##");
return Double.parseDouble(df.format(score));
}

String getKq() {
int correctAnswers = 0;
for (Question x : dataList) {
if (x.getAnswer() == x.getStatus()) {
correctAnswers++;
}
33
}
int totalQuestions = dataList.size();
return correctAnswers + "/" + totalQuestions; // Trả về số câu đúng trên tổng số câu
hỏi
}

Chi tiết hàm `double getScore()`:

1. **`double d = 0;`:** Biến `d` được khởi tạo với giá trị 0. Biến này sẽ được sử dụng để
đếm số câu trả lời đúng trong danh sách câu hỏi.

2. **Vòng lặp for:** Duyệt qua mỗi câu hỏi trong `dataList`, với mỗi câu hỏi được đại
diện bởi biến `x` kiểu `Question`.

```java
for (Question x : dataList) {
```

3. **Kiểm tra câu trả lời đúng:**


- `if (x.getAnswer() == x.getStatus())`: Điều này kiểm tra xem câu trả lời của câu hỏi
(`x.getAnswer()`) có bằng với trạng thái của câu hỏi (`x.getStatus()`) hay không. Nếu
chúng bằng nhau, có nghĩa là câu trả lời là đúng.
- Nếu điều kiện trên đúng, biến `d` được tăng lên 1 đơn vị, tức là số câu trả lời đúng
được đếm.

4. **Tính toán điểm số:**


- Sau khi vòng lặp kết thúc, hàm tính toán điểm số bằng cách nhân số câu trả lời đúng
(`d`) với tỷ lệ 10 chia cho tổng số câu hỏi trong danh sách (`dataList.size()`).

```java
double score = d * (10.0 / dataList.size());
```

5. **Định dạng kết quả:**


- Sử dụng `DecimalFormat` để giữ lại chỉ hai số sau dấu phẩy trong kết quả.

```java
DecimalFormat df = new DecimalFormat("#.##");
34
```

6. **Trả về kết quả:**


- Cuối cùng, kết quả được chuyển đổi thành kiểu `double` và được trả về từ hàm.

```java
return Double.parseDouble(df.format(score));
```

Tóm lại, hàm này đếm số câu trả lời đúng, tính toán điểm số dựa trên tỷ lệ đúng, và sau
đó trả về điểm số đã được định dạng.

35
CHƯƠNG 4: THIẾT KẾ GIAO DIỆN

 Giao diện màn hình chính:

Hình 4.1.1: Giao diện màn hình chính

 Giao diện đăng nhập Admin

Hình 4.1.2:
Giao diện
Đăng nhập
Admin

36
 Giao diện đăng nhập User

Hình 4.1.2: Giao diện Đăng nhập User

 Giao diện đăng ký

Hình 4.1.3: Giao diện đăng ký


37
 Giao diện chọn môn thi

Hình 4.1.4: Giao diện chọn môn thi

 Giao diện chọn đề thi:

Hình 4.1.5: Giao diện chọn đề thi

38
 Giao diện làm bài:

Hình 4.1.6: Giao diện làm bài

 Giao diện hoàn thành bài thi:

Hình 4.1.7: Giao diện hoàn thành bài thi

39
 Giao diện quản lý đê thi:

Hình 4.1.8: Giao diện quản lý đề thi

 Giao diện thêm đề thi:

Hình 4.1.9: Giao diện thêm đề thi

40
 Giao diện quản lý người dùng:

Hình 4.1.10: Giao diện quản lý người dùng

41
 Giao diện xác nhận tài khoản

Hình 4.1.11: Giao diện xác nhận tài khoản


 Giao diện cấp lại mật khẩu:

Hình 4.1.12: Giao diện cấp lại mật khẩu

42
 Giao diện thông tin cá nhân

Hình 4.1.13: Giao diện thông tin cá nhân

43
 Giao diện lịch sử làm bài:

Hình 4.1.14: Giao diện lịch sử làm bài

44
CHƯƠNG 5: KIỂM THỬ BẢO TRÌ

I. Kiểm thử chương trình.


Ta kiểm tra lần lượt từng chức năng của chương trình như sau :
 Kiểm Thử Hệ Thống (System Testing): Kiểm thử toàn bộ hệ thống để
đảm bảo rằng tất cả các thành phần hoạt động đúng cách khi kết hợp lại
với nhau.
 Kiểm Thử Đơn Vị (Unit Testing): Kiểm thử từng phần nhỏ (đơn vị) của
mã nguồn để đảm bảo tính đúng đắn và hoạt động độc lập.
 Kiểm Thử Tích Hợp (Integration Testing): Kiểm tra sự tương tác giữa các
thành phần khác nhau trong hệ thống.
 Kiểm Thử Tự Động (Automated Testing): Sử dụng công cụ và kịch bản tự
động để kiểm thử, giúp giảm thời gian và tăng hiệu suất.
 Kiểm Thử Hiệu Suất (Performance Testing): Đảm bảo rằng ứng dụng có
khả năng xử lý tải công việc một cách hiệu quả và không gặp vấn đề về
hiệu suất.
 Kiểm Thử Bảo Mật (Security Testing): Đánh giá và kiểm tra các lỗ hổng
bảo mật để đảm bảo an toàn thông tin và dữ liệu.
 Kiểm Thử Tương Thích (Compatibility Testing): Kiểm tra xem ứng dụng
có tương thích với các trình duyệt, hệ điều hành và thiết bị khác nhau
không.
 Kiểm Thử Chấp Nhận Người Dùng (User Acceptance Testing - UAT):
Cho phép người dùng cuối kiểm tra và xác nhận rằng ứng dụng đáp ứng
đúng các yêu cầu của họ.
II. Bảo trì chương trình

 Sửa Lỗi (Bug Fixes): Xử lý và sửa lỗi phát sinh trong quá trình kiểm thử
hoặc sau khi ứng dụng đã triển khai.
 Cập Nhật/Tối Ưu Hóa (Updates/Optimizations):Thực hiện cập nhật để bổ
45
sung tính năng mới hoặc tối ưu hóa hiệu suất.

 Quản lý Phiên Bản (Version Control):Sử dụng hệ thống quản lý phiên bản
để theo dõi thay đổi trong mã nguồn và dễ dàng quay lại phiên bản trước
đó nếu cần.
 Hỗ Trợ Người Dùng (User Support): Cung cấp hỗ trợ cho người dùng,
giải đáp thắc mắc và giải quyết vấn đề mà họ gặp phải.
 Đào Tạo và Tài Liệu (Training and Documentation): Cập nhật tài liệu
hướng dẫn và cung cấp đào tạo cho người dùng mới hoặc người quản trị
hệ thống.
 Sao Lưu và Phục Hồi (Backup and Recovery): Thực hiện sao lưu định kỳ
và kiểm tra khả năng phục hồi để đảm bảo an toàn dữ liệu.
 Quá trình kiểm thử và bảo trì cần được thực hiện liên tục để đảm bảo rằng
phần mềm luôn duy trì được chất lượng và tính ổn định.

46
CHƯƠNG 6 : KẾT LUẬN

1. Đề tài đạt được một số kết quả sau


* Hoàn thiện được tính năng cơ bản của một app luyện thi trắc nghiệm.
* Giao diện được thiết kế đẹp mắt đơn giản và dễ sử dụng.
* Có thể tìm kiếm trên thông tin với nhiều lựa chọn với tìm kiếm cơ bản và chức năng
tìm kiếm nâng cao cho phép tìm kiếm nhanh, dễ dàng, chính xác.
1. Hạn chế
Mặc dù nhóm em đã cố gắng, tìm hiểu các kiến thức đã học, kết hợp với thực tế
và tra cứu các tài liệu liên quan đến đề tài “Xây dựng App luyện thi trắc nghiệm” do hạn
chế về thời gian, khả năng và kinh nghiệm nên không tránh khỏi những sai sót. Nhóm
em mong cô đóng góp thêm cho đề tài của nhóm chúng em để được ứng dụng trong
thực tiễn.
2. Hướng phát triển
-Tìm hiểu sâu hơn về ngôn ngữ java để có thể đáp ứng nhiều hơn nữa nhu cầu
của người sử dụng, phát triển và tối ưu hóa hệ thống.
- Tìm hiểu thêm một số ngôn ngữ, các phần mềm ứng dụng để nâng cao giao
diện đồ họa đẹp mắt, thân thiện hơn…
- Xây dựng ứng dụng quy mô lớn hơn với nhiều ứng dụng, chức năng…
Do thời gian và kiến thức có hạn nên sau khi hồn thành chương trình “App luyện
thi trắc nghiệm” còn thiếu sót chúng em mong Cô góp ý cho chúng em để chương trình
hoàn thiện hơn.

47
TÀI LIỆU THAM KHẢO

Tài liệu tham khảo trực tuyến


[1]. Insert Excel/CSV data into MySql database (Code With Arjun) + Bài 24 - Java Swing –
JfileChooser (JMaster IO)

[2]. https://gokisoft.com/share-code-chuong-quan-ly-ban-hang-chuc-nang-quan-ly-khach-hang

48

You might also like