1. Trang chủ
  2. » Giáo án - Bài giảng

Bài giảng về tin học B (ViSual foxpro)

164 1,4K 15
Tài liệu đã được kiểm tra trùng lặp

Đ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 đề Giới thiệu về hệ quản trị cơ sở dữ liệu visual foxpro
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Tin Học
Thể loại Bài giảng
Định dạng
Số trang 164
Dung lượng 1,2 MB

Nội dung

Biến.Biến là đại lượng dùng để lưu trữ dữ liệu trong quá trình tính toán, mỗi biến gồm có tên biến và giá trị của biến, giá trị của biến có thể được thay đổi trong quá trình tính toán..

Trang 1

HỆ QUẢN TRỊ DỮ LIỆU VISUAL FOXPRO 6.0

Trang 2

CHƯƠNG 0

GIỚI THIỆU VỀ HỆ QUẢN TRỊ CƠ SỞ

DỮ LIỆU VISUAL FOXPRO

1 TỔNG QUAN.

1.1 Giới thiệu:

Foxpro là hệ quản trị cơ sở dữ liệu do hãng FOX sản xuất được dùng để giải quyết các bài toán trong lĩnh vực quản lý Khi các công cụ lập trình và các ứng dụng trên môi trường Windows ngày một nhiều thì hãng đã cho ra phiên bản Foxpro 2.6, chạy được trên hai môi trường DOS và Windows.

VISUAL FOXPRO là sản phẩm của hãng Microsoft, nó được kế

thừa từ Foxpro for Windows là một trong những dụng cụ tiện lợi để giải quyết các bài toán trong lĩnh vực quản lý cho những người chuyên nghiệp và không chuyên nghiệp

Từ khi phát triển đến nay, hãng Microft đã cho ra đời nhiều phiên bản VISUAL FOXPRO 3.0; 4.0; 5.0; 6.0; 7.0; 8.0; 9.0

Trang 3

1.2 Khởi động VISUAL FOXPRO

Sau khi đã cài đặt Visual Foxpro ta có thể khởi động nó bằng cách chạy file vfp.exe theo các cách sau:

+ Nhấn đúp nút chuột trái vào biểu tượng của Visual Foxpro trên Desketop.

+ Nhấn chuột vào menu Start, chọn Program, chọn Microsoft Visual Foxpro và kích nút phải của chuột vào đó.

Trang 4

1.3 Các chế độ làm việc:

Sau khi khởi động xong ta được màn hình giao diện Visual Foxpro như hình ảnh sau:

Trang 5

Visual Foxpro cho phép ta làm việc trên hai chế độ: chế độ tương tác và chế độ chương trình.

a Chế độ tương tác: (ví dụ)

b Chế độ chương trình(ví dụ)

Trang 6

1.4 Thoát khỏi Visual Foxpro.

+ Từ cửa sổ lệnh ta đưa vào lệnh:QUIT 

+ Chọn mục chọn Exit từ menu file

Trang 7

MỘT SỐ THAO TÁC TRÊN MÀN HÌNH GIAO DIỆN:

Trang 8

* Một số mục chọn thông dụng trên menu hệ thống:

Trang 9

1.2 CÁC KIỂU DỮ LIỆU CƠ SỞ:

Để quản lý, khai thác dữ liệu Visual Foxpro chia dữ liệu thành nhiều kiểu :

Logic: L: Kiểu logic.

General:G: Tổng quát

Trang 10

1.2.1: Kiểu Character:

Bao gồm các ký tự từ bảng mã ASCII ( như

a Z, A Z, 0 9, %, $ ).

Độ dài tối đa của một dữ liệu kiểu chuổi là 255

ký tự Visual Foxpro phân biệt chữ thường và chữ hoa đối với kiểu dữ liệu này.

1.2.2 Kiểu Numberic:

Chứa các số gồm có phần nguyên và phần thập phân ( Các ký tự 0 9, ( dấu chấm thập

phân) ).

1.2.3 Kiểu Logic:

Trang 11

1.2.4 Kiểu Date:

Dữ liệu kiểu Date chiếm 8 Byte, mặc định là

dạng MM/DD/YY dùng để lưu dữ liệu ngày,

tháng, năm.

Thứ tự của ngày, tháng, năm theo dạng

MM/DD/YY hay DD/MM/YY, DD/MM/YYYY, có thể được định dạng theo yêu cầu của người sử dụng.

1.2.5 Kiểu Currency.

Là kiểu tiền tệ, dùng để biểu diễn tiền tệ trong

dữ liệu, nó tương kiểu Numberic nhưng có dấu $

ở trước giá trị.

Trang 12

1.2.6 Kiểu Memo:

Kiểu này dùng để chứa một đoạn văn bản

có độ dài không nhất định trước như quá trình công tác, khen thưởng

1.2.7 Kiểu General:

Là kiểu tổng quát, dùng để chứa dữ liệu dạng âm thanh, hình ảnh

Trang 13

- Hằng kiểu Character: phải được để trong cặp dấu “ “.

Ví dụ:" NGUYỄN VĂN A" hay "Dự án"

Hằng chuổi rỗng: " " hay " " Hằng chuổi rỗng: " " hay " " └┘" hay "└┘" └┘" hay "└┘" └┘" hay "└┘" └┘" hay "└┘"

- Hằng kiểu Date: phải được để trong cặp dấu {}.

Ví dụ: { 12/05/00}, { 6/23/1999}.

Hằng ngày rỗng {}.

- Hằng kiểu logic: T hay F.

Trang 14

1.3.2 Biến.

Biến là đại lượng dùng để lưu trữ dữ liệu trong quá trình tính toán, mỗi biến gồm có tên biến và giá trị của biến, giá trị của biến có thể được thay đổi trong quá trình tính toán.

+ Tên biến: Bao gồm các chữ cái, chữ số, ký tự gạch dưới Tên biến không được bắt đầu bằng ký

tự số, không dài quá 10 ký tự và không được chứa các ký tự đặc biệt, ký tự rỗng.

Ví dụ: Tện biến hợp lệ; ab, xl, delte ,

Tệp biến không hợp lệ; ngày sinh, ho * ten,

Trang 15

Visual Foxpro phân chia ra ba loại biến:

- Biến nhớ: Gọi chung là biến, nó có thể

được tạo ra và hủy bỏ trong quá trình làm việc

- Biến hệ thống: Biến này là do Visual

Foxpro tạo ra, bắt đầu là ký tự gạch dưới

- Biến trường: là tên trường của các bảng

dữ liệu, biến trường được tạo ra khi file dữ liệu mở và ta có thể dùng nó khi file dữ

liệu chứa nó không được mở

Trang 16

1.4 HÀM:

Hàm là một đoạn chương trình dùng

để giải quyết một vấn đề nào đó, mỗi hàm gồm có tên và danh sách tham số đi kèm được để trong dấu (); khi sử dụng hàm ta gọi hàm thông qua tên hàm

Hàm có hai loại:

-Hàm có sẵn của Visual Foxpro

-Hàm do người sử dụng tạo ra

Trang 17

1.5 BIỂU THỨC.

- Là tổ hợp các toán hạng và toán tử

1.5.1 Toán hạng:

- Là các biến, hằng, hàm

Trang 19

+ Toán tử kiểu chuỗi:

+ : Nối chuỗi

$ : Xâu con

Ví dụ: "Tin học' + 'ung dung' " Tin học → " Tin học

Ví dụ: "Tin học' + 'ung dung' " Tin học → " Tin học

ung dung'

' Hue' $ 'TTHue' True' Hue' $ 'TTHue' True→ " Tin học → " Tin học

Trang 20

+Phép gán: Dùng để gán dữ liệu vào một thành phần khác như biến, biến vùng Phép gán dùng lệnh: = hoặc Store

Ví dụ:

Tuoi=5

Ngaysinh={02/05/1972}

Store 15 to a,b,c

Trang 21

Phép toán trên kiểu dữ liệu ngày:

<ngày giờ>+số ngày giờ

số+<ngày giờ> ngày giờ

<ngày giờ>-số ngày giờ

<ngày giờ>- <ngày giờ> Số

Trang 22

+ Toán tử quan hệ: Gồm có: <, >, =, (!),

<>, <=, >=, = =

+ Toán tử Logic: NOT, ! , AND, OR

Kết quả của các phép tính quan hệ, phép tính NOT, AND, OR đều trả về giá trị kiểu logic

Ví dụ: ( 5>3) and (3>7) False→ " Tin học

Ví dụ: ( 5>3) and (3>7) False→ " Tin học

NOT ((5>3) OR (3>7)) FalseNOT ((5>3) OR (3>7)) False→ " Tin học → " Tin học

Trang 23

►Thứ tự ưu tiên các phép toán:

Thứ tự ưu tiên các phép toán được tính theo trật tự sau(trên cùng một hàng thì cùng

Trang 25

1.6 FILE VÀ KIỂU FILE

1.6.1 File và kiểu file:

a File: Là tập hợp các thông tin có quan hệ với nhau và có cùng một bản chất được tổ chức theo một nguyên tắc nhất định để lưu trữ thông tin trên máy tính

Trang 26

b Các kiểu file chính của Visuala Foxpro.

*.dbf: File dữ liệu

*.idx: File chỉ mục

*.prg: File chương tình

*.dbc: File cơ sở dữ liệu

*.dll File thư viện liên kết động

*.pjx: File dự án

*.sex: File Form

Trang 27

1.6.2 File dữ liệu, cấu trúc, bản ghi, trường.

a File dữ liệu: Là tập hợp dữ liệu phản ánh

về một tập hợp các đối tượng quản lý thông qua các thuộc tính quản lý

Trang 28

+ Tên trường: ( Field name): Tên trường dài tối đa

Trang 29

+ Kích thước trường ( Field Width): Là khoảng bộ nhớ cần thiết để lưu trữ các giá trị của trường, kích thước của trường phụ thuộc vào kiểu trường.

Kiểu C: Tối đa 254 Byte

Kiểu N: Tối đa 20 Byte kể cả dấu thập phân

Kiểu L: Chiếm 1 Byte

Kiểu D: Chiếm 8 Byte

Kiểu M: Độ dài tùy ý, chiếm 10 Byte khi khai báo Currency: Chiếm 8 byte

+ Cấu trúc file: Mỗi tổ hợp trường sắp xếp theo thứ tự

nhất định gọi là cấu trúc của file dữ liệu, mỗi file dữ liệu chỉ có một cấu trúc cụ thể.

Trang 31

+Danh sách biểu thức:

Là các giá trị cần thể hiện của câu lệnh,

có thể là trường, tổ hợp các trường, biến, hàm, hằng

Trang 33

CHƯƠNG 2 THAO TÁC VỚI BẢNG DỮ LIỆU

2.1 KHÁI NIỆM:

► Bảng dữ liệu lưu trữ dữ liệu theo dạng

dòng và cột, mỗi dòng tượng trưng cho một record, mỗi cột tượng trưng cho một trường (field) của bảng

► Mỗi bảng dữ liệu được lưu trữ trên đĩa với tên file có phần mở rộng mặc định là DBF, mỗi bảng dữ liệu có 2 phần: cấu trúc và nội dung

Trang 34

Ví dụ: bảng nhân viên ( NHANVIEN.DBF)

Trang 35

Nội dung của file NHAN VIEN.DBF

Hoten Gioitinh ngsinh Namlvie

c lylich

Lê văn A T 02/04/78 1990 Cán bộ

Trần thị C F 11/12/69 1991 Nhân viên

Trang 36

2.2 TẠO BẢNG DỮ LIỆU:

Từ cửa sổ lệnh ta thực hiện

CREATE < TÊN BẢNG> 

► Ví dụ: CREATE nhan vien 

► Lúc này, màn hình sẽ xuất hiện hộp thoại để ta tạo cấu trúc bảng.

Trong đó:

Name: Tên trường

Type: Kiểu trường

Width: Độ rộng của trường

Decimal: Số chữ số lẽ sau phần dấu chấm thập phân, phần này chỉ có cho dữ liệu kiểu số.

Trang 37

Chú ý:

- Các tên trường không được trùng nhau, không được trùng với từ khóa.

- Đối với dữ liệu kiểu số nếu có phần thập phân thì

nó phải nhỏ hơn độ rộng của trường ít nhất là 2 đơn vị.

Để kết thúc việc nhập cấu trúc ta ấn đồng thời

phím Ctrl+W lúc này sẽ nhận được hộp thoại.

Lúc này: trả lời <No> thì sẽ quay lại cửa sổ

lệnh, trả lời < Yes> để tiến hành nhập các bản ghi Khi chọn Yes sẽ tiếp tục xuất hiện hộp

thoại.

Trang 38

Để kết thúc việc nhập dữ liệu ta nhấn tổ hợp < Ctrl+W> để ghi lại.

Chú ý: Để nhập dữ liệu cho trường

MEMO ta đưa con trỏ đến hộp memo rồi

nhấn tổ hợp phím Ctrl - PgUp lúc đó sẽ xuất hiện cửa sổ nhập dữ liệu cho trường này

sau khi kết thúc việc nhập dữ liệu cho nó ta

ấn tổ hợp Ctrl+W để ghi lại

Trang 39

2.3 MỞ VÀ ĐÓNG FILE DỮ LIỆU:

► Khi muốn làm việc với file dữ liệu nào thì điều đầu tiên ta phải mở file đó ( nạp vào bộ nhớ của máy tính) Để mở file dữ liệu ta sử dụng lệnh

Trang 40

►Tạo file dữ liệu bằng menu lệnh hoặc thanh công cụ chuẩn:

Trang 42

2.4 ĐỊNH VỊ CON TRỎ BẢN GHI

►Fox tạo ra một cơ chế định vị bản ghi để làm

việc gọi là con trỏ bản ghi

►Khi một file dữ liệu được mở thì con trỏ bản ghi được định vị ngay tại bản ghi đầu tiên

►Bản ghi hiện thời là bản ghi mà con trỏ bản ghi đang ở đó

Trang 43

2.4.1.Định vị con trỏ đến một bản ghi:

Để định vị con trỏ đến một bản ghi nào đó ta thực hiện lệnh:

GO<n>│[TOP]│[BOTTOM]

Chức năng: Dùng để chuyển con trỏ bản ghi

đến bản ghi có số hiệu <n> được chỉ định

trong câu lệnh

+ GOTOP: Dùng chuyển con trỏ bản ghi đến bản ghi về đầu file dữ liệu

+ GOBOTTOM: Dùng để chuyển con trỏ bản

ghi về cuối file dữ liệu

Trang 44

2.4.2 Định vị tiến, lùi: Lệnh Skip

► Cú pháp: SKIP[+ -][<n>]Cú pháp: SKIP[+ -][<n>]│-][<n>]│-][<n>]

►Tác dụng: Di chuyển con trỏ bản ghi về

trước ( - ) hay sau (+) so với bản ghi hiện thời n bản ghi

► Chú ý: Khi chỉ gõ lệnh SKIP  thì con trỏ bản ghi sẽ được di chuyển về sau bản ghi hiện thời một đơn vị

Trang 45

Tác dụng: Hiển thị nội dung của bản ghi trong

<phamvi> được chỉ định và thỏa mãn điều

kiện của các biểu thức logic đi sau FOR hoặc WHILE nếu có.

Trang 49

2.5.3 Lệnh ? / ?? :

► Cú pháp: ? / ??<danh sách biểu thức>

► Tác dụng: Lệnh này tính toán và cho hiển thị

kết quả của danh sách biểu thức lên màn hình.

► Chú ý: Lệnh ? : Trước khi in dữ liệu thì xuống

Trang 50

►Ví dụ: Cho biết họ tên, năm làm việc của người có số hiệu là 2.

Go 2 

? ' ho ten:', HOTEN ,'nam lam viec:', NAMLV

Trang 51

2.6 CHÈN, BỔ SUNG BẢN GHI

2.6.1 Chèn bản ghi:

► Cú pháp: INSERT [BEFORE] /[BLANK]

► Chức năng: Chèn một bản ghi ngay sau bản ghi hiện thời (nếu có [Before]) với nội dung được nhập vào.Nếu có [BLANK]thì chèn một bản ghi trắng

Trang 52

►Ví dụ:

Chèn một bản ghi vào sau bản ghi thứ 3

Go 3

Insert

Trang 54

2.7.1 Sửa chữa bằng tay:

► Cú pháp: BROWSE[FIELD<dsách trường >]

[FREEZE<trường>][NODELETE] [NOEDIT][FOR< Bthức logic>]

► Tác dụng: Hiển thị nội dung của bảng dữ liệu, mỗi bản ghi được thể hiện trong một hàng

( dòng), ta có thể xem và di chuyển hộp sáng từ trường này qua trường khác, bản ghi này sang

bản ghi khác và có thể sửa đổi nội dung của từng mẫu in trong bản ghi.

Trang 55

► Ví dụ: USe NHANVIEN 

Browse [FIELD<dsách trường>]: Cho

phép các trường trong danh sách này luôn được hiển thị trên màn hình.

[NODELETE]: Không cho phép xóa.

[NOEDIT]: Không cho phép sửa đổi.

► Ví dụ: Hiển thị nội dung của các trường HOTEN, NAMLV để tiến hành sửa đổi:

Browse field HOTEN,NAMLV freeze NAMLV

[FOR<bthức logic>]: Chỉ cho phép những biểu thức thỏa mãn điều kiện của biểu thức logic mới được hiển thị.

[ FREEZE] ch ỉ làm việc v trường được chỉ ra

Trang 56

b Lệnh Edit:

►Cú pháp: EDIT[<phạm vi>][FIELD<dsách trường>][NOAPPEND]

►[NODELETE][NOEDIT][FOR<Bthức logic>] [While<Bthức logic>]

►Tác dụng: Tương tự như lệnh BROWSE

nhưng các bản ghi được xuất hiện như ở lệnh APPEND(giao diện có khác)

Trang 57

2.7.2 Lệnh sửa đổi nội dung (REPLACE):

► Cú pháp: REPLACE [phạm vi>]

<trường1>WITH<Bthức1> [additive]

[<trường 2> WITH<Bthức2> [additive .]

[for<Bthức logic>][White<Bthức logic>]

► Tác dụng : Dùng để thay thế nội dung các

trường được chỉ ra của các bản ghi nằm trong

<phạm vi> và thỏa mãn điều kiện của <biểu

thức logic> đi sau FOR hoặc WHILE bởi các biểu thức tương ứng Phạm vi mặc định là bản ghi

hiện thời.

Trang 58

►Chú ý: kiểu dữ liệu của <biểu thức > và của <trường> tương ứng phản tương

đương nhau, nếu không thì Fox sẽ thông báo lỗi kiểu dữ liệu "Data type mismatch"

► Ví dụ: 1 Thay thế họ tên của nhân viên trong file nhanvien bằng chữ in

Replace all HOTEN with upper (HOTEN) 

2 Nâng lương của những nhân viên

nữ lên thêm 5000 đồng

Replace LUONG with LUONG + 5000 for !

Trang 60

► Ví dụ: Đánh dấu xóa những nhân viên có năm làm việc trước 1950

► delete for NAMLV<1950 

► Bước 2 Xóa các bản ghi Các bản ghi sau khi đã được đánh dấu xóa nếu quyết định thật sự muốn xóa nó thì thực hiện lệnh PACK, ngược lại nếu không muốn xóa nó thì thực hiện lệnh RECALL.

► Lệnh xóa bản ghi (PACK)

► Cú pháp: PACK

► Tác dụng: Xóa các bản ghi trong bảng dữ

Trang 61

* Lệnh phục hồi các bản ghi đã được đánh dấu xóa ( RECALL)

►Cú pháp: RECALL [<phạm vi>]

[FOR<Bthức logic>][WILE<bthức logic>]

►Tác dụng: Phục hồi lại các bản ghi mà

trước đó đã được đánh dấu xóa bởi lệnh

DELETE Phạm vi mặc định của lệnh này là bản ghi hiện thời

Trang 62

2.9 LỌC DỮ LIỆU:

Để hạn chế số lượng các bản ghi tham gia vào quá trình xử lý ta có thể lọc các bản ghi trong bảng dữ liệu thỏa mãn điều

kiện cho trước

Cú pháp: SET FILTER TO <Bthức logic>  Sau khi thực hiện lệnh lọc thì các lệnh tiếp theo sau lệnh này chỉ có tác dụng đối với các bản ghi thỏa mãn điều kiện lọc

Muốn hủy bỏ việc lọc dữ liệu ta thực hiện

Trang 63

Ví dụ:

1 Chỉ hiển thị những nhân viên nữ:

set filter to !GIOITINH 

Trang 64

2.10 THAO TÁC VỚI CẤU TRÚC BẢNG:

2.10.1 Lệnh xem cấu trúc ( Display structure)

►Cú pháp: DIPLAY STRUCTURE

►Tác dụng: Hiển thị cấu trúc của bảng dữ

liệu đang được mở bao gồm tên trường,

kiểu và độ rộng của trường

► Ví dụ: use NHANVIEN 

List structure

Trang 65

2.10.2 Sửa đổi cấu trúc bảng dữ liệu.

► Cú pháp: MODIFY STRUCTURE 

►Tác dụng: Hiển thị và cho phép sửa dổi cấu trúc bảng dữ liệu, kết thúc lệnh này nhấn tổ hợp phím Ctrl + W

► Ví dụ: use NHANVIEN 

modify structure 

Trang 66

2.10.3 Sao lưu cấu trúc bảng dữ liệu:

trường>] Mặc định của lệnh này là tất cả các

trường có trong bảng dữ liệu đang được mở.

Trang 67

►Ví dụ: Sao lưu cấu trúc của nhanvien

thành file có tên là luu.dbf nhưng chỉ gồm các trường: hote, gioitinh, nămlv

► use NHANVIEN 

► copy structure to LUU fields HOTEN,

GIOITINH, NAMLV 

►Chú ý: Bảng mới được tạo ra chỉ có cấu

trúc, không có nội dung

Trang 68

2.11 SAO CHÉP BẢNG:

► Cú pháp: COPY TO <tên bảng đích>[<phạm vi>][FIELDS<danh sách trường>][FORR<bthức

Trang 69

►Ví dụ: Tạo bảng dữ liệu có tên là nu.dbf

từ file nhan vien.dbf gồm các trường hoten, ngaysinh, namlv

NHANVIEN 

copy to NU fields HOTEN, NGAYSINH,

NAMLV for !GIOITINH 

use nu  && mở để xem kết quả List 

Trang 70

2.12 MỘT SỐ HÀM THÔNG DỤNG:

2.12.1 Các hàm về ngày tháng

► a Hàm DATE(): Cho ngày, tháng, năm hiện tại

của hệ thống Thứ tự ngày, tháng, năm của lệnh này phụ thuộc vào lệnh Set date.

► Ví dụ: Nếu ta thực hiện lệnh: SET DATE FRENCH

rồi thực hiện lệnh DATE ()  thì ngày hiện hành của hệ thống sẽ được hiện ra theo thứ tự là ngày, tháng, năm.

Trang 71

b Hàm YEAR (bthức date>): Cho năm (có 4

chữ số) của < bthức date>

Vis dụ: Year (date ()) cho năm hiện tại của → " Tin học

Vis dụ: Year (date ()) cho năm hiện tại của → " Tin học

ngày hệ thống.

c Hàm MONTH(<bthức date>): Cho tháng hiện tại của biểu thức ngày.

Ví dụ: Month (date ()) cho tháng của ngày hệ → " Tin học

Ví dụ: Month (date ()) cho tháng của ngày hệ → " Tin học

Ngày đăng: 28/07/2013, 01:26

HÌNH ẢNH LIÊN QUAN

Bảng dữ liệu ( giá trị được nhập vào), nếu - Bài giảng về tin học B (ViSual foxpro)
Bảng d ữ liệu ( giá trị được nhập vào), nếu (Trang 53)
Bảng ghi trong bảng dữ liệu được mở vượt  quá bản ghi cuối cùng, ngược lại cho giá - Bài giảng về tin học B (ViSual foxpro)
Bảng ghi trong bảng dữ liệu được mở vượt quá bản ghi cuối cùng, ngược lại cho giá (Trang 76)
Bảng ghi kế tiếp sẽ thỏa mãn điều kiện đã nêu. - Bài giảng về tin học B (ViSual foxpro)
Bảng ghi kế tiếp sẽ thỏa mãn điều kiện đã nêu (Trang 84)
Hình tròn elip Rounded  Rounded - Bài giảng về tin học B (ViSual foxpro)
Hình tr òn elip Rounded Rounded (Trang 146)
Hình ảnh con trỏ. - Bài giảng về tin học B (ViSual foxpro)
nh ảnh con trỏ (Trang 155)

TỪ KHÓA LIÊN QUAN

w