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

Xây dựng hệ thống thương mại điện tử

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 (1.83 MB, 89 trang )

ĐẠI HỌC ĐÀ NẴNG
PHÂN HIỆU TẠI KON TUM

LƯƠNG VĂN Ý

ĐỒ ÁN TỐT NGHIỆP

XÂY DỰNG HỆ THỐNG THƯƠNG MẠI ĐIỆN TỬ

Kon Tum, tháng 8 năm 2022


ĐẠI HỌC ĐÀ NẴNG
PHÂN HIỆU TẠI KON TUM

ĐỒ ÁN TỐT NGHIỆP

XÂY DỰNG HỆ THỐNG THƯƠNG MẠI ĐIỆN TỬ

GIÁO VIÊN HƯỚNG DẪN
SINH VIÊN THỰC HIỆN
LỚP
MÃ SỐ SINH VIÊN

: ThS. LÊ THỊ BẢO YẾN
: LƯƠNG VĂN Ý
: K12TT
: 1817480201016

Kon Tum, tháng 8 năm 2022



LỜI CẢM ƠN
Qua một thời gian tìm hiểu và thực hiện đến nay đề tài “Xây dựng hệ thống thương
mại điện tử” đã hồn thành. Trong suốt q trình thực hiện đề tài, em đã nhận được rất
nhiều sự giúp đỡ nhiệt tình của thầy cơ và các bạn.
Lời đầu tiên em xin được bày tỏ lòng biết ơn sâu sắc đến Ban giám hiệu Trường Phân
hiệu Đại học Đà Nẵng tại Kon Tum, quý thầy cô khoa Công Nghệ và các thầy cơ bộ mơn
đã tận tình giảng dạy, trang bị những kiến thức quan trọng trong suốt quá trình học tập tại
trường.
Đặc biệt, em xin gửi lời cảm ơn đến cô ThS Lê Thị Bảo Yến đã tận tình giúp đỡ,
hướng dẫn em trong suốt quá trình thực hiện đồ án tốt nghiệp. Với sự chỉ bảo của cơ, em
đã có những định hướng tốt trong việc triển khai và thực hiện các yêu cầu trong quá trình
làm đồ án tốt nghiệp.
Tuy nhiên, trong quá trình làm đồ án do còn nhiều hạn chế về kinh nghiệm và kiến
thức chuyên môn nên không thể tránh khỏi một vài thiếu sót khi trình bày và thực hiện đề
tài. Rất mong nhận được sự góp ý, đánh giá của các thầy cơ bộ mơn để đề tài của em thêm
hồn thiện hơn.
Em xin chân thành cảm ơn!
Sinh Viên
Lương Văn Ý


MỤC LỤC
CHƯƠNG 1. MỞ ĐẦU .....................................................................................................1
1.1. TỔNG QUAN ĐỀ TÀI ...............................................................................................1
1.2. LÝ DO CHỌN ĐỀ TÀI ..............................................................................................2
1.3. MỤC TIÊU ĐỀ TÀI ...................................................................................................2
1.4. PHƯƠNG PHÁP NGHIÊN CỨU .............................................................................2
1.5. PHẠM VI ĐỀ TÀI ......................................................................................................2
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT .................................................................................3

2.1. KIẾN TRÚC HỆ THỐNG .........................................................................................3
2.2. MƠ HÌNH THƯƠNG MẠI ĐIỆN TỬ......................................................................4
2.2.1. Mơ hình Business-To-Business (B2B) ................................................................4
2.2.2. Mơ hình Business-To-Consumer (B2C) ............................................................4
2.2.3. Mơ hình Consumer-To-Consumer (C2C) .........................................................4
2.2.4. Mơ hình Consumer-To-Business (C2B) ............................................................4
2.2.5. Mơ hình Business-To-Government (B2G) ........................................................5
2.2.6. Mơ hình Consumer-TO-Government (C2G) ....................................................5
2.2.7. Mơ hình được sử dụng trong đồ án ...................................................................5
2.3. MƠ HÌNH CLIENT–SERVER .................................................................................5
2.3.1. Khái niệm .............................................................................................................5
2.3.2. Client ....................................................................................................................6
2.3.3. Server....................................................................................................................6
2.3.4. Nguyên tắc hoạt động ..........................................................................................7
2.4. TRÍ TUỆ NHÂN TẠO ...............................................................................................7
2.4.1. Khái quát ..............................................................................................................7
2.4.2. Nhận diện vật thể.................................................................................................8
2.4.3. Nhận diện giọng nói.............................................................................................8
2.5. NODE.JS .....................................................................................................................8
2.5.1. Tổng quan ............................................................................................................8
2.5.2. Lý do chọn Node.JS .............................................................................................8
2.6. FLUTTER ...................................................................................................................9
2.6.1. Tổng quan ............................................................................................................9
2.6.2. Kiến trúc của Flutter...........................................................................................9
2.6.3. Lý do chọn Flutter .............................................................................................10
2.7. NGÔN NGỮ DART ..................................................................................................10
2.7.1. Tổng quan ..........................................................................................................10
2.7.2. Lý do chọn Dart .................................................................................................11
2.7.3. Cú pháp cơ bản ..................................................................................................11
2.8. CÔNG CỤ SỬ DỤNG ..............................................................................................14

2.8.1. Visual Studio Code ............................................................................................14
2.8.2. Postman ..............................................................................................................16
i


2.8.3. Figma ..................................................................................................................16
2.8.4. Một số công cụ khác ..........................................................................................17
CHƯƠNG 3. PHÂN TÍCH VÀ THIẾT KẾ ..................................................................18
3.1. TÁC NHÂN HỆ THỐNG ........................................................................................18
3.2. YÊU CẦU CHỨC NĂNG ........................................................................................18
3.2.1. Người mua hàng ................................................................................................18
3.2.2. Người bán hàng .................................................................................................19
3.2.3. Admin .................................................................................................................21
3.2.4. Cá nhân hóa .......................................................................................................21
3.2.5. Phi chức năng ....................................................................................................21
3.2.6. Các tính năng khác ............................................................................................22
3.3. GIẢI PHÁP ...............................................................................................................23
3.4. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ............................................................23
3.4.1. Sơ đồ Use-Case ..................................................................................................23
3.4.2. Đặc tả Use-Case .................................................................................................26
3.4.3. Sơ đồ tuần tự ......................................................................................................50
3.4.4. Lược đồ cơ sở dữ liệu ........................................................................................60
CHƯƠNG 4. DEMO ỨNG DỤNG.................................................................................67
4.1. GIAO DIỆN CHÀO MỪNG ....................................................................................67
4.2. CHỨC NĂNG ĐĂNG NHẬP, ĐĂNG KÝ, MẬT KHẨU .....................................67
4.3. GIAO DIỆN TRANG CHỦ .....................................................................................69
4.4. CHỨC NĂNG XEM SẢN PHẨM ...........................................................................70
4.5. GIAO DIỆN CHỨC NĂNG GIỎ HÀNG ...............................................................70
4.6. GIAO DIỆN CHỨC NĂNG ĐẶT HÀNG ..............................................................71
4.7. CHỨC NĂNG XEM THÔNG BÁO, THEO DÕI ĐƠN HÀNG, NHẮN TIN.....72

4.8. GIAO DIỆN TÍNH NĂNG TÌM KIẾM SẢN PHẨM ...........................................72
4.9. GIAO DIỆN CHỨC NĂNG SẢN PHẨM ƯA THÍCH .........................................73
4.10. GIAO DIỆN TÍNH NĂNG NGƯỜI DÙNG (PROFILE)....................................73
4.11. GIAO DIỆN TÍNH NĂNG PHÂN QUYỀN .........................................................74
4.12. GIAO DIỆN TÍNH NĂNG QUẢN LÝ CỦA ADMIN.........................................75
CHƯƠNG 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ..............................................77
5.1. KẾT LUẬN ...............................................................................................................77
5.1.1. Kết quả đạt được ...............................................................................................77
5.1.2. Hạn chế ...............................................................................................................77
5.2. HƯỚNG PHÁT TRIỂN ...........................................................................................77

ii


DANH MỤC CÁC TỪ VIẾT TẮT
CRUD : Tạo, đọc, chỉnh sửa, xóa
OS
: Operating system
UDCK : Phân hiệu đại học Đà Nẵng tại Kon Tum

iii


Số hiệu bảng
2.1.
2.2.
3.1.
3.2.
3.3.
3.4.

3.5.
3.6.
3.7.
3.8.
3.9.
3.10.
3.11.
3.12.
3.13.
3.14.
3.15.
3.16.
3.17.
3.18.
3.19.
3.20.
3.21.
3.22.
3.23.
3.24.
3.25.
3.26.
3.27.
3.28.
3.29.
3.30.
3.31.
3.32.
3.33.
3.34.

3.35.

DANH MỤC BẢNG
Tên bảng
Flutter lập trình UI và Business logic
Các kiểu dữ liệu cơ bản của Dart
Đặc tả Use Case xem sản phẩm
Đặc tả Use Case tìm kiếm sản phẩm
Đặc tả Use Case tìm kiếm sản phẩm bằng giọng nói
Đặc tả Use Case tìm kiếm sản phẩm bằng hình ảnh
Đặc tả Use Case xem sản phẩm khuyến nghị
Đặc tả Use Case thêm vào sản phẩm ưu thích
Đặc tả Use Case xác thực người dùng
Đặc tả Use Case thêm vào giỏ
Đặc tả Use Case cập nhật giỏ hàng
Đặc tả Use Case tính tốn thuế
Đặc tả Use Case thực hiện chi trả
Đặc tả Use Case quản lý cửa hàng
Đặc tả Use Case xem thông tin thống kê
Đặc tả Use Case thống kê đơn đặt hàng
Đặc tả Use Case thống kê sản phẩm
Đặc tả Use Case quản lý hàng hóa
Đặc tả Use Case quản lý đơn hàng
Đặc tả Use Case phản hồi đơn hàng
Đặc tả Use Case tiếp nhận đơn hàng
Đặc tả Use Case từ chối đơn hàng
Đặc tả Use Case giao tiếp với khách hàng về đơn hàng
Đặc tả Use Case CRUD sản phẩm
Đặc tả Use Case CRUD mã giảm giá của người bán hàng
Đặc tả Use case CRUD mã giảm giá của người quản trị

Đặc tả Use Case CRUD vai trò của người dùng
Đặc tả Use Case quản lý ứng dụng
Đặc tả Use Case xóa hoặc cấm người dùng
Đặc tả Use Case quản lý người dùng
Mô tả bảng User
Mô tả bảng Cart
Mô tả bảng Shop
Mô tả bảng Order
Mô tả bảng OrderDetails
Mô tả bảng ChatData
Mô tả bảng Role
iv

Trang
9
12
26
27
28
29
30
30
31
32
32
33
34
35
35
36

37
38
39
39
40
41
42
43
44
45
47
48
48
49
61
61
62
62
63
63
63


3.36.
3.37.
3.38.
3.39.
3.40.
3.41.


Mô tả bảng Voucher
Mô tả bảng Product
Mô tả bảng Category
Mô tả bảng Variations
Mô tả bảng VariationData
Mô tả bảng CombineData

64
64
65
65
65
66

v


DANH MỤC HÌNH
Số hiệu hình
Tên hình vẽ
Dự đốn phát triển của Việt Nam
1.1.
Sơ đồ kiến trúc hệ thống
2.1.
Hàm trong Dart
2.2.
Công cụ chỉnh sửa văn bản Visual studio code
2.3.
Công cụ PostMan
2.4.

Công cụ thiết kế Figma
2.5.
Sơ đồ UseCase mức độ cao nhất
3.1.
Sơ đồ UseCase chi tiết hóa chức năng xem sản phẩm
3.2.
Sơ đồ UseCase chi tiết hóa chức năng thanh tốn
3.3.
Sơ đồ UseCase chi tiết hóa chức năng phần quản lý cửa hàng
3.4.
Sơ đồ UseCase chi tiết hóa chức năng quản lý ứng dụng
3.5.
Sơ đồ tuần tự chức năng đăng nhập
3.6.
Sơ đồ tuần tự chức năng đăng ký
3.7.
Sơ đồ tuần tự chức năng tìm kiếm sản phẩm
3.8.
Sơ đồ tuần tự chức năng xem thông tin sản phẩm
3.9.
Sơ đồ tuần tự chức năng thêm hàng vào giỏ
3.10.
Sơ đồ tuần tự chức năng đặt hàng
3.11.
Sơ đồ tuần tự chức năng thanh toán
3.12.
Sơ đồ tuần tự chức năng đánh giá
3.13.
Sơ đồ tuần tự chức năng đa ngôn ngữ
3.14.

Sơ đồ tuần tự chức năng xem thông tin thống kê
3.15.
Sơ đồ tuần tự chức năng CURD sản phẩm
3.16.
Sơ đồ tuần tự tính năng quản lý Voucher
3.17.
Sơ đồ tuần tự chức năng tiếp nhận, từ chối đơn hàng
3.18.
Sơ đồ tuần tự tính năng giao tiếp với khách hàng
3.19.
Lược đồ cơ sở dữ liệu
3.20.
Giao diện tính năng chào mừng
4.1.
Giao diện chức năng đăng nhập OTP
4.2.
Chức năng đăng ký
4.3.
Chức năng quên mật khẩu
4.4.
Giao diện tính năng đổi mật khẩu
4.5.
Giao diện màn hình trang chủ
4.6.
Giao diện chức năng xem sản phẩm
4.7.
Giao diện chức năng thêm vào giỏ hàng
4.8.
Giao diện chức năng đặt hàng
4.9.

Thơng báo sau khi đặt hàng
4.10.
Giao diện tính năng xem tin nhắn
4.11.
vi

Trang
1
3
14
15
16
17
23
24
25
25
26
50
51
52
53
53
54
55
55
56
56
57
58

59
59
60
67
67
68
68
69
69
70
70
71
71
72


4.12.
4.13.
4.14.
4.15.
4.16.
4.17.
4.18.
4.19.

Giao diện tính năng tìm kiếm sản phẩm
Giao diện tính năng sản phẩm ưu thích
Giao diện tính năng người dùng
Giao diện người bán hàng
Giao diện tính năng phân quyền

Giao diện đăng nhập của admin
Giao diện chính tảng web admin
Giao diện màn hình quản lý của admin

vii

72
73
73
74
74
75
75
76


CHƯƠNG 1
MỞ ĐẦU
1.1. TỔNG QUAN ĐỀ TÀI
Ngày nay, với sự phát triển mạnh mẽ của khoa học kỹ thuật đặc biệt là sự ra đời của
mạng toàn cầu đã kéo theo hàng loạt lợi ích trong việc thay đổi phương thức quản lý, kinh
doanh, thúc đẩy các hoạt động kinh tế, xã hội diễn ra phát triển mạnh mẽ. Một trong những
sự thay đổi đó chính là sự phát triển của khái niệm thương mại điện tử. Theo báo cáo
Thương mại điện tử các nước Đông Nam Á năm 2019 của Google, Temasek và Brain &
Company dự đoán, “tốc độ tăng trưởng trung bình cho cả giai đoạn 2015-2025 của thương
mại điện tử Việt Nam là 29%. Dự báo đến năm 2025, quy mô thương mại điện tử của Việt
Nam sẽ vươn tới ngưỡng 43 tỷ USD và đứng thứ 3 trong khối ASEAN” [8]. Vậy thương
mại điện tử là gì, điều gì tạo nên sự phát triển nhanh chóng đó.

Hình 1.1: Dự đốn phát triển của Việt Nam

Thương mại điện tử là việc mua bán sản phẩm hay dịch vụ trên các hệ thống điện tử
như Internet và các mạng máy tính. Hay nói một cách đơn giản, thơng thường, người dùng
muốn mua sắm, họ phải di chuyển đi đến các chợ, thương lái, sau khi trao đổi và đồng ý
mua bán, họ sẽ thanh toán trực tiếp bằng tiền mặt, còn đối với thương mại điện tử việc mua
bán sẽ thông qua các dịch từ xa được cung cấp thông qua mạng internet như các ứng dụng,
website để tiếp cận với người bán hàng, thông qua các dịch vụ thanh toán điện tử như
Momo, ViettelPay để thanh toán. Và đơn hàng sẽ được chuyển đến tận tay người dùng
thơng qua các dịch vụ vận chuyển.
Chính nhờ sự phát triển của công nghệ hiện đại, thương mại điện tử đang trở nên vơ
cùng tiện lợi cũng như nhanh chóng. Đặc biệt là trong thời kỳ dịch bệnh covid hiện nay,
thì thói quen mua sắm cũng như bán hàng của mọi người đang có sự thay đổi nhanh chóng
khi việc di chuyển đang bị hạn chế rất nhiều, cùng với các chính sách, khuyến khích của
nhà nước như Quyết định số 645/QĐ-TTg, những điều này đã tạo nên một không gian phát

1


triển vô cùng to lớn thị trường này, đồng thời các dịch vụ đi liền cũng đang được hưởng
lợi và không ngừng phát triển.
1.2. LÝ DO CHỌN ĐỀ TÀI
Nhận thấy được tương lai, sự phát triển mạnh mẽ của ngành thương mại điện tử cũng
như sự lệ thuộc khắn khít của thị trường này đối với các tiến bộ cũng như các sản phẩm
của ngành công nghệ thông tin. Cùng với đó là sự ra đời và phát triển của ngày một nhiều
các dịch vụ thương mại điện tử lớn và những kinh nghiệm, kiến thức của bản thân đã được
đúc kết qua 4 năm học tại Phân hiệu đại học Đà Nẵng tại Kon Tum, đã thúc đẩy bản thân
chọn đề tài “Xây dựng hệ thống thương mại điện tử” làm đề tài tốt nghiệp.
1.3. MỤC TIÊU ĐỀ TÀI
- Về mặt lý thuyết: Nắm bắt cách phát triển hệ thống công nghệ thông tin, cách xây
dựng ứng dụng đa nền tảng, luyện tập việc xây dựng ứng dụng bằng các framework như
Node.JS, flutter bằng các ngơn ngữ lập trình Dart, Javascript, Css. Cách xây dựng Restful

api, giao thức Http, cách truy vấn dữ liệu trên máy chủ. Cách tích hợp trí tuệ nhân tạo vào
hệ thống phần mềm.
- Về mặt kỹ thuật: Luyện tập và làm chủ các phần mềm liên quan như Vim, các công
cụ debug như Chrome, các máy ảo, postman…
- Về mặt ứng dụng: Xây dựng một hệ thống thương mại điện tử gồm hai phần: một
ứng dụng bên phía admin, một ứng dụng cho bên khách hàng.
1.4. PHƯƠNG PHÁP NGHIÊN CỨU
- Tìm hiểu và nghiên cứu tài liệu
- Tìm hiểu các chức năng cần có của một hệ thống thương mại điện tử
- Xây dựng cơ sở dữ liệu
- Xây dựng API giao tiếp giữa các phần trong hệ thống
- Xây dựng ứng dụng
- Hoàn thiện ứng dụng theo góp ý
1.5. PHẠM VI ĐỀ TÀI
Hệ thống có phạm vi phục vụ cho q trình mua và bán của người Việt Nam.

2


CHƯƠNG 2
CƠ SỞ LÝ THUYẾT
2.1. KIẾN TRÚC HỆ THỐNG

Hình 2.1: Sơ đồ kiến trúc hệ thống
Hệ thống sẽ dựa trên mơ hình Client-Server. Trong đó:
- Client Side: Phía người dùng, nơi sẽ tiếp nhận dữ liệu và hiển thị nó cho người
dùng. Client Side sẽ được cấu trúc dưới dạng Clean Architecture. Với Model đóng vai trị
thiết kế dữ liệu, là kiểu dữ liệu sẽ được sử dụng trong app, khi Client lấy được dữ liệu, dữ
liệu sẽ được chuyển thành dạng Model. Controller, nơi sẽ đảm nhiệm vai trò tiếp nhận dữ
liệu cũng như xử lý dữ liệu, thực hiện yêu cầu. Bloc cung cấp vai trò quản lý các state (tình

trạng, một khái niệm quan trọng trong Flutter, nói một cách đơn giản, nó giúp chương trình
vẽ lại các Widget để hiển thị dữ liệu. Và các state này với mỗi trang, mỗi Widget sẽ có một
số các state khác nhau, cho nên chúng ta dùng Bloc để quản lý một cách thống nhất các
state này). Còn UI Widget tượng trưng cho giao diện của người sử dụng.
- Server Side: Là nơi thực hiện yêu cầu của phía người dùng, có vai trị quan trọng
trọng trong việc xử lý dữ liệu và quản lý toàn hệ thống. Server sẽ được thiết kế thành hai
3


phần, một phần là Server Main, sử dụng chủ yếu bộ khung Node.JS và Express.JS, có vai
trị giải quyết hầu hết các tính năng của chương trình. Một phần là Server Chat, sử dụng
Socket.IO có vai trị quản lý việc Chat, duy trì tình trạng đồng bộ trong quá trình Chat.
- Cơ sở dữ liệu được sử dụng là MongoDB với vai trò lưu trữ tất cả dữ liệu của
chương trình.
2.2. MƠ HÌNH THƯƠNG MẠI ĐIỆN TỬ
2.2.1. Mơ hình Business-To-Business (B2B)
“B2B (là viết tắt của từ tiếng anh Business to Business), có nghĩa là doanh nghiệp với
doanh nghiệp. Đây là hình thức giao dịch giữa những doanh nghiệp với nhau. Chẳng hạn
như các giao dịch giữa nhà sản xuất và các nhà bán buôn hoặc nhà bán buôn với cửa hàng
bán lẻ.”[6]
Một số đặc điểm của mơ hình B2B:
- Ít người mua hơn so với tổng số người tiêu dùng
- Đơn đặt hàng có quy mơ lớn hơn
- Mối quan hệ của người mua và người bán là lâu dài
- Dễ dàng chọn ra phân khúc khách hàng tiềm năng
- Nhiều người tham gia vào quyết định mua hàng
- Phương pháp mua hàng chuyên nghiệp, dựa trên thông tin và quyết định hợp lý
- Tập trung vào giá cả
- Tiết kiệm chi phí
2.2.2. Mơ hình Business-To-Consumer (B2C)

“B2C là viết tắt của tên tiếng anh Business to Consumer, hay còn gọi là mơ hình kinh
doanh giữa doanh nghiệp với người tiêu dùng. Giống với ý nghĩa tên của nó, B2C được
định nghĩa là mơ hình đề cập về q trình bán sản phẩm/dịch vụ trực tiếp của doanh nghiệp
và người tiêu dùng (người cuối cùng sử dụng sản phẩm/dịch vụ của doanh nghiệp).”[7]
- Một số đặc điểm của mơ hình B2C:
- Tiết kiệm chi phí
- Giao tiếp trực tiếp với người mua
- Chu kì bán hàng ngắn
2.2.3. Mơ hình Consumer-To-Consumer (C2C)
“Mơ hình C2C (viết tắt của Consumer to Consumer) chỉ hình thức kinh doanh giữa
cá thể với cả thể, trong đó, người mua và người bán đều là các cá nhân sử dụng nhiều cách
khác nhau trên Internet chứ không phải doanh nghiệp.” [9]
Một số ví dụ điển hình về mơ hình C2C:
- Đấu giá
- Giao dịch trao đổi
- Dạng dịch vụ hỗ trợ
- Bán tài sản ảo
2.2.4. Mơ hình Consumer-To-Business (C2B)
C2B là mơ hình kinh doanh trong đó người tiêu dùng tạo ra giá trị và bán lại giá trị
đó cho doanh nghiệp. Trái ngược với khái niệm phổ biến về B2C nơi các công ty cung cấp
4


hàng hóa và dịch vụ cho người tiêu dùng cuối, mơ hình C2B cho phép doanh nghiệp trích
xuất giá trị từ người tiêu dùng và ngược lại.
2.2.5. Mơ hình Business-To-Government (B2G)
“Hình thức này đơi khi được gọi là business-to-administration (B2A). Là khi một
cơng ty tư nhân trao đổi hàng hóa hoặc dịch vụ với một cơ quan công cộng. Thông thường
dưới dạng một hợp đồng kinh doanh với một tổ chức công cộng để thực hiện một dịch vụ
được ủy quyền. Chẳng hạn, một cơng ty giám sát có thể đấu thầu trực tuyến một hợp đồng

để làm sạch tòa án quận hoặc một cơng ty CNTT có thể đáp ứng đề xuất quản lý phần cứng
máy tính của thành phố.” [3]
2.2.6. Mơ hình Consumer-TO-Government (C2G)
Là mơ hình khi người dùng thực hiện tương tác với cơ chính phủ hay các dịch vụ
cơng cộng. Mơ hình này bao gồm nộp thuế trực tuyến. mua hàng hóa của cơ quan chính
phủ, đóng phạt…
2.2.7. Mơ hình được sử dụng trong đồ án
Mơ hình được sử dụng trong đồ án là mơ hình C2C, khi người sử dụng được xác định
là các cá nhân có nhu cầu mua và bán hàng
Một số ưu điểm của mơ hình C2C:
- Giảm bớt chi phí mơi giới, hoa hồng: Với mơ hình C2C, người bán khơng cần đến
những nhân vật như nhà sản xuất, người bán bn… Thơng qua mơ hình, người bán và
người mua có thể kết nối và giao dịch trực tiếp với nhau. Điều này sẽ mang đến lợi ích cho
cả 2 bên. Người bán sẽ không phải chia lợi nhuận cho bên trung gian và người mua cũng
mua được hàng với giá tốt hơn vì hàng hóa khơng phải thơng qua nhiều giai đoạn.
- Người bán có thể tiếp cận với nhiều khách hàng hơn: Người dùng có thể trực tiếp
tương tác và trao đổi thông tin qua các kênh khác nhau, điều này giúp người bán có thể
hiểu rõ hơn khách hàng.
Một số nhược điểm của mơ hình:
- Khơng có sự kiểm soát về chất lượng sản phẩm: Một nhược điểm rõ ràng của mơ
hình này là sản phẩm khơng có một hệ quy chiếu hay một bên thứ ba nào để đảm bảo chất
lượng cũng như chứng thực những thông tin của sản phẩm. Chính điều này có thể gây ra
các cuộc trao đổi không như mong muốn giữa người bán và người mua
- Vấn đề thanh tốn khơng được đảm bảo: Tương tự như nhược điểm trên, khi mơ
hình khơng có sự đảm bảo của bên thứ ba thì rất dễ xảy ra vấn đề người mua không thực
hiện thanh tốn khi nhận hàng
2.3. MƠ HÌNH CLIENT–SERVER
2.3.1. Khái niệm
“Mơ hình client-server là một cấu trúc ứng dụng phân tán mà ở đó cơng việc được
phân chia giữa bên cung cấp tài nguyên hoặc dịch vụ, được gọi là máy chủ, và bên yêu cầu

dịch vụ, được gọi là máy khách. Thường thì các máy khách và máy chủ giao tiếp với nhau
thơng qua mạng máy tính trên các phần cứng riêng biệt, nhưng cả máy khách và máy chủ
cũng có thể nằm trên cùng một hệ thống. Một máy chủ nối chủ chạy một hoặc nhiều chương
trình máy chủ, đồng thời chia sẻ tài nguyên với các máy khách. Một máy khách thường
5


khơng chia sẻ bất kì tài ngun nào của nó cả, mà chỉ yêu cầu nội dụng hoặc dịch vụ từ
một máy chủ. Vì vậy, các máy khách sẽ thiết lập các phiên giao tiếp với máy chủ, và máy
chủ sẽ chờ các u cầu đến.” [10]
2.3.2. Client
“Trong mơ hình client – server, người ta còn định nghĩa cụ thể cho một máy khách
là một máy trạm mà chỉ được sử dụng bởi 1 người dùng với để muốn thể hiện tính độc lập
cho nó.
Máy khách có thể sử dụng các hệ điều hành bình thường như Win9x, DOS, OS/2...
Bản thân mỗi một máy khách cũng đã được tích hợp nhiều chức năng trên hệ điều hành
mà nó chạy, nhưng khi được nối vào một mạng LAN, WAN theo mô hình chủ – khách thì
nó cịn có thể sử dụng thêm các chức năng do hệ điều hành mạng (NOS) cung cấp với
nhiều dịch vụ khác nhau (cụ thể là các dịch vụ do các máy chủ trên mạng này cung cấp),
ví dụ như nó có thể u cầu lấy dữ liệu từ một máy chủ hay gửi dữ liệu lên máy chủ đó.
Thực tế trong các ứng dụng của mơ hình chủ – khách, các chức năng hoạt động chính
là sự kết hợp giữa máy khách và máy chủ với sự chia sẻ tài nguyên, dữ liệu trên cả hai
máy.
Trong mơ hình chủ – khách, máy khách được coi như là người sử dụng các dịch vụ
trên mạng do một hoặc nhiều máy chủ cung cấp và máy chủ được coi như là người cung
cấp dịch vụ để trả lời các yêu cầu của các máy khác. Điều quan trọng là phải hiểu được vai
trị hoạt động của nó trong một mơ hình cụ thể, một máy khách trong mơ hình này lại có
thể là máy chủ trong một mơ hình khác. Ví dụ cụ thể như một máy trạm làm việc như một
máy khách bình thường trong mạng LAN nhưng đồng thời nó có thể đóng vai trị như một
máy in chủ (printer server) cung cấp dịch vụ in ấn từ xa cho nhiều người khác (clients) sử

dụng.
Máy khách được hiểu như là bề nổi của các dịch vụ trên mạng, nếu có thơng tin vào
hoặc ra thì chúng sẽ được hiển thị trên máy khách.” [10]
2.3.3. Server
“Server cịn được định nghĩa như là một máy tính nhiều người sử dụng (multiuser
computer). Vì một máy chủ phải quản lý nhiều yêu cầu từ các máy khách trên mạng cho
nên nó hoạt động sẽ tốt hơn nếu hệ điều hành của nó là đa nhiệm với các tính năng hoạt
động độc lập song song với nhau như hệ điều hành UNIX, Windows.
Server cung cấp và điều khiển các tiến trình truy cập vào tài nguyên của hệ thống.
Các ứng dụng chạy trên máy chủ phải được tách rời nhau để một lỗi của ứng dụng này
không làm hỏng ứng dụng khác. Tính đa nhiệm đảm bảo một tiến trình khơng sử dụng tồn
bộ tài ngun hệ thống.
Máy chủ đóng vai trò như là một nhà cung cấp dịch vụ cho các máy khách yêu cầu
tới khi cần, các dịch vụ như cơ sở dữ liệu, in ấn, truyền tệp, hệ thống... Các ứng dụng máy
chủ cung cấp các dịch vụ mang tính chức năng để hỗ trợ cho các hoạt động trên các máy
khách có hiệu quả hơn. Sự hỗ trợ của các dịch vụ này có thể là tồn bộ hoặc chỉ một phần
thơng qua IPC.

6


Để đảm bảo tính an tồn trên mạng cho nên máy chủ này cịn có vai trị như là một
nhà quản lý toàn bộ quyền truy cập dữ liệu của các máy khách, nói cách khác đó là vai trị
quản trị mạng. Có rất nhiều cách thức hiện nay nhằm quản trị có hiệu quả, một trong những
cách đang được sử dụng đó là dùng tên đăng nhập và mật khẩu.” [10]
2.3.4. Ngun tắc hoạt động
Trong mơ hình Client – Server, server chấp nhận tất cả các yêu cầu hợp lệ từ mọi nơi
khác nhau trên Internet, sau đó trả kết quả về máy tính đã gửi u cầu đó.
Máy tính được coi là máy khách khi chúng làm nhiệm vụ gửi yêu cầu đến các máy
chủ và đợi câu trả lời được gửi về.

Để máy khách và máy chủ có thể giao tiếp được với nhau thì giữa chúng phải có một
chuẩn nhất định, và chuẩn đó được gọi là giao thức. Một số giao thức được sử dụng phổ
biến hiện nay như: HTTPS, TCP/IP, FTP…
Nếu máy khách muốn lấy được thông tin từ máy chủ, chúng phải tuân theo một giao
thức mà máy chủ đó đưa ra. Nếu u cầu đó được chấp nhận thì máy chủ sẽ thu thập thông
tin và trả về kết quả cho máy khách u cầu. Bởi vì Server – máy chủ ln luôn trong trạng
thái sẵn sàng để nhận request từ Client nên chỉ cần client gửi yêu cầu tín hiệu và chấp nhận
u cầu đó thì Server sẽ trả kết quả về phía Client trong thời gian ngắn nhất.
2.4. TRÍ TUỆ NHÂN TẠO
2.4.1. Khái qt
“Trước hết xin nói về chữ ‘trí tuệ nhân tạo’, vốn được dùng rộng rãi trong cộng đồng
cơng nghệ thơng tin (CNTT). Trí tuệ nhân tạo (TTNT), tiếng Anh là artificial intelligence
hay chữ viết tắt được dùng phổ biến là AI, cịn có thể hiểu bình dân hơn là ‘thông minh
nhân tạo’, tức là sự thông minh của máy móc do con người tạo ra, đặc biệt tạo ra cho máy
tính, robot, hay các máy móc có các thành phần tính tốn điện tử. Trí tuệ nhân tạo là một
lĩnh vực của khoa học và công nghệ nhằm làm cho máy có những khả năng của trí tuệ và
trí thơng minh của con người, tiêu biểu như biết suy nghĩ và lập luận để giải quyết vấn đề,
biết giao tiếp do hiểu ngơn ngữ và tiếng nói, biết học và tự thích nghi…” [4]

7


2.4.2. Nhận diện vật thể
“Một trong những lĩnh vực quan trọng của Trí tuệ nhân tạo (Artificial Intelligence)
là thị giác máy (Computer Vision). Computer Vision là một lĩnh vực bao gồm các phương
pháp thu nhận, xử lý ảnh kỹ thuật số, phân tích và nhận dạng các hình ảnh, phát hiện các
đối tượng, tạo ảnh, siêu phân giải hình ảnh và nhiều hơn vậy. Object Detection có lẽ là khía
cạnh sâu sắc nhất của thị giác máy do số lần sử dụng trong thực tế.
Object Detection đề cập đến khả năng của hệ thống máy tính và phần mềm để định
vị các đối tượng trong một hình ảnh và xác định từng đối tượng. Object Detection đã được

sử dụng rộng rãi để phát hiện khuôn mặt, phát hiện xe, đếm số người đi bộ, hệ thống bảo
mật và xe không người lái. Có nhiều cách để nhận diện đối tượng có thể được sử dụng
cũng như trong nhiều lĩnh vực thực hành. Giống như mọi công nghệ khác, một loạt các
ứng dụng sáng tạo và tuyệt vời của Object Detection sẽ đến từ các lập trình viên và các nhà
phát triển phần mềm.” [4]
2.4.3. Nhận diện giọng nói
“Nhận dạng tiếng nói là một q trình nhận dạng mẫu, với mục đích là phân lớp
(classify) thơng tin đầu vào là tín hiệu tiếng nói thành một dãy tuần tự các mẫu đã được
học trước đó và lưu trữ trong bộ nhớ. Các mẫu là các đơn vị nhận dạng, chúng có thể là
các từ, hoặc các âm vị. Nếu các mẫu này là bất biến và khơng thay đổi thì cơng việc nhận
dạng tiếng nói trở nên đơn giản bằng cách so sánh dữ liệu tiếng nói cần nhận dạng với các
mẫu đã được học và lưu trữ trong bộ nhớ. Khó khăn cơ bản của nhận dạng tiếng nói đó là
tiếng nói ln biến thiên theo thời gian và có sự khác biệt lớn giữa tiếng nói của những
người nói khác nhau, tốc độ nói, ngữ cảnh và mơi trường âm học khác nhau. Xác định
những thông tin biến thiên nào của tiếng nói là có ích và những thơng tin nào là khơng có
ích đối với nhận dạng tiếng nói là rất quan trọng. Đây là một nhiệm vụ rất khó khăn mà
ngay cả với các kỹ thuật xác suất thống kê mạnh cũng khó khăn trong việc tổng quát hóa
từ các mẫu tiếng nói những biến thiên quan trọng cần thiết trong nhận dạng tiếng nói.” [13]
2.5. NODE.JS
2.5.1. Tổng quan
“NodeJS là một nền tảng được xây dựng trên “V8 Javascript engine” được viết bằng
ngôn ngữ C++ và Javascript. Nền tảng này được phát triển bởi Ryan Lienhart Dahl vào
năm 2009.
Node.JS ra đời khi các developer đời đầu của Javascript mở rộng nó từ một thứ bạn
chỉ chạy được trên trình duyệt thành một thứ bạn có thể chạy trên máy của mình dưới dạng
ứng dụng độc lập.” [9]
2.5.2. Lý do chọn Node.JS
- Ứng dụng Nodejs phần đông đều được viết bằng ngơn ngữ lập trình Javascript,
một ngơn ngữ thông dụng, được sử dụng rộng rãi và chạy được trên nhiều trình duyệt, nền
tảng, hệ điều hành...

- Nodejs khá nhẹ nhưng lại hiệu quả nhờ vào cơ chế non-blocking I/O, chạy đa nền
tảng.

8


- Tương thích với nhiều thiết bị. Bạn có thể chạy các ứng dụng phát triển bởi Nodejs
trên bất cứ thiết bị nào, dù là Mac, Window, Linux...
- Cộng đồng Nodejs khá lớn và được cung cấp miễn phí cho người dùng.
- Ứng dụng NodeJS có khả năng chạy đa nền tảng, thiết bị, đồng thời đáp ứng được
yêu cầu về thời gian thực.
- Node.JS có tốc độ cực kỳ nhanh, xử lý được nhu cầu sử dụng của lượng khách truy
cập ‘khổng lồ’ trong thời gian cực ngắn.
- Ứng dụng phát triển bởi Node.JS có khả năng xử lý nhiều yêu cầu truy cập cùng
lúc, giúp người quản trị có thể phân chia các luồng truy cập khi có quá nhiều người truy
cập vào hệ thống, gây quá tải.
2.6. FLUTTER
2.6.1. Tổng quan
“Flutter là một bộ công cụ phát triển giao diện phần mềm mã nguồn mở (an opensource UI software development kit) được tạo ra bởi Google. Flutter được sử dụng để tạo
ứng dụng đa nền tảng cho Mac, Windows, Android, iOS, Linux, Google Fuchsia.
Flutter được sinh ra dưới mục đích xây dựng những ứng dụng đẹp, native trên nhiều
hệ điều hành khác nhau từ cùng một codebase. Không giống như hầu hết những framework
đa nền tảng hiện nay, Flutter chỉ sử dụng duy nhất một ngôn ngữ là Dart để vừa thể hiện
giao diện người dùng, vừa lập trình business logic.” [1]
Bảng 2.1: Flutter lập trình UI và Business logic

2.6.2. Kiến trúc của Flutter
Những thành phần chính của Flutter bao gồm:
- Dart platform: Các ứng dụng Flutter được viết bằng ngôn ngữ Dart
- Flutter engine: Được viết chủ yếu bằng ngôn ngữ C++, cung cấp cách render mức

thấp bằng cách sử dụng thư viện đồ hoạ Skia của Google. Ngồi ra nó cịn tương tác với
các SDK của các platform khác như iOS và Android. Flutter engine sẽ tạo ra một môi

9


trường để chạy các ứng dụng Flutter. Nó cung cấp các thư viện cốt lõi, bao gồm các
animation, graphics, tài liệu, mạng, input, output…
- Foundation library: Là một thư viện ban đầu của Flutter, cung cấp các lớp cơ bản,
và các hàm để tạo ra ứng dụng, các Api để giao tiếp với Flutter engine
- Design-specific widgets: Flutter cung cấp 2 bộ widgets cơ bản, bao gồm Material
Design và Cupertino.
- Flutter Development Tools (DevTools): Các công cụ hỗ trợ cho các lập trình viên,
bao gồm các cơng cụ debug…
2.6.3. Lý do chọn Flutter
- Đa nền tảng: Là một bộ khung (framework), Flutter cho phép việc người lập trình
viên chỉ cần viết mã của mình một lần duy nhất, và có thể sử dụng mã lệnh này để tại thành
các ứng dụng trên nhiều nền tảng khác nhau, với Flutter, Framework vượt trội hơn và có
thể port ra hầu hết các nền tảng hiện nay, bao gồm: Linux, MacOS, iOS, Android, Browser.
- Tài liệu: Flutter có nguồn tài liệu phong phú và được bố trí một cách hợp lý. Giúp
người lập trình có thể dễ dàng học tập và bắt đầu
- Được phát triển dựa trên một ngôn ngữ mạnh mẽ, Dart: Dart là một ngôn ngữ mạnh
mẽ, rõ ràng và vô cùng dễ học, được phát triển bởi một cộng đồng to lớn
- Hot reload: Là một tính năng quan trong và nổi bật của Flutter cho phép người lập
trình có thể thấy được sự thay đổi của ứng dụng một cách ngay tức khắc sau khi lưu sự
thay đổi, người lập trình khơng cần phải xây dựng lại chương trình để thấy sự thay đổi như
những framework khác, với nó, bạn có thể tăng tốc độ phát triển ứng dụng
- Là một framework mã nguồn mở: Là một framework mã nguồn mở và hồn tồn
miễn phí, người lập trình viên có thể tham gia trực tiếp vào q trình phát triển của Flutter
cùng như có thể dễ dàng chuyển đổi cơng nghệ mà khơng tốn một chi phí nào

- Sử dụng được các API nền tảng: hầu hết các framework đa nền tảng hiện nay
không thể sử dụng được các API gốc của các nền tảng chính, khiến cho ứng dụng được
viết ra không thể tận dụng được các ưu thế vốn có của nền tảng.
2.7. NGƠN NGỮ DART
2.7.1. Tổng quan
Dart là một ngơn ngữ lập trình cho việc phát triển client, như là mobile hay web. Dart
được phát triển bởi Google và có thể sử dụng để xây dựng server và ứng dụng desktop.
Dart là một ngôn ngữ hướng đối tượng, dựa trên lớp, và garbage-collected với các cú
pháp tương tự với ngơn ngữ C. Dart có thể biên dịch ra các native code và Javascript.

10


2.7.2. Lý do chọn Dart
a. Dart rất linh hoạt
Dart là một ngơn ngữ lập trình rất linh hoạt, với Dart, có thể viết mã và chạy nó trên
rất nhiều mơi trường khác nhau như lập trình cho các hệ điều hành di động như Android,
Ios, hay thậm chí, Dart cịn có thể chạy trên các trình duyệt dưới dạng Website.
b. Dart là một ngôn ngữ mã nguồn mở
Những người lập trình. có thể trực tiếp đọc và tìm hiểu mã nguồn của ngơn ngữ Dart,
ngồi ra, họ cịn có thể lên ý tưởng dựa vào nó, tìm lỗi và phản hồi đến những nhà phát
triển ngôn ngữ Dart, điều này chính là điều giúp Dart khơng ngừng phát triển và mở rộng
cộng đồng.
c. Dart vô cùng dễ học
Dựa trên các ngơn ngữ lập trình trước đó, Dart có hệ thống cú pháp một cách rất trực
quan, ngoài ra, Dart cũng cung cấp một trang web tài liệu rất đồ sộ và dễ hiểu cho người
mới.
d. Thư viện phong phú
Với việc là một ngôn ngữ mã nguồn mở và việc phát triển cộng đồng tốt, Dart có
được một kho thư viện đồ sộ, phục vụ bất cứ công việc nào mà người lập trình viên cần.

e. Là một ngơn ngữ trẻ
Dart là một ngôn ngữ trẻ, được phát triển bởi Google, chính vì thế Dart có khơng
gian phát triển vơ cùng to lớn.
2.7.3. Cú pháp cơ bản
Một chương trình Dart sẽ được bắt đầu bằng hàm main. Cú pháp này tương tự với
các ngôn ngữ khác như C, Swift hay Kotlin.
a. Biến, chú thích và kiểu dữ liệu
Biến hay variable là một trong những khái niệm quan trọng trong lập trình, biến có
vai trị lưu trữ dữ liệu của chương trình. Ở Dart, để định nghĩa một biến, bạn có hai cách:
- Cách thứ nhất, sử dụng từ khóa var, sau đó là tên biến và gán giá trị ban đầu cho
biến. Với cách này, Dart sẽ tự nhận biết giá trị gửi ban đầu của biến và định nghĩa kiểu dữ
liệu cho biến như sau
- Cách thứ hai, sử dụng các kiểu dữ liệu để định nghĩa kiểu dữ liệu cho biến, sau đó
đặt tên cho biến. Với cách này, lập trình viên sẽ khơng cần gán giá trị ban đầu cho biến
Đối với chú thích, chú thích trong Dart tương tự với ngơn ngữ C. Chú thích trong một
dịng sẽ bắt đầu bằng //, chú thích nhiều dịng sẽ có cú pháp /* … */
Đối với kiểu dữ liệu, Dart có kiểu dữ liệu tĩnh, điều này có nghĩa là tất cả các biến sẽ
phải được khai báo rõ ràng kiểu dữ liệu trước khi biên dịch. Và biến này khơng thể thay
đổi trong suốt chương trình. Điều này trái ngược với các ngơn ngữ có kiểu dữ liệu động
như Python, Javascript khi mà một biến có thể lưu trữ nhiều dữ liệu của nhiều kiểu khác
nhau.
Dart có 4 kiểu dữ liệu cơ bản, bao gồm:
- int: số nguyên
- double: số thực
- bool: đúng hay sai
11


- String: chuỗi các ký tử
Bảng 2.2: Các kiểu dữ liệu cơ bản của Dart


b. Các tốn tử (Operatos)
Dart có hầu hết các tốn tử mà mọi ngơn ngữ khác có, bao gồm:
- Số học (Arithmetic): bao gồm các tốn tử cộng trừ nhân chia.
- So sánh (Comparison): Bao gồm các toán tử so sánh lớn hơn (>, >=), bé hơn (<,
<=) và toán tử so sánh bằng.
- Tăng, giảm (Increment, decrement): bao gồm các toán tử += với ý nghĩa là cộng
thêm, -= có ý nghĩa là trừ đi, *= có ý nghĩa là nhân với, và /= có ý nghĩa là chia đi.
- Lơ-gíc (Logical): bao gồm các tốn tử && có ý nghĩa là và, || có ý nghĩa là hoặc.
- Nhận biết null (Null-Aware Operator): Để nhận biết null, Dart sử dụng ??. Với ý
nghĩa, nếu biến đó có giá trị null, nó sẽ lấy giá trị sau tốn tử ??. Nếu khơng, giá trị của nó
sẽ được dữ nguyên.
c. Chuỗi ký tự
Trong Dart, chuỗi ký tự được ký hiệu bằng String, các chuỗi được thể hiện trong Dart
bằng cách sử dụng văn bản được bao quanh bởi dấu ngoặc kép đơn hoặc kép.
Để định nghĩa một biến chuỗi ký tự, người lập trình có thể sử dụng hai cách, một là
dùng kiểu suy luận (type interface), ta khởi tạo biến var và gán chuỗi ký tự cho biến đó,
cách thứ hai là dùng từ khóa String và đặt tên cho biến.
Tương tự như một số các ngơn ngữ khác như Kotlin hoặc Swift, bạn có thể nhúng
các giá trị của một biểu thức ở bên trong một chuỗi các ký tự bằng cú pháp ${biểu thức}
Trong Dart, tương tự với các ngôn ngữ khác, để có thể sử dụng các ký tự đặc biệt như
xuống dịng, dấu nháy, … Người lập trình cần dùng kí tự \.
d. Biến không thay đổi (Immutability)
Các biến không thay đổi là một trong những nội dung quan trọng trong mọi ngơn
ngữ. Ở trong Dart, bạn có hai cách để khai báo một biến không thay đổi, bao gồm sử dụng
từ khóa const hoặc final.

12



e. Nullability
Trong những phiên bản trước 2.12 của Dart, nếu người lập trình khi khởi tạo, khơng
gán giá trị cho biến, Dart sẽ tự động gán cho giá trị đó một giá trị null. Tuy nhiên, sau phiên
bản 2.12, Dart đã làm chặt chẽ vấn đề này, tạo ra những biến có thể null, và những biến
khơng thể null để có thể đảm bảo vấn đề null trong q trình biên dịch. Mọi những biến
không thể null sẽ không thể gán null cho biến. Một biến có thể null sẽ được ký hiệu thêm
dấu ? vào sau kiểu biến.
f. Kiểm sốt các luồng trong chương trình (Control Flow)
Kiểm sốt các luồng có thể hiểu là việc quyết định khi nào các đoạn lệnh nào được
chạy, hay không được chạy. Ta sử dụng điều kiện và vịng lặp để kiểm sốt các luồng trong
chương trình. Trong đó ta có các phương pháp chính:
- Sử dụng điều kiện: tương tự như những ngôn ngữ khác, ta sử dụng điều kiện với
if, else để quyết định dòng mã lệnh nào sẽ được chạy.
- Vòng lặp While: Với vòng lặp while, code sẽ được lặp đi, lặp lại cho đến khi điều
kiện của vòng lặp vẫn còn đúng
- Continue, Break: Dart sử dụng Continue và Break trong các vòng lặp, với ý nghĩa:
continue sẽ skip tất cả các đoạn code sau continue và bắt đầu một dịng mới, trong khi đó
break sẽ thốt ln vòng lặp
- Vòng lặp for: Trong Dart, người ta thường sử dụng vòng lặp for để lặp một đoạn
lệnh theo một số lần đã được định trước. Vòng lặp for bao gồm, khởi tạo, điều kiện và một
hành động
g. Collections
Collections trong Dart thường được dùng để nhóm các dữ liệu có cùng một kiểu dữ
liệu liên quan đến nhau. Dart có rất nhiều kiểu Collections và trong đó có hai kiểu phổ biến
nhất là List và Map.
- List: List trong Dart rất tương tự với mảng trong các ngôn ngữ khác. Được sử dụng
để lưu trữ và xử lý một danh sách các giá trị có thứ tự và được bắt đầu bằng 0. Để khởi tạo
một List, ta có thể sử dụng dấu ngoặc vng.
Ngồi ra, để truy cập, lấy dữ liệu từ trong list, ta điền vị trí của dữ liệu trong mảng
vào trong một dấu ngoặc vuông. Và như đã trình bày, kiểu List sẽ được bắt đầu tính từ vị

trí 0.
Thêm vào đó, kiểu Dart đã phát triển rất nhiều hàm để có thể làm việc với các Dart,
và trong đó, các hàm add, remove là các hàm cơ bản nhất, trong đó, hàm add dùng để thêm
dữ liệu vào List, và ngược lại remove để loại bỏ dữ liệu khỏi Dart.
- Map: Map là kiểu lưu trữ và sắp xếp dữ liệu dưới dạng key – value, trong đó, một
phần tử trong Map sẽ tồn tại hai thành phần, một là key có vai trị quan trọng, định nghĩa
phần tử đó trong Map, cho nên trong một Map key là duy nhất. Để khai báo một Map, ta
sử dụng dấu ngoặc nhọn:
Để lấy một phần tử trong Map, ta thường sử dụng key của phần tử đó, tương tự, để
xóa hoặc đổi giá trị của một phần tử, key luôn là một giá trị quan trọng.

13


h. Hàm
Hàm có thể hiểu là một nhóm các mã lệnh được nhóm lại với nhau, nhóm mã lệnh
này sẽ được tái sử dụng lại nhiều lần thông quan việc gọi tên hàm.
Trong Dart, một hàm sẽ có 4 phần chính:
- Giá trị trả về: là giá trị của hàm sẽ trả về khi hàm được thực thi hết. Thông thương,
một hàm luôn phải trả về một giá trị nào đó, kể cả null hay void.
- Tên hàm: Dùng để định danh hàm trong chương trình.
- Danh sách các tham số dùng cho hàm: Các tham số được truyền vào để hàm sử
dụng, thông thường các tham số sẽ được truyền vào một lần vào lúc gọi hàm.
- Thân hàm: nơi thực hiện chức năng của hàm.

Hình 2.2: Hàm trong Dart
Một trong những hàm đặc biệt trong Dart đó chính là hàm lồng trong một hàm khác
(Nesting Function). Hiểu đơn giản, đây là một hàm được khai báo bên trong một hàm khác.
Với hàm này, phạm vi sử dụng chỉ ở trong phạm vi hàm được khai báo, ra bên ngồi,
chương trình sẽ khơng thể sử dụng hàm.

Ngồi ra, ở Dart, ta cịn có thể định nghĩa một tham số là tham số tuỳ chọn, với tham
số này, người lập trình có thể lựa chọn việc truyền dữ liệu vào hay khơng, để định nghĩa
nó, Dart sử dụng cặp dấu ngoặc vuông [].
Một điều quan trọng về hàm trong Dart nữa, đó là việc đặt tên cho tham số, và điền
giá trị ban đầu cho tham số đó. Với Dart để thực hiện định danh cũng như phân biệt các
tham số có định danh giống tương tự, dễ gây nhầm lẫn trong việc truyền tham số, người
lập trình có thể đặt tên cho tham số đó dấu ngoặc nhọn.
i. Hàm nặc danh (Anonymous Functions)
Hàm nặc danh là một hàm đặc biệt trong Dart, với hàm này, bạn sẽ không cần phải
đặt tên cho hàm. Với hàm này, bạn có thể gán cho một biến, sử dụng nó như một tham số
truyền vào. Tính năng này tương tự với tính năng first-class functions trong Javascript.
2.8. CÔNG CỤ SỬ DỤNG
2.8.1. Visual Studio Code
a. Tổng quan
“Visual Studio Code là một trình biên tập mã được phát triển bởi Microsoft dành cho
Windows, Linux và macOS. Nó hỗ trợ chức năng debug, đi kèm với Git, có syntax
14


highlighting, tự hồn thành mã thơng minh, snippets, và cải tiến mã nguồn. Nó cũng cho
phép tùy chỉnh, do đó, người dùng có thể thay đổi theme, phím tắt, và các tùy chọn khác.
Nó miễn phí và là phần mềm mã nguồn mở theo giấy phép MIT, mặc dù bản phát hành của
Microsoft là theo giấy phép phần mềm miễn phí.
Visual Studio Code được dựa trên Electron, một nền tảng được sử dụng để triển khai
các ứng dụng Node.JS máy tính cá nhân chạy trên động cơ bố trí Blink. Mặc dù nó sử dụng
nền tảng Electron nhưng phần mềm này khơng phải là một bản khác của Atom, nó thực ra
được dựa trên trình biên tập của Visual Studio Online (tên mã là "Monaco").” [8]

Hình 2.3: Cơng cụ chỉnh sửa văn bản Visual studio code
b. Điểm mạnh của Visual studio code

- Một trình biên dịch mã lệnh nhẹ. Visual studio code là một trình biên tập mã lệnh
vơ cùng nhẹ, tuy nhiên nó lại vơ cùng mạnh mẽ bởi những tích hợp và thư viện của mình.
Hiện nay kích thước của visual studio trên Windows chỉ 40.8–68.3 MB, Linux là 46.5–
66.6 MB và macOS: 67.5 MB. Điều này giúp lập trình viên có thể sử dụng trình biên tập
này ngay cả trên những chiếc máy tính cũ.
- Visual studio có một hệ thống thư viện đồ sộ: Visual studio có một hệ thống thư
viện đồ sộ được phát triển bởi người dùng, chính vì thế người lập trình viên có thể dễ dàng
viết mã với bất cứ ngơn ngữ nào một cách thuận tiện, nhanh chóng thơng qua các thư viện
này. Ngoài ra, với hệ thống thư viện này, Visual studio code gần như là có thể mở rộng
một cách khơng giới hạn.
- Visual studio là một trình biên tập đa nền tảng, người lập trình có thể sử dụng trên
tất cả các thiết bị, giúp đồng bộ một cách nhanh chóng.

15


×