146
TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ELEC Trang 1 Lời nói đầu Visual FoxPro 6.0 (g ọi tắt l à VF) là một hệ quản trị cơ sở dữ liệu quan hệ (QTCSDL) trong b ộ Microsoft Visual Studio 6.0. Đây l à một hệ QTCSDL trực quan, mạnh và hướng đối tượng. Nhờ VF mà bạn có thể tạo lập các CSDL để giải quyết một vấ n đề thực tế nào đó, bạn có thể sắp xếp, t ìm ki ếm, truy lục thông tin trong các bảng, từ các bảng trong một CSDL bạn c òn có th ể phát sinh ra các báo biểu, các nh ãn v.v..tóm l ại nhờ công cụ n ày (VF) mà b ạn có thể giải quyết được các b ài toán xẩy ra trong cô ng vi ệc thường nhật một cách dễ d àng. Với VF chúng ta vừa kế thừa đ ược sức mạnh trong môi trường Windows, lại vừa tận dụng được mọi tính năng của một hệ quản trị c ơ sở dữ liệu mạnh, lại vừa tận dụng được các điều khiển có tính trực quan v à cao hơn bạn tiếp cận với cung cách l ập trình cấu trúc và hơn hết l à lập trình hướng đối tượng (OOP-Object Oriented Programming). Giáo trình được tổ chức theo 11 chương: Chương 1: Làm quen với môi trường VF Chương 2: Các loại dữ liệu trong VF Chương 3: DataBa se và Table Chương 4: Truy vấn và hiển thị thông tin Chương 5: Form Report Chương 6: Lập trình trong VF Chương 7: Thiết kế giao diện Chương 8: Bẫy trong chương tr ình Chương 9: Mảng và chuyển giao dữ liệu Chương 10: Một số lệnh hiệu chỉnh dữ liệu Chương 11: Chương tr ình con Chương 12: Ghép dữ liệu Giáo trình được trình bày rõ ràng, d ễ hiểu, nội dung của các Tables đ ơn giản giúp cho vi ệc lĩnh hội kiến thức dễ d àng. Vì VF là một hệ QTCSDL lớn, chứa đựng rất nhiều tính năng tiện ích, ngo ài ra còn ch ứa đựng một loạt các điều khiển (controls), lớp (Class), các đối t ượng khác v.v.., mà giáo trình này l ại ứng với số tiết không nhiều, n ên không th ể đề cập đầy đủ được. Khi biên so ạn giáo tr ình này chúng tôi h ết sức cố gắng nhưng chắc chắn không thể tránh khỏi những thiếu sót, chúng tôi mong sự chỉ giúp của các bạn. Hà nội ngày 15/2/2008

Lời nói đầu - el.hubt.edu.vnel.hubt.edu.vn/wp-content/uploads/2014/09/Giáo-trình-Tin-4-Visual-Fox.pdf · sổ Command T (ta sẽ còn làm quen với hai cửa sổ này trong

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 1

Lời nói đầuVisual FoxPro 6.0 (gọi tắt là VF) là một hệ quản trị cơ sở dữ liệu quan hệ(QTCSDL) trong bộ Microsoft Visual Studio 6.0. Đây l à một hệ QTCSDL trựcquan, mạnh và hướng đối tượng. Nhờ VF mà bạn có thể tạo lập các CSDL để giải quyết một vấ n đề thực tếnào đó, bạn có thể sắp xếp, t ìm kiếm, truy lục thông tin trong các bảng, từ cácbảng trong một CSDL bạn còn có thể phát sinh ra các báo biểu, các nh ãnv.v..tóm lại nhờ công cụ này (VF) mà bạn có thể giải quyết được các bài toánxẩy ra trong công việc thường nhật một cách dễ dàng. Với VF chúng ta vừa kế thừa được sức mạnh trong môi trường Windows, lạivừa tận dụng được mọi tính năng của một hệ quản trị c ơ sở dữ liệu mạnh, lại vừatận dụng được các điều khiển có tính trực quan v à cao hơn bạn tiếp cận với cungcách lập trình cấu trúc và hơn hết là lập trình hướng đối tượng (OOP-ObjectOriented Programming). Giáo trình được tổ chức theo 11 chương:Chương 1: Làm quen với môi trường VFChương 2: Các loại dữ liệu trong VFChương 3: DataBase và TableChương 4: Truy vấn và hiển thị thông tinChương 5: Form ReportChương 6: Lập trình trong VFChương 7: Thiết kế giao diệnChương 8: Bẫy trong chương trìnhChương 9: Mảng và chuyển giao dữ liệuChương 10: Một số lệnh hiệu chỉnh dữ liệuChương 11: Chương trình conChương 12: Ghép dữ liệu Giáo trình được trình bày rõ ràng, dễ hiểu, nội dung của các Tables đ ơn giảngiúp cho việc lĩnh hội kiến thức dễ dàng. Vì VF là một hệ QTCSDL lớn, chứa đựng rất nhiều tính năng tiện ích, ngo àira còn chứa đựng một loạt các điều khiển (controls), lớp (Class), các đối t ượngkhác v.v.., mà giáo trình này lại ứng với số tiết không nhiều, n ên không thể đềcập đầy đủ được. Khi biên soạn giáo trình này chúng tôi hết sức cố gắng nhưng chắc chắnkhông thể tránh khỏi những thiếu sót, chúng tôi mong sự chỉ giúp của các bạn.

Hà nội ngày 15/2/2008

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 2

Chương 1: Làm quen với môi trường VF

1.1 Khởi động VFCó nhiều cách khởi động VF, cách thông dụng nhất l à: Chọn Start/Program/Microsoft Visual Studio 6.0 /Visual FoxPro 6.0Và tuỳ theo cài đặt và đã chạy trước đó, nên có thể có những dạng màn hình xuất

hiện khác nhau. Giả sử ta có dạng sau:Trong trường hợp này ta thấy có một cửa sổ Microsoft Visual FoxPro v à một cửasổ Command T (ta sẽ còn làm quen với hai cửa sổ này trong suốt giáo trình)

1.2 Project Manager Project Manager (quản lý dự án) là công cụ tổ chức cơ bản nhất để làm việc vớicác dữ liệu và đối tượng trong VF. Tạo một Project Manager mới nh ư sau: Chọn File/New. Sau đó ta có hộp thoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 3

Chọn Project và New File, hộp thoại sau xuất hiện:Nghĩa là VF yêu cầu bạn gõ tên dự án vào phần Enter Project, hãy đặt tên cho dự

án và chọn Save. Tiếp theo hộp thoại sau hiện ra:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 4

Trong hộp thoại trên có các thành phần: Data, Document, Code và Other và 6tab: All, Data, Documents, Classes, Code và Other (B ạn chưa cần tìm hiểu nóvội - vì mục đích lúc này là biết cách trưng diện nó mà thôi). Nếu bạn kích vàocác dấu + thì các thành phần trong đó hiện ra, bạn hãy quan sát hộp thoại sau,sau khi bạn đã kích vào 4 dấu cộng (+) :

Ta nhận thấy trong phần Data có : Databases (cơ sở dữ liệu), Free Tables(bảng), Queries (các truy vấn) v.v.. - chúng ta sẽ tìm hiểu các thành phần đó ở cácchương sau.Khi tìm hiểu các đối tượng riêng lẻ, bạn không nên chọn Tab All. Ví dụ khi làmviệc với Data, hãy chọn Tab Data, sau đó chỉ phần Data hiện ra:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 5

Cũng tương tự như vậy đối với các Tab khác.

1.3 Bổ sung và loại bỏ các File trong một Project1. Bổ sung FileGiả sử bạn cần bổ sung một File có đuôi *.dbf (bảng) v ào phần Free Tables củamột dự án có tên DuAn1.PJX, ta thao tác như sau: Trưng diện hộp thoại của dự án mới và đặt tên cho nó là DuAn1.PJX, bằng

các thao tác đã nói ở trên:

Chọn Free Tables (vì ta định chèn tệp dạng bảng) và Add, hộp thoại Open hiệnra:Hãy chọn một tệp bảng (Giả sử ta chọn tệp Labels.dbf) v à sau đó chọn OKNhư vậy tệp Labels.dbf đã được đưa vào Project (dự án) có tên DuAn1.PJX ởphần Free Tables.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 6

2. Loại bỏ một tệp trong một dự ánGiả sử với dự án mà ta vừa đưa tệp Labels.dbf vào, muốn loại bỏ nó hãy thaotác: Trưng diện hộp thoại và chọn: Data/Free Tables/Labels.dbf

Nếu sửa hãy chọn Modify, hiển thị hãy chọn Browse, loại bỏ hãy chọn Removev.v..

1.4 Tạo File mới trong một thành phần của Project Manager Hãy trưng diện dự án, ví dụ dự án có tên DuAn1.pjx như hình sau:

Chọn thành phần bạn muốn tạo File (giả sử chọn Data/Free Tables Chọn New sau đó ta có hộp thoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 7

Chọn New TableSau đố hộp thoại Create hiện ra:

Hãy gõ tên tệp vào và chọn Save

Sau đó cửa sổ tạo bảng (Table Designer) có dạng: Hãy tạo cấu trúc tệp mới đó (sẽ nói cách tạo ở chương sau) Nạp luôn dữ liệu vào, nạp xong hãy gõ Ctrl + W để thoát

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 8

1.5 Thêm chú thích (mô tả) FileNhiều khi ta muốn chú thích cho một File n ào đó, giả sử ta muốn chú thích FileLabels.dbf là "Đây là tệp nhãn dùng cho việc in bì thư". Muốn vậy ta thao tácnhư sau: Chọn tệp Labels.dbf trong phần Data/Free Tables, nh ư trong hộp thoại sau:

Chọn Menu Project /Edit Description nh ư hình sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 9

Sau đó ta có hộp thoại: Gõ chú thích: "Đây là tệp nhãn dùng cho việc in bì thư" vào và chọn OK

Sau đó ta thấy chú thích hiện ra mỗi khi ta chọn tệp Labels.dbf:1.5 Những vấn đề khác1. Di chuyển Project ManagerĐưa trỏ chuột vào thanh tiêu đề của Project Manager, sau đó kéo đến nới cầnđến.2. Đặt lại kích cỡ của Project ManagerĐặt trỏ chuột ở đỉnh hoặc các cạnh, sau đó co kéo cho hợp với kích cỡ m à mìnhmuốn.3. Chỉ đề phần Tab của Project Manager Bên phải của các Table có mũi tên lên, hãy kích vào nó ta có d ạng ProjectManager mới như sau:

Đã có chúthích rồi!

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 10

Còn nếu kích vào mũi tên xuống ta được hình thù ban đầu.4. Tách các Tab thành các giao diện riêng Đưa Project Manager về dạng chỉ còn lại thanh Tab Đưa trỏ chuột vào Tab, kéo xuống ta được một giao diện riêng của Tab đó:

Nếu kích vào dấu Close (X) của giao diện đơn đó (hoặc kéo nó về nơi xuất phát),giao diện này sẽ nhập vào Tab tương ứng của Project Manager.5. Đưa Project Manager về dạng như thanh công cụ nằm ở phía trên màn

hìnhĐưa trỏ chuột vào thanh tiêu đề và kéo về phía trên, vùng dành cho các thanhcông cụ, cho đến khi nó mất phần phía sau thanh Tab . Như hình sau:Muốn Project Manager trở về dạng ban đầu h ãy kéo "thanh này" ra khỏi vùng đócho đến khi nó trở về dạng ban đầu.

Như thanh công cụ

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 11

1.6 Các thanh công cụViệc sử dụng các thanh công cụ trong VF cũng nh ư trong các chương tr ình kháctrong môi trường Windows, sẽ giúp cho việc thao tác nhanh v à chính xác. Đưamột thanh công cụ ra màn hình theo các bước sau: Chọn View /Toolbars sau đó ta có hộp thoại chọn thanh công cụ:

Hãy đánh dấu kiểm vào một thanh mà bạn cần. Nếu không muốn hiển thị thanh công cụ đó h ãy xoá dấu khiểmBạn sẽ hiểu cách dùng các thanh công cụ đó qua những phần thích hợp.

1.7 Thanh Menu Bar

Khi khởi động một dự án, thanh Menu Bar có các th ành phần sau:Nó bao gồm:File, Edit, View, Tools, Program, Project, Window, Help

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 12

Khi bạn chọn một thành phần nào đó trong Project Manager th ì các thành phầncủa Menu Bar tương ứng có thể có khác nhau. Ví dụ bạn chọn Documents/Formthì Menu Bar sẽ có các thành phần:

Nghĩa là gồm các thành phần:File, Edit, View, Format, Form, Tools, Program, Window và HelpCòn nếu bạn chọn Code /Program th ì:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 13

Trên Menu Bar không có thành phần Form.Bạn sẽ tìm hiểu các thành phần của Menu Bar ở những phần sau.

1.8 Một số thuật ngữ và thao tác cơ bản đối với Project ManagerNhư bạn đã biết Project Manager là "Trung tâm điều khiển" của mọi quá trình xửlý trong VF. Chính vì vậy mà chúng ta phải làm quen một số thuật ngữ và một sốthao tác trước khi chuyển sang các phần cơ bản khác. Như đã trình bày ở trên,trong Project Manager chứa 5 nhóm cơ bản:A. Nhóm DataNhóm này được gọi là nhóm dữ liệu, trong nhóm này có chứa 3 thành phần cơbản là: DataBasesDataBases là cơ sở dữ liệu (CSDL), ta tạm thời hiểu l à một tập các File được tổchức theo một quy tắc nào đó để thực thi một nhiệm vụ nào đó. TrongDataBases chứa các loại tệp khác nhau, nhưng có một loại tệp rất quan trọngđược gọi là bảng (table). Table là loại tệp cơ bản nhất trong CSDL, nhiều phátsinh xuất phát từ tệp này. Để hiểu nó ta tạm thời đưa ra một hình ảnh như sau:Một thí sinh thi khối A có các thông tin: Hodem, T en, Ngaysinh, Sbdc được ghivào tệp có tên TsKhoiA.dbf có hình ảnh sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 14

Bảng này có 4 cột, mà ta hay gọi là Trường (Field), mỗi Trường có tên Trườngkhác nhau, ở ví dụ trên các tên Trường là:a. Hodem (để ghi Họ và đệm của Thí sinh).b. Ten (để ghi tên của Thí sinh)c. Ngaysinh (để ghi ngày sinh của Thí sinh)d. Sbd (để ghi số báo danh của Thí sinh)Mỗi dòng trong bảng được gọi là một bản ghi (Record)Tất nhiên để giải quyết bài toán Tuyển sinh, một mình bảng này chưa đủ, giả sửta còn có tệp dạng bảng có tên DiemKhoiA.dbf như sau:

Để kết nối hai bảng trên thành một loại thông tin cho một thí sinh bao gồm:Hodem, Ten, Ngaysinh, Sbd, Toan, Ly, Hoa, Tong ta ph ải dựa vào trường SBD,nhờ trường này mà hai bảng trên có thể liên kết được với nhau để định ra thôngtin cho một Thí sinh. Ta gọi trường này là trường Khoá, nghĩa là hai bảng trên cómối quan hệ thông qua trường Khoá SBD.Trong hai bảng trên ta còn phải chú ý một vấn đề nữa là kiểu trường và độ dàitrường. Ví dụ:1. Trường Hodem có kiểu văn bản (Character ) và thường là có độ dài 20 kí tự,

nghĩa là số ký tự dành cho họ và đệm không được quá 20 (tất nhiên phải căncứ vào thực tế để định độ dài cho thích hợp)

2. Trường Ten có kiểu Character và độ dài nên khai báo là 7 (vì tên người Việtnam thường không qua 7 ký tự)

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 15

3. Trường ngày sinh cũng có thể khai báo Character v à có độ dài 6 (vì 2 chữ sốcho ngày, 2 cho tháng và 2 cho năm). Tuy v ậy trong VF còn có kiểu Date,chúng ta sẽ xét kỹ kiểu này ở phần sau.

4. Trường Toan, Ly, Hoa, Tong là trường số (Numeric) và vì cách cho điểmtuyển sinh thường là 2 chữ số phần nguyên, dấu phẩy thập phân và có thể haichữ số sau dấu phẩy, nghĩa là độ dài 5 và số chữ số sau dấu phẩy là 2.

5. Trường số báo danh (Sbd) có kiểu l à Character và độ dài tuỳ bạn, miễn là đủđể gán cho mỗi thí sinh một mã, không thí sinh nào giống nhau.

Trong DataBases có có các thành ph ần khác như: Local View, Remote View,Conections, Stored Procedures (chúng ta s ẽ tìm hiểu sau)

Free TablesTrong thành phần này chứa các bảng tự do (nằm ngoài DataBases - CSDL) QueriesDùng để truy vấn - tạo các Tables khác từ Tables nguồn, nghĩa l à sinh ra các tệpbảng từ những tệp bảng nguồn theo một số điều kiện n ào đóB. DocumentsTrong Documents có các thành phần như: Form, Reports và Labels. FormTrong Form chứa các tệp có hình ảnh Form. Thực chất Form là một cửa sổ dùngđể dặt các điều khiển lên trên nó. Nếu bạn chọn Form và chọn New sau đó chọnNew Form ta có hình sau:

Ta có thể đặt các điều khiển lên Form bằng cách:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 16

1. Chọn View/Form Controls Toolbars, sau đó ta có hộp đi ều khiển sau:

2. Kích nút lệnh, đưa trỏ chuột vào Form, rê ta được nút lệnh như hình sau:

Dùng nút lệnh cũng như các điều khiển khác để làm gì chúng ta sẽ có mộtchương nói về điều đó. Reports (báo biểu)

Trong Reports chứa các tệp báo biểu có đuôi *.frx v à *.frm Labels (nhãn)

Trong Labels chứa các tệp nhãn (bạn sẽ tìm hiểu Reports và Labels sau).C. ClassesDùng để tạo mới hoặc nối kết các lớp v ào Project ManagerD. CodeTrong Code có Program, API Libraies và Applications Program

Nút lệnh

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 17

Trong Program chứa các chương trình. Giả sử bạn chọn Program, New sau đó ta

có cửa sổ chương trình hiện ra, cửa sổ này dùng để gõ các lệnh mã nguồn: API Libraies và ApplicationsHai thành phần này dùng để nối kết các thư viện API và các ứng dụng (*.DLL).E. OtherTrong Other có 3 thành phần: Menus, Text Files và Other Files MenusThành phần này dùng để tạo các tệp Menus (*.mnx) Text FilesDùng để tạo mmột tệp text hoặc nối kết một tệp text v ào Project Manager Other FilesDùng để nối kết vào Project Manager một tệp bất kỳ - có thể cả tệp đồ hoạ.Câu hỏi và bài tậpCâu 1: Project Manager là gì?A. Là một chương trìnhB. Là một tệp CSDLC. Là một công cụ chứa nhiều đối tượng giúp cho việc Quản trị CSDL dễ d àng

Câu 2: Nhóm Data trong Project Manager bao g ồm những công cụ nào?A. Công cụ DataBasesB. Công cụ Free TablesC. Công cụ QueriesD. Cả 3 công cụ trên

Câu 3: Để lần đến tên trường của một bảng trong DataBases ta thao tác thế n ào?A. Chọn DataBases /TablesB. Chọn DataBases /Tables/Tên tệp bảngC. Chọn DataBases /Nhóm Dữ liệu chứa bảng /Tables/T ên tệp bảngD. Chọn DataBases /Nhóm Dữ liệu chứa bảng /T ên tệp bảng

Câu 4: Nhóm Documents trong Project Manager bao g ồm những công cụ nào?

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 18

A. Công cụ FormsB. Công cụ ReportsC. Công cụ LabelsD. Cả 3 công cụ trên

Câu 5: Để tạo một cửa sổ Form mới ta làm thế nào?A. Chọn FormB. Chọn Form /NewC. Chọn Form /New/New FormD. Mở tệp Form đã có

Câu 6: Để đưa một điều khiển lên Form ta làm thế nào?A. Mở tệp chứa điều khiển đóB. Chọn điều khiển cần đưa lên Form, đưa trỏ chuột vào Form và rêC. Chọn điều khiển cần đưa lên Form, đưa trỏ chuột vào Form và kíchCâu 7: Trong một DataBases có thể được phép có bao nhiêu tệp bảng?A. Chỉ 1B. Hai tệp bảngC. Ba tệp bảngD. Có thể có nhiều tệp bảng

Câu 8: Để xoá một bảng trong DataBases ta l àm thế nào?A. Chọn tệp bảngB. Chọn tệp bảng /chọn RemoveC. Chọn tệp bảng /chọn Remove sau đ ó chọn DeleteD. Chọn Tables /Chọn tệp bảng /chọn Remove sau đó chọn DeleteE. Chọn Data /Thành phần dữ liệu /Tables/Chọn tệp bảng /chọn Remove sau đó

chọn Delete

Câu 9: Để đưa một tệp bảng vào Tables ta làm thế nàoA. Chọn Data /Thành phần dữ liệu /TablesB. Chọn Data /Thành phần dữ liệu /Tables/AddC. Chọn Data /Thành phần dữ liệu /Tables/Add/chọn tệp cần đ ưa vào /OK

Câu 10: Muốn hiển thị hộp chứa các điều khiển ta l àm thế nào?A. Tao một Form mới hoặc mở một tệp Form hộp điều khiển sẽ hiển raB. Chọn View /Form Controls ToolBarsC. Tao một Form mới hoặc mở một tệp Form sau đó chọn View /Form Controls

ToolBars

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 19

Chương 2: Các loại Dữ liệu trong VFTrong chương này để kiểm tra kết quả của các phép toán tr ên các kiểu dữ liệu,bạn dùng cửa sổ lệnh (Command). Để hiển thị cửa sổ bạn chọnWindow/Command Window, đồng thời dùng lệnh in (?),ví dụ gõ lệnh sau vàocửa sổ lệnhv: ?2+3 kết quả sẽ là 5 v.v..

2.1 Hằng và biến1. HằngTrong VF có các loại hằng sau: Hằng nguyênViết bình thường như trong toán họcV: 12, -23, 0, -234 v.v.. Hằng thựcDùng dấu chấm thay dấu phẩy thập phân:23.34, -7.25 v.v..Dùng Ký tự E:8.234E3= 8.234 x 103

0.21E-2=0.21 x 10-2

Hằng văn bảnĐược đặt trong dấu nháy kép hoăc đ ơn: "Tin học" hoặc 'Tin học' Hằng LogicĐúng .T. và sai .F. Hằng DateĐược bao trong { } và viết theo trật tự sau: yyyy/mm/dd{^1978/12/05}2. BiếnLà một vị trí trong bộ nhớ mà giá trị của nó có thể bị thay đổi trong khi chạychương trình. Biến được xác định qua tên. Tên biến được đặt như sau:Không được dài quá 254 kí tự, có thể dùng chữ cái, chữ số và dấu gạch dướiđể dặt tên biến nhưng không được bắt đầu bằng số, không được trùng với từkhoá trong VF.Ví dụ tên biến hợp lệ: x, y, DienTich, S1Tên biến không hợp lệ:-x, 2y,Dien tich, S 13. Các loại biếnTrong VF có 3 loại biến Biến bộ nhớDo người lập trình khai báo, có thể dùng chữ m. và sau là tên biến (không bắtbuộc). Ví dụ: m.DienTich, m.X, S1 Biến hệ thốngDo VF tự tạo ra khi khởi động, loại biến n ày bắt đầu bằng dấu gạch dưới, ví dụ:_Box, _Alignment

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 20

Biến vùng (tên không dài quá 10 ký tự)Là tên các vùng để mở tệp CSDL (sẽ nói sau)4. Gán giá trị cho biếnA=123 <Enter>(gán giá tr ị 123 cho biến A)Hoặc Store 123 To A <Enter>Có thể gán một giá trị cho nhiều biến:Store 2 To A, B, C<Enter>Ví dụ về làm việc với biến:A=12<Enter>B=20<Enter>S=A+B<Enter>?S<Enter>sẽ cho kết quả 32. Chúng ta sẽ nói kỹ biến trong phần lập tr ình.

2.2 Các phép toán số học trong VF1. Phép cộng: +Ví dụ: ?23+12 <Enter> sẽ cho kết quả 352. Phép trừ: - ?5-10 <Enter> sẽ cho kết quả -53. Phép nhân: *?2*4 <Enter> sẽ cho kết quả 84. Phép chia: /?4/3 <Enter> sẽ cho kết quả 1.335. Phép luỹ thừa: ** hoặc ^?2^3 <Enter> sẽ cho kết quả 86. Phép lấy số dư: %?5%3 <Enter> sẽ cho kết quả 2

2.3 Các phép toán Logic trong VFGiá trị của đại lượng kiểu logic có thể là .T. (đúng) hoặc .F. (sai)1. Phép phủ định: Not hoặc!?Not(2<3) <Enter> sẽ cho kết quả .F.2. Phép và: And ? (2<4) And (1<2) <Enter> cho kết quả .T. ? (2<4) And (1>2) <Enter> cho kết quả .F.Phép And chỉ đúng khi cả hai toán hạng đều đúng3. Phép hoặc: or? (2<4) or (1>2) <Enter> cho kết quả .T.? (2>4) or (1>2) <Enter> cho kết quả .F.? (2>4) or (1<2) <Enter> cho kết quả .T.? (2<4) or (1<2) <Enter> cho kết quả .T.Phép or chỉ sai khi cả hai toán hạng cùng sai

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 21

2.4 Các phép quan hệ trong VF1. Phép so sánh bằng: =?(1=2) <Enter> cho kết quả .F.2. Phép so sánh nhỏ hơn: <?(1<2) <Enter> cho kết quả .T.3. Phép so sánh lớn hơn: >?(1>2) <Enter> cho kết quả .F.4. Phép so sánh nhỏ hơn hoặc bằng: <=?(1<=2) <Enter> cho kết quả .T.5. Phép so sánh lớn hơn hoặc bằng: >=?(1>=2) <Enter> cho kết quả .F.6. Phép so sánh không bằng: <> hoặc # hoặc!=?(1#2) <Enter> cho kết quả .T.7. Phép thuộc dùng cho văn bản: $?("abc" $ "mnabcd") <Enter> cho k ết quả .T.?("123" $ "dfsabc") <Enter> cho kết quả .F.

2.5 Các phép toán về chuỗi ký tự trong VF1. Phép kết nối chuỗi: +?"abc"+"de" <Enter> cho kết quả là "abcde"2. Phép kết nối chuỗi: -Kết nối chuỗi nhưng bỏ khoảng trắng sau chuỗi thứ nhất?"abc "-"de" <Enter> cho kết quả là "abcde"Còn nếu dùng +?"abc "+"de" <Enter> cho kết quả là "abc de"

2.6 Kiểu dữ liệu CharacterKhi gặp phép gán: A="Tin học", ta hiểu ngay biến A có kiểu Character. Vậy kiểuCharacter là kiểu văn bản. Ta có thể dùng 3 phép toán +, -, $ (như đã nói ở trên)đối với dữ liệu kiểu Character, ví dụ:?"Tin "+"học" <Enter> cho ta kết quả "Tin học" v.v..2.6.1 Một số hàm đối với kiểu CharacterrĐể mô tả các hàm ta dùng cặp dấu [ ], những gì ở trong cặp đó là không bắtbuộc.1. Hàm ALLTRIM ()Hàm này loại bỏ các khoảng trắng trước và sau chuỗi văn bản. Ví dụ:A=" Tin "<Enter>B=" học "<Enter>?ALLTRIM(A)+ALLTRIM(B) <Enter> s ẽ cho kết quả: "Tinhọc "Ta cũng có thể viết gọn:?ALLT(A)+ALLT(B)2. Hàm ASC ()

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 22

Trả về mã ASCII của một ký tự:?ASC("A") <Enter> sẽ cho kết quả 65?ASC("B") <Enter> sẽ cho kết quả 663. Hàm AT ()Cú pháp: AT(chuỗi1, chuỗi2 [n])Trả về vị trí xuất hiện của chuỗi1 trong chuỗi2, ví dụ:A="an"<Enter>B="Hoan"<Enter>?AT(A,B) <Enter> sẽ cho kết quả 3vì chuỗi A xuất hiện bắt đầu từ vị trí thứ 3 trong chuỗi BCòn nếu:A="an" <Enter>B="an nhan"<Enter>?AT(a,b,2) <Enter> sẽ cho kết quả 6 (ở đây n =2 - lần xuất hiện thứ 2)3. Hàm BETWEEN ()Cú pháp:BETWEEN (a, b, c)Xem giá trị a có nằm trong khoảng từ b đến c hay không (tất nhiên b <c).Ví dụ:?BETW(3, 5, 9) <Enter> sẽ cho giá trị .F.?BETW(8, 5, 9) <Enter> sẽ cho giá trị .T.?BETW("c", "a", "n") <Enter> sẽ cho giá trị .T. vì ký tự c nằm trong khoảng từký tự a đến ký tự n.4.Hàm Chr ()Cho biết ký tự tương ứng với mã ASCII?Chr(65) <Enter> cho kết quả là ký tự A5. Hàm LEN ()Cho biết độ dài của chuỗi.A="Hoàng Xuân Hãn" <Enter>?Len(a) <Enter> sẽ cho kết quả 14 (có 14 ký tự tất cả, kể cả dấu cách)6. Hàm Lower ()Chuyển các ký tự chữ hoa sang chữ th ườngA=" CHAO"<Enter>?Lower(A) <Enter> sẽ cho kết quả "chao"7. Hàm UPPER ()Chuyển các ký tự chữ thường sang chữ hoaA=" chao"<Enter>?Upper(A) <Enter> sẽ cho kết quả "CHAO"8. LTRIM()Cắt các khoảng trắng phía trái của chuỗiA=" Tin học"<Enter>?LTRIM(a) <Enter> sẽ cho kết quả "Tin học"

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 23

9. RTRIM()Cắt các khoảng trắng phía phải của chuỗiA=" Tin học "<Enter>?RTRIM(a) <Enter> sẽ cho kết quả " Tin học"10. Hàm PROPER ()Chuyển các ký tự đầu của mỗi từ thành chữ hoaA=" TIN HOC QUAN LY" <Enter>?Proper(a) <Enter> cho kết quả "Tin Hoc Quan Ly"11. Hàm LEFT ()Cú pháp: LEFT(Xau, n)Cho kết quả n ký tự bên trái của chuỗia="Tin hoc" <Enter>?Left(a,2) <Enter> sẽ cho kết quả "Ti"12. Hàm RIGHT ()Cho kết quả n ký tự bên phải của chuỗia="Tin học" <Enter>?Right(a,2) <Enter> sẽ cho kết quả "ọc"13. Hàm Str ()Chuyển số thành văn bản?"Km '+str(12) <Enter> sẽ cho kết quả "Km 12", còn nếu viết:?"Km"+12 <Enter> sẽ báo lỗi vì văn bản không thể cộng với số được14. Hàm SUBSTR ()Cú pháp: SUSTR(Xau,m,n)Cho kết quả n ký tự trong Xau từ ký tự thứ ma="Chao anh" <Enter>?SubStr(a,2,3) <Enter> sẽ cho kết quả "hao"

2.7 Kiểu Date và Date Time1. Hàm Date ()Hàm Date ()cho biết ngàyc, tháng, năm hiện thời:?Date() <Enter> sẽ cho kết quả 7/28/012. Hàm Datetime ()Cho kết quả là ngày và giờ hiện thời?Datetime() <Enter> sẽ cho kết quả 7/28/01 08:12:56 AM3. Hàm CTOD ()Chuyển đổi biểu thức ký tự sang dạngh kiểu Date?CTOD("12/04/76") <Enter> sẽ cho dứ liệu kiểu Date 12/03/764. Hàm DTOC ()Chuyển đổi biểu thức kiểu ngày sang biểu thức kiểu Character?DTOC({^1967/11/07}) <Enter> s ẽ cho kết quả kiểu văn bản 12/11/67. Chú ý l àkiểu ngày được bao trong dấu { } và theo dạng {^YYYY-MM-DD}Ví dụ: ?{^2001-07-12}-{^2001-07-10} <Enter> sẽ cho kết quả 2

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 24

5. Hàm Day5 ()Trả về ngày lấy từ đại lượng Date?Day(Date()) <Enter> sẽ cho kết quả là 28 (vì ngày hiện thời là 7/28/016.Hàm Month ()Trả về tháng lấy từ đại lượng Date?Month(Date()) <Enter> sẽ cho kết quả là 7 (vì ngày hiện thời là 7/28/017. Hàm Year ()Trả về năm lấy từ đại lượng Date?Year(Date()) <Enter> sẽ cho kết quả là 2001 (vì năm hiện thời là 7/28/018. Hàm Cmonth ()Trả về tháng (bằng văn bản) lấy từ đại l ượng Date?Cmonth(Date()) <Enter> sẽ cho kết quả July (tháng 7)9. Hàm CDOW ()Trả về thứ trong tuần?CDOW(Date()) <Enter> sẽ cho kết quả Saturday (v ì ngày hiện thời là 28/07/01)?CDOW({^2001-07-27}) <Enter> sẽ cho kết quả FridayChú ý: Theo thói quen của người Việt nam trong cách viết ng ày là: dd-mm-yy,để đạt được trật tự đó bạn dùng lệnh:SET DATE FRENCH trước khi dùng dữ liệu DateVí dụ: Người Mỹ thường theo trật tự: mm-dd-yy:SET DATE AMERRICAN <Enter>?DATE() <Enter> sẽ cho kết quả 07-28-01 (tháng 7 ngày 28 năm 2001)SET DATE FRENCH <Enter>?DATE() <Enter> sẽ cho kết quả 28-07-01 (ngày 28 tháng 7 năm 2001)Bạn phải chú ý điều đó, nếu không sẽ có khi nhầm lẫn tai hại!

2.7 Dữ liệu kiểu Currency (tiền tệ)Currency dùng để biểu thị tiền tệ. Nó có khoảng rất lớn từ:-922.339.203.685.477, 5087 tới 922.337.203.685.477,5807Nghĩa là đến hàng trăm nghìn tỷ (đủ để biẻu diễn thu nhập các n ước lớn như Mỹ,nhật, v.v... Khi viết các số ứng với tiền tệ th ường có chữ phía trước hoặc sau, vídụ: 23.560.000 VND, 23.000 $ v.v.. sau đây l à một số nguyên tắc:1. Gán giá trị kiểu CurrencyĐể gán giá trị kiểu Currency cho biến ta đặt dấu đô la ($) phía trước sốp, ví dụ:Tien=$ 1000 <Enter>?Tien <Enter> sẽ cho kết quả 1000.0000 (tự động đặt 4 chữ số sau dấu chấmthập phân)2. Các lệnh SETDấu $ là ngầm định, mỗi nước có một ký hiệu khác, do đó phải đặt ký hiệu m àbạn cần, lệnh sau: SET CURRENCY TO "VND"<Enter>Tien=$1000 <Enter>

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 25

@10,1 Say Tien Function "$99,999.99" <Enter> s ẽ cho kết quả VND1000.0000Bạn sẽ hiểu lệnh in: @10,1 Say Tien Function "$99, 999.99" ở phần sau. C ònnếu bạn cần ký hiệu tiền tệ nằm b ên phải thi dùng lệnh: SET CURRENCY TO "VND"<Enter>Tien=$1000 <Enter>SET CURRENCY RIGHT<Enter>@10,1 Say Tien Function "$99,999.99"<Enter> s ẽ cho kết quả 1000.0000VND.Dấu tiền tệ đang nằm bên phải, nếu muốn chuyển sang trái, hãy dùng lệnh:SET CURRENCY LEFT<Enter>Muốn biết xem đang ở bên trái hay bên phải, ta dùng hàm:SET("CURRENCY"), ví dụSet Currency Left <Enter>?Set("Currency") <Enter> sẽ cho kết quả "Left"

2.7 Dữ liệu kiểu LogicNhư đã nói ở phần trên, dữ liệu này có hai giá trị là: .T. và .F. (đúng và sai). Khigán giá trị Logic hoặc biểu thức Logic cho biến, biến nhận 1 trong hai giá trịtrên, ví dụ:a=.T.<Enter>?a <Enter> sẽ cho kết quả .T.a=.F. <Enter>?a <Enter> sẽ cho kết quả .F.a=(5>9) <Enter>?a <Enter> sẽ cho kết quả .F.a=(1<2) and (3<9) <Enter>?a <Enter> sẽ cho giá trị .T.

2.8 Dữ liệu kiểu sốKiểu số trong VF bao gồm: Numeric, Double, Float v à Integer, khi khai báo kiểutrường trong Table (sẽ nói sau) ta n ên chọn cho thích hợp. Sau đây là một sốhàm xử lý dữ liệu kiểu số1. Hàm ABS ()Trả về trị tuyệt đối của một số.?ABS(-4) <Enter> sẽ cho kết quả 4a=10 <Enter>b=20 <Enter>?Abs(a-b) <Enter> sẽ cho kết quả 102. Hàm INT ()Trả về phần nguyên của một số?Int(3.34) <Enter> sẽ cho kết quả 3?Int(2.2*3) <Enter> sẽ cho kết quả 6Nghĩa là đối số có thể là một số hoặc một biểu thức.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 26

3.Hàm Max ()Trả về giá trị lớn nhất trong các đối số của h àm?Max(3,5,6,-5) <Enter> cho kết quả 6?Max('a','b','n') <Enter> cho kết quả 'n', vì mã của n lớn hơn mã của a và b4. Hàm Min ()Trả về giá trị nhỏ nhất trong các đối số của hám?Min(3,5,6,-5) <Enter> cho kết quả -5?Min('a','b','n') <Enter> cho kết quả 'a', vì mã của a nhỏ hơn mã của b và n5. Hàm Mod ()Trả về số dư của phép chia?Mod(6,4) <Enter> cho kết quả 2?Mod(6.1,3.2) <Enter> cho kết quả 2.96. Hàm Round ()Trả về giá trị sau khi đã làm trònCú pháp: Round(X,n).Trong đó X là số cần làm tròn, n là vị trí cần làm tròn ?Round(12.345, 2) <Enter> cho kết quả 12.35 (làm tròn vị trí thứ 2 sau dấu chấm thập phân) ?Round(12.343, 2) <Enter> cho kết quả 12.34(làm tròn vị trí thứ 2 sau dấu chấm thập phân) ?Round(12.343, 1) <Enter> cho kết quả 12.3(làm tròn vị trí thứ 1 sau dấu chấm thập phân) ?Round(12.343, 0) <Enter> cho kết quả 12(làm tròn vị trí hàng đơn vị của phần nguyên) ?Round(12.343, -1) <Enter> cho kết quả 10(làm tròn vị trí hàng chục của phần nguyên) ?Round(12.343, -2) <Enter> cho kết quả 0(làm tròn vị trí hàng trăm của phần nguyên)7. Hàm Val ()Biến đổi kiểu Character thành kiểu sốa='120' <Enter>b=Val(a) <Enter>?b+10 <Enter> sẽ cho kết quả 1308. Hàm SQRT ()Kết quả là căn bậc hai của một số dương.?Sqrt(9) <Enter> cho kết quả 39. Hàm EXP ()Trả về kết quả của exT ?Exp(1) <Enter> cho kết quả 2.72 ?Exp(0) <Enter> cho kết quả 1.00 ?Exp(2) <Enter>cho kết quả 7.3910. Hàm LOG ()

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 27

Đây là hàm logarit cơ số e.?Log(2.72) <Enter> cho kết quả 1?Log(1) <Enter> cho kết quả 0.00?Log(2) <Enter> cho kết quả 0.6911. Các hàm lượng giác?Sin(3.14) <Enter> cho kết quả 0.00?Cos(3.14) <Enter> cho kết quả -1.00 ?Tan(3.14) <Enter> cho kết quả 0.00

2.9 Dữ liệu kiểu GeneralKiểu dữ liệu General cho phép ta nhúng hay nối kết các đối t ượng dữ liệu vàoCSDL. Ví dụ ta có thể nhúng một bảng tính, một h ình ảnh dạng Gif, Tif, Jpg.Bạn sẽ hiểu điều này ở phần tạo lập CSDL

2.10 Dữ liệu kiểu MEMODùng để lưu trữ khối văn bản có kích thước lớn hơn 254 ký tự. Tệp dữ liệu chứavùng MEMO có tên trùng với tên của bảng nhưng phần đuôi là FPT. Bạn sẽhiểu kiểu MEMO ở phần tạo bảng

Bài tập chương 2:1. Có những loại hằng nào? cho ví dụ.2. Có những loại biến nào? cho ví dụ.3. Nêu quy tắc đặt tên biến.4. Cho ví vụ về phép gán.5. Có những phép toán số học nào? cho ví dụ.6. Có những phép toán văn bản nào? cho ví dụ.7. Có những phép toán Logic nào? cho ví dụ.8. Có những phép toán so sánh nào? cho ví dụ.9. Hãy dùng lệnh? và gõ biểu thức sau vào cửa sổ lệnh, xem máy báo kết quảnào:((1>2) or (3<7)) and (4<=9)10. Dùng cửa sổ lệnh để thực hiện các ví dụ trong phần 2.611. Dùng cửa sổ lệnh để thực hiện các ví dụ trong phần 2.712. Dùng cửa sổ lệnh để thực hiện các ví dụ tro ng phần 2.813. Dùng cửa sổ lệnh để thực hiện các ví dụ trong phần 2.914. Dùng cửa sổ lệnh để thực hiện các ví dụ trong phần 2.1015. Giả sử ta phải tính biểu thức:(sin4+cos6) (Log e12+e6), trong cửa sổ lệnh bạngõ như sau:a=sin(4) <Enter>b=cos(6) <Enter>c=log(12)<Enter>d=exp(6)<Enter>

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 28

s1=a+b<Enter>s2=c+d<Enter>Tich=s1*s2<Enter>?Tich<Enter>Đúng hay sai?16. Bạn chỉ cần lệnh? và cửa sổ lệnh, bạn có thể tính toán đ ược mọi công thức.Ví dụ bạn có thể giải phương trình bậc hai: 3x2+5x-7 bằng các thao tác sau:a=3<Enter>b=5<Enter>c=-7<Enter>Delta=b*b-4*a*c <Enter>x1=(-b+Sqrt(delta))/(2*a)<Enter>x2=(-b-Sqrt(Delta))/(2*a)<Enter>?x1<Enter>?x2<Enter>Bạn thử theo cách đó để giải một ph ương trình bậc hai khác.17. Theo cách của câu 16, bạn thử giải hệ phương trình bậc nhất hai ẩn18. hãy tính tổng lương của 20 nhân viên bằng cách dùng 4 biến:Bién a lưu tổng của 5 nhân viên đầuBiến b lưu tổng của 5 nhân viên tiến theov.v.. Hãy dùng phép gán để tính tổng lương của 20 nhân viên trên.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 29

Chương 3: Database và TableThuật ngữ Database (CSDL) và Table (bảng) là hai khái niệm không đồng nhấttrong VF. Database (tệp có dạng *.dbc) sẽ tham chiếu đến các quan hệ thông tinchứa đựng trong một hay nhiều Table (tệp có dạng *.dbf). Chúng ta tạm h ìnhdung là Database như là một "tổ chức" trong đó có nhiều "bộ phận" m à Table chỉlà một "bộ phận" trong đó. Cụ thể h ơn, Database dùng để tổ chức, thiết lập quanhệ giữa các Table và các thành phần khác trong đó, Database cung cấp cấu trúcdùng để lưu trữ dữ liệu, thiết lập các Procedure (thủ tục) để xử lý các mối quanhệ giữa các Table và các thành phần khác như View, Queries v.v..Chương nàychúng ta sẽ đề cấp đến một vấn đề cơ bản là: Tổ chức một Database và tạo dựngcác Table trong Database đó sao cho h ợp lý nhất về mặt xử lý thông tin.

3.1 Tổ chức một Database và các Table trong đóĐể thuận lợi cho việc mô tả nội dung, chúng ta đ ưa ra một ví dụ đơn giản về bàitoán xử lý dữ liệu Tuyển sinh khối A. Tất nhiên chúng ta chỉ đề cập một phầnnhỏ trong toàn bộ công việc xử lý dữ liệu tuyển sinh. Ngoài ra để dễ bề truy cập,ta quy ước là mọi tệp đều được lưu trong thư mục C:\ VF60 và tên các tệp nhưsau: Tên tệp Project : TuyenSinh.pjx Tên tệp Database: HoSo.dbc Tên hai tệp Table: HoSoKhoiA.dbf và DiemKhoiA.dbf Tạm hiểu một cách "nôm na" l à trong "tủ": TuyenSinh.pjx có "ngăn":HoSo.dbc và trong "ngăn": HoSo.dbc có hai "văn b ản": HoSoKhoiA.dbf vàDiemKhoiA.dbf.

Cũng cần phải nói thêm rằng, việc tổ chức một CSDL l à một vấn đề phảituân thủ theo một số quy tắc chặt chẽ trên nguyên lý của Đại số quan hệ. Nhưngở đây ta chỉ tổ chức theo "kinh nghiệm", v ì đây là giáo trình Tin học ứng dụngnhằm nhanh chóng giúp cho người học có công cụ để giải quyết ngay các côngviệc của mình. Nhưng cái "Kinh nghiệm" đó cũng đủ để giúp bạn giải quyếtđược những vấn đề mà bạn đang cần. Chúng ta sẽ tổ chức CSDL b ài bản hơnsau khi học xong phần lý thuyết CSDL quan hệ. Tuy nhi ên chúng ta cũng sẽ đềcập đến những nguyên tắc chung nhất để thiết kế một CSDL ở phần sau. nhưngtrước hết hãy làm quen đã. Để bạn hiểu cấu trúc của hai Table: HoSoKhoiA.dbf v à DiemKhoiA.dbf,bạn hãy hình dung như sau: Khi đăng ký dự thi bạn phải nạp một hồ sơ tuyểnsinh, nhân viên nhận hồ sơ sẽ căn cứ vào hồ sơ mà tạo một tệp HoSoKhoiA.dbfcó hình ảnh sau:HoDem | Ten | NgaySinh | SBD

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 30

Sau khi chấm điểm xong, nhân viên phòng máy tính lại tổ chức tệpDiemKhoiA.dbf, có dạng sau:SBD | Toan | Ly | Hoa | Tong| UuTien| KhuVucSau đây là trình tự để xây dựng CSDL trên.1. Tạo tệp dự án có tên TuyenSinh.pjx trong thư mục VF60 Khởi động VF, chọn File /New sau đó ta có hộp thoại:

Hãy chọn Project và chọn New file sau đó ta có hộp thoại Create sauH:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 31

Hãy chuyển đến thư mục C:\ VF6o và gõ tên tệp dự án là: TuyenSinh.pjxvà chọn Save.

Như vậy ta đã tạo ra được tệp dự án có tên TuyenSinh.pjx trong C:\VF60.2. Tạo tệp HoSo.dbcSau khi gõ tệp dự án (TuyenSinh.pjx) và chọn Save thì hộp thoại sau hiện ra:

Chọn Data /Databases/New, sau đó ta có hộp thoại:

Hãy chọn New Database (chưa nên chọn Database Wizard vội), sau đó tacó hộp thoại:

Hãy gõ tên tệp HoSo.dbc vào và chọn Save, sau đó ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 32

Đây là cửa sổ dùng để tạo các Table.3. Tạo tệp bảng HoSoKhoiA.dbf Đưa trỏ chuột vào cửa sổ trên (Database Designer- HoSo), ấn phím phải

chuột ta có:

Hãy chọn New Table ta có hộp thoại tiếp:

Chọn New Table và hộp thoại sau lại xuất hiện:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 33

Hãy gõ tệp HoSoKhoiA.dbf và chọn Save, hộp thoại sau hiện ra:

Đây là hộp thoại để chúng ta tạo tệp HoSoKh oiA.dbf. Cách tạo như sau: ? cột Name (tên trường) hãy gõ hodem Chuyển sang cột Type (kiểu trường) hãy xác nhận Character Chuyển sang cột Width (độ dài trường) chọn 15 Lại quay về cột Name, để tạo trường ten Lại quay về cột Name gõ vào ngaysinh Chuyển sang cột Type chọn Date Lại quay về cột Name gõ vao sbd

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 34

Chuyển sang cột Type chọn IntegerNhư vậy bạn đã tạo xong cấu trúc, nếu chọn OK và xác nhận Yes:

Hãy gõ họ và đệm vào dòng hodem, tên vào dòng ten v.v.. Sau khi đưa dữ liệu xong hãy kết thúc bằng việc gõ: Ctrl+W hoặc kíchvào nút Close (X), ta có hộp thoại:

Tiếp tục với tệp DiemKhoiA.dbf theo nh ư cách trên. Sau khi tổ chức xong ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 35

Như vậy ta đã xây dựng một tệp dự án chứa một tệp Da tabase (HoSo.dbc) vàhai tệp bảng (HoSoKhoiA.dbf và DiemKhoiA.dbf).

3.2 Làm việc với CSDLCSDL cung cấp một môi trường làm việc, ở đó ta có thể lưu trữ các bảng dữ liệu,thiết lập mối quan hệ giữa các bảng, thiết lập các quy tắc điều khiển các bảng dữliệu quan hệ, v.v..sau đây là trình tự một số thao tác cơ bản nhất3.2.1 Mở một CSDL đã cóĐể mở một CSDL đã có, hãy thực hiên các bước sau: Mở tệp dự án (giả sử tệp bạn vừa mới tạo l à:TuyenSinh.pjx) Trong Project Manager chọn CSDL muốn mở (giả sử chọn HoSo.dbc) Chọn ModifySau đó CSDL hiện ra như sau:

3.2.2 Sắp xếp các bảng trong CSDLNếu có nhiều bảng trong một CSDL, ta n ên sắp xếp theo một trật tự nào đó, vídụ theo By Name, By Type, Horizontally, Vertically . Thao tác như sau:

Chọn Menu Database/Arrange/chọn loại cần xắp xếp

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 36

3.2.3 Thiết lập mối quan hệ giữa các TableGiả sử với hai bảng HoSoKhoiA.dbf v à DiemKhoiA.dbf ở trênG, nếu cần biếtthông tin về một thí sinh bao gồm Hodem, ten, ngaysinh, sbd, toan, ly, hoa v àtong thì làm thế nào?. Rõ ràng ta phải căn cứ vào một sbd của tệpHoSoKhoiA.dbf đối chiếu với sbd tương ứng trong tệp DiemKhoiA.dbf để lấythông tin ra. Trường sbd là duy nhất, nghĩa là Họ tên, ngày sinh v.v.. có thể trùngnhau nhưng sbd thì không trùng nhau. Ta gọi trường sbd là trường khoá. Ta nóirằng hai tệp trên có mối quan hệ thông qua trường khoá này. Nhờ trường sbd màtuy hai tệp độc lập nhưng lại là một. Với Database Designer cho phép ta đặt mối quan hệ giữa chúng để xử lýhai bảng đó dễ dàng. Cách tiến hành đặt mối quan hệ như sau:1. Sắp xếp trường Sbd của tệp HoSoKhoiA.dbf bằng Index Mở tệp dự án TuyenSinh.pjx, chọn HoSo, chọn tệp HoSoKhoiA.dbf,

chọn Modify sau đó chọn Indexes ta có h ình sau:

Gõ tên tệp chỉ mục ở cột Name (giả sử gõ IndexSbd), Type là Primary(khoá chính), Expression là Sbd như h ình sau:

Chọn OKC, như vậy ta đã sắp xếp tệp HoSoKhoiA.dbf tăng dần theo tr ườngsbd.2. Thiết lập mối quan hệ Mở CSDL HoSo:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 37

Đưa trỏ chuột vào trường Khoá (indexsbd) kéo sang trường Indexsbd củatệp DiemKhoiA.dbf. Như vậy hai trường Sbd đã được đặt mối quan hệ. Quanhệ này là bền chặt, nếu ta không khử quan hệ đó đi.

3.2.6 Xoá mối quan hệ giữa các Table Kích vào đường quan hệ giữa hai bảng dữ liệu, sau khi kích, đ ường sẽ

đậm và to lên. Gõ vào phím Delete

3.3 Một số thao tác trong cửa sổ lệnh (Command)Ngoài các thao tác bằng hộp thoại (giao diện qua cửa sổ), chúng ta c òn có cácthao tác qua lệnh. Bạn hãy mở cửa sổ Command bằng cách: Chọn Window / Command Window, sau đó ta có hình ảnh:

3.3.1 Mở và sửa một CSDLTừ cửa sổ lệnh bạn gõ:Open Database C:\VF60\HoSo.dbc <Enter>Modify Database <Enter>Sau đó bạn có thể đưa trỏ chuột vào bảng, kích phím phải chuột để chọn:1. Sửa cấu trúc, hãy chọn: Modify2. Hiển thị dữ liệu chọn: Browse3. Xoá bảng chọn: Deletev.v..Chúng ta cũng có thể:Open Database C:\VF60\HoSo <Enter>use? <Enter>

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 38

Sau đó ta có hộp thoại:

Chọn một têp, giả sử chọn tệp HoSoKhoiA.dbf và chọn OKNghĩa là tệp HoSoKhoiA.dbf đã được mở và sau đây là cách dùng một số lệnh.1. Lệnh BrowseLệnh này dùng để hiển thị dữ liệu bảng và đồng thời sửa nội dung của bảng. Hiển thị toàn bộ bảng:Browse <Enter>

Hiển thị một số trường

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 39

Browse Field Hodem, ten <Enter>

Hiển thị có điều kiệnBrowse for sbd>=6 <Enter> (những bản ghi có sbd lớn hơn hoặc bằng 6n)

Hiển thị theo Font chữ và cỡ chữ xác định:Browse font ".vnTime", 16 <Enter>

Browse là một lệnh rất mạnh, bạn có thể kết hợp nhiều yếu tố, ví dụ:Browse Field Hodem, ten, ngaysinh For Year(ngaysinh)=1982 <Enter>Chỉ hiển thị những bản ghi có năm sinh bằng 1982, v.v..

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 40

2. Lệnh EDITLệnh Edit có cú pháp như lệnh Browse, như hiển thị theo cột, ví dụ:Edit for year(ngaysinh)=1982 <Enter>

3. Lệnh AppendDùng để nối thêm các bản ghi vào sau bảng:Append <Enter>Phía sau bảng hiện ra, bạn gõ dữ liệu vào, gõ xong hãy ấn tổ hợp: Ctrl + W4. Lệnh Modify StructureDùng để sửa cấu trúc bảngD, ví dụ:Modify Structure <Enter>Sau đó cấu trúc bảng hiện ra, bạn có thể sửa t ên trường, kiểu trường, độ dàitrường v.v..nếu bạn muốn.5. Xoá bản ghi Xoá bản ghi thư n (n=1,2,3,..)Go 4 <Enter>Delete <Enter> (đánh dấu bản ghi thứ 4)Pack <Enter> (xoá bản ghi thứ 4)Như vậy bản ghi thứ 4 bị xoá Xoá k bản ghi từ bản ghi thứ mGo 2 <Enter>Delete next 3 <Enter>Pack <Enter>Như vậy xoá 3 bản ghi: 2,3,4 Xoá từ bản ghi thứ n đến cuối tệpGo 7 <Enter>Delete Rest <Enter>Pack <Enter>6. Phục hồi bản ghi đã bị đánh dấu xoáGo 3 <Enter>Delete next 4 <Enter>Recall all <Enter> (4 bản ghi đã bị đánh dấu, nhưng ta lại không muốn xoá nênphục hồi bằng lệnh Recall all)Chú ý: Bản ghi khi bị đánh dấu (delete), có vệt đen ở phía đầu, khi d ùng Browse

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 41

7. Đếm số bản ghi Đếm xem có bao nhiêu bản ghiCount all <Enter> Đếm có điều kiệnCount for Year(ngaysinh)=1982 <Enter> Đếm có lưuCount for sbd>=2 To A <Enter>?A <Enter>biến A được lưu kết quả.8. Tính tổng trườngVí dụ ta có bảng với các trường sau:Hoten, luong, conSum luong <Enter> (tính tổng cột luong)Sum luong to S <Enter>Sum luong for luong>=400000<Enter>v.v..9. Tính tổng trung bìnhAverage luong <Enter>Average luong for year(ngaysinh)=1980 <Enter>Average luong to X for year(ngaysinh)=1980 <Enter>v.v..10. Sắp xếp bằng lệnh SORT Xếp theo một trường nào đó tăng dần.Sort to TepMoi On sbd /ANhư vậy tệp TepMoi.dbf sẽ được xếp tăng dần theo sbd. Xếp theo một trường nào đó giảm dần.Sort to TepMoi On sbd /D11. Sắp xếp bằng lệnh IndexLệnh Index không sinh ra một tệp bảng mới, m à chỉ sinh ra một tệp chỉ mục, ghitrật tự tăng dần của các bản ghi, tệp n ày kích thức nhỏ, do đó trong nhiều trườnghợp người ta hay dùng lệnh này. Ví dụ:Index on sbd to sbdindex <Enter>Xếp theo trường Sbd, tệp chỉ mục là sbdindex.idx (duuoi là idx). Chúng ta có th ểsắp xếp theo một trường bất kỳ.12. Về đầu tệp, về cuối tệpGo Top <Enter> (đưa trỏ về đầu tệp)Go Bottom <Enter>(đưa trỏ về cuối tệp)13. chuyển dịch bản ghiSkip 1 <Enter> (tiến 1 bản ghi)Skip 3 <Enter> (tiến 3 bản ghi)Skip -1 <Enter>(lùi 1 bản ghi) v.v..

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 42

14. Chèn một bản ghi trốngGiả sử ta muốn chèn một bản ghi, để trở thành bản ghi thứ 3, hãy gõ:Go 3 <Enter>Insert before <Enter> (chèn trước bản ghi thứ 3)Sau đó bản ghi thứ 3 trống, bản ghi thứ 3 cũ trở thừnh bản ghi thứ 4, thứ 4 th ànhthứ 5, v.v.. hoặc có thể viết:Go 2 <Enter>Insert <Enter>(Chèn sau bản ghi thứ 2)15. Lệnh thay thế Thay đổi nội dung của 1 trườngReplace all Luong With Luong+Luong*0.15 <Enter>Nghĩa là tăng lương đồng loạt 15% Thay đổi nội dung của 1 trường có điều kiệnReplace all Luong With Luong+Luong*0.15 For Luong<=280000 <Enter>Nghĩa là chỉ tăng lương cho người có bậc lương thấp từ 280000đ trở xuống.3.3.2 Tạo bảng trong cửa sổ lệnh bằng lệnh CreateChúng ta cũng có thể tạo một bảng tự do bằng lệnh: Create <T ên bảng >, ví dụ:Create C:\VF60\NhanSu <Enter>Sau đó hộp thoại tạo cấu trúc hiện ra, h ãy gõ tên trường vào cột Name, khi gõxong cột Name, kích vào mũi tên của phần Type, ta có:

Hãy chọn một kiểu trường thich hợp.Chuyển sang phần độ dài (Width), có thể dùng chuột để kích vào mũi tên lênhoặc xuống, hoặc gõ số đo độ dài. Nếu là kiểu số bạn phải đặt số chữ số sau dấuchấm thập phân ở phần Decimal.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 43

Tiếp theo là phần Index, nếu bạn định sắp xếp theo tr ường này hãy kích vào mũitên và chọn Ascending (tăng dần) hoặc Descendin g (giảm dần), sau khi chọn mộttrong hai loại đó bạn thấy cột này có mũi tên như hình sau:

Bạn tiếp tục làm như vậy cho đến khi hết các trường và chuyển sang giai đoạnnhập dữ liệu bình thường như đã nói ở phần trên.Bài tập chương 3:1.Cho bảng lương như sau:

Tên Field(Fieldname)

Kiểu dữ liệu(Type)

Độ dàiWidth

Giải thích tên Field

MNV Integer 4 Mã Nhân ViênHodem Character 20 Họ và tên đệm (lót)Ten Character 7 Tên nhân viênGT Logical 1 Giới tínhNS Date 8 Ngày sinhSoCon Integer 1 Số conBacLuong Numeric 9 Bậc lươngDiaChi Character 30 Địa chỉEMail Character 20 Hộp thư điện tửa. Hày tạo một tệp dự án có tên TinhLuong.pjx trong thư mục C:\VF60b. Hãy tạo một cấu trúc bảng như trên trong phần Database và gõ vào 10 nhânviên (nhân viên bạn tự đặt ra)c. Sau khi hoàn thiện bảng, bạn nhận thấy thiếu mất một tr ường PhuCap (phụcấp), đứng sau trường BacLuong, hãy chèn trường đó vào

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 44

d. Bạn thấy việc viết tên trường BacLuong, DiaChi là dài, bạn muốn sửa lại làBL, DC, hãy làm điều đóe. Hãy chữa lại kiểu của trường MNV là Characterf. Hãy tạo chỉ mục và đặt khoá chính cho trường MNVg. Hãy hiển thị bảng đó băng lệnh Browseh. Bạn thử đứng ở cửa sổ Command để thực thi các lệnh từ 1 đến 15 - ý tưởng xửlý do bạn đặt ra.2. Cho bảng sau:

Tên Field(Fieldname)

Kiểu dữ liệu(Type)

Độ dàiWidth

Giải thích tên Field

MNV Character 4 Mã Nhân ViênTDVH Character 10 Trình độ văn hoáNN Character 7 Ngoại ngữDangVien Logical 1 Đảng viên hoặc khôngDoanVien Logical 1 Đoàn viên hoặc khôngTuoiDang Integer 1 Tuổi đảngCV Character 20 Chức vụa. Hãy tạo tệp này vào trong Project của câu 1 ở phần Databaseb. Thiết lập mối quan hệ giữa hai trường MNV3. Bạn tự thiết kế một Project về việc quản lý th ư viện4. Cũng như câu hỏi 3, nhưng về quản lý lớp học của bạn

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 45

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 46

Chương 5: FORM, Report và Label5.1 Form là gì?Form là mộ t công cụ (hay cũ ng có thể gọ i là mộ t cử a sổ ) nhờ nó ta có thể thiế tkế các ý tư ở ng sau: Thiết kế giao diện để hiển thị thông tin Thiết kế giao diện để nhập dữ liệu v ào CSDL Đặt các đối tượng lên Form để đáp ứng lại các thao tác của ng ười dùng v.v..5.1.1 Thiết kế Form để vừa hiển thị, nhập hoặc sửa dữ liệu (ứngvới 1 bảng)1. Tạo bằng công cụ đồ thuật (Wizard)Wizard là một công cụ (đã lập trình sẵn) giúp chúng ta dễ dàng sản sinh ra mộtdạng Form theo một số chuẩn nào đó. Bạn tiến hành theo các bước sau: Trưng diện Project Manager, sau đó chọn Document, chọn Forms, chọn New,

trên hộp thoại New Form hãy chọn Form Wizard, sau đó hộp thoại WizardSelection hiện ra và chọn Form Wizard. Vì ta muốn giao diện ứng với mộtbảng, nên trong hộp thoại trên hãy chọn Form Wizard và chọn OK. Ta có hộpthoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 47

Chọn CSDL (HOSO), chọn bảng (HOSOKHOIA), chọn các tr ường mà bạncần ứng với bảng đã chọn, giả sử: Hodem, ten, ngaysinh, chuyển sangselected Fields, ta có hình ảnh sau:

Chọn Next >, sau đó ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 48

Hãy chọn một thành phần ở Style - giả sử ta chọn Embossed và một thànhphần ở Button Type - giả sử ta chọn Text buttons (nút có ghi văn bản tr ên đó),sau đó kích vào Next > ta có hộp thoại:

Đây là bước chọn một trường để sắp xếp theo Ascending hay Descending, giảsử ta chọn trường sbd, và Ascending, sau đó chọn Next >, ta có hộp thoạitiếp:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 49

Bạn hãy chọn: Save form for later use (Lưu Form vừa tạo không chạy thử) hoặcSave and run form (lưu Form và chạy thử) hoặc Save Form and modify it inForm Designer (lưu Form và chỉnh sửa Form trong Form Designer). v.v..(giả sử bạn chọn Save and Run Form), chọn Next > sau đó hộp thoại Save ashiện ra, hãy gõ tên tệp Form (*.Scx) và chọn Save ta có kết quả:

Bạn hãy sử dụng các nút (Text Button) để thực hiện một số việc:Top : Về đầu bảngPrev : Về bản ghi trướcNext : tiến 1 bản ghiBotton: Về cuôí bản ghiFind : Tim kiếm bản ghi có điều kiệnPrint : InAdd : Nói thêm bản ghiEdit : soạn hoặc sửa bản ghiDelete: Xoá bản ghiExit:Thoát5.1.2 Thiết kế Form ứng với nhiều bảng

Trưng diện Project Manager, chọn Document, chọn Form, chọn New, chọnForm Wizard, sau đó ta có hộp thoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 50

Chọn One -to-Many Form Wizard, sau đó hộp thoại hiện ra để bạn chọn bảng"cha" - giả sử bạn chọn bảng cha là HoSoKhoiA, và tải các trường Hodem,ten, ngaysinh sang bên phải như hình sau:

Tiếp theo bạn chọn Next > và chọn bảng có quan hệ (bảng con). Giả sử bạnchọn bảng DiemKhoiA và tải các trường sang phải như hình sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 51

Chọn Next >, ta có hộp thoại quan hệ:

Chọn Next >, sau đó chọn thành phần của Style và thành phần Button Type,chọn Next > sau đó chọn trường để sắp xếp (giả sử chọn trường sbd), lại chọnNext >, cuối cùng chọn Save and Run Form và chọn Finish, kết quả là:

Bạn thấy: Phần trên là Form cha và phần dưới là Form con.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 52

5.2 Report và LabelReport và Label cung cấp cho chúng ta một công cụ mềm dẻo để tr ình bày vàtóm tắt dữ liệu trong một văn bản khi in ra giấy.5.2.1 Tổ chức dạng ReportChúng ta có thể thiết kế Report, thể hiện dữ liệu ở nhiều dạng khác nhau khi inra giấy. Dùng Report Designer hay Report Wizard chúng ta có th ể thiết kế tạo racác dạng tóm tắt hoặc gom lại từ các nhóm dữ liệu đặc biệt.

1. Sử dụng Report Wizard để tạo Report ứng với 1 bảng Trong Project Manager chọn Document, chọn Report, chọn New, chọn

Report Wizard, ta có hình sau:

Để tạo Report từ một bảng ta chọn Report Wizard v à OK Chọn tệp HoSoKhoiA trong CSDL: HoSo v à chọn một số trường cần in đẩy

sang bên phải, như hộp thoại sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 53

Chọn Next >, ta có:

Đây là hộp thoại để bạn chọn Record nhóm, nh ưng chúng ta chưa làm nhóm, hãychọn Next >, ta có tiếp:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 54

Đến đây bạn chọn kiểu bố cục dữ liệu, giả sử bạn chọn Executive và chọnNext>, ta có:

Đây là giao diện in, bạn có thể chọn số cột (Number Columns), cột hay d òng ở(Field Layout ), hướng in (Orientation) và lại chọn Next >, ta có kết quả:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 55

Bạn hãy chọn một trường, nếu định sắp xếp, giả sử trường Ten và đưa qua phải,lại chọn Next >, ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 56

Đến đây bạn có thể chọn Preview để xem qua dạng của Report, nếu vừa ý hãychọn Finish và gõ tên tệp vào, thế là ta có một tệp Report trong Project. Bạn có thể chọn lại tệp Report vừa tạo v à chọn chức năng Modify ta có h ìnhsau:

Sau đây là một số thao tác chỉnh sửa: Định lại khoảng cách dòngĐưa trỏ chuột vào dòng Page Header và Detail, kéo để chỉnh lại khoảng cáchgiữa chúng.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 57

Định dạng lại Font và kích cỡ FontChọn trường, sau đó chọn Format /Font và định lại Font và kích cỡ Font Kích đúp vào "Page", gõ vào chữ Trang (nếu bạn muốn)5.2.2 Tạo LabelLabel là dạng Report đặc biệt, chúng được thiết lập trên một loại giấy nhãn cókích cỡ rất khác nhau, phục vụ cho những vấn đề rất khác nhau, ví dụ tạo địa chỉngười nhận để sau đó in ra và cắt dán vào bì thư, tạo giấy báo điểm thi đại họccho thí sinh, tạo thẻ dự thi cho thí sinh, tạo các nh ãn để cắt dán lên các bao bìv.v... Chúng ta có thể tạo Label nhanh chóng bằng Label Wizard hoặc bằng côngcụ Label Designer.1. Sử dụng công cụ Label WizardCông cụ này là cách dễ nhất để tạo Label, tao xong bạn có thể sửa nó bằng LabelDesigner. Để tạo một Label bằng Label Wizard, ta thao tác nh ư sau: Chọn Labels trong Project Manager Chọn nút New Chọn nút Label Wizard, sau đó ta có h ình sau:

Trên hộp thoại đó bạn chọn một CSDL v à một bảng để tạo Label , giả sử bạnchọn CSDL: HOSO và bảng là HOSOKHOIA, chọn Next >, ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 58

Hình trên, bạn đã chọn độ đo là Metric (mét) và chọn kích cỡ nhãn (Label) là:avery EAL04 3.7 cm x 8.9 cm 1 cột, chọn Next > ta có:

Đây là hộp thoại giúp bạn tạo h ình ảnh Label từ bảng. Giả sử ta tạo một Labelchỉ chứa 3 trường là: Hodem, Ten, sbd mỗi trường ngăn cách bởi dấu gạch (hoặcdấu cách) và Font ".vnTime, 12. Hãy thao tác như sau: Chuyển Hodem sang phải sau đó chọn dấu Space (kích v ào nút Space này) Chuyển Ten sang phải, kích vào dấu trừ

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 59

Chuyển sbd sang phải Chọn Font và đặt Font ".vnTime", kích cỡ 12 Chọn Next >, sau đó trên hộp thoại mới hãy chọn trường để sắp xếp, lại chọnNext > và trên hộp thoại cuối hãy chọn Finish, ở giáo diện Save as h ãy gõ tên tệpLabel vào và chọn OK.2. Sửa Label đã tạo Quay về Project Manager chọn tệp Label vừa tạo, chọn Modify ta có:

Khoảng cách từ Page Header đến Detail quá rộng, v à như thế sẽ có nhiềudòng trống trong khi in, do đó bạn phải kéo lại nh ư hình sau:

(Đưa trỏ chuột vào các Bands, ấn và rê).Bạn thử chọn Freview, ta có:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 60

Ta nhận thấy khoảng cách dòng chấp nhận được.Sau đây là một số thao tác khác cho Report v à Label. Trước hết hãy đưa ReportControls lên màn hình, bằng cách chọn: Chọn View /Report Controls Toolbar tacó:

a. Đưa một văn bản vào Report hoặc Label làm chức năng tiêu đề hay mộtchức năng khác.

Chọn Label (1), sau đó đưa trỏ chuột vào Report hoặc Label, kích vào nơi cầngõ văn bản, sau đó gõ văn bản vào, kích trỏ chuột vào một nơi nào đó để kếtthúc.

Gõ xong, hoặc đang gõ bạn có thể chọn Font và kích cỡ Font cho nó (chọnFormat /font)

Bạn cũng có thể đặt màu nền hoặc màu chữ quan hộp Color Palette (chọnView /Color Palette Toolbar)b. Chèn trường Chọn Field (2), Kích vào nơi cần chèn, sau đó ta có hộp thoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 61

Kích vào nút phải của hộp văn bản Expression (nốt ba chấm...), ta có:

Hãy chọn một trường: có thể là văn bản (String), toán (Math), Logical , ng ày(Date), các tên trường (fields) của bảng hoặc biến bộ nhớ (Variables).

c. Vẽ đường thẳng trong Report hoặc LabalChọn 3, đưa trỏ chuột vào Report hoặc Label, rê.d. Bao bằng một hình chữ nhậtChọn 4, đưa trỏ chuột vào một vị trí trong Report hoặc Label, r ê .e. Bao bằng một hình chữ nhật vát góc

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 62

Chọn 5 và thao tác như (4).f. Nhúng vào Report hoặc Label một đối tượng Kích vào 6, đưa trỏ chuột vào Report hoặc Label, kích chuột, sau đó ta có:

Giả sử bạn chọn File, kích vào nút ba chấm (...), sau đó giao diện chọn Filehiện ra: hãy chọn File cần chèn, chọn OK, ở giao diện cuối hãy chọn OK.

3.2.3 Ví dụ về tạo LabelGiả sử bạn tạo một Label có dạng sau:Bộ GD &ĐT Cộng hoà xã hội chủ nghĩa Việt namTrường ĐHQL &KD HN Độc lập - Tự do - Hạnh phúc

Thẻ dự thiHoten :Ngày sinh:Sbd :

Hà nội ngày 25/6/2001Chủ tịch HĐTS<Chữ ký điện tử đặt ở đây >

Ts. Lê Khắc Đoá

Nguồn dữ liệu là bảng HoSoKhoiA trong CSDL HoSo (nh ư các phần trên)

ảnh

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 63

Mở Project Manager, chọn Label, New, Label Wizard v à thao tác như đã nói ởtrên, cuối cùng ta có:

.Bạn hãy mở Preview, và thấy dạng như khi in ra.

Tất nhiên có bao nhiêu sbd thì có bấy nhiêu Label. Bạn nên cài đặt trang in để incho hợp lý.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 64

Bài tập chương 5:1. Hãy thao tác lại các cách tạo Report và Label2. Cho bảng DiemKhoiA trong CSDL HOSO. H ãy tạo một Report để in danhsách đỗ, bao gồm các trường SBD và Tong3. Cho hai bảng: HoSoKhoiA và DiemKhoiA có mối quan hệ qua SBD, hãy tạomột Report bao gồm các trường Hodem, ten, sbd, Tong (sắp xếp theo sbd tăngdần)4. Bạn hãy tự tạo ra một Report từ 2 bảng trong CSDL đó là: DiemKhoiA vàKvKhoiA - chúng liên quan qua số báo danh (sbd). Hãy tạo Report bao gồm:Sbd, kv, Dt, tong theo nhiều dạng Style khác nhau.5. Hãy tạo một Label để báo cho thí sinh đến thi, bao gồm: Hoten (họ t ên),ngaysinh (ngày sinh), sbd (số báo danh), phongthi (phòng thi), noithi (nơi thi),ngaythi (ngày thi) -bảng dữ liệu nguồn do bạn tự tạo.6. Tạo một Label, không cần bảng, mà chỉ đưa ảnh, số điện thoại của bạn và địachỉ của bạn.7. Bạn có 1000 gói hàng, mỗi gói hàng bao gồm: Người nhận, Địa chỉ. Bạn hãytạo một bảng có hai trường trên, sau đó tạo một Label để sau khi in ra th ì cắt vàdán vào gói hàng.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 65

Chương 6: Lập trình trong VFLập trình là viết một dãy các chỉ thị liên tiếp với nhau để thực hiện một tác vụnào đó. Ví dụ bạn muốn xem điểm thi trong bảng DiemKhoiA ứng với số báodanh 12. Nếu không biết lập trình bạn sẽ làm như sau: Mở Project Manager Chọn Data/Databases/HoSo/Tables/DiemKhoiA Chọn Browse Dịch chuyển để đến bản ghi có số báo danh 12Rõ ràng là rất lâu. Còn nếu lập trình bạn chỉ cần viết mấy lệnh sau:Use C:\vf60\DiemKhoiABrowse for sbd=12Sau khi chạy chương trình (chạy là thế nào ta sẽ nói sau) ta có kết quả:

Ví dụ khác như: Tăng điểm toán đồng loạt lên 20%, nếu làm thủ công bạn phảilấy nội dung của trường Toan nhân với 1.2 sau đó lại g õ vào trường Toan đúngvào vị trí đó, lại tiếp tục với số báo danh khác cho đến hết tệp. Thật l à mất thờigian! nhưng nếu lập trình bạn chỉ cần viết như sau:Use C:\vf60\DiemKhoiAReplace all Toan With Toan*1.2Replace Tong With Toan+Ly+HoaBrowse

ở lệnh trên: Replace all Toan With Toan*1.2 có nghĩa là nội dung của trườngToan (nội dung cũ) được tự động nhân với 1.2 sau đó lại để v ào trường Toan(nội dung mới), cứ làm thế cho toàn bộ bản ghi. Lệnh: Replace Tong WithToan+Ly+Hoa cũng tương tự. Mới chút ít thế thôi ta đã thấy lợi ích của việc lậptrình rồi! Chính vì vậy mà chúng ta không thể không đề cập đến việc lập tr ìnhtrong VF, cho dù có bạn còn quan niệm là không nên đưa phần lập trình vàochương trình Tin học ứng dụng (đại cương, văn phòng). Tuy nhiên cũng cần phảinói thêm rằng: "Lập trình ở đây là liệt kê các lệnh để tự động giải quyết mộtcông việc chứ chúng ta không đi sâu vào logic lập trình".

6.1 Làm quen với lập trình trong VF6.1.1 Tạo chương trình (hay gọi là soạn chương trình)Trở lại ví dụ "nho nhỏ" đã nói ở trên, làm thế nào để tạo ra chương trình đó. 1.Dùng Project Manager (ta gọi tắt là PM)

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 66

Trong PM chọn Code /Program/New, sau đó cửa sổ để soạn thảo ch ươngtrình hiện ra như sau:

Trong cửa sổ này hãy gõ vào nội dung:

Sau khi gõ xong hãy lưu nó bằng cách chọn File /Save và chọn thư mục C:\VF60 để lưu, giả sử với tên Vidu1.prg. Như vậy ta đã tạo được một chương trìnhcó tên Vidu1.prg (prg là viết tắt chữ program =prg)2. Dùng Menu File

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 67

Chọn File /New ta có:

Chọn Program/New File và một cửa sổ hiện ra để bạn soạn ch ương trình, saukhi soạn xong bạn cũng phải lưu nó như phần 1.3. Dùng cửa sổ lệnh (Command)Trong cửa sổ lệnhT, hãy gõ:Modify command C:\VF60\Vidu1.prg <Enter>, sau đó cửa sổ lệnh hiện ra. Gõxong bạn thoát về cửa sổ lệnh bằng việc g õ: Ctrl+W hoặc chọn File/Close.6.1.2 Chạy chương trìnhSau khi đã có chương trình ta phải tiến hành chạy nó.1. Nếu chương trình nằm trong PM Trong PM chọn Code / Program/Vidu1 Chọn RunChương trình sẽ chạy và cho ta kết quả (nếu chương trình không sai)2. Dùng Menu Chọn Menu Program /Do, sau đó ta có hộp thoại:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 68

Chọn tệp Vidu1.prg và chọn Do3. Dùng cửa sổ lệnh Chuyển về cửa sổ lệnh Gõ: Do C:\VF60\Vidu1 <Enter>6.1.3 Sửa chương trìnhKhi chạy chương trình, nếu máy báo lỗi ta phải tiến hành sửa chương trình (haycòn gọi là hiệu chỉnh chương trình).1. Nếu chương trình nằm trong PM Mở PM, chọn Program /Vidu1 Chọn Modify Sửa xong hãy đóng lại .2. Trong Menu File Chọn File /Open Chọn tệp chương trình cần sửa (giả sử tệp Vidu1) Sửa xong hãy đóng lại3. Trong cửa sổ lệnhGõ: Modify Command C:\VF60\ViDu1<Enter>Sau đó cửa sổ chứa chương trình có tên Vidu1 hiện ra, hãy tiến hành sửa, sửaxong hãy đóng lại.6.1.4 Ghi chú trong chương tr ìnhKhi đọc các lệnh trong chương trình, bạn có thể gặp khó khăn nếu không có lờichú thích. Lời chú thích máy sẽ bỏ qua, nh ưng với con người thì laị quan trọngbởi vì nhờ chú thích mà bạn biết được nội dung đó cái g ì?. Để ghi chú trong

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 69

chương trình, bạn có thể dùng: Note, * hoặc && đặt đằng trước câu ghi chú. Cụthể Note hoặc * đặt trên một dòng riêng biệt. && dặt phía sau câu lệnh. Ví dụ* Đây là chương trình xem điểm thi khi biết sbdUse C:\VF60\DiemKhoiA && Mở bảngBrowse For sbd=12 && Hiển thị bản ghi có số báo danh là 12Close all && lệnh đóng tất cả các bảng6.1.5 Hằng, biếnTrong chương trình có dùng đến biến và hằng. Bạn đã biết cách đặt tên biếnT,hằng và các loại dữ liệu trong chương 2, ở đây ta chỉ nói thêm về 2 vấn đề:1. Khởi tạo giá trị ban đầu cho biếnViệc gán giá trị ban đầu cho biến bao h àm ý nghĩa là "khai báo" kiểu của biến đóluôn, ví dụ: Kiểu Characteer A="Tin học"Hoặc Store "Tin học" To ABiến A có kiểu Character. Kiểu số (Numeric)X=120Store 120 To X Kiểu ngày (Date)D={^2001/11/23} (gán một giá trị xác định)y={} (gán để biến Y có kiểu Date) Kiểu LogicL=.T.hoặc L =.F.2. Các loại biếnNhư đã nói trong chương 2, có 3 loại biến: Biến nhớ, biến hệ thống và biếnvùng. Biến nhớ nên có ký tự m, một dấu chấm và sau đó là tên biến để khỏinhầm với biến khác (không bắt buộc). Ví dụ m.DienTích, m.Luong, v.v.. n ên đặttên biến có tính chất gợi nhớ, ví dụ bi ến nói về diện tích hình tròn:m.DienTich=Pi*BanKinh*BanKinhdễ hiểu hơn làd:m.D=p*R*RBiến vùng là biến quy định tên vùng khi mở bảngB, biến này không dài quá 10kí tự. Biến hệ thống có dấu gạch chân phía tr ước: _Box, v.v..Như vậy nếu bạnviết theo quy ước đó thì khi đọc một chương trình ta biết ngay là loại biến nào -Tuy điều này không bắt buộc, nhưng nếu bạn quen cách viết đó sẽ giúp bạn dễsửa lỗi trong chương trình.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 70

6.2 Một số lệnh về lập trình1. Vào ra dữ liệu Để vào một số từ bàn phím ta dùng lệnh sau:Input <Thông bao > To <biến>Ví dụ:Input "Hãy cho biết tuổi của bạn? " To TuoiGặp lệnh này máy hiện thông báo: "Hãy cho biết tuổi của bạn ? " và chờ để bạngõ tuổi của bạn. Giả sử bạn gõ 24 <Enter> thì giá tr ị số 24 được lưu trong biếncó tên là Tuoi Vào một văn bản từ bàn phím ta dùng lệnh sau:Accept <Thông báo > To <Biến>Ví dụ:Accept "Hãy gõ vào một câu kiều?" TO KieuGặp lệnh này máy hiện thông báo: "Hãy gõ vào một câu kiều ? " và chờ để bạngõ một câu Kiều. Giả sử bạn g?: " Kiều càng sắc sảo mặn mà" <Enter> thì giá trịvăn bản đó (câu Kiều vừa gõ) được lưu trong biến có tên là Kieu. Vào một ký tự từ bàn phím ta dùng lệnh sau:Wait <Thông báo > To <Biến>Ví dụ:Wait "Bạn gõ vào một ký tự?" To CGiả sử bạn gõ: Q <Enter> thì Ký tự Q được lưu trong biến có tên C.Còn nếu viết:Wait [<Thông báo >], thì khi bạn gõ một biến bất kỳ, máy sẽ vượt qua lệnh đóVí dụ:WaitWait "Gõ phím để tiếp tục!" Hiển thị nội dung của biến lên màn hìnhTa dùng? hoặc??Ví dụ:A=12?A && Xuống dòng rồi mới in nội dung của biến A?A?ATa có kết quả:121212Còn nếu:??A??A

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 71

??ATa có kết quả:12 12 12Ví dụ về lập trình:Nếu đứng trong cửa sổ lệnh hãy gõ:Modify Command C:\VF60\TongTrungBinh.prg <Enter>Sau khi gõ <Enter> máy chuyển sang cửa sổ chương trình. Trong cửa sổ này hãygõ các lệnh sau:Clear && Xoá màn hìnhInput "Cho biết tuổi của bạn?" To TConInput "Cho biết tuổi bố của bạn?" To TBoTuoitrungBinh=(Tcon+TBo)/2? "Tuổi trung bình là:",TuoiTrungBinh? "Chào bạn, hẹn gặp lại!"

Thoát khỏi cửa sổ chương trình, trong cửa sổ lệnh hãy gõ:Do C:\VF60\TuoitrungBinh <Enter>Và bạn gõ vào: 40 <Enter> 20 <Enter>Kết quả sẽ là:Tuổi trung bình làT: 30Chào bạnC, hẹn gặp lại!2. Lệnh điều kiệnLệnh này có hai dạng:Dạng 1:

IF <Diều kiện ><Các lệnh >

ENDIFHoạt động của lệnh này như sau:Nếu <Điều kiện > đúng th ì thực hiện <Các lệnh >Nếu <Điều kiện > sai th ì bỏ qua lệnh IFVí dụ: IF x>=3 x=x+1 ENDIFCó nghĩa nếu X lớn hơn hoặc bằng 3 thì tăng X thêm 1, nếu sai thì giữ nguyên XDạng 2:

IF <Điều kiện > <Các lệnh 1>ELSE <Các lệnh 2>

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 72

ENDIFNếu N<Điều kiện > đúng th ì thực hiện <Các lệnh 1> bỏ <Các lệnh 2>Nếu N<Điều kiện > sai th ì bỏ <Các lệnh 1> thực hiện <Các lệnh 2>Ví dụ:IF X>=3 x=x+1ELSE x=x+10ENDIFNghĩa là nếu x lớn hơn hoặc bằng 3 thì tăng X thêm 1, nếu không (nghĩa là nhỏhơn 3) thì tăng X thêm 10.Sau đây là một ví dụ mà các bạn ai cũng biết cách giải ở phổ thông, đó l à: Giảiphương trình bậc hai: ax2+bx+c=0, vơi a, b, c đưa vào qua bàn p hím.Chương trình như sau:Modify command C:\VF60\Ptb2 <Enter>Set Talk off && Tắt thông báo hoạt động lệnh, để tăng tốc độ xử lýSet Decimal to 5 && Đặt 5 chữ số sau dấu chấm thập phân*** Vào 3 số qua bàn phímInput "Vào a =" To aInput "Vào b =" To bInput "Vào c =" To c**Tính DeltaDelta=b*b-4*a*c**Dùng lệnh IF dạng 2IF Delta<0? "Phương trình vô nghiệm"ELSEX1=(-b+SQRT(Delta))/(2*a)X2=(-b-SQRT(Delta))/(2*a)**Dùng lệnh hiển thị dữ liệu?"X1=",X1?"X2=",X2Trở về cửa sổ lệnh gõ: Do C:\VF60\Ptb2 <Enter>, sau đó ta gõ:3 <Enter>5 <Enter>-9 <Enter>Kết quả máy hiện lên màn ảnh:X1=1.08876X2=-2.75542Chú ý: Ngầm định là 2 chữ số sau dấu chấm thập phân, khi chúng ta đặt 5, vậyđộ chính xác vlà 5 chữ số sau dấu chấm thập phân.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 73

3. Lệnh chọn3Lệnh IF chỉ chọn một nhánh trong 2 nhánh, nếu có nhiều nhánh th ì chúng tacũng có thể dùng lệnh IF, nhưng tốt hơn nên dùng lệnh CASE.Giả sử có bài toán sau: Vào tuổi của bạn:Nếu Tuoi <15 thì hiển thị: Bạn chưa đến tuổi thanh niênNếu Tuoi <=30 and Tuoi>=15 th ì hiển thị: Bạn là thanh niênNếu Tuoi >30 thì hiển thị: Bạn hết tuổi thanh niênTa có đoạn mã với lệnh IF như sau:

IF Tuoi < 15? " Bạn chưa phải là thanh niên "ENDIFInput "Vào tuổi của bạn?" To TuoiIF Tuoi < 15 ? " Bạn chưa phải là thanh niên "ELSE IF Tuoi < =30 ? " Bạn là thanh niên "

ELSE ? " Bạn hết tuổi thanh niên "

ENDIFENDIFNhưng nếu ta dùng lệnh DO CASE thì có vẻ dễ hiểu hơn.Đoạn mã với lệnh DO CASE như sau:

Input "Vào tuổi của bạn?" To TuoiDO CASE

CASE Tuoi<15 ? " Bạn chưa phải là thanh niên "

CASE Tuoi <=30 ? " Bạn là thanh niên "

CASE Tuoi >30 ? " Bạn hết tuổi thanh niên rồi "ENDCASE

Tổng quát lệnh DO CASE như sau:Dạng 1: DO CASE

CASE < ĐK1 >Nhóm lệnh 1

CASE <ĐK2><Nhóm lệnh 2>

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 74

......

......

......CASE <ĐKn>

<Nhóm lệnh n >ENDCASE

Nếu <ĐKi> đúng thì thực hiện <Nhóm lệnh i > và ra khỏi lệnh DO CASENếu không có một <ĐKi> nào đúng, thì ra khỏi DO CASE mà không thực hiệnmột <nhóm lênh i > nào cả.Dạng 2: DO CASE

CASE < ĐK1 >Nhóm lệnh 1

CASE <ĐK2><Nhóm lệnh 2>

......

......CASE <ĐKn>

<Nhóm lệnh n >OTHERWISE<Nhóm lệnh n +1>

ENDCASENếu các <ĐK1>, <ĐK2>,...<ĐKn> đều sai th ì thực hiện <ĐKn+1>Sau đây là một ví dụ về xem lịch học trong tuần:Set talk offSet date FrenchClearInput "Bạn hỏi thứ mấy?" To ThuDo Case

Case Thu=2? " Toán, Lý, Tin"

Case Thu=3? " Toán, Anh, Văn"

Case Thu=4? " Địa, Nhạc, Sử"

Case Thu=5? " Văn, Văn, Hoá"

Case Thu=6? " Địa, Chính trị, Nhạc"

Case Thu=7? " Toán, Lý, Tin"

Case Thu=8

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 75

? " Chủ nhật nghỉ "OtherWise

? "Làm gì có th?:", Thu? "Bạn đã gõ sai!"

EndCase

Ta cũng có thể lập trình cho bài toán giải phương trình bậc hai bằng DO CASEnhư sau:Set Talk off && Tắt thông báo hoạt động lệnh, để tăng tốc độ xử lýSet Decimal to 5 && Đặt thêm 5 chữ số sau dấu chấm thập phân*** Vào 3 số qua bàn phímInput "Vào a =" To aInput "Vào b =" To bInput "Vào c =" To c**Tính DeltaDelta=b*b-4*a*c Do Case

Case Delta<0? "Phương trình vô nghiệm"

Case Delta=0X=-b/(2*a) ?"X=",X

Case Delta>0X1=(-b+SQRT(Delta))/(2*a)X2=(-b-SQRT(Delta))/(2*a)**Dùng lệnh hiển thị dữ liệu?"X1=",X1?"X2=",X2

EndCase4. Lệnh lặp ForGiả sử bạn phải tính tổng s =1+3+5+...+1001. Cách tính nh ư sau:a. Có một biến nhớ tên S, khi chưa tính ta gán S =0.b. Có một biến nhớ tên i, ban đầu ta gán i =1.c. Lấy nội dung của S (hiện tại S =0) cộng với nội dung của biến i (hiện tai i =1),kết quả để ở S (S bây giờ bằng 1)d. Tăng biến i thêm 2 (bây giờ i =3), lại quay về bước c, cứ như thế cho đến khi i>1001 thì dừng; khi dừng S là tổng cuối cùng. Quá trình đó được mô tả bằng một"đoạn văn" trong VF như sau:S=0For i=1 To 1001 Step 2 && Từ i =1 đến 1001 bước 2S=S+iEndFor

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 76

Hoạt động của lệnh For giống như cách tính trên, nghĩa là:Bước 1: i=1Bước 2: Tính S: S=S+1Bước 3: Tăng I: I=I+2Bước 4: Nếu I <=1001 th ì thưc hiện Bước 2, nếu lớn hơn 1001 thì ra khỏi ForChú ý: Nếu bước bằng 1 thì có thể không viết Step 1 cũng được.Để tính tổng trên la lập trình hoàn chỉnh như sau:Set Talk OffS=0For i=1 To 1001 Step 2S=S+iEndFor?"S=",STổng quát:FOR <Biến>=<Giá trị đầu > TO <Giá trị cuối > STEP <Bước ><Các câu lệnh >ENDFORVí dụ 1V: Như bạn đã biết, trong C:\ VF60 ta có bảng DiemKhoiA.dbf. Hãydùng lệnh FOR để hiển thị Sbd và Tong bằng lệnh ?Chương trình có dạng như sau:Set Talk offUse C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiACount to n && đếm xem có bao nhiêu bản ghi, lưu vào biến nFor i=1 to n && Lệnh FORGo i && chuyển con trỏ bản ghi đến bản ghi thứ i?"Sbd=", Sbd && Hiển thị văn bản "Sbd =" và nội dung của trường Sbd?"Tong=",Tong && Hiển thị văn bản "Tong =" và nội dung của trường TongWait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phímClear && Xoá màn hìnhEndforVí dụ 2: Trong C:\ VF60 có hai bảng HoSoKhoiA và DiemKHoiA, hãy lập trìnhđể hiển thị (bằng lệnh? và??) từng thí sinh với các trường sau:Hodem, ten, NgaySinh, Sbd, Toan, Ly, Hoa, Tong.Như bạn đã biết hai tệp này có quan hệ 1: 1 nghĩa là một bản ghi của tệpHoSoKhoiA chỉ có một bản ghi tương ứng của tệp DiemKhoiA (thông qua sbd).Để dễ theo dõi ta giả thiết hai tệp trên có số bản ghi bằng nhau. Để lập trình cho bài toán này, ta mở hai tệp đó ở hai vùng: vùng 1 cho tệpHoSoKhoiA, vùng 2 cho tệp DiemKhoiA bằng cách:Select 1 && Chọn vùng 1Use C:\VF60\HoSoKhoiASelect 2 && Chọn vùng 2Use C:\VF60\DiemKhoiA

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 77

Về sau ta chỉ cần chọn: Select 1 th ì làm việc ngay với tệp HoSoKhoiA mà khôngcần mở lại, v.v..Chương trình như sau:Select 1Use C:\VF60\HoSoKhoiAIndex On Sbd To IndexHS && Xếp tăng dần theo Sbd bằng lệnh IndexSelect 2Use C:\VF60\DiemKhoiAIndex On Sbd To IndexDi && Xếp tăng dần theo Sbd bằng lệnh IndexCount To nFor i=1 To nSelect 1 && Về tệp HoSoKhoiAGo i?Hodem, ten, ngaysinh,sbdSelect 2 && Về tệp DiemKhoiAGo i??Toan, Ly, Hoa, TongEndFor5. Lênh lặp DO WHILELệnh này có dạng như sau:DO WHILE <Điều kiện ><Các lệnh >ENDDOHoạt động của lệnh này như sau:Chừng nào mà <Điều kiện > còn đúng thì thực hiện <các lệnh >, còn <Điều kiện> sai thì ra khỏi lệnh DO WHILE. Ví dụ trên có thể viết bằng lênhụ DO WHILEnhư sau:Set Talk offUse C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiACount to n && đếm xem có bao nhiêu bản ghi, lưu vào biến ni=1Do While i<=n && Lệnh Do WhileGo i && chuyển con trỏ bản ghi đến bản ghi thứ i?"Sbd=", Sbd && Hiển thị văn bản "Sbd =" và nội dung của trường Sbd?"Tong=",Tong && Hiển thị văn bản "Tong =" và nội dung của trường TongWait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phímClear && Xoá màn hìnhI=I+1 &&Tăng i thêm 1EndDoNếu bạn quên lệnh IN =I+1 thì lệnh DO WHILE trên sẽ lặp vô hạn lần.Chú ý: Khi dùng lệnh DO WHILE để xử lý các bảng ta nên dùng hàm EOF (),EOF=End Of File (kết thúc tệp) cùng với SKIP để dịch chuyển bản ghi. H àm

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 78

EOF ()cho gía trị .T. nếu con trỏ bản ghi đã chỉ cuối tệpc, nếu con trỏ bản ghichưa chỉ cuối tệp thì EOF ()=.F.Ví dụ trên có thể viết như sau:Set Talk offUse C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiADo While NOT EOF() && Lệnh Do While?"Sbd=", Sbd && Hiển thị văn bản "Sbd =" và nội dung của trường Sbd?"Tong=",Tong && Hiển thị văn bản "Tong =" và nội dung của trường TongWait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phímClear && Xoá màn hìnhSkip &&Dịch tiến 1 bản ghiEndDo

Ví dụ ứng với hai tệp trên, ta viết lại như sau:Select 1Use C:\VF60\HoSoKhoiAIndex On Sbd To IndexHS && Xếp tăng dần theo Sbd bằng lệnh IndexSelect 2Use C:\VF60\DiemKhoiAIndex On Sbd To IndexDi && Xếp tăng dần theo Sbd bằng lệnh IndexDo While Not Eof()Select 1 && Về tệp HoSoKhoiA?Hodem, ten, ngaysinh,sbdSkipSelect 2 && Về tệp DiemKhoiA??Toan, Ly, Hoa, TongSkipEndDo6. Duyệt dữ liệu bằng vòng lặp SCAN....ENDSCANLệnh này tự động duyệt dữ liệu từ Record đầu cho đến Record cuối. Cú phápnhư sauL:SCAN [<Phạm vi >][FOR /WHILE <Điều kiện >]<các lệnh >[LOOP][EXIT]ENDSCANSau đây là một sí ví dụ:

Ví dụ 1: Hiển thị SBD, Tong từ bản ghi thứ 3 đến bản ghi thứ 10Use C:\VF60\DiemKhoiAGo 3Scan Next 8 && duyệt 8 bản ghi từ bản ghi thứ 3

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 79

?sbd, tongEndScan

Ví dụ 2: Duyệt từ bản ghi thứ 8 đến hết tệpUse C:\VF60\DiemKhoiAGo 8Scan Rest && duyệt từ bản ghi thứ 8 đến hết tệp?sbd, tongEndScan

Ví dụ 3: Duyệt những bản ghi chẵnUse C:\VF60\DiemKhoiAScan For Mod(Recno(),2)=0 && Recno()là hàm cho giá tr ị bản ghi hiện thờil?sbd, tongEndScan

Ví dụ 4: Duyệt, chừng nào gặp Tong >20 thì dừngUse C:\VF60\DiemKhoiAScan While Tong<=20?sbd, tongEndScan

Ví dụ 5: Duyệt, chừng nào gặp số thứ tự bản ghi chia hết cho 3 th ì thoátUse C:\VF60\DiemKhoiAScanIf Mod(Recno(),3)=0ExitEndIf?sbd, tongEndScan

Ví dụ 6: Duyệt, chừng nào gặp số thứ tự bản ghi chẵn th ì bỏ không inUse C:\VF60\DiemKhoiAScanIf Mod(Recno(),3)=0LoopEndIf?sbd, tongEndScan

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 80

6.3 Lập trình cấu trúcKhi gặp một bài toán A ta thường chia bài toán đó thành những bài toán nhỏ: A1,A2, A3,... và tìm cách lập trình với các bài toán Ai đó. Về cơ bản là lập trình dễhơn so với bài toán A, cuối cùng bố cục thế nào đó để việc giải bài toán A hoànthành. Cung cách "chia để trị" này thường được áp dụng trong lập tr ình màngười ta thường gọi một cái tên "mỹ miều" là lập trình cấu trúc. Chúng ta khôngphân tích sâu về lập trình cấu trúc làm gì, mà chỉ đưa ra tư tưởng của nó để bạncó một cái nhìn sơ bộ và phần nào ứng dụng trong khi thiết kế các ch ương trìnhtrong phạm vi tin học ứng dụng mà thôi. Chúng ta vừa nói là lập trình cho các Ai, vậy thực chất là lập trình như thếnào? Thường thì các Ai ứng với một Modul gọi là một chương trình con, để dễhiểu ta trình bày thông qua một ví dụ. Giả sử bạn phải tính biểu thức:S=(12+22+32+...+1002) (13+23+33+..+1003)Ta dùng cách "chia để trị" như sau:S=A1 x A2 với A1 =(12+22+32+...+1002), A2=(13+23+33+..+1003). Như vậy tachia bài toán trên thành hai bài toán con, m ỗi bài toán con đó có nên chia nh ỏnữa hay không là tuỳ bạn và tuỳ ở chỗ có chia được nữa hay không và có nênchia nhỏ nữa hay không. Ta cứ coi như chia thành hai đã. Bây giờ ta gọi chươngtrình con thứ nhất để tính A1 là Tong1 và chương trình con để tính A2 là Tong2.Bạn xem chương trình sau:Set Talk offS1=0 && Khai báo S1 là số và ở vị trí toàn cụcS2=0 && Khai báo S2 là số và ở vị trí toàn cụcDo Tong1 && Chạy chương trình con có tên Tong1Do Tong2 && Chạy chương trình con có tên Tong2S=S1*S2?"S=",S**** Chương trình con có tên Tong1Procedure Tong1For i=1 To 100S1=S1+i*iEndForEndProcedure**** Chương trình con có tên Tong2Procedure Tong2For i=1 To 100S2=S2+i*i*iEndForEndProcedure

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 81

Khi chạy bạn có kết quả: S=8.628.770.875.000 (tám nghìn sáu trăm hai tám tỷ,bảy trăm bảy mươi triệu, tám trăm bảy lăm ngh ìn)- bạn cứ tưởng tượng nếu tínhbằng thủ công thì mất bao lâu đây !.Chúng ta trở lại chương trình trên. Đoạn mã sau:Procedure Tong1For i=1 To 100S1=S1+i*iEndForEndProcedureDùng để giải bài toán A1, trong đó có sử dùng biến S1 và i. S1 đã khai báo ở đầu(ngoài thủ tục này) nên gọi là biến toàn cục. Biến toàn cục có ý nghĩa trong toànbộ chương trình, nghĩa là thủ tục nào cũng dùng được. Còn biến i nằm trongTong1 gọi là biến cục bộ, biến cục bộ chỉ có ý nghĩa trong Tong1 m à thội, nghĩalà ở ngoài thủ tục đó không dùng được. Khi hoàn thành thủ tục thì biến i bị xoángay. Với Tong2 cũng tương tự.Lệnh: Do Tong1Có nghĩa là chạy thủ tục Tong1, nhờ chạy Tong1 mà ta thu về kết quả nằm trongbiến S1. Sau khi chạy xong l ại quay về lệnh nằm sau Do Tong1 , nghĩa là gặp DoTong2, sau khi Tong2 hoàn thành ta thu đư ợc S2. Sau đó lại quay về lệnh đứngsau Do tong2 và gặp lệnh S =S1*S2 v.v..Cơ chế hoạt động là như vậy!. Tổngquát, một thủ tục có dạng:PROCEDURE <Tên thủ tục ><các lệnh >ENDPROCEDUREMột câu hỏi được đặt ra là: Có nhất thiết trong Tong1 phải dùng biến S1 vàtrong Tong2 phải dùng S2 hay không? câu trả lời là: không nhất thiết. Có thểtrong Tong1 dùng một biến cục bộ là T1 và trong Tong2 dùng biến cục bộ T2.Sau đó gửi nội dung T1 và T2 cho S1 và S2. Cung cách đó g ọi là truyền tham sốcho thủ tục. Cụ thể chương trình trên còn có thể viết lại như sau:

Set Talk offS1=0 && Khai báo S1 là số và ở vị trí toàn cụcS2=0 && Khai báo S2 là số và ở vị trí toàn cụcDo Tong1 With S1 && Chạy chương trình con có tên Tong1Do Tong2 With S2 && Chạy chương trình con có tên Tong2S=S1*S2?"S=",S**** Chương trình con có tên Tong1Procedure Tong1Parameter T1For i=1 To 100T1=T1+i*i

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 82

EndForEndProcedure**** Chương trình con có tên Tong2Procedure Tong2Parameter T2For i=1 To 100T2=T2+i*i*iEndForEndProcedureRõ ràng lập trình kiểu này "mềm dẻo" hơn vì trong "Hộp đen" (Thủ tục) có thểtự ý toàn quyền chọn biến cục bộ mà không hề lệ thuộc vào biến toàn cục. Hãyhình dung rằng: giả sử bạn phân công cho ai đấy ở "bắc bán cầu" lập tr ình thủtục Tong1. Người ta ở "xa" như vậy làm sao mà biết bạn có biến S1 mà dùng -do đó nên để cho "tướng ngoài biên ải" tự quyết.Câu lệnh: DO Tong1 With S1, có nghĩa là chạy thủ tục Tong1 và "mang theo"S1 để chứa nội dung từ T1 trong khai báo c ( Parameter T1) gửi sang. Nói nômna là hộp đen tự quyết định xử lý dữ liệu và để vào một biến nào đấy, khi cần thìchương trình sẽ goi và mang theo biến để lấy về (giống như bạn muốn mua lúathì phải mang theo thúng để đựng lúa chứa không ai bán luôn cả thúng). Chương trình con còn có một dạng khác là FUNCTION, có cấu trúc sau: FUNCTION <Tên hàm > <Các tham số > <Các lệnh >RETURN <Giá trị >

Như đã nói ở phần PROCEDURE, bất kể là dạng gì thì nhiệm vụ của chươngtrình con là hoàn thành một công đoạn và phải tạo điều kiện dễ dàng để chươngtrình lấy được kết quả của công đoạn đó. FUNCTION cũng vậy thôi, chỉ cókhác là FUNCTION ch ỉ cho ta duy nhất một kết quả nằm ở <T ên hàm >, cònPROCEDURE thì có thể có nhiều kết quả, bởi có thể khai báo PARAMETERT1, T2, T3 v.v.. và khi truyền thì: Do <Tên thủ tục > With X1, X2, X3 v.v..Với chương trình trên, ta có thể viết lại bằng FUNTION như sau:Set Talk offS1=0 && Khai báo S1 là số và ở vị trí toàn cụcS2=0 && Khai báo S2 là số và ở vị trí toàn cụcS=Tong1(S1) *Tong2(S2) && Gọi hàm Tong1 và truyền S1, Tong2 truyền S2?"S=",S**** Chương trình con có tên Tong1Function Tong1(T1)For i=1 To 100T1=T1+i*iEndForReturn T1 && Gửi kết quả T1 cho hàm (Tong1)

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 83

**** Chương trình con có tên Tong2Function Tong2(T2)For i=1 To 100T2=T2+i*i*iEndForReturn T2 && Gửi kết quả T2 cho hàm (Tong2)Ta nhận thấy ở dạng hàm (FUNCTION) việc gọi hàm có dạng:TenHam(Tham số), cụ thể ở trên:S=Tong1(S1)*Tong2(S2), không gi ống như ở PROCEDURE là:Do <Tên thủ tục > With <Tham số >Cũng như ở PROCEDURE, trong hàm Tong1 có hai biến cục bộ là T1 và i, trongTong2 có T2 và i. Còn S1 và S2 là toàn c ục.

6.4 Dữ liệu mảngTrong lập trình ta hay dùng dữ liệu mảng, vậy mảng là gì?. Ta hãy bắt đầu bằngví dụ sau:Vào lương của 100 nhân viên và tính tổng lương của họ. Vì là 100 nhân viên nênta không thể khai báo 100 biến được (thì cứ cho là khai báo được 100 biến,nhưng nếu cơ quan có 10000 người thì chả lẽ khai báo 10000 biến à?), do đó tanên dùng mảng. Khai báo mảng như sau:DIMENSION A(100)Mảng có tên A có 100 phần tử, các phần tử có tên:A(1), A(2), A(3), ...,A(100)Ta lập trình như sau:Set Talk offDimention A(100)*** Vào dữ liệuFor i=1 To 100Input "Vào A ("+allt(str(i))+")=" To A(i)EndFor** Tính tổngTong=0For i=1 To 100Tong=Tong+A(i)EndFor**In kết quả? "Tổng lương là:", Tong

Giả sử cơ quan bạn có 4 nhân viên, bạn không dùng mảng:Input "Vào a =" To aInput "Vào b =" To b

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 84

Input "Vào c =" To cInput "Vào d =" To dTong=a+b+c+d? "Tổng lương là:", Tonga, b, c, d là lương người thứ 1, thứ 2, v.v.. Nhưng nếu dùng mảng thì:

Dimention A(4)For i=1 To 4Input "Vào A ("+allt(str(i))+")=" To A(i)EndForTong=0For i=1 To 4Tong=Tong+A(i)EndFor? "Tổng lương là:", TongNhưng số biến càng lớn thì dùng mảng sẽ ngắn gọn hơn nhiều.Sau đây là một số ví dụ về mảng:

Ví dụ 1: Tìm Max của mảng sốSet Talk ofDime a(10) && Viết tắt, bạn có thể viết tắt 4 kí tự đầu** Vào mảngFor i=1 to 10Input "Vao a("+Allt(str(i))+")=" To a(i)EndFor88Tìm MaxMax=a(1)For i=2 To 10If max <a(i)Max=a(i)Endif?"Max=",Max

Ví dụ 2: Xếp mảng tăng dầnDime a(10) && Viết tắt, bạn có thể viết tắt 4 kí tự đầu** Vào mảngFor i=1 to 10 Input "Vao a("+Allt(str(i))+")=" To a(i)EndFor** Xếp mảngFor i=1 To 9 For j=i+1 To 10

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 85

If a(i)>a(j) Tg=a((j) a(j)=a(i) a(i)=TgEndifEndForEndForMảng hai chiều khai báo như sau:Dime a(m,n) trong đó m là hàng và n là c ột, ví dụDime a(3,4):a(1,1) a(1,2), a(1,3), a(1,4)a(2,1) a(2,2), a(2,3), a(2,4)a(3,1) a(3,2), a(3,3), a(3,4)Khi vào dữ liệu bạn có thể vào theo dòng, hết dòng nọ đến dòng kia.Các phần tử của mảng có thể là số, văn bản, Date, v.v..

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 86

Bài tập chương 61. Nhập vào một số nguyên, từ bàn phím hãy in ra kết quả là tổng các chữ sốcủa số đó.2. Viết chương trinh tính tổng của bình phương các số từ 1 đến n (n đưa vào quabàn phím)3. Viết chương trình nhập số liệu cho tập tin bảng, có cấu trúc nh ư sau:

Name Type Width Giải thíchHodem C 20 Họ và đệmTen C 8 TênMNV C 4 Mã nhân viênBL N 9,0 Bậc lươngPC N 3,1 Phụ cấpTT N 10,0 Thành tiền

4. Từ bảng ở bài tập 3, viết chương trình tính cột thành tiền (TT) cho toàn bộnhân viên5. Viết chương trình hiện ra màn hình người có lương cao nhất6. Viết chương trình tính lương trung bình của của cơ quan7. Xem câu 3, 4, 5, 6 là những chương trình con, hãy lập trình cấu trúc chonhững vấn đề đó8. Cho tệp: DiemKhoiA như bạn đã biết. Hãy lập trình thực hiện các công việcsau: Tăng Toan thêm 12%, Ly 15%, Hoa 20% Tính lại cột Tong Tính điểm trung bình của toán (Toan), lý (Ly), hoá (Hoa) v à tổng (Tong) Hiển thị những thí sinh có điểm tong >=20 Hiển thị những thí sinh có điểm liệt (toán =0 hoặc lý =0 hoặc hoá=0) Hiển thị danh sách các thí sinh với các tr ường ở DiemKhoia.dbf và cáctrường ở tệp HoSoKhoiA.dbf (hai tệp)Hãy thiết kế theo cách lập trình cấu trúc!9. Cho mảng số gồm 20 phần tử nguyên, hãy lập trình thực hiện các công việcsau: Vào mảng Tìm Min của mảng Tính tổng mảng Tính tích của mảng Hiển thị những phần tử dương Tính tổng các căn bậc hai của các phần tử mảng Hiển thị những phần tử chẵn.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 87

Chương 7: Thiết kế giao diện qua MENU và Windows

7.1 Đặt vấn đềKhi lập trình để giải quyết một vấn đề, ta th ường chia vấn đề đó thành nhữngphần nhỏ tương đối độc lập, mỗi phần nhỏ đó th ường được mô tả bằng mộtchương trình con. Không phải lúc nào cũng cần thực hiện tất cả các ch ương trìnhcon đó mà có thể chỉ cần thực hiện một số nhỏ trong số đó. Khi bạn v ào nhàhàng để chọn món ăn, người hầu bàn đưa cho bạn một quyển thực đơn chứađựng nhiều món ăn trong đó. Dĩ nhi ên món ăn thì nhiều nhưng bạn cũng chỉchọn một số món ăn trong thực đơn mà thôi. Hình ảnh đó gợi cho người lập trìnhmột cách thiết kế giao diện qua Menu (thực đ ơn). Nghĩa là các chương trình con(hoặc các đối tượng cần thực hiện khác) giống nh ư những món ăn và chúng đượcxếp theo nhóm, ví dụ nhóm thịt, nhóm cá, nhóm rau v.v.. trong từng nhóm đó cócác món cụ thể. Ví dụ trong nhóm thịt có thịt lợn, thịt bò, v.v.. trong nhóm cá cócá Quả, cá Chép v.v.. Việc thiết kế theo thực đơn trên giúp cho việc chọn lựa các đối tượng và thựchiện các đối tượng được lựa một cách dễ dàng. Ngoài ra người ăn cũng có thểtuỳ ý chọn bàn ăn - ta quan niệm phòng ăn như là màn hình và mỗi bàn ăn nhưmột cửa sổ (Window). Như vậy mỗi sự lựa chọn có thể xẩy ra tại một cửa sổ v àthực hiện tại cửa sổ đó hoặc cửa sổ khác. Thực đơn và bàn ăn là hai công cụ giúpcho việc tìm món ăn và chỗ để ăn một cách thuận lợi. Cũng giống nh ư MENU vàWINDOW là hai công cụ giúp cho việc lựa chọn các đối t ượng và thực hiện cácđối tượng đó một cách thuận lợi. Quyển thực đơn của nhà hàng cũng có nhiều loại. Nếu nhà hàng chỉ có vàimón ăn thuộc cùng một nhóm thì thường người ta viết chúng đơn giản theo dònghoặc theo cột. Ví dụ:1. Thịt lợn kho 2. Thịt lợn luộc 3. Thịt chân gi ò lợnThực đơn trên gọi là thực đơn ngang (Menu bar), mỗi món trên (1. Thịt lợnkho1, 2. Thịt lợn luộc v.v..) được gọi là một Pad.Còn nếu viết như sau:1. 1. Thịt lợn kho2. 2. Thịt lợn luộc3. 3. Thịt chân giò lợnThì được gọi là Menu dọc hay còn gọi là MENU POPUP còn các thành phầncủa cột như: 1.Thịt lợn kho, 2. Thịt lợn luộc v.v.. gọi l à Bar 1, Bar 2 v.v..Còn nếu thực đơn chứa nhiều nhóm mỗi nhóm lại chứa nhiều món cụ thể th ìthông thường Menu ngang chứa nhóm, còn Menu dọc chứa món cụ thể, ta sẽ t ìmhiểu chi tiết trong các phần sau.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 88

7.2 Thiết kế các Menu7.2.1 Menu ngangGiả sử ta có bài toán đơn giản sau: Tạo hai thủ tục có tên là Tong và Tich đểtính tổng và tính tích của dãy số 1,2,3,4,5,6,7,8,9, 10. Nghĩa là:

S=1+2+..+10, P=1*2*...*10Bài toán yêu cầu thiết kế giao diện qua menu ngangChương trình 1.2.1ClearDefine Menu MemuNgangDefine Pad Tong Of MenuNgang Prompt ' Tính tổng các số từ 1 đến 10' At00,00Define Pad Tich Of MenuNgang Prompt ' Tính tích các số từ 1 đến 10' At00,30On Selection Pad Tong Of MenuNgang Do DieuKhien With Pad()On Selection Pad Tich Of MenuNgang Do DieuKhien With Pad()

Activate Menu MenuNgang

Procedure DieuKhienParameter TsPad

Do CaseCase TsPad='TONG'

Do TinhTongCase TsPad='TICH'

Do TinhTichEndCaseReturn

Procedure TinhTongs=0For i=1 To 10

s=s+iEndFor?'Tổng S =',sReturn

Procedure TinhTichp=1For i=1 To 10

p=p*i

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 89

EndFor?'Tích p =',pReturnGiải thích:Dòng 1:Define Menu MemuNgangÝ nghĩa:Định nghĩa một Menu Ngang có tên là MenuNgangDòng 2: Define Pad Tong Of MenuNgang Prompt ' Tính tổng các số từ 1 đến 10' At00,00Ý nghĩa:Định nghĩa một Pad có tên là Tong thuộc MenuNgang, đồng thời hiện thị:'Tínhtổng các số từ 1 đến 10' tại (At) toạ độ có d òng là 0 và cột là 0Dòng 3:Define Pad Tich Of MenuNgang Prompt ' Tính tích các số từ 1 đến 10' At00,30Ý nghĩa:Định nghĩa một Pad có tên là Tich thuộc MenuNgang, đồng thời hiện thị:'Tínhtích các số từ 1 đến 10' tại (At) toạ độ có dòng 0 cột là 30Dòng 4:On Selection Pad Tong Of MenuNgang Do DieuKhien With Pad()Ý nghĩa:Khi vệt sáng nằm ở Pad có tên là Tong (tương ứng với dòng chữt: ' Tính tổngcác số từ 1 đến 10' và ấn Enter thì chương trình con có tên TinhTong đượcthực hiện, đồng thời truyền giá trị (t ên của Pad tương ứng) cho thông số đứngsau Parameter của chương trình conDòng 5:On Selection Pad Tich Of MenuNgang Do DieuKhien With Pad()Ý nghĩa:Khi vệt sáng nằm ở Pad có tên là Tich (tương ứng với dòng chữt: ' Tính tích cácsố từ 1 đến 10' và ấn Enter thì chương trình con có tên TinhTich được thựchiện, đồng thời truyền giá t rị (tên của Pad tương ứng) cho thông số đứng sauParameter của chương trình conDòng 6:Activate Menu MenuNgangÝ nghĩa:Kích hoạt Menu có tên MenuNgang- đưa Menu vào trạng thái hoạt động· · Hàm Pad ()trả về tên Pad khi vệt sáng nằm ở Pad đó và ấn EntertVí dụ: Nếu vệt sáng nằm ở Pad thứ 2:Hàm Pad ()sẽ cho giá trị TICHs

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 90

· · Hàm Menu ()trả về tên Menu khi Menu được kích hoạttVí dụ: Khi Menu có tên MenuNgang được kích hoạt, hàm Menu ()cho giá trịc:MENUNGANGĐể định nghĩa tổng quát ta có các quy ước viết tắt như sau:expN, expN1, expN2 v.v.. là biểu thức nguyênexpC, expC1, expC2 v.v.. là biểu thức văn bảnexpR là biểu thức bất kỳ<...> Thông số[....] là tuỳ chọn| hoặcĐịnh nghĩa menu có thêm một số thông số hay dùng như sau:Define Menu <Menu Name> [Mesage <expC>][Bar [At Line <expN1>]] [In[Window]<Window Name>| In Screen][Color Scheme <expN2> | Color <Color List>]Trong đó:· · Message<expC> là thông báo với nội dung là <expC> tại dòng mà trước

đó dùng lệnh:Set Message to <expN>Ví dụ:Set Message to 23Define Menu MenuNgang Mesage 'Đây là Menu ngang'· · Bar [At Line <expN1>]Menu sẽ được đặt tại dòng <expN1>, nếu dùng Bar, khi thực hiện xongthực đơn không hoạt động nữa· · [In[Window]<Window Name>| In Screen]Menu sẽ được đặt trong cửa sổ hoặc trong màn hình

· · [Color Scheme <expN2> | Color <Color List>]Đặt sơ đồ màu hoặc danh sách màuĐịnh nghĩa Pad có thêm một số thông số hay dùng như sau:Define Pad <Pad Name> of <Menu Name>Prompt <expC1> [At <dòng, cột>][Mesage <expC>] [Color Scheme <expN2> | Color <Color List>]Trong đó:· · Prompt <expC1>ứng với tên Pad thứ nhất hiện thông báo <expC1>· · At <dòng, cột>Đặt <expC1> ở toạ độ <dòng, cột>· · Mesage <expC>Như phần trên

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 91

· · Color Scheme <expN2> | Color <Color List>Như phần trên7.2.2 Menu dọcCũng từ chương trình ở phần 1.2.1 ta chuyển sang giao diện theo Menu dọc nh ưsau:Chương trình 1.2.2ClearDefine Popup MenuDoc From 5,10Define Bar 1 Of MenuDoc Prompt ' Tính tổng các số từ 1 đến 10'Define Bar 2 Of MenuDoc Prompt ' Tính tích các số từ 1 đến 10'On Selection Popup MenuDoc Do DieuKhien With Bar()

Activate Popup MenuDoc

Procedure DieuKhienParameter TsBarDo Case

Case TsBar=1 Do TinhTong

Case TsBar=2Do TinhTich

EndCaseReturn

Procedure TinhTongs=0For i=1 To 10

s=s+iEndFor?'Tổng S =',sReturn

Procedure TinhTichp=1For i=1 To 10

p=p*iEndFor?'Tích p =',pReturn

Giải thích:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 92

Dòng 1:Define Popup MemuDoc From 5,10Ý nghĩa:Định nghĩa một Menu dọc có tên là MenuDoc và đặt ở dòng 5 cột 10Dòng 2: Define Bar 1 Of MenuDoc Prompt ' Tính tổng các số từ 1 đến 10'Ý nghĩa:Định nghĩa Bar 1 thuộc MenuDoc, đồng thời hiện thị:'Tính tổng các số từ 1 đến10'Dòng 3:Define Bar 2 Of MenuDoc Prompt ' Tính tích các số từ 1 đến 10'Ý nghĩa:Định nghĩa Bar 2 thuộc MenuDoc, đồng thời hiện thị:'Tính tích các số từ 1 đến10'Dòng 4:On Selection Popup MenuDoc Do DieuKhien With Bar()Ý nghĩa:Khi vệt sáng nằm ở Bar 1 hoặc Bar 2 và ấn Enter thì chương trình con có tênTinhTong hoặc TinhTich được thực hiện, đồng thời truyền giá trị (t ên của Bartương ứng) cho thông số đứng sau Parameter của ch ương trình conDòng 5:Activate Popup MenuDocÝ nghĩa:Kích hoạt Popup có tên MenuDoc- đưa Popup vào trạng thái hoạt động· · Hàm Bar() trả về số Bar khi vệt sáng nằm ở tar đó và ấn EnterVí dụ: Nếu vệt sáng nằm ở Bar 2:Hàm Bar() sẽ cho giá trị 2s· · Hàm Prompt() trả về giá tri xâu đứng sau PrompttĐịnh nghĩa Popup có thêm một số thông số hay dùng như sau:Define Popup <Popup Name> From <dòng1, c ột1> [To <Dòng2,Cot2>][Prompt Field <expR>| Prompt Files[Like <skel>]| Prompt structure][Mesage <expC1>][Title <expC2>][In[Window]<Window Name>| In Screen][Color Scheme <expN2> | Color <Color List>]Trong đó:· · Prompt Field <expR>: khi đưa tuỳ chọn này vào và chỉ định một tên

trường <expR> từ một tệp CSDL đang mở th ì dữ liệu của trường này sẽ trởthành các tuỳ chọn của Popup

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 93

· · Prompt Files: Nếu đưa tuỳ chọn này vào thì các tệp tin sẽ trở thành tuỳchọn của Popup, còn nếu Prompt Files Like *.dbf thì chỉ những tệp CSDLlà tuỳ chọn của Popup

· · Prompt Structure: Nếu có tuỳ chọn này thì các trường sẽ là tuỳ chọncủa Popup

· · Title <expC2>: Sẽ hiện tiêu đề của Popup· · [In[Window]<Window Name>| In Screen]Menu sẽ được đặt trong cửa sổ hoặc trong màn hình

· · [Color Scheme <expN2> | Color <Color List>]Đặt sơ đồ màu hoặc danh sách màuĐịnh nghĩa Bar có thêm một số thông số hay dùng như sau:Define Bar <expN> Of <Popup Name>Prompt <expC1> [Mesage <expC>] [Skip] [Color Scheme <expN2> | Color <Color List>]Trong đó:· · Prompt <expC1>ứng với tên Bar thứ nhất hiện thông báo <expC1>· · Mesage <expC>Như phần trên

· · Skip: tuỳ chọn đó không chọn được· · Color Scheme <expN2> | Color <Color List>Như phần trên7.2.3 Menu hỗn hợpVí dụ 1:Giả sử ta định nghĩa một Menu chứa hai Pad (Thịt luộc =ThitLuoc v à Thịt kho=ThitKho)Ứng với ThitLuoc?:Thịt Gà luộcThịt Ngan luộcThit Bò luộcỨng với ThitKho?:Thịt Gà khoThịt Ngan khoThịt Bò khoTa lập trình như sau:Chương trình 1.2.3.1ClearDefine Menu MonThitDefine Pad ThitLuoc Of MonThit Prompt ' Day la thit luoc ' At 00,00

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 94

Define Pad ThitKho Of MonThit Prompt ' Day la Thit kho ' At 00,20Define Popup Luoc From 02,00Define Bar 1 Of Luoc Prompt ' Thịt Gà luộc 'Define Bar 2 Of Luoc Prompt ' Thịt Ngan luộc 'Define Bar 3 Of Luoc Prompt ' Thịt bò luộc 'On Selection Popup luoc Do Hien With Bar(),Popup()

Define Popup Kho From 02,20Define Bar 1 Of Kho Prompt ' Thịt gà kho 'Define Bar 2 Of Kho Prompt ' Thịt ngan kho'Define Bar 3 Of Kho Prompt ' Thịt bò kho 'Define Bar 4 Of Kho Prompt ' Thịt lợn kho 'On Selection Popup Kho Do Hien With Bar(),Popup()On Pad ThitLuoc Of MonThit Activate Popup LuocOn Pad ThitKho Of MonThit Activate Popup Kho

Activate Menu MonThit

Procedure HienParameter TsBar,TsPopupDo Case

Case TsBar=1 and TsPopup='LUOC'?'Đây là thịt Gà luộc 'Case TsBar=2 and TsPopup='LUOC'?'Đây là thịt ngan luộc 'Case TsBar=3 and TsPopup='LUOC'?'Đây là thịt bò luộc 'Case TsBar=1 and TsPopup='KHO'?'Đây là thịt gà kho 'Case TsBar=2 and TsPopup='KHO'?'Đây là thịt ngan Kho 'Case TsBar=3 and TsPopup='KHO'?'Đây là thịt bò Kho 'Case TsBar=4 and TsPopup='KHO'?'Đây là thịt lợn Kho '

EndcaseReturnVí dụ 2:Ta định nghĩa một Menu có tên Toan, ở Menu này có 2 pad (Lượng giác =LuongGiac và Đại số =DaiSo). Ở phần lượng giác có hai bar là tính Sin và cos, ởphần Đại số có hai bar là tính Tổng và tính Tích. Chương tr ình như sau:Chương trình 1.2.3.2

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 95

ClearDefine Menu ToanDefine Pad LuongGiac Of Toan Prompt ' Các bài tập lượng giác ' At 00,00Define Pad DaiSo Of Toan Prompt ' Các bài tập đại số ' At 00,35Define Popup LG From 02,00Define Bar 1 Of LG Prompt ' Tính sin 'Define Bar 2 Of LG Prompt ' Tính Cos '

On Selection Popup LG Do DieuKhien With Bar(),Popup()

Define Popup DS From 02,35Define Bar 1 Of DS Prompt ' Tính tổng 'Define Bar 2 Of DS Prompt ' Tính tích 'On Selection Popup DS Do DieuKhien With Bar(),Popup()On Pad LuongGiac Of Toan Activate Popup LGOn Pad DaiSo Of Toan Activate Popup DS

Activate Menu Toan

Procedure DieuKhienParameter TsBar,TsPopupDo Case

Case TsBar=1 and TsPopup='LG'Do TinhSinCase TsBar=2 and TsPopup='LG'Do TinhCosCase TsBar=1 and TsPopup='DS'Do TinhTongCase TsBar=2 and TsPopup='DS'Do TinhTich

EndcaseReturn

Procedure TinhSinFor i=1 to 1000?i,sin(i)EndforReturn

Procedure TinhCosFor i=1 to 1000?i,Cos(i)

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 96

EndforReturn

Procedure TinhTongs=0For i=1 to 1000s=s+iEndfor?'Tong s=',sReturn

Procedure TinhTichp=1For i=1 to 10p=p*iEndfor?'Tich p=',pReturn

Lệnh sau:On Pad LuongGiac Of Toan Activate Popup LGGiải thích:Gắn Pad LuongGiac của Menu Toan với Popup LG và kích hoạt luôn

7.3 WindowTa định nghĩa Window như sauDefine Window <Window Name> From <dong1, cột1>To<dòng2, cột 2>[Title<expC1>] [Footer <expC2>][System | Double |Panel |None |<border string>][Close | Noclose] [Float | Nofloat][Shadow | Noshadow] [Fill<exC3>][Color scheme<expN | Color<color list]In[Window] <Name> | In Screen]

· · [Title<expC1>] : Nếu chọn cửa sổ sẽ có tiêu đề trên là <expC1>

· · [Footer <expC2>]: Nếu chọn cửa sổ sẽ có tiêu đề dưới là <expC2>

· · [System | Double |Panel |None |<border string>]Đường viền giống như đường viền của cửa sổ hệ thống nếu chọn SystemĐường viền kép nếu chọn DoubleĐường viền to nếu chọn Panel

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 97

Không đường viền nếu chọn NoneĐường viền là ký tự nếu chọn <border string>

· · [Close | Noclose]: Cửa sổ đóng được hoặc không đóng được· · [Float | Nofloat]: Cửa sổ di chuyển được hoặc không di chuyển được· · [Shadow | Noshadow]: Cửa sổ có bóng hoặc không· · [Fill<exC3>]: Cửa sổ được lấp đầy bởi <expC3>Ví dụ:ClearDefine Window Win1 From 1,2 To 10,20 Title 'Cửa sổ 1' double CloseDefine Window Win2 From 12,2 To 20,20 Title 'Cửa sổ 2' double CloseActivate Window Win1?'Chào ban, tôi đang ở cửa sổ Win1'Deactivate Window Win1Activate Window Win2?'Chào bạn, tôi đã đến cửa sổ Win2'Deactivate Window Win2Chương trình trên ta định nghĩa hai cửa sổ, kích hoạt cửa sổ Win1 v à hiện thịtrong cửa sổ đó: 'Chào bạn, tôi đang ở cửa sổ Win1'. Sau đó thôi kích hoạt cửa sổđó bằng lệnh Deactivate Window Win1.Tiếp theo kích hoạt cửa sổ Win2 v à hiện thị trong cửa sổ đó: 'Chào bạn, tôi đãđến cửa sổ Win2. Sau đó thôi kích hoạt cửa sổ đó bằng lệnh DeactivateWindow Win2Giả sử ở ví dụ 2 phần 1.2.3 ta thiết kế nh ư sau:1. 1. Cửa sổ thứ nhất có tên WinMenu hiện thị Menu Toan2. 2. Cửa sổ thứ hai có tên WinSin hiện thị kết quả Sin3. 3. Cửa sổ thứ ba có tên WinCos hiện thị kết quả Cos4. 4. Cửa sổ thứ tư có tên WinTong hiện thị kết quả Tong5. 5. Cửa sổ thứ năm có tên WinTich hiện thị kết quả Tich6. 6. Thêm một Pad để thiết lập Procedure ThoatChương trình sẽ như sau:Chương trình 1.3ClearDefine Window WinMenu From 1,1 To 10,60 Title 'Của sổ Menu'Define Window WinSin From 1,35 To 5,75 Title 'Của sổ chứa sin'Define Window WinCos From 6,35 To 10,75 Title 'Của sổ chứa Cos'Define Window WinTong From 11,35 To 15,75 Title 'Của sổ chứa Tổng'Define Window WinTich From 16,35 To 20,75 Title 'Của sổ chứa Tich'

Define Menu ToanDefine Pad LuongGiac Of Toan Prompt 'bài tập lượng giác 'Define Pad DaiSo Of Toan Prompt 'bài tập đại số '

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 98

Define Pad Thoat Of Toan Prompt 'Thoát '

Define Popup LGDefine Bar 1 Of LG Prompt ' Tính sin 'Define Bar 2 Of LG Prompt ' Tính Cos '

On Selection Popup LG Do DieuKhien With Bar(), Popup()On Selection Pad Thoat Of Toan Do ThoatDefine Popup DSDefine Bar 1 Of DS Prompt ' Tính tổng 'Define Bar 2 Of DS Prompt ' Tính tích 'On Selection Popup DS Do DieuKhien With Bar(), Popup()On Pad LuongGiac Of Toan Activate Popup LGOn Pad DaiSo Of Toan Activate Popup DS

Activate Window WinMenuActivate Menu Toan

Procedure DieuKhienParameter TsBar,TsPopupDo Case

Case TsBar=1 and TsPopup='LG'Do TinhSinCase TsBar=2 and TsPopup='LG'Do TinhCosCase TsBar=1 and TsPopup='DS'Do TinhTongCase TsBar=2 and TsPopup='DS'Do TinhTich

EndcaseReturn

Procedure TinhSinActivate Window WinSinFor i=1 to 1000?i,sin(i)EndforReturn

Procedure TinhCosActivate Window WinCosFor i=1 to 1000

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 99

?i,Cos(i)EndforReturn

Procedure TinhTongActivate Window WinTongs=0For i=1 to 1000s=s+iEndfor?'Tong s=',sReturn

Procedure TinhTichActivate Window WinTichp=1For i=1 to 10p=p*iEndfor?'Tich p=',pReturn

Procedure ThoatDeactivate Window AllDeactivate Menu AllReturn

7.4 Một số lệnh khác7.4.1 Move WindowLệnh có dạng sau:MOVE WINDOW <Window Name> TO <dòng, cột>Lệnh trên cho phép dịch chuyển cửa sổ đến toạ độ <dòng, cột>Ví dụ:CLEARDEFINE WINDOW Win1 FROM 1,4 TO 5,34 PANELACTIVATE WINDOW Win1?'Tôi đang ở chỗ cũ'WAIT WINDOW 'ấn phím để di chuyển cửa sổ'MOVE WINDOW Win1 TO 10,15?'Tôi đến nơi mới rồi'for i=1 to 100

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 100

?i, sqrt(i)EndforRELEASE WINDOW Win1Trong chương trình trên ta còn thấy hai lệnhT:1. WAIT WINDOW 'ấn phím để di chuyển cửa sổ'Lệnh này chờ ấn một phím bất kỳ để di chuyển cửa sổ2. RELEASE WINDOW Win1Lệnh này xoá cửa sổ khỏi bộ nhớ.7.4.2 Giao diện để mở File bằng MEMU POPUPGiả sử trên đĩa ở thư mục hiện thời có nhiều tệp *.dbf. Ta có thể xây dựng mộtgiao diện để mở tệp và xử lý tệp đó như sau:SET TALK OFFCLOSE DATABASECLEARDEFINE POPUP ChonFile FROM 2,2 TO 7, 14 PROMPT FILES LIKE *.dbf ; TITLE 'Cua so File'ON SELECTION POPUP ChonFile DO MoFile WITH PROMPT ()ACTIVATE POPUP ChonFile

PROCEDURE MoFilePARAMETER aUSE &aBROWSERETURN

7.4.3 Giao diện thông qua MEMU POPUP để xác định nội dung tr ường

STT HOTEN NGAYSINH TINH 1 Nguyễn Thị Vân Anh 22-06-81 Nghệ an 2 Lê Thị Phương Thanh 21-06-81 Thái bình 3 Bùi Tuấn Bảo 04-04-80 Hà nội 4 Trần Thị Hoàng Hoa 02-02-80 Hải phòng 5 Ngô Tuấn Thuỷ 24-05-80 Thanh hoá 6 Hoàng Châu 02-09-80 Lào cai 7 Phạm Kim Thọ 11-12-81 Thái nguyên 8 Nguyễn Quỳnh Hoàn 29-09-78 Quảng bình 9 Phạm Vân Tuấn 15-07-79 Hoà bình

Đoạn chương trình sau để đưa nội dung trường HOTEN thành các Bar củaMENU POPUP:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 101

SET TALK OFFCLOSE DATABASE && Đóng t ất cả các tệp CSDLCLEARUSE NhanSuDEFINE POPUP ChonField FROM 2,2 TO 7, 14 PROMPT FIELD HOTEN ; TITLE 'Cua so Field'ON SELECTION POPUP ChonField DO MoField WITH PROMPT ()ACTIVATE POPUP ChonField

PROCEDURE MoFieldPARAMETER a? 'Bạn đã chọn người có tên:', aRETURN

7.4.4 Lệnh dịch chuyển và đặt kích cỡ cho MENU POPUP

CLOSE DATABASEDEACTIVATE POPUP ALLCLEARDEFINE POPUP pop FROM 2,2 TO 7, 14 PROMPT FILES LIKE *.dbf TITLE'Tep CSDL'ACTIVATE POPUP pop NOWAIT && Kích ho ạt và không chờ=CHRSAW(4) && Chờ 4 giâyMOVE POPUP pop BY 5,5 && D ịch xuống=CHRSAW(2)SIZE POPUP pop BY 15,15 && phóng to thêm lên=CHRSAW(2)SIZE POPUP pop BY -5,-5 && Giảm bớt đi=CHRSAW(2)MOVE POPUP pop BY -5,-5=CHRSAW(2)ACTIVATE POPUP pop && Kích ho ạt và chờDEACTIVATE POPUP pop && Thôi kích ho ạtRELEASE POPUP pop && Xoá MENU POPUP kh ỏi bộ nhớ7.4.5 Dịch chuyển cửa sổ

DEFINE WINDOW Win1 FROM 5,4 TO 15,34 PANEL TITLE 'Window'ACTIVATE WINDOW Win1WAIT WINDOW 'Ấn phím để di chuyển cửa sổ'MOVE WINDOW Win1 TO 10,15 && D ịch đến toạ độ (10,15)WAIT WINDOW 'Ấn phím để xoá cửa sổ khỏi bộ nhớ'RELEASE WINDOW Win1 && Xoá c ửa sổ khỏi bộ nhớ

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 102

7.4.6 MENU Hệ thốngGỉa sử ta muốn tạo ra một MENU đóng vai tr ò MENU hệ thống, khi cần kíchhoạt ta chỉ việc ấn phím ALT hoặc F10.Ví dụ tạo một MENU hệ thống ngang bao gồm 3 pad:Pad 1 có tên: Chương tr ình 1Pad 2 có tên: Chương tr ình 2Pad 3 có tên: Chương trình 3Khi chọn pad 1 thì chạy thủ tục 1 có tên Proc1 nằm trong tệp chương trìnhProg.prgKhi chọn pad 2 thì chạy thủ tục 2 có tên Proc2 nằm trong tệp chương trìnhProg.prgKhi chọn pad 3 thì chạy thủ tục 3 có tên Proc3 nằm trong tệp chương trìnhProg.prgTa tạo MENU hệ thống như sauT:Modi comm HeThong <Enter>CLEARSET SYSMENU SAVE && Lưu giữ MENU Hệ thốngSET SYSMENU TO && Đóng MENU H ệ thống của FoxProDEFINE PAD pad1 OF _MSYSMENU PROMPT 'Chương tr ình 1'DEFINE PAD pad2 OF _MSYSMENU PROMPT ' Chương trình 2'DEFINE PAD pad3 OF _MSYSMENU PROMPT 'Chương tr ình 3'

ON SELECTION PAD pad1 OF _MSYSMENU DO Pro1 in ProgON SELECTION PAD pad2 OF _MSYSMENU DO Pro2 in ProgON SELECTION PAD pad3 OF _MSYSMENU DO Pro3 in ProgSau đây ta tạo chương trình có tên Prog.prg chứa 3 thủ tục proc1, proc2 và proc3như sau:Modi comm Prog.prg

PROCEDURE Proc1?' Chào bạn tôi là Proc1 nằm trong tệp Prog.prg đây'RETURNPROCEDURE Proc2?' Tính căn của các số từ 1 đến 1000'For i=1 to 1000?i,sqrt(i)EndForRETURN

Procedure Proc3?' Tính sin của các số từ 1 đến 1000'For i=1 to 1000

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 103

?i,sin(i)EndForReturn

Sau đây là thao tác khi chạy chương trình:Bước 1: Chạy chương trình tạo menu hệ thống:

DO HeThong <Enter>Say khi ấn Enter thì một MENU hệ thống được tạo ra và ngay lập tức thoát khỏichương trình, con trỏ trở về cửa sổ lệnh.Bước 2: ấn phím ALT hoặc F10 để kích hoạt MENU hệ thóng vừa tạo, chọnmục Pad tương ứng với chương trình muốn chạy và ấn EnterChú ý: Muốn huỷ bỏ MENU Hệ thống vừa mới tạo, thiết lập lại MENU hệ thốngcủa FoxPro, từ cửa sổ lệnh ta gõ: SET SYSMENU TO DEFAULT <Enter>7.4.7 Lưu cửa sổ vào biến nhớ và phục hồi cửa sổ khi cầnSET SAFETY OFFCLEARDEFINE WINDOW CuaSo1 FROM 2,1 TO 13,55 panel TITLE 'C ửa sổ'ACTIVATE WINDOW CuaSo1WAIT WINDOW '? n phím để tiếp tục'SAVE WINDOW CuaSo1 TO Bien && Lưu c ửa sổ vào biến nhớ có tên BienCLEAR WINDOWS && Xoá cửa sổ có tên CuaSo1WAIT 'ấn phím'RESTORE WINDOW CuaSo1 FROM BienFOR i=1 TO 1000?i,sin(i)NEXTWAIT 'an phim'DEACTIVATE WINDOW CuaSo17.4.8 Lưu màn hình vào biến nhớ và phục hồi cửa sổ khi cần

? 'Chào bạn'? 'Tôi là sinh viên khoa Tin học Quản lý'SAVE SCREEN TO BienCLEAR

WAIT 'Màn hình không còn gì -ấ n phím!'RESTORE SCREEN FROM Bien7.4.9 Menu dẫn xuấtMenu dẫn xuất là Menu mà một hoặc nhiều thành phần (các Barc) của mộtPOPUP lại dẫn đến một hoặc nhiều POPUP khác v à có thể lại một hoặc nhiềuthành phần của POPUP mới này lại dẫn đến một hoặc nhiều POPUP khác nữav.v..Ví dụ ta thiết kế một MENU như sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 104

MENU ngang gồm hai PAD: Mon1 (Bánh gói) và Mon2 (Đồ uống) POPUP ứng với Mon1 có: Bar 1 (Bánh nhân hoa quả), Bar 2 (Bánh nhân

thịt)1. 1. Trong Bar 1 (Bánh nhân hoa qu ả) lại dẫn đến một POPUP

khác mà các Bar như sau: Bánh nhân cam, Bánh nhân táo, Bánhnhân lê và Bánh nhân chuối

2. 2. Trong Bar 2 (Bánh nhân th ịt) lại dẫn đến một POPUP khácmà các Bar như sau: Bánh nhân th ịt lợn, Bánh nhân thịt bò vàBánh nhân thịt Gà:

- Bánh nhân thịt gà lại có: Thịt gà công nghiệp và thịt gà ta POPUP ứng với Mon2 có: Bar 1 (Cà phê), Bar 2 (Nước chanh)

1. 1. Trong Bar 1 (Cà phê) lại dẫn đến một POPUP khác gồm haiBar (Bar 1 =Cà phê nâu có đư ờng, Bar 2= Cà phê nâu khôngđường)

V.v..Sơ đồ chọn một loại bánh: Giả sử ta chọn bánh nhân thịt g à ta

BÁNH GÓI Đồ uốngBánh nhân hoa quảBánh nhân thịt

Bánh nhân thịt

lợnBánh nhân thịt bò

Bánh nhân thịt gà

Bánh nhân thịt gà công

nghiệpBánh nhân thịt gà ta

Sơ đồ chọn đồ uống: (Giả sử ta chọn Cà phê nâu không đường)

BÁNH GÓI Đồ uống

Cà phê

Cà phê nâu có đường

Nước chanh Cà phê nâu không

đườngChương trình như sau:CLEAR

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 105

SET TALK OFFCLOSE DATABASEDEACTIVATE WINDOW ALLDEACTIVATE MENU ALLDEFINE WINDOW Win1 FROM 10,0 TO 23,39 PANEL

DEFINE MENU AnSang

DEFINE PAD Mon1 OF AnSang PROMPT 'Bánh ng ọt'DEFINE PAD Mon2 OF AnSang PROMPT 'Đ ồ uống '

ON PAD Mon1 OF AnSang ACTIVATE POPUP C1M1ON PAD Mon2 OF AnSang ACTIVATE POPUP C2M2

DEFINE POPUP C1M1 MARGIN MESSAGE 'Các lo ại bánh khác nhau'DEFINE BAR 1 OF C1M1 PROMPT 'B ánh nhân hoa qủa'DEFINE BAR 2 OF C1M1 PROMPT 'Bánh nhân th ịt 'ON BAR 1 OF C1M1 ACTIVATE POPUP C1M1B1ON BAR 2 OF C1M1 ACTIVATE POPUP C1M1B2

DEFINE POPUP C1M1B1 MARGIN MESSAGE 'Các Lo ại nhân hoa qủa'DEFINE BAR 1 OF C1M1B1 PROMPT 'Bánh nhân cam 'DEFINE BAR 2 OF C1M1B1 PROMPT 'Bánh nhân táo 'DEFINE BAR 3 OF C1M1B1 PROMPT 'Bánh nhân lê 'DEFINE BAR 4 OF C1M1B1 PROMPT 'Bánh nhân chu ối'

DEFINE POPUP C1M1B2 MARGIN MESSAGE 'Các lo ại nhân thịt'DEFINE BAR 1 OF C1M1B2 PROMPT 'Bánh nhân th ịt lợn'DEFINE BAR 2 OF C1M1B2 PROMPT 'Bánh nhân th ịt bò 'DEFINE BAR 3 OF C1M1B2 PROMPT 'Bánh nhân th ịt gà 'ON BAR 3 OF C1M1B2 ACTIVATE POPUP C1M1B2C1

DEFINE POPUP C1M1B2C1 MARGINDEFINE BAR 1 OF C1M1B2C1 PROMPT 'Bánh nhân th ịt gà công nghiệp'DEFINE BAR 2 OF C1M1B2C1 PROMPT 'Bánh nhân th ịt gà ta '

DEFINE POPUP C2M2 MARGIN MESSAGE 'Các lo ại nước uống'DEFINE BAR 1 OF C2M2 PROMPT 'Cà phê 'DEFINE BAR 2 OF C2M2 PROMPT 'Nư ớc chanh'ON BAR 1 OF C2M2 ACTIVATE POPUP C2M2B1

DEFINE POPUP C2M2B1 MARGIN MESSAGE 'Các Loại cà phê'

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 106

DEFINE BAR 1 OF C2M2B1 PROMPT 'Cà phê đen'DEFINE BAR 2 OF C2M2B1 PROMPT 'Ca phê nâu'

ON BAR 2 OF C2M2B1 ACTIVATE POPUP C2M2B2C2

DEFINE POPUP C2M2B2C2 MARGIN MESSAGE 'Các lo ại cà phê nâu'DEFINE BAR 1 OF C2M2B2C2 PROMPT 'Cà phê nâu có đường 'DEFINE BAR 2 OF C2M2B2C2 PROMPT 'Cà phê nâu không đư ờng'ON SELECTION POPUP ALL DO Chon

ACTIVATE MENU AnSang

PROCEDURE ChonACTIVATE WINDOW Win1CLEAR?Popup(), Prompt()WAIT 'Ấn phím'RETURN

Bài tập:1. Phần 7.4.1 (Di chuyển cửa sổ)2. Phần 7.4.2 (Mở File bằng MENU POPUP)3. Phần 7.4.3 (Mở nội dung Field băng MENU POPUP)4. Phân 7.4.4 (Di chuyển MENU POPUP)5. Phần 7.4.5 (Di chuyển Window)6. Phần 7.4.6 (Menu Hệ thống)7. Phần 7.4.7 (Lưu và phục hồi cửa sổ)8. Phần 7.4.8 (Lưu và phục hồi nội dung màn hình)9. Phần 7.4.9 (Menu dẫn xuất)

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 107

Chương 8. Tạo các bẫy trong chương trình

8.1 Lệnh ON ERRORKhi gặp một lỗi bất kỳ ta muốn chương trình sẽ thực hiện một chương trình connào đó hoặc thông báo dạng lỗi xuất hiện. Nhờ quá tr ình đó mà ta có thể vượtqua lỗi đó để làm một việc khác hoặc sửa lỗi đó. Lệnh ON ERRORS có dạngsau:ON ERROR [<Lệnh>]Khi gặp lỗi chương trình sẽ thông báo lỗi bằng các hàm sau: Hàm ERROR ()thông báo mã lỗi Hàm MESSAGE() thông báo lỗi Hàm MESSAGE (1) hiển thị lệnh sai Hàm LINENO() thông báo số thứ tự dòng bị lỗiLệnh ON ERROR thông có tham số cho phép huỷ bỏ bẫy lỗi.Ví dụ:set talk offclearON ERROR DO ThongBao WITH MESS(1), ERROR(), MESS(), LINENO()?sin(9USU NhansuBrwsON ERROR

PROCEDURE ThongBaoPARAMETER a, b, c,d? 'Sai lệnh nào? : ' +a? 'Mã của lỗi : ' + STR(b)? 'Sai gì? : ' + c?' Dòng nào sai :'+Str(c)?'----------------------------------------------- 'RETURN

8.2 Lệnh ON KEYLệnh có dạng như sauL:ON KEY [<Lệnh>]Khi ấn một phím bất kỳ th ì lệnh được kích hoạt và thực hiện <Lệnh>.Chương trình sau ta tạo một vòng lặp, khi chương trình đang chạy nếu ấn mộtphím bất kỳ thi lệnh ON KEY được kích hoạt và chương trình con có tênTamDung được thực hiện:SET TALK OFFUSE khoia

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 108

CLEARON KEY DO TamDungFOR i=1 to 10000?i,sin(i),cos(i)NextPROCEDURE TamDungh= INKEY()?'Bạn đã gõ phím:',HWAITRETURN

8.3 Lệnh ON KEY =Lệnh có dạng:ON KEY [=<ExpN] [<Lệnh>]Trong đó <ExpN> là mã phím hoặc tổ hợp phím. Bảng mã phím như sau:Mã phím Tên phím khi gõ272-281 Alt+Q đến Alt +P286-294 Alt+A đến Alt +L300- 306 Alt+Z đến Alt +M315-324 F1 đến F10327 HOME328 Up arrow ( )329 PgUp331 Left arrow ( )333 Right arrow ( )335 End336 Down arrow ( )337 PgDn338 Ins339 Ins340-349 Shift+F1 đến Shift +F10350 - 359 Ctrl+F1 đến Ctrl +F10360 - 369 Alt+F1 đến Alt +F10370 Ctrl+Print+Scrn371 Ctrl+left arrow372 Ctrl+right arrow373 Ctrl+End374 Ctrl+PgDn375 Ctrl+Home376 - 387 Alt+1 đến Alt +0,Alt+-,Alt+=388 Ctrl+PgUp

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 109

Ví dụ 1:CLEARON KEY = 315 DO TroGiup WITH VARREAD()SET TALK OFFUSE khoiaSCATTER TO tempDEFINE WINDOW VAO FROM 6,10 TO 20,70 PANELACTIVATE WINDOW VAODO WHILE NOT EOF()@ 1,3 SAY 'Ho va dem: ' GET hodem@ 3,3 SAY 'Ten : ' GET ten@ 5,3 SAY 'Diem toan: ' GET toan@ 7,3 SAY 'Diem ly : ' GET ly@ 9,3 SAY 'Diem hoa : ' GET hoa@ 11,8 SAY 'An ESC de thoat hoac an F1 de tro giup'READSKIPENDDO

DEACTIVATE WINDOW VAORELEASE WINDOW VAO

PROCEDURE TroGiupPARAMETERS TenTruongCLEARDEFINE WINDOW HelpMe FROM 1,0 TO 5,79ACTIVATE WINDOW HelpMe@ 0,20 SAY 'Đây là tên trường có tên: ' + TenTruong+ ' bạn chỉ vào DL hoặcchấp nhận'WAITRELEASE WINDOW HelpMeRETURN

8.4 Lệnh ON KEY LABELLệnh có dạng sau:ON KEY [LABEL <Nhãn phím >] [<Lệnh>]Sau đây là các nhãn phím:

Tên nhãn Cách viếtShift+F11, Shift+F12 Shift+F11 ...Alt+F1 đến Alt +F12 Alt+F1, Alt+F2 ...

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 110

Alt+0 đến Alt -9 Alt+0, Alt+1 ...Alt+A đến Alt +Z Alt+A, Alt+B ...Alt+PgUp Alt+PGUPAlt+PgDn Alt+PGDNCtrl+left arrow Ctrl+LEFTARROWCtrl+right arrow Ctrl+RIGHTARROWCtrl+Home Ctrl+HOMECtrl+End Ctrl+ENDCtrl+PgUp Ctrl+PGUPCtrl+PgDn Ctrl+PGDNCtrl+A đến Ctrl +Z Ctrl+A, Ctrl+B ...Right Mouse RIGHTMOUSELeft Mouse LEFTMOUSEMouse MOUSEEscape ESC

8.5 Lệnh ON ESCAPELệnh có dạng sau:ON ESCAPE <Lệnh>Khi ấn phím ESC thì <Lệnh> được thi hànhVí dụ chương trình:SET TALK OFFCLEARON KEY LABEL RIGHTARROW? 'Đây là phím d ịch phải (Right Arrow) 'ON KEY LABEL LEFTARROW? 'Đây là phím d ịch trái (Left Arrow)'ON KEY LABEL UPARROW? 'Đây là phím lên d òng (Up Arrow)'ON KEY LABEL DNARROW? 'Đây là phím xuống một dòng (Down Arrow)'SET ESCAPE ONThoat=.T.ON ESCAPE Thoat=.F.@ 2,0 SAY 'Ấn các phím , , và để xem lệnh ON KEY LABEL, ấn ESCđể thoát'DEFINE WINDOW Input FROM 10,20 TO 14,60 DOUBLEACTIVATE WINDOW InputDO WHILE ThoatENDDODEACTIVATE WINDOW InputON KEY

8.6 Lệnh ON READERRORLệnh có dạng:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 111

ON READERROR [<Lệnh>]Khi nhập dữ liệu nếu gặp lỗi th ì thực hiện <Lệnh>Ví dụ chương trình:CLOSE DATABASESSET STATUS OFFSET TALK OFFUSE KhoiAON READERROR DO LoiNhap@ 10,13 SAY 'Vào họ và đệm : ' GET HODEM@ 12,13 SAY 'Vào Tên : ' GET Ten@ 14,13 SAY 'Vào số báo danh : '@ 14,30 GET SBDC Valid Val(right(sbdc,4))<=3000READ

PROCEDURE LoiNhap?'Không có số báo danh '+sbdcWAIT 'ấn phím để tiếp tục'ClearRETURN

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 112

Chương 9: Mảng và chuyển giao dữ liệu giữa các môi trường

9.1 MảngMảng được định nghĩa như sau:DIMENSION <Biến mảng >(<expN1> [, <expN2>])a. Mảng một chiềuGiả sử ta khai báo mảng A có 10 thành phần:

DIMENSION A(10)Thứ tự truy cập mảng như sau: A(1), A(2), A(3), A(4),...,A(10)b. Mảng hai chiều

DIMENSION B(2,4)Thứ tự truy cập mảng như sau: B(1,1), B(1,2), B(1,3), B(1,4) B(2,1), B(2,2), B(2,3), B(2,4)Ta có thể khai báo ngắn gọnT:

DIMENSION A(10),B(2,4)Để gán giá trị ban đầu cho mảng ta dùng lệnh gán:A=0 hay STORE 0 TO AB='Tin học' hay STORE 'Tin học' TO B

Điều đó có nghĩa là các thành phần của mảng A: A(1),...,A(10) đều bằng 0 v àcác thành phần của mảng B:B(1,1),B(1,2) v.v..đều có cùng giá trị 'Tin học'Giả sử ta có mảng:

DIMENSION M(2)STORE 'A' TO M(1)STORE 'B' TO M(2)DISPLAY MEMORY LIKE MSau đó hiện lên:M Pub A ( 1) C "A" ( 2) C "B"Còn nếu:DIMENSION M(4)STORE 'A' TO M(1)STORE 'B' TO M(2)DISPLAY MEMORY LIKE MSau đó hiện lên:

M Pub A ( 1) C "A" ( 2) C "B" ( 3) L .F.

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 113

( 4) L .F.

Hãy quan sát các ví dụ sau:DIMENSION M(4)STORE 'E' TO M(1)STORE 'F' TO M(2)STORE 'G' TO M(3)STORE 'H' TO M(4)DISPLAY MEMORY LIKE MM Pub A ( 1) C "E" ( 2) C "F" ( 3) C "G" ( 4) C "H"Còn nếu:DIMENSION M(2,3)DISPLAY MEMORY LIKE MM Pub A ( 1, 1) C "E" ( 1, 2) C "F" ( 1, 3) C "G" ( 2, 1) C "H" ( 2, 2) L .F. ( 2, 3) L .F.

Như vậy khi mảng 2 chiều chuyển sang một chiều, th ì nội dung của mảng haichiều được sao chép từ mảng một chiều theo trật tự trên.Ví dụ:DIMENSION ViDu(2,3)STORE 'Tạm biệt' TO ViDu(1,2)STORE 'Hello' TO ViDu(2,2)STORE 99 TO ViDu(6)STORE .T. TO ViDu(1)DISPLAY MEMORY LIKE ViDuSau khi chạy sẽ có kết quả:

VIDU Priv A ( 1, 1) L .T. ( 1, 2) C "Tạm biệt" ( 1, 3) L .F. ( 2, 1) L .F. ( 2, 2) C "Hello"

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 114

( 2, 3) N 99 ( 99.00000000)

9.2 Copy mảngĐể copy nội dung của mảng a (nguồn) sang mảng b (đích) ta d ùng:=COPY (A,B)Ví dụ:set talk offcleardime a(4),b(4), c(5)a(1)=2a(2)=5a(3)=99a(4)=1234=ACOPY(a, b)?B(1)?B(2)?B(3)?B(4)=ACOPY(b,c)?c(1)?c(2)?c(3)?c(4)?C(5)

9.3 Một số thuật toán về mảnga. Tìm max của mảngGiả sử ta tìm phần tử lớn nhất của mảng 20 thành phần. Ta lập trình như sau:Set talk offClearDimension A(20)A=0For i=1 to 20Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)NextMax=a(1)For i=2 to 20If max<=a(i)max=a(i)next?'Phần tử lớn nhất là:',max

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 115

b. Tìm min của mảngGiả sử ta tìm phần tử nhỏ nhất của mảng 20 thành phần. Ta lập trình như sau:Set talk offClearDimension A(20)A=0For i=1 to 20Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)NextMin=a(1)For i=2 to 20If min>=a(i)min=a(i)next?'Phần tử nhỏ nhất là:',maxc. Xếp mảngGiả sử ta xếp giảm dần các phần tử của mảng 20 th ành phần, ta lập trình nhưsau:Set talk offClearDimension A(20)A=0For i=1 to 20Input 'Vào phần tử A ( '+Str(i,2)+' )=' To A(i)Nextfor i=1 to 20 for j=i+1 to 19if a(i)>a(j)tg=a(i)a(i)=a(j)a(j)=tgEndif

9.4 Chuyển bản ghi ra mảng hoặc biến nhớĐể dễ trình bày ta nên dựa vào một tệp CSDL, giả sử ta có tệp CSDL có t ênKHOIA.DBF như sau: STT SBDC HODEM TEN NGAYSINH KV DTTOAN LY HOA TONG TIEUSU 1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0 2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5 3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5 4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 116

5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5 6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5 7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0 8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0 9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0 10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5 11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0 12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5 13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5 14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0 15 99A0015 Phạm Quốc Bình 140975 2 02 4.5 3.0 3.5 11.0 16 99A0016 Đoàn Mạnh Khanh 030280 3 10 5.0 3.5 4.0 12.5 17 99A0017 Nguyễn Văn Khoa 031278 3 11 6.0 4.5 5.0 15.5 18 99A0018 Tạ Hồng An 081180 2 09 8.0 6.5 7.0 21 .5 19 99A0019 Đỗ Trọng Ân 201180 2 07 7.0 5.5 6.0 18.5 20 99A0020 Đỗ Đình Khải 190479 2 08 5.0 3.5 4.0 12.5Trong đó các tên Trường như sauT:STT : Số thứ tựHODEM : Họ đệmNGAYSINH : Ngày sinhKV : Khu vựcDT : Đối tượngTOAN : Điểm toánLY : Điểm lýHOA : Điểm hoáTONG : Tổng điểmTIEUSU : Tiểu sửLệnh có dạng như sau:SCATTER [FIELDS <field list>

| FIELDS LIKE <skel>| FIELDS EXCEPT <skel>]TO <array> | TO <array> BLANK

| MEMVARCopy dữ liệu từ bản ghi hiện thời sang mảng hoặc sang các biến nhớ.SCATTER tự động tạo ra các biến nhớ hoặc mảng nếu chúng ch ưa tồn tại. FIELDS <field list> Chỉ một số trường trong danh sách trường <field list> mới được Copy FIELDS LIKE <skel> | FIELDS EXCEPT <skel> Chúng ta có thể copy các trường vào biến nhớ hoặc mảng bằng dùng từ khoáLIKE hoặc EXCEPT

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 117

SCATTER FIELDS LIKE A*,P* TO myarray

SCATTER FIELDS LIKE A*,P* EXCEPT PARTNO* TO myarray

TO <array>Nội dung các trường được đưa vào mảng <Array>

TO <array> BLANKMột mảng được tạo với các phần tử trống.

MEMVARChuyển nội dung bản ghi ra các biến nhớ (các biến n hớ mang tên trườngc) vàviết như sau: m.SBDC, m.HODEM v.v..Ví dụ1:set talk offclearuse khoiacopy to khoia1use khoia1Dimension A(10)do while not eof()scatter to a?a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)SkipEnddoGiả sử không khai báo mảng thì máy sẽ tự động tạo ra mảng để lưu bản ghi đóset talk offclearuse khoiacopy to khoia1use khoia1do while not eof()scatter to a?a(1),a(2),a(3),a(4),a(5),a(6),a(7),a(8),a(9),a(10)SkipEnddoVí dụ 2: chuyển nội dung bản ghi ra biến nhớSET TALK OFFUSE KhoiaCOPY TO Khoia1USE Khoia1SCATTER MEMVAR MEMO && cất dữ liệu cũDEFINE WINDOW Win1 FROM 5,10 to 20,70 PANEL

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 118

ACTIVATE WINDOW Win1@ 1,3 SAY 'Số báo danh: ' GET m.sbdc@ 3,3 SAY 'Họ đệm : ' GET m.hodem@ 5,3 SAY 'Tên : ' GET m.ten@ 7,3 SAY 'Ngày sinh : ' GET m.Ngaysinh@ 7,18 SAY 'Khu vực : ' GET m.KV@ 9,13 SAY 'Tiểu sử : '@ 9,23 EDIT m.Tieusu SIZE 3,26@ 13,13 SAY 'ấn Escape để thay đổi'READ? m.sbd, m.hodem, m.ten, m.ngaysinh, m.kv

IF LASTKEY() != 27GATHER MEMVARWAIT WINDOW 'Cất sự thay đổi' NOWAIT

ELSEWAIT WINDOW 'Không cất sự thay đổi' NOWAIT

ENDIFDEACTIVATE WINDOW Win1BROWSEUSE9.5 Chuyển dữ liệu từ mảng vào bản ghi

GATHER FROM <array> | MEMVAR[FIELDS <field list>| FIELDS LIKE <skel>| FIELDS EXCEPT <skel>]

Lệnh GATHER để lưu dữ liệu từ mảng hoặc từ biến nhớ v ào bản ghi hiệnthời. FROM <array> Copy từ mảng MEMVAR

copy vào bản ghi từ biến nhớ

FIELDS <field list>Chỉ những trường liệt kê trong <field list> mới nhận dữ liệu vàoFIELDS LIKE <skel> | FIELDS EXCEPT <skel>Ví dụ:GATHER FROM myarray FIELDS LIKE A*,P*GATHER FROM myarray FIELDS LIKE A*,P* EXCEPT PARTNO*

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 119

Ví dụ:SET TALK OFFUSE KhoiaCOPY TO Khoia1USE Khoia1SCATTER MEMVAR MEMO && save old valuesDEFINE WINDOW Win1 FROM 5,10 to 20,70 PANELACTIVATE WINDOW Wind1@ 1,3 SAY 'Số báo danh: ' GET m.sbdc@ 3,3 SAY 'Họ đệm : ' GET m.hodem@ 5,3 SAY 'Tên : ' GET m.ten@ 7,3 SAY 'Ngày sinh : ' GET m.Ngaysinh@ 7,18 SAY 'Khu vực : ' GET m.KV@ 9,13 SAY 'Tiểu sử:'@ 9,23 EDIT m.Tieusu SIZE 3,26@ 13,13 SAY 'ấn Escape để thay đổi'READIF LASTKEY() != 27

GATHER MEMVARWAIT WINDOW 'Cất sự thay đổi' NOWAIT

ELSEWAIT WINDOW 'Không cất sự thay đổi' NOWAITENDIFDEACTIVATE WINDOW Wind1BROWSEUSE

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 120

Chương 10: Một số lệnh hiệu chỉnh dữ liệu

10.1 Các tuỳ chọn cao cấp của lệnh BROWSELệnh BROWSE có dạng sau:BROWSE

[FIELDS <field list>][FONT <expC1> [, <expN1>]][STYLE <expC2>][FOR <expL1>][FREEZE <field>][KEY <expr1> [, <expr2>]][LEDIT][REDIT][LOCK <expN2>][LPARTITION][NOAPPEND][NOCLEAR][NODELETE][NOEDIT | NOMODIFY][NOLGRID] [NORGRID][NOLINK][NORMAL][NOWAIT][PARTITION <expN3>][PREFERENCE <expC3>][SAVE][TIMEOUT <expN4>][TITLE <expC4>][VALID <expL2>

[ERROR <expC5>]][WHEN <expL3>][WIDTH <expN5>][[WINDOW <window name1>][IN [WINDOW] <window name2> | IN SCREEN]][COLOR SCHEME <expN6>| COLOR <color pair list>]

BROWSE là một trong những lệnh mạnh của FoxPro. Sử dụng BROWSE để mởcửa sổ Browse và hiển thị các bản ghi của tệp cơ sở dữ liệu. Nếu như bạn cảmthấy cú pháp quá phức tạp th ì nhiều khi chỉ cần gõ BROWSE <Enter> là có thểhiệu chỉnh được các bản ghi. Nhưng muốn tận dụng được sức mạnh của nó bạn

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 121

nên tuỳ từng tình huống cụ thể mà sử dụng các mệnh đề và từ khoá của lệnh. Sauđây là mô tả các mệnh đề và từ khoá của nó.1. [FIELDS <field list>]Mệnh đề [FIELDS <field list>] định ngh ĩa các trường cần hiển thị, ví dụ:USE KHOIABROWSE FIELD Hodem,ten,sbdc

· · Nếu muốn một trường nào đó không được phép sửa ta thêm: R vào sautrường đó

Ví dụ:USE KHOIABROWSE FIELD Hodem,ten,sbdc :RNhư vậy trường SBDC chỉ đọc mà không được phép sửa· · Có thể xác định độ rộng của trường đó như sau:USE KHOIABROWSE FIELD Hodem,ten,sbdc :R :8Ở trên trường SBDC chỉ đọc (:R) và có độ rộng 8 kí tự (:8)· · Giả sử ta khống chế trường SBDSO (Số báo danh số) chỉ đ ược sửa từ số

báo danh 1 đến số báo danh 12, ta viết như sau:USE KHOIABROWSE FIELD Hodem,ten,sbdso :V=(sbdso<13) :F

· · Khi dùng tuỳ chọn: V và : F ở trên, nếu muốn có một thông báo lỗi ta viếtnhư sau:

USE KHOIABROWSE FIELD Hodem, ten, sbdso :V=(sbdso<13) :F:E='Không đư ợc phép'· · Nếu muốn chỉ định một khoảng giá trị để hiệu chỉnh, giả sử chỉ đ ược sửa

SBDSO (số được gõ vào thay cho số cũ) từ 12, 20 ta viết như sau:USE KHOIABROWSE FIELD Hodem, ten, sbdso :B=12,20

· · Muốn hiển thị môt tên trường mới thay cho tên trường đã có ta gõ nhưsau:

USE KHOIABROWSE FIELD Hodem, ten, sbdso :H='So Bao Danh'

· · Chỉ được sửa những bản ghi có SBDSO <12 ta g õ như sau:USE KHOIABROWSE FIELD Hodem, ten, sbdso :W=SBDSO<122. [FONT <expC1> [, <expN1>]]Khi chạy trong môi trường Windows thì <expC1>là tên phông chữ (VnTime,VnTimeH v.v..) còn <expN1>là cỡ phông, nếu không có tham số này, FoxPro sẽdùng cỡ phông 10.Ví dụ:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 122

USE KHOIABROWSE FIELD Hodem, ten, sbdso Font '.VnTime', 143. [STYLE <expC2>]Biểu thức ký tự <expC2> xác định kiểu của phông (B= Béo, I=nghiêng v.v..)USE KHOIABROWSE FIELD Hodem, ten, sbdso Font '.VnTime', 14 Style 'B'4. [FOR <expL1>]Điều kiện để hiển thị các bản ghi, ví dụ:USE KHOIABROWSE FIELD Hodem, ten, TongDiem For TongDiem >=165. [FREEZE <field>]Chỉ cho phép hiệu chỉnh trường C <field>, ví dụ: USE KHOIABROWSE FIELD Hodem, ten, TongDiem FREEZE TongDiem6. [KEY <expr1> [, <expr2>]]Mệnh đề KEY được dùng để giới hạn phạm vi các bản ghi đ ược hiển thị, ví dụ:USE KhoiaINDEX ON SBDSO TO SBDINDEXBROWSE KEY 1,40Nghĩa là chỉ hiện các bản ghi có số báo danh từ 1 đến 40USE KhoiaINDEX ON Ten TO TenIndexBROWSE KEY 'A', 'N'Hiển thị những bản ghi có tên với chữ cái đầu từ A đến NUSE KhoiaINDEX ON Ten TO TenIndexBROWSE KEY 'A''Hiển thị những bản ghi có tên với chữ cái đầu từ A7. [LEDIT] [REDIT][LEDIT] cho phép hiển thị dữ liệu dạng BROWSE[REDIT] cho phép chuyển sang hiển thị dạng lệnh EDIT hoặc CHANGE8. [LOCK <expN2>]Cho phép cố định <expN2> trường bên trái trong khi vẫn di chuyển trỏ sangphải. <expN2> phải nhỏ hơn số lượng các trường hiện ra màn hình.USE KHOIABROWSE FIELD Hodem, ten, TongDiem LOCK 29. [LPARTITION]Đưa trỏ sang vùng bên trái, ví dụ:USE KHOIABROWSE PARTITION 40 LPARTITION

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 123

Mệnh đề PARTITION 40 chia cửa sổ th ành hai phần, đường phân cách đứngnằm ở cột 40, bình thường trỏ nằm ở bên phải nhưng nếu có mệnh đềLPARTITION thì trỏ sẽ được đặt ở phần trái.10. [NOAPPEND]Từ khoá NOAPPEND sẽ không cho phép ghép các bản ghi v ào sau tệp, ví dụ:USE KHOIABROWSE FIELD Hodem, ten, TongDiem NOAPPEND11. [NOCLEAR]Từ khoá NOCLEAR báo cho lệnh BROWSE để lại tr ên màn hình một ảnh củacửa sổ BROWSE sau khi thoát, ví dụ:USE KHOIABROWSE FIELD Hodem, ten, TongDiem NOCLEAR12. [NODELETE]Không cho xoá các bản ghi, ví dụ:USE KHOIABROWSE FIELD Hodem, ten, TongDiem NODELETE13. [NOEDIT | NOMODIFY]Loại bỏ việc hiệu chỉnh dữ liệu.USE KHOIABROWSE FIELD Hodem, ten, TongDiem NOEDITHoặc:USE KHOIABROWSE FIELD Hodem, ten, TongDiem NOMODIFY14. [NOLGRID] [NORGRID]Không hiển thị đường kẻ dọc phân cách các trường của phân vùng bên trái hoặcbên phải, ví dụ:USE KHOIABROWSE PARTITION 40 NOLGRID15. NOLINKTừ khoá NOLINK báo cho lệnh BROWSE không nối kết các phân v ùng, nghĩalà khi ta di chuyển trỏ đến các bản ghi khác nhau ở phân v ùng này thì các bảnghi ở phân vùng kia vẫn nằm yên, ví dụ:USE KHOIABROWSE PARTITION 40 NOLINK16. [NORMAL]Nếu chỉ định từ khoá NORMAL th ì cửa sổ BROWSE vẫn xuất hiện ở màn hìnhmặc dù có thể đang có một cửa sổ hoạt động, ví dụ:DEFINE WINDOW W1 FROM 1,2 TO 12,40 PANELACTIVATE WINDOW W1USE KHOIABROWSE

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 124

Dữ liệu sẽ xuất hiện trong cửa sổ W1 v à cửa sổ BROWSE sẽ kết thừa các tínhchất như màu, ZOOM, SIZE v.v.. của cửa sổ W1, con nếu:DEFINE WINDOW W1 FROM 1,2 TO 12,40 PANELACTIVATE WINDOW W1USE KHOIABROWSE NORMALThì dữ liệu sẽ xuất hiện ở màn hình (không phải trong W1) và nó kế thừa màu,ZOOM, SIZE v.v..của chính cửa sổ BROWSE.17. [NOWAIT]Nếu có từ khoá NOWAIT, lệnh BROWSE sẽ hiển thị dữ liệu v à sau đó làm tiếpcác lệnh trong chương trình mà không phải gõ CTRL +W hoặc CTRL +END, vídụ:Set talk offClearDEFINE WINDOW w1 FROM 1,2 TO 12,40 PANELACTIVATE WINDOW w1USE KHOIABROWSEWAIT 'ấn phím để tiếp tục'BROWSE NOWAIT &&sẽ hiển thị dữ liệu nhưng không dừngDEFINE WINDOW w2 FROM 14,20 TO 20,70 PANELACTIVATE WINDOW w2FOR i=1 TO 1000?i,sin(i)NEXTCLEAR ALL18. [PARTITION <expN3>]Tách cửa sổ BROWSE thành hai phân vùng, có đường ngăn cách tại cột<expN3>.USE KHOIABROWSE PARTITION 4019. [PREFERENCE <expC3>]Từ khoá PREFERENCE báo cho lệnh BROWSE l ưu cất các thuộc tính và tuỳchọn của cửa sổ BROWSE và tệp tin tài nguyên có tên <expC3>, để sau đódùng lại, ví dụ:USE KHOIABROWSE FIELD HODEM,TEN, SBDC COLOR SCHEME 3 PREFERENCEFile1**** Thoát bằng CTRL +W************ Phục chế lại nguyên dạng ********* BROWSE PREFERENCE File120. [SAVE]

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 125

Để lại trên màn hình cửa sổ BROWSE và các trường trước khi thoát, ví dụ:USE KHOIABROWSE FIELD HODEM,TEN, SBDC SAVE21. [TIMEOUT <expN4>]Từ khoá TIMEOUT báo cho lệnh BROWSE chờ T <expN4> giây, ví dụ:USE KHOIABROWSE FIELD HODEM,TEN, SBDC TIMEOUT 5Chú ý: Chỉ dùng TIMEOUT trong chương tr ình.22. [TITLE <expC4>]Đặt tiêu đề cho cửa sổ BROWSE, ví dụ:USE KHOIABROWSE FIELD HODEM,TEN TITLE ' Thi khoi A'23.[VALID [:F] <expL2> [ERROR <expC5>]]Chỉ sửa dữ liệu khi thoả mãn <expL2>, ví dụ:USE KHOIABROWSE VALID KV<=3 AND KV>0 ERROR 'Không đư ợc phép'Nghĩa là khi sửa trường KV (Khu vực), ta chỉ có thể g õ vào các số 1,2, 3 màthôi, còn nếu gõ vào khác các số đó thì có thông báo lỗi <expC5> .24. [WHEN <expL3>]Chỉ hiệu chỉnh khi thoả mãn điều kiện <expL3>USE KHOIABROWSE WHEN KV<=3 AND KV>025. [WIDTH <expN5>] Đặt độ rộng cho các trường, nếu độ rộng thực của trường lớn hơn <expN5> thìnội dung trường sẽ được cuốn theo chiều ngang.USE KHOIABROWSE WIDTH 1026. [[WINDOW <window name1>]Cửa sổ BROWSE sẽ được hiện trong cửa sổ được định nghĩa trước đó.CDEFINE WINDOW W1 FROM 1,1 TO 20,40 PANELUSE KHOIABROWSE WINDOW W127. [IN [WINDOW] <window name2> | IN SCREEN]] Hiện ở một cửa sổ bên trong một cửa sổ khác, ví dụ:USE KHOIADEFINE WINDOW WTo FROM 1,1 TO 20,40 PANELDEFINE WINDOW WNho FROM 4,4 TO 15,30 PANELACTIVATE WINDOW WtoBROWSE WINDOW WNho In Wto28. [COLOR SCHEME <expN6>| COLOR <color pair list>]Chỉ định lược đồ màu hoặc danh sách các thuộc tính màu. Thông thườngCOLOR SCHEME 10 là màu ngầm định.C

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 126

USE KHOIABROWSE COLOR SCHEME 5Hoặc:USE KHOIABROWSE COLOR 4

10.2 Các tuỳ chọn cao cấp của Lệnh CHANGE v à EDITCHANGE

[FIELDS <field list>][<scope>][FOR <expL1>][WHILE <expL2>][FONT <expC1> [, <expN1>]][STYLE <expC2>][FREEZE <field name>][KEY <expr1> [, <expr2>]][LEDIT] [REDIT][LPARTITION][NOAPPEND][NOCLEAR][NODELETE][NOEDIT | NOMODIFY][NOLINK][NORMAL][NOWAIT][PARTITION <expN2>][PREFERENCE <expC3>][SAVE][TIMEOUT <expN3>][TITLE <expC4>][VALID [:F] <expL3>[ERROR <expC5>]][WHEN <expL4>][WIDTH <expN4>][[WINDOW <window name1>][IN [WINDOW] <window name2> | IN SCREEN]][COLOR SCHEME <expN5>| COLOR <color pair list>]

Nếu không cung cấp [scope] th ì ALL được thiết lập, mỗi mệnh đề và từ khoákhác như lệnh BROWSE.Lệnh EDIT hoàn toàn như lệnh CHANGE.

10.3 Các tuỳ chọn cao cấp của lệnh @...SAY...GETLệnh có dạng tổng quát như sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 127

@ <row, column>SAY <expr>

[FUNCTION <expC1>][PICTURE <expC2>][SIZE <expN1>, <expN2>][FONT <expC3> [, <expN3]][STYLE <expC4>][COLOR SCHEME <expN4>| COLOR <color pair list>]

GET <memvar> | <field>[FUNCTION <expC1>][PICTURE <expC2>][FONT <expC3> [, <expN1>]][STYLE <expC4>][ENABLE | DISABLE][MESSAGE <expC5>][[OPEN] WINDOW <window name>][RANGE [<expr2>] [, <expr3>]][SIZE <expN2>, <expN3>][VALID <expL1> | <expN4> [ERROR <expC6>]][WHEN <expL2>][COLOR SCHEME <expN5> | COLOR <color pair list>]

READ1. <row, column>Dòng (row) và cột (column) nơi bắt đầu hiển thị dữ liệu, nếu dùng SET DEVICETO PRINTER để đưa kết xuất ra máy in th ì hàng có thể nằm trong phạm vi từ 0ddến 32.768 và cột từ 0 đến 255.2. <expr><expr> là biểu thức bất kỳ, ví dụ:@10,12 SAY 'Chào bạn'@11,12 SAY 12*23Phần chung cho cả SAY và GET3. [FUNCTION <expC1>]Tạo khuôn dạng cho dữ liệu, biểu thức <expC1> nhận các ký tự sau:a. Ký tự!Chuyển mọi ký tự viết thường thành viết hoa:@2,10 SAY 'Chào bạn ' FUNCTION '!'Khi hiển thị chữ 'Chào bạn' sẽ biến thành 'chào bạn'.b. Ký tự ^Hiện thị các số theo dạng động:@12,10 SAY 1232*7654 FUNCTION '^'Sẽ hiển thị ở dòng 12 cột 10 số: .94279E+7c. Ký tự $

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 128

Hiện thị dữ liệu theo dạng thức tiền tệ:@12,10 SAY 12*54 FUNCTION '$'Sẽ hiển thị kết quả: $648d. Ký tự (Bao các con số âm bằng các dấu ngoặc đơn:@12,10 SAY -112*54 FUNCTION '('Sẽ hiển thịS: ( 6048)e. Ký tự A hoặc aChỉ cho phép nhập các ký tự thuộc bảng chữ cái:ClearTen=Space(7)@12,10 SAY 'Vào tên của ban? ' GET Ten FUNCTION 'A'READ? Tenf. Ký tự B hoặc bGióng thẳng hàng lề trái của trường, ví dụUSE KHOIA@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'B'@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'B'@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'B'READg. Ký tự CHiển thị ký tự CR sau một số dương:@14,10 SAY 1235 FUNCTION 'C'Kết quả: 1235 CRh. Ký tự DHiển thị giá trị Date:@14,10 SAY 12345 FUNCTION 'D'Kết quả sẽ là:1/23/45i. Ký tự EHiển thị và nhập ngày tháng theo kiểu châu âu (ngày/Tháng /Năm):ClearA={}@14,10 SAY 'Vào dữ liệu dạng Date?' GET a FUNCTION 'E'?aj. Ký tự ICanh văn bản nằm giữa:USE KHOIA@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'I'@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'I'@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'I'READ

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 129

k. Ký tự JDóng thẳng hàng bên phải:USE KHOIA@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'J'@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'J'@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'J'READl. Ký tự KNguyên cả trường được chọn (bôi đen)USE KHOIA@12,10 SAY 'Vào họ đệm ? ' GET Hodem FUNCTION 'K'@13,10 SAY 'Vào tên ? ' GET Ten FUNCTION 'K'@14,10 SAY 'Vào điểm toán?' GET Toan FUNCTION 'K'READNên dùng K khi ta định gõ lại toàn bộ nội dung của trường đóm. Ký tự LHiển thị các chữ số 0 ở đầu thay vì dấu cách:A=123@14,10 SAY 'Vào a =' GET a FUNCTION 'L'READn. Ký tự M <List>Lựa một giá trị trong <List>USE KHOIA@12,10 SAY 'Vào khu vực? ' GET kv FUNCTION 'M 1,2,3'@13,10 SAY 'Vào ưu tiên?' GET ut FUNCTION 'M 1,2,3,4,5, 6,7,8,9,10,11'READo. Ký tự S <n>Cuốn duyệt theo chiều ngang trong khi sửa biến sau GET kiểu ký tự:p. Ký tự TCắt bỏ dấu cách trước vào sau ra khỏi trường ký tự2. [PICTURE <expC2>]a. Ký tự!Chuyển mọi ký tự viết thường thành viết hoa:@2,10 SAY 'chào bạn?' PICTURE '!!!!!!!!'Khi hiển thị chữ 'chào bạn' sẽ biến thành 'chào bạn'.Chú ý: Số ký tự! bằng số ký tự của dữ liệub. Ký tự #Chỉ cho phép nhập các ký số, dấu cách v à dấu +,-USE KHOIA@10,12 SAY 'Vao khu vực?' GET kv PICTURE '#'READc. Ký tự $

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 130

Hiển thị giá trị tiền tệH:@10,20 Say 12345 PICTURE '$$$$$$'d. Ký tự,Dấu phẩy ngăn cách ba chữ số để dễ đọc:@10,20 Say 1234567.87 PICTURE '99,999,999.99'Kết quả:1,234,567.89e. Ký tự 9Với dữ liệu character chỉ cho phép nhập ký số, với dữ liệu kiểu Numeric, chỉ chophép nhập các ký số và dấu -,+A=0@10,20 Say 'Vào a =' GET a PICTURE '99999'READf. Ký tự AChỉ cho phép nhập các ký tự chữ cái:Ten=Space(7)@10,20 Say 'Vào tên của bạn?' GET ten PICTURE 'AAAAAAA'READg. Ký tự LChỉ cho phép nhập dữ liệu kiểu Logic (T/F/Y/N)a=.T.@10,20 Say 'Vào giá trị a?' GET a PICTURE 'L'READh. Ký tự NChỉ cho phép nhập các chữ cái và ký số:a=Space(7)@10,20 Say 'Vào giá trị a?' GET a PICTURE 'NNNNNNN'READi. Ký tự XCho phép nhập bất kỳ ký tự nào.j. Ký tự YChỉ cho phép nhập Y,y,N,n3. [SIZE <expN1>, <expN2>]Cho phép dữ liệu hiện trên <expN1> dòng và <expN2> cột.@1,2 SAY 'Tin học Quản lý' SIZE 4,4Sẽ hiện thị:TinHọcQuan Ly4. [FONT <expC3> [, <expN3]]Như trong lệnh BROWSE5. [STYLE <expC4>]

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 131

Như trong lệnh BROWSE6. [COLOR SCHEME <expN4>| COLOR <color pair list>]Như trong lệnh BROWSE7. <memvar> | <field>Biến sau GET có thể là biến bộ nhớ hoặc biến trường8. [ENABLE | DISABLE]Cho phép hoặc không cho phép truy cập đến biến GET.

a=Space(7)@10,20 Say 'Vào giá trị a?' GET a DisableREADSau đó muốn truy cập biến a:a=Space(7)@10,20 Say 'Vào giá trị a?' GET a EnableREAD9. [MESSAGE <expC5>]Định nghĩa một thông báo khi GET đang đ ược hiểu chỉnha='Hoàng Văn Tài'@10,20 Say 'Vào giá trị a?' GET a MESSAGE 'Chỉ sửa tên'READ10. [[OPEN] WINDOW <window name>]Chỉ định tên cửa sổ nơi sẽ hiệu chỉnh trường MEMOVí dụ:ClearDEFINE WINDOW Wind1 FROM 1,1 TO 20,20DEFINE WINDOW Wind2 FROM 12,30 TO 20,70USE nhansu@1,1 Get Tieusu1 OPEN WINDOW Wind1@2,1 Get Tieusu2 OPEN WINDOW Wind2Giả sử: Tieusu1 và Tieusu2 là hai trường MEMO11. [RANGE [<expr2>] [, <expr3>]]Khoảng hợp lệ của dữ liệu nhậptuoi=0@10,20 Say 'Vào tuổi của bạn?' GET tuoi RANGE 13,35READ12. [VALID <expL1> | <expN4> [ERROR <expC6>]]Như trong lệnh BROWSE13. [SIZE <expN2>, <expN3>]Vùng hiệu chỉnh được xác định bằng <expN2> dòng và <expN3> cột:Kieu=Space(50)@10,20 Say 'Vào một câu kiều?' GET Kieu SIZE 4,15READ14. [WHEN <expL2>]

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 132

Như trong lệnh BROWSE15. [COLOR SCHEME <expN5> | COLOR <color pair list>]Như trong lệnh BROWSEBài tập:1. 1. Thử lại các tuỳ chọn của lệnh BROWSE tr ên máy2. 2. Thử lại các tuỳ chọn của lệnh CHANGE v à EDIT trên máy3. 3. Thử lại các tuỳ chọn của lệnh @...SAY...GET tr ên máy4. Bạn thử thiết kế một chương trình có sử dụng các tuỳ chọn đó

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 133

Chương 11: Chương tr ình con

11.1 Đặt vấn đềKhi lập trình để giải quyết một vấn đề, ta th ường chia vấn đề đó thành nhữngphần nhỏ tương đối độc lập, mỗi phần nhỏ đó th ường được mô tả bằng mộtchương trình con dạng PROCEDURE hay FUNCTION. Với cách n ày chúng tarút ngắn được chương trình do không phải viết lặp nhiều đoạn lệnh, ngo ài ra nếugặp lỗi trong một thủ tục nào đó ta dễ dàng sửa lỗi trong thủ tục đó mà thôi. Khithực hiện các PROCEDURE ta dùng lệnh: DO <Tên PROCEDURE > [WITH <Các tham s ố >] còn khi thực hiện cácFUNCTION ta viết tên hàm và các tham biến của hàm ví dụ: Tong(x,y), ta sẽ môtả chi tiết ở các phần sau.

11.2 Thủ tục (PROCEDURE)Thủ tục có dạng:PROCEDURE <Tên thủ tục >PARAMETER <Tham số 1>[,<Tham số 2] [,<Tham số 3>]...]<Các lệnh của thủ tục >RETURNSau đây là ý nghĩa của các thành phần trong cấu trúc trên: PROCEDURE <Tên thủ tục >Đây là dòng đầu của thủ tục, tên thủ tục theo nguyên tắc đặt tên biến (ở phần 1). PARAMETER <Tham số 1>[,<Tham số 2] [,<Tham số 3>]...]Dùng để khai báo các tham số hình thức, để khi gọi sẽ truyền cho nó các tham sốcụ thể, các tham số cụ thể này theo thứ tự của tham số hình thức. <Các lệnh của thủ tục >Phần này chứa các lệnh của thủ tục RETURNLà lệnh báo kết thúc thủ tụcVí dụ 1: Vào hai số tính tổng của nóClearSet talk offSet deci to 4Store 0 To s, a, b && Khai báo 3 sốDo Vao With a, b &&Chạy chương trình Vao và truyền cho nó hai tham biến a,bDo Tong With s, a, b &&Chạy chương trình Tong và truyền cho nó ba tham biếns,a,b?'Tổng s =',s && In kết quả ở chương trình chính

*** Thủ tục vào hai số *******

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 134

Procedure VaoParameter x,yInput 'Vào x =' To xInput 'Vào y =' To yReturn

*** Thủ tục tính tổng hai số *******Procedure TongParameter Tong,x,yTong=x+yReturn

Ví dụ 2:SET CENTURY ONa={}Do longdate With a,{11/29/99}?aPROCEDURE longdatePARAMETER c,mdatec=CDOW(mdate) + ', ' + MDY(mdate)RETURNSau khi chạy chương trình sẽ cho kết quả:Monday, November 29, 1999

Chương trình trên cũng còn có thể viết như sau:

SET CENTURY ON?longdate ({11/29/99})PROCEDURE longdatePARAMETER mdateRETURN CDOW(mdate) + ', ' + MDY(mdate)Ta không dùng DO <Tên chương tr ình con > mà dùng như FUNCTION.Ví dụ 3: Truyền mảng vào thủ tụcClearSet talk offDimension a(10)Store 0 to aDo Vao With aFor i=1 to 10?a(i)Next

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 135

** Thủ tục vào mảng ****Proc VaoPara cFor i=1 to 10Input 'vao c('+str(i,1)+')=' to c(i)NextReturnVí dụ 4: Giả sử ta có tệp CSDL có t ên KHOIA như sau:STT SBDC HODEM TEN NGAYSINH KV DT TOAN LY HOA TONG 1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0 2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5 3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5 4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0 5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5 6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5 7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0 8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0 9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0 10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5 11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0 12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5 13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5

14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0Lập một thủ tục tính tổng trung b ình của cột tổng, sau đó chương trình chínhtruyền tham biến thực vào để nhận:Set Talk offClearStore 0 To TbDo TrungBinh With Tb?'Điểm trung bình chung là:',TbPROCEDURE TBINHPARAMETER DTBUSE KhoiAAVERAGE Tong To DTBRETURN

11.3 Hàm (FUNCTION)Hàm có cấu trúc như sau:FUNCTION <Tên hàm >PARAMETER <Tham số 1>[,<Tham số 2] [,<Tham số 3>]...]<Các lệnh của hàm >RETURN <Biểu thức >

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 136

Sau đây là ý nghĩa của các thành phần trong cấu trúc trên: FUNCTION <Tên Hàm >Đây là dòng đầu của thủ tục, tên thủ tục theo nguyên tắc đặt tên biến (ở phần 1). PARAMETER <Tham số 1>[,<Tham số 2] [,<Tham số 3>]...]Dùng để khai báo các tham số h ình thức, để khi gọi sẽ truyền cho nó các tham sốcụ thể, các tham số cụ thể này theo thứ tự của tham số hình thức. <Các lệnh của hàm >Phần này chứa các lệnh của hàm RETURN <Biểu thức >Là lệnh báo kết thúc hàm và gán giá trị của biểu thức cho tên hàm.Ví dụ 1. Giả sử ta có tệp A99.DBF là tệp chứa các thông tin về tuyển sinh khối Anhư sau: STT SBDC HODEM TEN NGAYSINH KVDOITUONG TOAN LY HOA TONG TC 1 99A0001 Nguyễn Thị Hà 171279 1 01 6.5 5.0 5.5 17.0 2 99A0002 Trịnh Vĩnh Anh 280278 2 02 5.0 3.5 4.0 12.5 3 99A0003 Đỗ Văn Hùng 280679 3 03 7.0 5.5 6.0 18.5 4 99A0004 Trần Thanh Hải 011080 1 01 8.5 7.0 7.5 23.0 5 99A0005 Phan Trọng Thanh 241280 1 5A 9.0 7.5 8.0 24.5 6 99A0006 Đàm Hữu Thắng 190581 1 5B 3.0 1.5 2.0 6.5 7 99A0007 Lê Thanh Hồng 171177 2 09 4.5 3.0 3.5 11.0 8 99A0008 Nguyễn Phi Chung 020979 2 08 5.5 4.0 4.5 14.0 9 99A0009 Trần Tuấn Bảo 090280 2 07 6.5 5.0 5.5 17.0 10 99A0010 Nguyễn Đình Thu 151179 2 06 7.0 5.5 6.0 18.5 11 99A0011 Nguyễn Văn Hoàng 100177 2 09 8.5 7.0 7.5 23.0 12 99A0012 Đinh Việt Hữu 020180 2 09 9.0 7.5 8.0 24.5 13 99A0013 Đỗ Nguyễn Chu 071180 2 04 10.0 8.5 9.0 27.5

14 99A0014 Lý Xuân Thanh 200880 2 04 2.5 1.0 1.5 5.0.......

Tuỳ theo Đối tượng mà điểm được tăng như sau:Tăng 3.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 3Tăng 2.5 điểm nếu Đối tượng là '06','07','08' và khu vực 3Không tăng nếu Đối tượng là '10','11' và khu vực 3Tăng 4.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 2Tăng 3.5 điểm nếu Đối tượng là '06','07','08 và khu vực 2Tăng 1 điểm nếu Đối tượng là '10','11' và khu vực 2Tăng 5.5 điểm nếu Đối tượng là '01','02','03','04','5A','5B' và khu vực 1Tăng 4.5 điểm nếu Đối tượng là '06','07','08' và khu vực 1Tăng 4 điểm nếu Đối tượng là '10','11' và khu vực 1

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 137

Tăng 2 điểm nếu đối tượng là '09'Ta lập trình dùng hàm INLIST như sau:

set talk offuse a99REPL all TC with tonghs+ 3.5 for ut1(DoiTuong) and khuvuc='3'REPL all TC with tonghs+ 2.5 for ut2(DoiTuong) and khuvuc='3'REPL all TC with tonghs for ut3(DoiTuong) and khuvuc ='3'REPL all TC with tonghs+ 4.5 for ut1(DoiTuong) and khuvuc='2'REPL all TC with tonghs+ 3.5 for ut2(DoiTuong) and khuvuc='2'REPL all TC with tonghs+ 1 for ut3(DoiTuong) and khuvuc='2'REPL all TC with tonghs+ 5.5 for ut1(DoiTuong) and khuvuc='1'REPL all TC with tonghs+ 4.5 for ut2(DoiTuong) and khuvuc='1'REPL all TC with tonghs+ 4 for ut3(DoiTuong) and khuvuc='1'REPL all TC with tonghs+ 2 for DoiTuong='09' and khuvuc='2'

************ chuong trinh con ***********

Function ut1Parameter DoiTuongUt1=Inlist(DoiTuong,'01','02','03','04','5A','5B')Return Ut1

Function ut2Parameter DoiTuongUt2=Inlist(Doituong,'06','07','08')Return Ut2

Function ut3Parameter DoiTuongUt3=!Inlist(Doituong,'01','02','03','04','5A','5B','06','07','08','09')Return Ut3

11.4 Biến toàn cục (Global) và biến cục bộ (Private)a. Biến toàn cụcTrong một chương trình khi chúng ta khởi tạo giá trị cho các biến nhớ v à mảng,thì giá trị các biến đó sẽ tồn tại trong bộ nhớ cho đến khi ch ương trình kết thúcvà chương trình chạy sau không thể sử dụng được các biến nhớ đó. Nhưng cónhiều khi ta muốn chương trình chạy sau sử dụng được các biến đó thì làm thếnào?Để làm được điều này ta phải khai báo các biến đó là toàn cục bằng lệnh sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 138

PUBLIC <Danh sách các biến >Ví dụ:PUBLIC a,b,cNhư vậy a,b, c là biến toàn cục.Để khai báo mảng toàn cục ta dùng lệnh:PUBLIC [ARRAY] <Tên và thành ph ần mảng >Ví dụ:PUBLIC ARRAY A(4), B(4), C(4,5) ho ặcPUBLIC A(4), B(4) ,C(4,5)Chú ýC: Các biến toàn cục được khởi tạo bởi PUBLIC có giá trị ba n đầu là .F. Lệnh PUBLIC phải thực hiện trước, trước khi gán giá trị cho các biến. Các biến tạo ra trong cửa sổ lệnh là toàn cụcb. Biến cục bộKhi thực hiện một chương trình, nếu trong một chương trình con ta muốn dùngtên biến trùng với biến toàn cục, nhưng không muốn làm thay đổi biến toàn cụcthì nên khai báo biến đó là biến cục bộ theo lệnh sau:PRIVATE <Danh sách biến >Ví dụ:PRIVATE a, b, cThì biến a, b, c là biến cục bộ, nghĩa là nó chỉ có ý nghĩa trong chương trình conđó mà thôi. Sau đây là ví dụ về chương trình.Set talk offClearPUBLIC a, ba=1b=2Do InAn ?a, bProcedure InAnPrivate aa=150b=100?' a b '?a, bReturnKết quả sau khi chạy chương trình là: a b150 150 100 (giá trị trong chương trình con InAn)

1 1 100 (a là cục bộ, nên ra khỏi chương trình con a vẫn bằng 1)Lệnh PRIVATE còn có dạng khác:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 139

PRIVATE ALL [LIKE <Skel> | EXCEPT <Skel>]Ví dụ 1:Cục bộ cho tất cả các biến.PRIVATE ALLVí dụ 2:Cục bộ với những biến có chữ đầu là B.CPRIVATE ALL LIKE b*Ví dụ 3:Cục bộ với tất cả các biếnC, trừ biến có chữ đầu l à aPRIVATE ALL LIKE EXCEPT A*Ví dụ 4:Cục bộ với tất cả các biếnC, trừ biến có chữ đầu l à a và chữ thứ 3 là c.PRIVATE ALL LIKE EXCEPT a?c*Ví dụ 5: Cục bộ với tất cả các biến có 3 ký tự, trừ biến có chữ đầu l à A và chữthứ 3 là dPRIVATE ALL LIKE EXCEPT a?dChú ý:Biến khai báo ở chương trình chính là toàn cục, ví dụ trên có thể viết như sau:Set talk offCleara=1b=2Do InAn ?a, bProcedure InAnPrivate aa=150b=100?' a b '?a, bReturnc. Hiển thị biến nhớĐể hiển thị nội dung biến nhớ (tên biến, toàn cuc hay cục bộ, kiểu và độ lớn) hãydùng lệnh sau:DISPLAY MEMORY [LIKE <Skel>][TO PRINTER | TO FILE <Tên File >]d. Giải phóng các biến nhớĐể giải phóng các biến nhớ khỏi bộ nhớ h ãy thực hiện lệnh sau:RELEASE <Danh sách biến nhớ >Ví dụa=1b='Tin hoc'

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 140

c=.T.Release b,cDisplay memoKhi chạy chương trình chỉ có biến a được hiển thị.Lệnh giải phóng biến nhớ còn có cách viết khác:RELEASE ALL [ LIKE <skel>| EXCEPT <skel>]Ví dụ:D1=12D2=11C=4RELEASE ALL Like D*Hoặc có thể viết:D1=12D2=11C=4RELEASE ALL EXCEPT C*Chú ý: Chỉ có lệnh RELEASE <Danh sách biến > mới xoá đ ược biến toàn cục.Ví dụ:PUBLIC a1, a2,a3, bStore 10 to a1, a2, a3Store 2 To bRelease all like a*Display MemorySau khi chạy chương trình ta thấy biến a1,a2, a3 không bị xo á

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 141

Chương 12. Lệnh ghép ngang (JOIN) và lệnh cập nhật (UPDATE)

12.1 Lệnh JoinTạo một tệp CSDL mới từ tệp CSDL hiện h ành và một tệp CSDL thứ hai mởtrong vùng làm việc khác. Mỗi bản ghi của tệp CSDL mới đ ược tạo bởi cáctrường trong hai bản ghi tương ứng. Sau đây là cú pháp lệnh:JOIN WITH <expN> | WITH <expC>

TO <file>FOR <expL>[FIELDS <field list> | FIELDS LIKE <skel> | FIELDS EXCEPT

<skel>]Các mệnh đề trên có ý nghĩa như sau: <expN> | <expC>Xác định vùng làm việc của tệp CSDL thứ hai. Vùng làm việc có thể được xácđịnh qua biểu thức số <expN> hoặc qua biểu thức ký tự <expC>. TO <file><file> là tên của tệp CSDL mới được tạo thành từ lệnh trên. FOR <expL>Khi thực hiện lệnh JOIN mỗi bản ghi trong tệp CSDL hiện h ành sẽ được kết hợplần lượt với từng bản ghi trong tệp CSDL thứ hai, nh ưng chỉ những bản ghi thoảmãn điều kiện <expL>. [FIELDS <field list> | FIELDS LIKE <skel> | F IELDS EXCEPT <skel>]Chỉ những trường trong <field list> hoặc trong LIKE <skel> hoặc không phảitrong EXCEPT <skel> mới được kết nối, ví dụ:

FIELDS LIKE A*,P*FIELDS LIKE A*,P* EXCEPT PARTNO*

Ví dụ ta có hai tệp CSDL. Tệp thứ nhất có t ên HOSO.DBF với nội dung sau:Record# HOTEN NGAYSINH SBDC KHUVUC DOITUONG 1 Hoàng Thanh Hà 191180 99A311 3 11 2 Hoàng Trung Thành 231181 99A669 1 08 3 Nguyễn Anh Tuấn 250880 99A784 2 10 4 Vương Văn Hiệp 250778 99A971 2 09 5 Hoàng Văn Mạnh 300680 99A483 2 09 6 Hoàng Thọ Diện 281177 99A116 2 09 7 Vũ Thị Na 100479 99A492 1 08 8 Hoàng Văn Tường 260179 99A806 2 09 9 Nguyễn Văn Thuyết 210680 99A627 2 11 10 Bùi Thế Thuật 180281 99A633 2 10 11 Nguyễn Văn Đại 020879 99A171 2 09

12 Lê Thanh Nam 170880 99A504 2 09 13 Nguyễn Xuân Đô 041080 99A953 1 08

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 142

14 Đỗ Trí Duy 100481 99A123 2 09 15 Đinh Quang Hải 280479 99A328 2 10 16 Dương Thị Lan 230481 99A411 3 10 17 Nguyễn Quang Phú 240480 99A565 3 10 18 Hà Tất Thắng 151181 99A689 2 10 19 Bùi Duy Thức 100981 99A700 3 10 20 Lâm Hồng Hiệp 080180 99A223 3 11Tệp thứ hai có tên DIEMTHI.DBF có nội dung như sau:Record# SBDC TOAN10 LY10 HOA10 TONGDIEM30 1 99A311 5.5 4.5 6.8 16.8 2 99A669 6.5 4.3 6.4 17.2 3 99A784 7.5 5.9 7.5 20.9 4 99A971 6.5 6.0 7.0 19.5 5 99A483 5.6 7.4 4.6 17.6 6 99A116 4.8 6.2 5.0 16.0 7 99A492 5.8 6.6 5.1 17.5 8 99A806 6.8 6.9 3.7 17.4 9 99A627 6.9 6.1 4.9 17.9 10 99A633 6.9 5.4 5.6 17.9 11 99A171 7.0 5.7 6.6 19.3 12 99A504 7.0 5.4 6.8 19.2 13 99A953 3.0 4.2 5.7 12.9 14 99A123 4.1 4.4 5.3 13.8 15 99A328 4.1 8.7 5.4 18.2 16 99A411 4.1 7.6 4.3 16.0 17 99A565 4.1 6.8 7.3 18.2 18 99A689 5.1 6.2 8.6 19.9 19 99A700 5.1 6.6 3.1 14.8 20 99A223 6.3 6.1 8.8 21.2Ví dụ 1:Set talk offSelect 1Use HoSoSelect 2Use DiemThiJoin With HoSo To TepMoi For sbdc=HoSo.SbdcUse TepMoiBrowseKhi chương trình chạy ta được TepMoi như sau:

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 143

Record#SBDC TOAN10 LY10 HOA10 TONGDIEM30 HOTEN NGAYSINH KHUVUC DOITU ONG

1 99A311 5.5 4.5 6.8 16.8 Hoàng Thanh Hà 191180 3 112 99A669 6.5 4.3 6.4 17.2 Hoàng Trung Thành 231181 1 083 99A784 7.5 5.9 7.5 20.9 Nguyễn Anh Tuấn 250880 2 104 99A971 6.5 6.0 7.0 19.5 Vương Văn Hiệp 250778 2 095 99A483 5.6 7.4 4.6 17.6 Hoàng Văn M ạnh 300680 2 096 99A116 4.8 6.2 5.0 16.0 Hoàng Th ọ Diện 281177 2 09 7 99A492 5.8 6.6 5.1 17.5 Vũ Thị Na 100479 1 08 8 99A806 6.8 6.9 3.7 17.4 Hoàng Văn Tư ờng 260179 2 09 9 99A627 6.9 6.1 4.9 17.9 Nguyễn Văn Thuyết 210680 2 11 10 99A633 6.9 5.4 5.6 17.9 Bùi Thế Thuật 180281 2 10 11 99A171 7.0 5.7 6.6 19.3 Nguyễn Văn Đại 020879 2 09 12 99A504 7.0 5.4 6.8 19.2 Lê Thanh Nam 170880 2 09 13 99A953 3.0 4.2 5.7 12.9 Nguyễn Xuân Đô 041080 1 08 14 99A123 4.1 4.4 5.3 13.8 Đỗ Trí Duy 100481 2 09 15 99A328 4.1 8.7 5.4 18.2 Đinh Quang H ải 280479 2 10 16 99A411 4.1 7.6 4.3 16.0 Dương Th ị Lan 230481 3 10 17 99A565 4.1 6.8 7.3 18.2 Nguyễn Quang Phú 240480 3 10 18 99A689 5.1 6.2 8.6 19.9 Hà Tất Thắng 151181 2 10 19 99A700 5.1 6.6 3.1 14.8 Bùi Duy Th ức 100981 3 10 20 99A223 6.3 6.1 8.8 21.2 Lâm Hồng Hiệp 080180 3 11Ví dụ 2:Set talk offSelect 1Use HoSoSelect 2Use DiemThiJoin With HoSo To TepMoi For sbdc=HoSo.Sbdc Fields Hoso.Hoten, SBDC,TongDiem30Use TepMoiBrowseKhi chương trình chạy ta được TepMoi như sau:Record# HOTEN SBDC TONGDIEM30

1 Hoàng Thanh Hà 99A311 16.8 2 Hoàng Trung Thành 99A669 17.2 3 Nguyễn Anh Tuấn 99A784 20.9 4 Vương Văn Hiệp 99A971 19.5 5 Hoàng Văn Mạnh 99A483 17.6

6 Hoàng Thọ Diện 99A116 16.0 7 Vũ Thị Na 99A492 17.5 8 Hoàng Văn Tường 99A806 17.4

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 144

9 Nguyễn Văn Thuyết 99A627 17.9 10 Bùi Thế Thuật 99A633 17.9 11 Nguyễn Văn Đại 99A171 19.3 12 Lê Thanh Nam 99A504 19.2 13 Nguyễn Xuân Đô 99A953 12.9 14 Đỗ Trí Duy 99A123 13.8 15 Đinh Quang Hải 99A328 18.2 16 Dương Thị Lan 99A411 16.0 17 Nguyễn Quang Phú 99A565 18.2 18 Hà Tất Thắng 99A689 19.9 19 Bùi Duy Thức 99A700 14.8 20 Lâm Hồng Hiệp 99A223 21.2

12.2 Lệnh UPDATELệnh này dùng để cập nhật dữ liệu vào tệp CSDL hiện hành từ một tệp CSDLthứ hai đang mở trong một vùng làm việc khác. Cú pháp lệnh như sau:UPDATE ON <field>

FROM <expN> | <expC>REPLACE <field1> WITH <expr1>

[, <field2> WITH <expr2> ...][RANDOM]

Các mệnh đề trên có ý nghĩa như sau: ON <Field>Field là trường khoá, tệp CSDL hiện thời phải đ ược sắp xếp theo lệnh SORThoặc lệnh INDEX trên trường này theo thứ thự tăng dần. FROM <expN> | <expC>Xác định vùng làm việc của tệp CSDL thứ hai, nơi để lấy dữ liệu chuyển cho tệphiện thời. Vùng làm việc có thể được xác định qua biểu thức số <expN> hoặcqua biểu thức ký tự <expC>. REPLACE <field1> WITH <expr1> [, <field2> WITH <expr2> ...]

Trường <Field1> trong tệp CSDL hiện thời sẽ đ ược nhận giá trị <expr1> v.v.. RANDOMSẽ được dùng nếu tệp CSDL thứ hai không được sắp xếp theo trường khoá tăngdần. Nếu tệp CSDL thứ hai được sắp xếp tăng dần theo trường khoá thì mệnh đềnày không cần thiết và qúa trình cập nhật được tiến hành nhanh hơn.Giả sử ta có tệp Hoso.dbf có các trường sau:Record# HOTEN NGAYSINH SBDC TONG

1 Hoàng Thọ Diện 281177 99A116 0.00 2 Đỗ Trí Duy 100481 99A123 0.00 3 Nguyễn Văn Đại 020879 99A171 0.00 4 Lâm Hồng Hiệp 080180 99A223 0.00

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 145

5 Hoàng Thanh Hà 191180 99A311 0.00 6 Đinh Quang Hải 280479 99A328 0.00 7 Dương Thị Lan 230481 99A411 0.00 8 Hoàng Văn Mạnh 300680 99A483 0.00 9 Vũ Thị Na 100479 99A492 0.00 10 Lê Thanh Nam 170880 99A504 0.00 11 Nguyễn Quang Phú 240480 99A565 0.00 12 Nguyễn Văn Thuyết 210680 99A627 0.00 13 Bùi Thế Thuật 180281 99A633 0.00

14 Hoàng Trung Thành 231181 99A669 0.00 15 Hà Tất Thắng 151181 99A689 0.00 16 Bùi Duy Thức 100981 99A700 0.00 17 Nguyễn Anh Tuấn 250880 99A784 0.00 18 Hoàng Văn Tường 260179 99A806 0.00 19 Nguyễn Xuân Đô 041080 99A953 0.00 20 Vương Văn Hiệp 250778 99A971 0.00Và tệp Diem.dbf có các trường sau:Record# SBDC TOAN10 LY10 HOA10 TONGDIEM30 1 99A223 6.3 6.1 8.8 21.2 2 99A784 7.5 5.9 7.5 20.9 3 99A689 5.1 6.2 8.6 19.9 4 99A971 6.5 6.0 7.0 19.5 5 99A171 7.0 5.7 6.6 19.3 6 99A504 7.0 5.4 6.8 1 9.2 7 99A328 4.1 8.7 5.4 18.2 8 99A565 4.1 6.8 7.3 18.2 9 99A627 6.9 6.1 4.9 17.9 10 99A633 6.9 5.4 5.6 17.9 11 99A483 5.6 7.4 4.6 17.6 12 99A492 5.8 6.6 5.1 17.5 13 99A806 6.8 6.9 3.7 17.4 14 99A669 6.5 4.3 6.4 17.2 15 99A311 5.5 4.5 6.8 16.8 16 99A116 4.8 6.2 5.0 16.0 17 99A411 4.1 7.6 4.3 16.0 18 99A700 5.1 6.6 3.1 14.8 19 99A123 4.1 4.4 5.3 13.8 20 99A953 3.0 4.2 5.7 12.9Ta muốn đưa cột TongDiem30 của tệp CSDL Diem.dbf sâng cột Tong của tệpHoso.dbf theo trường khoá là SBDC, ta lập trình như sau:Set talk offClear

TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI

ELEC Trang 146

Select 1Use DiemSelect 2Use HosoIndex on sbdc to sbdc1Update On Sbdc From Diem Replace Tong With Diem.To ngDiem30 RandomSelect 2BrowseSau khi chạy chương trình ta có kết quả:Record# HOTEN NGAYSINH SBDC TONG 1 Hoàng Thọ Diện 281177 99A116 16.00 2 Đỗ Trí Duy 100481 99A123 13.80 3 Nguyễn Văn Đại 020879 99A171 19.30 4 Lâm Hồng Hiệp 080180 99A223 21.20 5 Hoàng Thanh Hà 191180 99A311 16.80 6 Đinh Quang Hải 280479 99A328 18.20 7 Dương Thị Lan 230481 99A411 16.00 8 Hoàng Văn Mạnh 300680 99A483 17.60 9 Vũ Thị Na 100479 99A492 17.50

10 Lê Thanh Nam 170880 99A504 19.20 11 Nguyễn Quang Phú 240480 99A565 18.20 12 Nguyễn Văn Thuyết 210680 99A627 17.90 13 Bùi Thế Thuật 180281 99A633 17.90 14 Hoàng Trung Thành 231181 99A669 17.20 15 Hà Tất Thắng 151181 99A689 19.90 16 Bùi Duy Thức 100981 99A700 14.80 17 Nguyễn Anh Tuấn 250880 99A784 20.90 18 Hoàng Văn Tường 260179 99A806 17.40 19 Nguyễn Xuân Đô 041080 99A953 12.90 20 Vương Văn Hiệp 250778 99A971 19.50Hoặc ta có thể viết lại chương trình để chạy nhanh hơn như sau:Set talk offClearSelect 1Use DiemIndex on SBDC to SbdDiemSelect 2Use HosoIndex on sbdc to sbdc1Update On Sbdc From Diem Replace Tong With Diem.TongDiem30Select 2Browse