Báo Cáo
Báo Cáo
Báo Cáo
2
Mục lục
4
Phần 1: Tổng quan về đề tài và cơ sở lý thuyết
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.
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.
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
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
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
15
Hình 2.2.2 UC Đăng nhập
16
Use case quản lý bài thi
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
19
1.2Vẽ sơ đồ đặc tả cho từng chức năng
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
25
Chương 3: KỸ THUẬT XÂY DỰNG BỘ ĐỀ TRẮC NGHIỆM
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.
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
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();
}
```
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.
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()`.
initialTimeInSeconds = totalTimeInSeconds;
if (totalTimeInSeconds > 0) {
time.setText(timeString);
30
} else {
// Hết giờ
time.setText("Hết giờ!");
countdownTimer.stop();
rf.setVisible(true);
this.dispose();
// Tuỳ chọn: thực hiện các hành động cần thiết khi hết giờ
});
```java
initialTimeInSeconds = totalTimeInSeconds;
```
- `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.
```java
if (totalTimeInSeconds > 0) {
time.setText(timeString);
} else {
time.setText("Hết giờ!");
countdownTimer.stop();
rf.setVisible(true);
this.dispose();
// 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.
```java
```
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).
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
}
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) {
```
```java
double score = d * (10.0 / dataList.size());
```
```java
DecimalFormat df = new DecimalFormat("#.##");
34
```
```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
Hình 4.1.2:
Giao diện
Đăng nhập
Admin
36
Giao diện đăng nhập User
38
Giao diện làm bài:
39
Giao diện quản lý đê thi:
40
Giao diện quản lý người dùng:
41
Giao diện xác nhận tài khoản
42
Giao diện thông tin cá nhân
43
Giao diện lịch sử làm bài:
44
CHƯƠNG 5: KIỂM THỬ BẢO TRÌ
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
47
TÀI LIỆU THAM KHẢO
[2]. https://gokisoft.com/share-code-chuong-quan-ly-ban-hang-chuc-nang-quan-ly-khach-hang
48