Hướng dẫn thực hành bài tập tin học tín dụng Foxpro cho các bạn sinh viên đang và sắp học tin học ứng dungj. Có đầy đủ hướng dẫn khái niện, công thức và ví dụ cụ thể từng hàm giúp sinh viên dễ hiểu và có thể giúp ích trong học tập cũng như ứng dụng.
Trang 1o [Đườngdẫn]: đường dẫn tới vị trí tệp dữ liệu sẽ lưu trữ trong ổ đĩa cứng
Ví dụ D:\thuchanh\ tệp sẽ lưu ở thư mục thuchanh trong ổ đĩa D Trong
trường hợp bỏ qua thành phần này tệp dữ liệu sẽ được lưu ở thư mục hiện tại Foxpro đang làm việc (Có thể bấm vào menu File\Open để tìm thư mục này
o <tên_tệp_dl>: tên của tệp dữ liệu mong muốn (phần mở rộng ngầm định
là dbf)
• Chú ý:
o Nên để đường dẫn và tên tệp ngắn gọn, gợi nhớ, không nên chứa khoảng cách (nếu có khoảng cách thì phải để trong hai dấu ngoặc kép) và kí tự đặc biệt
• Ví dụ:
Ta cần tạo một tệp QLHH.dbf (dùng để quản lý hàng hóa) với cấu trúc như sau:
Trang 2Khai báo cấu trúc cho tệp QLHH như hình sau đó chọn OK.
Hình : Khai báo cấu trúc cho tệp QLHH
Khi đấy Foxpro sẽ tạo ra một tệp QLHH.dbf nằm trong d:\thuchanhFoxpro Bạn có thể vào My Computer để kiểm tra lại
Hình : tệp QLHH.DBF đã được tạo
Trang 32 Lệnh USE
• Cú pháp: Use [đườngdẫn] [tên_tệp_dl]
• Tác dụng: Dùng để mở (bắt đầu sử dụng) hoặc đóng một tệp dữ liệu
• Ví dụ:
USE qlsv dbf Mở tệp qlsv.dbf ở thư mục hiện thời sẵn sàng làm việc
……
USE d:\thuchanhfoxpro\qlhh – Mở tệp qlhh.dbf tại
D:\thuchanhfoxpro Tệp qlsv.dbf bên trên bị đóng Tệp đang mở hiện tại là qlhh.dbf
Trang 4SET DATE FRENCH
Trang 54 Lệnh LIST/DISPLAY
• Cú pháp: LIST/DISPLAY [phạm vi] [Fields dstrường] [FOR btlogic] [TO PRINTER]
• Tác dụng: Dùng để hiển thị nội dung của các bản ghi trong tệp đang mở
Record <n>: bản ghi số hiệu (thứ tự) n (n là số nguyên dương >0)
Rest: các bản ghi từ bản ghi hiện tại đến hết
Nếu không có thành phần này mặc định là Allvới List và Display có For, bản ghi hiện thời với Display không có mệnh đề For
o [Fields ds trường]:
Bao gồm từ khóa Fields và một danh sách các trường ngăn cách bởi dấu phẩy (,) Dùng để chỉ ra tập hợp các trường bị tác động bởi lệnh
Nếu không có thành phần này thì tất cả các trường của tệp đều chịu sự tác động của lệnh
o [FOR btlogic]:
Bao gồm từ khóa FOR + một biểu thức logic Chỉ ra các bản ghi bị tác động bởi lệnh Cụ thể chỉ có các bản ghi làm cho btlogic nhận giá trị T mới chịu sự tác động của lệnh
Biểu thức logic là biểu thức kết quả trả về giá trị T hoặc F
Nếu không có mệnh đề FOR ngầm định tất cả các bản ghi (trong miền [phạm vi] được quy định ở trước) đều bị tác động bởi lệnh
>=, <>, <,>) , kiểu dữ liệu của các đối số khi sử dụng hàm …
o Sử dụng các cặp dấu mở đóng ngoặc () để nhóm các phép toán cần thực hiện trước nếu cần thiết
Trang 6o Cần đổi font chữ hiển thị của màn hình Foxpro để tránh bị nhảy dòng khi hiển thị bằng lệnh DISPLAY/LIST Cách làm như sau: Vào menu Window -> Properties Windows ->double click vào Foncharset Hộp thoại Font xuất hiện Chọn fontname là vntime , cỡ chữ 10
Hình : Đổi Font cho màn hình hiển thị Foxpro
• Ví dụ
o Hiển thị ra các phiếu lập trong tháng năm 2016
USE d:\thuchanhfoxpro\qlhh
LIST FIELDS soct, ngaylap FOR YEAR (ngaylap)=2016
o Hiển thị ra các phiếu xuất của loại hàng hóa 01
DISPLAY FOR SUBSTR ( MAHH ,3,2)="01" AND LEFT (SOCT,2)="PX"
o Hiển thị ra các phiếu xuất trong quý I năm 2016
LIST FOR MONTH (ngaylap)>=1 AND MONTH (ngaylap)<=3 AND
YEAR (ngaylap)=2016 AND LEFT (soct,2)="PX"
• Yêu cầu
o 4.1: Hiển thị các phiếu nhập trong quý I và quý III năm 2016?
o 4.2: Hiển thị ra màn hình các phiếu nhập loại hàng 01 và 02?
o 4.3: Hiển thị các phiếu nhập trong nửa đầu tháng 1 năm 2016?
Trang 7o 4.4: Hiển thị ra màn hình các phiếu nhập nhiều hơn 10KG hoặc 00.1 TAN?
o 4.5: Hiển thị 3 bản ghi đầu tiên?
o 4.6: Hiển thị 3 bản ghi cuối cùng?
o 4.7: Hiển thị các bản ghi quên chưa nhập dvt
o [phạm vi]: cách sử dụng giống lệnhDISPLAY
o <tên_trường_1 with biểu_thức_1>: tên trường cần thay thế với biểu thức tính giá trị để thay thế Biểu thức này cũng có thể là một hằng
o [,tên_trường_2 with biểu_thức_2,…]: nếu cần thay thế nội dung trên nhiều trường có thể sử dụng dấu “,” sau biểu thức đằng trước và tiếp tục viết tên trường và biểu thức tính giá trị để thay thế
• Chú ý:
o Kiểu của giá trị biểu thức cần phù hợp với kiểu của trường
o Cần quan tâm về mặt logic nếu thay thế nội dung trên một trường có ảnh hưởng tới nội dung trên trường khác không?
• Ví dụ:
o Tính thuế theo công thức thuế = 5%*Số lượng * DG với loại hàng 01 ; thuế
= 10% * số lượng * DG với các loại còn lạiREPLACE thue WITH soluong*dongia*0.05 FOR SUBSTR (mahh,3,2)="01" REPLACE thue WITH soluong*dongia*0.1 FOR SUBSTR (mahh,3,2)<>"01" Hoặc
REPLACE ALL thue WITH soluong*dongia* IIF ( SUBSTR (mahh,3,2)="01",0.05,0.1)
• Yêu cầu
o 5.1 Tính thành tiền theo công thức: thanhtien=soluong*dongia + thue
o 5.2 Chuyển nội dung các bản ghi chưa nhập trường dvt thành KG
o 5.3 Chuyển toàn bộ DVT từ TAN thành KG
Trang 8Hướng dẫn thực hành Foxpro
6 Lệnh Delete
• Cú pháp: Delete [phạm vi] [For <btlogic>]
• Tác dụng: Đánh dấu xóa một hoặc một số bản ghi trong tệp đang mở hiện tại (bản ghi chưa bị xóa hoàn toàn khỏi tệp dữ liệu)
o Lệnh sau sẽ đánh dấu xóa các bản ghi chưa nhập dvt
Delete Forlen(alltrim(dvt))=0
o Tiếp đó lệnh Pack sẽ xóa hẳn các bản ghi được đánh dấu xóa bên trên và các bản ghi được ghi lại vào tệp dữ liệu
Pack
• Yêu cầu
o 6.1 Xóacác phiếu có đơn giá bằng 0 ra khỏi tệp dữ liệu
Trang 9
o <trường 1 >[/A/D/C] [, [trường 2 [/A/D/C], … ,]]
<trường 1>, [trường 2] …: đây là tên của các trường chọn để làm tiêu chí sắp xếp Tối thiểu cần một trường để làm tiêu chí sắp xếp này Trong trường hợp cần sắp xếp theo nhiều tiêu chí khác nhau thì các trường được viết ngăn cách nhau bởi dấu phẩy (,) tiêu chí nào cần được ưu tiên cao hơn thì viết trước (Sort sẽ sắp xếp các bản ghi theo giá trị tại trường 1, nếu hai bản ghi trùng giá trị tại trường 1 sẽ xét tới trường 2,3 …)
>[/A/D/C] : Một số các tham số đi kèm đằng sau với các tên trường Mang ý nghĩa /A: tăng dần (mặc định); /D: giảm dần ; /C: không phân biệt chữ hoa thường với các trường kiểu kí tự
• Chú ý:
o Vì lệnh Sort tạo ra một tệp dữ liệu mới nên muốn hiển thị kết quả sắp xếp trước hết ta cần mở tệp đó bằng lệnh USE
o Lệnh Sort không được khuyến khích sử dụng (nên dùng lệnh Index)
• Ví dụ:
o Hiển thị các phiếu nhập theo trình tự thời gian lập, cùng thời gian lập theo
số phiếu
USE d:\thuchanhfoxpro\qlhh dbf –Tệp gốc
SORT TO sx1 ON ngaylap /A, soct /A FOR LEFT (soct,2)="PN"
USE sx1– Mở tệp kết quả sau khi sắp xếp
LIST FIELDS ngaylap,soct
USE d:\thuchanhfoxpro\qlhh dbf – Mở lại tệp gốc
• Yêu cầu
o 7.1 Dùng lệnh Sort hiển thị các chứng từ theo trình tự số chứng từ, cùng
số chứng từ theo khối lượng giảm dần
Trang 10
8 Lệnh Index
• Cú pháp: INDEX ON <biểu thức>TO<Tên tệp> [FOR<biểu thức logic>]
• Tác dụng: Tạo ra một tệp chỉ dẫn (phần mở rộng là idx) để hiển thị hoặc truy cập các bản ghi của tệp dữ liệu đang mở theo một thứ tự nào đó
• Giải thích các thành phần của lệnh
o <biểu thức> : biểu thức dùng để làm căn cứ tạo tệp chỉ dẫn Foxpro căn cứ vào giá trị của biểu thức này trên từng bản ghi để tạo tệp chỉ dẫn các bản
ghi theo thứ tự tăng dầncủa giá trị biểu thức Giá trị biểu thức này có thể
thuộc về một kiểu giá trị bất kỳ (nhưng phổ biến nhất là kiểu C hoặc N) Biểu thức có thể đơn giản chỉ là một tên trường hoặc có thể bao phức tạp bao gồm nhiều phép toán và hàm
o <Tên tệp> : tên của tệp chỉ dẫn (phần mở rộng là IDX) Có thể bao gồm cả đường dẫn dẫn tới tên tệp
o [FOR<biểu thức logic>] : xem lại các lệnh khác
o Lệnh Index luôn tạo tệp chỉ dẫn để sắp xếp các bản ghi theo thư tự tăng dầncủa biểu thức
• Ví dụ:
o Hiển thị nội dung các bản ghi theo thứ tự tăng dần của soluong
INDEX on soluongTO c:\foxpro\cd001
LIST FIELDS soct,ngaylap,mahh,soluong
Giải thích: lệnh Index bên trên ta chọn biểu thức đơn giản chỉ là một tên trường (soluong), trường này kiểu số Lệnh Index tạo ra một tệp chỉ dẫn có
tên là cd001.idx để chỉ dẫn việc hiển thị và truy cập các bản ghi theo thứ tự tăng dần của giá trị soluong Điều này dẫn tới lệnh LIST tiếp theo các bản ghi
đã được hiển thị theo thứ tự tăng dần của soluong
Các bản ghi được hiển thị theo thứ tự tăng dần của trường soluong
Trang 11o Hiển thị các phiếu bản ghi theo thứ tự giảm dần của trường soluong
INDEX on - soluong TO cd002 for LEFT (soct,2)="PN"
LIST FIELDS soct,ngaylap,mahh,soluong,-soluong
Giải thích: ở đây ta chọn biểu thức là –soluong (đây là biểu thức kiểu N trả về
giá trị là số đối của soluong) Lệnh Index on tạo ra tệp chỉ dẫn cho các bản ghi
theo thứ tự tăng dần của –soluong Theo tính chất toán học thì điều này
tương đương với việc tạo ra một thứ tự giảm dần của soluong
Các bản ghi được hiển thị theo thứ tự tăng dần của –soluong Điều này dẫn tới soluong giảm dần
o Hiển thị các phiếu nhập theo trật tự số chứng từ, cùng số chứng từ theo
mã hàng hóaINDEX on soct+mahhTO cd003 FOR LEFT (soct,2)="PN"
Trang 12LIST FIELDS soct,ngaylap,mahh,soluong, soct+mahh
Giải thích: Ta chọn biểu thức sau Index on là biểu thức ghép hai xâu kí tự
soct+mahh Nguyên tắc so sánh của hai xâu kí tự là so sánh lần lượt các kí tự
từ trái qua phải của hai xâu kí tự chừng nào các kí tự còn bằng nhau thì còn
so sánh tiếp cho đến khi tìm được hai kí tự khác nhau đầu tiên giữa hai xâu thì ta so sánh hai kí tự đấy, chuỗi nào có giá trị kí tự so sánh bé hơn thì bé hơn Chính vì vậy ở đây ta ưu tiên viết soct trước mahh trong biểu thức ghép xâu
Các bản ghi được hiển thị theo thứ tự tăng dần của phép toán ghép xâu kí tự soct+mahh
• Yêu cầu
o 8.1 In các chứng từ lập trong năm 2016 theo thứ tự số chứng từ, cùng số chứng từ theo loại hàng
o 8.2 In các chứng từ nhập hàng trong năm 2016 theo thứ tự số chứng từ cùng số chứng từ theo số lượng tăng dần
o 8.3 In các chứng từ nhập hàng trong năm 2016 theo thứ tự số chứng từ cùng số chứng từ theo số lượng giảm dần
Trang 13
o 8.4 Để hiển thị các chứng từ theo trình tự ngày lập cùng ngày lập theo mã hàng hóa có người đã thực hiện các lệnh sau INDEX on DTOC(ngaylap)+mahh TO cd LIST FIELDS soct,ngaylap,mahh,soluong Hãy kiểm tra lại kết quả của các lệnh trên.Cho biết lệnh có thực hiện đúng yêu cầu không?Giải thích vì sao? Nếu sai viết lại cho đúng
o 8.5In các chứng từ lập trong quý II năm 2016 theo thứ tự ngày tháng lập, cùng ngày lập theo số lượng tăng dần
o 8.6In các chứng từ theo thứ tự loại phiếu (xuất/ hoặc nhập)
o 8.7In các chứng từ theo loại hàng hóa, cùng loại hàng hóa theo số chứng từ giảm dần
9 Lệnh SUM/AVERAGE
• Cú pháp: SUM (AVERAGE) [phạm vi] [ Ds trường số] [ TO ds_biến_nhớ] [ FOR <Bt logic>]
• Tác dụng: Dùng để tính tổng, trung bình cộng các trường kiểu số trong tệp đang mở
Trang 14 Nếu không có thành phần này thì tất cả các trường số của tệp đều được mang ra tính
o [TO ds_biến_nhớ]:
Bao gồm từ khóa TO và theo sau là một danh sách tên các biến nhớ
do người dùng tự đặt để lần lượt lưu lại các kết quả tính toán ứng với các tên trường đã chỉ ra tại [danh sách các trường số ở trên)
Nếu không có thành phần này các kết quả tính toán không được lưu lại và do vậy không thể hiển thị lại khi cần
o [FOR btlogic]: Xem lại các lệnh khác
• Chú ý:
o Ta sử dụng lệnh ?<tên biến>để hiển thị ra màn hình giá trị của <tên biến>
Ta cũng có thể đưa vào lệnh ?một biểu thức bất kỳ chứ không nhất thiết
phải chỉ là tên biến
o Có thể thực hiện các phép toán số học (+,-,*,/ ) bình thường với các biến
số này
o Lệnh Average tính trung bình bằng cách tính tổng các giá trị trên trường
số của các bản ghi mà lệnh tác động chia cho số lượng bản ghi mà lệnh tác động tới
• Ví dụ
o Tính tổng khối lượng, thành tiền nhập mã hàng HH0101 trong quý I năm 2016
SUM soluong,thanhtien TO tsoluong,tthanhtien FOR
LEFT (soct,2)="PN" AND MONTH (ngaylap)<=3 AND
YEAR (ngaylap)=2016
?"So luong nhap la:",tsoluong
?"thanh tien nhap la:",tthanhtien
Trang 15Giải thích: Lệnh SUM trên tính tổng các giá trị trên trường soluong và
thanhtien của các bản ghi thỏa mãn biểu thức logic viết sau FOR Kết quả tính toán được lưu trong hai biến tsoluong và tthanhtien Các lệnh ?tiếp theo hiển thị các giá trị của biến này ra màn hình
• Yêu cầu
o 9.1 Tính đơn giá nhập bình quân mã hàng HH0101 trong quý I năm 2016
o 9.2 Tính khối lượng tồn của mã hàng HH0101 tại kho KH01 biết rằng giả sử ban đầu số dư là 0
o 9.3 Tính tổng thành tiền xuất trong tháng 1 năm 2016
10 Lệnh TOTAL *
• Tác dụng: Dùng tính tổng các trường số trong tệp dữ liệu đang mở hiện tại theo
từng nhóm bản ghi, sau đó đưa các kết quả tính toán được ra một tệp dữ liệu (.dbf) mới.
o Một nhóm bản ghi là một dãy liên tiếp các bản ghi có chung giá trị tiêu
thức phân nhóm do người dùng lựa chọn Do vậy để tiến hành phân nhóm các bản ghi được chính xác ta cần phải sắp xếp các bản ghi đấy sao cho các bản ghi ta mong muốn thuộc về một nhóm thì nằm liên tiếp nhau
• Cú pháp: TOTAL TO <tên tệp> ON < Biểu thức > [ FIELDS <ds trường>] [FOR
<Bt logic>]
• Giải thích các thành phần của lệnh
o <tên tệp>: Tên của tệp dữ liệu (.dbf) chứa kết quả của lệnh TOTAL
o <biểu thức>: một biểu thức bất kỳ có thể đơn giản là tên một trường hoặc một biểu thức phức tạp với các phép toán và hàm bên trong; Dùng để
Trang 16phân nhóm các bản ghi khi tính tổng, hai bản ghi liên tiếp có cùng giá trị của <biểu thức> sẽ thuộc về một nhóm, hai bản ghi liên tiếp có giá trị của
<biểu thức> khác nhau sẽ thuộc về các nhóm khác nhau
o [ FIELDS<ds trường>] : danh sách các trường số được tính tổng theo nhóm, nếu không có mặc định tất cả các trường số trong tệp
o [FOR <Bt logic>] : xem lại các lệnh khác
• Chú ý:
o Luôn luôn phải sắp xếp lại các bản ghi trước khi thực hiện lệnh TOTAL (nên dùng INDEX để sắp xếp), mục đích của việc này để lệnh TOTALcó thể phân nhóm các bản ghi một cách chính xác theo nhu cầu người dùng
o Khi dùng lệnh Index để sắp xếp các bản ghi trước khi TOTAL thì <biểu thức> viết sau lệnh TOTAL trùng với <biểu thức> viết sau lệnh INDEX
o Kết quả của lệnh TOTAL là một tệp dữ liệu do đó muốn hiển thị kết quả cần dùng lệnh USE để mở tệp dữ liệu đó
o Tệp kết quả của TOTAL có cấu trúc và nội dung như sau
Về cấu trúc: giống tệp gốc (số lượng trường, tên, kiểu các trường,
độ rộng trường cũng được giữ nguyên trừ khi cần thiết phải mở rộng để chứa kết quả của lệnh)
Về nội dung các bản ghi:
• Số lượng bản ghi trong tệp kết quả bằng với số nhóm trong tệp gốc Mỗi bản ghi ở tệp kết quả phản ánh kết quả tính toán cho một nhóm
• Với mỗi bản ghi ở tệp kết quả, giá trị ở các trường sốcủa chúng bằng tổng giá trị của các bản ghi ở nhóm tương ứng (nếu trường số đấy trong danh sách các trường được yêu cầu tính)
• Ví dụ:
o Lập báo cáo về tổng khối lượng nhập, thành tiền nhập của từng mã hàngUSE D:\thuchanhfoxpro\qlhh –Mở tệp gốc
INDEX on mahh TO cdmahh FOR LEFT (soct,2)="PN"
Bước 2: tính tổng theo nhóm bằng lệnh TOTAL Gửi kết quả tính được ra tệp mới
TOTAL ON mahh TO KQTH
Trang 17Bước 3: Mở bảng kết quả và hiển thị kết quả
“HH0101”,”HH0102”,”HH0201”,”HH0202”, ”HH0203”
o Bước 2: Lệnh Total on mahh kế tiếp tính tổng theo nhóm với tiêu thức để gộp nhóm là mahh (cứ các bản ghi liên tiếp giống nhau ở mahh sẽ được cộng lại ở các trường số soluong và thanhtien) Kết quả được đưa vào một tệp dữ liệu có tên là KQTH
o Bước 3: Ta dùng lệnh USE để mở bảng KQTH ở trên và hiển thj kết quả ra màn hình bằng lệnh LIST Do ở tệp gốc qlhh ta có 5 nhóm nên nhận thấy ở tệp kết quả ta có 5 bản ghi ứng với 5 nhóm trên
Quá trình tính toán lệnh TOTAL sau khi đã Index có thể được minh họa như hình sau: