Tải bản đầy đủ (.pdf) (28 trang)

Báo cáo chuyên đề Lập trình hỗ trợ học và kiểm tra kiến thức Luật Giao thông đường bộ trên Android

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (733.82 KB, 28 trang )

VIỆN ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

NGUYỄN VĂN QUY – 11B4

LẬP TRÌNH HỖ TRỢ HỌC VÀ KIỂM TRA
KIẾN THỨC LUẬT GIAO THÔNG ĐƯỜNG BỘ
TRÊN ANDROID
Môn: Lập trình ứng dụng

BÁO CÁO CHUYÊN ĐỀ

Hà Nội - 2016


VIỆN ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

NGUYỄN VĂN QUY – 11B4

LẬP TRÌNH HỖ TRỢ HỌC VÀ KIỂM TRA
KIẾN THỨC LUẬT GIAO THÔNG ĐƯỜNG BỘ
TRÊN ANDROID
Môn: Lập trình ứng dụng
Giảng viên hướng dẫn:
TS. Dương Thăng Long
BÁO CÁO CHUYÊN ĐỀ

Hà Nội - 2016



LỜI CẢM ƠN

Em xin chân thành cảm ơn ban chủ nhiệm khoa Công nghệ thông tin,
các thầy cô giáo, gia đình và bạn bè đã động viên giúp đỡ em rất nhiều trong
quá trình làm chuyên đề tốt nghiệp này. Đặc biệt em xin bày tỏ lòng cảm ơn
sâu sắc tới thầy giáo hướng dẫn T.S Dương Thăng Long về sự tận tình, tận
tâm hướng dẫn em từ những ý tưởng đầu tiên cho đền lúc hoàn thành bài
chuyên đề tốt nghiệp của mình.
Em xin bày tỏ lòng biết ơn tới gia đình thân yêu, những người bạn thân
đã luôn tin tưởng, quan tâm, động viên, giúp đỡ em trong thời gian qua.
Em rất mong nhận được sự đánh giá, bổ sung và những lời chỉ bảo của
các thầy cô đề em có thể tiếp tục nghiên cứu kĩ hơn về lĩnh vực này.
Em xin chân thành cảm ơn!

Sinh viên: Nguyễn Văn Quy


MỤC LỤC
Chương 1: CƠ SỞ LÝ THUYẾT ................................................................... 1
1.1

Nền tảng di động ................................................................................. 1

1.1.1 Android.......................................................................................... 2
1.1.2 Windows Phone ............................................................................. 3
1.1.3 Sysbian........................................................................................... 3
1.1.4 BlackBerry .................................................................................... 4
1.2

Hệ điều hành Android ........................................................................ 4


1.2.1 Giới thiệu ....................................................................................... 4
1.2.2 Kiến trúc ........................................................................................ 5
1.3

Ngôn ngữ lập trình JAVA................................................................... 9

1.3.1 Giới thiệu ....................................................................................... 9
1.3.2 Đặc trưng ....................................................................................... 9
1.3.3 Các thế mạnh .............................................................................. 12
1.3.4 Mô hình làm việc Xcode ............................................................. 13
Chương 2: PHÂN TÍCH BÀI TOÁN ........................................................ 15
2.1

Giới thiệu đề tài ................................................................................. 15

2.1.1 Mô tả bài toán ............................................................................. 15
2.1.2 Các chức năng ............................................................................. 15
2.2

Cơ sở dữ liệu...................................................................................... 15

Chương 3 ỨNG DỤNG .............................................................................. 19
3.1

Nguồn dữ liệu .................................................................................... 19

3.2

Giao diện............................................................................................ 20


Hình 3.1 Giao diện của ứng dụng ................................................................. 20
TÀI LIỆU THAM KHẢO ...................................................................... 23


DANH MỤC VIẾT TẮT
STT

Tên viết tắt

Tên đầy đủ

Dich ra tiếng việt
(Nếu là tiếng anh)

1

iOS

Iphone Opera System

Hệ điều hảnh trên nền
di động của Apple

2

API

Application Programming
Interface


Giao diện lập trình ứng
dụng

3

JDT

Java Development Toolkit

Môi trường phát triển
Java

4

AWT

Abstract Window Toolkit

Công cụ trừu tượng

5

JNI

Java Native Interface

Giao diện Java
nguyên bản


7

RIM

Research In Motion

Công ty sản suất
BlackBerry

8

JVM

Java Virtual Machine

Máy ảo Java

9

SDK

Software Developement
Kit

Công cụ phát triển
phần mềm

10

IDE


Integrated Development
Environmen

Môi trường thiết kế
hợp nhất


Chương 1: CƠ SỞ LÝ THUYẾT
1.1 Nền tảng di động
Ngày này, thị trường di động đang
phát triển mạnh mẽ chưa từng thấy với
vô vàng các nhãn hiệu, kiểu dáng, tính
năng...Đã biến chiếc điện thoại thành
một thiết bị giải trí đa phương tiện không
thể thiếu. Với lợi thế nhỏ gọn, được mọi
người sử dụng đem theo mọi lúc mọi
nơi, nhưng cũng vì nhỏ gọn như vậy
cũng là một bất lợi về xử lý và tốc độ.
Để đảm bảo một chiếc điện thoại thông minh hoạt động tốt thì nó cần có một hệ
điều hành quản lý thiết bị.
Đi kèm với sự phát triển phần cứng trên thiết bị động thì cuộc chiến của
các nhà phát triển các hệ điều hành trên điện thoại di động cũng diễn ra hết
sức khốc liệt. Hiện nay, các nền tảng di động lớn được biết đến như sau
Nền tảng di động iOS với điện thoại di động thông minh iPhone, với thiết
kế đẹp, thời trang, cảm ứng mượt mà, màn hình đẹp và sắc nét cùng với tài
năng của "thánh" Steve Jobs đã khiến cho iPhone trở thành hiện tượng trên
mọi thị trường, đặc biệt là ở Mỹ. Doanh số bán ra của iPhone tăng dần qua
các năm, và dần dần thống lĩnh thị trường của nhiều nước. iPhone dù mỗi
năm chỉ ra một phiên bản mới nhưng sức nóng đủ lan tỏa khắp làng di động,

do đó, iOS vẫn chưa bao giờ "già".
iOS là hệ điều hành "đóng" hoạt động trên iPhone, iPad, iPod. iOS đã
quyết định rất nhiều đối với sự thành công của Apple, với giao diện bóng
bẩy, đẹp mắt, và dễ sử dụng. Tất cả chỉ là chạm và vuốt để thực thi. Cùng
với chính sách hợp lý để thu hút các lập trình viên viết ứng dụng, kho ứng
1


dụng Appstore ngày càng lớn khiến cho người dùng càng thêm thích thú,
mọi nhu cầu của từng người đều có thể được đáp ứng. Cũng như việc Apple
cũng tung ra cập nhật, vá các lỗi liên tục khi phát hiện, khiến cho iOS ngày
càng trở nên "thông minh" hơn, an toàn hơn.
Nhưng nếu gọi iOS là thống trị năm 2012 thì điều đó cũng là chưa thể. Vì
iOS chỉ được cài giới hạn trên thiết bị của Apple gồm những thiết bị như
iPhone, iPad, iPod... Thị phần của thiết bị Apple trên thế giới nói chung là
không lớn, số liệu các bạn thấy trên các báo đa số chỉ thống kê tại Mỹ,
nhưng đã gọi là thống trị thì phải là thống trị trên thị trường di động toàn thế
giới.
1.1.1

Android

Mặc dù sinh sau đẻ muộn, nhưng Android đang có những bước tiến thần
tốc, trong thời gian ngắn đã đạt được nhiều điều khiến mọi hệ điều hành di
động mơ ước: khoảng 700.000 điện thoại Android được kích hoạt mỗi ngày.
Khi mà iOS ngày càng bành trướng mà Symbian lại không đủ sức để cạnh
tranh. Các lập trình viên, các nhà sản xuất điện thoại chú ý đến Android. Hệ
điều hành di động mở được Google phát triển dựa trên nền tảng Linux.
Android ngày càng lớn mạnh về số lượng và chất lượng bởi sự linh hoạt từ
nền tảng Google, phù hợp với cả smartphone tầm thấp lẫn giá cao. Hàng loạt

các nhà sản xuất điện thoại di động sử dụng Android làm hệ điều hành chính
cho các sản phẩm của mình. Như HTC, Samsung, LG, Motorola, Sony
Ericsson... Từ điện thoại, cho đến máy tính bảng của các hãng này đều dùng
hệ điều hành Android. Các nhà lập trình viết ứng dụng ngày càng nhiều trên
Android Market. Kho ứng dụng đang cạnh tranh trực tiếp với AppStore của
Apple. Chính vì điều này mà đã khiến Android ngày càng bành trướng trên
thị trường khắp các châu lục, và đến năm 2012, Android sẽ là hệ điều hành
thống trị.

2


Nhưng các bạn có thể thấy, dường như Android đang ở trên đỉnh cao của
mình. Chính vì có quá nhiều thiết bị, mỗi thiết bị có cấu hình riêng, nhà sản
xuất tùy biến riêng và việc có quá nhiều ứng dụng, nhưng lại không theo một
chuẩn cụ thể nào. Khiến Android ngày càng bị phân mảnh và rời rạc.
Android được cập nhật quá thường xuyên, dẫn đến tình trạng trên thị
trường có nhiều phiên bản cùng tồn tại, được phát hành song song với nhau.
Google đang dần muốn kiểm soát và hạn chế sự phân mảnh, nhưng đồng
thời cũng làm mất dần tính "mở" vốn là triết lý cơ bản của Android.
1.1.2

Windows Phone

Sau sự kiện Microsoft hợp tác cùng Nokia. Nokia sẽ chạy hệ điều hành
Windows Phone trên các smartphone của mình song song với Symbian và
MeeGo. Với lợi thế là nhà sản xuất điện thoại chiếm thị phần cao trên thế
giới. Windows Phone bắt đầu khiến các hệ điều hành di động khác lo lắng.
Windows Phone 7 không có gì giống Windows Mobile. Hệ điều hành
mới này có một diện mạo hoàn mới, hợp thời, với giao diện Metro đầy mới

lạ, gần giống như một tờ tạp chí, và cực kỳ dễ sử dụng mặc dù cách xử lý
mọi việc rất khác. Windows Phone 7 cũng đã tạo ra một sức hấp dẫn mới
cho làng công nghệ. Kho ứng dụng Marketplace tuy có khiêm tốn nhưng rất
nhiều phần mềm hữu ích và được kiểm soát bởi Microsoft.

1.1.3

Sysbian

Symbian, hệ điều hành di động được đánh giá là thân thiện, dễ sử dụng.
Symbian rất mạnh đối với các dòng điện thoại sử dụng màn hình cứng, bàn
phím T9 cơ bản. Và kho ứng dụng của Symbian trong 10 năm qua không
phải là ít. Những ứng dụng này đáp ứng không nhỏ trong công việc, đời
sống hằng ngày của mọi người.

3


Từ bản Symbian^3, giao diện đã thay đổi rất nhiều. Nhưng chưa rõ rệt cho
lắm. Cho đến bản Symbian Anna, Symbian Belle toàn bộ đã khác: Biểu
tượng trau chuốt hơn, giao diện mượt mà hơn, loại bỏ nhiều thứ không cần
thiết. Mọi sự cố gắng của Symbian khi thuộc về Nokia có vẻ như đang có sự
tiến bộ rõ rệt. Có điều năm 2012 không phải là năm của Symbian khi chính
Nokia cũng đang xuống dốc.
1.1.4

BlackBerry

Là dòng máy Smartphone cao cấp và nổi tiếng trên thế giới do hãng
Research In Motion cung cấp. Ngoài những tính năng thông thường, điểm

tạo nên sự khác biệt của máy BlackBerry là kiểu thiết kế rất đặc trưng; pin
tốt và hơn cả là dịch vụ Push Mail nổi tiếng và thương hiệu BlackBerry được
xây dựng rất thành công.
BlackBery OS 6 được RIM công bố tại sự kiện Wireless Enterprise
Symposium (diễn ra từ 27 đến 29/4 tại Mỹ). RIM chưa đưa ra chi tiết về hệ
điều hành mới, ngoài một đoạn video quảng cáo khá ấn tượng. Theo những
thông tin đầu tiên, nhiều cải tiến từ giao diện, màn hình Home mới, menu
pop-up, khả năng chuyển dịch, trình duyệt web mới dựa trên nền tảng
WebKit tương thích HTML5. Ngoài ra, BlackBerry OS 6 hỗ trợ khả năng
điều khiển trên màn hình cảm ứng đa điểm tốt hơn.

1.2 Hệ điều hành Android
1.2.1

Giới thiệu

Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên
một số đầu phát HD, HD Player, TV) phát triển bởi Google và dựa trên nền
tảng Linux. Trước đây, Android được phát triển bởi công ty liên hợp
Android ( sau đó được Google mua lại vào năm 2005).

4


Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự
ra mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của
liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng,
phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện
thoại di động trong tương lai.
1.2.2


Kiến trúc

Hình 1.1. Kiến trúc Hệ điều hành Android

1.2.2.1 Tầng Aplycation
Hệ điều hành Android tích hợp sẳn một số ứng dụng cơ bản như email
client, SMS, lịch điện tử, bản đồ, trình duyệt web, sổ liên lạc và một số
ứng dụng khác. Ngoài ra tầng này cũng chính là tầng chứa các ứng dụng
được phát triển bằng ngôn ngữ Java.
1.2.2.2 Tầng Applycation Famework

5


Tầng này của hệ điều hành Android cung cấp một nền tảng phát triển
ứng dụng mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra
các ứng dụng vô cùng sáng tạo và phong phú. Các nhà phát triển ứng dụng
được tự do sử dụng các tính năng cao cấp của thiết bị phần cứng như:
thông tin định vị địa lý, khả năng chạy dịch vụ dưới nền, thiết lập đồng hồ
báo thức, thêm notification vào status bar của màn hình thiết bị…
Người phát triển ứng dụng được phép sử dụng đầy đủ bộ API được dùng
trong các ứng dụng tích hợp sẳn của Android. Kiến trúc ứng dụng của
Android được thiết kế nhằm mục đích đơn giản hóa việc tái sử dụng các
component. Qua đó bất kì ứng dụng nào cũng có thể công bố các tính năng
mà nó muốn chia sẻ cho các ứng dụng khác (VD: Ứng dụng email có
muốn các ứng dụng khác có thể sử dụng tính năng gởi mail của nó).
Phương pháp tương tự cho phép các thành phần có thể được thay thế bởi
người sử dụng.
Tầng này bao gồm một tập các services và thành phần sau:

1.

Một tập phong phú và có thể mở rộng bao gồm các đối tượng View

được dùng để xây dựng ứng dụng như: list, grid, text box, button và thậm
chí là một trình duyệt web có thể nhúng vào ứng dụng.
2.

Content Provider: Cho phép các ứng dụng có thể truy xuất dữ liệu

từ các ứng dụng khác hoặc chia sẽ dữ liệu của chúng.
3.

Resource Manager: Cung cấp khả năng truy xuất các tài nguyên

non-code như hình ảnh hoặc file layout.
4.

Notification Manager: Cung cấp khả năng hiển thị custom alert

trên thanh status bar.
5.

Activity Manager: Giúp quản lý vòng đời của một ứng dụng.

1.2.2.3 Tầng Library
6


System C library: một thể hiện được xây dựng từ BSD của bộ thư viện

hệ thống C chuẩn (libc), được điều chỉnh để tối ưu hóa cho các thiết bị
chạy trên nền Linux.
Media libraries: Bộ thư viện hổ trợ trình diễn và ghi các định dạng âm
than và hình ảnh phổ biến.
Surface manager: Quản lý hiển thị nội dung 2D và 3D.
LibWebCore: Một web browser engine hiện đại được sử dụng trong
trình duyệt của Android lần trong trình duyệt nhúng web view được sử
dụng trong ứng dụng.
SGL: Engine hổ trợ đồ họa 2D.
3D libraries: Một thể hiện được xây dựng dựa trên các APIs của
OpenGL ES 1.0. Những thư viện này sử dụng các tăng tốc 3D bằng phần
cứng lẫn phần mềm để tối ưu hóa hiển thị 3D.
FreeType: Bitmap and vector font rendering.
SQLite: Một DBMS nhỏ gọn và mạnh mẽ.
1.2.2.4 Android Runtime
Hệ điều hành Android tích hợp sẳn một tập hợp các thư viện cốt lõi cung
cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập
trình Java. Mọi ứng dụng của Android chạy trên một tiến trình của riêng nó
cùng với một thể hiện của máy ảo Dalvik. Máy ảo Dalvik thực tế là một
biến thể của máy ảo Java được sửa đổi, bổ sung các công nghệ đặc trưng
của thiết bị di động. Nó được xây dựng với mục đích làm cho các thiết bị
di động có thể chạy nhiều máy ảo một cách hiệu quả. Trước khi thực thi,
bất kì ứng dụng Android nào cũng được convert thành file thực thi với
định dạng nén Dalvik Executable (.dex). Định dạng này được thiết kế để
phù hợp với các thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý. Ngoài ra
máy ảo Dalvik sử dụng bộ nhân Linux để cung cấp các tính năng như
thread, low-level memory management.
1.2.2.5 Linux Ken
7



Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những
dịch vụ hệ thống cốt lõi như: security, memory management, process
management, network stack, driver model. Bộ nhân này làm nhiệm vụ như
một lớp trung gian kết nối phần cứng thiết bị và phần ứng dụng.

Hình 1.2. Mô hình hợp tác giữa máy ảo Dalvik và Navite code
JNI: Java Native Interface (Tương tự khái niệm Application
Programming Interface).
Java Native Interface: là một bộ framework cho phép mã lệnh viết
bằng Java chạy trên máy ảo java có thể gọi hoặc được gọi bởi một ứng
dụng viết bằng native code (Ứng dụng được viết cho một phần cứng cụ
thể và trên một hệ điều hành cụ thể) hoặc những bộ thư viện viết bằng C,
C++ hoặc Assembly.
Bằng cách sử dụng JNI, Android cho phép các ứng dụng chạy trên máy
ảo Dalvik có thể sử dụng những phương thức được viết bằng các ngôn ngữ
cấp thấp như: C, C++, Assembly. Qua đó các nhà phát triển ứng dụng có
thể xây dựng ứng dụng dựa trên các bộ thư viện viết bằng C, C++,
Assembly nhằm tăng tốc độ thực thi của ứng dụng hoặc sử dụng những
tính năng mức thấp mà ngôn ngữ Java không hổ trợ. Tuy nhiên người phát
triển ứng dụng cần phải cân nhắc sự gia tăng độ phức tạp của ứng dụng khi
quyết định sử dụng các bộ thư viện này.
8


1.3 Ngôn ngữ lập trình JAVA
1.3.1

Giới thiệu


Java là một công nghệ xây dựng các ứng
dụng phần mềm có vị trí rất lớn trong những
năm cuối thế kỉ 20, đầu thế kỉ 21. Nó được coi là
công nghệ mang tính cách mạng và khả thi nhất trong việc tạo ra các ứng
dụng có khả năng chạy thống nhất trên nhiều nền tảng mà chỉ cần biên
dịch một lần.
Lần đầu tiên xuất hiện vào năm 1992 như là một ngôn ngữ dùng trong
nội bộ tập đoàn Sun Microsystems để xây dựng ứng dụng điều khiển các
bộ xử lý bên trong máy điện thoại cầm tay, lò vi sóng, các thiết bị điện tử
dân dụng khác. Không chỉ là một ngôn ngữ, Java còn là một nền tảng
phát triển và triển khai ứng dụng trong đó máy ảo Java.
Sun, công ty đã phát minh ra ngôn ngữ Java, chính thức ban hành bản
Java Development Kit 1.0 vào năm 1996 hoàn toàn miễn phí để các nhà
phát triển có thể tải về, học Java, xây dựng các ứng dụng Java và triển
khai chúng trên các hệ điều hành có hỗ trợ Java. Ban đầu, Java chủ yếu
dùng để phát triển các Applet, các ứng dụng nhúng vào trình duyệt, góp
phần làm sinh động các trang web tĩnh vốn hết sức tẻ nhạt hồi đó. Tuy
nhiên, cùng với sự phát triển của công nghệ thông tin và nhu cầu của xã
hội, Java Applet đã dần mất đi vị trí của nó và thay vào đó, các công ty,
cộng đồng ủng hộ Java đã phát triển nó theo một hướng khác.
1.3.2
6.

Đặc trưng
Đơn giản
Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và
quen thuộc với đa số người lập trình. Do vậy Java loại bỏ các đặc trưng
phức tạp của C và C++ như thao tác con trỏ, thao tác định nghĩa chồng
9



toán tử (operator overloading),… Java không sử dụng lệnh “goto” cũng
như file header (.h). Cấu trúc “struct” và “union” cũng đượcloại bỏ khỏi
Java.
7.

Hướng đối tượng
Java được thiết kế xoay quanh mô hình hướng đối tượng. Vì vậy
trong Java, tiêu điểm là dữ liệu và các phương pháp thao tác lên dữ liệu
đó. Dữ liệu và các phương pháp mô tả trạng thái và cách ứng xử của một
đối tượng trong Java.

8.

Độc lập phần cứng và hệ điều hành
Đây là khả năng một chương trình được viết tại một máy nhưng có
thể chạy được bất kỳ đâu. Chúng được thể hiện ở mức mã nguồnvà mức
nhị phân.
Tính độc lập ở mức nhị phân, một chương trình đã biên dịch có thể
chạy trên nhiều nền (phần cứng, hệ điều hành) khác mà không cần dịch
lại mã nguồn. Tuy vậy cần có phần mềm máy ảo Java (JVM) hoạt động
như một trình thông dịch tại máy thực thi.
Môi trường phát triển của Java được chia làm hai phần: Trình biên
dịch và trình thông dịch. Không như C hay C++, trình biên dịch của Java
chuyển mã nguồn thành dạng bytecode độc lập với phần cứng mà có thể
chạy trên bất kỳ CPU nào.
Nhưng để thực thi chương trình dưới dạng bytecode, tại mỗi máy cần
phải có trình thông dịch của Java hay còn gọi là máy ảo Java. Máy ảo
Java chuyển bytecode thành mã lệnh mà CPU thực thi được.


9.

Mạnh mẽ
Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu.Phải khai báo kiểu
dữ liệu tường minh khi viết chương trình. Java kiểm tra lúcbiên dịch và
cả trong thời gian thông dịch vì vậy Java loại bỏ một một số loạilỗi lập
trình nhất định. Java không sử dụng con trỏ và các phép toán con trỏ.
10


Java kiểm tra tất cả các truy nhập đến mảng, chuỗi khi thực thi để đảm
bảo rằng các truy nhập đó không ra ngoài giới hạn kích thước. Java kiểm
tra sự chuyển đổi kiểu dữ liệu từ dạng này sang dạng khác lúc thực thi.
Cơ chế bẫy lỗi của Java giúp đơn giản hóa qúa trình xử lý lỗi và hồi
phục sau lỗi.
10.

Bảo mật
Viruses là nguyên nhân gây ra sự lo lắng trong việc sử dụng máy tính.

Trước khi có Java, các lập trình viên phải quét virus các tệp trước khi tải
về hay thực hiện chúng. Thông thường việc này cũng không loại trừ hoàn
toàn virus. Ngoài ra chương trình khi thực thi có khả năng tìm kiếm và
đọc các thông tin nhạy cảm trên máy của người sử dụng mà người sử
dụng không hề hay biết.
Java cung cấp một môi trường quản lý thực thi chương trình. Nó cho
rằng không có một đoạn mã nào là an toàn cả. Và vì vậy Java không chỉ
là ngôn ngữ lập trình thuần tuý mà còn cung cấp nhiều mức để kiểm soát
tính an toàn khi thực thi chương trình.
Ở mức đầu tiên, dữ liệu và các phương thức được đóng gói bên trong

lớp. Chúng chỉ được truy xuất thông qua các giao diện mà lớp cung cấp.
Java không hỗ trợ con trỏ vì vậy không cho phép truy xuất bộ nhớ trực
tiếp. Nó cũng ngăn chặn không cho truy xuất thông tin bên ngoài kích
thước của mảng bằng kỹ thuật tràn và cũng cung cấp kỹ thuật dọn rác
trong bộ nhớ. Các đặc trưng này tạo cho Java an toàn tối đa và cókhả
năng cơ động cao.
Trong lớp thứ hai, trình biên dịch kiểm soát để đảm bảo mã là an
toàn, và tuân theo các nguyên tắc của Java.
Lớp thứ ba được đảm bảo bởi trình thông dịch. Chúng kiểm tra xem
bytecode có đảm bảo các qui tắc an toàn trước khi thực thi.
11


Lớp thứ tư kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi
phạm giới hạn truy xuất trước khi nạp vào hệ thống.

11.

Phân tán
Java có thể dùng để xây dựng các ứng dụng có thể làm việc trên nhiều
phần cứng, hệ điều hành và giao diện đồ họa. Java được thiết kế hỗ trợ
cho các ứng dụng chạy trên mạng. Vì vậy chúng được sử dụng rộng rãi
như là công cụ phát triển trên Internet, nơi sử dụng nhiều nền tảng khác
nhau.

12.

Đa luồng
Chương trình Java đa luồng( Multithreading) để thực thi các công
việc đồng thời. Chúng cũng cung cấp giải pháp đồng bộ giữa các luồng.

Đặc tính hỗ trợ đa này này cho phép xây dựng các ứng dụng trên
mạngchạy hiệu quả.

13.

Động
Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi
trường mở. Các chương trình Java chứa rất nhiều thông tin thực thi
nhằm kiểm soát và truy nhập đối tượng lúc chạỵ. Điều nàycho phép khả
năng liên kết động mã.

1.3.3

Các thế mạnh
Ngôn ngữ lập trình JAVA được chọn cho Collections framework vì một

số lý do dưới đây:
• Nó là ngôn ngữ lập trình hướng đối tượng và các chức năng cung cấp
bởi Collections framework chỉ có thể được mang lại bởi các kỹ thuật
hướng đối tượng.
• Nó là thành phần mở rộng của chuẩn ANSI C vì vậy các chương trình
viết bằng java của framework này sẽ không bị mất đi tính năng nào và
12


người dùng được hưởng các lợi thế của ngôn ngữ java.Với ngôn ngữ
này, người dùng có thể lựa chọn cả lập trình hướng đối tượng và lập
trình thủ tục khi cần thiết.
• Nó đơn giản và dễ học bởi cú pháp của nó khá ngắn gọn nên nó giúp cho
lập trình viên đạt được hiệu quả mong muốn mà không gặp nhiều khó

khăn.
• Nó là một ngôn ngữ mạnh bởi vì các quyết định có thể được đưa ra lúc
biên dịch sẽ được trì hoãn cho tới khi chương trình chạy.
• Nó hỗ trợ ràng buộc động và mở tạo ra một cấu trúc đơn giản đối với
giao diện tương tác người dùng.
Nó cho phép phát triển các công cụ phát triển phức tạp. Một giao diện
cho hệ thống run time tạo điều kiện cho việc tiếp cận các thông tin lúc run
time giúp cho việc monitor ứng dụng viết bằng JAVA.
Mô hình làm việc Xcode

1.3.4

Eclipse là phần mềm miễn phí, được các nhà phát triển sử dụng để xây
dựng những ứng dụng J2EE, sử dụng Eclipse nhà phát triển có thể tích hợp
với nhiều công cụ hỗ trợ khác để có được một bộ công cụ hòan chỉnh mà
không cần dùng đến phần mềm riêng nào khác. Eclipse SDK bao gồm 3 phần
chính:
Platform, Java Development Toolkit(JDT), Plug-in Development
Environment(PDE)
Với JDT, Eclipse được xem như là một môi trường hỗ trợ phát triển Java
mạnh mẽ. PDE hỗ trợ việc mở rộng Eclipse, tích hợp các Plug-in vào Eclipse
Platform.

Eclipse Platform là nền tảng của toàn bộ phần mềm Eclipse, mục đích
của nó là cung cấp những dịch vụ cần thiết cho việc tích hợp những bộ công
13


cụ phát triển phần mếm khách dưới dạng Plug-in, bản thân JDT cũng có thể
được coi như là một Plug-in làm cho Eclipse như là một Java IDE

(Integrated Development Enviroment).
Các thành phần chính của Eclipse:
• The Platform runtime: Công việc chính của Platform runtime là phát
xem plug-in nào đang có trong thư mục plug-in củaEclipse.Mỗi Plug-in
đều có 1 tập tin Manifest liệt kê những kết nối mà plug-in cần.Pug-in chỉ
được tảivào Eclipse mỗi khi thực sự cần thiết để giảm lượng tài nguyên
yêu cầu và thời gian khởi tạo..
• The workspace: Workspace chịu trách nhiệm quản lý tài nguyên người
dùng được tồ chức dưới dạng Project.

Mỗi Project là một thư mục con trong thư mục Workspace.
- Workspace bảo quản cấp thấp lịch sử những sự thay đổi tài
nguyên, tránh thất thoát tài nguyên người dùng.
- Workspace đồng thời chịu trách nhiệm thông báo những công cụ
cần thiết cho việc thay đôit tà nguyên.
• The Workbench: Jface. Eclipse không hoàn toan bắt buộc phải sử dụng
SWT hay Jface để lập trình giao diện, bạn vẫn có thể sử dụng AWT hay
SWING của Java thông qua việc cài đặt các Plug-ins.
• Team supost: Trang bị hệ thống quản trị để quản lý dự án của người
dùng: Concurrent Version System(CVS).
• Help: Cung cấp hệ thống tài liệu mở rộng, có thể là định dạng HTML
hay XML.

14


Chương 2: PHÂN TÍCH BÀI TOÁN
2.1 Giới thiệu đề tài
Mô tả bài toán


2.1.1

Trong thời đại công nghệ thông tin việc học và kiểm tra kiến thức về luật
giao thông đường trở nên thuận tiện hơn bao giờ hết qua những chiếc điện
thoại thông minh. Qua công nghệ lập trình Android có thể lạo ra phần mềm
học và hỗ trợ kiểm tra kiến thức về luật giao thông đường bộ đem lại sự thuận
tiện cho người dùng ở mọi lúc mọi nơi
2.1.2

Các chức năng

- Luật giao thông đường bộ
• Văn bảng quy phạm pháp luật,
• Các mức xử phạt xe moto
- Các biển báo giao thông
- Luyện thi sát hạch
- Thi thử sát hạch
- Tra cứu biển số các tỉnh

2.2 Cơ sở dữ liệu
- “fine” : chứa thông tin xử phạt xe moto
- “lawdocument” : Chứa thông tin về luật giao thông đường bộ
- “licenseplates”: chứa thông tin về các biển số xe của các tỉnh
- “trafficsigns”: chứa thông tin các loại biển số xe

15


CSDL SQLite
Khởi tạo csdl:

Tạo 1 lớp CreateDatabase kế thừa SQLiteOpenHelper có các biến và phương
thức sau:
1.
private static final String DATABASE_NAME = "mydb.db";
(Tên của csdl sẽ tạo là mydb)
2.
private static final int SCHEMA_VERSION = 2;
(Phiên bản của sqlite)
3.
Phương thức khởi dựng của lớp là
public CreateDatabase(Context context){
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}
(Khi gọi đến lớp CreateDatabase thì hạm này sẽ tự động chạy và tạo csdl nếu
chưa có hoặc nếu đã có csdl này thì nó sẽ mở csdl nó lên)
4.
Ghi đè phương thức onCreate của lớp CreateDatabase:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE lawdocument (provision TEXT,content
TEXT,chapter TEXT);");
db.execSQL("CREATE TABLE fine (_id INTEGER PRIMARY KEY
AUTOINCREMENT,sentence TEXT, price TEXT);");
db.execSQL("CREATE TABLE licenseplates (cityname
TEXT,licensepalte INTERGER);");
db.execSQL("CREATE TABLE trafficsigns (signname TEXT,signtype
TEXT,signconten TEXT);");
}

16



Khi gọi đến lớp CreateDatabase thì hàm này cũng sẽ được tự động chạy sau khi
hàm Khởi dựng được chạy. Hàm này sẽ tạo các bảng lawdocument (bảng các
văn bản pháp luật), bảng fine (bảng này chứa dữ liệu về xử phạt xe máy), bảng
licenseplates (bảng chứa các thông tin biển xe theo các tỉnh), bảng trafficsigns
(bảng chứa các thông tin về biển báo giao thông).
5.
Hàm getAll
public Cursor getAll(String tableName){
return (getReadableDatabase().rawQuery("SELECT * FROM
"+tableName,null));
}
Hàm kiểu trả về là Cursor có đầu vào là String tableName là tên của bảng muốn
lấy dữ liệu. Khi gọi hàm này thì sẽ trả về toàn bộ giá trị của bảng tableName từ
trong csdl.
6.
Hàm getByID
public Cursor getById(String tableName,String id){
String [] args = {id};
return (getReadableDatabase().rawQuery("SELECT * FROM "+
tableName + " WHERE _id=?",args));
}
Hàm có kiểu trả về là Cursor và đầu vào là String tableName, String id (tên
bảng và id của giá trị). Hàm này trả về giá trị của bảng có tên tableName và có
id = id đầu vào .
7.
Hàm insert
public void insert(String tableName, ContentValues contentValues){
getWritableDatabase().insert(tableName,null,contentValues);

}
Hàm này có 2 biến đầu vào là String tableName và ContentValues
contenValues (tên bảng và giá trị muốn lưu vào csdl). Sau khi thực hiện hàm
này, ta sẽ thêm vào csdl một giá trị contentValues vào bảng có tên tableName.
8.
17


Hàm deleteAllData
public void deleteAllData(String tableName){
getWritableDatabase().execSQL("DELETE FROM " + tableName);
}
Hàm này có đầu vào là String tableName (tên bảng muốn xóa dữ liệu). Hàm này
khi được gọi sẽ xóa toàn bộ dữ liệu của bảng có tên tableName trong csdl.
9.
Cách ghi dữ liệu vào bảng:
CreateDatabase createDatabase = new CreateDatabase(context);
Trước tiên ta phải tạo đối tượng kiểu CreateDatabase, sau khi khởi tạo thì hàm
khởi dựng của lớp CreateDatabase sẽ chạy và tạo csdl nếu chưa tồn tại, nếu đã
tồn tại hàm này sẽ mở csdl “mydb” lên.
createDatabase.deleteAllData("fine");
Hàm này sẽ xóa toàn bộ dữ liệu đã tồn tại trong bảng “fine” để tránh ghi nhiều
lần dữ liệu vào bảng.
ContentValues cv = new ContentValues();
Hàm này sẽ khởi tạo một biến “cv” kiểu ContenValues , biến này có tác dụng
gán dữ liệu vào và thêm vào csdl.

try {
cv.put("sentence","1.\tNgười điều khiển, người ngồi trên xe không đội
mũ bảo hiểm hoặc đội mũ bảo hiểm không cài quai đúng quy cách khi

tham gia giao thông trên đường bộ: ");
cv.put("price", ">>bị phạt tiền từ 100.000 đồng đến 200.000 đồng.");
createDatabase.insert("fine", cv);
catch (Exception e){
e.printStackTrace();
}
finally {
createDatabase.close();
}
18


Khối lệnh này sẽ thực hiện công việc gán dữ liệu vào biến cv qua hàm put(tên
cột trong bảng , nội dung dữ liệu);
Sau khi gán dữ liệu vào biến “cv” ta sẽ gọi phương insert từ biến createDatabase
được khởi tạo bên trên với đầu vào là tên bảng muốn thêm dữ liệu và biến cv đã
được gán dữ liệu.
Việc thêm dữ liệu vào csdl trong android rất chặt chẽ nên việc đó phải được đặt
trong khối lệnh try-catch. Nếu thêm thành công thì sẽ bỏ qua phần lệnh thực
hiện trong khối lệnh catch. Trong khối lệnh catch sẽ xử lý nếu việc thêm dữ liệu
vào csdl xảy ra lỗi. Trong khối lệnh finally sẽ xử lý cho dù khối lệnh try hay
khối lệnh catch có thực hiện hay không. Trong hàm này sẽ giải phóng biến
createDatabase đã tạo để giải phóng dung lượng bộ nhớ đã bị chiếm.
10.
Các lớp SetDataFineMoto, SetImageData, SetLawProvisionData,
SetLicensePlatesData có phương thức khởi dựng thực hiện công việc thêm dữ
liệu vào các bảng trong csdl qua các bước như bước 9.
Khi các giao diện được gọi đến, ta chỉ cần tạo một biến có kiểu của lớp trên thì
csdl của bảng đó sẽ được thêm vào.
SetDataFineMoto setDataFineMoto = new SetDataFineMoto(this);

SetLicensePlatesData licensePlatesData = new SetLicensePlatesData(this);

Chương 3 ỨNG DỤNG
3.1

Nguồn dữ liệu
/> />
19


3.2

Giao diện

Hình 3.1 Giao diện của ứng dụng

Hình 3.2 giao diện quy phạm pháp luật khi ấn vào luật giao thông đường
bộ

20


×