Xem mẫu

  1. Chương 7 Lập trình trong Visual Foxpro Chƣơng 7 LẬP TRÌNH TRONG VISUAL FOXPRO 7.1. Giới thiệu về lập trình Trong Visual FoxPro, lập trình thủ tục (lập trình cấu trúc) và phƣơng pháp lập trình hƣớng đối tƣợng làm việc chung với nhau, vì thế ta có thể tạo các ứng dụng một cách mềm dẻo. Lập trình thủ tục là viết một dãy các lệnh liên tiếp với nhau để thực hiện một nhiệm vụ nào đó. Thông thƣờng bất cứ nhiệm vụ nào làm bằng chƣơng trình đều có thể làm bằng hội thoại hoặc sử dụng công cụ nếu có thời gian. 7.1.1. Các kỹ thuật lập trình trong Visual FoxPro Ta có thể viết chƣơng trình trong Visual FoxPro bằng cách viết các câu lệnh trong: - Cửa sổ lệnh - Trong một file chƣơng trình - Trong các cửa sổ tình huống (Sự kiện- Event) hay phƣơng thức (Method) của Form Designer,.... - Trong các cửa sổ thủ tục của Form Designer, .... 1) Sử dụng cửa sổ lệnh Ta có thể thực hiện các câu lệnh bằng cách gõ chúng vào cửa sổ lệnh rồi ấn phím Enter. Để thực hiện lại các câu lệnh này ta di chuyển con trỏ đến dòng chứa câu lệnh đó rồi ấn phím Enter. Ta cũng có thể cho thực hiện nhiều dòng lệnh một lúc bằng cách sau: - Chọn các dòng lệnh cần thi hành. - Ấn phím Enter. Việc thi hành lệnh trên cửa sổ lệnh có ƣu điểm là không lƣu các lệnh cần thực hiện vào một file chƣơng trình mà vẫn thực hiện đƣợc các lệnh đó. 111
  2. Chương 7 Lập trình trong Visual Foxpro 2) Các bước tạo một file chương trình a) Một file chƣơng trình Visual FoxPro là một file văn bản chứa dãy các câu lệnh có phần mở rộng là PRG. Để tạo một file chƣơng trình ta thực hiện một trong các cách sau:  Trong cửa sổ Project Manager, chọn trang Code, sau đó chọn mục Program rồi chọn nút New.  Trong cửa sổ lệnh gõ vào lệnh Modify Command b) Mẫu một File chƣơng trình  Phần giới thiệu: Tên chƣơng trình, ngày viết, tác giả .... . Trƣớc mỗi dòng của phần này đều có dấu *  Phần thiết lập môi trƣờng nhờ các lệnh SET  Phần nhập dữ liệu: Khởi tạo các hằng, biến. Nhập dữ liệu cho các biến nhớ, mở các CSDL  Phần tính toán: Thực hiện các nhiệm vụ của chƣơng trình.  Phần in kết quả tính toán  Phần kết thúc: Đóng các bảng CSDL, trả về môi trƣờng làm việc cũ Ví dụ: Chƣơng trình sau tìm và in ra họ tên, ngày sinh và năm làm việc của một nhân viên trong bảng nhanvien.dbf có mã nhân viên nhập từ bàn phím. set talk off set date to french set default to c:\dulieu clear close all use nhanvien accept 'nhap ma nhan vien:' to bma locate for MANV =bma if found() ? 'Ho va ten:' , hoten ? ' ngay sinh:', ngaysinh ?'nam lam viec:', namlv 112
  3. Chương 7 Lập trình trong Visual Foxpro else ?'khong phai la nhan vien cua cong ty' endif Close All set talk on 7.1.2. Lƣu file chƣơng trình Sau khi tạo xong một file chƣơng trình để lƣu chƣơng trình lên đĩa ta chọn Menu File/ Chọn Save. Nếu tạo file chƣơng trình trong cửa sổ Project Manager, chƣơng trình này sẽ đƣợc đƣa vào đề án (Project). 7.1.3. Sửa chƣơng trình Để sửa một chƣơng trình đã có ta thực hiện một trong các cách sau: - Trong cửa sổ Project Manager chọn trang Code/ chọn mục Program/ Chọn chƣơng trình cần sửa/ Chọn nút Modify. - Trong cửa sổ lệnh gõ vào lệnh Modify Command 7.1.4. Thực hiện chƣơng trình Để thực thi một chƣơng trình, ta thực hiện theo các cách sau: - Nếu chƣơng trình nằm trong một Project, chọn chƣơng trình trong Project Manager , rồi chọn nút Run. - Trong cửa sổ lệnh, gõ lệnh Do . Có thể gõ do ? để hiện lên danh sách các chƣơng trình (Nếu không nhớ chƣơng trình). 7.1.5. Ghi chú trong chƣơng trình Trong khi soạn thảo một chƣơng trình, nên tập thói quen ghi chú cho từng câu lệnh. Việc ghi chú giúp cho chƣơng trình dễ đọc, dễ hiểu, dễ bảo trì. Khi chạy chƣơng trình máy bỏ qua phần ghi chú. Để ghi chú trong chƣơng trình, ta sử dụng kí hiệu * hoặc && đặt trƣớc mỗi câu ghi chú. * Sử dụng cho câu ghi chú nằm trên một dòng. && Sử dụng cho câu ghi chú nằm cuối câu lệnh. 113
  4. Chương 7 Lập trình trong Visual Foxpro 7.2. Chƣơng trình con Chƣơng trình con là một chƣơng trình đƣợc một chƣơng trình khác gọi nó tại một nơi nào đó trong thân chƣơng trình. Chƣơng trình gọi chƣơng trình con gọi là chƣơng trình gọi. Chƣơng trình gọi có đuôi là .PRG đƣợc ngƣời sử dụng gọi nó tại cửa sổ lệnh gọi là chƣơng trình chính. Visual FoxPro có hai loại chƣơng trình con: thủ tục và hàm. Các tệp chƣơng trình riêng lẻ trên đĩa cứng cũng coi nhƣ là một thủ tục. Thủ tục và hàm cho phép lƣu đoạn chƣơng trình thƣờng đƣợc sử dụng trong một nơi và có thể gọi thi hành nó mọi nơi trong ứng dụng . Điều này làm cho ứng dụng dễ dàng trong việc bảo trì vì nếu có sửa đổi thì chỉ cần sửa đổi một nơi thay cho nhiều nơi. 7.2.1 Hàm tự tạo Hàm tự tạo là một chƣơng trình do ngƣời dùng lập ra, nó nhằm trả về cho chƣơng trình gọi nó một giá trị duy nhất thuộc một kiểu dữ liệu nào đó. Hàm tự tạo có cấu trúc sau: FUNCTION [PARAMETER ] RETURN [] Tên hàm bắt đầu bằng chữ cái, sau đó là chữ cái hoặc chữ số có thể thay chữ cái hay chữ số bằng dấu gạch dƣới. Tên hàm không đƣợc trùng với tên các từ khoá. Lời gọi hàm: ta gọi hàm theo mẫu Và đặt lời gọi hàm vào trong các biểu thức. Ví dụ: Chƣơng trình sau có sử dụng hàm xét loại tốt nghiệp phổ thông dựa trên điểm thi 4 môn: Tổng số điểm  34 xếp loại giỏi; 34 >Tổng số điểm  28 xếp loại khá; 28 >Tổng số điểm  20 xếp loại trung bình; còn lại là trƣợt. *Chƣơng trình chính 114
  5. Chương 7 Lập trình trong Visual Foxpro SET TALK OFF && bật chế độ lập trình CLEAR ACCEPT „Họ và tên: ‟ TO ht INPUT „Điểm toán: ‟ TO t INPUT „Điểm văn: ‟ TO v INPUT „Điểm lý: ‟ TO l INPUT „Điểm anh: ‟ TO a ? ht + „ tốt nghiệp loại: ‟ + loai(t,v,l,a) WAIT „‟ SET TALK ON && bật chế độ đối thoại * Phần trình bày chƣơng trình con FUNCTION loai PARA m1,m2,m3,m4 s = m1 + m2 + m3 + m4 DO CASE CASE s >= 34 r = „Giỏi‟ CASE 28
  6. Chương 7 Lập trình trong Visual Foxpro ENDPROCEDURE | RETURN Lệnh gọi thủ tục: Ta gọi thủ tục theo mẫu DO WITH [IN ] Danh sách các tham số thực sự phải tƣơng ứng với các tham số hình thức. Phần IN dùng để chỉ ra tệp chứa thủ tục cần gọi. Lời gọi thủ tục đƣợc sử dụng nhƣ một câu lệnh. Visual FoxPro coi các tệp chƣơng trình nhƣ là các thủ tục. Ví dụ: Chƣơng trình sau có sử dụng thủ tục tính chu vi, diện tích và độ dài đƣờng chéo của hình chữ nhật khi biết hai cạnh SET TALK OFF CLEAR INPUT „Chiều dài: ‟ TO dai INPUT „Chiều rộng: ‟ TO rong STORE 0 TO p, s, c DO chunhat WITH dai,rong,p,s,c ? „Chu vi: ‟, p , ‟Diện tích: ‟ , s , „Đƣờng chéo: ‟, c WAIT „ ‟ set talk on Procedure chunhat PARA a,b,chuvi,dientich,duongcheo chuvi = 2*(a+b) dientich = a*b duongcheo = sqrt(a*a + b*b) RETURN 7.2.3 Cách tổ chức chƣơng trình con 1) Tổ chức thành các tệp chƣơng trình riêng biệt Ta có thể viết các chƣơng trình con dƣới dạng các chƣơng trình (có đuôi .PRG) và lƣu thành từng tệp riêng biệt trên đĩa. Giả sử trên đĩa có các tệp ct1.PRG, ct21.PRG, ct22.PRG, ct221.PRG. Trong chƣơng trình ct1.PRG có các lệnh: DO CT21 116
  7. Chương 7 Lập trình trong Visual Foxpro DO CT22 Trong chƣơng trình ct22.PRG có lệnh: DO CT221 Từ cửa sổ lệnh ta gõ lệnh: DO CT1 Kết quả đồng thời tất cả 4 chƣơng trình này đều chạy. Khi đó CT1 gọi là chƣơng trình con cấp một; CT21 và CT22 gọi là chƣơng trình con cấp hai; CT221 là chƣơng trình con cấp ba. Visual Foxpro cho phép thi hành đến các chƣơng trình con (thủ tục) cấp 32. Các chƣơng trình gọi ở cửa sổ lệnh có cấp 0 (chƣơng trình chính), đây là cấp cao nhất. Cách tổ chức trên có ƣu điểm là các chƣơng trình con có tính độc lập. Song có nhƣợc điểm thời gian thực hiện chƣơng trình lâu vì máy phải đọc chƣơng trình trên đĩa nhiều lần. Cách tổ chức này tiện lợi khi thử chƣơng trình. Sau khi chƣơng trình chạy thông, ta nên gộp các chƣơng trình con thành một tệp thủ tục. 2) Tổ chức các chƣơng trình con ngay trong chƣơng trình gọi Nếu độ dài các chƣơng trình con không dài quá, ta có thể tổ chức chúng thành các hàm hay thủ tục và viết chúng vào cuối chƣơng trình gọi theo mẫu: 3) Tổ chức thành tệp thủ tục Các chƣơng trình con đƣợc viết trong một tệp chƣơng trình (ví dụ là THUVIEN1.PRG, THUVIEN2.PRG,...). Để sử dụng các thủ tục trong THUVIEN1.PRG (chẳng hạn thủ tục CT21), ở đầu chƣơng trình CT1.PRG phải có các lệnh: SET PROCEDURE TO THUVIEN1.PRG DO CT21 SET PROCEDURE TO && đóng tệp thủ tục 117
  8. Chương 7 Lập trình trong Visual Foxpro Ta có thể không cần dùng tới lệnh SET PROCEDURE TO THUVIEN1.PRG mà dùng lệnh sau: DO [ WITH ] IN THUVIEN1.PRG Ví dụ: DO CT21 IN THUVIEN1.PRG 4) Tổ chức các chƣơng trình con trong các cửa sổ thủ tục, sự kiện, phƣơng thức, trang code của project manager, ... (sẽ giới thiệu ở phần sau) 7.3. Biến toàn cục, biến cục bộ 7.3.1. Biến toàn cục Biến toàn cục đƣợc tạo ra ở khung cửa sổ lệnh hoặc đƣợc khai báo trong chƣơng trình nào đó bằng lệnh: PUBLIC Biến này có thể sử dụng ở mọi nơi. Chúng chỉ mất đi khi gặp một trong các lệnh sau: QUIT, CLEAR ALL, CLEAR MEMORY, RELEASE. Theo ngầm định các biến trƣờng của CSDL đều là biến toàn cục. 7.3.2. Biến cục bộ Biến cục bộ là biến chỉ có thể sử dụng trong chƣơng trình khai báo nó và trong những chƣơng trình con mà chúng gọi thực hiện. Biến cục bộ là những biến đƣợc khai báo trong phần khai báo tham số hình thức sau từ khoá PARAMETER đầu chƣơng trình con hoặc đƣợc tạo ra bởi các lệnh của Visual Foxpro chẳng hạn lệnh gán, STORE hoặc các lệnh có mệnh đề TO trong các chƣơng trình. Biến cục bộ tự động mất đi khi chƣơng trình con khai báo nó thực hiện xong hoặc gặp trong các lệnh: QUIT, CLEAR ALL, CLEAR MEMORY, RELEASE . 7.3.3. Che các biến nhớ Biến toàn cục và biến cục bộ có thể đƣợc che chắn bởi từ khoá PRIVATE. Cú pháp: PRIVATE hay PRIVATE ALL [LIKE | EXCEPT ] 118
  9. Chương 7 Lập trình trong Visual Foxpro Khi đã che chắn một biến thì việc thay đổi các giá trị của biến ở chƣơng trình cấp dƣới không làm thay đổi các giá trị vốn có của nó ở chƣơng trình cấp cao hơn. Ví dụ: SET TALK OFF CLEAR x = 11 y = 22 DO ctrcon ? „Lần 3: x = ‟,x,‟ y = ‟,y WAIT „ ‟ *********************************** PROCEDURE ctrcon ? „Lần 1: x = ‟,x,‟ y = ‟,y PRIVATE x,y * Đến đây biến x,y không xác định x = 33 && khai báo biến x mới và khởi đầu y = 44 && khai báo biến y mới và khởi đầu ? „Lần 2: x = ‟,x,‟ y = ‟,y RETURN Kết quả chạy chƣơng trình Lần 1: x = 11 y = 22 Lần 2: x = 33 y = 44 Lần 3: x = 11 y = 22 Lệnh PRIVATE tiện dùng trong trƣờng hợp trong một chƣơng trình con ta cần dùng một số tên biến (Ví dụ các biến a, b, i, j, alpha, z), nhƣng các tên biến này đã đƣợc dùng ở các chƣơng trình con cấp cao hơn. Khi đó để không làm ảnh hƣởng tới giá trị của các biến này trong các chƣơng trình cấp cao hơn ta phải khai báo trong chƣơng trình con này: PRIVATE a, b, i, j, alpha, z 119
  10. Chương 7 Lập trình trong Visual Foxpro 7.4. Truyền tham số Khi một chƣơng trình A gọi thực hiện chƣơng trình con B, chƣơng trình A có thể truyền cho B một giá trị (hằng, biến, biểu thức) để sử dụng. Ngƣợc lại trong quá trình thực hiện, B có thể thay làm đổi giá trị một số biến của A. Đó chính là sự truyền tham số. Có hai hình thức truyền tham số: 7.4.1. Truyền theo giá trị (truyền theo tham trị): A truyền tham số cho B, trị của tham số trong B có thể bị thay đổi, nhƣng trị nguyên thủy của tham số trong A không bị thay đổi. 7.4.2. Truyền theo địa chỉ (truyền theo tham biến): A truyền tham số cho B, nếu trị của tham số trong B bị thay đổi thì trị nguyên thủy của tham số trong A cũng thay đổi theo. Việc truyền tham số cho thủ tục: Visual Foxpro mặc định các biến nhớ truyền theo địa chỉ, các tham số khác (các biểu thức và các biến trƣờng) truyền theo giá trị. Để cho một biến đơn truyền theo giá trị ta phải đặt nó trong 2 dấu ngoặc đơn (xem nhƣ là một biểu thức). Ví dụ 1: Biến LUONG đƣợc truyền cho thủ tục theo giá trị. SET TALK OFF CLEAR hoten = „Nguyễn Văn An‟ ngaysinh = {09/23/49} luong = 500 phucap = 200 Do Thutuc1 WITH hoten, ngaysinh, (luong), phucap IN Thutuc ? hoten, ngaysinh,luong, phucap WAIT „‟ *Tệp Thutuc.PRG có nội dung sau: PROCEDURE Thutuc1 PARA ht,ns,lg,ph ? ht,ns,lg,ph ht = „Trần Bình‟ ns = „Không nhớ ngày sinh‟ 120
  11. Chương 7 Lập trình trong Visual Foxpro lg = 1000 ph = 300 RETURN Kết quả khi chạy chƣơng trình: Nguyễn Văn An 09/23/49 500 200 Trần Bình Không nhớ ngày sinh 500 300 Việc truyền tham số cho hàm tự tạo có thể theo địa chỉ và theo giá trị, mặc định là theo giá trị. Để thiết lập việc truyền tham số cho hàm tự tạo theo địa chỉ thì phải dùng lệnh: SET UDFPARMS TO REFERENCE Khi kết thúc chƣơng trình nên thiết lập lại chế độ truyền tham số theo giá trị (mặc định) bằng lệnh: SET UDFPARMS TO VALUE Ta cũng có thể truyền tham số theo giá trị hay theo địa chỉ cho hàm tự tạo mà không cần dùng lệnh SET UDFPARMS TO REFERENCE bằng cách: muốn truyền theo giá trị thì đặt các tham số của hàm trong dấu ngoặc đơn bình thƣờng, muốn truyền theo tham biến thì trƣớc tham số truyền theo tham biến phải có dấu @. Hãy xem Ví dụ 2 ở dƣới. Các tham số là biến mảng khi truyền vào hàm tự tạo nhất thiết phải truyền theo địa chỉ, nếu truyền theo giá trị sẽ bị lỗi. Muốn truyền các biến mảng vào hàm thì ta phải dùng SET UDFPARMS TO REFERENCE hoặc đặt @ trƣớc tên biến mảng. Chú ý: Lệnh SET UDFPARMS TO VALUE không có tác dụng đối với thủ tục Khi dùng lệnh SET UDFPARMS TO REFERENCE mà cuối chƣơng trình không có SET UDFPARMS TO VALUE thì lệnh SET UDFPARMS TO VALUE vẫn bị ảnh hƣởng tới các lần chạy sau đối với các chƣơng trình khác. Lỗi này rất khó phát hiện. Nói chung nên dùng @ để truyền theo địa chỉ. Ví dụ 2: SET TALK OFF CLEAR SET UDFPARMS TO REFERENCE && Lệnh (1) 121
  12. Chương 7 Lập trình trong Visual Foxpro x=1 y=1 ? „Ban đầu: x = ‟,x,‟ y = ‟ ,y t = cong(x,y) && Lệnh (2) ? „ Trị hàm = ‟,t ? „ Sau khi gọi hàm: x = ‟,x,‟ y = ‟,y WAIT „ ‟ SET TALK ON ***************************** FUNCTION cong PARA u,v u=u+2 v=v+2 RETURN u + v Kết quả khi chạy chƣơng trình: Ban đầu: x =1 y=1 Trị hàm = 6 Sau khi gọi hàm: x = 3 y=3 Chú ý: Nếu bỏ lệnh (1), lệnh (2) thay bằng t = cong(@x,@y) thì kết quả chạy chƣơng trình vẫn nhƣ trên (tức là truyền tham số theo địa chỉ). Nếu bỏ lênh (1) (về chế độ truyền tham số ngầm định cho hàm) hoặc thay bằng lệnh (1) bằng SET UDFPARMS TO VALUE, còn lệnh (2) giữ nguyên nhƣ trong chƣơng trình thì kết quả chạy chƣơng trình sẽ là: Ban đầu: x = 1 y=1 Trị hàm = 6 Sau khi gọi hàm: x = 1 y=1 Ví dụ 3: Lập chƣơng trình tính tích vô hƣớng của hai véctơ SET TALK OFF SET UDFPARMS REFERENCE && Lệnh (1) 122
  13. Chương 7 Lập trình trong Visual Foxpro CLEAR INPUT „Vào số phần tử của mảng: ‟ TO n DIME a(n),b(n) FOR i =1 TO n INPUT „a(„+LTRIM(STR(i)+‟) = ‟ TO a(i) INPUT „b(„+LTRIM(STR(i)+‟) = ‟ TO b(i) ENDFOR t = tvh(n,a,b) && Lệnh 2 ? „Tích vo hƣớng: ‟+ STR(t,9,5) WAIT „ ‟ SET UDFPARMS TO VALUE ************************************* FUNCTION tvh PARA n,a,b s=0 FOR i=1 TO n s = s+a(i)*b(i) ENDFOR RETURN Nếu bỏ lệnh (1) thì lệnh (2) là sai cú pháp vì phần tử mảng bao giờ cũng truyền theo địa chỉ. Nếu bỏ lệnh (1) hoặc lệnh (1) là SET UDFPARMS TO VALUE thì lệnh (2) phải đổi là: t = tvh(n,@a,@b). 7.5. Một số câu lệnh của Visual FoxPro 7.5.1 Các câu lệnh thiết lập môi trƣờng làm việc SET DATE TO FRENCH | AMERICAN thiết lập ngày tháng dạng dd/mm/yy hoặc mm/dd/yy (ngầm định là AMERICAN) SET CENTURY ON | OFF : thiết lập năm có 4 chữ số (ngầm định là OFF) SET TALK ON | OFF : bật/tắt chế độ đối thoại (ngầm định là ON) SET DEFAULT TO : chọn thƣ mục làm việc CLEAR : xoá sạch màn hình 123
  14. Chương 7 Lập trình trong Visual Foxpro CLEAR ALL: xoá sạch biến nhớ CLOSE ALL: đóng tất cả các tệp đang mở 7.5.2 các câu lệnh vào, ra dữ liệu đơn giản 1) Lệnh gán Cú pháp: = Chức năng: Khi gặp lệnh này máy tính toán giá trị của biểu thức, kết quả lƣu vào biến. Ví dụ: a= 5 ngay = Date() 2) Lệnh STORE Cú pháp: STORE to Chức năng: Gán giá trị của cho Ví dụ: STORE 0 To a, b, c 3) Các lệnh nhập giá trị cho biến từ bàn phím a) Lệnh ACCEPT Cú pháp ACCEPT [] to Chức năng : Khi gặp lệnh này máy in ra màn hình lời nhắc (nếu có), chờ ngƣời sử dụng nhập một chuỗi từ bàn phím vào cho biến chuỗi. Ví dụ: ACCEPT „nhap ho ten‟ to bhoten b) Lệnh INPUT Cú pháp: INPUT [] to Chức năng: Tƣơng tự lệnh ACCEPT nhƣng khác ở chỗ ngƣời sử dụng có thể nhập dữ liệu có kiểu bất kỳ cho biến nhớ. Khi nhập dữ liệu cần chú ý: - Kiểu Character: Phải đƣợc đặt trong cặp dấu ' ... ' hay "... ". - Kiểu Numberic: Nhập nhƣ số bình thƣờng. - Kiểu Date: Phải đƣợc để trong dấu {}. - Kiểu Logic: Nhập giá trị .T. hay .F. Ví dụ: INPUT 'Nhap ngay sinh' TO bngaysinh INPUT 'Nhap diem‟ TO bdiem 124
  15. Chương 7 Lập trình trong Visual Foxpro c) Lệnh WAIT Cú pháp: WAIT [< lời nhắc>] to [WINDOW] Chức năng: In ra màn hình lời nhắc (nếu có) và chờ ngƣời sử dụng ấn một phím bất kỳ, ký tự gõ vào đƣợc lƣu vào biến chuỗi. Nếu không có lời nhắc máy in ra màn hình dòng chữ “Press any key to continue…”. Từ khoá WINDOW dùng để hiện lời nhắc ở cửa sổ nhỏ góc trên, bên trái màn hình. 7.5.3 Các lệnh in dữ liệu ra màn hình 1) Lệnh ? và ?? Cú pháp: ? ?? Chức năng: Các lệnh này dùng để in kết quả của các biểu thức trong danh sách ra màn hình. Lệnh ? đƣa con trỏ xuống dòng mới, in kết quả của các biểu thức, in xong con trỏ ở cuối giá trị của biểu thức sau cùng. Lệnh ?? không đƣa con trỏ xuống dòng mới, in ngay kết quả các biểu thức tại vị trí con trỏ, in xong con trỏ ở cuối giá trị của biểu thức sau cùng. Ví dụ: ? „Chƣơng trình quản lý cán bộ‟ ? „Phƣơng trình có nghiệm kép : ‟, -b/(2*a) ? (3.543 + 7.872) * 6.43101 / 9.65038 ? date() 2) In một biểu thức ra màn hình có tọa độ xác định Cú pháp: @dòng, cột SAY Chức năng: Lệnh này in giá trị của biểu thức ra màn hình tại vị trí dòng, cột đã đƣợc chỉ ra. Ví dụ 1: hoten = „Trần Văn Thanh‟ ngaysinh = {12/25/60} gioitinh = .T. 125
  16. Chương 7 Lập trình trong Visual Foxpro luong = 554.550 phucap = 150.50 clear @11,20 say „Họ và tên: ‟ + hoten @12,20 say „Ngày sinh: ‟ + dtoc(ngaysinh) @13,20 say „Giới tính: ‟ + iif(gioitinh,‟Nam‟,‟Nữ‟) @14,20 say „Lƣơng chính: ‟ + str(luong,7,2) @15,20 say „Tổng số tiền lĩnh: ‟ @15,40 say luong + phucap Ví dụ 2: clear @1,1 say (2/5233 + 7.543)*40.231 /3.876 @2,1 say {05/28/97} + 50 @3,1 say 5.2 > 3.1 7.5.4 Lệnh SAY…GET…READ Cú pháp: @dòng1, cột1 SAY GET @dòng2, cột2 SAY GET @dòng n, cột n … READ Chức năng: Lệnh này dùng để nhập dữ liệu cho các biến 1, biến 2, …, biến n từ bàn phím. Ví dụ: Lệnh sau dùng để nhập dữ liệu thông tin về một khách hàng từ bàn phím. Clear @1,1 say 'Ma khach hang: ' get Makh @3,1 say 'Ho ten: ' get Tenkh @4,1 say 'Gioi tinh: ' get Gioitinh @5,1 say 'Dia chi: ' get Diachi @6,1 say 'Dien thoai: ' get Dienthoai @7,1 say 'An Ctrl+W de ghi lai ban ghi vua sua' Read 126
  17. Chương 7 Lập trình trong Visual Foxpro 7.6. Các cấu trúc điều khiển chƣơng trình 7.6.1 Cấu trúc tuần tự (ngầm định) Chƣơng trình đƣợc thực hiện từ đầu đến cuối chƣơng trình, lệnh viết trƣớc thực hiện trƣớc, lệnh viết sau thực hiện sau. 7.6.2 Cấu trúc rẽ nhánh 1) Dạng rẽ nhánh khuyết Cú pháp: IF ENDIF Chức năng: Khi gặp cấu trúc này, trƣớc hết sẽ đƣợc tính, nếu có giá trị .T. thì sẽ đƣợc thực hiện, ngƣợc lại sẽ bị bỏ qua rồi thực hiện lệnh tiếp theo sau ENDIF. Ví dụ: Viết chƣơng trình nhập vào hai số, cho biết số lớn nhất set talk off clear Input “Nhap so thu nhat” to so1 Input „Nhap so thu hai' to so2 max=so1 If max < so2 max=so2 Endif ? "So lon nhat la:”, max set talk on return 127
  18. Chương 7 Lập trình trong Visual Foxpro 2) Dạng rẽ nhánh đầy đủ Cú pháp: IF ELSE ENDIF Chức năng: Khi gặp cấu trúc này, trƣớc hết sẽ đƣợc tính. Nếu có giá trị .T. thì đƣợc thực hiện, ngƣợc lại có giá trị .F. thì đƣợc thực hiện . Sau đó chuyển đến thực hiện lệnh tiếp theo sau ENDIF. Ví dụ: Dựa vào bảng nhanvien.dbf, hãy nhập vào một họ tên nhân viên, tìm xem có đúng là nhân viên của công ty hay không, nếu đúng thì thông báo năm sinh và năm làm việc, ngƣợc lại thì thông báo là không phải nhân viên của công ty. set talk off set date to french set defaut to c:\dulieu clear close all use NHANVIEN accept 'nhap ho ten nhan vien:' to bhoten locate for HOTEN =bhoten if found() ? ' ngay sinh là:', ngaysinh' ? 'nam lam viec:', namlv else ? 'khong phai la nhan vien cua cong ty' endif set talk on return 128
  19. Chương 7 Lập trình trong Visual Foxpro 3) Dạng rẽ nhiều nhánh Cú pháp DO CASE CASE CASE ...... CASE [OTHERWISE ] ENDCASE Chức năng: Khi gặp cấu trúc này, các sẽ đƣợc tính bắt đầu với i=1. Nếu với i = 1,...., n nào đó có giá trị .T. đầu tiên thì dãy lệnh i tƣơng ứng sẽ đƣợc thực hiện và kết thúc cấu trúc DO CASE, sau đó chuyển đến thực hiện lệnh sau ENDCASE. Trong trƣờng hợp không có nào với i từ 1 đến n có giá trị .T. thì sẽ đƣợc thực hiện nếu có OTHERWISE hoặc cấu trúc DO CASE bị bỏ qua nếu không có OTHERWISE Ví dụ: Viết chƣơng trình nhập vào một năm (có 4 chữ số), sau đó nhập thêm một tháng, cho biết tháng này có bao nhiêu ngày. set talk off set date to french set defaut to c:\dulieu clear close all 129
  20. Chương 7 Lập trình trong Visual Foxpro input 'nhap vao mot nam' to bnam input 'nhap vao mot thang' to bthang do case case bthang = 4 or bthang = 6 or bthang = 9 or bthang = 11 songay =30 case bthang = 2 if (mod(bnam, 4) = 0 and (mod(bnam, 100) 0) songay = 29 else songay = 28 endif otherwise songay =3 1 endcase ? 'thang', bthang, 'nam', bnam, 'co', so ngay, 'ngay' set talk on return 7.6.3. Cấu trúc lặp 1) Cấu trúc DO WHILE Cú pháp: DO WHILE ENDDO Chức năng: Khi gặp cấu trúc này trƣớc hết sẽ đƣợc tính, nếu có giá trị .F. thì kết thúc cấu trúc DO WHILE và chuyển đến thực hiện các lệnh sau ENDDO. Ngƣợc lại nếu có giá trị .T. thì dãy lệnh trong thân vòng lặp sẽ đƣợc thực hiện và tự 130
nguon tai.lieu . vn