Công việc kinh doanh buôn bán đã xuất hiện từ rất lâu, trãi qua mọi giai đoạn lịch sử nó mang hình thức đặc thù riêng. Trước kia, khi các công cụ hổ trợ công việc mua bán chưa phát triển mạnh, thì người kinh doanh mua bán chỉ diễn ra dưới hình thức mua bán trực tiếp. Từ khi khoa học công nghệ phát triển, nó đã tạo ra phát triển các loại hình thức mua bán mới, điển hình là mua bán trực tuyến. Hình thức mua bán trực tuyến hổ trợ đắc lực cho người kinh doanh tiếp xúc với được nhiều khách hàng, còn khách hàng thì công việc mua bán được diễn ra nhanh chóng, thuận lợi, tiết kiệm được thời gian, … Hiện nay, Thương mại điện tử (TMĐT) đang được nhiều quốc gia quan tâm, coi là một trong những động lực phát triển chủ yếu của nền kinh tế. TMĐT đem lại những lợi ích tiềm tàng, giúp doanh nghiệp thu được thông tin phong phú về thị trường và đối tác, giảm phí tiếp thị và giao dịch, tạo dựng và củng cố quan hệ bạn hàng
CHƯƠNG MỞ ĐẦU
Phát biểu bài toán
Ngày nay các thiết bị số cầm tay nhƣ điện thoại di động, điện thoại thông minh, máy tính bảng có rất nhiều trên thị trường Với giá thành ngày càng rẻ và các lợi ích đem lại, các thiết bị đó ngày càng đƣợc sử dụng nhiều và phổ biến Một nền tảng đƣợc sử dụng trong các thiết bị đó là hệ điều hành thông minh Android của Google Do vậy đi cùng việc phát triển và sử dụng các thiết bị phần cứng một cách hiệu quả thì việc phát triển các ứng dụng phần mềm chạy trên nền Android càng lúc càng tăng cao
Các thiết bị di động ngày càng mạnh mẽ với khả năng xử lí các tác vụ mà chúng ta khó có thể tưởng tượng trước đây vài năm Những chiếc điện thoại thời trang và tiện dụng với những tính năng về phần cứng nhƣ GPS, gia tốc kế và màn hình cảm ứng là một nền tảng hấp dẫn cho các ứng dụng di động đột phá Trong khi việc phát triển nền tảng di động hiện nay chủ yếu xây dựng trên các hệ điều hành độc quyền, hạn chế các ứng dụng của bên thứ ba, sự ra đời của Android đã mang lại một giải pháp mở Không bị hạn chế, các lập trình viên Android tự do viết các ứng dụng tận dụng tối đa sự phát triển mạnh mẽ của phần cứng cho điện thoại di động Android nhanh chóng trở thành hệ điều hành thu hút nhiều lập trình viên và chiếm một thị phần lớn trong thị trường di động
Việc sử dụng các thiết bị số ngoài khả năng hỗ trợ con người trong công việc, giải trí mà còn giúp con người tiết kiệm thời gian hơn vào nhiều công việc thực tiễn trong đời sống hằng ngày Hiện nay một hình thức lưu giữ tiền khá phổ biến trong cuộc sống đó là thẻ rút tiền ATM, nó được dùng để chi trả lương cho nhiều nhân viên của các công ty, doanh nghiệp, hay dùng để gởi tiền cho sinh viên ở xa nhà Vì vậy việc tìm kiếm các địa điểm để sử dụng thẻ là điều khá hữu dụng trong cuộc sống, khi mà trong một số trường hợp chúng ta rất khó có thể xác định cột thẻ trong hàng ngàn địa điểm trong thành phố hay các khu vực khác.
Mục tiêu và nhiệm vụ
Tìm hiểu đƣợc các công nghệ lập trình cần thiết trên nền Android để hoàn thành đƣợc ứng dụng có thể tìm kiếm nhanh và chính xác vị trí máy ATM
Hiểu về nguyên lý hoạt động của Android, các thành phần của hệ thống cũng nhƣ của một ứng dụng thực thi trên nền android
Tìm hiểu và áp dụng đƣợc các công nghệ lập trình trên nền Android nhƣ ngôn ngữ JAVA, tương tác với các tài nguyên của hệ thống (GPS, Internet, TouchScreen), sử dụng các dịch vụ của Google nhƣ Google Map, Google Places API…
Tìm hiểu xây dựng một cơ sở dữ liệu bằng MySql Xây dựng một web service để quản lý và cập nhật thông tin cho ứng dụng
Đọc các tài liệu liên quan về bộ thƣ viện lập trình trên nền Android Tìm hiểu các dịch vụ liên quan đến ứng dụng.
Đối tƣợng nghiên cứu và phạm vi hệ thống
Ngôn ngữ lập trình JAVA, XML, PHP
Hệ cơ sở dữ liệu MySQL
Công cụ Android SDK Eclipse
Hệ điều hành và tài nguyên hệ thống Android
Các dịch vụ của Google nhƣ Google Map, Google Places API…
Đề tài chỉ dừng lại ở khuôn khổ tìm kiếm địa chỉ đặt các trạm ATM theo tỉnh thành phố ở Việt Nam Ứng dụng đƣợc viết trên nền hệ điều hành Android, Web Service đƣợc đƣợc viết bằng PHP và dùng CSDL MySQL.
Ý nghĩa thực tiễn của ứng dụng
Chương trình có thể áp dụng vào cuộc sống hàng ngày để tìm kiếm máy ATM trên toàn quốc khi có nhu cầu mà đến cả những người có ít kiến thức về công nghệ có thể sử dụng.
CƠ SỞ LÝ THUYẾT
Giới thiệu hệ điều hành Android
2.1.1 Khái niệm hệ điều hành Android
Android là hệ điều hành trên các thiết bị số di động nhƣ smartphone và tablet (và hiện nay là cả trên một số đầu phát HD, HD Player) 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 Vào năm 2005, Google đã mua lại Android nằm trong chiến lược tiến vào thị trường di động Google muốn Android trở thành nền tảng “mở” và miễn phí Do vậy hầu hết mã nguồn của Android đƣợc phát hành theo giấy phép mã nguồn mở Apache nên bất cứ ai muốn sử dụng Android có thể download toàn bộ mã nguồn Hơn nữa các nhà sản xuất phần cứng có thể thêm các thành phần mở rộng độc quyền của hãng để tạo ra các sản phẩm khác nhau Chính mô hình phát triển đơn giản này khiến Android trở nên rất hấp dẫn Android có một cộng đồng những nhà phát triển rất lớn viết các ứng dụng cho hệ điều hành của mình
Hiện tại có khoảng hơn 250,000 ứng dụng cho Android OS và vào khoảng hơn 375,000 ứng dụng đã đƣợc đệ trình, điều này khiến Android trở thành hệ điều hành di động có môi trường phát triển lớn thứ 2 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 Google công bố hầu hết các mã nguồn của Android theo bản cấp phép Apache Hệ điều hành Android bao gồm 12 triệu dòng mã; 3 triệu dòng XML, 2.8 triệu dòng mã C, 2.1 triệu mã Java và 1.75 triệu dòng mã C++
2.1.2 Đặc điểm của hệ điều hành Android
Aplication framework: cho phép tái sử dụng và thay thế các thành phần
Davik virtual machine: tối ưu các yêu cầu bộ nhớ cần thiết cho việc phát triển các ứng dụng trên thiết bị di động
Intergrated browser: dựa trên mã nguồn mở webkit động
Optimized graphics: hỗ trợ thư viện đồ họa 2D, 3D dựa trên các đặc điểm kỹ thuật OpenGL ES 1,0 (phần cứng tăng tốc tùy chọn)
SQLite: lưu trữ cấu trúc dữ liệu
Media Support: hỗ trợ các định dạng âm thanh, video, hình ảnh phổ biến
(MPEG4, H.264, MP3, AAC, ARM, JPG, PNG, GIF)
GSM Telephony (phụ thuộc phần cứng)
Bluetooth, EDGE, 3G, WIFI (phụ thuộc phần cứng)
Camera, GPS, compass, and accelronment:bao gồm thiết bị giả lập (Emutor) công cụ debugging Công cụ cho bộ nhớ và Plugin cho Eclipse IDE
2.1.3 Kiến trúc của hệ điều hành Android
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hành Android Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây
Applications: Android đƣợc tích hợp sẵn một số ứng dụng cần thiết cơ bản nhƣ: contacts, browser, camera, Phone.… Tất cả các ứng dụng chạy trên hệ điều hành Android đều đƣợc viết bằng Java
Application framework: Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhà phát triển đƣợc tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa
Library: Android bao gồm một bộ thƣ viện C/C++, đƣợc sử dụng bởi các thành phần khác nhau của hệ thống Android Những khả năng tiếp xúc với các nhà phát triển thông qua các khuôn khổ ứng dụng Android Ví dụ một số thƣ viện nhƣ “System C library, Media Libraries, Surface Manager,LibWebCore, SQLite…”
Android Runtime: Android bao gồm một tập hợp các thƣ viện cơ bản 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 Tất cả các ứng dụng Android đều chạy trong tiến trình riêng Máy ảo Dalvik đã đƣợc viết để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả Các VM Dalvik thực thi các tập tin thực thi Dalvik (dex) Định dạng đƣợc tối ƣu hóa cho bộ nhớ tối thiểu VM là dựa trên register-based, và chạy các lớp đã đƣợc biên dịch bởi một trình biên dịch Java để chuyển đổi thành các định dạng dex Các VM Dalvik dựa vào nhân Linux cho các chức năng cơ bản nhƣ luồng và quản lý bộ nhớ thấp
Linux kernel: Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi nhƣ security, memory management, process management, network stack, and driver model Kernel Linux hoạt động nhƣ một lớp trừu tƣợng hóa giữa phần cứng và phần còn lại của phần mềm stack
2.1.4 Các thành phần cơ bản của hệ điều hành Android
Ứng dụng Android bao gồm nhiều thành phần liên kết với nhau đƣợc giới hạn trong kiến trúc ứng dụng Kiến trúc ứng dụng mô tả chi tiết mỗi thành phần và sự tương tác giữa các thành phần này cũng như siêu dữ liệu về yêu cầu phần cứng
Các thành phần sau đây tạo nên một ứng dụng Android:
Activity: là lớp thể hiện ứng dụng Mỗi màn hình trong ứng dụng là một mở rộng của lớp Activity Các Activity sử dụng các View tạo thành giao diện đồ họa tương tác người dùng để thể hiện thông tin và phản hồi hành động của người dùng
Service: là thành phần chạy ẩn, cập nhật nguồn dữ liệu và thể hiện các
Activity, kích hoạt các Notification Các Service thường thực hiện các xử lí thông thường như tiếp tục Activity sau khi các Activity này không hoạt động hoặc hiển thị
Content Provider: là thành phần lưu trữ dữ liệu chia sẻ Content
Provider quản lí và chia sẻ cơ sở dữ liệu của ứng dụng Chúng đƣợc coi nhƣ là phương tiện chia sẻ dữ liệu giữa các ứng dụng
Intent: là cấu trúc truyền thông điệp giữa các ứng dụng Chúng ta có thể sử dụng Intent để truyền một thông tin tới toàn hệ thống hay tới Activity hay
Service định trước để thực thi một hoạt động Hệ thống sau đó sẽ xác định đối tƣợng nào sẽ thực hiện các hoạt động phù hợp
Broadcast Receiver: là nơi nhận các Intent Chúng ta có thể tự tạo một
Broadcast Receiver để ứng dụng có thể nhận đƣợc các Intent phù hợp với bộ lọc đặt trước Broadcast Receiver tự động bắt đầu khi ứng dụng phản hồi với Intent nhận được và biến ứng dụng trở thành hướng sự kiện một cách hoàn hảo
Widget: thành phần trực quan của ứng dụng có thể thêm vào màn hình chính Là một dạng Broadcast Receiver, Widget cho phép người dùng tạo ra các ứng dụng động, tương tác được nhúng ngay trên màn hình chính
Notification: là thành phần thông báo cho người dùng Hộp thoại thông báo cho người dùng mà không gián đoạn các Activity hiện thời Đây là kĩ thuật thông báo cho người dùng nằm trong một Service hay một Broadcast Receiver Ví dụ như khi nhận được một tin nhắn hay cuộc gọi đến có thể thông báo cho người dùng bằng nhấp nháy đèn hay bằng âm thanh…
Lập trình trên hệ điều hành Android
Tổng quan ngôn ngữ JAVA
Java là một ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP) Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java đƣợc thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy Bằng cách này, Java thường chạy chậm hơn những ngôn ngữ lập trình thông dịch khác nhƣ C++, Python, Perl, PHP, C#
Trình biên dịch thường phải tốn nhiều thời gian để xây dựng nên rất đắt, vì vậy để mỗi loại CPU có một trình biên dịch riêng là rất tốn kém Do đó nhu cầu thực tế đòi hỏi một ngôn ngữ chạy nhanh, gọn, hiệu quả và độc lập thiết bị tức là có thể chạy trên nhiều loại CPU khác nhau, dưới các môi trường khác nhau “Oak” đã ra đời và vào năm 1995 đƣợc đổi tên thành Java
Một số tính chất ngôn ngữ JAVA
Cú pháp Java đƣợc vay mƣợn nhiều từ C C++ nhƣng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn Do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn Dùng bộ thƣ viện chuẩn KFC, nhiều đoạn code Java chỉ mất vài dòng trong khi C phải mất cả trang giấy
Đơ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++
Hướng đối tượng: Java là ngôn ngữ lập trình thuần hướng đối tượng, mọi chương trình viết trên Java đều phải được xây dựng trên các đối tượng Nếu trong
C/C++ ta có thể tạo ra các hàm (chương trình con không gắn với đối tượng nào) thì trong Java ta chỉ có thể tạo ra các phương thức (chương trình con gắn liền với một lớp cụ thể) Trong Java không cho phép các đối tƣợng có tính năng đa kế thừa mà đƣợc thay thế bằng các giao diện (interface)
Độc lập phần cứng và hệ điều hành: Đối với các ngôn ngữ lập trình truyền thống như C/C++, phương pháp biên dịch được thực hiện như sau
Hình 2.2 Cách biên dịch chương trình truyền thống
Hình 2.3 Cơ chế biên dịch của JAVA
Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu
Kiểu dữ liệu phải khai báo tường minh
Java không sử dụng con trỏ và các phép toán con trỏ
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
Tự động giải phóng bộ nhớ
Cơ chế bẫy lỗi của Java giúp đơn giản hóa quá trình xử lý lỗi và hồi phục sau lỗi
Bảo mật: Java cung cấp một môi trường quản lý thực thi chương trình với nhiều mức để kiểm soát tính an toàn:
Phân tán: Java đƣợc thiết kế để hỗ trợ các ứng dụng chạy trên mạng bằng các lớp mạng (java.net) Hơn nữa, Java hỗ trợ nhiều nền chạy khác nhau nên 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 khác nhau
Đa luồng: Chương trình Java cung cấp giải pháp đ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 luồng này cho phép xây dựng các ứng dụng trên mạng chạy hiệu quả
Linh độ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ạy Điều này cho phép khả năng liên kết mã động
2.2.2 Tổng quan ngôn ngữ XML
XML, hoặc Extensible Markup Language (ngôn ngữ đánh dấu mở rộng), là một ngôn ngữ đánh dấu mà bạn có thể sử dụng để tạo ra thẻ riêng của mình Nó đƣợc tạo nên bởi Liên minh mạng toàn cầu, nhằm khắc phục những hạn chế của HTML - ngôn ngữ đánh dấu siêu văn bản, là cơ sở của mọi trang Web Giống nhƣ HTML, XML cũng đƣợc dựa trên SGML – Standard Generalized Markup Language Mặc dù SGML đƣợc sử dụng trong ngành công nghiệp xuất bản trong nhiều thập kỷ, nhƣng sự phức tạp của nó đều khiến những ai từng sử dụng nó mà không có cách nào khác phải thấy mệt mỏi
2.2.3 Tổng quan ngôn ngữ JSON
JSON (JavaScript Object Noattion) là một chuẩn để định dạng dữ liệu Rất dễ dàng để đọc, viết và phân tích Nó dựa trên cơ sở tập hợp của ngôn ngữ JavaScript, tiêu chuẩn ECMA-262 phiên bản 3 – tháng 12 năm 1999 Khi sử dụng JSON không cần phải có các bước phân tích phức tạp như đối với XML Mà có thể truy vấn trực tiếp giá trị theo tên (khóa) đƣợc định nghĩa trong JSON Đứng về mặt tốc độ của các ứng dụng di động đây là một ƣu điểm rất lớn
JSON đƣợc xây dựng trên 2 cấu trúc:
Là tập hợp của các cặp tên và giá trị name-value
Là 1 tập hợp các giá trị đã đƣợc sắp xếp
Các đặc điểm của JSON:
JSON là văn bản trơn (không có định dạng màu sắc, cỡ chữ,…)
JSON là "tự mô tả" (người dùng có thể hiểu được)
JSON là phân cấp (có cấu trúc cây)
JSON có thể đƣợc phân tích cú pháp (parse) bởi JavaScript
Dữ liệu JSON có thể đƣợc truyền đi bằng AJAX
Không có thẻ kết thúc
Nhanh hơn để đọc và ghi
Không dùng các từ reserve
2.2.4 Tổng quan ngôn ngữ PHP
Tóm tắt sơ lƣợc về PHP
PHP đƣợc phát triển từ một sản phẩm có tên là PHP/FI PHP/FI do Rasmus Lerdorf tạo ra năm 1995 Rasmus đã quyết định công bố mã nguồn của PHP/FI cho mọi người xem, sử dụng cũng như sửa các lỗi có trong nó đồng thời cải tiến mã nguồn
Vào năm 1997, PHP/FI 2.0, lần viết lại thứ hai của phiên bản C PHP/FI 2.0 đƣợc chính thức công bố vào tháng 11 năm 1997
PHP 3.0 là phiên bản đầu tiên cho chúng ta thấy một hình ảnh gần gũi với các phiên bản PHP mà chúng ta đƣợc biết ngày nay Nó đã đƣợc Andi Gutmans và Zeev Suraski tạo ra năm 1997 PHP 3.0 đã chính thức đƣợc công bố vào tháng 6 năm 1998, sau thời gian 9 tháng đƣợc cộng đồng kiểm nghiệm
PHP 4.0 đã chính thức đƣợc công bố vào tháng 5 năm 2000, gần 2 năm sau khi bản PHP 3.0 ra đời Ngoài tốc độ xử lý đƣợc cải thiện rất nhiều, PHP 4.0 đem đến các tính năng chủ yếu khác gồm có sự hỗ trợ nhiều máy chủ Web hơn, hỗ trợ phiên làm việc HTTP, tạo bộ đệm thông tin đầu ra, nhiều cách xử lý thông tin người sử dụng nhập vào bảo mật hơn và cung cấp một vài các cấu trúc ngôn ngữ mới
PHP 5 bản chính thức đã ra mắt ngày 13 tháng 7 năm 2004 sau một chuỗi khá dài các bản kiểm tra thử bao gồm Beta 4, RC1, RC2, RC3 Mặc dù coi đây là phiên bản sản xuất đầu tiên nhƣng PHP 5.0 vẫn còn một số lỗi trong đó đáng kể là lỗi xác thực HTTP
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Yêu cầu hệ thống
Tìm kiếm theo các tiêu chí
Xem các ATM trong danh sách yêu thích
Xem ATM trên bản đồ Google Map
Xem thông tin tài khoản, cập nhật thông tin tài khoản
Thêm, sửa, xóa danh sách ngân hàng
Thêm, sửa, xóa danh sách tình thành
Thêm, sửa, xóa danh sách quận huyện
Thêm, sửa, xóa danh sách địa điểm ATM
3.1.2 Yêu cầu phi chức năng
Chương trình thực hiện chính xác kết quả với sai số nhỏ và cơ sở dữ liệu lớn
Chương trình ổn định, chính xác và có độ an toàn cao
Gọn nhẹ, tốn ít tài nguyên hệ thống
Hạn chế đến mức thấp nhất những sai sót có thể xảy ra trong quá trình sử dụng
Sử dụng hệ thống dữ liệu hợp lí
Giao diện thân thiện, dễ sử dụng
Sử dụng hệ điều hành Android phiên bản mới hơn 2.3
Có kết nối Internet và hỗ trợ GPS để sử dụng chức năng xem các ATM ở gần, vẽ đường và tính khoảng cách.
Phân tích thiết kế hệ thống
3.2.1 Mô hình hóa yêu cầu
Người sử dụng: Là người trực tiếp sử dụng phần mềm để tìm kiếm các máy ATM hay góp ý cho người phát triển
Người quản lý: Là người quản lý sử dụng giao diện web service để xem, cập nhật, xóa danh sách ngân hàng, danh sách địa điểm, danh sách tỉnh thành…
Xác định các trường hợp sử dụng
Tìm kiếm theo các tiêu chí
Xem các ATM trong danh sách yêu thích
Xem ATM trên bản đồ Google Map
Xem thông tin tài khoản, cập nhật thông tin tài khoản
Thêm, sửa, xóa danh sách ngân hàng
Thêm, sửa, xóa danh sách tình thành
Thêm, sửa, xóa danh sách quận huyện
Thêm, sửa, xóa danh sách địa điểm ATM
Đặc tả các trường hợp sử dụng
Tác nhân: Người sử dụng, người quản lý
Mô tả: Bắt đầu phiên làm việc người sử dụng sẽ mở ứng dụng để tìm kiếm, người quản lý sử dụng web service để xem, sửa, xóa các thông tin danh mục
Tác nhân: Người sử dụng
Mô tả: Kết thúc phiên làm của việc người sử dụng, người quản lý sẽ đóng chương trình
Tác nhân: Người sử dụng
Mô tả: Người sử dụng vào form đăng nhập, nhập thông tin tài khoản và mật khẩu để đăng nhập
Tác nhân: Người sử dụng
Mô tả: Người sử dụng vào form đăng ký, nhập thông tin họ tên, tài khoản và mật khẩu để đăng ký
Tìm kiếm theo tiêu chí của người sử dụng
Tác nhân: Người sử dụng
Mô tả: Người sử dụng vào form tìm kiếm chọn ngân hàng, chọn tỉnh thành và quận huyện cần xem Sau khi click vào tìm kiếm chương trình sẽ hiển thị danh sách các ATM có trên danh sách người dùng cần tìm Người dùng có thể thêm địa điểm vào danh sách yêu thích, chia sẽ địa điểm lên facebook hoặc chọn xem địa điểm ATM đó trên Google
Xem các ATM trên bản đồ
Tác nhân: Người sử dụng
Mô tả: Chương trình sẽ hiển thị toàn bộ danh sách ATM lên trên bản đồ Google map để người sử dụng có thể tìm những ATM mà mình thích
Cập nhật thông tin tài khoản
Tác nhân: Người sử dụng
Mô tả: Người sử dụng vào form thông tin tài khoản để chỉnh sửa các thông tin của mình sau đó lưu lại
Xem các ATM ở trong danh sách yêu thích
Tác nhân: Người sử dụng
Mô tả: Tương tự tìm kiếm, chức năng xem ATM trong danh mục yêu thích sẽ cho người sử dụng lọc các ngân hàng cần xem Chương trình sẽ hiện thị danh sách các ATM trong danh sách yêu thích Người dùng có thể bỏ địa điểm khỏi danh sách yêu thích, chia sẽ địa điểm lên facebook hoặc chọn xem địa điểm ATM đó trên Google Map, vẽ đường đi từ địa điểm người dùng đến địa điểm ATM đã chọn
Tác nhân:Ngưởi sử dụng
Mô tả: Người sử dụng vào form góp ý điền tiêu đề, nội dung góp ý vào form, sau khi người dùng gửi đi góp ý thì góp ý sẽ được đưa vào web server của người phát triển
Tác nhân: Người quản lý
Mô tả: Người quản lý vào giao diện web xem các góp ý mà người sử dụng đã gửi
Cập nhật danh sách ngân hàng
Tác nhân: Người quản lý
Mô tả: Cập nhật danh sách các ngân hàng vào hệ thống
Cập nhật danh sách tỉnh thành
Tác nhân: Người quản lý
Mô tả: Cập nhật danh sách các tỉnh thành vào hệ thống
Cập nhật danh sách quận huyện
Tác nhân: Người quản lý
Mô tả: Cập nhật danh sách các quận huyện vào hệ thống
Cập nhật danh sách địa điểm
Tác nhân: Người quản lý
Mô tả: Cập nhật danh sách các địa điểm máy ATM vào hệ thống
Biểu đồ trường hợp sử dụng
Biểu đồ trường hợp sử dụng tổng quát
Hình 3.1 Biểu đồ trường hợp sử dụng tổng quát
Biểu đồ trường hợp sử dụng cập nhật danh sách ngân hàng
Hình 3.2 Biểu đồ trường hợp sử dụng cập nhật danh sách ngân hàng
Biểu đồ trường hợp sử dụng cập nhật danh sách tỉnh thành
Hình 3.3 Biểu đồ trường hợp sử dụng cập nhật danh sách tỉnh thành
Biểu đồ trường hợp sử dụng cập nhật danh sách quận huyện
Hình 3.4 Biểu đồ trường hợp sử dụng cập nhật danh sách quận huyện
Biểu đồ trường hợp sử dụng cập nhật danh sách địa điểm
Hình 3.5 Biểu đồ trường hợp sử dụng cập nhật danh sách địa điểm
Biểu đồ trường hợp sử dụng cập nhật danh sách người dùng
Hình 3.6 Biểu đồ trường hợp sử dụng cập nhật danh sách người dùng
3.2.2 Mô hình hóa khái niệm
Tinhthanh (Tỉnh thành): là lớp lưu thông tin tỉnh thành
Quanhuyen (Quận huyện): là lớp lưu thông tin các quận huyện
Nganhang (Ngân Hàng): là lớp lưu thông tin của các ngân hàng
Diadiem (Địa điểm): là lớp lưu thông tin địa điểm các ATM
User (Tài khoản): là lớp lưu thông tin các tài khoản của người dùng
Lienhe (Liên hệ): là lớp lưu thông tin liên hệ của các thành viên
Yeuthich (Yêu thích): là lớp lưu thông tin yêu thích của các thành viên
Lienhediadiem (Danh sách địa điểm góp ý): là lớp lưu thông tin danh sách địa điểm của người sử dụng gửi góp ý
Lớp biên là lớp nằm trên đường biên của hệ thống với phần thế giới còn lại Nó có thể là biểu mẫu, báo cáo hoặc giao diện
Hệ thống gồm các lớp biên sau:
Lớp điều khiển là lớp làm nhiệm vụ điều khiển mọi hoạt động của các lớp khác Tương ứng với mỗi Use Case có thể có một lớp điều khiển làm nhiệm vụ gửi thông điệp cho các lớp liên quan
Hệ thống gồm các lớp điều khiển sau
Hình 3.8 Các lớp điều khiển
Các lớp thực thể ở mức phân tích
Hệ thống gồm các lớp thực thể sau
Hình 3.9 Các lớp thực thể ở mức phân tích
3.2.3 Mô hình hóa tương tác đối tượng
Trình tự khởi động hệ thống
Hình 3.10 Biểu đồ trình tự khởi động hệ thống
Trình tự đóng hệ thống
Hình 3.11 Biểu đồ trình tự đóng hệ thống
Hình 3.12 Biểu đồ trình tự tìm kiếm
Trình tự xem người dùng đăng ký tài khoản
Hình 3.13 Biểu đồ trình tự người dùng đăng ký tài khoản
Hình 3.14 Biểu đồ trình tự đăng nhập
Hình 3.15 Biểu đồ trình tự góp ý
Trình tự xem ATM trên bản đồ
Hình 3.16 Biểu đồ trình tự xem ATM trên bản đồ
Trình tự thêm danh sách địa điểm
Hình 3.17 Biểu đồ trình tự thêm danh sách địa điểm
Trình tự sửa danh sách địa điểm
Hình 3.18 Biểu đồ trình tự sửa danh sách địa điểm
Trình tự xóa danh sách địa điểm
Hình 3.19 Biểu đồ trình tự xóa danh sách địa điểm
Biểu đồ cộng tác khởi động hệ thống
Hình 3.20 Biểu đồ cộng tác khởi động hệ thống
Biểu đồ cộng tác đóng hệ thống
Hình 3.21 Biểu đồ cộng tác đóng hệ thống
Biểu đồ cộng tác tìm kiếm
Hình 3.22 Biểu đồ cộng tác tìm kiếm
Biểu đồ cộng tác đăng ký
Hình 3.23 Biểu đồ cộng tác đăng ký
Biểu đồ cộng tác đăng nhập
Hình 3.24 Biểu đồ cộng tác đăng nhập
Biểu đồ cộng tác góp ý
Hình 3.25 Biểu đồ cộng tác góp ý
Biểu đồ cộng tác thêm địa điểm
Hình 3.26 Biểu đồ cộng tác thêm địa điểm
Biểu đồ cộng tác sửa địa điểm
Hình 3.27 Biểu đồ cộng tác sửa địa điểm
Biểu đồ cộng tác xóa địa điểm
Hình 3.28 Biểu đồ cộng tác xóa địa điểm
Biểu đồ cộng tác xem ATM trên bản đồ
Hình 3.29 Biểu đồ cộng tác xem ATM trên bản đồ
3.2.4 Mô hình hóa hành vi
Biểu đồ trạng thái mở hệ thống
Hình 3.30 Biểu đồ trạng thái mở hệ thống
Biểu đồ trạng thái tìm kiếm
Hình 3.31 Biểu đồ trạng thái tìm kiếm
Biểu đồ trạng thái gửi góp ý
Hình 3.32 Biểu đồ trạng thái gửi góp ý
Biểu đồ trạng thái xem ATM trong danh sách yêu thích
Hình 3.33 Biểu đồ trạng thái xem ATM trong danh sách yêu thích
Biểu đồ hoạt động mở hệ thống
Hình 3.34 Biểu đồ hoạt động mở hệ thống
Biểu đồ hoạt động đóng hệ thống
Hình 3.35 Biểu đồ hoạt động đóng hệ thống
Biểu đồ hoạt động cập nhật danh sách ngân hàng
Hình 3.36 Biểu đồ hoạt động cập nhật danh sách ngân hàng
Biểu đồ hoạt động tìm kiếm
Hình 3.37 Biểu đồ hoạt động tìm kiếm
Nhap thong tin tim kiem
Biểu đồ hoạt động gửi góp ý
Hình 3.38 Biểu đồ hoạt động gửi góp ý
3.2.5 Thiết kế chi tiết biểu đồ lớp
Từ biểu đồ lớp mức phân tích, kết hợp với các biểu đồ trình tự, cộng tác, trạng thái và hoạt động Biều đồ lớp mức thiết kế đƣợc phát triển nhƣ sau:
Hình 3.39 Chi tiết biểu đồ lớp
3.2.6 Thiết kế kiến trúc vật lý
Hình 3.40 Biểu đồ thành phần
Hình 3.41 Biểu đồ triển khai
Web server: Máy chủ chứa cơ sỡ dữ liệu và web service
Thiết bị Android: Thiết bị sử dụng hệ điều hành android
Google Web: Máy chủ dịch vụ web của google.
XÂY DỰNG ỨNG DỤNG
Demo chương trình
4.1.1 Xây dựng giao diện của web service
Giao diện chính của web service
Hình 4.1 Giao diện chính của web service
Giao diện danh sách địa điểm ATM
Hình 4.2 Giao diện danh sách địa điểm ATM
Giao diện thêm tài khoản
Hình 4.3 Giao diện thêm tài khoản
Giao diện xóa tài khoản
Hình 4.4 Giao diện xóa tài khoản
4.1.2 Xây dựng chức năng xử lý của web service
Các chức năng xử lý của web service dùng chung một cách thức hoạt động là từ ứng dụng gửi các điều kiện lên web service, web service nhận các giá trị của ứng dụng gửi lên, tạo câu truy vấn, truy xuất vào CSDL và trả về kết quả cho ứng dụng
Bắt đầu Nhận các giá trị gửi đi
PHP C ontrol Xuất kết quả
Hình 4.5 Quá trình xử lý của web service
Nhƣ đã thấy việc gửi các giá trị truy vấn lên web service của ứng dụng thông qua các giá trị $_POST từ ứng dụng Android Để làm đƣợc điều đó phía ứng dụng phải sử dụng một đối tƣợng có kiểu BasicNameValuePair để tạo ra các biến POST thông qua phương thức add(String name, String value), khi ứng dụng gửi các biến này lên web service sẽ có nhiệm vụ nhận dữ liệu, truy xuất vào CSDL và trả về kết quả, sau khi có kết quả từ web service trả về ứng dụng sẽ đọc và phân tích dữ liệu đó để hiển thị lên ứng dụng
Ví dụ về hàm login trong ứng dụng public JSONObject login(String user, String pass) {
List params = new ArrayList(); params.add(new BasicNameValuePair("getuser", "login")); params.add(new BasicNameValuePair("user", user)); params.add(new BasicNameValuePair("pass", pass));
JSONObject json = jsonParser.getJSONFromUrl(getuser, params, "POST"); return json;
Sau khi lấy được user và pass từ textview của người dùng nhập vào ta sẽ gọi hàm login
JSONObject json = function.login(user, pass);
Khi gọi hàm này thì dữ liệu sẽ truyền lên web service, web service sẽ nhận các biến getuser, user, pass thông qua phương thức $_POST if(isset( $_POST[‘ getuser ’] ) && $_POST[‘ getuser ’] == „login‟){
Tiếp đến web service có nhiệm vụ nhận các yêu cầu đó tạo truy vấn vào CSDL sau đó xuất dữ liệu ra kiểu JSON bằng lệnh json_encode($data) if(isset($_POST['getuser']) && $_POST['getuser'] == 'login'){
$sql = mysql_query("SELECT * FROM tb_user WHERE user='".$user."' AND pass='".$pass."'"); if(mysql_num_rows($sql) == 1){
$info = mysql_fetch_array($sql); if($info['status'] == 'false'){
$trave['msg'] = 'Tài khoản bị khóa Liện hệ Y!M: abit04c'; echo json_encode($trave);
$trave['dreg'] = date("d/m/Y", $info['ngaydangky']);
$trave['quyen'] = $info['quyen']; echo json_encode($trave);
$trave['msg'] = 'Thông tin đăng nhập không chính xác!'; echo json_encode($trave);
Sau khi có dữ liệu trả về ứng dụng sẽ phân tích dữ liệu trả về và hiển thị kết quả lên ứng dụng if (json.getInt(KEY_SUCCESS) == 1) {
String s_userid = json.getString("userid");
String s_user = json.getString("user");
String s_name = json.getString("fullname");
String s_priv = json.getString("quyen");
String s_pass = json.getString("pass");
String s_dreg = json.getString("dreg");
String s_stt = json.getString("stt"); session.createLoginSession(s_userid, s_user, s_name, s_priv, s_pass, s_dreg, s_stt); } else { function.showAlertDialog(Login.this, "Lổi", json.getString(KEY_MSG).toString(), false);
Ở đây sau khi nhận được dữ liệu trả về ứng dụng sẽ tạo session để lưu phiên làm việc của người đã đăng nhập
4.1.3 Truyền dữ liệu qua các Activity
Trong android để truyền dữ liệu qua các form để sử dụng ta sử dụng 2 đối tƣợng đó là Intent và Bundle Thay vì dùng các danh sách tham số/đối số truyền thống, trong Android thì việc trao đổi dữ liệu giữa các tiến trình đƣợc sử dụng cơ chế Intent
Hình 4.6 Mô hình trao đổi dữ liệu giữa 2 Activity
Để trao đổi dữ liệu thì Intent thường mang theo một danh sách các đối số được đặt tên chứa dữ liệu (Bundle)
Hình 4.7 Cấu trúc một Intent
Cấu trúc Bundle là một cơ chế đơn giản để truyền dữ liệu, với mỗi biến bundle sử dụng một định dạng cặp (name, value) Với các cặp phương thức để truyền và lấy dữ liệu nhƣ “putXXX”, “getXXX”
Lập trình android về mapView khá dễ dàng khi google cung cấp cho class
MapActivity để đơn giản trong việc lập trình, để hiển thị một bản đồ trên ứng dụng, chúng ta chỉ cần lấy key MapAPI rồi đƣa vào ứng dụng
G ửi truy vấn với API Key tới G oogle WebServies
Kiểm tra Map API Key
Hình 4.8 Quá trình lấy dữ liệu từ Google Map
Thêm MapAPI key vào layout của form: android:apiKey="00WmoYsET3okvAu1sHp2AgUQnta7VpXxs_oQyag"
Sử dụng tài nguyên GPS và Internet của hệ thống
Việc sử dụng tài nguyên trong hệ thống Android đƣợc đề cập khá rõ khi lập trình, để tương tác được với các ứng dụng khác cũng như tài nguyên phần cứng, phải thêm các thẻ quyền (permission) vào file manifest của project
Hình 4.9 Quá trình sử dụng tài nguyên hệ thống
Đánh dấu vào vị trí của MapView
Để đánh dấu một vị trí nào đó bất kì ở trên map, sử dụng một class để định dạng vị trí đánh dấu đƣợc kế thừa từ class ItemizedOverlay trong thƣ viện android Class object khá đầy đủ các phương thức để sử dụng Class này hoạt động khi xác định đƣợc tọa độ của địa điểm cần đánh dấu (kinh độ và vĩ độ)
Bắt đầu Đưa vị trí cần đánh dấu
ItemizedO verlay Đánh dấu lên MapView Kết thúc
Hình 4.10 Quá trình đánh dấu trên bản đồ
Việc đưa vị trí cần đánh dấu được thực hiện bằng phương thức setLocation() trong ItemizedOverlay Sau đó điểm đánh dấu sẽ đƣợc định dạng về đồ họa nhƣ trong cấu trúc của class ItemizedOverlay rồi đƣợc vẽ trên tọa độ MapView tương ứng marker=getResources().getDrawable(R.drawable.hinh_danh_dau); myItemizedOverlay = new ItemizedOverlay(marker,this); mapView.getOverlays().add(myItemizedOverlay); myItemizedOverlay.addItem(location);
4.1.5 Đọc dữ liệu từ file JSON
Như đã đề cập khi trước khi truy vấn vào hệ thống web services của ứng dụng kết quả mà ta nhận đƣợc đó là một file JSON dựa vào giá trị output trong câu truy vấn Sau khi đã có dữ liệu dưới định dạng file JSON thì tiến hành tách các dữ liệu cần thiết
Cấu trúc file JSON xác định các mảng giá trị dựa vào một cặp thẻ đóng mở “[“
“]” Vì thế để lấy dữ liệu thì khai báo một mảng JSONArray đƣợc định nghĩa sẵn và được gán dữ liệu thông qua phương thức getJSONArray()
Hình 4.11 Mô hình xác định mảng giá trị trong JSON
JSONArray place = json_place.getJSONArray(KEY_PLACE);
Cấu trúc các thẻ dữ liệu trong mảng là cấu trúc cây vì thế để truy cập đến các thẻ con trong mảng phải sử dụng phương thức getJSONObject()
Cuối cùng là lấy dữ liệu thông qua phương thức getString(“tên_thẻ”)
String tendiadiem = c.getString(KEY_A_PLACE);
Giao diện ứng dụng
Giao điện chính của chương trình
Hình 4.12 Giao diện chính của chương trình
Hình 4.13 Giao diện tìm kiếm
Giao diện kết quả tìm kiếm
Hình 4.14 Giao diện kết quả tìm kiếm
Giao diện tính đánh dấu địa điểm và tính vẽ đường
Hình 4.15 Giao diện tính đánh dấu địa điểm và tính vẽ đường
Giao diện góp ý và giao diện thông tin tài khoản
Hình 4.16 Giao diện góp ý và giao diện thông tin tài khoản
Giao diện đăng ký và đăng nhập
Hình 4.17 Giao diện đăng ký và đăng nhập
Giao diện xem địa điểm yêu thích
Hình 4.18 Giao diện xem địa điểm yêu thích
Giao diện xem ATM trên bản đồ
Hình 4.19 Giao diện xem ATM trên bản đồ
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Kết luận: Chương trình được nghiên cứu và thực hiện trong thời gian ngắn nên kết quả đạt được chưa như ý và còn tồn tại một số khuyết điểm Chương trình đã giải quyết đƣợc vấn đề chính là tìm kiếm máy ATM trong một phạm vi nhất định, giao diện chương trình dể sử dụng Tuy nhiên bên cạnh đó còn một số hạn chế như: dữ liệu chƣa đúng với thực tế, các thiết bị phần cứng chƣa đáp ứng, chức năng vẽ đường chưa hoàn thiện
Hướng phát triển: Giải quyết triệt để các vấn đề còn tồn tại ở trên Mở rộng phạm vi tìm kiếm, cập nhật lại cơ sở dữ liệu một cách chính xác nhất
DANH MỤC TÀI LIỆU THAM KHẢO
[1] Google INC Android Developer Docs (Online)
[2] Google INC Google Maps API Web Services (Online)
[3] Wikipedia Android (Hệ điều hành) (Online)
[4] Wikipedia Java (Ngôn ngữ lập trình) (Online)
[5] ThS Lê Viết Trương Giáo trình phân tích, thiết kế hướng đối tượng Trường
CĐ Công nghệ thông tin Hữu nghị Việt Hàn, 8/2012
[6] Jeff Friesen Learn Java for Android Development, 2009
[7] Wallace Jackson Android Apps for Absolute Beginners, 2011