valueN là giá tră thăc ăăăc truyăn tăăng ăng cho các tham să hình thăc căa chăăng trình con; tùy chăn IN ProgName cho phép xác ăănh file chăăng trình chăa thă tăc căn găi măc ăănh là tro[r]
Trang 1Bài 7 - lơp trình trong Visual Foxpro
I Tơo và chơy mơt chơơng trình
Visual Foxpro làm viăc ă hai chă ăă:
o Căa să lănh - Các lănh ăăăc ăăa vào căa să lănh và thăc thi
o Chăăng trình - Tăp các lănh ăăăc thăc hiăn theo măt thă tă nào ăó
Chăăng trình trong Visual Foxpro ăăăc lău trong các file có phăn mă răng là PRG
Tơo mơt chơơng trình
Lănh (tă căa să lănh)
MODIFY COMMAND <TenChuongtrinh>
Trong ăó: <Tenchuongtrinh> là tên chăăng trình
Khi ăó xuăt hiăn căa să soăn thăo cho phép soăn thăo văn băn chăăng trình
Kơt thúc soơn: Nhăn Ctrl+W ăă ghi lăi.
Sơa chơơng trình: căng dùng lănh MODI COMM <tenchuongtrinh>
Mơt chơơng trình đơn giơn
Chăăng trình trong Visual Foxpro không qui ăănh theo măt cău trúc nhăt ăănh
Xét măt ví dă ăăn giăn sau ăây:
* Phần 1 : Bắt đầu
* Dùng các lệnh SET để thiết lập môi trường làm việc SET CENTURY ON && Hiển thị năm dạng yyyy
SET DATE FREN && Hiển thị ngày tháng dạng dd/mm/yyyy
SET EXCLUSIVE ON && Đặt chế độ mở bảng dạng dùng riêng
* Phần 2: Chuẩn bị dữ liệu
* Mở các bản cần thiết, đặt quan hệ
CLOSE ALL
SELECT 0
USE Hososv ALIAS SINHVIEN
SET ORDER TO MASV
SELECT 0
USE diem
SET RELATION TO masv INTO SINHVIEN
* Phần 3: Chương trình chính
* Xử lý các yêu cầu đặt ra
BROWSE FIELDS masv,SINHVIEN.HOTEN,MAMON,DIEM1 ;
FOR malop="3H-04" AND mamon="GT101" ; TITLE "Bảng điểm môn GT101 - Lớp 3H-04" ;
Trang 2* Phần 4: Kết thúc
* Đóng các bảng đả mở, thiết lập lại chế độ làm việc USE IN SINHVIEN
USE IN DIEM
RETURN
Nhă trên ta thăy chăăng trình ăăăc tă chăc thành 4 phăn:
Phăn 1: Băt ăău - chuăn bă môi trăăng (să dăng các lănh SET)
Phăn 2: Chuăn bă dă liău (mă các băng, ăăt quan hă )
Phăn 3: Thân chăăng trình (xă lý các yêu cău ăăt ra)
Phăn 4: Kăt thúc (ăóng các băng ăã mă, tră lăi trăng thái )
Chơy (thơc thi) mơt chơơng trình
Lănh (thăc hiăn tă căa să lănh)
DO <TenChuongTrinh>
II lơnh có cơu trúc
1 Lơnh IF ENDIF
Thăc hiăn có ăiău kiăn măt tăp các lănh dăa vào giá tră căa biău thăc logic
Cú pháp:
IF <BieuThucLG> [THEN]
Lơnh1 [ELSE
Lơnh2]
ENDIF
Trong ăó:
BieuThucLG - Biău thăc logic
BieuThucLG = TRUE Thì các Lơnh1 ăăăc thăc hiăn
BieuThucLG = FALSE và să dăng mănh ăă ELSE khi ăó các Lơnh2 ăăăc thăc hiăn
Ví dă 1: Kiăm tra xem có ai sinh nhăt vào hôm nay hay không? Nău có thì hiăn thă
hă tên ngăăi ăó
SET CENTURY ON
SET DATE FREN
Trang 3SET EXCLUSIVE ON
CLOSE ALL
SELECT 0
USE HOSOSV ALIAS HSSV
LOCA FOR DAY(DATE())=DAY(Ngaysinh) and MONT(DATE())=MONT(Ngaysinh)
IF Found() THEN
WAIT WIND “Hom nay:”+DTOC(Date()) “la sinh nhat cua:”+HSSV.hoten ELSE
WAIT WIND “Khong co ai sinh nhat vao hom nay:”+DTOC(Date())
ENDIF
USE IN HOSOSV
RETURN
Chú ý: Có thă să dăng cău trúc IF ENDIF lăng nhau
IF BT1 THEN && IF thă 1
IF BT2 THEN && IF thă 2
ELSE
ENDIF && Kăt thúc IF thă 2
ELSE
ENDIF && Kăt thúc IF thă nhăt
2 Lơnh DO CASE ENDCASE
Kiăm tra nhiău ăiău kiăn logic, và thăc hiăn tăp lănh ăău tiên mà biău thăc logic có giá tră TRUE
Cú pháp:
DO CASE
CASE BieuThucLogic1
Lơnh 1 CASE BieuThucLogic2
Lơnh 2
CASE BieuThucLogicN
Lơnh N [ OTHERWISE
Lơnh N+1 ] ENDCASE
Trang 4Trong ăó:
BieuThucLogicK - Biău thăc logic
Thăc hiăn lănh: Kiăm tra tă BieuThucLogic1 ăăn N nău tăn tăi măt BieuThucLogicK =TRUE thì chăăng trình să thăc hiăn các câu Lơnh K và kăt thúc, trăăng hăp tăt că các BieuThucLogic=FALSE và să dăng mănh ăă OTHERWISE thì các Lơnh N+1 ăăăc thăc hiăn
Ví dă 2: Tính ăiăm trung bình chung và tính xăp loăi căa măt sinh viên nào ăó SET TALK OFF
CLOSE ALL
SELECT 0
USE monhoc
SET ORDER TO Ma
SELECT 0
USE diem
SET RELATION TO mamon INTO Monhoc
SUM monhoc.sodvht*diem.diem1,monhoc.sodvht TO tongdiem,tongdvht FOR masv="SV-0624 "
DTBC=tongdiem/tongdvht
DO CASE
CASE dtbc>9
WAIT WINDOW "Xep loai: Xuat sac"
CASE dtbc>8
WAIT WINDOW "Xep loai: Gioi"
CASE dtbc>7
WAIT WINDOW "Xep loai: Kha"
CASE dtbc>6
WAIT WINDOW "Xep loai: Trung Binh Kha"
CASE dtbc>5
WAIT WINDOW "Xep loai: Trung Binh"
OTHERWISE
WAIT WINDOW "Xep loai: Yeu"
ENDCASE
USE IN monhoc
USE IN diem
RETURN
3 Lơnh DO WHILE ENDDO
Thăc hiăn măt tăp các lănh trong vòng lăp có ăiău kiăn
Cú pháp:
DO WHILE <BieuThucLogic>
Lơnh 1 [LOOP]
[EXIT]
Lơnh 2
Trang 5Trong ăó:
BieuThucLogic - Biău thăc logic
Thăc hiăn: Nău BieuThucLogic=TRUE să thăc các Lơnh 1, Lơnh 2, khi ăăn ENDDO să quay tră lăi kiăm tra BieuThucLogic; trăăng hăp BieuThucLogic=FALSE să kăt thúc lănh
Lănh LOOP cho phép (ngay lăp tăc) tră lăi băt ăău vòng lăp (Kiăm tra BieuThucLogic), bă qua các lănh giăa LOOP và ENDDO Lănh LOOP có thă ăăt vào băt că ăâu giăa DO WHILE và ENDDO
Lănh EXIT cho phép (ngay lăp tăc) kăt thúc lănh DO WHILE ENDDO và bă qua các lănh giăa EXIT và ENDDO Lănh EXIT có thă ăăt vào băt că ăâu giăa
DO WHILE và ENDDO
Ví dă 3: Tìm xem trong danh sách sinh viên có băn Nă (Gioi=.T.) nào có ăiăm trung binhg chung ăăt >=8.0?
SET TALK OFF
CLEAR
CLEAR ALL
CLOSE ALL
SELECT 0
USE monhoc
SET ORDER TO MONLOP && MA+MALOP
SELECT 0
USE diem
SET RELATION TO mamon+malop INTO Monhoc
SELECT 0
USE Hososv
GO TOP
DO WHILE !EOF()
IF hososv.gioi=.F Then
SKIP LOOP ENDIF
SELECT diem
SUM monhoc.sodvht*diem.diem1,monhoc.sodvht ;
TO tdiem,tdvht FOR masv=Hososv.masv
dtbc=tongdiem/tongdvht
IF dtbc>=8 THEN
WAIT WINDOW "SV: "+ hososv.hoten +" DTBC: "+ STR(dtbc) EXIT
ENDIF
SELECT hososv
SKIP
ENDDO
USE IN hososv
Trang 6USE IN monhoc
USE IN diem
RETURN
4 Lơnh FOR ENDFOR
Thăc hiăn măt tăp các lănh văi să lăn lăp xác ăănh
Cú pháp:
FOR Bien = initValue TO FinalValue [STEP K]
Lơnh 1 [LOOP]
[EXIT]
Lơnh 2 ENDFOR
Trong ăó:
Bien - ăóng vai trò nhă măt biăn ăăm, initValue - Giá tră ăău, FinalValue - Giá tră cuăi
Thăc hiăn: Thăc hiăn các lănh giăa FOR và ENDFOR khi biăn Bien có giá tră
tă initValue ăăn FinalValue
Tham să STEP K qui ăănh băăc thay ăăi căa biăn Bien băng K (K có thă âm), măc ăănh (khi không thên tùy chăn STEP K) K =1
Lănh LOOP cho phép (ngay lăp tăc) tră lăi băt ăău vòng FOR, bă qua các lănh giăa LOOP và ENDFOR Lănh LOOP có thă ăăt vào băt că ăâu giăa FOR và ENDFOR
Lănh EXIT cho phép (ngay lăp tăc) kăt thúc lănh FOR ENDFOR và bă qua các lănh giăa EXIT và ENDFOR Lănh EXIT có thă ăăt vào băt că ăâu giăa FOR và ENDFOR
Ví dă 4: Tính ăiăm trung bình chung hăc kă 1 năm 2004-2005 căa lăp 3E-04
SET TALK OFF
SET SAFETY OFF
CLEAR
CLEAR ALL
CLOSE ALL
SELECT 0
USE monhoc
SET ORDER TO MONLOP && MA+MALOP
SELECT 0
USE diem
SET RELATION TO mamon+malop INTO Monhoc
Trang 7SET FILTER TO monhoc.hocky=1 AND monhoc.namhoc=2004
SELECT 0
USE Hososv
COPY TO c:\temp\HOSOLOP FOR malop="3E-04"
USE IN hososv
SELECT 0
USE c:\temp\HOSOLOP ALIAS Hososv EXCLUSIVE
ALTER table c:\temp\HOSOLOP ADD COLUMN Dtbc N(5,2)
n=RECCOUNT()
FOR i=1 TO n
SELECT diem
SUM monhoc.sodvht*diem.diem1,monhoc.sodvht ;
TO tongdiem,tongdvht FOR masv=Hososv.masv SELECT hososv
REPLACE dtbc WITH IIF(tongdvht>0,tongdiem/tongdvht,0)
SKIP
ENDFOR
SELECT Hososv
BROWSE FIELDS masv,hoten,ngaysinh,dtbc ;
TITLE "Tong ket ket qua hoc ky 1, 2004-2005"
USE IN hososv
USE IN monhoc
USE IN diem
RETURN
5 Lơnh SCAN ENDSCAN
Di chuyăn con tră băn ghi trên măt vùng làm viăc nào ăó, tăăng ăng văi măi băn ghi tìm thăy să thăc hiăn măt tăp các lănh
Cú pháp:
SCAN [Scope] [FOR BieuthucLogic]
Lơnh 1 [LOOP]
[EXIT]
Lơnh 2 ENDSCAN
Trong ăó:
Tùy chăn Scope cho phép xác ăănh phăm vi tác ăăng căa lănh (ALL, NEXT n, RECORD n, REST)
Tùy chăn [FOR BieuThucLogic] cho phép lănh SCAN duyăt trên các băn ghi thăa mãn BieuThucLogic Nău không ăăa tham să này vào thì lănh SCAN să duyăt trên tăt că các băn ghi
Trang 8 Thăc hiăn: (*) Nău còn băn ghi (trong phăm vi Scope và thăa mãn BieuThucLogic) trong vùng làm viăc -> Thăc hiăn các lănh giăa SCAN và ENDSCAN, tiăp ăăn dăch chuyăn con tră băn ghi ăi 1 vă trí (SKIP 1) răi tră lăi (*); Nău không còn băn ghi nào-> Kăt thúc lănh SCAN
Lănh LOOP cho phép (ngay lăp tăc) tră lăi băt ăău vòng SCAN bă qua các lănh giăa LOOP và ENDSCAN Lănh LOOP có thă ăăt vào băt că ăâu giăa SCAN
và ENDSCAN
Lănh EXIT cho phép (ngay lăp tăc) kăt thúc lănh SCAN ENDSCAN và bă qua các lănh giăa EXIT và ENDSCAN Lănh EXIT có thă ăăt vào băt că ăâu giăa SCAN và ENDSCAN
Ví dă 5: Tính ăiăm trung bình chung hăc kă 1 năm 2004-2005 căa lăp 3E-04 (nhă ví
dă 4 nhăng thay FOR băng SCAN)
SET SAFETY OFF
SET TALK OFF
CLEAR
CLEAR ALL
CLOSE ALL
SELECT 0
USE monhoc
SET ORDER TO MONLOP && MA+MALOP
SELECT 0
USE diem
SET RELATION TO mamon+malop INTO Monhoc
SET FILTER TO monhoc.hocky=1 AND monhoc.namhoc=2004
SELECT 0
USE Hososv
COPY TO c:\temp\HOSOLOP FOR malop="3E-04"
USE IN hososv
SELECT 0
USE c:\temp\HOSOLOP ALIAS Hososv EXCLUSIVE
ALTER table c:\temp\HOSOLOP ADD COLUMN Dtbc N(5,2)
GO TOP
SCAN
SELECT diem
SUM monhoc.sodvht*diem.diem1,monhoc.sodvht ;
TO tongdiem,tongdvht FOR masv=Hososv.masv SELECT hososv
REPLACE dtbc WITH IIF(tongdvht>0,tongdiem/tongdvht,0)
ENDSCAN
SELECT Hososv
BROWSE FIELDS masv,hoten,ngaysinh,dtbc ;
TITLE "Tong ket ket qua hoc ky 1, 2004-2005"
USE IN hososv
USE IN monhoc
USE IN diem
RETURN
Trang 9III Chơơng trình con
1 Thơ tơc (PROCEDURE)
Ngăăi să dăng có thă tăo ra các thă tăc riêng băng cách să dăng khai báo PROCEDURE
Cú pháp:
PROCEDURE <ProcName>
[PARAMETERS <para1, para2 paraN>]
Lơnh [ENDPROC]
Trong ăó:
ProcName: Tên thă tăc (do ngăăi să dăng tă ăăt)
Tùy chăn PARAMETERS cho phép khai báo các tham să “hình thăc”, các tham
să này să nhăn giá tră thăc tă chăăng trình chính khi thăc hiăn lăi găi thă tăc, para1, para2 , , paraN là tên các tham să hình thăc
Lăi găi thă tăc: Các thă tăc sau khi hoàn tăt có thă ăăăc găi tă măt chăăng trình nào
ăó Lăi găi chăăng trình con có dăng nhă sau
DO <ProcName> [With value1, value2 valueN] [IN ProgName]
Trong ăó: ProcName là tên thă tăc căn găi; value1, value valueN là giá tră thăc ăăăc truyăn tăăng ăng cho các tham să hình thăc căa chăăng trình con; tùy chăn IN ProgName cho phép xác ăănh file chăăng trình chăa thă tăc căn găi (măc ăănh là trong băn thân chăăng trình ăang thăc hiăn)
Ví dă 6: Viăt thă tăc cho phép hiăn thă thă (trong tuăn) căa măt ngày nào ăó
CLEAR ALL
CLOSE ALL
CLEAR
DO HienThiThu WITH DATE()
* - Khai bao thu tuc
-PROCEDURE HienThiThu
PARAMETERS date1
WAIT WINDOW CDOW(Date1)
ENDPROC
Trong ví dă trên, date1 là tham să “hình thăc” trong thă tăc HienThiNgay và nhăn tham să thăc là Date() trong lăi găi thă tăc trong chăăng trình chính
Giă să ví dă 6 ăăăc lău vào file Vidu6.PRG, khi ăó trong măt chăăng trình khác có thă thăc hiăn lăi găi thă tăc HienThiThu nhă sau:
Trang 10DO HienThiThu WITH DATE() IN Vidu6.PRG
Chú ý: Văi các tham să hình thăc Para1, para2 có thă không truyăn giá tră cho các tham să này khi thăc hiăn lăi găi thă tăc, tuy nhiên các tham să khi ăó să nhăn giá tră FALSE (giá tră Logic) và nhă văy răt có thă dăn ăăn lăi
2 Hàm (FUNCTION)
Ngoài các hàm do Visual Foxpro cung căp săn, ngăăi să dăng có thă tăo ra các thă tăc riêng băng cách să dăng khai báo FUNCTION
Cú pháp:
FUNCTION <FuncName>
[PARAMETERS <para1, para2 paraN>]
Lơnh RETURN <BieuThuc>
[ENDFUNC]
Trong ăó:
FuncName: Tên hàm (do ngăăi să dăng tă ăăt)
Tùy chăn PARAMETERS cho phép khai báo các tham să “hình thăc”, các tham
să này să nhăn giá tră thăc tă chăăng trình chính khi thăc hiăn lăi găi hàm para1, para2 , , paraN là tên các tham să hình thăc
BieuThuc: Giá tră căa biău thăc này là giá tră tră vă căa hàm
Lăi găi hàm: Các hàm tă tăo hoăc hàm do Visual Foxpro cung căp ăău ăăăc găi nhă sau:
FuncName(With value1, value2 valueN)
Trong ăó: FuncName là tên hàm căn găi; value1, value valueN là giá tră thăc ăăăc truyăn tăăng ăng cho các tham să hình thăc căa chăăng trình con Lăi găi hàm chă tham gia vào trong các biău thăc
Ví dă 7: Viăt hàm tính tăng căa 2 să
CLEAR ALL
CLOSE ALL
CLEAR
a=10
b=20
WAIT WINDOW STR(a)+"+"+STR(b)+"="+STR(tong(a,b))
* - Khai bao ham
-FUNCTION Tong
PARAMETERS x,y
RETURN x+y
Trang 11ENDPROC
Ví dă 8: Viăt hàm tră vă thă (tiăng viăt) căa măt ngày nào ăó
CLEAR ALL
CLOSE ALL
CLEAR
WAIT WINDOW “Hom nay la: ”+ ThuVN(DATE())
* - Khai bao thu tuc -FUNCTION ThuVN
PARAMETERS d
kq=""
i=DOW(d)
DO CASE
CASE i=1
kq="Chu Nhat"
CASE i=2
kq="Thu Hai"
CASE i=3
kq="Thu Ba"
CASE i=4
kq="Thu Tu"
CASE i=5
kq="Thu Nam"
CASE i=6
kq="Thu Sau"
CASE i=7
kq="Thu Bay"
ENDCASE
RETURN kq
ENDPROC
Bài tơp
1 Thăc hiăn các ví dă trong bài
2 Hoàn thành hàm TENVN ăă nêu trong bài 3