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

Ứng dụng quá giang xe cho sinh viên làng đại học – gos

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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

ỨNG DỤNG QUÁ GIANG XE CHO
SINH VIÊN LÀNG ĐẠI HỌC – GoS
Môn: Đồ án 1
Lớp: SE121.M21.PMCL
Giảng viên: Nguyễn Thị Thanh Trúc
Sinh viên: Nguyễn Anh Kiệt – 19520666
Ngơ Văn Phóng– 19520834

Thành phố Hồ Chí Minh, tháng 6 năm 2022


Mục lục
Chương 1: Tổng quan

5

1.1

Mục đích nghiên cứu

5

1.2

Đối tượng nghiên cứu

6


1.3

Phạm vi đề tài

6

1.4

Hướng tiếp cận

7

1.4.1

Khảo sát người dung

7

1.4.1.1

Nghiệm thể

7

1.4.1.2

Phân tích kết quả

7


1.4.1.3

Phân tích các ứng dụng hiện có

1.4.2

Các cải tiến của hệ thống

14

Chương 2: Cơ sở lý thuyết và cơng nghệ
2.1

12
15

Cơ sở lý thuyết

15

2.1.1

Tổng quan về các vai trị người dùng

15

2.1.2

Google maps và cách biểu diễn địa điểm


16

2.1.3

Phương pháp tính phí cho chuyến đi

17

2.1.4

Kết nối và nhắn tin theo thời gian thực

17

2.2

Cơng nghệ

19

2.2.1

Ngơn ngữ lập trình

19

2.2.2

Cơ sở dữ liệu


20

2.2.3

Framework/Thư viện

21

2.2.4

API Provider

26

2.2.5

Kiểm thử

28

2.2.6

Bảo mật

29

2.2.7

Triển khai


30

Chương 3: Phân tích hệ thống

32

3.1

Phân tích kiến trúc hệ thống

32

3.2

Phân tích yêu cầu hệ thống

33

3.2.1

Yêu cầu chức năng

33

3.2.2

Yêu cầu phi chức năng

34


Chương 4: Thiết kế hệ thống
4.1

35

Thiết kế use case

35

4.1.1

Sơ đồ use case

35

4.1.2

Danh sách actor

37

4.1.3

Danh sách use case

38
2


4.1.4


Đặc tả use case

38

4.1.4.1

Đăng ký

38

4.1.4.2

Đăng nhập

39

4.1.4.3

Cập nhật thông tin cơ bản

40

4.1.4.4

Tìm kiếm chuyến đi có sẵn

41

4.1.4.5


Tạo u cầu chuyến đi

42

4.1.4.6

Theo dõi các chuyến đi liên quan đến người dùng

42

4.1.4.7

Xem thông tin chi tiết chuyến đi

43

4.1.4.8

Nhắn tin cho đối tác

44

4.1.4.9

Hiển thị danh sách tin nhắn

45

4.1.4.10 Xoá tin nhắn


45

4.2

Thiết kế sơ đồ lớp

47

4.3

Thiết kế sơ đồ sequence

48

4.4

4.3.1.1

Đăng nhập

48

4.3.1.2

Cập nhật thông tin cá nhân

49

4.3.1.3


Tìm kiếm và kết nối chuyến đi

49

4.3.1.4

Tạo yêu cầu chuyến đi

50

4.3.1.5

Nhắn tin cho đối tác

50

Thiết kế cơ sở dữ liệu

51

4.4.1

Sơ đồ database:

51

4.4.2

Mô tả các bảng


51

4.4.2.1

Bảng User: thông tin người dùng

51

4.4.2.2

Bảng Drive: thông tin chuyến đi

51

4.4.2.3

Bảng DriveHistory: Lịch sử chuyến đi

52

4.4.2.4

Bảng Message: Lưu tin nhắn của người dùng

52

4.4.2.5

Bảng Place: Lưu thông tin các địa điểm


53

4.4.2.6

Bảng ConversationToUser: Quan hệ giữa user và conversation

53

4.4.2.7

Bảng Conversation

53

4.4.2.8

Các Enum:

53

Thiết kế giao diện ứng dụng

54

4.5.1

Đăng nhập/ Đăng ký

54


4.5.2

Trang chủ

56

4.5.3

Tìm chuyến đi

56

4.5.4

Tạo yêu cầu chuyến đi

61

4.5.5

Các chuyến đi có sẵn

62

4.5

3



5

4.5.6

Thông tin cá nhân

63

4.5.7

Thông tin chi tiết lịch sử chuyến đi

64

Kết luận và hướng phát triển
5.1

69

Kết quả đạt được

69

5.1.1

Hạn chế

69

5.1.2


Hướng phát triển

69

Tài liệu tham khảo

70

4


Chương 1: Tổng quan
1.1 Mục đích nghiên cứu
Sự bùng nổ của cách mạng công nghiệp 4.0 đã làm thay đổi mạnh mẽ phương
thức giao thương và định hình lại thị trường trong hầu hết lĩnh vực đời sống đặc biệt là
vận tải. Những hình thức di chuyển truyền thống như taxi, thuê xe… đã được thay thế
bằng các hình thức hiện đại như taxi cơng nghệ. Theo đó, các ứng dụng đặt xe thi nhau
mọc lên, trong đó phải kể đến là Grab, Uber, Gojek, Be... Thế nhưng các hãng công
nghệ lớn này đa phần tập trung phát triển ở các thành phố lớn. Từ kết quả của cuộc khảo
sát do báo VietNamNet thực hiện gần đây, thành phố HCM chiếm tỉ lệ người dùng các
nhất trong khi 62 tỉnh, thành phố cịn lại chỉ 38% thị phần. Điều đó đồng nghĩa là cơng
nghệ này đang cịn khá mới lạ với các khu vực xa thành phố. Trong khi đó, nhu cầu di
chuyển ở các tỉnh thành khác khu vực miền Tây Nam Bộ, Tây Nguyên… hoặc các khu
vực xa thành phố như khu đô thị Đại học Quốc gia cũng không kém cạnh nội ô thành
phố.
Đối với sinh viên học xa nhà, việc trang bị cho mình một phương tiện riêng
không phải dễ dàng. Lý giải cho thực tế này, có nhiều ngun nhân đến từ phía gia đình
và bản thân sinh viên. Cụ thể, phụ huynh không yên tâm khi giao cho con em họ của
mình tự điều khiển xe máy ở các khu vực xa lạ, đặc biệt là những nơi có mật độ lưu

thơng cao như Hà Nội, Thành phố HCM. Thêm vào đó, điều kiện kinh tế của nhiều hộ
gia đình khơng cho phép họ sắm sửa một phương tiện di chuyển riêng cho con em mình.
Bởi lẽ, chi phí dành cho phương tiện đi lại khơng dừng lại cố định ở khoảng phí bỏ ra
mua xe mà cịn phát sinh chi phí xăng và bảo trì, nhất là trong thời buổi giá xăng đang
vơ cùng đắt đỏ. Về phía các bạn sinh viên, nhiều bạn có suy nghĩ có thể đi nhờ xe hoặc
đặt xe nên khơng cần tiêu tốn khoảng phí lớn như thế cho phương tiện di chuyển. Vì
thế, nhu cầu đặt xe, đi nhờ xe của các bạn sinh viên nói riêng và những người có mong
muốn tương tự nói chung tăng lên nhanh chóng.
Xa hơn nữa, đi ghép xe sẽ mang lại rất nhiều lợi ích trong việc bảo vệ môi trường.
Theo báo cáo hiện trạng môi trường gần đây, khoảng 70-90% tổng lượng khí thải đơ thị
tại các thành phố lớn là những nguyên nhân gây ra các bệnh về đường hơ hấp, ung thu,
trong đó lượng khí thải của xe máy chiếm tỷ lệ cao nhất. Vì thế, giảm phương tiện cá
5


nhân đồng nghĩa với việc giảm thiểu lượng khói bụi trong khơng khí, từ đó tránh các
tác động xấu từ khói, bụi và ơ nhiễm của mơi trường lên sức khỏe.
Khu đô thị Đại học quốc gia là một trong những khu vực có đơng sinh viên bậc
nhất Việt Nam và có vị trí địa lý xa trung tâm thành phố. Vì thế việc đặt xe cơng nghệ
ở đây gặp nhiều khó khăn trong việc ghép nối giữa tài xế với người có nhu cầu. Thế
nhưng như phân tích bên trên nhu cầu của khách hàng ở đây lại lớn. Bên cạnh đó, cước
phí chi trả khi sử dụng dịch vụ đặt xe khá cao. Thực tế, có nhiều bạn sẵn sàng cho đi
nhờ mà khơng với mục đích thương mại. Thế nhưng chưa có tổ chức nào làm cầu nối
để gắn kết người có xe với người có nhu cầu đi nhờ. Vì thế ý tốt của các bạn khơng thế
hiện thực hóa được.
Từ thực trạng và lợi ích đã phân tích bên trên nhóm thực hiện mong muốn tạo ra
một ứng dụng đặt xe, đi nhờ xe dành cho đối tượng người dùng ở các khu vực xa thành
phố. Không chỉ dừng lại ở mức thương mại là đặt xe, ứng dụng của nhóm nghiên cứu
cịn cho phép kết nối người dùng có nhu cầu đi nhờ xe với người sẵn lòng cho đi nhờ.
1.2 Đối tượng nghiên cứu

Đề tài hướng đến hỗ trợ kết nối người có nhu cầu đi nhờ xe và người có xe ở các
khu vực xa nội ô thành phố với cả mục đích thương mại và phi thương mại. Đặc biệt,
thuật tốn ghép nối các yêu cầu với độ chính xác cao phục vụ mục đích của người dùng
một cách nhanh chóng.
Về giao diện, tìm hiểu các cơng trình nghiên cứu, phân tích trải nghiệm người
dùng về các ứng dụng đặt xe từ các bài báo khoa học [1], áp dụng vào thiết kế giao diện,
tối ưu trải nghiệm người dùng. Thêm vào đó, nhóm thực hiện tối ưu hóa trải nghiệm
người dùng bằng cách áp dụng công nghệ thời gian thực.
1.3 Phạm vi đề tài
Ở qui mô thử nghiệm, đề tài hướng đến phạm vi người dùng ở Khu đô thị Đại
học Quốc gia thành phố Hồ Chí Minh và thành phố Dĩ An, tỉnh Bình Dương. Xa hơn,
nhóm sẽ phát triển đến các tỉnh thành ở khu vực Nam Bộ và Tây Nguyên, mở rộng toàn
Việt Nam.
Người dùng hiện tại tập trung vào sinh viên và người có nhu cầu di chuyển bằng
dịch vụ đặt xe.
Công nghệ sử dụng trong đề tài … giao diện, FE, BE, server, DB, quản lý source
6


Hệ thống triển khai đa nền tảng (cross platform) bao gồm iOS, Android.
1.4 Hướng tiếp cận
1.4.1 Khảo sát người dung

1.4.1.1 Nghiệm thể
Số lượng: 120
Độ tuổi: tập trung 18-25: chủ yếu là sinh viên (80%)
Nghề nghiệp: sinh viên: 70%, công nhân viên chức: 10%, nghề nghiệp khác:
20%
Thu nhập: chủ yếu dưới 5 triệu: 80%, từ 5-10 triệu: 10%, trên 10 triệu: 10%
Nơi sống: Thủ Đức: 60%, Dĩ An: 30%, nơi khác: 10%

Đặc điểm: độ tuổi trẻ, quen thuộc với công nghệ và có nhu cầu sử dụng ứng dụng
đặt xe cao
1.4.1.2 Phân tích kết quả
Theo thống kê có 63.6% người tham gia có xe, trong số đó có đến 71.4% cho
hay họ đa phần di chuyển một mình, khơng đi cùng ai. Số liệu này cho ta biết số lượng
người có xe riêng tương đối nhiều (quá nửa số lượng khảo sát) và đang trống yên sau.

Hình 1. Khảo sát tình trạng sở hữu xe của sinh viên

7


Hình 2. Khảo sát tình trạng chở nhau của sinh viên

Đối với những bạn có xe, chi phí các bạn dành cho việc sử dụng hàng tháng trung
bình 500 000/tháng bao gồm chi phí bảo trì, phí gửi xe và chi phí nhiên liệu. Thơng qua
khảo sát bằng bảng hỏi phản ánh có 69% người tham gia có ý định cho người khác đi
nhờ xe có thu phí và 34% cho q giang mà khơng địi hỏi bất kì lợi ích nào. Qua phỏng
vấn trực tiếp, tất cả những người tham gia cho hay họ sẵn sàng cho đi nhờ xe nếu tiện
đường.

Hình 3. Khảo sát chi phí trung bình sinh viên phải chi cho việc bảo trì, gửi xe

8


Hình 4. Khảo sát ý định cho người khác đi nhờ xe

Phía người có xe, tỉ lệ người đồng ý cho đi nhờ xe khá cao nhưng thực tế tỉ lệ
người hiện thức hóa ý định đó lại thấp (thơng qua phần trăm người di chuyển trên

phương tiện một mình, trống n sau).
Phía người khơng có xe, đa phần người tham gia di chuyển bằng xe bus hoặc đi
bộ. Tuy nhiên, tỉ lệ người tham gia biết đến và đã từng sử dụng các ứng dụng đặt xe rất
cao, lên đến 100%. Điều này chứng tỏ các bạn đều thân thuộc với cơng nghệ đặt xe nên
rất thích hợp để phát triển ứng dụng đối với phân khúc người dùng này. Họ khơng sử
dụng dịch vụ do đặt xe vì cước phí cao do các ứng dụng hiện tại thu phí dịch vụ trung
gian khiến chi phí tăng cao.

Hình 5. Khảo sát tình trạng sử dụng phương tiện đến trường cho sinh viên

9


Hình 6. Tần suất sử dụng xe công nghệ của sinh viên

Trường hợp nếu chi phí cho mỗi chuyến xe thấp hoặc được miễn phí, có đến
75% người được hỏi cho biết họ sẽ đồng ý quá giang hoặc sẵn sàng chi trả cho mức chi
phí đó.

Hình 7. Khảo sát ý định quá giang xe của sinh viên

Từ đây ta rút ra kết luận, nhu cầu người sử dụng dịch vụ - cả người cho đi nhờ
và người đi nhờ - đều rất cao nhưng chưa có dịch vụ phù hợp khai thác tiềm năng này.
Đối với các dịch vụ hiện tại, có đến 50% người khảo sát cho hay họ lo lắng về
việc xác thực danh tính và tác phong của tài xế bao gồm xuất thân, cách điều khiển xe,
an toàn khi di chuyển trên xe. Ngoài ra, qua phỏng vấn nhiều bạn cho biết tài xế ở các
khu vực lân cận nếu nhận chuyến ở khu đô thị ĐHQG thường xuyên bị lạc và thậm chí
các bạn phải hướng dẫn tài xế cách di chuyển. Thực trạng này phản ánh mong muốn
của người dùng rằng cần có những người tài xế đáng tin cậy và thân thuộc với các cung
đường hơn.

10


Hình 8. Khảo sát các vấn đề mà sinh viên gặp phải khi sử dụng các ứng dụng xe công nghệ

Tỉ lệ đáp ứng nhu cầu đặt xe ngay khi các bạn có nhu cầu gấp như muộn giờ học,
giờ thi chiếm tỉ lệ rất thấp chỉ 14%. Sẽ rất phù hợp nếu các bạn được đi nhờ xe vào các
thời điểm như trên.

Hình 9. Khảo sát tình trạng đúng giờ khi đặt xe công nghệ

Kết luận: Từ khảo sát trên đã khẳng định tiềm năng của mơ hình nhóm thực hiện
đề tài. Cụ thể, phân khúc người dùng nhóm hướng đến là sinh viên, người có nhu cầu
cho đi nhờ với người muốn đi nhờ và chia sẻ chi phí di chuyển. Người dùng thân thuộc
với cơng nghệ và cụ thể là ứng dụng đặt xe nên phù hợp triển khai ứng dụng. Các ứng
dụng hiện tại còn tồn tại các hạn chế (phân tích cụ thể ở phần 1.4.2) mà chúng ta có thể
khai thác.

11


1.4.1.3 Phân tích các ứng dụng hiện có

12


Ứng dụng

Ưu điểm


Nhược điểm

Grab

Chiếm thị phần cao nhất

Ứng dụng tương đối nặng, hiệu

Nhiều người tham gia: nhiều

năng chưa cao thường bị giật,

người dùng

lag…

Phục vụ 24/24

Chi phí cao

Nhiều chức năng, dịch vụ hỗ trợ

Chưa tập trung phân khúc người

Có tích hợp mục gọi, chat giữa tài

dùng xa thành phố

xế và người sử dụng, chương trình Tài xế khơng quen thuộc địa hình,


Be

tích điểm và ưu đãi cho

đường đi

thành viên.

Thơng tin tài xế khơng rõ ràng



Giao diện đơn giản, dễ sử dụng.





Có nhiều dịch vụ.



Có rất nhiều chương trình

Mạng lưới tài xế cịn ít nên đơi
khi việc tìm tài xế chậm hơn.



Hay bị hủy chuyến khi giờ cao


khuyến mãi cho các thành viên.

điểm hoặc trời mưa do ít tài xế



Giá cước đặt xe tương đối rẻ.

nên thường họ khơng thích đi



Giá trên app khá ổn định, ít bị

các cuốc xe xa sợ tắc đường.

biến động và có sự chênh lệch



giờ cao điểm.

Nhiều tài xế hay đi ẩu do muốn
đạt đủ chỉ tiêu.



Một khi đã tăng thì giá cước rất
cao.


Gojek



Giao diện dễ nhìn, dễ sử dụng.



Có nhiều dịch vụ.



Có rất nhiều chương trình ưu



khi việc tìm tài xế chậm hơn.


đãi cho các thành viên.


Vào giờ cao điểm thời gian đợi
xe hơi lâu.

Giá cước đặt xe có thể xem là
rẻ nhất trong các ứng dụng xe.




Mạng lưới tài xế cịn ít nên đơi

Giá trên app khá ổn định, ít bị
biến động và có sự chênh lệch
giờ cao điểm.
13



Cịn một số vị trí chưa được cập
nhật trên bản đồ.


Go-VNU



Giao diện đơn giản, dễ sử dụng



Địa điểm đã được cố định sẵn ở

nhiều do chưa được quảng cáo

cơ sở dữ liệu, nhờ thế mà hệ

nhiều


thống khá nhẹ





Số lượng người dùng chưa

Giao diện cịn thơ sơ, nhiều góc
cạnh



Các địa điểm chỉ thể hiện bằng
văn bản, chưa trực quan với
người dùng

1.4.2 Các cải tiến của hệ thống
-

Giao diện thân thiện với người dung

-

Thuật toán kết nối giữa người người đi nhờ và tài xế chính xác hơn

-

Đăng nhập bằng các tài khoản mạng xã hội Google và Facebook


-

Chức năng nhắn tin thời gian thực giúp việc liên lạc dễ dàng hơn

-

Có thể thương lượng giá cả giữa tài xế và người đi nhờ

-

Tạo yêu cầu chuyến đi, tìm người đi cùng dễ dàng hơn

-

Cập nhật thông tin cá nhân một cách đơn giản

14


Chương 2: Cơ sở lý thuyết và công nghệ
2.1 Cơ sở lý thuyết
2.1.1 Tổng quan về các vai trò người dùng
Dựa vào đối tượng nghiên cứu và phạm vi ứng dụng, hệ thống có 2 lớp người
dùng chính, được chia như sau:

a. Người đi nhờ xe
Về góc nhìn của ứng dụng, người đi nhờ xe là đại diện cho lớp người dùng khơng
có phương tiện di chuyển. Những người này sử dụng ứng dụng để tìm kiếm những
người có thiện chí cho quá giang xe đến các địa điểm mà người đi nhờ xe cần đến.
Trên thực tế, người đi nhờ xe vẫn có thể có phương tiện, nhưng vì một lý do đặc

biệt nào đó, lớp người dùng này q`uyết định sử dụng dịch vu đi quá giang xe thay vì tự
di chuyển một mình.
Người đi nhờ xe tìm kiếm các chuyến đi được tạo bởi người tìm yên sau (sẽ được
giới thiệu dưới đây) dựa vào địa điểm bắt đầu, địa điểm kết thúc và thời gian khởi hành.
Trong trường hợp người đi nhờ xe khơng tìm kiếm được chuyến đi nào phù hợp, lớp
người dùng này có thể tạo mới yêu cầu tìm kiếm người tìm yên sau.
Người đi nhờ xe sẽ phải cung cấp một vài thông tin các nhân và các phương thức
liên lạc để có thể sử dụng ứng dụng. Các thơng tin này sẽ hiển thị cho người tìm yêu
sau, giúp người tìm yên sau có thể dễ dàng liên lạc và trao đổi thêm thông tin về chuyến
đi sắp tới.
b. Người tìm yên sau
Người tìm yên sau là đại diện cho lớp người dùng có phương tiện di chuyển và
có thiện chí cho người khác cùng tham gia chuyến đi với họ. Người tìm n sau bắt
buộc phải có phương tiện di chuyển và phải có giấy phép lái xe theo quy định của pháp
luật nhằm đảm bảo cho người dùng khác về mặt thời gian và mặt pháp lý.
Để bắt đầu một chuyến đi, người tìm yêu sau sẽ phải kết nối với người đi nhờ xe
thông qua việc bắt cặp. Có hai cách để người tìm n sau tìm kiếm người đi nhờ xe.
Thứ nhất là dùng chức năng tìm kiếm chuyến đi. Người tìm yên sau sẽ tìm kiếm chuyến
đi dựa vào địa điểm bắt đầu, địa điểm kết thúc và thời gian khởi hành. Thứ hai, trong
trường hợp người tìm n sau khơng tìm kiếm thấy bất kỳ chuyến đi được yêu cầu bởi
15


người đi nhờ xe, người tìm n sau có thể tạo mới yêu cầu tìm yên sau. Yêu cầu tìm
yên sau cũng sẽ bao gồm các thông tin cơ bản như trường hợp thứ nhất.
Nhìn chung, người tìm yên sau và người đi nhờ xe có chung đặc điểm trong
phương thức tìm kiếm chuyến đi và tạo mới chuyến đi, nhưng khác nhau ở vai trò khi
thực hiện chức năng. Cả hai vai trò này hợp thành mối liên hệ chặt chẽ với nhau và
tương tác với nhau thông qua chức năng tìm kiếm và tạo mới chuyến đi tùy theo vai trò
mong mà người dùng mong muốn.

2.1.2 Google maps và cách biểu diễn địa điểm
Google Maps là một dịch vụ lập bản đồ web do Google phát triển. Nó cung cấp
hình ảnh vệ tinh, chụp ảnh từ trên khơng, bản đồ đường phố, chế độ xem toàn cảnh
tương tác 360 °Của các đường phố (Google Street View), điều kiện giao thông thời gian
thực và lập kế hoạch tuyến đường dành cho người đi bộ, ô tô, xe đạp, đường hàng không
(trong phiên bản beta) và phương tiện giao thông công cộng.
Các địa điểm trên Google Maps được biểu diễn bằng một hệ thống các thuộc tính
dựa vào dữ liệu không gian địa lý thực trên trái đất. Các thuộc tính nổi bật giúp Google
maps hiển thị có thể nói đến như là kinh độ, vĩ độ, mô tả của địa điểm…
Ngoài việc biểu diễn địa điểm trên bản đồ, Google Maps cịn cung cấp thêm chức
năng tính tốn khoảng cách giữa hai điểm trên bản đồ, gọi là Google Distance Matrix.
Kết quả của chức năng này là sự kết hợp giữa hai thuật toán: Thuật toán Dijkstra và
thuật toán A*. Hai thuật tốn này giúp hệ thống tính tốn được khoảng cách ngắn nhất
giữa hai điểm dựa vào tập rất nhiều nút (nodes) dữ liệu. Nội dung cơ bản của hai thuật
tốn này như sau
• Thuật tốn Dijkstra:
Thuật tốn Dijkstra được đề xuất bởi Edsger Dijkstra. Đây là một loại thuật toán
tham lam, được sử dụng để tối ưu hóa và tìm đường đi ngắn nhất giữa các nút trong
biểu đồ.
Dijkstra có nhiều biến thể. Thuật tốn ban đầu là tìm kiếm đường đi ngắn nhất
giữa hai nút, trong khi biến thể dùng một nút duy nhất làm nguồn và sau đó tìm đường
đi ngắn nhất đến các nút khác. Đây là khái niệm được Google Máp thực hiện để tính
tốn và chỉ đường cho chúng ta đường đi ngắn nhất giữa hai điểm. Nhưng thuật toán
16


này có một điểm yếu. Số lượng các nút trong Google Maps gần như vô hạn hoặc không
thể đếm được. Vì thế, thuật tốn này có thể thất bại bởi vì độ phức tạp thời gian và
khơng gian q lớn. Do đó chúng ta có thêm thuật tốn A*.
• Thuật tốn A*

A* là một trong những thuật tốn tìm kiếm đường dẫn và duyệt đồ thị tốt nhất,
được xây dựng đặc biệt cho đồ thị có trọng số. Thuật tốn này được ưa chuộng hơn nhờ
vào tính đầy đủ, tối ưu và hiệu suất tốt. Thuật toán A* tương tự nhưu thuật toán Dijkstra
và sử dụng hàm Heuristic để điều hướng một đường dẫn tốt và hiệu quả hơn. Không
như Dijkstra, thuật tốn A* hồn tồn tập trung vào nút điểm đến. Chính vì thế, thuật
tốn này cải thiện đáng kể hiệu năng. Nó cũng có thể nhận các tham số như yêu cầu thời
gian, khoảng cách,..v.v.. để tối ưu hóa và chọn nút tốt hơn. Vì vậy hiện tại, Google Maps
cũng sử dụng thuật tốn này để tính tốn đường đi ngắn nhất, nhờ độ chính xác cao và
khả năng xử lý khối lượng lớn dữ liệu và đồ thị khổng lồ.
2.1.3 Phương pháp tính phí cho chuyến đi
Đối với các chuyến đi dưới 2km, phí của chuyến đi sẽ là 5.000VND. Đối với các
chuyến đi từ 2km trở lên, phí của chuyến đi sẽ là kết quả của số ki-lơ-mét và một hệ số
được tính tốn trước. Kết quả trên được đưa ra dựa vào khảo sát nhu cầu thực tiễn của
một nhóm sinh viên trong khu vực Đại học Quốc gia TP. Hồ Chí Minh.

Hình 10. Giá tiền nếu khoảng cách lớn hơn 2km

Đối với người sử dụng, số tiền này được thanh toán dựa vào thỏa thuận của người
đi nhờ xe và người tìm yên sau. Người tìm yên sau sẽ được trả trực tiếp bởi người đi
nhờ xe ngay sau khi chuyến đi được hoàn tất.
Số tiền niêm yết trên và hệ số phí của chuyến đi có thể thay đổi tùy thuộc vào
các yếu tố khách quan khác.
2.1.4 Kết nối và nhắn tin theo thời gian thực
Khi tìm được một chuyến đi thích hợp, người đi nhờ xe hoặc người tìm n sau
có thể thực hiện việc kết nối với người còn lại. Việc kết nối này thực chất là cập nhật
17


hoặc thêm mới một trường dữ liệu trong cơ sở dữ liệu thời gian thực. Trường dữ liệu
này sẽ bao gồm thơng tin chuyến đi, thơng tin người tìm n sau và thơng tin người đi

nhờ xe. Ngồi ra, hệ thống cũng sẽ lưu trữ trạng thái, thời gian di chuyển và phí của
chuyến đi.
Sau khi được kết nối, hai người dùng sẽ có khả năng nhắn tin với nhau theo thời
gian thực. Việc này được hiện thực hóa nhờ vào công nghệ socket. Socket thường được
sử dụng để tương tác giữa máy khách và máy chủ. Cấu hình hệ thống điển hình đặt máy
chủ trên một máy, với các máy khách trên các máy khác. Các máy khách kết nối với
máy chủ, trao đổi thơng tin và sau đó ngắt kết nối.
Hình ảnh dưới đây thể hiện luồng sự kiện đặc trưng của socket và trình tự của
các API được phát hành cho một session kết nối socket.

1. API socket() tạo điểm kết thúc (endpoint) cho việc giao tiếp và trả về một bộ
mô tả socket đại diện cho điểm kết thúc ấy.
2. Khi một ứng dụng có một bộ mơ tả socket, nó sẽ kết hợp với socket bằng một
cái tên độc nhất. Các máy chủ phải kết hợp với một cái tên để có thể truy cập từ
mạng
3. API listen() cho biết sự sẵn sàng chấp nhận các yêu cầu kết nói của máy khách.
Khi API listen() được cấp cho một socket, socket đó khơng thể chủ động tạo
các yêu cầu kết nối. API listen() được cấp sau khi một socket được cấp phát với
18


một API socket() và API bind() liên kết một tên gọi với socket. Một API
listen() phải được phát hành trước khi một API accept() được phát hành
4. Ứng dụng khách sử dụng API connect() trên luồng socket để thiết lập kết nối
tới máy chủ.
5. Ứng dụng máy chủ sử dụng API accept() để chấp nhận yêu cầu kết nối từ máy
khách. Máy chủ phải phát hành thành công API bind() và listen() trước khi phát
hành API accept()
6. Khi một kết nối được thiết lập giữa các luồng socket (giữa máy chủ và máy
khách), chúng ta có thể sử dụng các API truyền dữ liệu. Máy khách và máy chủ

có nhiều API truyền dữ liệu như: send(), recv(), read(), write(), ...v.v.
7. Khi máy chủ hoặc máy khách muốn dừng hoạt động, nó sẽ phát hành một hàm
close() để giải phóng mọi tài ngun hệ thống mà socket có được.

2.2 Cơng nghệ
2.2.1 Ngơn ngữ lập trình

Giới thiệu về Javascript
Javascript là một ngơn ngữ lập trình thơng dịch được phát triển từ các ý niệm nguyên
mẫu. Javascript nhẹ và hoạt động đa nền tảng. Javascript nổi tiếng về khả năng phát
triển kể cả website hoặc những mơi trường khác trình duyệt. Javascript có thể dùng để
19


phát triển ứng dụng cả bên phía Client và phía Server. Javascript chúa một thư viện tiêu
chuẩn của các đối tượng, như Array, Date và Math, và một tập hợp cốt lõi các phẩn tử
như toán tử, cấu trúc điều khiển và câu lệnh.
Lý do sử dụng Javascript
Javascript mang đến nhiều lợi ích qua nhiều mặt
-

Client-side: cung cấp cho người dùng nhiều lợi thế hơn

-

Tương tác server ít hơn

-

Phản hồi ngay lập tức khi người dùng truy cập đến


-

Tạo cá mục thành phần như Drag và Drop cung cấp một Rich Interface tới site
cho người dùng truy cập

2.2.2 Cơ sở dữ liệu

Giới thiệu về MySQL
MySQL là một hệ quản trị cơ sở dữ liệu nhanh và tiện gọn, dễ dàng sử dụng để tương
tác với các công nghệ tiên tiến ngày nay như C#, Java, … Nó được phát triển với công
ty MySQL AB ở Thụy Điển năm 2004 và sau nhiều lần thay đổi chủ sở hữu, cuối cùng
đã được mua lại bởi Oracle Corporation vào năm 2010.
Lý do sử dụng
Nó khá phổ biến với giới lập trình viên bởi:
-

MySQL là mã nguồn mở, hồn tồn miễn phí khi sử dụng.

-

MySQL sử dụng form chuẩn thuộc hệ SQL.

-

MySQL dễ dàng xử lý ngay cả trên các tập dữ liệu lớn.

-

MySQL hỗ trợ giao dịch nhanh. Giao dịch ACID (Atomic-Consistent- IsolatedDurable) hoàn thiện.


20


Giới thiệu về Firebase
Firebase là một dịch vụ cơ sở dữ liệu thời gian thực được cung cấp bởi Google và hoạt
động trên nền tảng đám mây. Nó giúp các lập trình phát triển nhanh các ứng dụng di
động bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.
Dự án được ứng dụng ba trong số rất nhiều dịch vụ hỗ trợ của firebase bao gồm :
-

Firebase Authentication : Dùng để đăng nhập, đăng ký thông tin khách hàng.
giúp xây dựng các hệ thống xác thực an toàn và dễ dàng hơn, đồng thời cải thiện
trải nghiệm đăng nhập cho người dùng.

-

Firebase storage : Cung cấp dịch vụ lưu trữ file dưới dạng tệp âm thanh, hình
ảnh,… Dùng để lưu trữ thông tin ứng dụng.

Lý do sử dụng Firebase
Việc xây dựng một server để lưu trữ hình ảnh các sản phẩm là một vấn đề cần thiết và
quan trọng, firebase cung cấp một dịch vụ miễn phí là firebase storage cho phép lưu trữ
và truy xuất hình ảnh nhanh chóng dễ dàng. Việc lưu trữ và truy xuất hình ảnh hồn
tồn tự động thơng qua cơng nghệ điện toán đám mây của google giảm bớt việc xử lý
cho vấn đề lưu trữ hình ảnh.
2.2.3 Framework/Thư viện
a. React Native

21



Giới thiệu về React Native
React native là một công cụ giúp lập trình đa nền tảng để tạo ra các ứng dụng
trên mơi trường native. Nó là một framework mã nguồn mở được phát triển bởi
Facebook, cho phép sử dụng Java script để phát triển phần mềm trên điện thoại di động
Android và IOS. React native cũng giống như React vậy chúng sử dụng các native
components thay vì các web components.
Lý do sử dụng React Native
-

Là một open source framework, có thể tương thích với các nền tảng khác như
Windows hoặc tvOS trong tương lai gần.

-

Vì các thành phần Native React có các quyền đối tác (counterpart rights) nên có
thể sử dụng lại các thành phần này để xây dựng cả ứng dụng Android và iOS.
Bạn có thể kết hợp các thành phần Native React vào mã của ứng dụng hiện có
hoặc sử dụng lại mã dựa trên Cordova với sự trợ giúp của plugin. Tuy nhiên, ứng
dụng hiện tại phải được xây dựng bằng mã Cordova và Ionic.

-

React Native Development tương đối đơn giản, nhanh chóng và hiệu quả.

-

Là lựa chọn tuyệt vời cho những nhà phát triển có chun mơn về JavaScript vì
khơng cần phải tìm hiểu về Java hoặc iOS của Android cụ thể.


-

Giao diện người dùng tập trung, giúp ứng dụng tải nhanh và mang lại cảm giác
mượt mà hơn.

b. NestJs

22


Giới thiệu về NestJs
Nest (NestJS) là một framework cho việc xây dựng hiệu quả, các ứng dụng phía
máy chủ Node.js có thể mở rộng hiệu quả. Nó sử dụng JavaScript, được xây dựng và
hỗ trợ đầy đủ TypeScript (và vẫn hỗ trợ javascript thuần) và hợp các yếu tố của lập trình
hướng đối tượng, lập trình hàm và lập trình phản ứng hàm.
Lý do sử dụng NestJs
-

Là một nền tảng có tốc độ cực nhanh, hỗ trợ JavaScript và cho phép các
developer xây dựng cả frontend lẫn backend

-

Kết hợp phát triển front-end và mid-tier, một đặc điểm vượt trội so với hầu hết
các ngôn ngữ khác.

-

Sử dụng TypeScript, cho phép thích ứng nhanh chóng với các thay đổi khi

JavaScript đang ngày càng phát triển mạnh mẽ.

-

Được xây dựng chuyên dùng cho các ứng dụng doanh nghiệp có quy mơ lớn.

-

Cung cấp kiến trúc ứng dụng độc lập, cho phép các developer tạo ra những ứng
dụng dễ test, dễ mở rộng và dễ bảo trì.

-

Cho phép xây dựng ứng dụng Rest API, MVC, microservices, GraphQL, Web
Socket hay CRON job.

-

Cấu trúc chủ yếu dựa vào Angular – rất đơn giản và cho phép tập trung vào việc
thiết kế endpoint thay vì cấu trúc của ứng dụng.

-

Cung cấp các module, dịch vụ và controller giống Angular, cho phép ứng dụng
có khả năng mở rộng và test tốt hơn so với Express hay Koa.
23


-


Có tính chất kết nối lỏng, do đó những lỗi cũ trong dự án không ảnh hưởng đến
cấu trúc của codebase sau này.

c. Socket.IO

Giới thiệu về Socket.IO
-

Là một module trong Node.js được nhà sáng chế tạo ra và phát triển từ năm 2010.
Mục đích lớn nhất của Socket.IO là để tạo môi trường giao tiếp thuận lợi trên
Internet giúp trả về các giá trị thực ngay tại thời điểm giao tiếp giữa các bên với
nhau (thường là giữa server và client).

-

Việc giao tiếp 2 chiều giữa máy khách và máy chủ được thực hiện bởi socket io
khi và chỉ khi máy khách có module này trong trình duyệt và máy chủ cũng đã
tích hợp sẵn gói Socket.IO. Các ứng dụng sử dụng socket io thường đòi hỏi tốc
độ phản hồi ngay lập tức. Một số ví dụ điển hình như xổ số, trực tiếp bóng đá,
chat…

Lý do sử dụng Socket.IO
-

Socket.IO được xây dựng dựa trên Engine.IO. Nó sẽ khởi chạy phương thức
long-polling trước nhất để kết nối. Sau đó nó mới sử dụng các phương thức giao
tiếp tốt hơn.

-


Đặc điểm tự động kết nối đến server của Socket.IO giả sử trong quá trình khởi
chạy bị mất kết nối giữa client và server thì socket io sẽ tự động gắn kết nối mãi
mãi cho đến khi nào server phản hồi lại.

-

Socket io có thể hỗ trợ mã hóa nhị phân như ArrayBuffer và Blob trên trình duyệt
hoặc là ArrayBuffer và Buffer trong Node.js.
24


-

Cho phép tạo kênh và phịng của Socket.IO có thể tạo ra mối quan hệ giữa các
phần hoặc các module riêng lẻ bằng cách tạo ra những kênh riêng biệt khác nhau.

d. Prisma

Giới thiệu về Prisma
Prisma là một Object Relational Mapping (ORMs) được dùng để xây dựng các
máy chủ như GraphQL Server, RESTful APIs, microservice, ... Prisma đơn giản là 1
layer nằm giữa Webserver và Database. Prisma giúp chúng ta giao tiếp với db một cách
dễ dàng hơn.
Prisma bao gồm ba phần chính:
-

Prisma Client : Trình tạo truy vấn an toàn và được tạo tự động cho Node.js và
TypeScript.

-


Prisma Migrate : Một hệ thống di chuyển và mơ hình hóa dữ liệu khai báo.

-

Prisma Studio : Một GUI để xem và chỉnh sửa dữ liệu trong cơ sở dữ liệu của
bạn.

Lý do sử dụng Prisma
-

Có năng suất cao hơn khi là việc với cơ sở dữ liệu. Cân nhắc lại sự cân bằng giữa
năng suất và kiểm soát.

-

Dễ dàng suy luận về các truy vấn cơ sở dữ liệu bằng cách cung cấp API sạch và
an toàn về loại để gửi các truy vấn cơ sở dữ liệu trả về các đối tượng Javascript
cũ thuần tuý.

25


×