3.3.4.1 Tổng quan ứng dụng
a) Mô tả ứng dụng
Đây là một ứng dụng được thiết kế dành riêng cho người dùng Android và có đăng kí với hệ thống quản lý và giám sát taxi. Ứng dụng được thiết kế với các chức năng làm tối đa hóa hiệu suất sử dụng taxi của người dùng. Các chức năng được mô tả tổng quát như sau:
Chức năng đặt xe
Đây là chức năng cung cấp cho người dùng các phương tiện để đặt xe một cách đơn giản. Bao gồm có:
Danh sách các hãng taxi trong cùng một hệ thống: Ứng dụng cung cấp danh sách các số điện thoại và thông tin của từng hãng taxi trong một màn hình. Cho phép người dùng tùy ý lựa chọn một hãng taxi để gọi điện đặt xe hoặc để đặt xe tự động. Số lượng các hãng taxi này có thể thay đổi.
Cung cấp chức năng đặt xe tự động: Hệ thống sẽ hiện lên một màn hình cho phép người dùng điền các thông tin cần thiết như tên, địa chỉ, số DT, ngày giờ cần đi xe. Các thông tin này sau đó sẽ được gửi tự động đến tổng đài đặt xe.
Chức năng quan sát bản đồ
Đây là chức năng cung cấp một cái nhìn toàn diện về các taxi trong hệ thống quản lý điều phối taxi cho người dùng. Người dùng có thể quan sát vị trí của các taxi xung quanh mình trong một bán kính nhất định. Đồng thời có thể quan sát được
vị trí của mình đang ở đâu trên bản đồ. Khi đó họ có thể tùy chọn một hãng taxi gần mình nhất để gọi.
b) Sơ đồ thiết kế class
class Client_Device ConnectionLayer BusinessLogicLayer GUI Layer Handler + handleMessage(Message) : void Activity CompanyInfo + back() : void + onCreate(Bundle) : void Activity UserInfoEditor - myMainController: MainController + onClick(View) : void + onCreate(Bundle) : void + onCreateDialog(int) : void + saveUserInfo() : void Activity Login - password: String - username: String + login() : void + onCreate(Bundle) : void MainController - companyList: Array<Company> - locationListener: LocationListener - NOTIFICATION_UPDATE_MAP: int {readOnly} - NOTIFICATION_UPDATE_USER: int {readOnly} - user: User
+ book(int) : void + call(int) : void + initAll() : void + login(String, String) : void + logout(String) : void
+ notifyUpateUIMessage(Handler, int) : void + updateUserInfo() : void Company - address: String - companyInfo: String - mobile: String - name: String + gets() : Data + set() : void User - dateTime: String - destination: String - geoPosition: GeoPoint - mobile: String - name: String - position: String + gets() : Data + sets(Data) : void ServiceRequestor - NAME_SPACE: String - URL: String
+ bookTaxi(string, String, String, String, String, String) : void + getTaxis(GPS, float) : void
+ requestData(String, SoapSerializationEnvelope) : Object
Activity CompanyListScreen - locationManager: LocationManager - myMainController: int - myUIHandler: int - myViewUpdateHandler: Handler + gotoCompany(int) : void + onCreate(Bundle) : void + showAbout() : void + showSettings() : void + startUserInfo() : void + updateUserInfo() : void MyApplication - myMainController: MainController + showDialog(String) : void MyLocationListener + onLocationChanged(Location) : void LocationManager Activity MapScreen - map: MapView - mapController: MapController - mOverlay: MapOverlay - myMainController: MainController - myViewUpdateHandler: Handler + book() : void + call() : void + onCreate(Bundle) : void + updateMap() : void
Hình 26: Sơ đồ thiết kế class ứng dụng dành cho khách hàng Mô tả sơ đồ thiết kế class
Sơ đồ thiết kế class này được xây dựng dựa trên mô hình 3 layers tương tự như đối với thiết bị taxi. Mỗi tầng có một chức năng nhiệm vụ riêng, được mô tả như sau:
Tầng GUI layer:
Tầng này là tầng chứa các thiết kế giao diện của hệ thống. Thông thường, mỗi giao diện người dùng sẽ được cài đặt trong một activity Android. Các activity này liên lạc với nhau thông qua MainController. Chức năng của từng class được mô tả như sau:
CompanyListScreen: Đây là activity đầu tiên hiển thị khi đăng nhập xong, nó chứa thông tin cơ bản về người dùng và một danh sách các hãng taxi để người dùng chọn đăng kí. Đồng thời hiển thị các nút bấm cho người dùng có thể đặt xe và gọi xe ngay.
UserInfoEditor: Đây là activity hiển thị các thông tin của người dùng, bao gồm có các thông tin: Họ tên, địa chỉ hiện tại, số lượng khách đi xe, điểm cần đến, ngày giờ cần đi xe.
MapScreen: Đây là activity hiển thị bản đồ cho người dùng. Nó cho phép người dùng tìm thấy vị trí của mình trên bản đồ, và quan sát được vị trí của các taxi xung quanh họ, với một bán kính xác định trước. Class này chứa các đối tượng map để hiển thị bản đồ, mapController để điều khiển bản đồ, mapOverlay để vẽ lên các đối tượng đồ họa trên bản đồ.
CompanyInfo: Activity này chứa các thông tin về một công ty taxi. Nó hiển thị cho người dùng thông tin như tên công ty, số điện thoại, địa chỉ công ty, giới thiệu về công ty.
MyApplication: Ứng dụng Android, chứa các phương thức để MainController có thể gọi được các activity.
Login: Đây là activity dùng để đăng nhập vào hệ thống.
Tầng BusinessLogic layer
Đây là tầng trung tâm điều khiển hệ thống, chứa các class để xử lý thông tin qua lại giữa khối giao diện và khối kết nối.
MainController: Đây là class trung tâm điều khiển hệ thống, nó cung cấp các phương thức để liên kết giữa khối giao diện và khối kết nối server. Trong đó có các phương thức cơ bản như call để gọi xe, book để đặt xe... Lấy ví dụ, khi một người dùng yêu cầu đặt xe, thì CompanyListScreen sẽ chuyển yêu cầu đặt xe xuống MainController. Từ đây MainController lấy ra các thông tin cần thiết về người dùng, như GPS, họ tên, số đt... Và chuyển xuống cho ServiceRequestor để gửi yêu cầu lên server.
User: Là class chứa dữ liệu thông tin về người dùng. Company: Là class chứa dữ liệu thông tin về hãng taxi.
MyLocationListener: Class này dùng để lắng nghe các thay đổi GPS thông báo về cho MainController.
Tầng Connection layer
Đây là tầng cung cấp các phương thức để kết nối với server thông qua giao tiếp webservice. Gồm có các class sau:
ServiceRequestor: Đây là class chứa toàn bộ các liên kết với server thông qua webservice. Các liên kết này gồm có login, logOut, getTaxis để lấy thông tin về các taxi xung quanh, bookTaxi để đặt xe.
c) Sơ đồ thiết kế activity
Dưới đây là sơ đồ thiết kế diễn tiến của cả ứng dụng, sơ đồ này mô tả quá trình từ khi người dùng đăng nhập vào hệ thống cho đến khi họ đặt xe thành công. Về cơ bản thì có 3 nhóm chức năng chính:
Nhóm chức năng đăng nhập đăng xuất: Đảm bảo người dùng đăng nhập và đăng xuất để hệ thống có thể kiểm tra.
Nhóm chức năng đặt/gọi xe: Gọi trực tiếp đến tổng đài hoặc đặt xe.
Nhóm chức năng xem bản đồ: Xem bản đồ để biết vị trí của các xe xung quanh người dùng. act client_device Show Info load data start notify relogin Login connectToServer show user info show companies info
Dat xe Xem ban do
load Google map load taxi's info show map select company call book
Confirm user info
send booking data show all user info End LogOut select select false true
3.3.4.2 Chức năng đặt xe
Chức năng đặt xe là chức năng quan trọng nhất trong ứng dụng dành cho người dùng. Chức năng này đem đến cho người dùng cách thức để đặt xe thuận tiện nhất, chính xác nhất. Các tính năng cơ bản của đặt xe gồm có:
Cung cấp danh sách các hãng taxi cho người dùng tùy chọn để đi taxi, mỗi hãng taxi cung cấp đầy đủ các thông tin cơ bản như tên hãng, địa chỉ hãng, số điện thoại và các thông tin giới thiệu về hãng.
Cung cấp 2 chức năng gọi và đặt xe. Mỗi hãng taxi có một số điện thoại riêng, khi người dùng chọn chức năng gọi xe, ứng dụng sẽ tự động chuyển sang chế độ gọi đúng tổng đài của hãng đó.
Đối với chức năng đặt xe, ứng dụng cung cấp một giao diện đơn giản để người dùng nhập các thông tin cần thiết về họ mỗi khi họ cần đặt xe, các thông tin này có thể được lưu lại cho lần gọi xe sau. Các thông tin này gồm có: Họ và tên, số điện thoại, số khách đi xe, điểm đón khách, điểm đến, ngày và giờ đón khách.
Sơ đồ thiết kế của chức năng đặt/gọi xe
Mô tả sơ đồ:
Ở sơ đồ trên ta thấy có 2 trường hợp là gọi và đặt xe:
Trường hợp thứ nhất: Gọi xe
Khi người dùng chọn một hãng taxi trong danh sách taxi, companyListScreen sẽ tìm đến đối tượng công ty taxi đó và lấy ra số điện thoại tương ứng, thông qua ID của từng hãng. Sau đó, yêu cầu gọi xe được chuyển đến MainController để thực hiện cuộc gọi. Trong lập trình Android, việc thực hiện cuộc gọi đồng nghĩa với việc gọi một activity mới.
Trường hợp thứ hai: Đặt xe tự động
Cũng tương tự như việc gọi xe, companyListScreen sẽ tìm ra được đối tượng hãng taxi phù hợp với lựa chọn của người dùng và chuyển thông tin cho MainController. Ở đây thay vì sử dụng số điện thoại để liên lạc, thì MainController sẽ liên lạc với tổng đài thông qua URL của hệ thống, sau đó ứng với ID của MainController gửi lên để gửi thông tin đặt xe cho hãng đó.
Quá trình được thực hiện song song với việc hiển thị màn hình tùy chỉnh thông tin người dùng, để người dùng xác nhận lại các thông tin đặt xe sẽ được gửi lên bản đồ, bằng cách tạo mới đối tượng của UserInfoEditor.
Khi kết thúc việc đặt xe, hệ thống sẽ phản hồi lại xem việc đặt xe đã thành công hay chưa. Đối với việc phản hồi của hệ thống, việc đặt xe chỉ được coi là thành công khi thông tin người dùng được lưu vào CSDL thành công.
Hàm notifyUpdateUI() dùng để hiển thị các thông báo cho người dùng kết quả đặt xe.
Sau khi đặt xe xong, các thông tin người dùng sẽ được lưu lại để sử dụng cho lần đặt xe tiếp theo. Làm giảm thiểu thời gian làm việc cho người dùng.
3.3.4.3. Chức năng tìm kiếm xe và theo dõi bản đồ a) Mô tả chức năng:
Đây là một tiện ích dành cho người dùng. Chức năng này cung cấp cho người dùng một cái nhìn toàn cảnh về không gian xung quanh người dùng bằng cách đặt người dùng vào một bản đồ có tích hợp GPS. Vị trí của người dùng sẽ được hiển thị ngay tại trung tâm của bản đồ, mỗi khi người dùng di chuyển, ứng dụng sẽ tự cập nhật lại vị trí của họ trên bản đồ để họ tiện theo dõi.
Thêm vào đó, người dùng có thể quan sát các taxi chạy xung quanh mình trong một bán kính nhất định do người dùng tự đặt ra. Người dùng có thể biết và đón taxi ngay khi họ cần, tại các vị trí phù hợp mà không phải vất vả chờ đợi. Danh sách các taxi của toàn bộ các hãng được hiển thị trên bản đồ của người dùng mỗi khi họ truy cập vào bản đồ.
b) Sơ đồ sequence chức năng hiển thị bản đồ
Hình 29: Sơ đồ sequence chức năng hiển thị bản đồ Mô tả sơ đồ
Sơ đồ này mô tả quá trình hiển thị thông tin bản đồ cho người dùng thấy.
Bước 1: Khi người dùng mở activity bản đồ lên, MapScreen sẽ tự động tải các thông tin từ Google Map để hiển thị bản đồ trên thiết bị.
Bước 2: MapScreen sẽ yêu cầu các thông tin về vị trí GPS của người dùng từ MainController. Và hiển thị thông tin đó lên màn hình bản đồ. Vị trí của người dùng được thể hiện bởi 1 hình vẽ BitMap vẽ bởi mapOverlay.
Bước 3: MapScreen yêu cầu thông tin về vị trí các taxi trong hệ thống để hiển thị lên bản đồ. Các thông tin về xe này được yêu cầu từ server. Thông tin gửi lên server gồm có vị trí GPS của người dùng và bán kính hiển thị các taxi.