intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài 7 - lập trình trong Visual Foxpro

Chia sẻ: Vo Danh | Ngày: | Loại File: DOC | Số trang:12

556
lượt xem
153
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Bài 7 - lập trình trong Visual Foxpro

  1. 7 - lập trình trong Visual Foxpro Bài 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 ↵ Trong đó: 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 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 lệnh SET để thiết lập môi trường làm việc ... * Dùng các && Hiển thị năm dạng yyyy SET CENTURY ON && Hiển thị ngày tháng dạng dd/mm/yyyy SET DATE FREN && Đặt chế độ mở bảng dạng dùng riêng SET EXCLUSIVE ON * 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
  2. 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" ; 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 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 ↵ 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 [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 
  3. 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 SET 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 thứ 1 IF BT1 THEN .... && IF thứ 2 IF BT2 THEN .... ELSE .... && Kết thúc IF thứ 2 ENDIF ELSE .... && Kết thúc IF thứ nhất. ENDIF 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 ...
  4. CASE BieuThucLogicN Lệnh N [ OTHERWISE Lệnh N+1 ] ENDCASE 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 Lệnh kết trường hợp tất cả các câu K và thú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.
  5. Cú pháp: DO WHILE Lệnh 1 [LOOP] [EXIT] Lệnh 2 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, 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 lập tức) kết l ệnh EXIT cho phép (ngay thúc 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 ;
  6. 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 USE 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 lập tức) kết l ệnh EXIT cho phép (ngay thúc 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.
  7. 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 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) 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 đó:
  8. 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. 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
  9. 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 III. 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 [PARAMETERS ] 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 thực hiện lời gọi thủ tục, trình chính khi 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 [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 đó.
  10. 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: 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 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 thủ tục bằng sử dụng ra các riêng cách khai báo FUNCTION Cú pháp: FUNCTION [PARAMETERS ] Lệnh RETURN [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.
  11. 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 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 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"
  12. 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.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2