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]
(1)Bài - lơp trình 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 Visual Foxpro ăăăc lău các file có phăn mă 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 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 : Bắt đầu * Dùng các SET CENTURY ON SET DATE FREN SET EXCLUSIVE ON lệnh SET để thiết lập môi trường làm việc && Hiển thị năm dạng yyyy && Hiển thị ngày tháng dạng dd/mm/yyyy && Đặt chế độ mở bảng dạng dùng riêng * Phần 2: Chuẩn bị liệu * Mở các cần thiết, đặt quan hệ CLOSE ALL SELECT USE Hososv ALIAS SINHVIEN SET ORDER TO MASV SELECT 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 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" ; Lop11.com (2) NOEDIT * 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 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 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 ăó các Lơnh2 ăăăc thăc hiăn Ví dă 1: Kiăm tra xem có sinh nhăt vào hôm hay không? Nău có thì hiăn thă hă tên ngăăi ăó SET CENTURY ON SET DATE FREN Lop11.com (3) SET EXCLUSIVE ON CLOSE ALL SELECT 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 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 IF BT1 THEN && IF thă IF BT2 THEN && IF thă ELSE ENDIF && Kăt thúc IF thă ELSE ENDIF && Kăt thúc IF thă nhăt 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 CASE BieuThucLogic2 Lơnh CASE BieuThucLogicN Lơnh N [ OTHERWISE Lơnh N+1 ] ENDCASE Lop11.com (4) Trong ăó: 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 USE monhoc SET ORDER TO Ma SELECT 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 Lơnh DO WHILE ENDDO Thăc hiăn măt tăp các lănh vòng lăp có ăiău kiăn Cú pháp: DO WHILE <BieuThucLogic> Lơnh [LOOP] [EXIT] Lơnh Lop11.com (5) ENDDO Trong ăó: 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, ăă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 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 USE monhoc SET ORDER TO MONLOP && MA+MALOP SELECT USE diem SET RELATION TO mamon+malop INTO Monhoc SELECT 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 Lop11.com (6) USE IN monhoc USE IN diem RETURN 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 [LOOP] [EXIT] Lơnh 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 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ă năm 2004-2005 căa lăp 3E-04 SET TALK OFF SET SAFETY OFF CLEAR CLEAR ALL CLOSE ALL SELECT USE monhoc SET ORDER TO MONLOP && MA+MALOP SELECT USE diem SET RELATION TO mamon+malop INTO Monhoc Lop11.com (7) SET FILTER TO monhoc.hocky=1 AND monhoc.namhoc=2004 SELECT USE Hososv COPY TO c:\temp\HOSOLOP FOR malop="3E-04" USE IN hososv SELECT 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 Lơnh SCAN ENDSCAN Di chuyăn 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 [LOOP] [EXIT] Lơnh 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 Lop11.com (8) Thăc hiăn: (*) Nău còn băn ghi (trong phăm vi Scope và thăa mãn BieuThucLogic) 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 tră băn ghi ăi 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ă năm 2004-2005 căa lăp 3E-04 (nhă ví dă nhăng thay FOR băng SCAN) SET SAFETY OFF SET TALK OFF CLEAR CLEAR ALL CLOSE ALL SELECT USE monhoc SET ORDER TO MONLOP && MA+MALOP SELECT USE diem SET RELATION TO mamon+malop INTO Monhoc SET FILTER TO monhoc.hocky=1 AND monhoc.namhoc=2004 SELECT USE Hososv COPY TO c:\temp\HOSOLOP FOR malop="3E-04" USE IN hososv SELECT 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 Lop11.com (9) III Chơơng trình Thơ tơc (PROCEDURE) Ngăăi să dăng có thă tăo 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 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 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 có dăng nhă sau DO <ProcName> [With value1, value2 valueN] [IN ProgName] Trong ăó: ProcName là tên thă tăc 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 găi (măc ăănh là 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” thă tăc HienThiNgay và nhăn tham să thăc là Date() lăi găi thă tăc chăăng trình chính Giă să ví dă ăăăc lău vào file Vidu6.PRG, ăó măt chăăng trình khác có thă thăc hiăn lăi găi thă tăc HienThiThu nhă sau: Lop11.com (10) DO 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 thăc hiăn lăi găi thă tăc, nhiên các tham să ăó să nhăn giá tră FALSE (giá tră Logic) và nhă văy răt có thă dăn ăăn lăi Hàm (FUNCTION) Ngoài các hàm Visual Foxpro cung căp săn, ngăăi să dăng có thă tăo 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 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 Visual Foxpro cung căp ăău ăăăc găi nhă sau: FuncName(With value1, value2 valueN) Trong ăó: FuncName là tên hàm 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 Lăi găi hàm chă tham gia vào các biău thăc Ví dă 7: Viăt hàm tính tăng căa 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 Lop11.com (11) ENDPROC 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 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 Thăc hiăn các ví dă bài Hoàn thành hàm TENVN ăă nêu bài Lop11.com (12)