You are on page 1of 31

CƠ SỞ DỮ LIỆU 2

2LT2_29_Lê Mạnh Thắng


(1) Giảng viên: Vũ Bá Anh
ĐT: 091.323.9292
Email: AnhvbHvtc@gmail.com
(2) Nội dung HP: Cơ sở dữ liệu - HP2 (33 tiết)
ND: Xây dựng phần mềm quản trị CSDL Tài chính – Kế toán dựa trên
Visual FoxPro
Gồm:
- Hệ thống hoá kiến thức về VFP
- Bước đầu làm việc với VFP
- Làm quen với đối tượng và lớp trong VFP
- Tạo giao diện trong quản trị CSDL
- Tạo báo cáo trong quản trị CSDL
- [Phối hợp dữ liệu với các ứng dụng khác (Excel,…)]
- Quy trình xây dựng phần mềm.
(3) Tài liệu học tập
- Giáo trình: CSDL HP2 (HVTC)
- Tài liệu tham khảo:
+ Các tài liệu Tin học về Visual FoxPro
+ Các tài liệu hướng dẫn xây dựng phần mềm quản lý
+ Các tài liệu kế toán: Giáo trình Nguyên lý kế toán
Giáo trình Kế toán tài chính 1,2
(4) Yêu cầu:
- Ghi chép nội dung cơ bản
- Cài đặt Visual FoxPro để tự thực hành.
CHƯƠNG 1: HỆ THỐNG HOÁ KIẾN THỨC VỀ VISUAL FOXPRO
I. Khái quát chung về Visual FoxPro
1. Giới thiệu sản phẩm
- VFP là sản phẩm của Microsoft, phát triển qua nhiều phiên bản:
+ FoxBase
+ FoxPro
+ FoxPro for Windows
+ Visual FoxPro (5.0 – 9.0)
- VFP là hệ quản trị CSDL, tích hợp cả 3 chức năng cơ bản để viết phần
mềm, gồm:
+ Quản trị CSDL (3 chức năng chính):
 Create: Tạo lập CSDL (tạo ra các tệp dữ liệu và tạo ra MQH giữa các tệp)
 Update: Cập nhật dữ liệu (Thêm, sửa, xoá)
 Query: Truy vấn dữ liệu
+ Ngôn ngữ lập trình: VFP cung cấp hệ ngôn ngữ đủ để viết trình trong hệ quản
trị CSDL.
+ Công cụ tạo lập báo cáo
 Do đó, VFP là công cụ xây dựng phần mềm quản trị CSDL rất phù hợp
cho các đơn vị có quy mô nhỏ và vừa.
- VFP là sản phẩm phải cài đặt lên máy.
+ Tìm kiếm trên google, từ khoá “Visual Foxpro Download”
+ Tải về máy
+ Cài đặt: Chạy tệp chương trình Setup.exe hoặc Install
(Hiển thị: Done/Finish là xong)
+ Thư mục chứa: Microsoft Visual Foxpro 9 nằm trong thư mục “Program
files” của ổ đĩa chủ.
2. Môi tường làm việc của VFP
- Tệp chương trình chính để khởi động VFP: VFP9.EXE
- Khởi động xong: xuất hiện giao diện chính, quan tâm đến 2 thành phần
chính, gồm:
+ Thanh thực đơn: Chứa hệ thống thực đơn để lựa chọn công việc cần làm.
+ Cửa sổ lệnh (Command): là nơi gõ lệnh vào để máy tính thực hiện ở chế độ
hội thoại.
- Thoát khỏi VFP: hoạt động trên môi trường Windows : dùng lệnh QUIT
3. Một số khái niệm:
a. Tệp dữ liệu:
Có phần mở rộng (kiểu) là .DBF (Data Base File)  gọi mỗi tệp là DBF, là
bảng, gồm các bản ghi (records – dòng, mỗi records chứa thông tin 1 đối tượng)
và trường (Fields - cột, mỗi field chứa thông tin của 1 thuộc tính).
Field được xác định nhờ 4 thuộc tính:
- Field Name (tên trường): không quá 10 kí tự
- Type (kiểu dữ liệu của trường), gồm:
+ Character (C): chứa xâu
+ Numeric (N): chứa số
+ Date (D): chứa ngày
+ Logical (L): chứa T/F – đúng/sai
+ General (G): kiểu chung chứa tệp ảnh/ âm thanh/ video.
- Width (độ rộng): Số kí tự tối đa ghi trong trường, quy định:
+ Kiểu C: 254
+ Kiểu N: 20
+ Kiểu D: = 8 (dd,mm,yyyy)
+ Kiểu L: = 1 (chứa T/F)
- Decimal (số chữ số thập phân)
b. Khoá quan hệ:
- Điều kiện trở thành khoá: Trường phải được index (sắp xếp tăng hoặc
giảm dần)
- Các loại khoá:
+ Khoá chính (Primery): Chỉ có 1 khoá chính trong 1 tệp, nó đặc trưng cho
phía 1 của quan hệ;
+ Khoá dự tuyển (Candidate): Tương tự như khoá chính, mỗi bảng có thể có
nhiều khoá Candidate (khoá ngoại);
+ Khoá thường (Regular): khoá đặc trưng cho phía nhiều trong quan hệ 1-n.
 Trong trường xác định là khoá thường regular, có thể có nhiều bản ghi cùng
giá trị.
c. Một số kiểu tệp sử dụng trong VFP
- .DBF (Data Base File) : tệp dữ liệu
- .IDX (Index) : tệp chỉ dẫn để sắp xếp
- .PJX (Project) : tệp dự án
- .DBC (Data Base Contain) : bộ chứa CSDL

Trong tệp DBF cho phép chứa không quá 1 tỉ bản ghi (không quá 1 tỉ dòng).
II. Các yếu tố cơ bản trong VFP
1. Bộ kí tự
VFP sử dụng cả 2 bộ kí tự: Bộ mã ASCII (8 bit) và mã Unicode (16)
2. Từ khoá
VFP sử dụng các từ tiếng anh, cho phép viết tắt đến 4 kí tự đầu tiên.
VD: Modify = MODI; Structure = STRU
Chú ý: VFP không phân biệt chữ in và chữ thường, trừ trong xâu kí tự
VD: Tên biến là x, X đều coi là 1 biến.
3. Lời chú thích
- Các dòng bắt đầu bằng dấu * là chú thích (bị máy bỏ qua)
- Trong một dòng, các kí tự viết sau 2 dấu && là chú thích.
4. Các đại lượng
a. Hằng
Cách viết:
- Hằng số (Numeric): ±n.m (hằng thực), ±n (hằng nguyên)
- Hằng xâu (Character): vd ‘Bác Hồ’ hoặc “Bác Hồ” hoặc [Vietnam]
- Hằng ngày (kiểu date):
{^yyyy-mm-dd}
Vd: {^2021-10-20}
- Hằng logic (kiểu Logical)
.T. – ĐÚNG
.F. – SAI
b. Biến
VFP có 2 loại biến:
- Biến trường (Field): Tên các trường trong tệp dữ liệu đang mở (để làm
việc). Tên trường <= 10 kí tự, tệp trong CSDL thì tên trường cho phép <=
254 kí tự, bắt đầu phải là chữ cái.
- Biến nhớ (Variable): Là biến trung gian do người sử dụng đặt khi lập
trình, khác với tên trường. Tên biến nhớ <= 254 kí tự, bắt đầu không là
số. Vd: x1, x2, hoten, _nhap
c. Hàm
Toàn bộ các hàm: Đọc giáo trình, chỉ giới thiệu 2 nhóm hàm thường dùng trong
xử lý dữ liệu quản lí.
(*) Các hàm xử lý xâu:
- Left (xâu, n) và Right (xâu, n) : trích trái / phải n kí tự từ xâu.
VD: Left(‘ABC123’,2) = ‘AB’
Số hiệu sinh viên có dạng: CQ|57|41|02|001 tên trường sohieu C(10)
Điều kiện sinh viên chính quy: Left(sohieu,2) = ‘CQ’
(đây là thuộc tính gộp – phức hợp)
- SubStr (xâu, m, n) : trích n kí tự từ vị trí m trong xâu.
VD: Điều kiện để xác định là sinh viên chuyên ngành Tin học TCKT là:
SubStr(sohieu, 2, 5) = ‘41’
- LTRIM(xâu), RTRIM(xâu), ALLTRIM(xâu) : cắt bỏ hết kí tự trống ở
phía Trái/Phải/Cả hai phía trái phải của xâu.
- UPPER(xâu), LOWER(xâu) : chuyển xâu thành chữ in / thường
(*) Các hàm xử lý xâu:
- Hàm Val(xâu) : chuyển xâu thành số
Vd: Val(‘123.455’) = 123.45 ; Val(‘12A4H’) = 12; Val(‘abc’) = 0
- Hàm STR(số, n, [m]) : chuyển số thành xâu với độ dài là n kí tự và m kí
tự sau dấu chấm. Không có m thì ngầm định m = 0 (số nguyên)
Vd: STR (20/3,5,2) = “b6.67” với b – khoảng trống (blank)
STR(20/3,5) = ‘bbbb7’
- Hàm DTOC (ngày) chuyển ngày thành xâu
- Hàm CTOD (xâu) chuyển xâu thành ngày
- Year(ngày), Month(ngày), Day(ngày) cho giá trị là năm, tháng, ngày
trích từ ngày (mỗi thành phần đều là số)
Vd: Day({^2021-10-20}) = 20 Year({^2021-10-20}) = 2021
- Hàm Date() cho giá trị là ngày hiện tại
- Hàm IIF(bt_logic, bt1, bt2) nhận giá trị là giá trị của bt1 nếu bt_logic
đúng, ngược lại cho giá trị của bt2.
Vd: Viết công thức tính số tiền = khối lượng * đơn giá
Đơn giá là 100 nếu kl<=10, là 90 nếu kl thuộc (10,20], là 80 nếu kl > 20
IIF(kl<=10,kl*100,IIF(kl<=20,kl*90,kl*80))
n trường hợp => n-1 IIF
5. Biểu thức
a. Biểu thức số:
- Sử dụng các dấu phép toán số học: +, -, *, /, ^(hoặc **) (cộng, trừ, nhân, chia,
luỹ thừa)
- Tính giá trị: nhận giá trị là số, trật tự ưu tiên: tính hàm, trong (), tính luỹ thừa,
nhân chia, cộng trừ. Nếu cùng 1 mức độ ưu tiên thì tính từ trái sang phải, riêng
phép luỹ thừa thì từ phải sang trái.
Vd: 2^2^3. Tính 2^3 trước = 8, rồi tính 2^8=256
b. Biểu thức xâu
- Gồm các đại lượng liên kết dấu phép toán ghép xâu: +
- Giá trị các đại lượng ghép lại tuần tự
Vd: “ABC” + Left(“XYZ123”,2) = “ABCXY”
c. Biểu thức ngày
- Dạng: Ngày ± số
- Giá trị: hiểu là ± bao nhiêu ngày => biểu thức ngày nhận giá trị là ngày
Vd: {^2021-10-20}+5={^2021-10-25}
d. Biểu thức quan hệ
- Là biểu thức so sánh 2 đại lượng cùng kiểu bằng các dấu phép toán quan hệ: <,
>, =, <=, >=, # (<>). Riêng với 2 xâu, có thêm dấu phép toán $(xâu con)
- Vd:
(1) 1 > 5 + 1
(2) “Bac Ho” > “Bac Mao”
(3) {^2021-10-20} < {^2021-10-25}
(4) ‘uon’ $ “Phuong”
- Tính giá trị: Nếu thoả mãn thì nhận .T. không thoả mãn thì nhận .F.
(1) Nhận .F.
(2) Nhận .F.
(3) Nhận .T.
(4) Nhận .T. (trích 3 kí tự từ vị trí thứ 3 của xâu “Phuong”)
e. Biểu thức logic
- Là tập các đại lượng logic và biểu thức quan hệ liên kết bằng các dấu phép
toán logic gồm:
.NOT. (!) : phủ định
.AND. : Và
.OR. : Hoặc
- Giá trị: .T. hoặc .F. tính theo trật tự ưu tiên: (), NOT, AND, OR
6. Phạm vi
- KN: Phạm vi là một yếu tố cơ bản của VFP để xác định 1 tập hợp các bản ghi
trong tệp chịu tác động của lệnh.
- Các phạm vi thường dùng:
+ Các giá trị tường minh:
ALL – tất cả các bản ghi trong tệp
Vd: DELTE ALL
NEXT [n] – gồm n bản ghi kế tiếp từ bản ghi hiện tại
(ngầm định n = 1)
RECORD n – chỉ gồm 1 bản ghi thứ n
REST – gồm các bản ghi kể từ bản ghi hiện tại đến cuối tệp.
+ Các giá trị ngầm định:
ALL hoặc bản ghi hiện thời, tuỳ mỗi lệnh.
III. CÁC LỆNH CƠ BẢN CỦA VFP
1. Các lệnh tạo tệp dữ liệu
a- Lệnh CREATE
- Dùng tạo tệp dữ liệu
- Dạng:
+ Dạng khi tạo CSDL: tạo trực quan
CREATE tên_tệp (ngầm định .DBF)
Sau đó khai báo trực quan cấu trúc tệp, xong: ^W / nút OK
+ Dạng sử dụng khi viết trình:
CREATE TABLE tên_tệp (khai_báo_cấu_trúc)
VD: Tạo tệp dữ liệu chứa phiếu thu và chi tiền mặt (kế toán vốn bằng tiền),
gồm các thuộc tính sau: Số phiếu, ngày lập, TK ghi nợ, TK ghi có, Nội dung, Số
tiền, Nguyên tệ
(+Phiếu ghi nợ TK 111 là phiếu thu, ghi có TK 111 là phiếu chi;
+TK 111 có 2 TK cấp 2 là 1111(Tiền VN) và 1112(Tiền ngoại tệ);
+TK 1112 có TK cấp 3 gồm 2 kí tự để mã chi tiết ngoại tệ: vd 111201 – USD,
111202 – EUR, 111203 – JPN, 111204 – CHN, …)
Cần tạo tệp dữ liệu bằng lệnh:
CREATE TABLE phieutc (sophieu C(10), ngaylap D(8), Tkno C(10), Tkco
C(10), nd C(10), sotien N(15,2), nguyente N(10,1))
Nếu sử dụng dạng trực quan: CREATE phieutc rồi khai báo trực quan

Lệnh BROWSE để xem bảng


Lệnh REPLACE ALL ngaylap WITH DATE() : thay cột ngày lập trên tất cả
bản ghi bởi ngày hiện tại
SET CENTURY ON : hiện 4 chữ số năm
SET DATE TO FRENCH : cách viết ngày người Pháp (20/10/21)
SET DATE TO ITALIAN : cách viết ngày người Ý (20-10-21)
SET DATE TO AMERICAN : cách viết ngày người Mỹ
MODIFY STRUCTURE : sửa lại cấu trúc
b- Mở và đóng tệp dữ liệu
- Tệp nằm trên đĩa, muốn lầm việc với nó phải đọc vào RAM – gọi là mở
tệp. Làm xong phải ghi tệp trở lại đĩa – gọi là đóng tệp
- Các lệnh:
+ Mở: USE tên_tệp
+ Đóng:
USE && đóng tệp đang làm việc
CLOSE DATABASE && Đóng CSDL (tất cả các tệp trong CSDL)
CLOSE ALL && Đóng tất cả các tệp
c- Lệnh APPEND
- Dùng: bổ sung thêm các bản ghi vào cuối tệp
- Dạng:
+ Để nhập liệu từ bàn phím: APPEND
(Người sử dụng nhập lần lượt các bản ghi, kết thúc: ^W)
+ Nhập liệu trong chương trình:
APPEND BLANK  thêm 1 bản ghi trắng vào cuối bảng, sau đó viết
các lệnh khác để đưa dữ liệu vào bản ghi trắng đó.
+ Để lấy dữ liệu từ tệp khác để đưa vào tệp đang làm việc:
APPEND FROM tên_tệp [FOR bt_logic]
Vd: trên USB (định danh ổ đĩa G:) có tệp NHAP.DBF cùng cấu trúc bảng
phieutc. Cần lấy các chứng từ nhập ngày 19/10/2021 là phiếu thu trên USB bổ
sung vào cuối phieutc.
USE phieutc
APPEND FROM g:\nhap.dbf FOR ngaylap={^2021-10-19} .AND.
Left(tkno,3) = ‘111’
d- Các lệnh COPY STRUCTURE, COPY TO, COPY FILE (đọc giáo trình)
COPY TO tên_tệp [FIELDS ds_trường] [FOR bt_logic]
Vd: Sao tệp Phieutc sang USB, tên Thu.dbf chỉ lấy chứng từ trong tháng 9/2021
và chọn 4 cột: sophieu, tkno, tkco, sotien
USE phieutc
COPY TO g:\thu.dbf FIELDS sophieu, tkno, tkco, sotien FOR
MONTH(ngaylap)=9.and.YEAR(ngaylap)=2021
ĐK tháng 9/2021 có thể viết như sau:
COPY TO g:\thu.dbf FIELDS sophieu, tkno, tkco, sotien FOR
ngaylap>={^2021-09-01}.and.ngaylap<={^2021-09-30}

2. Di chuyển con trỏ bản ghi


a- Khái niệm: Con trỏ bản ghi là cơ chế đánh dấu bản ghi đang làm việc, khi
làm việc với bản ghi nào thì con trỏ đặt vào bản ghi đó, khi con trỏ đặt vào đâu
thì bản ghi đó là bản ghi làm việc (bản ghi hiện thời). Mới mở tệp, trỏ đặt vào
bản ghi đầu tiên.
b- Các lệnh di chuyển :
- Lệnh GOTO n / TOP / BOTTOM : chuyển con trỏ đến bản ghi thứ n /
đầu tiên / cuối cùng.
- Lệnh SKIP [n] : chuyển con trỏ đi |n| bản ghi kể từ bản ghi hiện thời.
Nếu n > 0 thì chuyển về phía cuối tệp, n < 0 thì chuyển về phía đầu tệp.
Ngầm định n = 1(không viết n).
- Ví dụ: Giả sử tệp Phieutc.dbf có 100 bản ghi
Lệnh Con trỏ
USE Phieutc Record: 1/100
GOTO 50 Record: 50/100
SKIP 10 Record: 60/100
SKIP -5 Record: 55/100
SKIP Record: 56/100
GOTO TOP / GO TOP Record: 1/100
GOTO BOTTOM / GO BOTTOM Record: 100/100
SKIP Record: EOF/100 (end of file)
SKIP ERROR: Out of range!
Chú ý: Khi con trỏ đặt ở eof, hàm eof() nhận giá trị đúng .T. ngược lại, con
trỏ không nằm ở eof thì hàm eof() nhận giá trị sai .F.
Tương tự, có dấu hiệu BOF (Begin Of File – bắt đầu tệp)
GO TOP : 1/100
SKIP -1 : BOF
Khi trỏ ở bof thì hàm bof() nhận giá trị .T. ngược lại nhận .F.
Hai dấu hiệu eof và bof (quản lý bởi 2 hàm là eof() và bof()) là căn cứ kết
thúc chu trình duyệt các bản ghi từ đầu đến cuối hoặc từ cuối lên đầu tệp.
- Lệnh LOCATE (định vị) :
+ Để định vị con trỏ đến bản ghi thoả mãn 1 điều kiện  Tìm kiếm bản
ghi thoả mãn đk đó.
+ Dạng: LOCATE FOR bt_logic
Bt_logic : điều kiện tìm kiếm
Cơ chế tìm kiếm: tuần tự từ đầu tệp.
Lưu ý: nếu tìm thấy thì hàm FOUND() nhận .T. (hàm eof() nhận .F.), nếu
không thấy thì FOUND() nhận .F. (eof() nhận .T.)
3. Các lệnh xem tệp dữ liệu
a. Lệnh LIST STRUCTURE
- Để hiện thị cấu trúc tệp
- Dạng: LIST STRUCTURE [TO PRINTER]
b. Hai lệnh LIST và DISPLAY
- Đều để hiển thị nội dung các bản ghi
- Dạng:
LIST [phạm_vi] [FIELDS ds_trường] [FOR bt_logic] [TO PRINTER]
DISPLAY [phạm_vi] [FIELDS ds_trường] [FOR bt_logic] [TO PRINTER]
Khác nhau: Phạm vi ngầm định của List là All, của Display là bản ghi hiện thời
(nếu có For thì là ALL)
- VD:
+In các phiếu chi tiền ngoại tệ trong quý 4 năm 2021
USE Phieutc
LIST ALL FOR left(tkco,4) =‘1112’.and.month(ngaylap) >=10.and.year
(ngaylap)=2021 TO PRINTER
+ Xem nội dung chứng từ số 123456
USE phieutc
LOCATE FOR sophieu = ‘123456’
DISPLAY
(Có thể viết 2 lệnh trên là: List for sophieu = ‘123456’ nhưng Bờm!)
4. Sửa tệp dữ liệu
a- Lệnh Modify Structure
- Để sửa cấu trúc tệp dữ liệu
- Dạng : Modify Structure
- Có 3 dạng sửa chữa:
+ Thêm trường: Nút Insert
+ Bớt trường: Nút Delete
+ Sửa trường: Sửa tên, kiểu, độ rộng, Decimal
(Xong: Phím ^W / Nút OK)
b- Lệnh BROWSE
- Dùng: Sửa nội dung bản ghi thủ công (thao tác trên Excel)
- Dạng: BROWSE [FIELDS ds_trường] [FOR bt_logic]
- Vd: Sửa lại chứng từ đã nhập trong ngày 25/10/2021
USE phieutc;
BROWSE FOR ngaylap = {^2021-10-25}
(xong: ^W)
USE
c- Lệnh REPLACE (thay thế)
- Dùng để thay nội dung của trường dữ liệu bởi một giá trị của biểu thức
(sửa dữ liệu bằng lệnh)
- Dạng: REPLACE [Phạm_vi] trường_1 WITH bt_1 [,trường_2 WITH
bt_2] [,…] [FOR bt_logic]
Phạm vi ngầm định là bản ghi hiện thời, nếu có FOR … thì là ALL
Chú ý: bt_1, bt_2, … cùng kiểu dữ liệu với các trường tương ứng.
- VD:
+ Vd1: Xét trên tệp Phieutc.dbf ; Yêu cầu: Sửa lại tỷ giá ngoại tệ USD
(mã 001) trên các chứng từ lập ngày 27/10/2021 thành 23600.
USE phieutc
REPLACE ALL sotien WITH nguyente*23600 FOR ngaylap={^2021-10-
27}.and.(Left(tkno,6)=’111201’.or.Left(tkco,6)=’111201’)
USE
+ Vd2: Giả sử có bảng dssv.dbf (danh sách sinh viên), có cấu trúc: (htd
C(30), ten C(10), sohieu C(10), ngaysinh D(8), d1 N(4,1), d2 N(4,1), d3
N(4,1), dtb N(5,2), pl C(4))
Tính điểm trung bình dtb biết số tín chỉ tương ứng: 3,2,3
Phân loại:
Giỏi (nếu dtb ≥ 8.5),
Khá (nếu dtb ∈ [7,8.5)),
Trung bình (nếu dtb ∈ [5,7)),
Yếu (nếu dtb < 5).
USE dssv
REPL ALL dtb WITH (d1*3+d2*2+d3*3)/8
REPL ALL pl WITH IIF (dtb>=8.5, “Giỏi”,IIF (dtb>=7, “Khá”,IIF
(dtb>=5, “Trung Bình”, “Yếu”)))
Có thể viết:
REPL ALL pl WITH “Giỏi” FOR dtb >= 8.5
REPL ALL pl WITH “Khá” FOR dtb >= 7 .and. dtb<8.5
REPL ALL pl WITH “Trung Bình” FOR dtb >= 5 .and. dtb<7
REPL ALL pl WITH “Yếu” FOR dtb < 5

(viết cách này không hay!)
Nhận xét: REPL vừa dùng để sửa dữ liệu, cũng hay dùng để tính toán
rồi ghi giá trị vào trường.
5. Xoá bản ghi
a- Lệnh DELETE
- Để đánh dấu xoá các bản ghi (chỉ đánh dấu chứ chưa xoá, xoá là lệnh
PACK)
- Dạng: DELETE [Phạm_vi] [FOR bt_logic]
- Phạm vị ngầm định là bản ghi hiện thời, nếu có FOR thì là ALL
- VD: Đánh dấu xoá bản ghi thứ 50
USE Phieutc
GOTO 50
DELETE
- VD: Đánh dấu xoá các chứng từ không định khoản kế toán (bỏ trống
Tkno và Tkco)
DELETE ALL FOR empty(tkno).and.empty(tkco)
b- Lệnh RECALL
- Để gọi lại các bản ghi bị đánh dấu xoá (huỷ bỏ đánh dấu xoá)
- Dạng: RECALL [Phạm_vi] [FOR bt_logic]
c- Lệnh PACK
- Dùng để xoá các bản ghi đã bị đánh dấu xoá
- Dạng: PACK
(Nếu phải dùng 3 lệnh trên, trình tự như sau: DELETE > RECALL >
PACK)
- Chú ý: Nếu đã PACK thì không RECALL lại được nữa, nếu chỉ DELETE
thì có thể RECALL lại được.
6. Sắp xếp bản ghi
a- Lệnh SORT
- Để sắp xếp các bản ghi rồi gửi kết quả sắp xếp sang 1 tệp dữ liệu khác
- Dạng: SORT ON ds_trường TO tên_tệp_dbf [FOR bt_logic]
Trong đó:
+ ds_trường: là tên các trường dùng làm tiêu thức sắp xếp, các trường
cách nhau dấu phẩy. Sau mỗi tên trường, có thể có các tham số:
/A (ascending – tăng dần) là tham số ngầm định (nếu không viết thì là /A)
/D (descending – giảm dần)
/C (character – bỏ qua sự khác nhau của chữ in và thường)
Nếu có nhiều tên trường thì ưu tiên cho các trường viết trước.
+ tên_tệp_dbf: là bảng dữ liệu chứa kết quả sau sắp xếp
- VD: In các phiếu thu trong tháng 10/2021 xếp theo ngày, cùng ngày thì
xếp theo số phiếu tăng dần.
USE phieutc
SORT ON ngaylap/A, sophieu/A TO vd1.dbf FOR Left(tkno,3) =
‘111’ .and. month(ngaylap)=10 .and. year(ngaylap) = 2021
USE vd1
LIST TO PRINTER
Chú ý: SORT chỉ sắp xếp dựa trên từng trường, không dựa trên biểu thức
tổng quát
b- Lệnh INDEX (chỉ dẫn)
- Dùng: tạo ra tệp chỉ dẫn để chỉ dẫn việc đọc tệp dữ liệu theo trình tự đã
sắp xếp.
- Dạng: INDEX ON biểu_thức TO tên_tệp_idx [FOR bt_logic]
Trong đó:
+biểu_thức: là tiêu thức index = tiêu thức sắp xếp. Index chỉ dẫn truy
nhập các bản ghi của tệp dữ liệu sao cho biểu thức có giá trị tăng dần.
Nếu muốn xếp theo nhiều tiêu thức, phải ghép các tiêu thức đó lại tuần tự
thành biểu thức xâu.
+tên_tệp_idx: là tệp chỉ dẫn, chỉ ghi 2 thông tin: số thứ tự bản ghi và giá
trị khoá sắp xếp
- VD1: In các phiếu thu trong tháng 10/2021 xếp theo ngày, cùng ngày thì
xếp theo số phiếu tăng dần.
USE phieutc
INDEX ON str(year(ngaylap),4) + str(month(ngaylap),2) +
str(day(ngaylap),2) + sophieu TO vd1.idx FOR Left(tkno,3) = ‘111’
.and. month(ngaylap)=10 .and. year(ngaylap) = 2021
LIST TO PRINTER
- VD2: In các phiếu cho tạm ứng trong năm 2021 xếp theo tháng, cùng
tháng xếp theo mã đối tượng tạm ứng.
(chi tạm ứng: Có 111, Nợ 141xxx với xxx là mã đối tượng tạm ứng)
USE phieutc
INDEX ON str(month(ngaylap),2) + substr(tkno,4,3) TO vd2.idx
FOR left(tkco,3)=’111’.and.left(tkno,3)=’141’.and.year(ngaylap)=
2021
LIST TO PRINTER
(ví dụ này không dùng được lệnh SORT)
7. Một số tính toán trên tệp dữ liệu
a- Lệnh COUNT (đếm)
- Dùng để đếm số bản ghi để suy ra số đối tượng tương ứng.
- Dạng: COUNT [TO biến] [FOR bt_logic]
Biến – biến nhớ (không trùng tên trường) để chứa kết quả sau đếm.
- Ví dụ 1: Đếm xem có bao nhiều lần chi ngoại tệ EUR trong năm 2021
USE phieutc
COUNT TO sl FOR left(tkco,6)=’111202’.and.year(ngaylap)=2021
? “Số lần chi EUR là:”, sl
- Ví dụ 2: Tệp dssv.dbf, cần xác định tỷ lệ sinh viên giỏi, sinh viên khá = ?
USE dssv
COUNT TO tsv &&đếm tổng sinh viên
COUNT TO tgioi FOR pl=’Giỏi’ &&đếm tổng sinh viên giỏi
COUNT TO tkha FOR pl=’Khá’ &&đếm tổng sinh viên khá
? “Tỉ lệ SV giỏi =”,tgioi/tsv*100,“%”
? “Tỉ lệ SV khá =”,tkha/tsv*100,“%”
b- Lệnh SUM (tổng số)
- Dùng để tính tổng các trường số
- Dạng: SUM [ds_trường] [TO ds_biến] [FOR bt_logic]
Trong đó:
ds_trường: là các tên trường cần tính tổng, ngầm định là mọi trường số
ds_biến: là tên các biến để ghi nhớ kết quả
- Ví dụ: Tính tổng tiền còn chưa thanh toán tạm ứng năm 2021
(Tạm ứng ghi nợ TK 141xxx, thanh toán tạm ứng ghi có 141xxx)
USE phieutc
SUM sotien TO tongtu FOR left(tkno,3)=‘141’.and.left(tkco,3)=’111’
.and.year(ngaylap)=2021
SUM sotien TO tongtt FOR left(tkco,3)=‘141’.and.year(ngaylap)= 2021
?”Tổng tiền chưa thanh toán tạm ứng trong năm 2021 =”,tongtu-tongtt
c- Lệnh Average (tính trung bình cộng)
Đọc giáo trình
Chú ý: thường dùng 2 số trung bình
+ bình quân cộng = kết quả SUM / kết quả COUNT
Vd: Lương bình quân của CBCNVC
+ bình quân gia quyền = kết quả SUM / kết quả SUM
Vd: Tính giá vật tư nhập kho bình quân.
d- Lệnh TOTAL (tổng cộng)
- Dùng để tính tổng các trường số trên từng nhóm bản ghi
- Khái niệm nhóm bản ghi: Là tập các bản ghi kế tiếp có cùng giá trị của
tiêu thức phân nhóm
Vd: Có bảng Phieuvt.dbf, nội dung:
Tenvt Mavt kl dg st
Sắt 10 LX 001 1 2 2
Gạch 002 3 4 12
Sắt F10 001 5 6 30
Căn cứ mã vật tư (mavt), tệp có 3 nhóm bản ghi <= sai!
Để phân nhóm đúng, trước khi phân nhóm, phải sắp xếp theo tiêu thức
phân nhóm
Vd: INDEX ON mavt TO vd1.idx
Các bản ghi sẽ có thứ tự: 1 > 3 > 2 > eof
- Dạng lệnh:
TOTAL ON biểu_thức TO tên_tệp_dbf [FIELDS ds_trường] [FOR
bt_logic]
Biểu thức: Tiêu thức phân nhóm
Tên tệp dbf: là tệp dữ liệu để chứa kết quả sau khi tính tổng nhóm, được
xác định như sau:
+ Cấu trúc: trùng với cấu trúc tệp gốc
+ Số bản ghi = số nhóm được tính tổng (tổng mỗi nhóm chứa trên 1 bản
ghi)
+ Nội dung bản ghi: trường đực tính tổng sẽ nhận giá trị là tổng nhóm,
còn ở trường không được tính tổng thì lấy giá trị trên bản ghi đầu tiên của
nhóm tương ứng.
Ds trường: là tên các trường số cần tính tổng, ngầm định là tất cả các
trường số
- VD:
+ Vd1: Xét bảng Phieuvt.dbf . Cần tính tổng khối lượng và số tiền mỗi loại
vật tư.
USE phieuvt
INDEX ON mavt TO vd1.idx
TOTAL ON mavt TO ketqua1.dbf FIELDS kl, st
USE ketqua1
LIST FIELDS tenvt, mavt, kl, st
+ Vd2: Xét tệp Phieutc.dbf. Cần xác định tổng tiền tạm ứng của từng đối
tượng. (Tkno: 111, tkco 141xxx)
USE phieutc
INDEX ON substr(tkno,4,3) TO vd2.idx FOR left(tkno,3)=’141’
.and.left(tkco,3)= ’111’
TOTAL ON substr(tkno,4,3) TO ketqua2
USE ketqua2
LIST FIELDS tkno, sotien, nguyente
+ Vd3: (BTVN) Xét Phieutc, lập báo cáo tổng tiền chưa thanh toán của từng
đối tượng tạm ứng?
(Tạm ứng: Nợ TK 141xxx, Thank toán tạm ứng: Có TK 141xxx)
Gợi ý: Khi thanh toán (ghi có 141) chuyển số tiền thành trừ (-) số tiền, rồi cộng
dồn. Tính xong rồi lại thay số tiền = - số tiền để trả lại giá trị ban đầu.
USE phieutc
INDEX ON substr(tkno,4,3) TO vd1.idx FOR left(tkno,3)=’141’
.and.left(tkco,3)= ’111’

8. Làm việc với nhiều tệp dữ liệu


Nhiều bài toán phải lấy dữ liệu từ nhiều tệp đồng thời  phải mở để làm việc
với nhiều tệp.
a. Mở nhiều tệp dữ liệu
- Nguyên lý: Bộ nhớ đệm cho tệp có thể được chia thành nhiều vùng riêng biệt
để đọc nhiều tệp vào đồng thời. Các vùng được đánh số từ 1 – 10 000, riêng 10
vùng đầu có thể gọi bằng chữ cái từ A đến J.
- Lệnh:
+ Cách 1: USE tên_tệp IN vùng [ALIAS bí_danh]
+ Cách 2:
SELECT vùng
USE tên_tệp [ALIAS bí_danh]
Giải thích:
Vùng: có giá trị từ 1 – 10 000, thường dùng kế tiếp để dễ nhớ. Nếu vùng = 0 thì
tệp được mở ở vùng rỗi gần nhất.
Bí danh: tên ngắn do người sử dụng đặt để gọi cho dễ. Ngầm định là tên tệp.
- Ví dụ:
USE phieutc IN 1
USE danhmuctaikhoan IN 0 ALIAS dmtk && mở ở vùng 2 (là vùng
rỗi gần nhất với vùng 1)
SELECT 3
USE danhmucdoituong ALIAS dmdt

b. Chọn tệp để làm việc


- Nguyên tắc: Muốn làm việc với tệp nào thì chọn vùng làm việc chứa tệp đó
- Dạng lệnh:
SELECT vùng/bí_danh
- Ví dụ: Muốn sắp xếp bảng danh mục tài khoản theo sohieu C(10) và sửa
bảng danh mục đối tượng bằng browse
USE phieutc IN 1
USE danhmuctaikhoan IN 0 ALIAS dmtk
SELECT 3
USE danhmucdoituongALIAS dmdt
SELECT 2 && hoặc viết sele b hoặc sele dmtk
INDEX ON sohieu TO vd.idx
SELECT dmdt &&hoặc viết sele 3
BROWSE
(xong: ^W = ctrl + W)

c. Đóng tệp
- Nếu đóng tất cả:
CLOSE ALL hoặc CLOSE DATABASE
- Nếu đóng từng tệp, phải chọn vùng rồi đóng tệp trong vùng đó:
SELECT vùng/bí_danh
USE
- Vd: Đóng tệp danh mục tài khoản
SELECT 2 &&hoặc viết sele dmtk
USE
Lúc này vùng 2 rỗng

d. Tham chiếu đến dữ liệu ở vùng khác (trong bảng khác)


- Nguyên tắc: Tham chiếu kiểu quan hệ: bí_danh.tên_trường
- Vd: Cần hiển thị nội dung chứng từ số 123456 trong đó tk nợ có kèm theo tên
(tên TK lấy trong bảng danh mục tài khoản (tentk C(30), sohieutk C(10), loaitk
C(1)))
TK loại 0 là tk không có số dư: doanh thu, chi phí, …
TK loại 1 số dư bên nợ
TK loại 2 số dư bên có
TK loại 3 lưỡng tính
USE phieutc IN 0
USE danhmuctaikhoan IN 0 ALIAS dmtk
SELECT 1
LOCATE FOR sophieu = ‘123456’
Nhap=tkno
SELECT dmtk
LOCATE FOR sohieutk=nhap
SELECT 1
DISPLAY FIELDS ngaylap, tkno, dmtk.tentk, sotien, nguyente

e. Thiết lập mối quan hệ giữa hai bảng


- Hai bảng có thể có quan hệ với nhau (1-1 hoặc 1-n) thông qua khoá quan hệ.
Theo mức độ quan hệ, chia thành 2 loại quan hệ:
+ Quan hệ bền vững: là quan hệ được thiết lập chặt chẽ từ khi tạo ra CSDL
Quan hệ bền vững có đặc điểm:
 Luôn tồn tại khi mở CSDL (chỉ khi đóng lại mới bị mất)
 Khi con trỏ di chuyển trên bảng này không ảnh hưởng ở bảng quan hệ
+ Quan hệ tạm thời: là quan hệ được thiết lập bằng lệnh tạo quan hệ
SET RELATION
Quan hệ tạm thời có đặc điểm:
 Chỉ tồn tại sau khi thiết lập, tự động mất khi 1 trong 2 bảng bị đóng.
 Khi con trỏ di chuyển trên bảng này thì ở bảng quan hệ sẽ tự động di
chuyển đến dòng tương ứng theo khoá quan hệ.
- Thiết lập MQH
+ Tạo MQH bền vững: Xét trong phần tạo CSDL
+ Tạo MQH tạm thời
Để tạo MQH tạm thời, bảng được quan hệ (bảng con) phải được INDEX
theo khoá quan hệ.
Lệnh: SET RELATION TO khoá INTO bí_danh
Trong đó: khoá là khoá quan hệ ở bảng cha; bí_danh để xác định bảng con
(được đặt quan hệ). Khoá quan hệ ở bảng con chính là biểu thức đã dùng để
index nó.
- Ví dụ: Hiển thị nội dung một bảng gồm các cột: số phiếu, ngày lập, tài
khoản ghi nợ, số tiền, tên TK ghi nợ (lấy từ bảng danh mục tài khoản,
gồm các trường: sohieutk C(10), tentk C(30), loạitk C(10))
USE phieutc IN 0
USE dmtk IN 0
SELECT dmtk
INDEX ON sohieutk TO vd.idx
SELECT phieutc
SET RELATION TO tkno INTO dmtk
LIST FIELDS sophieu, phieutc.ngaylap, tkno, sotien, dmtk.tentk

9. Các lệnh tổ chưc cấu trúc chương trình


a- Lệnh IF
- Để tổ chức cấu trúc điều kiện – rẽ nhánh
- Dạng:
IF bt_logic
Các_lệnh_1
[ELSE
Các_lệnh_2]
- Ví dụ: Kiểm tra delta khi giải phương trình bậc 2
IF delta < 0
? “Phương trình không có nghiệm”
WAIT “Ấn phím bất kỳ để tiếp tục”
ELSE
? “x1=”, (-b-sqrt(delta)) / (2*a)
? “x2=”, (-b+sqrt(delta)) / (2*a)
WAIT “Press any key to continue …”
ENDIF
b- Lệnh DO CASE (xử lý trường hợp)
Đọc giáo trình
c- Lệnh FOR
- Dùng: tổ chức chu trình có số lần lặp biết trước
- Dạng:
FOR biến = bt1 TO bt2 [STEP bt3]
Các lệnh trong thân chu trình
ENDFOR
- VD: Chương trình tính n!
INPUT “Vào số nguyên n=?” TO n
p=1
FOR i=1 TO n STEP 1
p=p*i
ENDFOR
? n, “!=”, p
d- Lệnh DO WHILE
- Để tổ chức một chu trình (vòng lặp) bất kỳ
- Dạng:
DO WHILE bt_logic
Thân_chu_trình
ENDDO
Chú ý: Trong thân chu trình (của FOR và DO WHILE), lệnh BREAK sẽ thoát
khỏi chu trình; Lệnh Continue bỏ qua các lệnh từ sau Cont đến cuối chu trình.
e- Lệnh SCAN
- Để quét(duyệt) lần lượt từng bản ghi của tệp từ đầu đến cuối tệp
- Dạng:
SCAN
Các lệnh
ENDSCAN
Tương tự chu trình sau:
GO TOP
DO WHILE .not.EOF()
Các lệnh
SKIP
ENDDO
10- Các lệnh SET (đọc giáo trình)
- Nội dung: SET để thiết lập lại môi trường làm việc. Sau khi khởi động
VFP, máy đã thiết lập 1 môi trường ngầm định (theo thói quen của người
Mỹ). Nếu không phù hợp với NSD thì thiết lập lại.
- Một số SET hay gặp:
 SET DATE TO american / FRENCH / ITALIAN
 SET CENTURY off/ON &&hiển thị 2/4 chữ số năm (ngầm định là off)
 SET SAFETY on/OFF &&bật/tắt chế độ cảnh báo dữ liệu (ngầm định là
on)
 SET DEFAULT TO [path] && đặt lại địa chỉ ngầm định
SET DEFA TO c:\TH

CHƯƠNG 2: BƯỚC ĐẦU LÀM VIỆC VỚI QUẢN TRỊ CSDL
I. Khởi tạo dự án xây dựng phần mềm
1- Khởi tạo dự án
Mỗi bài toán xây dựng phần mềm quản trị CSDL được gọi là một Project(dự
án). Để bắt đầu xây dựng (từ giao diện chính của VFP), tạo Project:
File > New > Project > New File: Cửa sổ để đặt tên tệp Project (.PJX)
Xuất hiện cửa sổ Project Manager để quản lý các thành phần cần triển khai của
dự án.
CREATE PROJECT
!MD e:\Lop57410304
SET DEFAULT TO e:\Lop57410304
2- Các thành phần của Project
a- Data: phần dữ liệu của bài toán, gồm:
- Database (CSDL): các bảng và MQH giữa các bảng
- Free Table: Các bảng tự do – không có quan hệ với bảng nào khác (vd:
bảng thông tin cơ quan, bảng người dùng…)
- Query (truy vấn): các bảng trung gian được cấu thành từ các bảng đã có
trong CSDL.
b- Documents (tài liệu do NSD tạo ra), gồm:
- Forms: mỗi form là một giao diện người - máy (cửa sổ). Thường gồm các
loại cửa sổ: cửa sổ nhập liệu, xem, sửa dữ liệu; cửa sổ truy vấn thông tin
Công cụ truy vấn thông tin; Giao diện chinh (giao diện xuất hiện sau khi
khởi động phần mềm.)
- Reports (báo cáo): Là truy vấn để nâng cấp thông tin cho người sử dụng
theo mẫu định trước.
- Clas Libraries (thưu viện lớp): nơi chứa các lớp do NSD tự định nghĩa,
nhằm dễ dàng hơn khi lập trình.
c- Code (mã):
Gồm các tệp chương trình do NSD viêt, lưu thành tệp.PRG (Program). Tệp
PRG được chạy bằng lệnh DO tên_tệp_prg
Chú ý: Trong các prg, phải chọn 1 tệp làm chương trình chính (là tệp được tự
động chạy đầu tiên khi khởi động phần mềm).
Trình tự chọn làm chương trình chính:
Code > chọn prg > chuột phải > Set main
d- Other (khác)
- Menu: Là hệ thống bảng chọn công việc cần thực hiện, gồm 2 loại:
+ Menu: gắn lên Form, luôn hiển thị cùng form khi form được kích hoạt.
+ Shortcut (Thực đơn tắt): gắn lên đối tượng, chỉ xuất hiện khi kích chuột
phải tại đối tượng.
- Other Files: thường gồm tệp hướng dẫn sử dụng, hướng dẫn cài đặt, giới
thiệu/quảng cáo, …
3- Trình tự triển khai Project
- Phải triển khai thông qua cửa sổ Project manager
- Trình tự triển khai các thành phần:
+ Tạo phần Data;
+ Tạo Form nhập, xem, sửa dữ liệu
(nguyên tắc: mỗi bảng đều phải có các form để nhập, xem, sửa dữ liệu)
+ Tạo các Report (tạo mẫu Report, tạo form để chạy report)
+ Ngoài ra, còn có các form để truy vấn dữ liệu (tìm kiếm và trả lời)
+ Tạo FORM dùng làm giao diện chính
+ Tạo Menu
+ Gắn các menu lên Form
- Build: Dịch toàn bộ phần mềm ra ngôn ngữ máy (thực hiện sau khi đã
hoàn tất các thành phần của project)
Dịch xong, có tệp cùng tên với tệp .PJX, mở rộng là: .EXE
Chú ý: Có thể chạy ngay từng thành phần trong quá tình xây dựng (giúp
cho việc test thuận lợi)
II. Triển khai phần DATA
1. Tạo CSDL
a- Tạo các bảng
Chú ý : khi thiết kế 1 bảng có 3 tab (thẻ)
+ Thẻ Field để thiết kế cấu trúc, nếu trường nào dùng làm khoá quan hệ thì phải
được Index và có thể định nghĩa thêm 1 số thuộc tính phụ như: Input mask là
dạng hiển thị (999 999 999 999 hoặc 999,999,999,999); caption là tiêu đề cột
khi hiển thị; rule: quy tắc dùng để bẫy lỗi dữ liệu, message: lời nhắc khi gặp lỗi
dữ liệu
+ Thẻ Indexes: hiển thị các trường đã được Index để tạo khoá quan hệ
b- Tạo MQH giữa các bảng
Chú ý: Khi tạo bảng, cần quan tâm đến 2 thẻ trên cửa sổ Designer Table là
Fields và Index
- Trang Fields để thiết kế bảng: những cột nào sử dụng làm khoá thì buộc
phải INDEX
- Trang Index: Mỗi khoá đã định nghĩa ở trang Fields (chọn Index) là 1 thẻ
sắp xếp (Tag) có tên ngầm định trùng với tên trường (không nên đặt lại).
Mỗi khoá thuộc 1 trong 3 loại:
+ Khoá Primery (khoá chính): Mỗi bảng chỉ có thể có đúng 1 khoá chính,
đặc trưng của khoá chính: không có hơn 1 giá trị trùng nhau trên trường
đó; trong quan hệ thì khoá chính là đặc trưng cho phía 1trong MQH.
+ Khoá Candidate (khoá dự tuyển ~ khoá ngoại): tương tự như khoá
chính, nhưng mỗi bảng có thể có nhiều khoá ngoại
+ Khoá Regular (khoá thường): khoá có thể xuất hiện nhiều lần giá trị
trên 1 cột.
2. Tạo Free Table (không có quan hệ với các bảng khác => không có khoá)
3. Sử dụng Index trong CSDL
a- Mở các bảng trong CDL
Nguyên tắc: Mở CSDL rồi mới mở các bảng trong CSDL, mẫu:
OPEN DATABASE tên_csdl
USE bảng_1 IN 0 [Alias bí_danh]
USE bảng_2 ….
b- Sử dụng Index trong các bảng
Khi thiết kế, đã đánh dấu các trường được Index (tăng/giảm dần).
Để sử dụng index trong bảng:
SELECT bảng
SET ORDER TO [tên_tag]
Trong đó: tag là thẻ index đã xác định khi thiết kế cơ sở dữ liệu
Ví dụ: In các phiếu chi trong phieutc.dbf xếp theo số phiếu:
OPEN DATABASE ketoan
USE phieutc IN 0
USE dmtk IN 0
SELECT phieutc
SET ORDER TO sophieu
LIST TO PRINTER FOR …
Chú ý: Khi mới mở tệp, chưa thẻ index nào có hiệu lực. Khi đã set order to
tên_tag, muốn không sử dụng index đó nữa thì viết SET ORDER TO

CHƯƠNG 3: LÀM QUEN VỚI ĐỐI TƯỢNG VÀ LỚP TRONG VFP


I. Giới thiệu chung về đối tượng và lớp trong VFP
1- Khái niệm về đối tượng và lớp
- Đối tượng (Object): được coi là “thực thể tư duy” trong lập trình hướng
đối tượng để thực hiện một công việc (trong lập trình cấu trúc, tương ứng
với 1 hàm hoặc thủ tục). Mỗi đối tượng được xác định (định nghĩa –
define) thông qua tập hợp thuộc tính của đối tượng. Mỗi đối tượng có thể
tiếp nhận 1 tập hữu hạn các tác động lên nó – gọi là sự kiện. Sự phản ứng
lại của đối tượng đối với 1 sự kiện xảy ra gọi là phương thức của sự kiện.
Phương thức được đảm bảo bằng 1 tập lệnh do NSD viết – gọi là mã
phương thức (Code).
- Ví dụ: Một nút lệnh (Command Button), Combo, …là các đối tượng, có
thể nhận các sự kiện (click, double click – kích đúp chuột, rightClick,
keypress, …) khi đó máy làm gì là do tập lệnh của mã sự kiện được viết.
Vậy: Lập trình hướng đối tượng OOP, bản chất gồm 2 việc: chọn đối
tượng và viết mã sự kiện (mã sự kiện là lập trình cấu trúc)
- Lớp (Class) :
 Lớp (class) là một đối tượng được tạo ra để định nghĩa các đối tượng
khác.
 Khi một đối tượng được dùng để định nghĩa (sinh ra) các các đối tượng
khác, thì, đối tượng dùng để định nghĩa gọi là lớp cha (hay lớp định
nghĩa).
 Các đối tượng được sinh ra từ lớp cha gọi là lớp con và chúng đều có các
thuộc tính, sự kiện và phương thức của lớp cha theo tính kế thừa.
Tính đóng gói (encapsulation)
Tính phân lớp (subclass)
Tính kế thừa (inheritace)
- Lớp trong VFP:
2. Tạo lớp

You might also like