Khi người dùng chưa đăng nhập, tại trang chủ của ứng dụng, người dùng chọn các chức năng, hệ thống hiển thị form yêu cầu đăng ký/đăng nhập, người dùng nhấn nút Đăng nhập Pre-condition Ng
Trang 1Trường Đại Học Ngoại Ngữ - Tin Học Thành Phố Hồ Chí Minh
Khoa Công Nghệ Thông Tin
MÔN HỌC : PHÂN TÍCH THIẾT KẾ PHẦN MỀM
ĐỀ TÀI : PHÂN TÍCH THIẾT KẾ HỆ THỐNG QUẢN LÝ
ĐẶT XE Giáo Viên Hướng Dẫn : Bùi Thị Thanh Tú
Thành Viên :
1 Nguyễn Ngọc Hiền Thanh – MSSV: 21DH114103
2 Lê Thị Hải Yến – MSSV: 21DH112244
3 Võ Thiện Nhân – MSSV: 21DH111296
Trang 2Tp Hồ chí minh, Ngày … tháng … năm …
Trang 3Nhận xét của giảng viên
Trang 4
Lời cảm ơn
Trang 5Mục lục
I Giới thiệu chung 9
1 Khảo sát đối thủ 9
<Tên Đối thủ 1> 9
<Tên Đối thủ 2> 9
2 So sánh tính năng của các đối thủ 9
3 Đánh giá tổng kết 10
II Phân tích thiết kế hệ thống 10
1 Đặc tả hệ thống (System requirements) 10
2 Giả định (Assumption) cho hệ thống 10
3 Phạm vi của hệ thống (Scope) 10
4 Yêu cầu của người sử dụng hệ thống (Users requirements) 10
5 Ma trận actor và use case 10
6 Use case diagram 10
7 Đặc tả use case 10
8 Sequence diagram 10
9 State machine diagram 10
10 Activity diagram 10
11 Sơ đồ ERD 10
12 Giao diện mockup 10
13 Ảnh chụp source control system 10
III Kết luận 10
IV Tài liệu tham khảo 10
Trang 6Danh mục hình ảnh
Trang 7Danh mục bảng biểu
Trang 8Danh mục từ viết tắt
Trang 9Bảng phân công công việc
+ Vẽ sequence, activity, state, ERD (Đặt xe, đăng nhập, nhận cuốc, đăng xuất, xóa tài khoản)
Võ Thiện Nhân
21DH111296
+ Vẽ usecase diagram + Đặc tả UC 14-24, 36-47
+ Vẽ sequence,
activity, state, class (Đăng ký, đăng nhập bằng SĐT/Gmail/FB, đánh giá tài xế)
Lê Thị Hải Yến
21DH112244
Trang 10I Giới thiệu chung
Giới thiệu sơ yêu cầu bài tập (có thể copy phần yêu cầu trong file case study)
Dựa trên danh sách yêu cầu, xác định danh sách các yêu cầu chức năng của hệ thống
Sau đó mới dẫn nhập là dựa trên yêu cầu, nhóm đã khảo sát một số đối thủ sau trên thị trường (đưa tên danhsách đối thủ)
- Nhược điểm
- Ưu điểm
- Nhược điểm
<Tên Đối thủ 2>
- Nhược điểm
- Ưu điểm
- Nhược điểm
2 So sánh tính năng của các đối thủ
Đánh giá chất lượng từng yêu cầu A theo thang điểm từ (*) đến (*****), nếu chức năng đó không có thì để trống
Yêu cầu chức năng Đối thủ 1 Đối thủ 2 Đối thủ 3 Đối thủ 4 Đối thủ 5Yêu cầu 1
Trang 116 Yêu cầu của người sử dụng hệ thống (Users requirements)
III Phân tích thiết kế hệ thống
1 Ma trận actor và use case
-8 Xóa thông tin tài xế
UC0
-UC1
-UC1
2 Xóa thông tin khách hàng
UC1
-3 Sửa thông tin khách hàng
UC1
-4
Kích hoạt ví Moca Khách hàng Thiết lập phương thức
thanh toán
UC02UC1
Trang 128 Liên kết ZaloPay
UC02UC1
9 Xem tin nhắn Khách hàng Quản lý tin nhắn và thông báo UC02
Trang 133 Sử dụng ưu đãi
UC28UC4
9 Xem chi tiết chuyến đi
UC28UC5
7 Use case diagram
Usecase tổng quát (theo package)
Trang 14Usecase chi tiết (cho từng package: chi tiết đến mức usecase)
1 Quản lý đặt xe
Trang 152 Quản lý thông tin tài khoản khách hàng
Trang 163 Quản lý thông tin tài khoản tài xế
4 Thiết lập phương thức thanh toán
5 Quản lý thu nhập
Trang 176 Quản lý tin nhắn và thông báo
7 Quản lý lịch sử hoạt động
Trang 188 Quản lý lịch sử cuốc xe
Trang 199 Quản lý dữ liệu người dùng
10 Quản lý tài khoản
Trang 208 Đặc tả use case
Trang 21Đăng ký
Description Cho phép người dùng đăng ký tài khoản
người dùng nhấn nút Đăng ký
2 Khi người dùng chưa đăng nhập, tại trang chủ của ứng dụng, người dùng chọn các chức năng,
hệ thống hiển thị form yêu cầu đăng ký/đăng nhập, người dùng
nhấn nút Đăng nhập Pre-condition Người dùng chưa có tài khoản
Post-condition Hệ thống redirect đến trang đăng nhập
Error situations 1 Hệ thống quá tải
2 Hệ thống redirect đến trang Đăng ký
3 Người dùng nhập số điện thoại
4 Hệ thống gửi mã xác nhận OTP đến số điện thoại người dùng và redirect đến trang nhập mã xác nhận
Trang 224’ Hệ thống redirect đến trang đăng nhập/đăng ký
Alternative flow/
Process 2
5’ Người dùng nhập sai mã xác nhận OTP6’ Hệ thống hiển thị thông báo “Mã không đúng Bạn có thể thử thêm 2 lần nữa”
7’ < Tiếp tục thực hiện bước 5 của nhánh Standard flow >
Ở lần nhập mã OTP thứ hai : Nếu người dùng nhập đúng mã thì hệ thống hiển thị thôngbáo “Đăng ký thành công” và redirect đến trang chủ củaứng dụng
Nếu người dùng nhập sai mã OTP thì hệ thống hiển thịthông báo “Mã không đúng Bạn có thể thử thêm 1 lần nữa”
Ở lần nhập mã OTP thứ ba : Nếu người dùng nhập đúng mã thì hệ thống hiển thị thôngbáo “Đăng ký thành công” và redirect đến trang chủ củaứng dụng
Nếu người dùng nhập sai mã OTP thì hệ thống hiển thịthông báo “Bạn đã thử quá nhiều lần! Vui lòng thử lại sau ítphút”
Description Cho phép người dùng đăng nhập vào app Grab bằng nhiều phương
thức: Số điện thoại, Facebook, Gmail
người dùng nhấn nút Đăng nhập
Trang 232 Khi người dùng chưa đăng nhập, tại trang chủ của ứng dụng, người dùng chọn các chức năng,
hệ thống hiển thị form yêu cầu đăng ký/đăng nhập, người dùng
nhấn nút Đăng nhập Pre-condition Người dùng đã có tài khoản khách hàng của app Grab
Post-condition Hệ thống redirect đến trang chủ của ứng dụng
Error situations 1 Hệ thống quá tải
3 Người dùng chọn phương thức Đăng nhập bằng số điện thoại
4 Hệ thống redirect đến trang nhập số điện thoại
5 Người dùng nhập số điện thoại
6 Hệ thống gửi mã xác nhận OTP đến số điện thoại người dùng và redirect đến trang nhập mã xác nhận
9’ Người dùng nhập lại mã xác nhận OTP10’
Trang 24* *Nếu người dùng nhập đúng mã OTP
Hệ thống redirect đến trang chủ của ứng dụng
** Nếu người dùng nhập sai mã OTP
3’ Người dùng chọn đăng nhập bằng Facebook
<Tiếp tục thực hiện theo UC03: Đăng nhập bằng Facebook>
Alternative flow/
Process 4
3’ Người dùng chọn đăng nhập bằng Gmail
<Tiếp tục thực hiện theo UC04: Đăng nhập bằng Gmail>
Pre-condition Người dùng đã có tài khoản Facebook
Post-condition Hệ thống redirect đến trang chủ của ứng dụng
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
Trang 25Standard flow/process 1 Người dùng chọn nút Tiếp tục với Facebook
2 Hệ thống hiển thị thông báo “Grab muốn sử dụng Facebook để đăng nhập Việc này cho phép ứng dụng và trang web chia sẻ thôngtin về bạn”
* Nếu trước đây bạn đã đăng nhập Grab bằng FB
7 FB hiển thị thông báo “Trước đây bạn đã đăng nhập bằng FB Bạn có muốn tiếp tục không?”
8 Người dùng chọn nút Tiếp tục
9 Hệ thống redirect đến trang chủ của ứng dụng Grab
* Nếu trước đây bạn chưa đăng nhập Grab bằng FB
7’ FB hiển thị thông báo “Grab đang yêu cầu quyền truy cập vào: tên, ảnh đại diện và địa chỉ email của bạn”
Trang 26Đăng nhập bằng Gmail
Description Cho phép người dùng đăng nhập vào app Grab
nhập, người dùng chọn nút Tiếp tục với Google
Pre-condition Người dùng đã có tài khoản Google
Post-condition Hệ thống redirect đến trang chủ của ứng dụng
Error situations 1 Hệ thống quá tải
Standard flow/process 1 Người dùng chọn nút Tiếp tục với Google
2 Hệ thống hiển thị thông báo “Grab muốn sử dụng Google.com
để đăng nhập Việc này cho phép ứng dụng và trang web chia sẻ thông tin về bạn”
3 Người dùng chọn nút Tiếp tục
4 Hệ thống redirect đến link “accounts.google.com”
5 Người dùng điền thông tin đăng nhập Gmail và xác thực 2 bước hoặc chọn tài khoản đã lưu sẵn thông tin trên điện thoại
6
* Nếu trước đây bạn đã đăng nhập Grab bằng Gmail
Hệ thống redirect đến trang chủ của ứng dụng Grab
* Nếu trước đây bạn chưa đăng nhập Grab bằng FB
Hệ thống redirect đến trang nhập số điện thoại
7 <Tiếp tục thực hiện bước 5 nhánh Standard Flow của UC03>
Trang 27Description Cho phép người dùng thoát tài khoản đang đăng nhập trên hệ thống
người dùng nhấn nút Đăng xuất Pre-condition Người dùng đã đăng nhập vào hệ thống
Post-condition Hệ thống redirect đến trang Đăng nhập/Đăng ký
Error situations 1 Hệ thống quá tải
Standard flow/process 1 Trên bottom navigation menu, người dùng chọn Tài khoản
2 Người dùng nhấn nút Chỉnh sửa tài khoản
3 Hệ thống redirect đến trang chỉnh sửa tài khoản
4 Người dùng chọn nút Đăng xuất Alternative flow/
Process
Quản lý thông tin tài xế
tài xế
Description Cho phép system truy cập vào danh sách tài xế và thực hiện các
thao tác thêm, xóa, sửa thông tin tài xế
Trang 28Actor System Trigger Tại danh mục quản lý, người
dùng nhấn nút Quản lý thông tin tài xế
Pre-condition Người dùng đã đăng nhập vào hệ thống quản lý dành cho admin
Post-condition Hệ thống redirect đến trang danh sách tài xế
Error situations 1 Hệ thống quá tải
Process 1 3 Người dùng chọn nút Thêm
<Thực hiện như UC07 >
<Thực hiện như UC09: Sửa thông tin tài xế >
Thêm thông tin tài xế
xế
Description Cho phép system thêm thông tin tài xế mới vào danh sách tài xế
Actor System Trigger Tại trang danh sách tài xế, người
dùng nhấn nút Thêm Pre-condition Người dùng đã đăng nhập vào hệ thống quản lý dành cho admin
Trang 29Post-condition Hệ thống redirect đến trang danh sách tài xế
Error situations 1 Hệ thống quá tải
Standard flow/process 1 Tại trang danh sách tài xế, người dùng nhấn nút Thêm
2 Hệ thống redirect đến trang nhập thông tin tài xế
3 Người dùng điền thông tin tài xế
3 Người dùng điền sai/trùng thông tin đã có trên database
4 Hệ thống thông báo lỗi sai
5 <Quay lại bước 3 của nhánh Standard Flow>
Xóa thông tin tài xế
xế
Description Cho phép system xóa thông tin tài xế trong danh sách tài xế
Actor System Trigger Tại trang danh sách tài xế, người
dùng chọn tài xế và nhấn nút Xóa Pre-condition Số lượng tài khoản trong danh sách thông tin tài xế > 0
Post-condition Hệ thống redirect đến trang danh sách tài xế
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
System state in error 1 Hệ thống hiển thị thông báo “Hệ thống đang quá tải Vui lòng
Trang 30situations thử lại sau”
2 Hệ thống hiển thị thông báo “Mất kết nối Internet/4G Vui lòng thử lại sau”
3 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Standard flow/process 1 Tại trang danh sách tài xế, người dùng chọn tài xế muốn xóa
Process 2 4’ Người dùng chọn nút Hủy
5’ Hệ thống redirect đến trang danh sách tài xế
Quản lý thông tin khách hàng
tài xế
Description Cho phép system truy cập vào danh sách khách hàng và thực hiện
các thao tác thêm, xóa, sửa thông tin khách hàng
dùng nhấn nút Quản lý thông tin khách hàng
Pre-condition Người dùng đã đăng nhập vào hệ thống quản lý dành cho admin
Post-condition Hệ thống redirect đến trang danh sách khách hàng
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
System state in error 1 Hệ thống hiển thị thông báo “Hệ thống đang quá tải Vui lòng
Trang 31situations thử lại sau”
2 Hệ thống hiển thị thông báo “Mất kết nối Internet/4G Vui lòng thử lại sau”
3 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Standard flow/process 1 Tại danh mục quản lý, người dùng nhấn nút Quản lý thông tin
<Thực hiện như UC11 >
Sửa thông tin tài xế
Description Cho phép system sửa thông tin tài xế trong danh sách tài xế
Actor System Trigger Tại trang danh sách tài xế, người
dùng chọn tài xế và nhấn nút Sửa Pre-condition Số lượng tài khoản trong danh sách thông tin tài xế > 0
Post-condition Hệ thống redirect đến trang danh sách tài xế
Error situations 1 Hệ thống quá tải
Trang 323 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Standard flow/process 1 Tại trang danh sách tài xế, người dùng chọn tài xế muốn sửa
thông tin
2 Người dùng nhấn nút Sửa
3 Hệ thống hiển thị thông tin chi tiết tài xế
4 Người dùng thực hiện chỉnh sửa thông tin
6’ Người dùng nhấn nút Quay lại
7’ Hệ thống redirect đến trang danh sách khách hàng
Thêm thông tin khách hàng
hàng
Post-condition Hệ thống redirect đến trang danh sách khách hàng
Error situations 1 Hệ thống quá tải
Trang 33Standard flow/process 1 Tại trang danh sách khách hàng, người dùng nhấn nút Thêm
2 Hệ thống redirect đến form nhập thông tin khách hàng
3 Người dùng điền thông tin khách hàng
5’ Quay lại bước 3 của nhánh Standard Flow
Xóa thông tin khách hàng
khách hàng
Description Cho phép system xóa thông tin khách hàng trong danh sách tài xế
người dùng chọn khách hàng và
nhấn nút Xóa Pre-condition Số lượng tài khoản trong danh sách thông tin khách hàng > 0
Post-condition Hệ thống redirect đến trang danh sách khách hàng
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
Trang 34System state in error
5’ Hệ thống redirect đến trang danh sách khách hàng
Sửa thông tin khách hàng
khách hàng
Description Cho phép system sửa thông tin khách hàng trong danh sách tài xế
người dùng chọn khách hàng và
nhấn nút Sửa Pre-condition Số lượng tài khoản trong danh sách thông tin khách hàng > 0
Post-condition Hệ thống redirect đến trang danh sách khách hàng
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
Trang 35Standard flow/process 1 Tại trang danh sách khách hàng, người dùng chọn khách hàng
muốn sửa thông tin
2 Người dùng nhấn nút Sửa
3 Hệ thống hiển thị thông tin chi tiết khách hàng
4 Người dùng thực hiện chỉnh sửa thông tin
6’ Người dùng nhấn nút Quay lại
7’ Hệ thống redirect đến trang danh sách khách hàng
Trang 36Moca trong giao diện trang Thêmphương thức thanh toán để sử dụng dịch vụ thanh toán.
Pre-condition Khách hàng đã có tài khoản Moca và chưa kích hoạt ví Moca
Post-condition Khách hàng đã kích hoạt thành công ví Moca
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
System state in error
situations 1 Hệ thống hiển thị thông báo “Hệ thống đang quá tải Vui lòng thử lại sau”
2 Hệ thống hiển thị thông báo “Mất kết nối Internet/4G Vui lòng thử lại sau”
3 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Standard flow/process 1 Khách hàng mở ứng dụng và chọn kích hoạt ví Moca
2 Hệ thống yêu cầu khách hàng nhập số điện thoại đã đăng kývới tài khoản Moca
3 Khách hàng nhập số điện thoại và chọn tiếp tục
4 Hệ thống gửi mã xác thực đến số điện thoại của khách hàng
11 Khách hàng đăng nhập lại và sử dụng ví Moca
Alternative flow/ Process 1 5a Nếu khách hàng không nhận được mã xác thực, hệ thống
cho phép gửi lại hoặc gọi điện thoại để xác nhận
Trang 37Alternative flow/ Process 2 8b Nếu khách hàng nhập sai mật khẩu quá nhiều lần, hệ
thống thông báo và yêu cầu khách hàng thử lại sau một thời gian nhất định
Thêm phương thức thanh toán
phương thức thanh toán
Description Tính năng cho phép người dùng thêm phương thức thanh toán
mới vào tài khoản của mình trên hệ thống
Thêm phương thức thanh toán trên giao diện
Pre-condition Khách hàng đã đăng nhập thành công vào hệ thống
Post-condition Phương thức thanh toán mới được thêm vào tài khoản của
Standard flow/process 1 Khách hàng chọn chức năng Thêm phương thức thanh toán
trên giao diện
2 Hệ thống hiển thị form Thêm phương thức thanh toán với các phương thức thanh toán: thêm thẻ, liên kết tài khoản ngân hàng, liên kết zalopay
3 Khách chọn phương thức thanh toán cần thêm
4 Khách hàng nhập thông tin phương thức thanh toán và chọnnút Xác nhận
Trang 385 Hệ thống kiểm tra tính hợp lệ của thông tin và thêm phươngthức thanh toán mới vào tài khoản của khách hàng
6 Hệ thống hiển thị thông báo thành công và trở về trang quản lý phương thức thanh toán
Alternative flow/ Process 1 Khách hàng nhập sai thông tin thẻ:
4a Nếu khách hàng nhập sai thông tin thẻ, hệ thống hiển thị thông báo lỗi và yêu cầu khách hàng nhập lại thông tin đúng5a Khách hàng nhập lại thông tin và chọn nút Xác nhận
Alternative flow/ Process 2 Thêm thất bại do lỗi hệ thống:
5b Nếu quá trình thêm phương thức thanh toán bị lỗi, hệ thống hiển thị thông báo lỗi hệ thống và yêu cầu khách hàng thử lại sau
Thêm thẻ
Description Tính năng cho phép khách hàng thêm thẻ mới vào danh sách
phương thức thanh toán của mình trên hệ thống
Thêm thẻ trên giao diện Thêm phương thức thanh toán
Pre-condition Khách hàng đã đăng nhập thành công vào hệ thống
Post-condition Thẻ mới được thêm vào danh sách phương thức thanh toán
của khách hàng
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
System state in error
situations 1 Hệ thống hiển thị thông báo “Hệ thống đang quá tải Vui lòng thử lại sau”
2 Hệ thống hiển thị thông báo “Mất kết nối Internet/4G Vui lòng thử lại sau”
3 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Trang 39Standard flow/process 1 Khách hàng chọn chức năng Thêm thẻ trên giao diện
2 Hệ thống hiển thị form Thêm thẻ với các thông tin cần nhập: số thẻ, tên chủ thẻ, ngày hết hạn, mã CVV
Alternative flow/ Process 1 Khách hàng nhập sai thông tin thẻ:
3a Nếu khách hàng nhập sai thông tin thẻ, hệ thống hiển thị thông báo lỗi và yêu cầu khách hàng nhập lại thông tin đúng4a Khách hàng nhập lại thông tin và chọn nút Xác nhận
Alternative flow/ Process 2 Thêm thất bại do lỗi hệ thống:
4b Nếu quá trình thêm thẻ bị lỗi, hệ thống hiển thị thông báo lỗi hệ thống và yêu cầu khách hàng thử lại sau
Liên kết tài khoản ngân hàng
khoản ngân hàng
Description Tính năng cho phép người dùng liên kết tài khoản ngân hàng
với tài khoản của mình trên hệ thống để có thể sử dụng các dịch vụ liên quan đến tài chính
Actor Khách hàng Trigger Khách hàng chọn chức năng Liên
kết tài khoản ngân hàng trên giao diện Thêm phương thức thanh toán
Pre-condition Khách hàng đã đăng nhập thành công vào hệ thống và đã có
tài khoản ngân hàng
Post-condition Tài khoản ngân hàng được liên kết thành công với tài khoản
của khách hàng trên hệ thống
Error situations 1 Hệ thống quá tải
2 Mất kết nối mạng
3 Hệ thống bảo trì
Trang 40System state in error
situations 1 Hệ thống hiển thị thông báo “Hệ thống đang quá tải Vui lòng thử lại sau”
2 Hệ thống hiển thị thông báo “Mất kết nối Internet/4G Vui lòng thử lại sau”
3 Hệ thống hiển thị thời gian bảo trì và thông báo “Hệ thống đang bảo trì Vui lòng thử lại sau”
Standard flow/process 1 Khách hàng chọn chức năng Liên kết tài khoản ngân hàng
trên giao diện
2 Hệ thống hiển thị form Liên kết tài khoản ngân hàng
3 Khách hàng nhập thông tin tài khoản ngân hàng và chọn nút Xác nhận
4 Hệ thống kiểm tra tính hợp lệ của thông tin và liên kết tài khoản ngân hàng với tài khoản của khách hàng trên hệ thống
5 Hệ thống hiển thị thông báo thành công và trở về trang quản lý tài khoản ngân hàng
Alternative flow/ Process 1 Khách hàng nhập sai thông tin tài khoản ngân hàng:
3a Nếu khách hàng nhập sai thông tin tài khoản ngân hàng,
hệ thống hiển thị thông báo lỗi và yêu cầu khách hàng nhập lại thông tin đúng
4a Khách hàng nhập lại thông tin và chọn nút Xác nhận
Alternative flow/ Process 2 Liên kết tài khoản ngân hàng thất bại do lỗi hệ thống:
4b Nếu quá trình liên kết tài khoản ngân hàng bị lỗi, hệ thốnghiển thị thông báo lỗi hệ thống và yêu cầu khách hàng thử lại sau
Liên kết ZaloPay
ZaloPay
Description Tính năng cho phép người dùng liên kết tài khoản ZaloPay
vào tài khoản trên hệ thống để sử dụng trong quá trình thanh toán
Actor Khách hàng Trigger Khách hàng chọn chức năng Liên
kết ZaloPay trên giao diện
Pre-condition Khách hàng đã đăng nhập thành công vào hệ thống và có tài