1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỒ án THIẾT kế cơ sở dữ LIỆU bán ĐỒNG hồ ONLINE

41 17 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồ án Thiết kế cơ sở dữ liệu bán đồng hồ online
Tác giả Đặng Thanh Sang_N19DCCN155, Đoàn Long Bảo_N19DCCN015, Lê An Khánh_N19DCCN088
Người hướng dẫn Ths. Lưu Nguyễn Kỳ Thư
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Công nghệ thông tin
Thể loại đồ án
Định dạng
Số trang 41
Dung lượng 218,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Một đơn đặt hàng chỉ gởi cho một nhà cung cấp, trong đơn đặt hàng có thông tin mã đơn đặt hàng để phân biệt các đơn đặt hàng, ngày đặt hàng; một nhà cung cấp có thể được đặt hàng nhiều l

Trang 1

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN

Lê An Khánh_N19DCCN088

Trang 2

Mục tiêu :

THIẾT KẾ CƠ SỞ DỮ LIỆU QUẢN LÝ BÁN ĐỒNG HỒ ONLINE

2.Khảo sát thực tế bài toán :

- Công ty bán nhiều đồng hồ, thông tin đồng hồ bao gồm mã đồng hồ để phân biệt các đồng hồ với nhau, tên đồng hồ, giá, số lượng tồn, mô tả, trạng thái, hình ảnh Một loại đồng hồ có nhiều đồng hồ và một đồng hồ có 1 loại đồng hồ

- Một đồng hồ thuộc 1 hãng đồng hồ, một hãng có nhiều đồng hồ

- Nhà cung cấp sẽ cung cấp nhiều đồng hồ thuộc các hãng khác nhau Nhà cung cấp sẽ có thông tin: mã nhà cung cấp để phân biệt với nhà cung cấp khác, tên nhà cung cấp, địa chỉ, email, số điện thoại.

- Công ty có nhiều nhân viên, mỗi nhân viên có thông tin bao gồm mã nhân viên để phân biệt các nhân viên, họ, tên, giới tính, ngày sinh, địa chỉ, số điện thoại, email.

- Khi công ty muốn nhập hàng thì phải đặt hàng cho nhà cung cấp Một đơn đặt hàng chỉ gởi cho một nhà cung cấp, trong đơn đặt hàng có thông tin mã đơn đặt hàng để phân biệt các đơn đặt hàng, ngày đặt hàng; một nhà cung cấp có thể được đặt hàng nhiều lần

- Một đơn hàng có thể đặt nhiều đồng hồ khác nhau, một đồng hồ có thể được đặt hàng nhiều lần Một đồng hồ trong đơn đặt hàng phải chỉ rõ số lượng đặt, và đơn giá Ta phải ghi nhận nhân viên nào lập đơn đặt hàng cho nhà cung cấp Một đơn đặt hàng chỉ được lập bởi một nhân viên và một nhân viên lập được nhiều đơn đặt hàng.

- Nhân viên chỉ nhập hàng trên đơn đặt hàng đã lập Phiếu nhập có thông tin

mã phiếu nhập, ngày nhập; Một đơn đặt hàng chỉ có một phiếu nhập, nếu đơn hàng nhập còn thiếu thì xem như bỏ qua các đồng hồ nhập còn thiếu, muốn nhập lại thì ta sẽ lập đơn đặt hàng mới.

- Một phiếu nhập có thể có nhiều đồng hồ khác nhau và một đồng hồ có thể được nhập về nhiều lần với số lượng và giá khác nhau.

Trang 3

- Khách hàng có thể đặt hàng online nhiều lần với nhiều phiếu đặt khác nhau; phiếu đặt có thông tin: ngày đặt, họ tên người nhận, địa chỉ người nhận, số điện thoại người nhận, ngày giờ giao hàng Một phiếu đặt của khách hàng tại 1 thời điểm chỉ thuộc 1 trong các trạng thái sau: chờ duyệt, đã phân công nhân viên giao hàng, hoàn tất, đã hủy) và một phiếu đặt chỉ thuộc một khách hàng.

- Một phiếu đặt của khách hàng có thể có nhiều đồng hồ khác nhau và một đồng hồ có thể được đặt nhiều lần trên nhiều phiếu đặt Phiếu đặt sẽ được duyệt bởi một nhân viên

- Khách hàng có thông tin: id, số CMND, họ, tên, giới tính, ngày sinh, địa chỉ,

số điện thoại, email, mã số thuế.

- Đồng hồ có thể thay đổi giá theo thời gian, ta phải ghi nhận nhân viên thiết lập giá mới cho đồng hồ.

- Khi phân công nhân viên giao hàng, nhân viên duyệt đơn hàng sẽ in luôn hóa đơn Một phiếu đặt sẽ có một hóa đơn duy nhất tương ứng, thông tin hóa đơn gồm: số hóa đơn, ngày in hóa đơn, tổng tiền và mã số thuế.

- Khách hàng có thể trả hàng với điều kiện là phải có hóa đơn và được trả nhiều lần Nhân viên sẽ lập phiếu trả ghi nhận các mặt hàng trả, số lượng trả Đồng hồ chỉ được trả trong vòng 1 tuần sau khi mua.

- Các đồng hồ khi bán sẽ được bảo hành với thời gian (số tháng) tùy đồng hồ Mỗi đồng hồ sẽ có 1 phiếu bảo hành riêng gồm số phiếu bảo hành, ngày bắt đầu, ngày kết thúc Khi bảo hành phải ghi rõ trạng thái đồng hồ trước và sau khi bảo hành và nhân viên nhận, nhân viên giao trả.

- Trong năm, công ty sẽ có các đợt khuyến mãi (KM) giảm giá mặt hàng Mỗi đợt khuyến mãi có thông tin: mã đợt KM để phân biệt các đợt KM, lý do KM, ngày bắt đầu, ngày kết thúc Trong 1 đợt KM, mỗi đồng hồ có % giảm giá riêng Một đợt khuyến mãi được tạo bởi 1 nhân viên và 1 nhân viên có thể tạo nhiều đợt khuyến mãi khác nhau.

- Tất cả các phiếu đã lập đều phải ghi nhận nhân viên lập các phiếu đó.

Trang 4

PhieuBaoHanh(SoPhieuBH,NgayBD,NgayKT,TrangThaiTruocBH, TrangThaiSauBH) DotKhuyenMai(MaDotKM,LyDoKM,NgayBD,NgayKT,PhanTramGiam)

b/ Mô hình ERD

Trang 5

c/ Mô hình dữ liệu quan hệ từ ERD (đạt dạng chuẩn 3)

Trang 6

HangDH(MaH,TenH)

DongHo(MaDH,TenDH,Gia,SLTon,MoTa,TrangThai,HinhAnh, MaL,MaH,SoPhieuBH)

NhaCC(MaNCC,TenCC, DiaChi,Email,Sodt)

NhanVien(MaNV,Ho,Ten,GioiTinh,NgaySinh, DiaChi, Sodt,Email)

DonDatHang(MaDDH, NgayDatHang, MaNCC,MaNV)

PhieuNhap(MaPN, NgayNhap, MaNV,MaDDH)

PhieuDat(MaPD,NgayDat,HoTenNN,DiaChiNN,SodtNN, NgayGioGH,TrangThaiGH, MaNV,ID)

KhachHang(ID,CMND,Ho,Ten,GioiTinh,NgaySinh, DiaChi, Sodt ,Email,MaThue)

HoaDon(SoHD,NgayIn,TongTien, MaThue, MaNV,MaPD)

PhieuTra(MaPT,NgayTra,MaNV,SoHD)

PhieuBaoHanh(SoPhieuBH,NgayBD,NgayKT,TrangThaiTruocBH, TrangThaiSauBH, NVNhanBH,NVTraBH)DotKhuyenMai(MaDotKM,LyDoKM,NgayBD,NgayKT,PhanTramGiam, MaNV)

CungCap(MaCC,MaNCC, MaDH)

CTPDat(MaCTPD, SLDat,DonGia,MaDH, MaPD, MaDDH)

CTPNhap(MaCTPN,SLNhap,Gia,MaDH, MaPN)

ThietLap(MaTL, ThoiDiem ,Gia ,MaDH, MaNV)

CTPTra(MaCTPT,SLTra,MaDH, MaPT)

CTKM(MaCTKM,MaDH, MaDotKM)

d/ Mô hình Diagram

Trang 7

e/Từ điển dữ liệu

B ả n

g loại đ ồng h ồ

LoaiDH (MaL, TenL)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Not NULL

Tên loại

Bảng hãng đ ồng h ồ

HangDH (MaH, TenH)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Not NULL

Tên hãng

Bảng đ ồng h ồ

Trang 8

DongHo (MaDH,TenDH,Gia,SLTon,MoTa,TrangThai,HinhAnh, MaL,MaH,SoPhieuBH)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

2 TenDH nvarchar 50 Unique,Not null Tên đồng hồ

8 MaL varchar 10 Khóa ngoại, Not NULL Mã loại

9 MaH varchar 10 Khóa ngoại, Not NULL Mã hãng

10 SoPhieuBH varchar 10 Khóa ngoại, Unique,

Not NULL

Số phiếu bảo hành

NhaCC(MaNCC,TenCC, DiaChi,Email,Sodt)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

NhanVien(MaNV,Ho,Ten,GioiTinh,NgaySinh, DiaChi, Sodt,Email)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Trang 9

2 Ho nvarchar 40 Not NULL Họ

or ‘Nữ’,Default: ‘Nam’

Giới tính

DonDatHang(MaDDH, NgayDatHang, MaNCC,MaNV)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Not NULL

Mã nhà cung cấp

PhieuNhap(MaPN, NgayNhap, MaNV,MaDDH)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Trang 10

1 MaPN varchar 10 Khóa chính Mã phiếu nhập

GETDATE()

Ngày giờ nhập

Unique,Not null

Mã đơn đặt hàng

PhieuDat(MaPD,NgayDat,HoTenNN,DiaChiNN,SodtNN, NgayGioGH, TrangThaiGH, MaNV,ID)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

2 NgayDat datetime Default GETDATE() Ngày giờ đặt hàng

4 DiaChiNN nvarchar 50 Not NULL Địa chỉ người nhận

nhận

7 TrangThaiGH varchar 8 Chỉ nhận:

'ChoDuyet' or 'PhanCong' or 'HoanTat' or 'DaHuy'

Trạng thái giao hàng

Trang 11

8 MaNV varchar 10 Khóa ngoại, Not

KhachHang(ID,CMND,Ho,Ten,GioiTinh,NgaySinh, DiaChi, Sodt ,Email,MaThue)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

dân

‘Nam’ or ‘Nữ’,Default: ‘Nam’

Giới tính

Trang 12

Bảng hóa đơn

HoaDon(SoHD,NgayIn,TongTien, MaThue, MaNV,MaPD)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

GETDATE()

Ngày giờ in hóa đơn

Not null

Mã nhân viên

Unique, Not null

Mã phiếu đặt

PhieuTra(MaPT,NgayTra,MaNV,SoHD)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 SoPhieuBH varchar 10 Khóa chính Số phiếu bảo hành

Trang 13

3 NgayKT date Not null Ngày kết thúc

4 TrangThaiTruocBH nvarchar 20 Trạng thái đồng hồ

trước khi bảo hành

sau khi bảo hành

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 MaDotKM varchar 10 Khóa chính Mã đợt khuyến mãi

5 PhanTramGiam decimal (5,2) Not null % giảm giá

Not null

Mã nhân viên

CungCap(MaCC, MaNCC, MaDH)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

Trang 14

1 MaCC varchar 10 Khóa chính Mã cung cấp

CTPDat(MaCTPD, SLDat, DonGia,MaDH, MaPD, MaDDH)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 MaCTPD varchar 10 Khóa chính Mã chi tiết phiếu đặt

CTPNhap(MaCTPN,SLNhap,Gia,MaDH, MaPN)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 MaCTPN varchar 10 Khóa chính Mã chi tiết phiếu nhập

Trang 15

2 SLNhap int >0 Số lượng nhập

ThietLap(MaTL, ThoiDiem ,Gia ,MaDH, MaNV)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

CTPTra(MaCTPT,SLTra,MaDH, MaPT)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 MaCTPT varchar 10 Khóa chính Mã chi tiết phiếu trả

Not null

Mã đồng hồ

Trang 16

Not null

CTKM(MaCTKM,MaDH, MaDotKM)

STT Thuộc tính Kiểu dữ liệu Độ dài Ràng buộc Ghi chú

1 MaCTKM varchar 10 Khóa chính Mã chi tiết khuyến mãi

Thiết lập các ràng buộc toàn vẹn

1.Ràng buộc toàn vẹn miền giá trị:

Trang 17

Quan hệ Thêm Xóa Sửa

Trang 20

PhieuBaoHanh + - +( NgayBD, NgayKT)

DotKhuyenMai + - +( NgayBD, NgayKT)

Trang 21

3.Ràng buộc toàn vẹn liên bộ

Trang 29

+RB1: Khách hàng có thể trả hàng với điều kiện là phải có hóa đơn.

Trang 30

HoaDon + - *( SoHD)

5.Ràng buộc toàn vẹn khóa ngoại

+RB1: Mỗi đồng hồ chỉ thuộc 1 loại đồng hồ, 1 hãng đồng hồ và có 1 phiếu bảo hành

∀d ∈ DongHo, ∃l ∈ LoaiDH, ∃h ∈ HangDH, ∃p ∈ PhieuBaoHanh

-> d MaL = l MaL AND d.MaH = h MaH AND d.SoPhieuBH = p.SoPhieuBH

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi đơn đặt hàng chỉ được gởi bởi 1 nhà cung cấp và được lập bởi 1 nhân viên

∀d ∈ DonDatHang, ∃ncc ∈ NhaCC, ∃nv ∈ NhanVien

-> d MaNCC = ncc.MaNCC AND d.MaNV = nv MaNV

Cuối ∀

Tầm ảnh hưởng:

Trang 31

NhanVien - + *

+RB1: Mỗi phiếu nhập chỉ được nhập bởi 1 nhân viên và chỉ thuộc 1 đơn đặt hàng

∀p ∈ PhieuNhap, ∃nv ∈ NhanVien, ∃d ∈ DonDatHang

-> p MaNV = nv MaNV AND p.MaDDH = d.MaDDH

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi phiếu đặt chỉ được đặt bởi 1 khách hàng và chỉ được duyệt bởi 1 nhân viên

∀p ∈ PhieuDat, ∃k ∈ KhachHang, ∃nv ∈ NhanVien

-> p.ID = k.ID AND p MaNV = nv MaNV

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi hóa đơn chỉ thuộc 1 phiếu đặt và chỉ được in bởi 1 nhân viên

∀h ∈ HoaDon, ∃nv ∈ NhanVien, ∃p ∈ PhieuDat

-> h MaPD = p MaPD AND h.MaNV = nv.MaNV

Trang 32

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi phiếu trả chỉ thuộc 1 hóa đơn và chỉ được lập bởi 1 nhân viên

∀p ∈ PhieuTra, ∃h ∈ HoaDon, ∃nv ∈ NhanVien

-> p.SoHD = h.SoHD AND p.MaNV = nv.MaNV

Cuối ∀

Tầm ảnh hưởng:

Trang 33

+RB1: Mỗi nhà cung cấp có thể cung cấp nhiều đồng hồ khác nhau và ngược lại.

∃ c ∈ CungCap, ∀ n ∈ NhaCC, ∀ d ∈ DongHo

-> c MaNCC = n MaNCC AND c MaDH = d MaDH

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi phiếu đặt có nhiều đơn đặt hàng khác nhau, nhiều đồng hồ khác nhau, và ngược lại.

Trang 34

∃ c ∈ CTPDat, ∀ dh ∈ DongHo, ∀ p ∈ PhieuDat, ∀ ddh ∈ DonDatHang

-> c MaDH = dh MaDH AND c MaPD = p MaPD AND c MaDDH = ddh MaDDH

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi đồng hồ có thể được nhập nhiều lần trên nhiều phiếu nhập khác nhau và ngược lại

∃ c ∈ CTPNhap, ∀ d ∈ DongHo, ∀ p ∈ PhieuNhap

-> c MaDH = d MaDH AND c CTPNhap = p CTPNhap

Cuối ∀

Tầm ảnh hưởng:

Trang 35

+RB1: Mỗi đồng hồ có thể được thiết lập lại bởi nhiều nhân viên và ngược lại

∃ t ∈ ThietLap, ∀ d ∈ DongHo, ∀ n ∈ NhanVien

-> t MaDH = d MaDH AND t MaNV = n MaNV

Cuối ∀

Tầm ảnh hưởng:

+RB1: Mỗi đồng hồ có thể được trả lại trên nhiều phiếu trả khác nhau và ngược lại.

∃ c ∈ CTPTra, ∀ d ∈ DongHo, ∀ p ∈ PhieuTra

-> c MaDH = d MaDH AND c MaPT = p MaPT

Cuối ∀

Tầm ảnh hưởng:

Trang 37

πCMND, Hớ '+Ten,NgayDat,TongTien ( σTrangThaiGH='ChoDuyet' (PhieuDat*HoaDon*KhachHang))

b/ Liệt kê các đơn đặt hàng chưa nhập hàng trong khoảng thời gian (@tungay,

@denngay) Các đơn hàng in theo thứ tự thời gian đặt tăng dần Kết xuất:

Mã số ĐĐH Ngày đặt Họ tên NV lập phiếu Nhà cung cấp Tổng trị giá

πMaĐH, NgayDatHang, Hớ '+Ten, MaNCC, SLNhap*Gia ( σ@tungay<= NgayDatHang<=@denngay

(DonDatHang*NhanVien*PhieuNhap*CTPNhap))

c/ Tính doanh thu của cửa hàng theo từng tháng trong 1 năm @nam Kết xuất: Tháng Doanh thụ Lưu ý: Tháng không có doanh thu vẫn in ra, và không vượt quá ngày hiện tạị

πThang,( σ NgayIn=@nam ^ TrangThaiGH='HoanTat'

(Thang*HoaDon))

Trang 38

b) Bằng ngôn ngữ SQL:

Câu 4a

/*a/ Liệt kê phiếu đặt hàng chờ duyệt của khách hàng

(Số CMND, họ tên KH, Ngày đặt, Tổng tiền)*/

create view View1 as

select kh CMND , 'HoTenKH' = kh Ho + ' ' + kh Ten , pd NgayDat , hd TongTien

from PhieuDat pd

inner join HoaDon hd on pd MaPD = hd MaPD

inner join KhachHang kh on pd ID = kh ID

where TrangThaiGH = 'ChoDuyet'

go

SELECT * FROM View1

drop view view1

go

Câu 4b

/*

b/ Liệt kê các đơn đặt hàng chưa nhập hàng trong khoảng thời gian (@tungay, @denngay).

Các đơn hàng in theo thứ tự thời gian đặt tăng dần.Kết xuất:

Mã số ĐĐH Ngày đặt Họ tên NV lập phiếu Nhà cung cấp Tổng trị giá

*/

CREATE PROCEDURE Cau_4b ( @tungay date , @denngay date )

AS

BEGIN

select DDH MaDDH , N'Ngày đặt' = DDH NgayDatHang , N'Họ Tên NV Lập' = NV Ho + '

' + NV Ten , DDH MaNCC , N'Tổng trị giá' = CTPN SLNhap * CTPN Gia

from DonDatHang DDH

inner join NhanVien NV on DDH MaNV = NV MaNV

inner join PhieuNhap PN on DDH MaDDH = PN MaDDH

inner join CTPNhap CTPN on PN MaPN = CTPN MaPN

Xoá stored procudure

DROP PROCEDURE Cau_4b ;

go

Trang 39

Câu 4c

/*

c/ Tính doanh thu của cửa hàng theo từng tháng trong 1 năm @nam.

Kết xuất: Tháng Doanh thu.

Lưu ý: Tháng không có doanh thu vẫn in ra, và không vượt quá ngày hiện tại.

SELECT t Thang , sum ( Case when MONTH ( hd NgayIn )= t Thang then hd TongTien else 0

end ) N'Doanh thu'

from Thang t , HoaDon hd

inner join PhieuDat pd on hd MaPD = pd MaPD

where hd NgayIn < Getdate () AND YEAR ( hd NgayIn )= @nam and

pd TrangThaiGH = 'HoanTat'

group by t Thang

END ;

go

Trang 40

Thực thi store procedure

exec Cau_4c 2020 ;

Xoá stored procudure

DROP PROCEDURE Cau_4c ;

chỉ có số lượng bán mới tính trong khoảng thời gian.

*/

Tạo Stored Procedure

CREATE PROCEDURE Cau_4d ( @tungay date , @denngay date , @topp int )

AS

BEGIN

SELECT TOP ( @topp ) WITH TIES dh MaDH , dh TenDH ,

N'Số lượng bán' = sum ( Case when pd TrangThaiGH = 'HoanTat' then ctpd SLDat else 0 end ),

N'Đơn giá nhập trung bình' = sum ( ctpn Gia * ctpn SLNhap )/ count ( ctpn MaCTPN ),

N'Đơn giá xuất trung bình' = sum ( case when pd TrangThaiGH = 'HoanTat' then hd TongTien

else 0 end )/ count ( case when pd TrangThaiGH = 'HoanTat' then hd SoHD else null end ),

N'Lợi nhuận' = sum ( case when pd TrangThaiGH = 'HoanTat' then hd TongTien else 0 end )

sum ( ctpn Gia * ctpn SLNhap )

from DongHo dh , PhieuDat pd , CTPDat ctpd , CTPNhap ctpn , HoaDon hd

where ctpd MaDH = dh MaDH AND ctpn MaDH = dh MaDH and pd MaPD = hd MaPD

and pd.MaPD=ctpd.MaPD

and hd NgayIn BETWEEN @tungay AND @denngay

group by dh MaDH , dh TenDH

order by ( sum ( case when pd TrangThaiGH = 'HoanTat' then hd TongTien else 0 end )

sum ( ctpn Gia * ctpn SLNhap )) desc

END ;

go

Thực thi store procedure

exec Cau_4d '2017-11-22' , '2021-08-06' , 5 ;

Xoá stored procudure

DROP PROCEDURE Cau_4d ;

go

Ngày đăng: 23/01/2022, 14:14

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w