Ứng dụng Trắc nghiệm trực tuyến theo mô hình Client-Server được triển khai bằng Java.
- Server: thực thi trên Java, lắng nghe kết nối TCP (port mặc định trong mã là
12345), quản lý dữ liệu quiz và người dùng qua SQLite (quiz.db). Server chịu trách nhiệm phát câu hỏi, nhận đáp án và trả kết quả (ví dụ:ANSWER_CORRECT/ANSWER_WRONG). - Client: là ứng dụng desktop sử dụng Java Swing, cung cấp giao diện đăng nhập, lấy danh sách quiz, mở quiz và nộp đáp án. Client kết nối đến server qua
Socket(mặc địnhlocalhost:12345). - Lưu trữ dữ liệu: sử dụng SQLite (file
quiz.db) — mã server tạo bảng và dữ liệu mặc định khi chưa có.
- Client giao tiếp với server bằng tin nhắn text đơn giản (mỗi dòng một lệnh). Ví dụ:
LOGIN user pass,GETQUIZZES,OPENQUIZ 1,SUBMITANSWER <quizId> <questionId> <optionIndex>. - Server dùng
PreparedStatementcho hầu hết truy vấn, DB filequiz.dbsẽ được tạo tự động khi server khởi động (nếu chưa tồn tại).
- Ngôn ngữ: Java (JDK 11+ recommended)
- Giao diện: Java Swing (
javax.swing) - Mạng: Java Sockets (
ServerSocket,Socket) - Cơ sở dữ liệu: SQLite qua JDBC (
jdbc:sqlite:quiz.db) - Đa luồng: sử dụng luồng cho mỗi client (
Thread) để xử lý kết nối đồng thời
java.net.*(Socket, ServerSocket)java.io.*(PrintWriter, BufferedReader, InputStreamReader)java.sql.*(Connection, DriverManager, PreparedStatement, ResultSet)javax.swing.*,java.awt.*(GUI)
- Lắng nghe kết nối TCP (mặc định port 12345).
- Tạo và khởi tạo cơ sở dữ liệu SQLite (
quiz.db) nếu chưa có. - Cung cấp các lệnh:
LOGIN,GETQUIZZES,OPENQUIZ,SUBMITANSWER, ... - So sánh đáp án và trả về kết quả cho client (ví dụ:
ANSWER_CORRECT/ANSWER_WRONG).
- Form đăng nhập (Username + Password).
- Nút
Get Quizzesđể lấy danh sách quiz từ server. - Nút
Open Quiz 1(ví dụ trong mã mẫu) để mở quiz có id = 1. - Hiển thị câu hỏi và các lựa chọn (radio buttons).
- Nút
Submit Answerđể gửi đáp án lên server và nhận thông báo chính xác/không.
Hình ảnh giao diện và logo được lưu trong thư mục
docs/(nếu có). Bạn có thể cập nhậtdocs/bằng ảnh chụp màn hình giao diệnQuizClientSwing.
- JDK 11 hoặc mới hơn
- Thư viện JDBC cho SQLite:
sqlite-jdbc-{version}.jar(ví dụsqlite-jdbc-3.36.0.3.jar).
Lưu ý: mã server sử dụng URL JDBC
jdbc:sqlite:quiz.db. Nếu bạn chưa có driver SQLite trên classpath, cần tải jar và đặt vào cùng thư mục hoặc thêm vào classpath khi biên dịch và chạy.
- Mở terminal, vào folder chứa mã (
QuizServer.java,QuizClientSwing.java, ...) - Đặt
sqlite-jdbc-VERSION.jarvào thư mục dự án. - Biên dịch:
javac -cp .:sqlite-jdbc-3.36.0.3.jar *.java- Chạy server:
java -cp .:sqlite-jdbc-3.36.0.3.jar QuizServerServer sẽ tạo file quiz.db nếu chưa tồn tại và lắng nghe trên port 12345.
- Mở client (một cửa sổ khác):
java -cp .:sqlite-jdbc-3.36.0.3.jar QuizClientSwingClient sẽ kết nối tới localhost:12345 (theo mã nguồn). Ấn Get Quizzes để lấy danh sách, Open Quiz 1 để mở, chọn đáp án và Submit Answer để nộp.
Biên dịch và chạy giống như trên, nhưng thay : bằng ; cho classpath:
javac -cp .;sqlite-jdbc-3.36.0.3.jar *.java
java -cp .;sqlite-jdbc-3.36.0.3.jar QuizServer
# rồi chạy client
java -cp .;sqlite-jdbc-3.36.0.3.jar QuizClientSwing- Ấn đăng nhập bị treo / không phản hồi: kiểm tra chắc server đã chạy; firewall có thể chặn port 12345; client hiện tại dùng kết nối đồng bộ, nếu server không phản hồi sẽ thấy delay.
- Không tìm thấy driver SQLite: đảm bảo
sqlite-jdbcjar đã được thêm đúng vào classpath khi biên dịch và chạy. - DB file
quiz.db: nếu muốn reset dữ liệu, xóa filequiz.dbrồi khởi động lại server để tạo lại bảng mẫu.
Họ và tên: Lù Ngọc Tân Mã SV: 1671020281 Số điện thoại: 0906165171 Email: [email protected] Lớp: CNTT 16-01


