ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT - HÀN
BÁO CÁO ĐỒ ÁN CHUYÊN
NGÀNH 2
ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG ĐA NỀN TẢNG
TAXI APP
Sinh viên thực hiện
: LÊ ĐÌNH TRỌNG
PHẠM ANH TÚ
Giảng viên hướng dẫn : TS. LÊ TÂN
Lớp
: 17IT3
Đà nẵng, tháng 05 năm 2021
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT - HÀN
BÁO CÁO ĐỒ ÁN CHUYÊN
NGÀNH 2
ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG ĐA NỀN TẢNG
TAXI APP
Đà Nẵng, tháng 05 năm 2021
LỜI CẢM ƠN
Trên thực tế khơng có sự thành cơng nào mà không gắn liền
với những sự hỗ trợ, sự giúp đỡ dù ít hay nhiều, dù là trực tiếp hay
gián tiếp của người khác. Trong suốt thời gian từ khi bắt đầu học
tập ở giảng đường đại học đến nay, em đã nhận được rất nhiều sự
quan tâm, giúp đỡ của Thầy Cơ, gia đình và bạn bè.
Với lịng biết ơn sâu sắc nhất, em xin gửi đến Thầy Cô ở
Trường Đại Học Công Nghệ Thông Tin và Truyền Thông Việt Hàn đã cùng với tri thức và tâm huyết của mình để truyền đạt vốn
kiến thức quý báu cho em.
Em xin chân thành cám ơn thầy TS. Lê Tân đã tận tình
hướng dẫn em trong quá trình làm đồ án, những điều cần chú ý
khi làm ứng dụng. Trong thời gian làm đồ án em đã có được nhiều
kiến thức và kinh nghiệm trong lập trình, dưới sự hướng dẫn của
thầy hướng dẫn, chúng em không những thu được rất nhiều kiến
thức bổ ích, mà cịn tích lũy được nhiều kinh nghiệm hữu ích cho
cơng việc sau này.
Mặc dù đã rất cố gắng hoàn thiện bản báo cáo đồ án với tất
cả sự nỗ lực, tuy nhiên, do chưa có nhiều kinh nghiệm trong việc
làm ứng dụng di động, cũng như thời gian có hạn, kiến thức cịn
hạn chế nên bản báo cáo này chắc chắn sẽ không thể tránh khỏi
những thiếu sót. Chúng em rất mong nhận được sự quan tâm,
thơng cảm và những đóng góp q báu của các thầy cô và các bạn
để bản báo cáo này ngày càng hoàn thiện hơn.
Sau cùng, em xin kính chúc các thầy cơ trong Trường Đại
Học Cơng Nghệ Thông Tin và Truyền Thông Việt - Hàn dồi dào
sức khỏe để tiếp tục truyền đạt kiến thức cho thế hệ mai sau.
MỞ ĐẦU
Hiện nay, sự phát triển của công nghệ thông tin ở nước ta
đang bước vào thời kỳ mới với việc triển khai rộng rãi các ứng
dụng tin học vào mỗi nhu cầu của người dân. Khồng ai còn nghi
ngờ gì về vai trị của cơng nghệ thơng tin trong đời sống, trong
khoa học kĩ thuật, kinh doanh, cũng như trong mọi mặt của xã hội,
ngay cả đối với một cá nhân.
Trong cuộc sống hiện nay việc sử dụng những ứng dụng
điện thoại di động đang ngày càng trở nên phổ biến, từ những ứng
dụng trò chơi đến những ứng dụng, phục vụ cho nhu cầu cuộc
sống hàng ngày như mua sắm, đọc báo, xem phim… Hiện nay
việc đi lại bằng phương tiện công cộng đang ngày càng trở nên
phổ biến, đặc biệt là đi taxi và một ứng dụng kết nối hành khách
và lái xe sẽ giúp việc đi lại trở nên dễ dàng và thuận tiện hơn là rất
cần thiết, giúp nhu cầu cuộc sống của con người được nâng cao.
Được sự đồng ý của nhà trường và giáo viên hướng dẫn em
đã được thực hiện đồ án chuyên ngành 2 là: Xây dựng ứng dụng
gọi xe taxi. Ứng dụng này giúp cho người dùng có thể tìm xe, gọi
xe, cũng như biết được chi phí khi đi là bao nhiêu. Là ứng dụng có
thể tính tiền bằng quãng đường đi được thông qua google maps và
nhiều tiện ích khác.
Bằng sự cố gắng nỗ lực của bản thân đặc biệt là sự giúp đỡ
tận tình, chu đáo của thầy TS. Lê Tân em đã hoàn thành đồ án
đúng thời hạn. Do thời gian làm đồ án có hạn và trình độ cịn
nhiều hạn chế nên khơng thể tránh khỏi những thiếu sót. Em rất
mong nhận dược sự đóng góp của các thầy cơ để bài đồ án này
được hoàn thiện hơn.
Em xin chân thành cảm ơn!
NHẬN XÉT
(Của giảng viên hướng dẫn)
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
.............................................................................................................
MỤC LỤC
Chương 1 PHÁT BIỂU BÀI TOÁN...................................................................1
1.1 . Giới thiệu về đề tài xây dựng ứng dụng gọi xe...........................................1
1.1.1 . Quy trình nghiệp vụ...........................................................................1
1.1.2 . Những khó khăn, thuận lợi.................................................................1
1.1.3 . Bài toán quản lý hệ thống gọi xe........................................................2
1.2 . Những công nghệ áp dụng..........................................................................3
Chương 2 TỔNG QUAN...................................................................................4
2.1 . Giới thiệu về đề tài:....................................................................................4
2.2 . Mục đích nghiên cứu:.................................................................................5
2.3 . Phương pháp nghiên cứu:...........................................................................6
Chương 3 CƠ SỞ LÝ THUYẾT........................................................................7
3.1 Flutter...........................................................................................................7
3.1.1 . Giới thiệu về Flutter:..........................................................................7
3.1.2 . Mơ hình cấu tạo nên một project Flutter............................................8
3.1.3 . Ưu điểm của Flutter...........................................................................9
3.1.4 . Các thành phần quan trọng trong Flutter............................................9
3.2 . Dart..........................................................................................................11
3.2.1 . Giới thiệu ngôn ngữ Dart.................................................................11
3.2.2 . Đặc điểm của ngôn ngữ Dart:..........................................................12
3.2.3 . Những ưu điểm của Dart:.................................................................12
3.2.4 . Cài đặt Dart......................................................................................12
Chương 4 PHÂN TÍCH THIẾT KẾ HỆ THỐNG.............................................13
4.1 . Khảo sát và phân tích bài tốn..................................................................13
4.1.1 . Khảo sát và phân tích hiện trạng......................................................13
4.1.2 . Phân tích bài tốn.............................................................................15
4.1.3 . Đặc tả yêu cầu hệ thống...................................................................15
4.1.4 . Biểu đồ.............................................................................................16
4.1.5 . Mơ tả chức năng...............................................................................17
4.1.6 . Phân tích u cầu (Mơ hình xử lý DFD)..........................................18
Chương 5 THIẾT KẾ ỨNG DỤNG.................................................................21
5.1 . Welcome Page..........................................................................................21
5.2 . Login Pages..............................................................................................22
5.3 . Sign Up Pages..........................................................................................23
5.4 . Lưu thông tin lên Firebase........................................................................23
5.5 . Home Pages, Menu..................................................................................24
5.6 . Lộ trình đi................................................................................................25
5.7 . Tính cước đường đi..................................................................................25
Chương 6 KẾT LUẬN.....................................................................................26
6.1 . Kết quả đạt được của đề tài......................................................................26
6.2 . Hạn chế của đề tài....................................................................................26
6.3 . Hướng phát triển của đề tài......................................................................26
DANH MỤC HÌNH
Hình 1. Mơ hình cấu tạo nên một project Flutter...................................................8
Hình 2. Biểu đồ ngữ cảnh....................................................................................16
Hình 3. Biểu đồ phân rã chức năng......................................................................17
Hình 4. Sơ đồ luồng mức đỉnh.............................................................................18
Hình 5. Quản lý khách hàng................................................................................19
Hình 6. Quản lý tài xế..........................................................................................19
Hình 7. Quản lý chuyến đi...................................................................................20
Hình 8. Quản lý thanh tốn..................................................................................20
Hình 9. Welcome Page.........................................................................................21
Hình 10. Login Page............................................................................................22
Hình 11. Sign Up Page.........................................................................................23
Hình 12. Lưu dữ liệu Firebase.............................................................................23
Hình 13. Home Page Hình 14. Menu...............................................................24
Hình 15. Lộ trình.................................................................................................25
Hình 16. Phí cước................................................................................................25
Chương 1
PHÁT BIỂU BÀI TOÁN
1.1. Giới thiệu về đề tài xây dựng ứng dụng gọi xe.
Trong cuộc sống hiện nay việc sử dụng những ứng dụng điện thoại di động
đang ngày càng trở nên phổ biến, từ những ứng dụng trò chơi đến những ứng
dụng phục vụ cho nhu cầu cuộc sống hàng ngày như mua sắm, đọc báo, xem
phim… và em muốn giới thiệu một ứng dụng phục vụ cho nhu cầu đi lại của còn
người. Giúp nhu cầu cuộc sống của con người được nâng cao.
Ứng dụng này giúp cho người dùng có thể tìm xe, gọi xe, cũng như biết
được chi phí khi đi là bao nhiêu. Là ứng dụng có thể tính tiền bằng qng đường
đi đượcthơng qua Google maps và nhiều tiện ích khác. Mặc dù đã cố gắng nhưng
do hạnchế về mặt thời gian và trình độ nên ứng dụng cịn nhiều sai sót và chưa
hồn chỉnh, mong thầy cơ thơng cảm và góp ý cho em.
1.1.1. Quy trình nghiệp vụ.
Hệ thống gọi xe và đi xe taxi theo kiểu truyền thống là khi khách hàng có
nhu cầu đi lại bằng taxi. Thì phải gọi điện đến số tổng đài của một hãng xe taxi
nào mà khách hàng biết. Khi khách hàng gọi đến tổng đài thì tổng đài viên sẽ tiếp
nhận yêu cầu của khách hàng và tổng đài viên sẽ thông báo đến tất cả các xe của
hãng thơng tin có khách hàng tại địa chỉ của khách hàng.
Khi đó, lái xe nào chấp nhận thì sẽ xácnhận lại với tổng đài viên, tổng đài
viên chấp nhận thì lái xe sẽ đến địa chỉ được cung cấp để đón khách. Lái xe đến
đón khách và đi đến vị trí mà khách u cầu. Số tiền được tính bằng đồng hồ trên
xe theo số km thực tế đi được nhân với giá của từng quãng đường cộng với giá
mở cửa.
1.1.2. Những khó khăn, thuận lợi.
Những khó khăn:
o Quy trình gọi xe theo hệ thống cũ gây khó khăn cho việc gọi xe và đi lại.
Khi khách hàng gọi điện lên tổng đài để đặt xe thì sẽ làm cho khách
hàng mất thêm tiền điện thoại, đồng thời cũng sẽ tốn thời gian cho
cả khách hàng và lái xe sẽ được chọn khi phải thông qua tổng đài
để đặt xe.
Khách hàng khơng có nhiều loại xe và hạng xe để chọn.
Khách hàng không thể so sánh giá của các hạng xe với nhau để có
thể chọn được xe có giá phù hợp với nhu cầu của mình.
1
Khách hàng không thể biết được số tiền mà mình có thể phải trả
cho qng đường mà mình đi cũng như thời gian đi và số km.
Hành khách sẽ khơng thể thấy được là có lái xe nào đang đến chỗ
mình khơng.
Lái xe khơng thể thấy được thơng tin hành khách cũng như khơng
biết được vị trí điểm đón và điểm đến của khách hàng cũng như
thơng tin liên hệ với hành khách, mà phải thông qua tổng đài.
Lái xe, hành khách cũng không thể thấy được cung đường đi mà
mình sẽ đi.
Quy trình gọi xe theo hệ thống gọi xe trên ứng dụng được xây dựng
trên nền tảngandroid sẽ có những khó khăn như: Khó khăn cho việc
tính tốn thời gian, qng đường, vị trí hiện tại của hành khách và
lái xe thơng qua Google.
Những thuận lợi:
o Đáp ứng nhu cầu của khách hàng một cách nhanh nhất có thể.
o Tiếp kiệm chi phí, thời gian cho khách hàng.
o Giúp lái xe thuận tiện hơn khi đón khách, và có nhiều cơ hội có
khách hàng hơn.
o Có nhiều ưu đãi, khuyến mãi hơn cho cả khách hàng và lái xe.
1.1.3. Bài toán quản lý hệ thống gọi xe
Hệ thống gọi xe trên nền tảng android là khi khách hàng có nhu cầu đi lại.
Khách hàng chỉ cần mở ứng dụng lên chọn điểm đón, điểm đến và nhấn nút yêu
cầu xe, là có thể có xe để đi. Đồng thời khách hàng cịn có thể xem trước giá
cước theo ước tính của từng hạng xe.
Khách hàng có thể chọn với nhiều hạng xe khác nhau. Mỗi loại lại gồm
nhiều loại xe để chọn. Khách hàng có thể xem trực tiếp thơng tin lái xe, thơng tin
về cước của hạng xe mà mình chọn và cịn có thể thấy những xe nào đang ở gần
mình để có thể chọn trực tiếp hạng xe và lái xe mà mình thích, nếu xe đó đang
bận thì hệ thống sẽ tự động gọi một xe khác.
Đồng thời khách hàng cịn có thể xem được cước ước tính, thời gian ước
tính cũng như quãng đường ngắn nhất theo google map. Lái xe cũng có thể thấy
được thơng tin của khách hàng khi khách hàng yêu cầu xe và lái xe có thể đến
điểm đón mà khách hàng đã chọn để đón khách. Sau khi đón được khách và đi
đến địa chỉ mà khách hàng chọn thì lái xe sẽ bấm vào nút hoàn tất chuyến đi để
kết thúc chuyến. Khi đó thì một màn hình thanh tốn sẽ được hiển thị lên cho lái
2
xe. Màn hình thanh tốn sẽ bao gồm thơng tin về số tiền tính theo số km đo được
bằng google map, và các phí khác nếu có như phí cầu đường.
Sau đó lái xe sẽ u cầu thanh tốn và biên lai thanh toán sẽ được hiển thị
lên cho khách hàng, khách hàng xem thơng tin và thanh tốn bằng tiền mặt cho
lái xe. Bài toán quản lý của hệ thống gọi xe sẽ là phải làm sao khắc phục được
những khó khăn của q trình gọi xe theo hệ thống cũ. Như hệ thống sẽ phải giải
quyết được bài tốn làm sao để khơng gây tốn thời gia cho cả khách hàng và lái
xe. Giảm thiểu chi phí cho khách hàng, cho phép khách hàng có nhiều lựa chọn
trong việc đi lại như có nhiều hạng xe và loại xe. Cung cấp thông tin của những
lái xe và hành khách yêu cầu xe để đảm bảo an toàn, và sự an tâm của hành
khách. Cung cấp thông tin vê bảng giá của từng hạng xe, cước ước tính trong
quãng đường mà hành khách chọn đối với từng hạng xe. Làm sao để hiển thị
được vị trí hành khách, lái xe,thời gian, số km một cách trực quan.
1.2. Những công nghệ áp dụng
Để lập trình được ứng dụng trên nền tảng android ta cần sử dụng những công
nghệ phần mềm sau:
Dart: một ngơn ngữ lập trình hướng đối tượng do Google phát
triển(OOP).
Flutter: một UI framework của Google tạo ra các giao diện chất lượng
cao
Android studio: là môi trường phát triển tích hợp (IDE) chính thức
dành chophát triển nền tảng Android được cung cấp miễn phí bởi
google.
Firebase.
3
Chương 2
TỔNG QUAN
2.1. Giới thiệu về đề tài:
Tại sao chọn Flutter mà không phải là ngôn ngữ khác?
Nếu bạn đang tìm kiếm các phương pháp thay thế để phát triển ứng
dụngAndroid, bạn nên cân nhắc thử Flutter của Google, một framework
dựatrên ngơn ngữ lập trình Dart.
Các ứng dụng được xây dựng với Flutter hầu như không thể phân biệt
vớinhững ứng dụng được xây dựng bằng cách sử dụng Android SDK, cả
vềgiao diện và hiệu suất. Hơn nữa, với những tinh chỉnh nhỏ, chúng có
thểchạy trên thiết bị iOS.
Phát triển ứng dụng thống nhất: Flutter có các công cụ và thư viện đểgiúp
bạn dễ dàng đưa ý tưởng của mình vào cuộc sống trên iOS vàAndroid.
Nếu bạn chưa có kinh nghiệm phát triển trên thiết bị di động, thìFlutter là
một cách dễ dàng và nhanh chóng để xây dựng các ứng dụng diđộng tuyệt
đẹp. Nếu bạn là một nhà phát triển iOS hoặc Android có kinhnghiệm, bạn
có thể sử dụng Flutter cho các View của bạn và tận dụngnhiều code Java /
Kotlin / ObjC / Swift hiện có của bạn.
Framework hiện đại và reactive: Dễ dàng tạo giao diện người dùng củabạn
với framework hiện đại, reactive của Flutter và tập hợp các platform,layout
và widget phong phú. Giải quyết các thách thức giao diện ngườidùng khó
khăn của bạn với các API mạnh mẽ và linh hoạt cho 2D,animation,
gesture, hiệu ứng và hơn thế nữa.
UI đẹp và biểu cảm: Thỏa mãn người dùng của bạn với các widget built-in
đẹp mắt của Flutter theo Material Design và Cupertino (iOS-flavor),các
API chuyển động phong phú, scroll tự nhiên mượt mà và tự nhận
thứcđược nền tảng.
Chạy ở 60 fps, giao diện.
Người dùng được tạo ra với Flutter thực thi tốt hơn nhiều so với nhữngứng
dụng được tạo ra với các framework phát triển đa nền tảng khácchẳng hạn
như React Native và Ionic. Một số lí do khiến bạn có thể hứngthú với
Flutter:
o Flutter sử dụng Dart, một ngôn ngữ nhanh, hướng đối tượng vớinhiều
tính năng hữu ích như mixin, generic, isolate, và static type.
o Flutter có các thành phần UI của riêng nó, cùng với một cơ chế đểkết
xuất chúng trên nền tảng Android và iOS. Hầu hết các thànhphần giao
4
diện người dùng, đều sẵn dùng, phù hợp với các nguyêntắc của
Material Design.
o Các ứng dụng Flutter có thể được phát triển bằng cách4 sử dụngIntelliJ
IDEA, một IDE rất giống với Android Studio.
Hiện nay có rất nhiều ngơn ngữ hổ trợ đa nền tảng một cái tên lớn phải
nhắc đến là React Native. Các công ty lớn như UberEats, Discord
và Facebook đã chuyển sang React Native – như một phần tất yếu của sự dịch
chuyển công nghệ. Nhưng Google cũng khơng chịu thua. Họ đã nhận thấy độ phủ
sóng của React Native. Sau 2 năm nghe ngóng, Google cho ra mắt phiên bản
alpha của Flutter.
Hỗ trợ hot reload:
Thông thường với lập trình Android bằng Android Studio. Mỗi lần chúng
tathay đổi một dịng code thì đều phải build và chạy lại ứng dụng.Hot reload sẽ
giúp chúng ta không phải build lại ứng dụng và chỉ reload lạimàn hình đã thay
đổi code mà thôi. Điều này sẽ tiết kiệm rất nhiều thời giancho developer.
Code structure:
Ngược với React Native, Flutter không tách biệt data, style, và
templates.Mình biết bạn có thể cảm thấy kì lạ nếu như bạn đã quen với React
native.Tuy nhiên, cách tiếp cận này cũng thuận tiện và được khá nhiều người
chấp thuận. Flutter không cần thêm ngôn ngữ tạo giao diện như JSX hoặc
XMLhay các công cụ đặc biệt để tạo layout.Khi sử dụng Flutter, bạn có thể tiết
kiệm thời gian khi không cần phảichuyển từ chế độ thiết kế sang code và ngược
lại. Flutter cho phép bạn làmmọi thứ trong cùng một màn hình. Ngồi ra, tất cả
các cơng cụ cần thiết đềucó thể truy cập từ cùng một vị trí.
Cài đặt mơi trường phát triển:
Flutter được đơn giản hóa q trình cài đặt. Framework này cũng cung
cấpmột cơng cụ hữu ích để kiểm tra lỗi hệ thống được gọi là ” Flutter doctor”.
Hiệu suất sử dụng:
Flutter là kiến trúc cho phép chúng ta xây dựng các ứng dụng native,
cóhiệu suất nhanh. Bởi vì Flutter khơng cần cầu nối, nó có thể hoạt độngnhanh
hơn nhiều. Do đó, Flutter có thể chạy animation với 60 khung hình/giây.
2.2. Mục đích nghiên cứu:
Cũng cố và nắm chắc kiến thức về lập trình di động
Tạo ra một phần mềm ứng dụng vào thực tế.
Phương pháp để xây dựng một ứng dụng
Biết được cách để tiếp cận một ngôn ngữ mới
5
Nắm được những kiến thức cơ bản về Android Studio
2.3. Phương pháp nghiên cứu:
Thu thập tham khảo các tài liệu trên các trang web
Tham khảo ý kiến của giảng viên hướng dẫn để hoàn thiện phần mềm
Xây dựng một phần mềm với công cụ hỗ trợ Flutter và ngôn ngữ Dart
6
Chương 3
CƠ SỞ LÝ THUYẾT
3.1 Flutter.
3.1.1. Giới thiệu về Flutter:
Flutter là một Framework viết trên nền ngôn ngữ Dart. Flutter được sinh ra
như một Cross-platform framework nhưng khác với những Cross-platform hiện
tại, Flutter viết mã và build ra các đoạn mã thực thi tương ứng trên cácthiết bị
khác nhau thay vì build ra thành các đoạn mã được tối ưu và chạy trên những môi
trường trung gian.
Flutter được viết chia làm hai tầng. Tầng ở trên sử dụng ngôn ngữ cung cấp
các đoạn mã xây dựng lên một ứng dụng Flutter. Các đoạn mã này cung cấp
phương tiện để có thể thay đổi và chỉnh sửa chúng. Từ đó giúp ứng dụng của lập
trình viên có thể được tùy chỉnh theo mong muốn. Tầng Application này giúp lập
trình viên thay đổi mã nguồn ứng dụng ở thời điểm compile time. Tầng thứ hai
của Flutter nằm ở sâu bên dưới và được viết bằng C++. Tầng Shell này chứa các
công tụ trợ giúp ứng dụng Flutter trong quá trình chạy. Nổibật cần lưu ý ở tầng
này là máy ảo Dart VM. Khái niệm máy ảo là khái niệm về một ứng dụng chạy
song song với mã nguồn chính như một phần của ứng dụng.
Flutter là SDK dành cho thiết bị di động của Google để tạo ra các giao
diện native chất lượng cao trên iOS và Android trong thời gian ngắn.
Flutter làm việc với source code có sẵn, được sử dụng bởi các nhà phát
triển và các tổ chức trên khắp thế giới, đồng thời nó open-source và miễn
phí.
Flutter có các cơng cụ và thư viện để giúp bạn dễ dàng đưa ý tưởng của
mình vào cuộc sống trên iOS và Android. Nếu bạn chưa có kinh nghiệm
phát triển trên thiết bị di động, thì Flutter là một cách dễ dàng và nhanh
chóng để xây dựng các ứng dụng di động tuyệt đẹp. Nếu bạn là một nhà
phát triển iOS hoặc Android có kinh nghiệm, bạn có thể sử dụng Flutter
cho các View của bạn và tận dụng nhiều code Java / Kotlin / ObjC / Swift
hiện có của bạn.
Flutter sử dụng Dart, một ngôn ngữ nhanh, hướng đối tượng với nhiều tính
năng hữu ích như mixin, generic, isolate, và static type.
Flutter có các thành phần UI của riêng nó, cùng với một cơ chế để kết xuất
chúng trên nền tảng Android và iOS. Hầu hết các thành phần giao diện
người dùng đều sẵn dùng, phù hợp với các nguyên tắc của Material
Design.
7
3.1.2. Mơ hình cấu tạo nên một project Flutter.
Hình 1. Mơ hình cấu tạo nên một project Flutter
Phần lớn nhất chính là: My App
Bên trong Material App sẽ có các thuộc tính: title, theme, và home . Trong
đó,
tên
title
có
ý
nghĩa
tương
đương
với
Android@string/app_name để được đặt trong AndroidManifest với thuộc
tínhapplication:android: name, hay với iOS là Product Name, hay chí ít là
Identity#Display name. Tên theme này có vai trị tương tự như phần theme
trong values / styles của Android. Cuối cùng là home. Vai trò của tên này
tương ứng với việc bạn định nghĩa Activity.
Scaffold: đóng vai trị như phần nền để bố trí các thành phần khác theo
phong các Material Design hay Material Theming. Nếu bạn đã quen với
việc viết ứng dụng Android theo phong cách mặc định là Google cung
cấp
thông
qua
theme
Theme.AppCompat hay
android:Theme.Material thì bạn khơng cịn lạ gì với Scaffold này. Nó
8
tương tự như vậy và giống như là sự tổng hợp của DrawerLayout và
CoordinatorLayout vậy.
AppBar: Nó tương tự như Toolbar hay ActionBar trong Android Sdk và
Support Lib. Tuy nhiên, nó khơng đơn giản như Toolbar hay
ActionBar, vì thực sự bạn phải chỉ định Widget con của nó bằng tay, thay
vì dùng hàng loạt methods để thực hiện các thao tác đã định sẵn với các
Widgets
mặc
định
trong
Android
như
setText
hay
setNavigationIcon.
Column và Row: Đây sẽ là những widget quen thuộc đối với các bạn
chuyên code Android, vì chúng tương đồng với LinearLayout. Trong khi
Row tương ứng với LinearLayout với orientation là horizontal, tức chiều
ngang, thì Column resemble vertical LinearLayout, tức chiều dọc. Cịn đối
với các bạn chưa thao tác với Android Sdk, thì chúng sẽ sắp xếp tuần tự
các widget con theo một hướng ngang từ start sang end đối với
Row, hay từ top xuống bottom với Column
Center: Đây sẽ là một Widget có thể gây cho bạn sự lầm lẫn khá tai hại bởi
hành vi của nó có khác khi nó đi một mình hay đi chung với ai đó. Nếu nó
đi một mình, và parent của nó khơng đi kèm với Widget ngang hàng (với
tên parent đó) nào khác và bản thân của nó cũng khơng “nắm tay” ai, thì
kích thước của nó sẽ tăng lên chiếm trọn khơng gian. Cịn nếu nó phải đi
kèm với ai đó, thì nó sẽ điều chỉnh kích thước chỉ vừa đủ bọc con/child
của nó mà thơi.
3.1.3. Ưu điểm của Flutter.
Fast Development: Tính
năng
Hot
Reload
hoạt
động
trong
milliseconds để hiện thị giao diện tới bạn. Sử dụng tập hợp các widget có
thể customizable để xây dựng giao diện trong vài phút. Ngồi ra Hot
Reload cịn giúp bạn thêm các tính năng, fix bug tiết kiệm thời gian hơn
mà khơng cần phải thông qua máy ảo, máy android hoặc iOS.
Expressive and Flexible UI: Có rất nhiều các thành phần để xây dựng giao
diện của Flutter vô cùng đẹp mắt theo phong cách MaterialDesign và
Cupertino, hỗ trợ nhiều các APIs chuyển động, smoothscrolling...
Native Performance: Các widget của fluter kết hợp các sự khác biệt của
các nền tảng ví dụ như scrolling, navigation, icons, font để cung cấp một
hiệu năng tốt nhất tới iOS và Android.
9
3.1.4. Các thành phần quan trọng trong Flutter.
WidgetWidget
Chịu trách nhiệm hình thành cấu trúc của Diagnosticable Tree
(Cây chuẩn đốn là một cấu trúc dữ liệu dạng cây hỗ trợ việc định nghĩa
cấu trúc giao diện được vẽ lên trong ứng dụng viết bằng Flutter) trong khi
class element chịu trách nhiệm quản lý trạng thái của từng widget trên cái
cây đó. Tư tưởng cơ bản của Flutter tương tự như mộtWeb Application.
Tất cả trong một.
Flutter căng ra một mảnh vải là canvas và vẽ tất cả mọi thứ lên đó. Khi
trạng thái của dữ liệu thay đổi ví dụ như người dùng chuyển màn hình hay
thay đổi dữ liệu trên màn hình được phản ánh thơng qua việc xóa đi các
widget cũ và vẽ lên các widget mới. Chính vì vậy thay vì phải biết đến các
StoryBoard (trong iOS) hay các Activity (trong Android), Flutter đưa tất cả
các khái niệm liên quan đến giao diện về một khái niệm duy nhất gọi là
widget.
Việc quản lý trạng thái của các widget cũng được đưa về cho lập trình viên
thực hiện. Điểm khác biệt này cũng đặc biệt hơn khi Dart là ngôn ngữ
Component Based. Trong Flutter, khi muốn điều chỉnh trạng thái về kích
thước hayvị trí của một widget đó, ta khơng thực hiện việc đó trong widget
hiện tại mà được khuyến khích bọc widget đó trong một widget nào
đó chỉ chuyên làm việc này. Điều này khiến cho tính chất "Trong Flutter
thì mọi thứ đều là widget " lại càng chuẩn hơn bao giờ hết. Màn hình là
widget, thành phần giao diện cũng là widget, thậm chí cả thơng tin về
layout cũng là widget...
StatefulWidget
Là widget mà trạng thái của chúng có thể thay đổi. Để tạo state thì
statefulwidget phải gọi method createState(); Khi
tạo
mới
một
StatefulWidget, ta quan tâm đến hai class là StatefulWidget và
State của Widget đó. StatefulWidget là phần khơng thay đổi trong Widget
Tree, thay vào đó, State là phần được thay đổi. Mỗi khi Widget bị làm
bẩn, State của Widget đó sẽ được khởi tạo lại thơng qua việc gọi đến
phương thức StatefulWidget. Thuộc tính này chính là instance của
StatefulWidget đã tạo ra State đó. Chính nhờ vậy, từ trong State hồn tồn
có thể lấy được những giá trị được truyền vào bên trong StatefulWidget
thay vì phải truyền vào thông qua hàm khởi tạo.
StatelessWidget
10
Là các widget không chứa State. Tất cả các giá trị của StatelessWidget đều
là final → không thể thay đổi trong thời gian chạy, do đó
StatelessWidget chỉ hiển thị những gì được truyền vào trong contructor.
Ngược lại, để thay đổi trạng thái của widget ta dùng statefulwidget
3.2. Dart.
3.2.1. Giới thiệu ngơn ngữ Dart.
Dart là ngơn ngữ lập trình dạng hướng đối tượng. Cũng là một ngôn ngữ
viết ở một lần dùng ở nhiều nơi nhưng khác với Java, Dart thay vì tạo ra những
mơi trường trung gian giữa code thực thi và mơi trường thiết bị thì Dart sử
dụngnhững trình biên dịch khác nhau để biên dịch ra mã máy tương ứng. Hiện tại
Dart đang hỗ trợ để tạo ra những ứng dụng trên iOS, Android, Fuchsia và Web.
Riêng với Web Application, Dart biên dịch bản thân thành
codeJavascript (ở trường hợp này, Dart được coi như là một synxtax sugar
choJavascript).
Dart đồng thời cũng là một ngôn ngữ hỗ trợ asynchrony. Tức nghĩa
là trong Dart chỉ có một dịng chảy tuần tự chảy từ trên xuống dưới. Code được
đưa vào hàng đợi và hồn tồn có thứ tự khi được thực thi.
Dart là ngơn ngữ lập trình mới, được phát triển bởi Google, hiện đã được
chấp thuận bởi tổ chức Ecma.
Dart được sử dụng để xây dựng các loại ứng dụng: web, server, diđộng
(IOS và Android với công cụ Flutter).
Dart là ngơn ngữ hỗ trợ lập trình hướng đối tượng, cú pháp kiểu C, mã
code Dart có thể biên dịch thành JavaSript để chạy trên trình duyệt. Nó hỗ
trợ những khái niệm lập trình hiện đại như giao diện lớp, lớp trừu tượng ...
Từ ngơn ngữ lập trình Dart, Google giới thiệu SDK Flutter để sử dụng
ngôn ngữ Dart phát triển ứng dụng di động chạy đa nền tảng (Một lần viết
code build ra ứng dụng cho ISO và Android).
Tại sao lại lựa chọn ngôn ngữ Dart?
Các nhà phát triển tại Google và các nơi khác sử dụng Dart để tạo các ứng
dụng chất lượng cao, quan trọng cho iOS, Android và web. Với các tính năng
nhắm đến sự phát triển phía khách hàng, Dart rất phù hợp cho cả ứng dụng di
động và web. Dart giúp bạn tạo ra những trải nghiệm đẹp, chất lượng cao trên tất
cả các màn hình, với:
Một ngơn ngữ được tối ưu hóa cho client
Framework mạnh mẽ
11
Công cụ linh hoạt
3.2.2. Đặc điểm của ngôn ngữ Dart:
Dart đi kèm với trình soạn thảo nhẹ, Bạn có thể dung Dart Editor để viết,
chạy và gỡ lỗi các ứng dụng Dart, Dart editor có thể giúp bạnp hát hiện
các lỗi tiềm năng.
Giúp bạn viết code tốt và nhanh hơn.
Dart được thiết kế để biên dịch sang JavaScript.
3.2.3. Những ưu điểm của Dart:
Năng suất: Cú pháp Dart rõ ràng và súc tích, cơng cụ của nó đơn giản
nhưng mạnh mẽ. Type-safe giúp bạn xác định sớm các lỗi tinh tế. Dart có
các thư viện cốt lõi và một hệ sinh thái gồm hàng ngàn package.
Nhanh: Dart cung cấp tối ưu hóa việc biên dịch trước thời hạn để có được
dự đốn hiệu suất cao và khởi động nhanh trên các thiết bị di động và web.
Di động: Dart biên dịch thành mã ARM và x86, để các ứng dụng di động
của Dart có thể chạy tự nhiên trên iOS, Android và hơn thế nữa. Đối với
các ứng dụng web, chuyển mã từ Dart sang JavaScript.
Dễ gần: Dart quen thuộc với nhiều nhà phát triển hiện có, nhờ vào cú pháp
và định hướng đối tượng khơng gây ngạc nhiên của nó. Nếu bạn đã biết C
++, C # hoặc Java, bạn có thể làm việc hiệu quả với Dart chỉ sau vài ngày.
Reactive: Dart rất phù hợp với lập trình Reactive, với sự hỗ trợ để quản lý
các đối tượng tồn tại trong thời gian ngắn, chẳng hạn như các widget UI,
thông qua phân bổ đối tượng nhanh và GC. Dart hỗ trợ lập trình khơng
đồng bộ thơng qua các tính năng ngôn ngữ và API sử dụng các đối tượng
Future và Stream.
3.2.4. Cài đặt Dart.
Dart cung cấp cho bạn một bộ tool trên trình duyệt web được gọi là
DartPad để bạn có thể dễ dàng viết và test Dart. Bạn có thể truy cập vào DartPad
tại đây Mặc dù DartPad là một cách tuyệt vời để tìm hiểu cách viết một ứng dụng
đơn giản, nhưng khi bạn đã sẵn sàng để phát triển các ứng dụng thực sự, bạn cần
có SDK. Vì mục đích của chúng ta là sử dụng Dart cho Flutter nên ta chỉ cần cài
đặt Flutter là chúng ta đã sẵn sàng.
12
Chương 4
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
4.1. Khảo sát và phân tích bài tốn.
4.1.1. Khảo sát và phân tích hiện trạng.
Trong thời đại công nghệ thông tin như hiện nay, việc sử dụng những ứng
dụng điện thoại vào hỗ trợ công việc của con người ngày càng phát triển. Và qua
cơng nghệ lập trình ứng dụng trên nền tảng android có thể tạo ra ứng dụng kết nối
giữa hành khách và lái xe, giúp cho việc đi lại của mọi người trở lên thuận tiện
hơn
Nội dung khảo sát và đánh giá hiện trạng:
Tìm hiểu nhu cầu sử dụng ứng dụng, nghiên cứu những ứng dụng của
những cơng ty có ứng dụng tương tự như Grab, Uber:
o Nhu cầu sử dụng ứng dụng để phục vụ cho việc đi lại trên các
phương tiện như taxi, xe ôm, xe cá nhân hiện nay đang ngày càng
cao. Không những trong nước mà cả thế giới như ứng dụng gọi xe
của Uber và Grab đang có hàng triệu người dùng.
o Nghiên cứu ứng dụng Grab, Uber: Đây là hai ứng dụng nổi tiếng và
đi đầu trong lĩnh vực phục vụ gọi xe. ứng dụng Grab và Uber đã
đáp ứng được gần hết những nhu cầu của việc gọi xe và đi lại như:
Cho phép khách hàng đặt xe một cách dễ dàng, khi khách hàng gọi
xe thì có thể chọn các hạng xe mà ứng dụng cung cấp, đồng thời
biết được bảng giá của từng loại xe, hiển thị thông tin điểm đến,
điếm đón của khách hàng, hiển thị vị trí của khách hàng cũng như
những lái xe xung quanh vị trí của khách hàng. Cung cấp thơng tin
ước tính phí cho khách hàng, thanh tốn một cách trực quan và
nhanh chóng,...
o Nhưng cũng còn nhiều điểm còn hạn chế như: Chưa cung cấp thông
tin lái xe, hành khách, cung cấp thông tin ước tính phí thì chỉ hiển
thị mỗi giá ước tính mà chưa có thơng tin về số km và thời gian di
chuyển. ứng dụng Uber thì chi cho thanh tốn qua thẻ, mà khơng
cho thanh tốn chực tiếp bằng tiền mặt, như vậy sẽ hạn chế số
lượng người dùng. Khi khách hàng yêu cầu xe thì ứng dụng sẽ tự
động chọn xe gần nhất với vị trí điểm đón của khách hàng, như vậy
khách hàng sẽ không thể chọn những lái xe mà khách hàng muốn.
13
Nghiên cứu nghiệp vụ, chức năng mà ứng dụng cần cung cấp cho người
dùng trong quá trình khảo sát người dùng. Các chức trách, nhiệm vụ của
từng đối tượng tương tác với ứng dụng, và quyền hạn.
o Những chức năng, nghiệp vụ mà ứng dụng cần cung cấp như:
Cho phép khách hàng đặt xe một cách dễ dàng, khi khách hàng gọi
xe thì có thể chọn các hạng xe mà ứng dụng cung cấp, đồng thời
biết được bảng giá của từngloại xe, hiển thị thơng tin điểm đến,
điếm đón của khách hàng, hiển thị vị trí của khách hàng cũng như
những lái xe xung quanh vị trí của khách hàng.
Cung cấp thơng tin ước tính phí cho khách hàng bao gồm phí ước
tính, số km ước tính, thời gian ước tính, thanh tốn một cách trực
quan và nhanh chóng. Hiển thị thông tin lái xe, khách hàng như: họ
và tên, ảnh của lái xe và khách hàng, thông tin về xe của lái xe,
đánh giá lái xe của những khách hàng khác.
Cho phép khách hàng chọn xe được hiển thị xung quanh vị trí của
khách hàng, đồng thời cũng cho phép tự động gọi xe gần với vị trí
của khách hàng nhất. Chức năng xem thông tin những chuyến đi.
Chức năng về những chuyến đi rẻ mà lái xe có thể tạo ra.
o Các chức trách, nhiệm vụ của từng đối tượng tương tác. Trong hệ
thống bao gồm những đối tượng tương tác như là khách hàng, lái
xe, quản trị.
Quản trị viên: Sẽ có chức năng quản lý hồ sơ, thống kê, quản lý lái
xe, hành khách, quản lý chương trình khuyến mại, quản lý chuyến
đi, quản lý chương trình khuyến mại.
Lái xe: Nhiệm vụ của lái xe là cung cấp những thông tin cá nhân,
thông tin về phương tiện cho hệ thống. Lái xe có nhiệm vụ chấp
nhận chuyến khi có u cầu, thanh tốn khi hồn tất chuyến đi,
đăng ký, xem thông tin chuyến đi, đưa hành khách vào hành khách
u thích, phản hồi…
Hành khách: Có chức năng gọi xe, quản lý thông tin hồ sơ, quản lý
thông tin chuyến đi, xem bảng cước cũng như xem thông tin hồ sơ
lái xe, các hạng xe, thông tin về chuyến xe rẻ của lái xe, đánh giá lái
xe, phản hồi, trợ giúp.
Thu thập và nghiên cứu phương thức xử lý các thông tin hồ sơ của người
dùng. Thông tin của người dùng sẽ do người dùng cung cấp cho hệ thống
khi người dùng đăng ký. Những thông tin này sẽ được lưu trữ trong cơ sở
14
dữ liệu để có thể cung cấp thơng tin cho chính người dùng ứng dụng với
nhau và với quản trị viên .
Thu thập các địi hỏi về thơng tin, các ý kiến phản hồi về hiện trạng, các
dự đoán, nguyện vọng và kế hoạch tương lai của ứng dụng. Các thơng tin
địi hỏi cần phải có là những thơng tin về khách hàng, về lái xe, nhưng
thông tin về chuyến đi. Các ý kiến phản hồi từ về giá cước hay dịch vụ từ
khách hàng và lái xe.
Đánh giá phân tích hiện trạng và đề xuất hướng giải quyết.
o Hiện trạng sử dụng ứng dụng gọi xe hiện nay ngày càng phát triển,
đi theo đó là nhu cầu sử dụng ứng dụng ngày càng cao. Ứng dụng
đòi hỏi phải đáp ứng được nhu cầu thuận tiện và dễ sử dụng cho
người dùng. Đồng thời hệ thống cũng phục vụ được những nhu cầu
cần thiết của người dùng, và với nhiều chức năng và khuyến mãi
hấp dẫn để thu hút người dùng.
o Tiếp tục phát triển ứng dụng ngày một hồn thiện và cải tiến hơn.
4.1.2. Phân tích bài tốn.
Người lái xe:
o Là người có phương tiện đi lại là ơ tơ hoặc xe máy có nhu cầu phục
vụ và trở khách. Lái xe sẽ cung cấp thông tin cá nhân cho hệ thống,
đồng thời là người nhận những yêu cầu xe từ khách hàng, chấp
nhận chuyến đi và đón khách tại vị trí của hiện tại của khách. Thực
hiện chuyến đi và kết thúc chuyến, thanh toánvới khách hàng.
o Lái xe có thể đăng ký những chuyến đi rẻ. Nhận chuyến và từ chối
chuyến đi từ khách hàng…
Khách hàng:
o Khách hàng chọn xe, yêu cầu xe, xem thơng tin giá cước, xem vị trí
của lái xe, xem thông tin chuyến đi, xem khuyến mại được hưởng,
hủy chuyến…
o Tìm chuyến đi miễn phí, đăng ký chuyến đi, hủy chuyến đi miễn
phí. Khách hàng thanh tốn trực tiếp bằng tiền mặt.
Quản trị: Quản lý, xem xét những lái xe và hành khách. Quản lý những
chuyến đi, quản lý thông tin về khuyến mãi, thông tin về giá cước, quản lý
việc hỗ trợ, phản hồi đối với hành khách, và lái xe.
4.1.3. Đặc tả yêu cầu hệ thống.
Quy trình điều phối taxi thơng qua ứng dụng điện thoại .
15
Khách hàng định vị trí của mình trên bản đồ, nhấn nút xác định vị trí, kiểm
tra và điều chỉnh dịa chỉ (nếu có) và nhấn nút “Đặt xe”.
Hệ thống căn cứ vào tọa độ của khách hàng, thực hiện xử lý tính tốn để
tìm các xe taxi gần khách hàng trong một bán kính xác định và gửi tới lệnh
yêu cầu taxi xuống ứng dụng trên thiết bị trên xe hoặc di động của tài xế .
Thông tin địa chỉ của khách hàng sẽ gửi dến các taxi nằm trong vùng tìm
gọi. Tài xế sẽ nhấn nút “nhận chuyến” để xác nhận. Sau đó hệ thống sẽ
hiển thị thông tin chi tiết của khách hàng và vị trí khách hàng trên ứng
dụng của tài xế. Đồng thời thông tin tài xế và ước lượng thời gian đến đón
khách cũng được hiển thị trên ứng dụng cho khách hàng .
Sau khi tài xế chấp nhận, tài xế sẽ được cung cấp thêm thông tin về khách
hàng như tên, số điện thoại của khách hàng, tài xế có thể gọi trực tiếp cho
khách hàng đế xác nhận lại yêu cầu và thống nhất lại điểm đón khách,
đồng thời khách hàng cũng nhận được thông tin tài xế bao gồm số xe, tên
tài xế, ước lượng khoảng cách và thời gian đến đón qua tin nhắn .
Khi khách hàng lên xe tài xế nhấn xác nhận trên ứng dụng và khi khách
hàng đến nơi tài xế xác nhận 1 lần nữa để kết thúc hành trình.
4.1.4. Biểu đồ.
4.1.4.1
. Biểu đồ ngữ cảnh.
Hình 2. Biểu đồ ngữ cảnh
4.1.4.2
. Biểu đồ phân rã chức năng.
16
Hình 3. Biểu đồ phân rã chức năng
4.1.5. Mơ tả chức năng.
Kiểm tra thông tin khách hàng:
Khách hàng gọi điện cho tổng đài yêu cầu xe, nhân viên tổng đài tiếp
nhận thông tin, kiểm tra địa chỉ khách thông báo xem có hợp lệ hay khơng.
Lưu thơng tin khách hàng:
Nếu địa chỉ khách thông báo hợp lệ, hệ thống sẽ lưu thông tin như mã
khách hàng, tên khách hàng, sdt, vị trí hiện tại,.. vào danh sách khách
hàng.
Quản lý tài xế
Khi có tài xế đăng kí làm việc, hệ thống kiểm tra thơng tin tài xế xem
có hợp lệ hay không. Nếu hợp lệ, mỗi tài xế sẽ được cung cấp một mã số
và đưa vào danh sách tài xế làm việc cho công ty gồm các thông tin như
mã tài xế, tên tài xế, sdt, biển số xe, giới tính,…
Cập nhật vị trí hiện tại
Tài xế thơng báo vị trí hiện tại của mình, hệ thống tiếp nhận thơng tin
cập nhật vị trí của tài xế vào danh sách tài xế.
Xác lập chuyến đi:
Khách hàng gọi điện thoại đến tổng đài yêu cầu xe. Nhân viên tổng
đài dựa vào địa chỉ khách hàng cung cấp để tạo yêu cầu taxi trên hệ thống.
Hệ thống căn cứ vào tọa độ của khách hàng, thực hiện xử lý tính tốn để
tìm các xe taxi gần khách hàng trong một bán kính xác định và gửi lệnh
yêu cầu đến taxi. Tài xác nhận đồng ý hoặc không đi đón khách, nếu
khơng hệ thống sẽ tìm tài xế khác, nếu có tài xế sẽ được cung cấp thêm
thơng tin về khách hàng như tên, số điện thoại của khách hàng, tài xế có
thể gọi trực tiếp cho khách hàng đế xác nhận lại yêu cầu và thống nhất lại
điểm đón khách, đồng thời khách hàng cũng nhận được thông tin tài xế
bao gồm số xe, tên tài xế, ước lượng khoảng cách và thời gian đến đón qua
tin nhắn.
17
Ghi nhận kết thúc hành trinh:
Khi hành trinh kết thúc tài xế sẽ gửi thông tin cho hệ thống.
Quản lý cước phí:
Hệ thống căn cứ vào vị trí bắt đầu và vị trí khi kết thúc cuộc hành
trinh để tính tốn số kilomet đi được, từ đó tính ra cước phí. Các thơng tin
như mã chuyến đi, mã khách hàng, mã tài xế, số kilomet, thành tiền,… sẽ
đưa vào danh sách chuyến đi.
Tìm kiếm danh sách chuyến đi.
Tìm kiếm thơng tin về các chuyến đi dựa trên danh sách đã lưu.
Ghi nhận thanh toán.
Hệ thống dựa vào mã chuyến đi, tạo ra một phiếu thanh toán gồm các
thông tin mã phiếu, mã chuyến đi, tên tài xế để gửi cho khách. Các phiếu
thanh tốn cịn được lưu vào hệ thống.
4.1.6. Phân tích u cầu (Mơ hình xử lý DFD).
a) Sơ đồ luồng mức đỉnh.
Hình 4. Sơ đồ luồng mức đỉnh
18