Một trong những bộ phận ứng dụngcông nghệ thông tin chính là thay đổi và giúp đỡ việc sinh hoạt hàng ngàycủa mọi người trong cuộc sống.Vì vậy nhóm 6 đã lựa chọn đề tài “ Chươngtrình quản
Tổng quan về đề tài và cơ sở lý thuyết
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
• 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.
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.
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 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.
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.
1.3 Giới thiệu về cơ sở dữ liệu SQL
Phân tích thiết kế chương trình
Phân Loại
Stt Yêu cầu Mô tả
1 Chức năng Đăng Nhập, Đăng ký, Quên mật khẩu
Cập nhật các thông tin người dùng
Quản lý đề thi cũng như người dùng, có các chức năng cơ bản như them, sửa, xóa, tìm 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
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
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 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
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 :
Tên Use-Case Đăng Nhập
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
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
Tên Use-Case Quản lý đề thi
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
- 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
Tên Use-Case Quản lý người dùng
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
Tên Use-Case Làm bài thi
Chọn chức năng đăng nhập vào hệ thống => Users => Login
-Tiến hành chọn môn thi, chọn đề thi -Làm bài test
-Nhấn nút Thoát để thoát ra ngoài -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ả -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
1.2 Vẽ sơ đồ đặc tả cho từng chức năng
Hình 2.4.1 Sơ đồ hoạt động Đăng nhập
Hình 2.4.2 Sơ đồ hoạt động Đăng Kí
Hình 2.4.3 Sơ đồ hoạt động Users
Hình 2.4.5 Sơ đồ hoạt động Admin
1.3 Các bảng thực thể sử dụng
KỸ THUẬT XÂY DỰNG BỘ ĐỀ TRẮC NGHIỆM
Xây dựng bộ đề trắc nghiệm
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
Hình 3.1.1 Cấu trúc bộ đề thi
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
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.
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.
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
// 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.
2 **Xử lý sự kiện cho đồng hồ đếm ngược:**
// 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
// 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 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++;
// 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++;
} 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`.
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.
- 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());
- Sử dụng `DecimalFormat` để giữ lại chỉ hai số sau dấu phẩy trong 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.
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
Giao diện đăng nhập User
Hình 4.1.2: Giao diện Đăng nhập User
Hình 4.1.3: Giao diện đăng ký
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
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
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
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
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
Giao diện thông tin cá nhân
Hình 4.1.13: Giao diện thông tin cá nhân
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
KIỂM THỬ BẢO TRÌ
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ọ.
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ổ 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.