5.3.2.1. Lớp dữ liệu: Các lớp này dùng để tạo đối tượng, lưu trữ và xử
lý dữ liệu.
Hình 5.4. Các lớp dữ liệu
* Lớp ThanHocTinLy: Lớp này dùng để lưu trữ một đối tượng là một từ. Một từ bao gồm các thuộc tính: tên từ, phát âm, nghĩa từ, chi tiết từ và những từ lên hệ.
* Lớp DBLoader: Lớp này dùng để khởi tạo cơ sở dữ liệu từ một file SQLite có sẵn, sau đó trả về danh sách các đối tượng từ.
* Lớp DBController: Lớp này dùng để lấy danh sách và xử lý những từ mà người dùng đánh dấu lưu lại. Có thể sử dụng 2 phương thức là insert() và delete() để thêm và xóa một từ khỏi SQLite.
5.3.2.1. Lớp xử lý giao diện: Các lớp này dùng để xử lý các view và
control trên giao diện người dùng. Các lớp này thường phải được liên kết với một layout, các activity được khởi chạy nhờ phương thức onCreate().
Hình. Các lớp xử lý giao diện
* Lớp SplashScreen: Lớp này khởi chạy activity của màn hình giới thiệu mỗi khi ứng dụng được chạy lên. Sau đó, activity này sẽ tự tắt trong vòng 2 giây.
* Lớp MainActivity: Đây là activity chính của ứng dụng. Lớp này sẽ quản lý việc xử lý dữ liệu cho các listview và các tab trên activity.
* Lớp SingleItemView: Lớp này dùng để hiển thị chi tiết của từ mỗi khi người dùng chọn một từ nào đó từ lớp MainActivity. Lớp này cũng quản lý việc lưu trữ các từ vào cơ sở dữ liệu.
* Lớp ListViewAdapter: Lớp này dùng để xử lý giao diện của từng Item trong điều khiển ListView của lớp MainActivity.
5.3.3. Lập trình các chức năng chính 5.3.3.1. Thiết lập các tab
Các tab này có chức năng chứa nội dung khác nhau của ứng dụng. Có 3 nội dung chính mà ứng dụng này cần quản lý đó là: 1 tab để chứa danh sách các từ cần tra, 1 tan để chứa các từ đã lưu và 1 tab để tải một trang web tra từ trực tuyến.
Trong lớp MainActivity, sử dụng hàm sau để thiết lập các tab:
Hình 5.5. Các thành phần giao diện của tab
5.3.3.2. Chức năng lọc từ
Khi người dùng nhập dữ liệu từ bàn phím thì danh sách từ sẽ được lọc. Các từ trong danh sách sẽ là những từ được bắt đầu với chuỗi kí tự được nhập từ bán phím. Nếu chuỗi kí tự rỗng thì sẽ tải hết danh sách từ. Công việc lọc từ này được thực hiện trong lớp ListViewAdapter.
5.3.4. Màn hình giao diện ứng dụng
Hình 5.6. Giao diện màn hình giới thiệu
Hình 5.7. Giao diện màn hình chính
Hình 5.8. Giao diện màn hình xem chi tiết từ
Hình 5.9. Giao diện màn hình tra từ trực tuyến
5.4. Kết luận
5.4.1. Kết quả đạt được
Ứng dụng từ điển đã được hoàn thiện với giao diện đơn giản, dễ sử dụng, phù hợp với nhu cầu của người dùng mọi lúc mọi nơi.
Ứng dụng hoàn thiện các nhu cầu cơ bản của người dùng như tra từ bằng cách nhập từ bàn phím, đánh dấu từ, hiển thị từ, tra cứu trực tuyến.
5.4.2. Hướng phát triển
Tiếp tục hoàn thiện ứng dụng cả về chức năng và giao diện.
Tích hợp nhiều bộ từ điển khác để ứng dụng phong phú hơn.
CHƯƠNG VI. XÂY DỰNG ỨNG DỤNG TRẮC NGHIỆM
6.1. Tổng quan về đề tài
6.1.1. Xác định yêu cầu bài toán
Hiện nay, thi trắc nghiệm là một lĩnh vực thiết yếu để đánh giá kiến thức khách quan dành cho các bạn học sinh, sinh viên. Những ứng dụng trắc nghiệm trên Android bắt đầu ra đời nhưng chưa thực sự nhiều và hiệu quả. Những ứng dụng đó chỉ gói gọn một hay một vài bộ đề thi có sẵn nên chưa tạo được sự đa dạng và phong phú cho ứng dụng. Nhất là đối với các bạn sinh viên khoa Công Nghệ Thông Tin của trường rất cần một ứng dụng nào đó để hỗ trợ các bạn trong việc học và thi thử các môn trắc nghiệm của khoa. Vì thế ứng dụng này được xây dựng lên để phục vụ cho mục đích đó.
Với ứng dụng này, người dùng có thể thi trắc nghiệm với nhiều bộ đề của các môn khác nhau, kèm theo đó là sự tiện ích khi tự mình thiết lập số câu hỏi và thời gian thi thử. Giao diện thân thiện, bắt mắt giúp người dùng không bị nhàm chán khi thi. Sau khi thi sẽ nhận được kết quả ngay lập tức và kết quả sẽ được lưu lại cho đến lần thi sau đó. Những bộ đề trong ứng dụng được lưu trữ và tải trực tiếp thông qua mạng Internet.
6.1.2. Mục đích nghiên cứu
Nghiên cứu và ứng dụng những công nghệ mới của Android vào việc xây dựng một ứng dụng từ thi trắc nghiệm.
Xây dựng ứng dụng trắc nghiệm thuận tiện, dễ nâng cấp, dễ sử dụng; nâng cao được kiến thức và hỗ trợ công việc học tập của sinh viên khoa; có thể thi thử mọi lúc, mọi nơi.
6.2. Phân tích thiết kế hệ thống
6.2.1. Đặc tả chức năng
STT Use Case Mô tả Actor
1 Quản lý bộ đề
Các bộ đề thi được người dùng cập nhật thông qua mạng Internet hoặc có thể xóa bộ đề thi nếu không sử dụng.
Người dùng
2 Cấu hình thi thử
Với tính năng này, người người có thể chọn lựa số câu hỏi và thời gian thi thử đã được cấu hình định mức sẵn trước đó.
3 Thi thử Người dùng thi thử với số câu hỏi và thời gian đã thiết lập trước đó.
4 Xem và lưu kết
quả thi Xem và lưu kết quả sau khi thi xong.
5 Tạo bộ đề Sử dụng công cụ Editor để tạo bộ đề
Quản trị
6 Thêm bộ đề Thêm một bộ đề mới vào ứng dụng
6.2.2. Biểu đồ Use Case
Hình 6.1. Biểu đồ Use Case của ứng dụng trắc nghiệm
6.2.3. Biểu đồ trình tự
Hình 6.2. Biểu đồ trình tự thi thử
Hình 6.3. Biểu đồ trình tự xóa
Hình 6.4. Biểu đồ trình tự Reciever nhận bộ đề
6.3. Xây dựng ứng dụng
6.3.1. Thiết kế cơ sở dữ liệu
Ứng dụng sử dụng 2 cách thức để lưu trữ cơ sở dữ liệu đó là SQLite và Microsoft Excel. Cụ thể như sau:
Bảng subject: Bảng này dùng để lưu trữ thông tin của các bộ đề thi, bao gồm các trường dữ liệu như tên bộ đề, người đăng, nguồn lưu trữ, số câu hỏi, định mức câu hỏi, định mức thời gian. Bảng này được lưu trữ trong SQLite và được tạo ra khi ứng dụng khởi chạy lần đầu.
Dữ liệu bộ đề: Danh sách tất cả các câu hỏi được lưu trữ trong một bảng tính của Microsoft Excel. Tên trường không được quy định cụ thể nhưng được
hiểu ngầm theo thứ tự từng cột. Mỗi dòng sẽ tương ứng với thông tin của từng câu hỏi như nội dung câu hỏi, câu trả lời a, b, c, d, e, h, đáp án, tên file hình ảnh nếu có. Mỗi bộ đề đều có một file cơ sở dữ liệu tên là database.ct. Cấu trúc các bảng như sau:
STT Tên trường Loại Kiểu dữ liệu Chú thích
1 id Khóa chính INTEGER Mã của từ
2 title TEXT Tên bộ đề
3 author TEXT Người đăng
4 src TEXT Nguồn lưu trữ
5 mques INTEGER Số câu hỏi
6 lques TEXT Định mức câu hỏi
7 ltime TEXT Định mức thời gian
Bảng. Cấu trúc bảng subject
STT Tên cột Kiểu dữ liệu Chú thích
1 A INTEGER Mã của câu hỏi
2 B TEXT Nội dung câu hỏi
3 C TEXT Câu trả lời A
4 D TEXT Câu trả lời B
5 E TEXT Câu trả lời C
6 F TEXT Câu trả lời D
7 G TEXT Câu trả lời E
8 H TEXT Câu trả lời H
9 I TEXT Đáp án
10 J TEXT Tên file hình
6.3.2. Xây dựng lớp
5.3.2.2. Lớp dữ liệu: Các lớp này dùng để tạo đối tượng, lưu trữ và xử
lý dữ liệu.
* Lớp DBController: Lớp này dùng để lấy danh sách và xử lý các bộ đề hiển thị trên màn hình chính.
* Lớp ActionController: Lớp này lưu trữ các thao tác đối với file và folder như sao chép/xóa file, tạo/xóa thư mục, giải nén và một số thao tác khác.
* Lớp Subject: Lớp lưu trữ một đối tượng Subject là thông tin một bộ đề thi bao gồm: tên bộ đề, người đăng, nguồn lưu trữ, số câu hỏi của bộ đề, định mức câu hỏi, định mức thời gian.
* Lớp Question: Lớp lưu trữ một đối tượng Question là thông tin một câu hỏi trong một bộ đề thi bao gồm: câu hỏi, câu trả lời a, b, c, d, e, h, đáp án, tên file hình nếu có.
5.3.2.2. Lớp xử lý giao diện: Các lớp này dùng để xử lý các view và
control trên giao diện người dùng. Các lớp này thường phải được liên kết với một layout, các activity được khởi chạy nhờ phương thức onCreate().
Hình 6.6. Các lớp xử lý giao diện
* Lớp SplashScreen: Lớp này khởi chạy activity của màn hình giới thiệu mỗi khi ứng dụng được chạy lên. Sau đó, activity này sẽ tự tắt trong vòng 2 giây.
* Lớp Controller: Đây là activity dùng để thiết lập số câu hỏi và thời gian trước khi thi.
* Lớp MainActivity: Đây là lớp giao diện màn hình chính của ứng dụng. Lớp này chứa danh sách các bộ đề thi và người dùng có thể tải hoặc xóa bộ đề ngay tại đây.
* Lớp Exam: Lớp này dùng để xử lý giao diện thi thử. Lớp này sẽ tải các câu hỏi từ bộ đề và đếm thời gian cho người dùng thi thử.
* Lớp ExamResult: Lớp này dùng để hiển thị kết quả thi và lưu kết quả sau khi thi.
* Lớp ListViewAdapter: Lớp này dùng để xử lý giao diện của từng Item trong điều khiển ListView của lớp MainActivity.
* Lớp QuestionAdapter: Lớp này dùng để xử lý giao diện của từng câu hỏi được hiển thị trong lớp Exam. Giao diện này gồm 7 khung, 1 khung câu hỏi và 6 khung dành cho đáp án. Hình ảnh nếu có cũng sẽ được hiển thị trong khung câu hỏi. * Lớp HorizontalPaper: Đây là lớp mở rộng của ViewGroup. Lớp này có chức năng giúp người dùng chuyển đổi qua lại giữa từng câu hỏi một cách mượt mà như lật một trang giấy.
6.3.3. Lập trình các chức năng chính 6.3.2.1. Các điều khiển cần thiết
Copy file
Xóa một thư mục có chứa nội dung
Xóa một file
6.3.2.2. Tải một file từ server
6.3.2.3. Đọc dữ liệu từ Microsoft Excel
Để truy xuất dữ liệu từ Microsoft Excel, ta cần phải tích hợp thêm thư viện Apache POI. Thư viện Java này giúp người dùng có thể tương tác với Microsoft Documents. Tải về tại:
https://poi.apache.org/download.html
Sau khi tải về, ta tích hợp file poi-xxx.jar vào Android Studio. Sau khi hoàn tất, ta có thể sử dụng các đối tượng HSSFWorkbook, HSSFSheet,… đểu dyệt
dữ liệu trong Microsoft Excel.
6.3.2.4. Tạo số câu hỏi ngẫu nhiên từ bộ đề
6.3.2.5. Reciever Broadcast
Chức năng này giúp đồng bộ cơ sở dữ liệu từ MySQL khi người quản trị thêm một bộ đề mới với SQLite của ứng dụng thông qua JSON. Chức năng này cũng giúp ứng dụng nhận thông báo mỗi khi người quản trị thêm một bộ đề mới hoặc người dùng chưa cập nhật thông tin bộ đề mới.
Trình tự hoạt động của Receiver Broadcast: xem hình 6.4.
Để thực hiện chức năng này, ta cần chuẩn bị các thành phần sau:
MySQL chứa một bảng để chứa thông tin khi người dùng thêm bộ đề mới. Web App (PHP language): gồm một file config.php để cấu hình web, một
file database.php để chứa các phương thức mở kết nối với MySQL, một file
getCount.php để đếm các bộ đề trong MySQL, một file getData.php để lấy
thông tin của tất cả các bộ đề trong MySQL.
Về ứng dụng, trước hết ta cần tích hợp thư viện Android Asynchronous Http Client để sử dụng các đối tượng liên quan đến http:
http://loopj.com/android-async-http/
Lớp BCReceiver để tìm kiếm cập nhật từ MySQL thông qua thông qua trang
getCount.php. Lớp MyService sẽ được kích hoạt khi lớp BCReceiver cập nhật
được bộ đề mới. Lớp syncData trong MainActivity sẽ có nhiệm vụ thông qua trang getData.php để lấy tất cả các thông tin từ MySQL và thêm vào SQLite khi người dùng nhấn nút Refresh trên menu.
6.3.4. Giao diện ứng dụng
Hình 6.4. Giao diện giới thiệu khi mở ứng dụng
Hình 6.9. Giao diện kết quả Hình 6.6. Giao diện thiết lập đề thi Hình 6.7. Giao diện thi thử
Hình 6.8. Giao diện khi xem đáp án
6.4. Kết luận
6.4.1. Kết quả đạt được
Ứng dụng trắc nghiệm đã được hoàn thiện với giao diện đơn giản, dễ sử dụng, phù hợp với nhu cầu của người dùng mọi lúc mọi nơi.
Ứng dụng hoàn thiện các nhu cầu cơ bản của người dùng như quản lý bộ đề, thiết lập số câu hỏi và thời gian đề thi, chức năng chọn nhiều câu trả lời cho một câu hỏi, xem và lưu kết quả sau khi thi.
Hỗ trợ các bộ đề mẫu căn bản như: Trắc nghiệm xe máy, xe ôtô, trắc nghiệm Gmath, trắc nghiệm IQ.
Ngoài ra, ứng dụng còn kèm theo một số công cụ để tạo bộ đề và upload bộ đề đã được tạo lên server để người dùng ứng dụng cập nhật bộ đề mới.
6.4.2. Hướng phát triển
Tiếp tục hoàn thiện ứng dụng cả về chức năng và giao diện.
Thêm tính năng đăng nhập cho từng sinh viên và quản lý điểm trực tuyến.
TỔNG KẾT
Qua quá trình thực hiện đề tài viết ứng dụng trên hệ điều hành Android với sự hướng dẫn của thầy Nguyễn Xuân Nhựt, em đã cài đặt thành công ứng dụng từ điển và ứng dụng trắc nghiệm lên hệ điều hành Android, đã publish được ứng dụng lên Google Play và chạy thử trên nhiều thiết bị Android khác nhau.
Em cũng nắm được cơ sở lý thuyết để viết ứng dụng, có thêm kinh nghiệm trong việc áp dụng kiến thức đã học vào thực tế và học hỏi công nghệ mới. Ngoài ra, em còn được cơ hội đê nghiên cứu một công cụ viết ứng dụng vừa cho ra mắt phiên bản chính thức là Android Studio.
Đề tài sẽ tạo tiền đề cho việc nghiên cứu phát triển các ứng dụng sau này. Sản phẩm có thể đưa vào thực tế dễ dàng, qua đó thấy được tính thực tế của đề tài và mở đầu cho các hướng nghiên cứu sử dụng công nghệ mới cho sinh viên về sau.
TÀI LIỆU THAM KHẢO
[1] Professional Android Application Development – Reto Meier
[2]Ts Trương Thị Ngọc Phượng, “Lập trình Anroid “, Nhà xuất bản Thời Đại. [3] http://android.vn [4] http://developer.android.com [5] http://duythanhcse.wordpress.com [6] http://stackoverflow.com [7] http://congdongandroid.com [8] http://wikipedia.com DANH MỤC HÌNH ẢNH
Hình 1.1. Biểu tượng Android qua các thời kỳ Hình 1.2. Cấu trúc stack hệ thống Android
Hình 1.3. Các cấp độ API được hỗ trợ bởi mỗi phiên bản của nền tảng Android. Hình 2.1. Cấu trúc JDK
Hình 2.2. Thiết lập Environment Variables Hình 2.3. Máy ảo của Android Studio Hình 2.4. Màn hình Genymotion
Hình 2.5. Giao diện khi mở một project
Hình 2.6. Cấu trúc cây của một Project trong Android Stuido Hình 2.7. Khai báo Activity trong AndroidManifest
Hình 2.8. Vòng đời của một Activity Hình 2.9. Activity Stack
Hình 2.10. Tương tác giữa các Activity Hình 2.11. Vòng đời của một ứng dụng
Hình 2.12. Vòng đời chi tiết của một ứng dụng Hình 3.1. Cấu trúc một giao diện ứng dụng Android Hình 3.2. Ví dụ về FrameLayout
Hình 3.4 Ví dụ về RelativeLayout Hình 3.5. Ví dụ về AbsoluteLayout Hình 3.6. Ví dụ về ListView
Hình 3.7. Ví dụ về Tab Selector Hình 3.8. Ví dụ về Context Menu
Hình 4.1. Mô phỏng hoạt động của Intent Hình 4.2. Các thuộc tính của intent
Hình 4.3. Các action đã được định nghĩa sẵn trong Intent Hình 4.4. Chu kỳ sống của một Service