Để soạn thảo chương trình, từ cửa sổ lệnh đưa vào lệnh; • MODIFY COMAND < tên file chương trình >
• Lúc này xuất hiện cửa sổ chương trình để ta có thể đưa các lệnh vào cho nó. • Từ cửa sổ chương trình, gõ Ctrl + E.
• Nếu hộp thoại Save xuất hiện, chọn OK. . Một chương trình foxpro thường có 3 phần.
a) Tạo môi trường làm việc: thường chứa các lệnh sau:
• SET DATE FRENCH: đặt ngày tháng năm theo dạng DD-MM-YY • SET CURRENCY ON : đặt năm có 4 chữ số.
• SET TALK OFF/ON : ẩn hiện các kết quả thực hiện lệnh. • SET DEFAULT TO <đường dẫn> : đặt đường dẫn hiện thời. • CLEAR: xoá màn hình hiển thị kết quả.
• CLOSE ALL: đóng các bảng dữ liệu, các file cơ sở dữ liệu,... b) Phần thân chương trình:
Thực hiện các công việc mà chương trình yêu cầu như : • Cập nhập dữ liệu. • Xử lý, tính toán. • Kết xuất thông tin. c) Kết thúc chương trình • Đóng các tập tin CSDL, các bảng dữ liệu đang sử dụng. • Giải phóng biến nhớ. • Trả lại các chếđộ cho hệ thống.
d) Chú thích trong chương trình
Là các giải thích được thêm vào để làm rõ cho chương trình, phải được bắt đầu bởi dấu * hay &&
• *: Bắt đầu một dòng • && : Viết sau một lệnh
III. Các thủ tục và hàm do người sử dụng tự tạo.
Thủ tục và hàm cho phép giữ đoạn chương trình ở một nơi và có thể gọi thi hành nó khắp nơi trong ứng dụng.
1. Cấu tạo
PROCEDURE <tên-chương-trình-con> <Các câu lệnh> ENDPROCEDURE FUNCTION <tên-hàm>[tham số] <Các câu lệnh> RETURN 2. Cách gọi Cách 1: sử dụng câu lệnh DO.
Cú pháp: DO <tên-chương-trình-con>
Cách 2: chỉ ra tên hàm và cung cấp các tham số cho hàm. Ví dụ: DATE(): trả về ngày hiện hành của hệ thống. MAX(1,3,6,9): trả về giá trị 9.
3. Truyền tham biến hay tham trị.
• Tham trị: Chỉ rõ một biến sẽ được truyền tới hàm bằng giá trị, khi đó giá trị của biến này có thể bị thay đổi trong phạm vi thủ tục hoặc hàm nhưng giá trị gốc của nó không thay đổi.
• Tham biến: Tương tự tham trị nhưng nếu ta thay đổi giá trị của biến đó trong thủ
tục hoặc hàm thì giá trị gốc của nó cũng thay đổi theo.
4. Nhận giá trị trả về từ hàm.
Thông thường, mọi hàm đều trả về giá trị .T., tuy nhiên có thể trả về bất kì giá trị nào bằng câu lệnh RETURN.
Ví dụ: Hàm dưới đây trả về một ngày sau khi cộng thêm 14 ngày. FUNCTION ngayto PARAMETERS dDate RETURN dDate + 14 ENDFUNC Các cách có thể lưu trữ giá trị trả về từ hàm: Lệnh Diễn giải
var = myfunc() Lưu giá trị trả về từ hàm vào một biến. ?myfunc() Xuất giá trị của hàm ra cửa sổ hiện hành.
IV. Biến nhớ Khai báo biến a) Lệnh gán = Cú pháp: <biến> = <biểu thức> Ví dụ: a = 5 ngay = Date() b) Lệnh STORE Cú pháp: STORE <bthức> to <ds biến>
Chức năng: Gán giá trị <bthức> cho <ds biến> ; nếu <biến> chưa tồn tại nó sẽ khai báo, nếu đã có thì thay thế bởi giá trị mới.
Ví dụ: STORE 0 To a, b, c Nhập giá trị cho biến từ bàn phím. a) Lệnh ACCEPT
Cú pháp ACCEPT <bthức chuỗi> to <biến chuỗi>
Chức năng: Dùng để nhập một chuỗi từ bàn phím, kết thúc bởi phím Enter, giá trị nhận
được sẽ đưa cho <biến>.
Ví dụ: ACCEPT ‘nhap ho ten’ to bhoten ? ‘Ho ten vua nhap', bhoten
<Bthức chuỗi> là một câu nhắc nhở người sử dụng. b. Lệnh INPUT
Cú pháp: INPUT <Bthức chuỗi> to <biến>
Chức năng: Tương tự lệnh trên nhưng có thể nhận dữ liệu theo từng kiểu: • Kiểu Charater: Phải được đặt trong cặp dấu ' ... ' hay "... ".
• Kiểu Numberic: Nhập dữ liệu kiểu số. • 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
Chú ý: Trong hai lệnh trên, nếu biến chưa có thì nó sẽ tự khai báo, nếu đã có thì nó sẽ
thay giá trị của biến bởi giá trị vừa nhập.
V. Các cấu trúc điều khiển chương trình 1. Cấu trúc tuần tự.
Quy ước: Chương trình được thực hiện từ trên xuống dưới.
2. Cấu trúc rẽ nhánh.
Còn được gọi là cấu trúc chọn lựa. Có hai dạng: a. Dạng khuyết:
Cú pháp:
Chức năng : Khi gặp cấu trúc này, <Bthức L> sẽ được tính, nếu có giá trị .T. thì <các lệnh> sẽ được thực hiện, ngược lại thực hiện các lệnh tiếp theo sau lệnh ENDIF. Ví dụ : Viết chương trình nhập vào 2 số, thông báo số lớn nhất.
IF <Bthức L> <các lệnh> ENDIF
b. Dạng đầy đủ: Cú pháp:
Chức năng: Khi gặp cấu trúc này, <Bthức L> sẽ được tính. Nếu có giá trị .T. thì <các lệnh1> sẽ được thực hiện, ngược lại (có giá trị .F.) thì sẽ thực hiện <các lệnh 2>. Sau đó tiếp tục thực hiện các lênh tiếp theo trong chương trình.
Ví dụ: Dựa vào bảng nhanvien, 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.
3. Lựa chọn một trong nhiều trường hợp DO CASE CASE <Bthức L1> <các lệnh 1> CASE <Bthức L2> <các lệnh 2> ………….. CASE <Bthức Ln> <các lệnh n> [OTHERWISE <Các lệnh n+1>] ENDCASE
Chức năng: Khi gặp cấu trúc DO CASE, các <Bthức L> điều kiện sẽ được tính. Nếu <Bthức L> điều kiện nào đó có giá trị .T. thì nhóm lệnh tương ứng sẽ được thực hiện và kết thúc cấu trúc này, rồi tiếp tục thực hiện các lênh sau ENDCASE. Trong trường hợp không có <bthức L> nào từ 1 đến n có giá trị .T. thì <nhóm lệnh n+1> (nếu có) sẽ được thực hiện.
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.
4. Cấu trúc lặp.
Cấu trúc DO WHILE
Chức năng: Khi gặp cấu trúc này thì <Bthức L> sẽ được tính, nếu có giá trị .F. thì sẽ
dừng và thực hiện các lệnh sau ENDDO. Nếu có giá trị .T. thì các lệnh trong thân vòng lặp sẽ được thực hiện và lại quay về kiểm tra điều kiện trong <bthức L> và cứ thế tiếp tục.
• [LOOP]: Khi gặp lệnh này, Foxpro sẽ quay về kiểm tra điều kiện logic mà bỏ
qua các lệnh phía sau [LOOP].
• [EXIT]: Khi gặp lệnh này thĩ sẽ thoát ra khỏi chương trình. Ví dụ: Cho biết dang sáchhọ tên của các nhân viên trong công ty.
giá trị của <Bthức L> đểđảm bảo tính kết thúc.
Ví dụ: Nhập vào một năm, hãy thông báo danh sách họ tên, ngày sinh của những nhân viên làm việc trong năm đó, nếu không có thì thông báo là không có.
Cấu trúc FOR
Cú pháp:
FOR <biến>=<trị-đầu> TO <trị-cuối> <Các câu lệnh>
ENDFOR
Chức năng: Tương tự DO WHILE nhưng chỉ sử dụng khi số vòng lặp đã biết trước.
Chú ý: <trị-đầu> phải nhỏ hơn <trị cuối>, ngược lại vòng lặp sẽ dừng.
Cấu trúc SCAN
Cú pháp:
SCAN [<phạm vi>] [FOR<Bthức L>] [WHILE<bthức L>] <các lệnh>
[LOOP] [EXIT] END SCAN
Chức năng: Dùng để duyệt lần lượt các bản ghi trong bảng dữ liệu hiện hành nằm trong <phạm vi> được chỉ ra và thoả mãn điều kiện của các <Bthức L> sau FOR hoặc WHILE. Tương ứng với một bản ghi tìm được. <các lệnh> sẽ được thực hiện.Cấu trúc SCAN sẽ dừng khi nào duyệt đến bản ghi cuối cùng của bảng dữ liệu đang xét.
CHƯƠNG VI: FORMS I. Khái niệm lập trình hướng đối tượng.
Thiết kế và lập trình hướng đối tượng là một sự thay đổi đối với phong cách lập trình cũ, lập trình hướng thủ tục.Ở đây thay vì nghĩ đến các chức năng của chương trình ta chỉ cần nghĩ đến các đối tượng đang tạo: là các thành phần độc lập của một ứng dụng với chức năng riêng của nó. Mỗi một đối tuợng đều có một bộ thuộc tính mô tả
đối tượng; các phương thức là những đoạn trình chứa trong điều khiển, cho điều khiển biết cách thức để thực hiện một đoạn công việc nào đó; và tập hợp những sự kiện đó là những phản ứng của đối tượng.
Trong Visual Foxpro, các form và control là các đối tượng được dùng để xây dựng các ứng dụng.
II. Lập trình trên Windows
• Lập trình trên Windows có nhiều khác biệt so với lập trình trên DOS (như lập trình bằng PASCAL), các điểm khác biệt chính là: Sử dụng nhiều đối tượng trực quan trong thiết kế giao diện; Logic chương trình diễn ra theo sự kiện ...
• Đối tượng (điều khiển - Control): Các cụng cụ lập trình trên Windows thường cung cấp sẵn các đối tượng điều kiển như: Cửa sổ (FORM), nút lệnh (Command Button), Ho (Textbox), Lưới (GRID) ... và nhiều đối tượng điều khiển khác thường dùng cho việc thiết kế giao diện.
• Thuộc tính (Properties): Mỗi đối tượng điều khiển được mô tả qua một số
thuộc tính nào đó, các thuộc tính này qui định tính chất hiển thị, định danh của
đối tượng như: Name - Tên đối tượng, Font - Font chữ, Width - độ rộng, Height - chiều cao ... Các thuộc tính của đối tượng do người lập trình xác lập.
• Sự kiện (Events): Mỗi đối tượng điều khiển có khả năng đáp ứng một số sự
kiện nào đó. Ví dụ: đối tượng Command Button cú khả năng đáp ứng sự kiện Click, Double Click ... đối tượng Text box có khả năng đáp ứng sự kiện Click, Change ... Các sự kiện này do người sử dụng tạo ra. Các sự kiện do người lập trình viết nhằm thực thi một công việc nào đó.
• Phương thức (Methods): Mỗi đối tượng điều khiển thường có một vài phương thức tương ứng với một “hành động” nào đó. Ví dụ với FORM có thể sử dụng phương thức Cls để xóa Form, phương thức Lineđể vẽ một đoạn thẳng; với đối tượng TextBox sử dụng phương thức Refreshđể làm tươi dữ liệu, phương thức Move để di chuyển vị trí ... Các phương thức được thiết lập sẵn nhằm thực thi một công việc cụ thể.
III. FORM
Form được dùng để làm giao diện nhập, hiển thị thông tin, nó cung cấp một tập hợp các đối tượng đểđáp lại những thao tác của người sử dụng làm cho ứng dụng ra dáng chuyên nghiệp.
Ví dụ: Giao diện của một Form nhập dữ liệu
1. Quản lý form
• Lưu Form: Từ menu file, chọn save để lưu vào <tên form>, mặc định phần mở rộng là scx.
• Chạy form: Từ cửa sổ lệnh, thực hiện lệnh sau: Thực thi một Form bằng 1 trong hai cách:
o Cách 1: Từ cửa sổ Project Manager, chọn Documents, chọn Form rồi chọn Form cần thi hành rồi nhấn Run.
o Cách 2: Thực hiện qua lệnh Do FORM như sau: DO FORM <Tên Form>
• Đóng form (giải phóng khỏi bộ nhớ): RELEASE <tên form> 2. Truy cập đến các đối tượng trên form
Muốn chỉđến một đối tượng nào trên form, ta dùng:
<tên form>. <đối tượng>: nếu <đối tượng> không cùng với form đang thao tác.
<this form>.<đối tượng>: nếu đối tượng nằm trên form đang thao tác.
không phải là form hiện hành, ta sử dụng <tên form>.<thuộc tính>= <giá trị>.
Nếu muốn thay đổi các thuộc tính của form hiện hành: <Thisform>.<t_tính>=<giá trị>.
3. Thuộc tính của đối tượng (Properties)
Để chỉđến một thuộc tính của đối tượng nào ta dùng cú pháp sau:
<tên đối tượng>.<thuộc tính>
Ví dụ: Myform.caption= “Chương trình ứng dụng” Các thuộc tính thông dụng:
• Left: Vị trí cạnh trái của đối tượng so với vật chứa nó. • Top: Vị trí trên của đối tượng so với vật chứa nó. • Height: Chiều cao của đối tượng.
• Width: Chiều rộng của đối tượng. • Name: Tên để chỉ đối tượng. • Enable: Giá trị logic:
o True: có quyền làm việc.
o False: Không có quyền làm việc. • Visible: Giá trị logic:
o True: Thấy được đối tượng;
o False: Không thấy được đối tượng.
4. Phương thức của đối tượng (Methods)
Để gọi đến phương thức của một đối tượng, ta dùng cú pháp:
<tên đối tượng>.<phương thức>
Ví dụ: Myform.show
Một số phương thức thường dùng: • Refresh: Làm tươi lại đối tượng. • Show: Hiện đối tượng.
• Hide: ẩn đối tượng.
• Release: Giải phóng đối tượng.
5. Sự kiện của đối tượng
Để chỉđến sự kiện của đối tượng, ta dùng cú pháp sau:
<tên đối tượng>.<sự kiện> Một số sự kiện thường sử dụng:
• Click: Được gọi khi kích chuột vào đối tượng.
• DbClick: Được gọi khi kích đúp chuột vào đối tượng.
• MouseMove: Được gọi khi di chuyển chuột trên bề mặt của đối tượng. • KeyPress: Được gọi khi nhấn một phím kích chuột vào đối tượng. • Got focus: Được gọi khi đưa đối tượng vào tầm ngắm.
• Lostfocus: Được gọi khi đưa đối tượng ra khỏi tầm ngắm
• Change: Được gọi khi có sự thay đổi nội dung dữ liệu kiểu chuỗi của đối tượng.
6. Tạo form thông qua Wizard
Từ menu Tools, chọn wizard, chọn form, xuất hiện giao diện wizard selection, rồi thông qua hướng dẫn.
Tạo mới một FORM sử dụng Wizard
Các bước thực hiện:
• Mở Project cần thực hiện, trong Project Manager chọn Tab Documents • Chọn Form / Chọn New
• Chọn Form Wizard, khi đó giao diện chọn kiểu Form Wizard xuất hiện: • Chọn kiểu Form Wizard:
¾ Form Wizard - Tạo Form từ
một bảng đơn.
¾ One-To-Many Form Wizard - Tạo Form từ 2 bảng có quan hệ (1-nhiều) với nhau.
Ví dụ 1: Tạo Form từ bảng đơn - Form cập nhật danh mục khoa (DMKHOA)
1. Chọn Form Wizard, chọn OK
2. Step 1 - Select Fields: Chọn Database, Tables và Fields (Sử dụng lệnh >, >> để
chọn các trường cần thiết), Trong ví dụ này chọn bảng DMKHOA, chọn tất cả các trường. Khi đó chọn xong các trường, chọn Next để qua bước 2.
Style: Khi chọn một kiểu form thì dạng form tương ứng sẽ hiển thị phần bên trái. Button type: Kiểu nút lệnh.
• Text - Nút lệnh dạng chữ (Text). • Picture - Nút lệnh dạng ảnh. • No button - Không có button. • Custom - Tuỳ chọn.
• Nên chọn là Text hoặc Picture. 4. Step 3 - Sort Records
Sắp xếp: Chọn 1 trong các trường để sắp xếp hoặc có thể bỏ qua. 5. Step 4 – Finish
Nhập vào tiêu đề cho form rồi chọn Finish. Tiếp đến nhập vào tên form rồi chọn Save
7. Tạo form thông qua thiết kế
Để tạo form thông qua thiết kế, từ cửa sổ lệnh ta thực hiện lệnh sau: CREATE FORM <tên form>
Các bước thực hiện:
1. Mở Project cần thực hiện, trong Project Manager chọn Tab Documents. 2. Chọn Form
3. Chọn New
4. Chọn New Form. Giao diện Form Designer xuất hiện:
Trong đó:
• Phía trên là thanh toolbar Form Designer. • Bên phải là thanh toolbar Form Controls. Các thành phần liên quan đến công cụ Form Design.
• Thanh công cụ Color Palette (Tự tìm hiểu) • Thanh công cụ Layout (Tự tìm hiểu) • Thanh công cụ Toolbar (Tự tìm hiểu)
8. Một số thuộc tính của FORM
Form là đối tượng quan trọng trong thiết kế giao diện trên Windows, cũng như các đối tượng khác, Form có các thuộc tính riêng của nó. Có hai cách để thiết lập các thuộc tính của form: sử dụng cửa sổ Properties và sử dụng lệnh để thiết lập (có những thuộc tính chỉ cho phép thiết lập ở chếđộ lệnh).
Hiển thị cửa sổ Properties: R_Click vào phần nền của Form đang thiết kế => Pop-up menu xuất hiện và ta chọn chức năng Properties.