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

Đề cương tin ứng dụng + bài tập có giả chi tiế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.22 MB, 92 trang )

ĐỀ CƯƠNG ÔN TẬP MÔN TIN HỌC ỨNG DỤNG
(Tham khảo)
MỤC LỤC

1.
2.
3.

I.
II.
III.
IV.
V.
VI.

PHẦN I: CÁC VẤN ĐỀ CƠ BẢN VỀ FOXPRO
Một số khái niệm
Một số hàm cơ bản
Một số lệnh cơ bản
PHẦN II: CÁC DẠNG BÀI TẬP VỀ FOXPRO
PHẦN III: BÀI TẬP VỀ FOXPRO
Bài 1
Bài 2
Bài 3: Bài thực hành số 1
Bài 4: Bài thực hành số 2
Bài 5: Bài thực hành số 2
Bài 6
Bài 7: Đề kiểm tra điều kiện
Bài 8: Đề thi tự luận (5)
Bài 9: Đề kiểm tra điều kiện (12)
Bài 10: Đề thi tự luận (4)


Bài 11: Đề kiểm tra điều kiện (3)
Bài 12: Đề kiểm tra điều kiện (5)
Bài 13: Đề kiểm tra điều kiện (11)
Bài 14: Đề thi tự luận (1)
Bài 15: Đề thi tự luận (2)
Bài 16: Đề thi tự luận (3)
PHẦN IV: MỘT SỐ CÂU HỎI TRẮC NGHIỆM TỔNG HỢP
Câu hỏi tổng hợp từ đề thi
Đề thi trắc nghiệm số 26 (30 câu)
Đề thi trắc nghiệm số 16 (24 câu)
Trắc nghiệm Foxpro
Trắc nghiệm Powerpoint
Trắc nghiệm Thương mại điện tử

Trang
2
2
3
4
11
14
14
15
16
20
23
27
29
31
32

34
35
37
39
41
42
43
45
45
48
55
60
67
77


PHẦN I: CÁC VẤN ĐỀ CƠ BẢN VỀ FOXPRO
1. Một số khái niệm
 Bản ghi: dòng
 Trường: cột
 Các đặc trưng của trường:
- Tên trường: dùng để đặt tên cho các tiêu thức. Quy định:
 Không quá 10 ký tự.
 Không phân biệt chữ hoa hay thường.
 Không bắt đầu từ chữ số
 Không chứa các ký tự đặc biệt: /, \, space,…
- Kiểu trường: Dùng để xác định loại thông tin chứa trong trường. Foxpro sử
dụng 1 số kiểu sau:
 Kiểu số: N - Numeric: điểm, khối lượng, số lượng, thành tiền, đơn giá,…
 Kiểu ký tự: C - Character: họ tên, mã hàng, số phiếu,…

 Kiểu ngày: D - Date: ngày sinh, ngày nhập, xuất,…
 Kiểu logic: L - Logical: giới tính
- Độ rộng: Xác định số ký tự nhiều nhất được ghi trong trường. Quy định:
 Kiểu C ≤ 254
 Kiểu N ≤ 20
 Kiểu D = 8
 Kiểu L = 1
- Phần thập phân: Quy định số chữ số thập phân được dùng (áp dụng đối với các
trường kiểu số - N)
 Phạm vi: Foxpro sử dụng các phạm vi sau:
 ALL: tất cả các bản ghi.
 NEXT n: n bản ghi kế tiếp từ bản ghi hiện thời.
 RECORD n: chỉ gồm bản ghi thứ n.
 REST: Tất cả các bản ghi còn lại kể từ bản ghi hiện thời.
Sơ đồ mô tả:

2


 Ghép xâu (Kiểu C + Kiểu C): Dùng dấu (+) hoặc (-), trong đó phép (-) sẽ xóa
bỏ ký tự trắng ở giữa. Ví dụ:
“AB”+“˽˽cd” = “AB˽˽cd”
“AB”- “˽˽cd” = “ABcd”
 Biểu thức logic: gồm .NOT. (phủ định), .AND. (và), .OR. (hoặc). Trình tự
thực hiện: ()  .NOT.  .AND.  .OR. Ví dụ:
.NOT.(year(ngaysinh)>1993): tức là năm sinh khơng vượt quá 1993.
Year(ngaysinh)>1993 .AND. year(ngaysinh)<2009: tức 1993 < năm sinh <
2009
2. Một số hàm cơ bản
 LEN(tên trường cần lấy): N: trả về kết quả là số ký tự của từng bản ghi trong

trường đó hoặc độ dài 1 xâu ký tự.
- Ví dụ: ?LEN(“Ha˽Noi”) = 6
?LEN(“123” + “1”) = LEN(“1231”) = 4
 LEFT(tên trường cần lấy, số ký tự cần lấy): C: trả về kết quả là ký tự cần lấy
tính từ bên trái.
- Ví dụ: Lấy phiếu nhập:
SP

MAVT

PN001

S01

TENVT
SẮT 01

NGAY
05/28/2010

KL
5000

?LEFT(sp, 2) = “PN”
 RIGHT: tương tự như LEFT nhưng tính từ bên phải sang.
3

DG
30000


TT


 SUBSTR(tên trường cần lấy, vị trí cần lấy, số ký tự cần lấy): C: trả về kết quả
là ký tự cần lấy tính từ vị trí cần lấy (giống hàm MID trong Excel).
- Ví dụ: ?SUBSTR(“123456”, 3, 2) = 34
 LTRIM, RTRIM(tên trường): C: Loại bỏ phần thừa bên trái hoặc bên phải
của các bản ghi trong trường.
- Ví dụ: LTRIM(“˽˽˽˽˽˽˽Ha Tinh”) = Ha Tinh
RTRIM(“Ha Tinh˽˽˽˽˽˽˽”) = Ha Tinh
 ALLTRIM(tên trường): C: loại bỏ phần thừa 2 bên.
- Ví dụ: ALLTRIM(“˽˽˽˽˽˽Ha Tinh˽˽˽˽˽˽˽”) = Ha Tinh
* Mục đích của LTRIM, RTRIM, ALLTRIM là cắt bỏ những phần thừa để sử
dụng hàm LEFT, RIGHT, SUBSTR được chính xác. Ví dụ:
LEFT(“˽˽Ha Tinh”, 2) = ˽˽
LEFT(LTRIM(“˽˽Ha Tinh”, 2) = Ha
 LOWER(tên trường): C: Chuyển tất cả ký tự sang chữ thường. Ví dụ: VD1
phần (4), mục 3.
 UPPER(tên trường): C: Chuyển tất cả ký tự sang chữ in hoa. Ví dụ: VD1
phần (4), mục 3.
 VAL(biểu thức kiểu C): Chuyển từ kiểu ký tự sang kiểu số (kiểu C  kiểu
N). Ví dụ: Câu 1 bài 10 phần III.
 STR(biểu thức số, độ rộng, số lượng phần thập phân): Chuyển từ kiểu số sang
kiểu xâu (kiểu N  kiểu C). Ví dụ: VD3 phần (5), mục 3.
 Hàm ngày, tháng, năm:
- DATE(năm, tháng, ngày): Trả về ngày tháng năm
+ Có 3 cách hiển thị ngày tháng năm. Ví dụ: ngày 10/04/1993 được biểu diễn
như sau: DATE(2014,04,10) hoặc {^1993-04-10} hoặc {^1993/04/10}
+ Có thể trừ 2 ngày tháng năm với nhau. Ví dụ:
?DATE(2013,07,16) - {^2013-07-13} = 3

+ Tính tuổi: YEAR(DATE()) - 1993
- DAY, MONTH, YEAR(trường ngày): Trả về kết quả là ngày, tháng, năm của
bản ghi.
* Lưu ý: Chỉ có DATE() mới trả về ngày tháng năm của ngày hiện tại.
3. Một số lệnh cơ bản
* Foxpro cho phép viết tắt 4 ký tự đầu của tên lệnh. Ví dụ: REPL (REPLACE),
AVER (AVERAGE),…
4


(1) Lệnh mở tệp: USE tên tệp
 Nếu khơng có tên tệp thì đó là lệnh đóng tệp đang mở.
 Nếu có tên tệp thì máy sẽ mở tệp đó.
 Nếu mở tệp mới thì sẽ đóng tệp đang mở.
 Ví dụ: USE qlsv
USE qlvt
Lúc này tệp đang mở là qlvt
(2) Lệnh di chuyển (GOTO, SKIP):
 GOTO n (n: vị trí cần di chuyển): dùng để di chuyển con trỏ bản ghi tới 1 vị
trí thứ n.
- Trường hợp đặc biệt: GOTO˽top/bottom: di chuyển lên đầu hoặc cuối bản ghi.
 SKIP n (n: số lượng cần di chuyển): dùng để di chuyển n bản ghi kể từ bản
ghi hiện thời. Trong đó: n>0: chuyển về phía cuối tệp (xuống dưới), n<0:
chuyển về phía đầu tệp (lên trên).
 Ví dụ:
- VD1: Xem 5 bản ghi đầu tiên trong tệp:
GO TOP
LIST NEXT 5
- VD2: Xem 5 bản ghi cuối cùng trong tệp
GO BOTTOM

SKIP -4
LIST NEXT 5
* Vì sao có NEXT xem lại phần phạm vi ở mục 1 và cấu trúc hàm LIST.
(3) Lệnh hiển thị (LIST, DISPLAY): dùng để hiển thị các bản ghi của tệp đang
mở ra màn hình (hoặc máy in).
 LIST [phạm vi] [FIELDS tên trường cần hiển thị] [FOR điều kiện] [TO
PRINTER]
 DISPLAY: cấu trúc tương tự.
* Lưu ý:
- Những phần được ghi trong dấu [ ] có nghĩa là có thể có hoặc khơng cần ghi
cũng được. Ví dụ:
+ Nếu chỉ dùng LIST tức là: hiển thị ra máy tính tất cả các trường của tất cả các
bản ghi mà khơng có điều kiện gì.
+ Nếu đầy đủ các thông tin trên lệnh LIST tức là: hiển thị ra máy in những
trường cần hiển thị trong 1 phạm vi nào đó thỏa mãn 1 hoặc nhiều điều kiện.
5


- Phạm vi: xem lại mục 1.
- Điểm khác nhau cơ bản giữa LIST và DISPLAY: Nếu DISPLAY khơng có
điều kiện (FOR) và phạm vi thì chỉ hiện thị bản ghi hiện thời. Các trường hợp
còn lại đều hiển thị tất cả các bản ghi nếu không viết phạm vi cụ thể.
 Ví dụ:
- VD1: Liệt kê các sinh viên khóa 49:
LIST ALL FIELDS hodem,ten,khoa,lop FOR khoa=“49”
- VD2: Liệt kê các sinh viên nam lớp 49/01.01:
DISPLAY ALL FIELDS hodem,ten,gioitinh,khoa,lop FOR gt=.F. AND
(khoa=“49” AND lop=“01.01”)
- VD3: Xem danh sách sinh viên không phải thi lại 3 môn:
DISPLAY FIELDS hodem,ten,d1,d2,d3 FOR d1>=4 AND d2>=4 AND

d3>=4
- VD4: In danh sách sinh viên thi lại ít nhất 1 mơn:
LIST FOR d1<4 OR d2<4 OR d3<4 TO PRINTER
- VD5: Xem danh sách sinh viên thi lại đúng 1 môn:
LIST FOR (d1<4 AND d2>=4 AND d3>=4) OR (d2<4 AND d1>=4 AND
d3>=4) OR (d3<4 AND d1>=4 AND d2>=4)
- VD6: Hiển thị sinh nhật tháng 4 và 20 tuổi:
LIST FIELDS hodem,ten,ngaysinh FOR month(ngaysinh) = 4 AND
(year(date()) - year(ngaysinh) = 20)
(4) Lệnh chỉnh sửa (REPLACE): dùng để sửa (hay thay thế) nội dung các bản
ghi trong dữ liệu. Mục đích dùng để tính tốn các trường như tính đơn giá, thuế,
thành tiền,…
 Dạng lệnh: REPLACE [phạm vi] trường cần thay thế hoặc tính tốn WITH
nội dung thay thế hoặc cơng thức tính tốn [FOR điều kiện]
 Ví dụ:
- VD1: Chuyển quê quán từ Hà Tây sang Hà Nội:
REPLACE ALL quequan WITH “Ha Noi” FOR upper(quequan)=“HA TAY”
Hoặc:
REPLACE ALL quequan WITH “Ha Noi” FOR lower(quequan)=“ha tay”
* Lưu ý: Ở đây phải dùng thêm UPPER hoặc LOWER vì trong trường q qn
có những bản ghi không hiển thị đúng Hà Tây mà có thể là HÀ Tây hoặc Hà
TÂy,… do lỗi đánh máy nên phải chuyển đổi sang cùng 1 kiểu in hoa hoặc
thường để hiển thị đúng.
6


- VD2: Tính điểm trung bình 3 mơn trên trường dtb:
REPLACE ALL dtb WITH (d1 + d2 + d3)/3
- VD3: Phân loại học tập trên trường phanloai dựa vào trường dtb vừa tính
được:

Cách 1: REPLACE ALL phanloai WITH “Gioi” FOR dtb>=8
REPLACE ALL phanloai WITH “Kha” FOR dtb>=7
REPLACE ALL phanloai WITH “TB” FOR dtb<7
Cách 2: REPLACE ALL phanloai WITH IIF(dtb>=8, “Gioi”, IIF(dtb>=7,
“Kha”, “TB”)
* Lưu ý: Hàm IIF sử dụng giống hàm IF trong Excel: có bao nhiêu điều kiện thì
có (n-1) hàm IIF lồng nhau.
IIF(điều kiện hoặc biểu thức logic, kết quả đúng, kết quả sai)
- VD4: Tính thành tiền biết: TT=SL*DG + TT*10%VAT. Nếu bán trong tháng
10 và 12 thì đơn giá tăng 3%.
REPLACE ALL tt WITH sl*dg*1.1
REPLACE tt WITH sl*dg*1.1*1.03 FOR month(ngay)=10 or
month(ngay)=12
* Lưu ý: Nếu lệnh REPLACE có FOR mà khơng ghi phạm vi thì chỉ các bản
ghi làm biểu thức logic đúng (.T.) mới được thay thế.
(5) Lệnh sắp xếp (INDEX): Tạo ra 1 tệp chỉ dẫn để sắp xếp các tệp đang mở
theo thứ tự tăng dần.
 Dạng lệnh: INDEX ON trường cần sắp xếp TO tên tệp chỉ dẫn[.idx] [FOR
điều kiện]
 Ví dụ:
- VD1: Sắp xếp theo dtb tăng dần:
INDEX ON dtb TO vd1.idx
- VD2: Sắp xếp theo dtb giảm dần:
INDEX ON -dtb TO vd2.idx
Hoặc: INDEX ON 1/dtb TO vd2.idx
- VD3: Sắp xếp theo lớp có điểm trung bình tăng dần:
INDEX ON lop+str(dtb,5,2) TO vd3
* Lưu ý:
+ Để ghép xâu ta dùng dấu + và phải cùng tiêu thức kiểu C mới ghép xâu được.
+ Giải thích hàm STR(dtb,5,2): vì điểm trung bình tối đa là 10.00 có độ rộng là

5 ký tự, số lượng phần thập phân thường là 2.
7


- VD4: Sắp xếp theo lớp có điểm trung bình giảm dần:
INDEX ON lop+str(10 - dtb, 5, 2) TO vd4
- VD5: Sắp xếp theo ngày sinh tăng dần:
INDEX ON ngaysinh TO vd5
- VD6: Sắp xếp theo ngày sinh giảm dần:
INDEX ON date() - ngaysinh TO vd6
- VD7: Sắp xếp theo lớp và ngày sinh tăng dần với các trường lop, ns:
INDEX ON lop+str(year(ns),4)+str(month(ns),2)+str(day(ns),2) TO vd7
- VD8: Sắp xếp cùng lớp và ngày sinh có năm sinh vào 1993:
INDEX ON lop+dtoc(ns) TO vd8 FOR year(ns)=1993
* Trường hợp này dùng được hàm DTOC vì so sánh tháng đúng theo tăng dần.
Đa số dùng DTOC là khơng chính xác nếu ghép xâu.
(6) Các lệnh tính tốn trên tệp dữ liệu:
* Lưu ý: Sau khi tính tốn muốn hiển thị kết quả ta dùng dấu ?
a, Lệnh đếm số lượng bản ghi: COUNT TO tên biến nhớ [FOR điều kiện]
Ví dụ: Tệp qlsv có 39 bản ghi, trong đó có 16 bản ghi có giới tính nam (quy ước
nam là .T. trên trường giới tính)
COUNT TO a
?“Số lượng sinh viên trong lớp là:”, a
COUNT TO b FOR gt=.T.
?“Số lượng sinh viên nam trong lớp là:”, b
b, Lệnh tính tổng (SUM), trung bình cộng (AVERAGE): Dùng để tính tổng,
trung bình cộng của các bản ghi trong trường số.
 Dạng lệnh: SUM/AVERAGE [trường cần tính tổng hoặc tính trung bình
cộng] TO tên biến nhớ [FOR điều kiện]
* Lưu ý:

+ Nếu khơng có tên các trường cần tính tổng hoặc tính TBC thì ngầm định là
tính trên mọi trường số của tệp đang mở.
+ Tính trung bình cộng giản đơn (liên quan đến 1 trường) thì dùng AVERAGE
(hoặc SUM/COUNT)
+ Tính số bình qn gia quyền (liên quan đến 2 trường trở lên) thì khơng dùng
AVERAGE. Ví dụ: ĐTB học tập (vì bao gồm điểm từng mơn, số tín chỉ), đơn
giá (nhập, xuất, bán) bình qn, lương sản phẩm bình qn,…
 Ví dụ:

8


- VD1: Tính điểm trung bình của mơn 1 các sinh viên nữ trong lớp (quy ước nữ
là .F. trên trường giới tính):
Cách 1: AVERAGE d1 TO a FOR gt=.F.
?a hoặc ?“Diem trung binh mon 1 của sinh vien nu la:”, a
Cách 2: SUM d1 TO b FOR gt=.F.
COUNT TO c FOR gt=.F.
?“Diem trung bình mon 1 cua sinh vien nu la:”, b/c
- VD2: Tính khối lượng tồn của S01 đến hết ngày 15/07/2010 (giả sử số dư đầu
kỳ = 0)
Ta có: Khối lượng tồn = Tổng nhập - Tổng xuất
+ Tổng nhập: SUM kl TO a FOR mavt=“S01” AND left(sp,2)=“PN” AND
ngay<={^2010-07-15}
+ Tổng xuất: SUM kl TO b FOR mavt=“S01” AND left(sp,2)=“PX” AND
ngay<={^2010-07-15}
?“Khối lượng tồn của S01 là:”, a-b
- VD3: Tính đơn giá xuất bình qn của mã S02?
SUM tt,kl TO tongtt, tongkl FOR mavt=“S02” AND left(sp,2)=“PX”
?“Đơn giá xuất bình quân là:”, tongtt / tongkl

Lưu ý: Có thể viết ghép được khi có điều kiện (FOR) giống nhau.
c, Lệnh tính tổng theo nhóm (TOTAL): dùng để tính tổng các trường số trên
từng nhóm bản ghi.
 Nhóm:
kế tiếp nhau
cùng tiêu thức phân nhóm. Ví dụ: cùng mã vật tư là S02.
* Lưu ý: Khi sử dụng lệnh TOTAL, bắt buộc phải sắp xếp dữ liệu theo tiêu thức
ta muốn phân nhóm để Foxpro hiểu được đúng trong dữ liệu có bao nhiêu
nhóm. Ví dụ:
S01
S02
S01
S03

4 nhóm

S01
S02
S02
S03

3 nhóm

S01
S01
S02
S03

3 nhóm


 Dạng lệnh: TOTAL ON tiêu thức phân nhóm TO tệp kết quả[.dbf] [FIELDS
các trường cần tính tổng theo nhóm] [FOR điều kiện]
Trong đó:
+ Nếu khơng có FIELDS thì máy ngầm hiểu là tính tổng theo nhóm ở tất cả các
trường.
9


+ Tệp kết quả có cấu trúc giống tệp dữ liệu (đi .dbf). Trong tệp kết quả có
chứa các nhóm và tổng nhóm.
* Note: Cách nhận biết: phiếu thu/chi; phiếu nhập/xuất; phiếu mua/bán
+ Có 1 trường loại nghiệp vụ (lnv) kiểu Logical.
Ví dụ: Liệt kê phiếu thu biết trong trường lnv: .T. phiếu thu, nhập; .F. phiếu chi,
xuất: LIST FOR lnv=.T.
+ 1 thành phần của 1 trường. Ví dụ: Left(sp,2)=“PN” hoặc “PX”
+ Đưa thêm 2 trường TK Nợ (tkno) và TK Có (tkco). Ví dụ: Phiếu nhập:
tkno=“152”; Phiếu chi: tkco=“111”
 Ví dụ:
- VD1: Lập báo cáo về kl, tt xuất của các vật tư trong năm 2013. Giả sử có 2
trường tkno, tkco với tài khoản 152.
+ Tiêu thức phân nhóm: mavt
INDEX ON mavt TO a FOR left(tkco, 3)=“152” AND year(ngay)=2013
+ Tính tổng theo nhóm:
TOTAL ON mavt TO kq1.dbf FIELDS kl,tt
+ Mở bảng để xem:
USE kq1
LIST mavt, kl, tt
- VD2: Lập báo cáo về kl, tt xuất trong từng tháng của năm 2013.
+ Tiêu thức phân nhóm: month(ngay)
INDEX ON month(ngay) TO a FOR left(tkco, 3)=“152” AND year(ngay)=2013

+ Tính tổng theo nhóm:
TOTAL ON month(ngay) TO kq2.dbf FIELDS kl,tt
+ Mở bảng để xem:
USE kq2
LIST month(ngay), kl, tt

10


PHẦN II: CÁC DẠNG BÀI TẬP VỀ FOXPRO
Dạng 1: Nhập dữ liệu và chỉ ra các trường phải nhập? Vì sao?
Ví dụ: Nhập dữ liệu Quản lí vật tư
USE Qlvt
APPEND
Các trường cần phải nhập là: số phiếu, mã vật tư, sản lượng, đơn giá. Trường
thành tiền khơng phải nhập vì thành tiền được tính thơng qua khối lượng và đơn
giá.
Dạng 2: In, liệt kê theo điều kiện
Sử dụng lệnh: LIST hoặc DISPLAY
Ví dụ 1: In các phiếu nhập kho trong quý 4/2010
LIST FOR tkno="152" AND (MONTH(ngay)>=10) AND (YEAR(ngay)
=2010) TO PRINTER
Ví dụ 2: Hiển thị những người sinh nhật tháng 11 và trên 20 tuổi
LIST FIELDS hodem,ten,ngaysinh FOR MONTH(ngaysinh)=11 AND
(YEAR(date())-YEAR(ngaysinh)>20)
Dạng 3: In và liệt kê theo trình tự
Sử dụng 2 lệnh: INDEX và LIST TO PRINTER
Ví dụ: In các phiếu nhập trong năm 2010 theo trình tự từng loại vật tư và thành
tiền giảm dần.
- Bước 1: Sắp xếp theo trình tự:

INDEX ON mavt+ STR(10^8-tt,8) TO sx.idx FOR (tkno="152") AND
(YEAR(ngay)=2010)
- Bước 2: In và liệt kê:
LIST TO PRINTER
Dạng 4: Tính trường theo công thức
Sử dụng lệnh: REPLACE, IIF(nếu cần)
Note: - Nếu có FOR thì ko cần viết ALL
- Cách dùng lệnh IIF giống hàm IF trong Excel.
Ví dụ 1: Tính điểm trung bình và phân loại học tập:
- Tính điểm trung bình: REPLACE ALL dtb WITH (d1+d2+d3)/3
- Phân loại học tập: REPLACE ALL phanloai WITH IIF(dtb>=8.0, “Gioi”,
IIF(dtb>=7.0, “Kha”, “TB”))
Dạng 5: Tăng, giảm, sửa trường nào đó
Sử dụng lệnh: REPLACE
11


Ví dụ 1: Giảm đơn giá xuất 12% trong ngày 10/04/2013 cho tất cà các vật tư
REPLACE dg WITH dg*0.88 FOR (tkco = "152") AND ngay={^2013-04-10}
Ví dụ 2: Chuyển quê quán từ Hà Nội -> Hà Tĩnh
REPLACE ALL quequan WITH “Ha Tinh” FOR UPPER(quequan)=“HA NOI”
Dạng 6: Xóa và phục hồi
Sử dụng lệnh: DELETE (xóa tạm thời), PACK (xóa hồn tồn), ZAP (xóa tất
cả bản ghi) và RECALL (phục hồi)
Ví dụ: Xóa hồn tồn các phiếu mua mặt hàng có mã phiếu bắt đầu là chữ H và
M?
DELETE FOR tkno= "156" AND (left(mh,1)= "H" OR left(mh,1)= "M")
PACK
Dạng 7: Tính tổng, tính trung bình
Sử dụng 2 lệnh: SUM, AVERAGE

Ví dụ: Tính đơn giá xuất bình quân của mã vật tư S15 trong quý II/2011
SUM kl,tt TO T1,T2 FOR (Tkco="152") AND (mavt="S15") AND
month(ngay)>=4 AND month(ngay)<=6 AND year(NGAY)=2011
? "Đơn giá xuất bình quân của mã vật tư S15 trong quý II/2011 là:", T2/T1
Dạng 8: Tính tổng theo từng nhóm
Sử dụng lệnh: TOTAL
Ví dụ 1: Tính tổng tiền xuất của từng loại vật tư năm 2010
- Bước 1: Phân nhóm: Sắp xếp theo mã vật tư (Tiêu thức phân nhóm là mavt)
INDEX ON mavt TO sx.idx (ko có đi .idx cũng đc) FOR (Tkco="152")
AND (year(ngay)=2010)
- Bước 2: Tính tổng theo nhóm:
TOTAL ON mavt TO kq.dbf (ko có đi .dbf cũng đc) FIELDS tt
- Bước 3: Mở bảng để xem:
USE kq
LIST mavt,tenvt,tt
Ví dụ 2: Hãy cho biết có bao nhiêu tháng kể từ năm 2009 tới nay tổng doanh
thu bán hàng vượt 10 tỉ?
- Bước 1: Sắp xếp theo từng năm và từng tháng
INDEX ON STR(year(ngay),4)+STR(month(ngay),2) TO sx1.idx FOR
tkco="156" AND year(ngay)>=2009
- Bước 2: Tính tổng theo nhóm:
TOTAL ON STR(year(ngay),4)+STR(month(ngay),2) TO kq1 FIELDS tt
12


- Bước 3: Mở bảng để xem:
USE kq
- Bước 4: Đếm (Sử dụng lệnh COUNT)
COUNT TO vd2 FOR tt>10000000000 (Viết số ko đc viết 10 tỉ)
?"Số tháng kể từ năm 2009 tới nay tổng doanh thu bán hàng vượt 10 tỉ

là:",vd2
Ví dụ 3: Lập báo cáo tồn kho của từng loại vật tư.
- Bước 1: Chuyển dấu khối lượng của các phiếu bán hàng sang dấu âm:
REPLACE kl WITH -kl FOR tkco= "152"
- Bước 2: Chọn tiêu thức phân nhóm: mavt
INDEX ON mavt TO sx2.idx
- Bước 3: Tính tổng theo nhóm:
TOTAL ON mavt TO kq2 FIELDS kl
- Bước 4: Mở bảng để xem hoặc in:
USE kq2
LIST mavt,kl [TO PRINTER]
- Bước 5: Chuyển lại dấu:
USE Qlvt
REPLACE kl WITH - kl FOR tkco ="152"
* Giải thích: Nếu chúng ta cho phiếu mua là số dương, phiếu bán là số âm, sau
đó sắp xếp theo đối tượng và thực hiện lệnh TOTAL thì nó sẽ trừ cho nhau, kết
quả cuối cùng là tổng chênh lệch thu, chi của từng loại vật tư.

13


PHẦN III: BÀI TẬP VỀ FOXPRO
Bài 1: Để quản lý bán hàng người ta sử dụng các phiếu bán hàng, trên các phiếu
có các thơng tin sau:
Name

Type

Width


Dec

Giải thích

SP

C

8

-

Số phiếu

MH

C

4

-

Mã hàng

TENHH

C

40


-

Tên hàng

MANB

C

6

-

Mã người bán

TENNB

C

25

-

Tên người bán

NGAY

D

8


-

Ngày bán

DVT

C

5

-

Đơn vị tính

SL

N

8

0

Số lượng

DG

N

8


0

Đơn giá

TT

N

11

0

Thành tiền

(Lưu ý: Mã người bán có 3 kí tự đầu chỉ mã đại lý)
Yêu cầu:
1. Tính thành tiền biết: TT=SL*DG + TT*10%VAT. Nếu bán trong tháng 10 và
12 thì đơn giá tăng 3%.
2. In danh sách người bán của đại lý có mã hàng HN1 và HN2.
3. In các phiếu bán mặt hàng MH01 trong tháng 9 năm 2010 theo thứ tự giảm
dần về số lượng.
4. Tính tổng số tiền bán được của từng nhân viên trong năm 2010 và cho biết 3
nhân viên có doanh thu bán hàng cao nhất.
5. Tính đơn giá bình qn của mặt hàng MH02 trong quý 2 năm 2010.
Bài làm
1. REPLACE ALL tt WITH sl*dg*1.1
REPLACE tt WITH sl*dg*1.1*1.03 FOR month(ngay)=10 OR
month(ngay)=12
2. LIST FIELDS tennb,mh FOR left(manb,3)=“HN1” OR left(manb,3)=“HN2”
TO PRINTER

3. INDEX ON -sl TO cau3 FOR mh=“MH01” AND month(ngay)=9 AND
year(ngay)=2010
LIST TO PRINTER
14


4. INDEX ON tennb TO cau4a FOR year(ngay)=2010
TOTAL ON tennb TO tst FIELDS tt
USE tst
INDEX ON -tt TO cau4b
GO TOP
LIST NEXT 3 tennb,tt
5. SUM tt TO tongtt FOR mh=“MH02 AND ngay>={^2010/04/01} AND
ngay<={^2010/06/30}

SUM sl TO tongsl FOR mh=“MH02 AND ngay>={^2010-04-01} AND
ngay<={^2010-06-30}

?“Đơn giá bình quân của mặt hàng MH02 trong quý 2 năm 2010 là:”,
tongtt/tongsl
* Hàm ngày tháng có thể biểu diễn {^2010/04/01} hoặc {^2010-04-01} đều
đúng.
Bài 2: Để quản lí thu chi tiền mặt ở 1 đơn vị, người ta lưu trữ các phiếu thu và
phiếu chi trong 1 tệp, gồm các thông tin: Số phiếu (SP - C), Ngày lập (NGAY D), Nội dung (ND - C), Số tiền (ST - N), Tài khoản ghi Nợ (TKNO - C), Tài
khoản ghi Có (TKCO - C)
(Phiếu thu ghi Nợ TK 111, phiếu chi ghi Có TK 111. Tài khoản 111 có
các TK chi tiết để ghi cho từng đối tượng thu chi bằng cách bổ sung 3 kí hiệu, ví
dụ tk 111001 để theo dõi thu và chi của đối tượng có mã 001)
Yêu cầu:
1. Nhập thông tin vào tệp.

2. In các phiếu chi trong quý 1 năm 2010 có số tiền trên 5 triệu trở lên, đã xếp
theo ngày, cùng ngày theo mã đối tượng.
3. Sửa lại số tiền trên phiếu số 2772/TT thành 10 triệu đồng.
4. In 1 danh sách tổng tiền chi của từng đối tượng trong tháng 4 năm 2010.
5. Lập 1 thông báo về tổng chênh lệch thu chi của từng đối tượng trong đơn vị.
Bài làm
1. CREATE qltt
USE qltt
APPEND
2. INDEX ON str(year(ngay),4)+str(month(ngay),2)+str(day(ngay),2)+substr
(tkco,4,3) TO cau2 FOR left((tkco),3) = “111” AND month(ngay)<=3 AND
year(ngay) = 2010
15


TOTAL ON STR(day(ngay), 2)+SUBSTR(tkco,4,3) TO kq2 FIELDS st
USE kq2
LIST FOR st>=5000000 TO PRINTER
3. REPLACE st WITH 10000000 FOR SP=“2772”
4. INDEX ON substr(tkco,4,3) TO cau4 FOR left(tkco,3)=“111” AND
month(ngay)=4 AND year(ngay)=2010
TOTAL ON substr(tkco,4,3) TO kq FIELDS st
USE kq
LIST ALL TO PRINTER
5. Lập 1 thông báo về tổng chênh lệch thu chi của từng đối tượng trong đơn vị
- Bước 1: Gán số tiền chi ra dấu âm đằng trước:
REPLACE st WITH -st FOR left(tkco,3)=“111”
- Bước 2: Phân nhóm: Tiêu thức phân nhóm: Từng đối tượng trong đơn vị
INDEX ON IIF(left(tkno,3)=“111”, substr(tkno,4,3), substr(tkco,4,3)) TO
sx.idx

- Bước 3: Tính tổng theo nhóm:
TOTAL ON IIF(left(tkno,3)=“111”, substr(tkno,4,3), substr(tkco,4,3)) TO
kq.dbf FIELDS st
- Bước 4: Mở bảng để xem hoặc in:
USE kq
LIST
IIF(left(tkno,3)=“111”,substr(tkno,4,3),substr(tkco,4,3)),st
PRINTER]
- Bước 5: Chuyển lại dấu:
USE qlthuchi
REPLACE ALL st WITH -st FOR left(tkco,3)='111'

[TO

* Giải thích: Nếu chúng ta cho tiền thu về là số dương, tiền chi là số âm, sau đó
sắp xếp theo đối tượng và thực hiện lệnh TOTAL thì nó sẽ trừ cho nhau, kết quả
cuối cùng là tổng chênh lệch thu, chi của từng đối tượng.
Bài 3: Bài thực hành số 1
Tạo tệp QLVT với cấu trúc như sau:
Name

Type

Width

Dec

SP

C


6

-

Số phiếu

MAVT

C

4

-

Mã vật tư

TENVT

C

15

-

Tên vật tư

16

Giải thích



NGAY

D

8

-

Ngày xuất nhập

KL

N

7

0

Khối lượng

DG

N

8

0


Đơn giá

TT

N

10

0

Thành tiền

1. Tạo tệp dữ liệu:
CREATE QLVT

Đơn vị tính quy chuẩn theo Kg.

2. Nhập dữ liệu như sau:
SP

MAVT

TENVT

NGAY

KL

DG


1

PN001

S01

SẮT 01

05/28/2010

5000

30000

2

PN001

S03

SẮT 03

05/28/2010

6800

40000

3


PN001

X01

XI MĂNG 01

05/28/2010

7000

10000

4

PN002

S01

SẮT 01

06/14/2010

9000

30500

5

PN002


X02

XI MĂNG 02

06/14/2010

6500

12000

6

PN002

S02

SẮT 02

06/14/2010

11000

35000

7

PN002

X03


XI MĂNG 03

06/14/2010

12000

16000

8

PX001

S02

SẮT 02

06/15/2010

5000

38000

9

PX001

S03

SẮT 03


06/15/2010

3000

44000

10

PX002

S01

SẮT 01

06/22/2010

4500

32000

TT

Số phiếu bắt đầu là PN thì là phiếu nhập, bắt đầu là PX thì là phiếu xuất. Mã
vật tư có ký tự đầu tiên chỉ loại mặt hàng.
USE qlvt
APPEND

3. Tính TT theo cơng thức
TT = KL*DG + VAT, trong đó VAT lấy tỷ lệ là 5% với loại X, còn lại là 10%
USE qlvt

REPLACE tt WITH KL*DG*1.05 FOR LEFT(MAVT,1)="X"
REPLACE tt WITH KL*DG*1.1 FOR LEFT(MAVT,1)<>"X"
LIST FIELDS SP,MAVT,NGAY,KL,DG,TT

Hoặc
REPLACE ALL tt WITH kl*dg*IIF(LEFT(mavt,1)="X",1.05,1.1)
LIST FIELDS SP,MAVT,NGAY,KL,DG,TT

4. Xem:
 Các dòng phiếu xuất trong nửa cuối tháng 6 năm 2010
USE QLVT
LIST
FIELDS
SP,MAVT,NGAY,KL,DG,TT
FOR
DAY(NGAY)>=15
MONTH(NGAY)=6 AND YEAR(NGAY)=2010 AND LEFT(SP,2)=”PX”

17

AND


Hoặc
LIST
FIELDS
SP,MAVT,NGAY,KL,DG,TT
FOR
NGAY<={^2010-06-30} AND LEFT(SP,2)=”PX”


NGAY>={^2010-06-15}AND

 Các dòng phiếu xuất trong quý I và III năm 2010 của vật tư S01 và X02?
LIST FOR left(sp,2)=“PX” AND (month(ngay)<=3 OR month(ngay)>=7
AND month(ngay)<=9) AND year(ngay)=2010 AND (mavt=“S01” OR
mavt=“X02”)
 Các dịng phiếu xuất vật tư có mã S01 theo trình tự khối lượng tăng dần?
giảm dần?
INDEX ON kl TO cd1 FOR mavt="S01" AND LEFT(SP,2)=”PX”
LIST FIELDS SP,MAVT,NGAY,KL,DG,TT
INDEX ON -kl TO cd2 FOR mavt="S01" AND LEFT(SP,2)=”PX”
LIST FIELDS SP,MAVT,NGAY,KL,DG,TT

 Các dịng phiếu xuất vật tư theo trình tự số phiếu, cùng số phiếu thì theo
mã vật tư?
INDEX ON substr(sp,3,3)+substr(mavt,2,2) TO abc FOR left(sp,2)=“PX”
LIST FIELDS sp,mavt,ngay,kl,dg,tt
 Các dòng phiếu xuất vật tư theo trình tự số phiếu cùng số phiếu thì theo
ngày lập?
INDEX ON substr(sp,3,3) + str(year(ngay),4) + str(month(ngay),2) + str(day
(ngay),2) TO abc FOR left(sp,2)=“PX”
5. Tính tốn, sửa dữ liệu
 Sửa đơn giá X03 trên phiếu xuất PX002 thành 22 nghìn
USE qlvt
REPLACE dg WITH 22000 FOR sp="PX002" AND mavt="X03"
REPLACE
tt
WITH
kl*dg*IIF(LEFT(mavt,1)="X",1.05,1.1)
sp="PX002"


FOR

 Giảm 5% đơn giá nhập Sắt trong tháng 5 và tháng 7.
REPLACE dg WITH dg*0.95 FOR LEFT(mavt,1)="S" AND (MONTH(ngay)=5 OR
MONTH(ngay)=7) AND LEFT(SP,2)=”PN”
REPLACE tt WITH kl*dg*1.1 FOR LEFT(mavt,1)="S" AND (MONTH(ngay)=5
OR MONTH(ngay)=7) AND LEFT(SP,2)=”PN”

6. Hãy cho biết
 Tổng số tiền trên phiếu xuất PX003?
SUM tt TO tongp1 FOR sp="PX003"
?"TOng thanh tien tren phieu xuat PX003 la:",tongp1

 Tổng số tiền nhập Xi măng trong tháng 5 và 6?
SUM tt TO tongp2 FOR LEFT(mavt,1)="X"
MONTH(ngay)=6) AND LEFT(SP,2)=”PN”

18

AND

(MONTH(ngay)=5

OR


?"TOng tien nhap xi mang trong thang 5 va 6 la:",tongp2

 Khối lượng cịn lại của S01 tính đến hết ngày 15/7/2010?

- Bước 1: Tính tổng nhập:
SUM kl TO tn FOR mavt=“S01” AND left(sp,2)=“PN” AND
ngay<={^2010-07-15}
- Bước 2: Tính tổng xuất:
SUM kl TO tx FOR mavt=“S01” AND left(sp,2)=“PX” AND
ngay<={^2010-07-15}
- Tính khối lượng tồn = Tổng nhập - Tổng xuất
?“Khối lượng tồn của S01 là:”, tn - tx
 Đơn giá xuất bình quân của S01?
- Bước 1: Tính tổng thành tiền:
SUM tt TO tongtt FOR mavt=“S02” AND left(sp,2)=“PX”
- Bước 2: Tính tổng khối lượng:
SUM kl TO tongkl FOR mavt=“S02” AND left(sp,2)=“PX”
- Bước 3: Tính đơn giá xuất bình qn = Tổng thành tiền / Tổng khối lượng
?“Đơn giá xuất bình quân là:”, tongtt / tongkl
7. Lập báo cáo
 Tổng số tiền của từng phiếu?
USE qlvt
INDEX ON sp TO cd3
TOTAL ON sp TO kqtt FIELDS tt
USE kqtt
LIST FIELDS sp,tt

 Tổng số tiền và khối lượng nhập của từng loại vật tư?
USE qlvt
INDEX ON mavt TO cd4 FOR LEFT(sp,2)="PN"
TOTAL ON mavt TO tongvt FIELDS kl,tt
USE tongvt
LIST FIELDS mavt,kl,tt


o Vật tư nào có tổng tiền nhập cao nhất?
USE tongvt
INDEX ON -tt TO cd44
?"Vat tu co tong tien nhap cao nhat la:"
GO TOP
DISPLAY FIELDS mavt,tenvt,tt

o Có bao nhiêu vật tư có tổng khối lượng nhập vượt 10000?
COUNT TO cau7 FOR kl>10000 AND left(sp,2)=“PN”
19


?“So vat tu co tong khoi luong nhap vuot 10000 la:”, cau7
 Lập báo cáo về tổng tiền xuất của từng loại mặt hàng (sắt, xi măng…)
trong từng tháng?
- Bước 1: Phân nhóm:
INDEX ON left(mavt,1)+str(month(ngay),2) TO cau7c
left(sp,2)=“PX” AND year(ngay)=2012
- Bước 2: Tính tổng theo nhóm:
TOTAL ON left(mavt,1)+str(month(ngay),2) TO kqth FIELDS tt
USE kqth
LIST left(mavt,1),month(ngay),kl

FOR

 Cho biết tháng nào của năm 2010 có tổng tiền xuất cao nhất?
INDEX ON month(ngay) TO cau7d FOR year(ngay)=2010 AND
left(sp,2)=“PX”
TOTAL ON month(ngay) TO kq FIELDS tt
USE kq

GO BOTTOM
LIST FIELDS month(ngay),tt
Bài 4: Bài thực hành số 2
Tạo tệp QLBH với cấu trúc như sau:
Name

Type

Width

Dec

Giải thích

SP

C

5

-

Số phiếu

MAHH

C

6


-

Mã hàng hóa (2 kí tự đầu chỉ mã loại hàng, 2 kí tự kế
tiếp chỉ mã nhà cung cấp)

TENHH

C

25

-

Tên hàng hóa

TKNO

C

6

-

Tài khoản nợ

TKCO

C

6


-

Tài khoản có

NGAYLAP

C

10

-

Ngày lập phiếu (được viết theo dạng 2 kí tự đầu chỉ
ngày, 2 kí tự tiếp theo chỉ tháng, 4 kí tự tiếp chỉ năm)

DVT

C

5

-

Đơn vị tính

KL

N


9

0

Khối lượng

DG

N

8

0

Đơn giá

(Người ta phân biệt phiếu mua/bán qua tài khoản 156. Tài khoản 156 được
chia chi tiết dưới dạng 156xxx trong đó xxx là mã cửa hàng)
20


u cầu:
1. Tính thành tiền theo cơng thức TT=DG*KL+VAT(10%) nếu bán trong
tháng 12 khuyến mãi 10%.
2. Đổi dvt của các phiếu có dvt là tấn sang kg.
3. Xóa các phiếu có dvt là tec.
4. Tăng đơn giá của các phiếu bán mã hàng DTSN02 của cửa hàng ACB trong
tháng 1 lên 10%.
5. In các phiếu bán mặt hàng DTSN01 trong năm 2013.
6. In các phiếu bán mặt hàng DTSN01 trong năm 2013 theo trình tự thời gian

lập phiếu.
7. In các phiếu mua hàng của nhà cung cấp TC trong năm 2013.
8. In các phiếu mua hàng của nhà cung cấp TC trong năm 2013 theo trình tự
giảm dần của thành tiền.
9. In các phiếu mua trong năm 2013 sắp xếp theo mã hàng, cùng mã theo khối
lượng mua giảm dần.
10. In các phiếu mua trong năm 2013 sắp xếp theo mã hàng, cùng mã theo ngày
mua.
11. Tính tổng số lượng mua hàng của cửa hàng ABG trong tháng 1/2013.
12. Tính đơn giá mua bình quân của mặt hàng DTSN01và DTSN02.
13. Đếm số phiếu bán có thành tiền trên một triệu.
14. In ra báo cáo về tổng số tiền mua của các cửa hàng trong năm 2013.
15. In ra báo cáo về tổng số tiền bán của các cửa hàng trong năm 2013. Cho biết
5 cửa hàng có doanh thu cao nhất.
16. In ra báo cáo về tổng khối lượng mua từng mặt hàng của từng cửa hàng
trong quý I /2013.
17. In ra báo cáo về khối lượng tồn của từng mặt hàng ở các cửa hàng tính đến
ngày hiện tại (giả sử ban đầu tồn các mặt hàng là 0).
Bài làm
1. USE qlbh
REPLACE ALL tt WITH kl*dg*1.1
REPLACE tt WITH sl*dg*1.1*0.9 FOR left(ngaylap,2)="12" and
left(tkco,3)="156"
2. REPLACE dvt WITH “kg”, kl WITH kl*1000,dg WITH dg/1000 FOR
dvt=“tan”
REPLACE ALL tt WITH dg*kl
21


3. DELETE FOR dvt=“tec”

4. REPLACE dg WITH dg*1.1 FOR
substr(ngaylap,3,2)=“01” AND tkco=“156ACB”

mahh=“DTSN02”

AND

5. LIST FOR mahh=“DSTN01” AND left(tkco,3)=“156” AND
substr(ngaylap,5,4)=“2013” TO PRINTER
6. INDEX ON substr(ngaylap,3,2)+left(ngaylap,2) TO cau6 FOR mahh=
“DTSN01” AND substr(ngaylap,5,4)=“2013” AND left(tkco,3)=“156”
LIST TO PRINTER
7. LIST FOR substr(mahh,3,2)=“TC” AND left(tkno,3)=“156” AND
substr(ngaylap,5,4)=“2013” TO PRINTER
8. INDEX ON -tt TO cau8 FOR left(tkno,3)=“156” AND
right(ngaylap,4)=“2013”
LIST TO PRINTER
9. INDEX ON mahh+(1/kl) TO cau9 FOR left(tkno,3)=“156” AND
substr(ngaylap,5,4)=“2013”
LIST TO PRINTER
10. INDEX ON mahh+substr(ngaylap,3,2)+left(ngaylap,2) TO cau10 FOR
left(tkno,3)=“156” AND right(ngaylap,5,4)=“2013”
LIST TO PRINTER
11. SUM kl TO cau11 FOR tkno=“156ABG” AND substr (ngaylap,3,6)
=“012013”
?”Tổng số lượng mua hàng cửa hàng ABG tháng 1/2013 là:”, cau11
12. SUM tt TO tongtt FOR left(tkno,3)=“156” AND (mahh=“DTSN01” OR
mahh=“DTSN02”)
SUM kl TO tongkl FOR left(tkno,3)=“156” AND (mahh=“DTSN01” OR
mahh=“DTSN02”)

?“Đơn giá mua bình quân của DTSN01 và DTSN02 là:”, tongtt/tongkl
13. COUNT TO cau13 FOR left(tkco,3)=“156” AND tt>1000000
?“Số phiếu bán có thành tiền trên 1 triệu là:”, cau13
14. INDEX ON substr(tkno,4,3) TO cau14 FOR left(tkno),3)= “156” AND
substr(ngaylap,5,4)=“2013”
TOTAL ON substr(tkno,4,3) TO kq14 FIELDS tt
USE kq14
LIST substr(tkno,4,3),tt TO PRINTER
15. Tương tự như câu 14 nhưng thay “tkno” thành “tkco”
22


- Cho biết 5 cửa hàng có doanh thu cao nhất:
USE kq15
INDEX ON -tt TO dtcn
GO TOP
LIST NEXT 5 FIELDS substr(tkco,4,3),tt
16. INDEX ON tenhh+right(tkno,3) TO cau16 FOR substr(ngaylap,5,4)=
"2013" AND VAL(substr(ngaylap,3,2))<=3 AND left(tkno,3)="156"
TOTAL ON tenhh+right(tkno,3) TO kq FIELDS kl
USE kq
LIST FIELDS tenhh,right(tkno,3),kl TO PRINTER
17. In báo cáo khối lượng tồn của từng mặt hàng ở các cửa hàng tính đến ngày
hiện tại? (Khối lượng tồn = KL nhập (phiếu thu) - KL xuất (phiếu bán)
- Bước 1: Chuyển dấu khối lượng của các phiếu bán hàng sang dấu âm:
REPLACE kl WITH -kl FOR left(tkco,3)=“156”
- Bước 2: Tiến hành phân nhóm: Tiêu thức phân nhóm: mặt hàng+cửa hàng
INDEX ON mahh+IIF(left(tkno,3)=“156”, substr(tkno,4), substr(tkco,4)) TO
cau17
- Bước 3: Tính tổng theo nhóm:

TOTAL ON mahh+ IIF(left(tkno,3)=“156”,substr(tkno,4),substr(tkco,4)) TO
klt
USE klt
LIST mahh,kl,tkno,tkco TO PRINTER
- Bước 4: Chuyển lại dấu:
USE qlbh
REPLACE kl WITH -kl FOR left(tkco,3)=“156”
Bài 5: Bài thực hành số 2
Để quản lý lương của các cán bộ tại một đơn vị, người ta sử dụng tệp
QLLCB.dbf với cấu trúc sau:
Name

Type Width

Dec

Giải thích

STT

N

2

0

Số thứ tự

HODEM


C

25

-

Họ đệm

TEN

C

8

-

Tên

MPCT

C

10

-

Mã phịng cơng tác

MCV


C

10

-

Mã chức vụ
23


NS

D

8

-

Ngày sinh

NAM

L

1

-

Nam/Nữ


HSL

N

4

2

Hệ số lương

NLL

D

8

-

Ngày lên lương

PCAT

N

6

0

Phụ cấp ăn trưa


BHXH

N

6

0

Trừ bảo hiểm xã hội

BHYT

N

6

0

Trừ bảo hiểm y tế

TSTDL

N

7

0

Tổng số tiền được lĩnh trong tháng


Yêu cầu:
1.
2.
3.
4.

Tạo tệp và nhập dữ liệu với cấu trúc đã xây dựng.
Đóng tệp.
Mở tệp và xem lại cấu trúc của tệp.
Xem HODEM, TEN, MPCT của các cán bộ nam.

5. Xem HODEM, TEN, MPCT của các cán bộ nam thuộc phịng có mã “P01”.
6. Xem HODEM, TEN, MPCT của các cán bộ về hưu trong năm 2012 (Biết
rằng: tiêu chuẩn về hưu là: nam tính đến tuổi 60, nữ tính đến tuổi 55)
7. Xem 5 bản ghi đầu tiên trong tệp.
8. Xem 5 bản ghi cuối cùng trong tệp.
9. Xem các cán bộ nam có chức vụ.
10. Xem bản ghi số hiệu 3.
11. Tạo tệp LL2012 để lưu bản ghi của các cán bộ được lên lương trong năm
2012 (Biết rằng: Nếu HSL<3 thì 3 năm được lên lương một lần; Nếu
HSL>=3 thì 4 năm được lên lương một lần).
12. Mở tệp LL2012 và cho xem họ tên và mã phòng của các cán bộ được lên
lương trong năm 2012.
13. Mở lại tệp QLLCB. Sửa giá trị của bản ghi số hiệu 3 trên trường MPCT
thành “P01”.
14. Tính PCAT, BHXH, BHYT, và TSTDL cho từng cán bộ theo công thức:
- PCAT = 800.000
- BHYT = 1% x Lương chính
- BHXH = 5% x Lương chính
- Lương chính = 830.000xHSL

- TSTDL = Lương chính + PCAT - BHXH - BHYT
15. Đánh dấu xoá bản ghi số hiệu 3. Sau đó phục hồi lại bản ghi số 3.
16. Đánh dấu xoá 5 bản ghi cuối cùng.
17. Phục hồi lại 5 bản ghi cuối cùng.
24


18. Xố hẳn 5 bản ghi cuối cùng.
19. Xóa hẳn tất cả các bản ghi.
20. Sắp xếp các bản ghi theo thứ tự TSTDL tăng dần. Hiển thị kết quả sắp xếp.
21. Mở lại tệp QLLCB. Sắp xếp các bản ghi của phòng ‘P01’ theo thứ tự HSL
giảm dần.
22. Sắp xếp các bản ghi theo thứ tự Alphabet của MPCT, cùng MPCT sắp xếp
theo thứ tự TSTDL tăng dần.
23. Sắp xếp các bản ghi theo thứ tự Alphabet của MPCT, cùng MPCT sắp xếp
theo thứ tự tuổi giảm dần.
24. Hiển thị lên màn hình danh sách bao gồm Họ tên và Mã phịng cơng tác của
5 cán bộ có hệ số lương cao nhất trong đơn vị.
25. Đếm số cán bộ của phòng “P02”.
26. Đếm số cán bộ dưới 25 tuổi của phòng “P01”.
27. Đếm số cán bộ nam, số cán bộ nữ và xác định chệnh lệch về số lượng giữa
nam và nữ.
28. Tính tổng số tiền được lĩnh của tồn đơn vị.
29. Tính tổng PCAT, tổng BHXH, tổng BHYT, tổng TSTDL của phịng có mã
“P02”.
30. Tính TSTDL bình quân của một cán bộ trong đơn vị.
31. Tính hệ số lương bình qn của mỗi cán bộ phịng “P01”.
32. Tính thu nhập bình qn của mỗi cán bộ dưới 25 tuổi.
33. Tính tổng số tiền được lĩnh của từng phịng.
34. Xác định mã của phịng có TSTDL tồn phịng cao nhất.

Bài làm
1. CREATE qllcb
APPEND
2. USE
3. USE qllcb.dbf
MODIFY STRUCTURE
4. LIST FIELDS hodem,ten,mpct FOR nam=.T.
5. LIST FIELDS hodem,ten,mpct FOR nam=.T. AND mpct=“P01”
6. LIST FIELDS hodem,ten,mpct FOR (nam=.T. AND 2012-year(ns)=60) OR
(nam=.F. AND 2012-year(ns)=55)
7. GO TOP
LIST NEXT 5
25


×