Thiết lập môi trường làm việc Phần thân chương trình Cập nhập, Xử lý, tính toán, Kết xuất thông tin Kết thúc chương trình Đóng tập tin CSDL, các bảng dữ liệu đang sử dụng Giải p
Trang 31 Khái niệm
Trang 4Mỗi dòng chỉ chứa tối đa một lệnh
Một lệnh viết trên nhiều dòng thì cuối mỗi dòng phải có dấu
“;”
Trang 5Khái niệm
Bước 1: Soạn thảo chương trình
Bước 2: Lưu và đặt tên chương trình
Bước 3: Biên dịch và sửa chữa lỗi
Bước 4: Chạy thử chương trình
Trang 6Soạn thảo chương trình
Cách 1: Tại cửa sổ lệnh:
MODIFY COMAND <tên file chương trình>
Cách 2: Mở Project cần xây dựng chương trình Từ cửa sổ Project Manager, chọn trang Code, chọn mục Program, chọn New
Trang 7Soạn thảo chương trình
Một chương trình Visual FoxPro thường có 3 phần.
Thiết lập môi trường làm việc
Phần thân chương trình
Cập nhập, Xử lý, tính toán, Kết xuất thông tin
Kết thúc chương trình
Đóng 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.
Tạo chú thích:
* Bắt đầu một dòng
&& : Viết sau một lệnh
Trang 8Thực hiện chương trình
lệnh:
DO < tên file chương trình >
Hoặc chọn menu Program/Do/< tên file chương trình >
Hoặc gõ tổ hợp phím Ctrl +E
Trang 92 Thiết lập môi trường
Một số lệnh thông dụng:
SET CENTURY (trạng thái mặc định là OFF): hiển thị của ngày tháng với năm có 4 chữ số
Cú pháp: SET CENTURY ON/OFF
SET CONFIRM (trạng thái mặc định là OFF): Cần ấn Enter
để qua trường tiếp theo hay không, khi nhập ký tự cuối cùng của một trường trước đó
Cú pháp: SET CONFIRM ON/OFF
Trang 10Thiết lập môi trường
- SET CURRENCY: Đặc tả ký tự tiền tệ và vị trí của
nó.
Cú pháp: SET CURRENCY TO <btC>
SET CURRENCY LEFT/RIGHT
<btC> là ký hiệu tiền tệ cần biểu diễn, có thể đặt bên trái hay phải của biểu thức số
- SET DATE: Đặc tả khuôn dạng ngày tháng.
Cú pháp: SET DATE [TO] MDY/DMY/YMD/…
Trang 11Thiết lập môi trường
- SET DECIMAL: Chỉ định số chữ số thập phân cần
hiển thị sau dấu chấm thập phân.
Cú pháp: SET DECIMAL TO <btN>
Giá trị của <btN> dao động trong [0 8]
- SET DEFAULT: Xác định ổ đĩa và thư mục làm việc.
Cú pháp: SET DEFAULT TO <btC>
<btC> là tên đầy đủ của ổ đĩa và thư mục
Trang 12Thiết lập môi trường
- SET ESCAPE (trạng thái mặc định là ON): Làm
mất hiệu lực của phím ESCAPE
Cú pháp: SET ESCAPE ON/OFF
- SET POINT: Thay đổi dấu chấm thập phân bằng ký
tự khác.
Cú pháp: SET POINT TO <btC>
Nếu không có <btC>, sẽ trở về với dấu chấm(.)
Trang 13Thiết lập môi trường
- SET SAFETY (trạng thái mặc định là ON): Bảo vệ hoặc
không tập tin hiện có
Nếu lệnh ở trạng thái ON, khi ghi đè lên tập tin đã có FoxPro sẽ thông báo: File already exists, Overwrite It? (Y/N)
- SET SEPARATOR: Mô tả ký tự chia tách số theo từng nhóm.
Cú pháp: SET SEPARATOR TO <btC>
Nếu không có <btC> sẽ mặc định là dấu“,”
Trang 14Thiết lập môi trường
- SET TALK OFF/ON: ẩn hiện các kết quả thực hiện lệnh.
Mặc định ở trạng thái ON khi lệnh thực hiện thông tin về trạng thái làm việc được đưa ra màn hình, và ngược lại
- SET ECHO Mở cửa sổ TRACE để quan sát quá trình
chương trình thực hiện
Trạng thái mặc định là OFF Nếu trạng thái ON, từng dòng lệnh của chương trình đang thực hiện sẽ được chiếu sáng trên cửa sổ TRACE Người dùng có thể theo dõi và tạo các điểm ngắt để chương trình ngưng lại ở những vị trí cần thiết
Trang 153 Biến và cách sử dụng
Trang 17Khai báo biến
Lệnh gán: dùng để gán giá trị cho biến
Cú pháp: <biến> = <biểu thức>
Tính giá trị của <biểu thức> rồi gán cho <biến>
Ví dụ: del = b*b – 4*a*c && biến del xác định khi các biến a, b, c tồn tại)
ngayct = { } biến kiểu Date kiemtra = F biến kiểu Logic
Trang 18Khai báo biến
Lệnh STORE: giống lệnh gán nhưng có thể gán giá
trị một lúc cho nhiều biến.
Cú pháp:
STORE <biểu thức>TO<danh sách biến>
Ví dụ: STORE 0 to Pcap, Bhyt, Bhxh
STORE SPACE(6) TO MASVNếu <danh sách biến> đã tồn tại thì nó sẽ được thay thế bởi giá trị của <biểu thức>, nếu chưa tồn tại thì sẽ được tạo lập và được gán giá trị của <biểu thức>
Trang 19Khai báo biến
Lệnh DIMENSION (dùng cho biến mảng)
Biến mảng gồm nhiều phần tử được đánh số từ 1 trở đi
Phần tử thứ i của mảng a được biểu diễn bằng a(i) hay a[i]
Các phần tử trong một mảng có thể có kiểu khác nhau
Cú pháp: DIMENSION <danh sách mảng>
Trang 20Khai báo biến
Trang 21Xuất giá trị của biến hoặc b.thức
Toạ độ màn hình:
Màn hình có 50 dòng (được đánh số từ 0 đến 49) và 160 cột (được đánh số từ 0 đến 159)
Xác định vị trí bất kỳ của con trỏ:
@ <dòng, cột>
Ví dụ: @ ROW() + 2, COL( ) + 3 && dòng hiện tại+2, cột hiện tại+3
Trang 22Xuất giá trị của biến hoặc b.thức
Lệnh ?|??
Cú pháp: ?|?? <D.sách biểu thức>
Xuất kết quả của các biểu thức lên màn hình Lệnh ? thì sau khi xuất đưa con trỏ xuống dưới một dòng, còn lệnh ?? thì không
Xuất giá trị biểu thức có xác định tọa độ:
Cú pháp: @<dòng, cột> SAY <biểu thức>
Ví dụ: @9,18 say “Họ và tên:”+ hoten
Trang 23Nhập giá trị cho biến
Lệnh ACCEPT:
Cú pháp: ACCEPT <btC> TO <biến chuỗi>
Dữ liệu từ bàn phím sẽ gán cho biến chuỗi
<btC> là thông báo để nhắc nhở việc nhập giá trị cho biến
Trang 24Nhập giá trị cho biến
Trang 25Nhập giá trị cho biến
Nếu có [TO<biến>] thì <biến> sẽ nhận giá trị từ bàn phím
Nếu có [TIMEOUT <btN>] thì sau <btN> giây không nhấn một phím nào thì <biến> sẽ nhận giá trị rỗng
Ví dụ: Wait “ấn một phím để thoát” to Tbao
Trang 26Nhập giá trị cho biến
Lệnh @ SAY GET
Cú pháp: @ <dòng, cột> Say <btC1> get <biến>
[Default <bt>] [Function <mã F>] [Picture <mã P>] [Range<btn1, btN2>] [valid<btl>] [Error<btc2>] [When<btl>] [Color<mã màu>]
@
@
READ Nhập dữ liệu cho biến theo tọa độ màn hình
Trang 27Nhập giá trị cho biến
<dòng, cột>: toạ độ màn hình
SAY<btC1>: <btC1> là thông báo
GET <biến>: <biến> nhận giá trị từ bàn phím Biến phải khai báo trước hoặc sử dụng DEFAULT <bt>
FUNCTION <mã>/PICTURE <mã P>: dùng để mô tả dạng
dữ liệu nhập cho các kiểu số và chuỗi
Trang 28Nhập giá trị cho biến
RANGE <btN1, btN2>: chỉ có những dữ liệu trong phạm vi
<btN1, btN2> mới được đưa vào
VALID <btL>: dùng để kiểm tra dữ liệu được nhập cho biến
ERROR <btC2>: hiện thông báo khi giá trị nhập không hợp lệ
WHEN <btL>: chỉ khi nào <btL> nhận giá trị T thì con trỏ mới vào vùng GET để vào dữ liệu Nếu <btL> nhận giá trị F thì con trỏ chuyển đến vùng GET tiếp theo
Trang 29Nhập giá trị cho biến
Ví dụ 1: nhập giá trị cho biến ho, hsl:
Ho= Space(15)
@12,10 Say “Nhập họ:” get ho
@13,10 Say “Nhập hệ số:” Get hsl Default 0
Read
Ví dụ 2: nhập giá trị cho heso, diem, chucvu:
@10,10 Say “Hệ số” Get heso Function “9.99” Default 0
@11,10 Say “Nhập điểm:” Get diem default 0, Range 0,10
@15,10 Say “Chức vụ:” Get chucvu When Empty(chucvu)
Read
Trang 30Nhập giá trị cho biến
@20,20 Say “Bạn có tiếp tục không (C/K)?” get tloi Valid Upper(tloi) $ “CK” Error “Bạn chỉ được nhập C hoặc K”
Read
Trang 314 Tập tin biến bộ nhớ
Trang 33Lệnh chuyển dữ liệu từ tập tin vào
Trang 34Lệnh chuyển dữ liệu từ tập tin vào
Trang 35Lệnh chuyển dữ liệu từ bộ nhớ vào tập tin
Cú pháp:
GATHER MEMVAR [FIELDS<d.sách trường>
biến trung gian có cùng tên với các trường vào mẫu tin hiện tại trong tập tin DBF đang mở
Trang 36Lệnh chuyển dữ liệu từ bộ nhớ vào tập tin
mẫu tin trắng được thêm ở cuối tập tin NHANVIEN
Use NHANVIEN
Go BottomAppend BlankGather Memvar
Trang 37Lệnh chuyển dữ liệu từ bộ nhớ vào tập tin
Ví dụ 2: Mở tập tin dự án QLNS, viết chương trình nhập dữ liệu cho tập tin LUONG bao gồm các trường Manv, Heso, NamCT, Thamnien, Pctn
Trường Thamnien bằng năm hiện tại trừ năm bắt đầu
công tác.
Trường Pctn là 1.000.000 nếu Thamnien>=25, 800.000 nếu Thamnien>=10, còn lại là 400.000
Trang 38Lệnh chuyển dữ liệu từ bộ nhớ vào tập tin
SET TALK OFF
SCATTER MEMVAR BLANK
@ 10,10 SAY “Nhập mã nhân viên:” GET m.manv Function “@!” READ
LOCATE FOR UPPER(Manv) = = UPPER (M.Manv)
IF !EOF( )
? “Nhân viên này đã nhập rồi”
Trang 39Lệnh chuyển dữ liệu từ bộ nhớ vào tập tin
ELSE
@ 12,10 SAY “Nhập Hệ số lương: ” GET m.Heso PICTURE “9.99”
@ 13,10 SAY “Nhập năm công tác: ” GET m.Namct
READ
APPEND BLANK
GATHER MEMVAR
REPLACE Thamnien WITH Year(Date())-Namct
REPLACE Pctn WITH IIF(Thamnien>=25, 1000000, IIF(Thamnien>=10,
800000, 400000)) ENDIF
@15,10 Say “Bạn có tiếp tục không (C hoặc K)?” get traloi
Read
ENDDO
USE
Trang 405 Câu lệnh có cấu trúc
Trang 41Hoạt động: Nếu Điềukiện là True
thì thực hiện lệnh P, ngược lại thì
không thực hiện lệnh P, chuyển
sang thực hiện lệnh sau Endif
Đ.kiện
Câu lệnh P
Câu lệnh sau Endif
False True
Trang 42Hoạt động: Nếu Điềukiện là True
thì thực hiện lệnh P, ngược lại thì thực hiện lệnh Q
Đ.kiện
Câu lệnh P
Câu lệnh sau Endif
False True
Câu lệnh Q
Trang 43IF delta < 0 ? "Phuong trinh vo nghiem"
ENDIF
Trang 44True False
Trang 45Cấu trúc rẽ nhánh
Nếu điều kiện nào có giá trị T thì câu lệnh tương ứng sẽ được thực hiện, sau đó chuyển sang thực hiện câu lệnh sau ENDCASE
Trường hợp không có điều kiện nào có giá trị T thì <Câu lệnh n+1> (nếu có) sẽ được thực hiện
Trang 46Cấu trúc rẽ nhánh
SET TALK OFF CLEAR
CASE diem>=6.5 AND diem<8 @ 12,15 say "Kha"
CASE diem>=5 AND diem<6.5 @ 12,15 say "Trung binh"
CASE diem<5 @ 12,15 say "Yeu"
Trang 49FOR i=1 TO n STEP 2
s=s+iENDFOR
? 'Tong S=',s
Trang 51Cấu trúc lặp
Hoạt động:
Trong khi điều kiện còn đúng thì các lệnh trong thân vòng lặp còn được thực hiện Nếu điều kiện sai thì sẽ dừng và thực hiện các lệnh sau ENDDO
[LOOP]: Khi gặp lệnh này sẽ quay về kiểm tra điều kiện, không thực hiện 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
Trang 52ENDDO SET TALK ON
Trang 54Cấu trúc lặp
Duyệt lần lượt các bản ghi trong bảng dữ liệu trong <phạm vi> được chỉ ra và thoả mãn điều kiện của các <Đ.kiện> sau FOR hoặc WHILE
Tương ứng với một bản ghi tìm được, thì <Các lệnh> sẽ được thực hiện
Sẽ dừng khi nào duyệt đến bản ghi cuối cùng
Trang 55Cấu trúc lặp
Ví dụ: Viết chương
trình nhập năm (bốn chữ số), hiển thị những nữ nhân viên sinh năm đó
SET TALK OFF SET DATE DMY CLEAR
CLOSE TABLES ALL SET DEFAULT TO e:\baitap\qlns USE nhanvien
input "Nhap nam sinh: " to bnam
? "Danh sach nhan vien nu sinh nam: ", bnam SCAN FOR !phai and year(ngaysinh)=bnam ?ALLT(ho)+" "+ALLT (ten), ngaysinh ENDSCAN
SET TALK ON RETURN