LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến thầy giáo Th.S Lê Nam Huy
– bộ môn công nghệ phần mềm đã định hướng và đã tận tình giúp đỡ, động viên
em trong quá trình thực hiện đề tài đồ án. Thầy luôn luôn theo sát chỉ bảo em
những mặt được và chưa được để em có thể hoàn thành đề tài một cách tốt nhất.
Em xin chân thành cảm ơn thầy!
Em xin cảm ơn những người bạn và gia đình đã nhiệt tình giúp đỡ, động
viên em học tập, phấn đấu và vượt qua những khó khăn trong suốt năm năm học
tập và rèn luyện tại Trường Đại học Công nghệ Thông tin và Truyền thông.
Cuối cùng, em xin cảm ơn tất cả các thầy cô giáo Trường Đại học Công
nghệ Thông tin và Truyền thông, đã dạy dỗ, chỉ bảo những kiến thức, tri thức khoa
học và những bài học kinh nghiệm trong cuộc sống trong suốt quá trình học tập,
rèn luyện tại Nhà trường, để em có đầy đủ kiến thức và hành trang bước vào cuộc
sống.
Trong quá trình thực hiện đề tài chắc chắn còn nhiều thiếu sót mà bản thân
em chưa thể rút ra được. Em rất mong nhận được sự quan tâm, đóng góp của thầy
cô giáo và bạn bè.
Em xin chân thành cảm ơn!
Sinh viên
Vương Văn Huy
1
LỜI CAM ĐOAN
Đề tài của em được thực hiện trên cơ sở những kiến thức đã tích lũy được
trong quá trình học tập, sự giúp đỡ tận tình của thầy cô, bạn bè cùng với một số tài
liệu quý báu mà em sưu tầm được cũng như kho tàng tri thức Internet vô tận...
Em xin cam đoan không sao chép nguyên bản bất cứ một đồ án tốt nghiệp
hay đề tài nghiên cứu khoa học nào của bất kỳ ai. Nếu sai, em xin hoàn toàn chịu
trách nhiệm trước mọi kỷ luật của trường đề ra.
2.1 Khảo sát nhu cầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3
2.2 Kiến trúc hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3 Phân tích hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.1 Xác định các tác nhân . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.2 Các tác nhân của hệ thống. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.3 Sơ đồ chức năng của hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.4 Thiết kế cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.4.1 Biểu đồ lớp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.4.2 Danh mục các bảng trong cơ sở dữ liệu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.5. Biểu đồ trạng thái . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.6. Biều đồ trình tự. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.7. Thiết kế giao diện . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
CHƯƠNG 3: XÂY DỰNG VÀ CÀI ĐẶT CHƯƠNG TRÌNH. . . . . . . . . . . . . . . . . 49
3.1. Công nghệ và công cụ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2. Cài đặt và xây dựng chương trình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2.1 Cài đặt CocoaPods trên Mac và thêm thư viện HTMLReader . . . . . . . . 49
3.2.2 Get và Post dữ liệu từ server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.3. Một số hình ảnh giao diện của chương trình. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
KẾT LUẬN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
TÀI LIỆU THAM KHẢO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4
DANH MỤC HÌNH ẢNH
Hình 1.1. Kiến trúc hệ điều hành IOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Hình 1.2. Region và Subregions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Hình 3.5. Giao diện chọn mục Biển Ngoại Giao và tìm kiếm theo quốc gia hoặc
theo số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Hình 3.6. Giao diện chọn muc Biển số 80. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Hình 3.7. Giao diện chọn mục Giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6
MỞ ĐẦU
Tổng quan về đề tài .
Điện thoại di động xuất hiện tại Việt Nam từ đầu những năm 1990 và theo
thời gian, số lượng các thuê bao cũng như các nhà cung cấp dịch vụ di động ngày
càng tăng. Cùng với sự phát triển của số lượng thuê bao di động. Ngày nay, điện
thoại di động không chỉ còn mang chức năng nghe gọi nhắn tin thông thường mà
còn là một thiết bị giải trí, học tập tra cứu thông tin rất tiện lợi. Do đó, xây dựng
các ứng dụng cho điện thoại di động đang là một yêu cầu tất yếu trong xu thế hiện
nay.
Lí do chọn đề tài
Xu hướng người sử dụng điện thoại với mục đích giải trí ngày càng tăng,
như: nghe nhạc, xem phim, chơi game, chat, tra cứu…Nhằm đáp ứng nhu cầu
người dùng, em muốn xây dựng ứng dụng tra cứu biển số xe ô tô tại Việt Nam
trên điện thoại di động, ứng dụng sẽ rất tiện ích, mặc dù dữ liệu tìm được chỉ là
những thông tin cơ bẳn, nhưng rất hứu ích. Chẳng hạn, khi đang đi tìm mua ô tô cũ
và xem giấy tờ xe. Để biết chắc giấy tờ đó có phải là thật không hay giả thì tra cứu
sẽ biết. ngoài rà còn biết biển số xe ở đâu, nước nào, biển loại gì?
Mục đích của đề tài
Với ý tưởng sử dụng Xcode với ngôn ngữ lập trình Swift vào phát triển
phần mềm, thực tập tốt nghiệp này trình bày quá trình xây dựng ứng dụng tra cứu
biển số xe ô tô tại Việt Nam để giúp ích cho người dùng có thể tra cứu thông tin
mọi lúc, mọi nơi..
Một ứng dụng cài đặt trên thiết bị di động cho phép người dùng sử dụng
thiết bị di động chạy hệ điều hành IOS truy cập vào kho ứng dụng và tải về miễn phí
ứng dụng hoặc thanh toán qua cổng thanh toán đối với các ứng dụng trả phí.
Tích hợp cổng thanh toán quốc tế paypal vào hệ thống để thực hiện
nghiệp vụ thanh toán trong quá trình người dùng mua ứng dụng có phí. Paypal là
phương tiện thanh toán phổ biến nhất thế giới hiện nay, đáp ứng nhu cầu thanh
toán của hầu hết các quốc gia trong đó có Việt Nam.
Đặt vấn đề
Hiện nay thế giới đã bước vào thời kì phát triển mạnh mẽ của các thiết bị
điện thoại thông minh, máy tính bảng. Các nền tảng mới ra đời và ngày càng khẳng
định là yếu tố quyết định cho sự thành công của các thiết bị thông minh mà ta phải
kể đến như Android, IOS và cả Windows Phone .
Hiện nay thủ đoạn làm giả giấy tờ tinh vi để chiếm đoạt tài sản của các chủ
ô tô. Các giấy tờ giả này rất khó phát hiện bằng mắt thường nếu không qua giám
định , rât nhiều người đã bị lừa do không có thông tin về chiêc xe như nào, nó đã
kiểm đinh hay chưa , giấy tờ có chính xác hay không. Mọi người rất muốn kiểm tra
nhưng không biết kiểm tra thế nào. Nhưng rất may là bây giờ mọi người có thế
kiểm tra các thông tin của một chiếc xe đã kiểm định hay chưa giấy tờ đúng vói xe
9
hay không ở trang kiểm định của cục đăng kiểm. Do để thuận tiện hơn cho người
dùng cần xây dụng một ứng dụng để đáp ứng nhu cầu đó:
. Vì vậy đề tài: Xây dựng ứng dụng tra cứu biển số xe ô tô ở Việt Nam
hướng đến mục tiêu sau:
Hỗ trợ hệ điều hành IOS
Ứng dụng có thể chạy trên các thiết bị của Apple như iphone, Ipad
Tạo ra một ứng dụng dễ sử dụng đơn giản, phù hợp với lợi ích người dùng.
Giúp người dùng có xem những thông tin cơ bản của một chiếc xe ô tô ,
nên phức tạp và khó khăn hơn. iOS, ngược lại, đều vô cùng nhất quán trên tất cả
các thiết bị của Apple, và do đó việc cập nhật phiên bản mới đều nhanh gọn và dễ
dàng hơn so với Android. Nếu sở hữu một thiết bị cấp cao của Apple, bạn có thể
an tâm máy của bạn bao giờ cũng cập nhật bản mới nhất của hệ điều hàn
iOS an toàn hơn: Có hai lý do để đi đến kết luận iOS có độ bảo mật và an
toàn tốt hơn tất cả các hệ điều hành khác hiện nay, bao gồm cả Android. Thứ nhất
và quan trọng nhất, các nhân viên của Apple đều tự tay kiểm tra và xác nhận từng
ứng dụng được đưa lên iOS App Store trước khi chuyển chúng đến tay người
dùng. Thứ hai, Apple đưa ra những những hạn chế vô cùng nghiêm ngặt nhằm
ngăn chặn những ứng dụng có khả năng thâm nhập trực tiếp vào hệ điều hành, điều
đó giúp ngăn chặn tất cả những virus hay phần mềm độc hại có thể nhiễm vào hệ
điều hành. Apple cũng giúp người dùng có thể kiểm tra xem thiết bị của họ ở đâu
trong trường hợp bị kẻ gian đánh cắp, đồng thời kẻ gian cũng không thể tắt hệ
thống GPS tracker giúp định vị vị trí máy nếu không có mật khẩu của bạn.
Cơ sở lý thuyết
Ios là gì?
IOS viết tắt của từ Internetwork Operating System, là hệ điều hành trên các
thiết bị di động của Apple. Ban đầu hệ điều hành này chỉ được phát triển để chạy
trên iPhone (gọi là iPhone OS), nhưng sau đó nó đã được mở rộng để chạy trên các
thiết bị của Apple như iPod touch, iPad và Apple TV.
Lịch sử hệ điều hành IOS
11
Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn ra
vào tháng 1 năm 2007 và được phát hành vào tháng 9 năm đó. Khi đó, hệ điều
hành này chưa có một cái tên riêng nên chỉ đơn giản là "iPhone chạy OS X". Ban
đầu, ứng dụng bên thứ ba không được hỗ trợ. Steve Jobs đã chỉ ra rằng những nhà
Các thành phần của hệ điều hành IOS :
Các tiến trình (Processes): Là những tuyến riêng lẻ kết hợp với dữ liệu để
thực hiện những tác vụ, như duy trì hệ thống, chuyển mạch gói dữ liệu, thực hiện
giao thức định tuyến…
Nhân (Kernel): Cung cấp những dịch vụ cơ bản của hệ thống tùy thuộc vào
IOS như : quản lý bộ nhớ, lập lịch các tiến trình…Nó cung cấp quản lý tài nguyên
phần cứng (CPU, bộ nhớ) cho các tiến trình.
Bộ đệm gói (Packet buffer): Cung cấp các bộ đệm toàn cục và kết hợp với
chức năng quản lý bộ đệm để lưu trữ gói dữ liệu đang được chuyển mạch.
Trình điều khiển thiết bị (Device driver): Làm chức năng điều khiển giao
tiếp giữa phần cứng và thiết bị ngoại vi, giao tiếp giữa các tiến trình IOS, kernel và
phần cứng.Chúng cũng giao tiếp với phần mềm chuyển mạch nhanh (fast
switching software).
Phần mềm chuyển mạch nhanh (Fast switching soft): Chức năng chuyển
mạch gói dữ liệu cao.
Tổ chức bộ nhớ
IOS ánh xạ toàn bộ bộ nhớ vật lý thành một không gian địa chỉ ảo rộng lớn.
MMU (Memory Map Unit) của CPU có giá trị khi được sử dụng để tạo không gian địa
chỉ ảo thậm chí khi mà IOS không tận dụng một khối nhớ ảo trọn vẹn.
Miền bộ nhớ (Memory region) :
IOS chia không gian địa chỉ này thành những miền bộ nhớ gọi là region,
mỗi region phù hợp với những loại bộ nhớ vật lý khác nhau. Ví dụ : SRAM có thể
lưu trữ gói dữ liệu và DRAM có thể lưu trữ phần mềm hoặc dữ liệu. Phân lớp bộ
nhớ thành các region cho phép IOS phân loại các bộ nhớ khác nhau vì vậy mà
phần mềm không cần biết chi tiết về bộ nhớ trên mỗi platform .Các region được
phân chia thành một trong tám mục như hình :
Memory region
IOS quản lý bộ nhớ rỗi thông qua một chuỗi các memory pool.Mỗi pool là
một tập hợp các khối nhớ mà có thể cấp phát và thu hồi khi cần.Memory pool được
xây dựng bên ngoài các region và được quản lý bởi kernel.Thường thì pool tương
đương với một region đặc biệt.
15
Hình 1.2. Region và Subregions
Một memory pool có thể xây dựng từ một vài region mở rộng, cho phép bộ
nhớ được cấp phát và thu hồi từ các miền bộ nhớ khác nhau để tối đa hiệu quả hoạt
động, có thể dùng lệnh show memory để hiển thị các pool này: router#show
memory Head Total(b) Used(b) Free(b) Lowest(b) Largest(b) Processor 61281540
7858880 3314128 4544752 4377808 4485428 I/O1A00000 6291456 1326936
4964520 4951276 4964476 PCI 4B000000 1048576 407320 641256 6412556
641212 … Mô tả như sau(kích thước tính theo byte):
- Total: kích thước của pool.
- Used: lượng bộ nhớ được cấp phát.
- Free: lượng bộ nhớ sẵn sằng để sử dụng.
- Lowest: lượng bộ nhớ thấp nhất sẵn sàng sử dụng từ khi mà pool được tạo.
- Largest: kích thước khối nhớ liên tục lớn nhất sẵn sàng sử dụng hiện tại.
16
Lệnh show memory ở trên cung cấp ba pool với các tham số tương ứng:
heap, processor và I/O.
Tiến trình iOS(Processes iOS)
Vòng đời của một tiến trình:
Một tiến trình có thể được tạo ra hoặc kết thúc bất cứ lúc nào trong khi iOS
đang hoạt động ngoại trừ có ngắt xảy ra.Nó được tạo ra bởi kernel hoặc bởi một
Sau khi một tiến trình mới được tạo thành công và điều chỉnh, nó chuyển
sang trạng thái sẵn sàng (Ready) và vào trạng thái thực thi (Execute).Trong suốt
18
trạng thái này, một tiến trình có thể truy cập CPU và chạy.Trong suốt trạng thái
thực thi , một tiến trình có thể truy cập CPU và chạy.Trong suốt trạng thái thực thi
, một tiến trình có thể là một trong 3 trạng thái: sẵn sàng, chạy và rỗi (Idle).Một
tiến trình ở trạng thái sẵn sàng sẽ đợi chuyển sang trạng thái truy cập CPU và bắt
đầu thực thi lệnh.Một tiến trình ở trạng thái rỗi là đang ngủ, đợi sự kiện bên ngoài
xuất hiện trước khi nó có thể chạy.Một tiến trình chuyển từ trạng thái sẵn sàng
sang trạng thái chạy khi mà nó được lập lịch để chạy. Với đa tác vụ mà không ưu
tiên (non-preemptive multitasking), một tiến trình được lập lịch chạy trên CPU cho
đến khi tạm ngừng hoặc kết thúc.Một tiến trình có thể tạm dừng theo 2 cách: nó có
thể tự dừng bởi việc báo cho kernel, nó muốn nhường cho CPU và chuyển sang
trạng thái sẵn sàng, và đợi đến lúc chạy lại.Tiến trình cũng có thể dừng bởi một
hoạt động bên ngoài xảy ra.Khi mà một tiến trình đợi một sự kiện, kernel hoàn
toàn dừng tiến trình này và chuyển nó sang trạng thái rỗi.Sau khi một sự kiện xảy
ra rồi thì kernel chuyển tiến trình trở lại trạng thái sẵn sàng để đợi chạy lại.
Trạng thái kết thúc (Terminal):
Trạng thái cuối cùng trong vòng đời của tiến trình là trạng thái kết thúc.Một
tiến trình vào trạng thái kết thúc khi nó hoàn thành chức năng của mình và đóng lại
hoặc khi một tiến trình khác đóng nó.Khi một tiến trình bị đóng hoặc tự đóng, tiến
trình chuyển sang trạng thái chết (Dead).Tiến trình này ở trạng thái chết (không
hoạt động) cho đến khi kernel thu hồi tất cả các tài nguyên của nó.Sau khi tài
nguyên được thu hồi, tiến trình bị kết thúc thoát khỏi trạng thái chết và xóa khỏi hệ
thống.
Độ ưu tiên tiến trình iOS:
IOS thực hiện chế độ ưu tiên để lập lịch các tiến trình trên CPU.Tại thời
Quản lý bộ nhớ:
Bộ quản lý bộ nhớ của Kernel tại mức quá cao quản lý tất cả các vùng nhớ
có sẵn của iOS, bao gồm bộ nhớ chứa iOS của nó.Bộ quản lý bộ nhớ ba thành
phần riêng biệt, với những nhiệm vụ riêng.
Có ba bộ quản lý bộ nhớ sau:Bộ quản lý Region, Bộ quản lý Pool, Bộ quản
20
lý Chunk.
Bộ quản lý Region:
Định nghĩa và duy trì những region khác nhau trên một platform.Bộ quản lý
region có chức năng duy trì tất cả các region.Nó cung cấp các dịch vụ cho phép
những phần khác của iOS tạo region và gán các thuộc tính của chúng.Nó cũng cho
phép những phần khác truy vấn những region có sẵn, ví dụ quyết định tổng lượng
bộ nhớ có sẵn trên một platform.
Hình 1.4. Sự phân mảnh bộ nhớ
Bộ quản lý pool:
Quản lý việc tạo ra các vùng nhớ pool, cấp phát và thu hồi các khối nhớ của
pool.
Bộ quản lý pool là một thành phần quan trọng của Kernel.Trong khi
scheduler quản lý cấp phát tài nguyên CPU để xử lý,bộ quản lý pool cấp phát bộ
nhớ cho các tiến trình.Tất cả các tiến trình phải thông qua bộ quản lý bộ nhớ pool
trực tiếp hoặc
21
Bộ quản lý bộ nhớ được yêu cầu cho mỗi tiến trình sử dụng hàm hệ thống
chuẩn malloc và free để lấy và trả bộ nhớ.Bộ quản lý bộ nhớ hoạt động bởi việc
duy trì danh sách khối nhớ rỗi cho mỗi pool, ban đầu mỗi pool chứa chỉ một khối
khi hoạt động chuyển mạch đang hoạt động.Bởi vì khả năng định tuyến gói là
trung tâm của cấu trúc hệ điều hành iOS.iOS chứa thành phần chuyên biệt để quản
lý những vùng đệm này.Thành phần này được gọi là bộ quản lý vùng đệm bộ
nhớ.iOS sử dụng thành phần này để tạo và quản lý nhất quán một chuỗi các vùng
đệm cho chuyển mạch trên mỗi platform.Bộ đệm trong vùng này được biết chung
là những bộ đệm hệ thống.Bộ quản lý vùng bộ đệm cung cấp một cách tiện lợi để
quản lý một tập các bộ đệm có kích thước cụ thể.Mặt dầu nó có thể được sử dụng
để quản lý bất cứ loại bộ đệm nào, bộ quản lý bộ đệm được sử dụng chính để quản
lý những vùng bộ đệm gói.Những vùng đệm gói được tạo từ các vùng nhớ pool có
sẵn.Đểf. tạo một vùng, bộ quản lý bộ đệm yêu cầu một khối nhớ từ bộ quản lý pool
và chia cho bộ đệm.Bộ quản lý bộ đệm gói sau đó tạo một danh sách cho tất cả các
bộ đệm rỗi và theo dõi các vùng nhớ này.Những vùng đệm có thể là động hay tĩnh,
vùng bộ đệm tĩnh được tạo với số bộ đệm cố định, không thêm bộ đệm vào cùng bộ
đệm tĩnh này.Vùng bộ đệm động được tạo với một số bộ đệm tối thiểu.Gọi là bộ đệm
thường xuyên, có thể thêm hoặc xóa các bộ đệm.Với các vùng nhớ động , nếu bộ quản
lý bộ đệm nhận được yêu cầu khi vùng nhớ rỗng, nó cố gắng mở rộng vùng nhớ và đáp
ứng yêu cầu ngay lập tức.
Nếu nó không thể mở rộng vùng nhớ, thì yêu cầu bị lỗi và thực hiện mở
rộng vùng nhớ sau đó.vùng bộ đệm được phân lớp public (dùng chung) hoặc
private (dùng riêng).
Vùng public được sử dụng bởi bất cứ tiến trình nào của hệ thống.
Private được tạo cho một tập các tiến trình sử dụng.
Bộ đệm hệ thống: Mỗi iOS đều có một tập các bộ đệm public định trước gọi
là những bộ đệm hệ thống, những bộ đệm này được sử dụng cho tiến trình chuyển
mạch các gói dữ liệu và tạo gói (như gói keepalive, gói cập nhật định tuyến).
Trình điều khiển thiết bị
23
IOS chứa trình điều khiển thiết bị cho các thiết bị phần cứng, như flash
tuyến tới vài trăm ngàn tuyến đi.
Kiến trúc của hệ điều hành iPhone
Bao gồm các lớp sau :
Hình 1.5. Kiến trúc hệ điều hành iPhone
Các lớp dưới cùng là nền tảng của hệ điều hành, phụ trách quản lý bộ nhớ,
các file hệ thống, mạng, các hệ điều hành nhiệm vụ và tương tác trực tiếp với các
phần cứng.
Lớp Core OS : Lớp Core OS bao gồm các thành phần : -OS X Kernel Match 3.0 -BSD Sockets -Security -Power Management -Key chain -Certifi cates File System -Bonjour
Lớp Core Services : Lớp Core Services cung cấp một trừu tượng trên các
dịch vụ được cung cấp trong lớp OS X Kernel.Nó cung cấp truy cập cơ bản để các
dịch vụ hệ điều hành iPhone và bao gồm các thành phần sau : -Collection AddressBook -Networking
Files Access
SQLite -Core Location -Net Services -Threading -Preferences -URL
Utilities
25