Giáo trình Visual FoxPro 6.0

pdf 146 trang ngocly 80 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Visual FoxPro 6.0", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_visual_foxpro_6_0.pdf

Nội dung text: Giáo trình Visual FoxPro 6.0

  1. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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: DataBase 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 ELEC Trang 1
  2. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương 1: Làm quen với môi trường VF 1.1 Khởi động VF Có 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.0 Và 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ửa sổ 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ới cá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: ELEC Trang 2
  3. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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: ELEC Trang 3
  4. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Trong hộp thoại trên có các thành phần: Data, Document, Code và Other và 6 tab: 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ào cá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ác chươ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àm việc với Data, hãy chọn Tab Data, sau đó chỉ phần Data hiện ra: ELEC Trang 4
  5. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 Project 1. Bổ sung File Giả sử bạn cần bổ sung một File có đuôi *.dbf (bảng) v ào phần Free Tables của mộ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ện ra: Hãy chọn một tệp bảng (Giả sử ta chọn tệp Labels.dbf) v à sau đó chọn OK Như vậy tệp Labels.dbf đã được đưa vào Project (dự án) có tên DuAn1.PJX ở phần Free Tables. ELEC Trang 5
  6. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 2. Loại bỏ một tệp trong một dự án Giả sử với dự án mà ta vừa đưa tệp Labels.dbf vào, muốn loại bỏ nó hãy thao tá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 Remove v.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: ELEC Trang 6
  7. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Chọn New Table Sau đố 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 ELEC Trang 7
  8. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 1.5 Thêm chú thích (mô tả) File Nhiều khi ta muốn chú thích cho một File n ào đó, giả sử ta muốn chú thích File Labels.dbf là "Đây là tệp nhãn dùng cho việc in bì thư". Muốn vậy ta thao tác như 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: ELEC Trang 8
  9. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ác 1. 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ình muố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 Project Manager mới như sau: Đã có chú thích rồi! ELEC Trang 9
  10. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 thanh cô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ụ ELEC Trang 10
  11. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ác trong môi trường Windows, sẽ giúp cho việc thao tác nhanh v à chính xác. Đưa mộ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ểm Bạ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 ELEC Trang 11
  12. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Khi bạn chọn một thành phần nào đó trong Project Manager th ì các thành phần của Menu Bar tương ứng có thể có khác nhau. Ví dụ bạn chọn Documents/Form thì 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à Help Còn nếu bạn chọn Code /Program thì: ELEC Trang 12
  13. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 Manager Như 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 Data Nhó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à:  DataBases DataBases 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 đó. Trong DataBases 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át sinh 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 ghi vào tệp có tên TsKhoiA.dbf có hình ảnh sau: ELEC Trang 13
  14. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ường khá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ông tin 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ài trườ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ăn cứ 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ệt nam thường không qua 7 ký tự) ELEC Trang 14
  15. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ểm tuyển sinh thường là 2 chữ số phần nguyên, dấu phẩy thập phân và có thể hai chữ 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 Tables Trong thành phần này chứa các bảng tự do (nằm ngoài DataBases - CSDL)  Queries Dùng để truy vấn - tạo các Tables khác từ Tables nguồn, nghĩa l à sinh ra các tệp bảng từ những tệp bảng nguồn theo một số điều kiện n ào đó B. Documents Trong Documents có các thành phần như: Form, Reports và Labels.  Form Trong 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ọn New Form ta có hình sau: Ta có thể đặt các điều khiển lên Form bằng cách: ELEC Trang 15
  16. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 1. Chọn View/Form Controls Toolbars, sau đó ta có hộp đi ều khiển sau: Nút lệnh 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ột chươ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. Classes Dùng để tạo mới hoặc nối kết các lớp vào Project Manager D. Code Trong Code có Program, API Libraies và Applications  Program ELEC Trang 16
  17. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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à Applications Hai 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. Other Trong Other có 3 thành phần: Menus, Text Files và Other Files  Menus Thành phần này dùng để tạo các tệp Menus (*.mnx)  Text Files Dùng để tạo mmột tệp text hoặc nối kết một tệp text v ào Project Manager  Other Files Dù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ập Câu 1: Project Manager là gì? A. Là một chương trình B. Là một tệp CSDL C. 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ụ DataBases B. Công cụ Free Tables C. Công cụ Queries D. 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 /Tables B. Chọn DataBases /Tables/Tên tệp bảng C. Chọn DataBases /Nhóm Dữ liệu chứa bảng /Tables/T ên tệp bảng D. 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? ELEC Trang 17
  18. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI A. Công cụ Forms B. Công cụ Reports C. Công cụ Labels D. 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 Form B. Chọn Form /New C. Chọn Form /New/New Form D. 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ích Câu 7: Trong một DataBases có thể được phép có bao nhiêu tệp bảng? A. Chỉ 1 B. Hai tệp bảng C. Ba tệp bảng D. 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ảng B. Chọn tệp bảng /chọn Remove C. Chọn tệp bảng /chọn Remove sau đó chọn Delete D. Chọn Tables /Chọn tệp bảng /chọn Remove sau đó chọn Delete E. 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ào A. Chọn Data /Thành phần dữ liệu /Tables B. Chọn Data /Thành phần dữ liệu /Tables/Add C. 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 ra B. Chọn View /Form Controls ToolBars C. Tao một Form mới hoặc mở một tệp Form sau đó chọn View /Form Controls ToolBars ELEC Trang 18
  19. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương 2: Các loại Dữ liệu trong VF Trong 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ọn Window/Command Window, đồng thời dùng lệnh in (?),ví dụ gõ lệnh sau vào cửa sổ lệnhv: ?2+3 kết quả sẽ là 5 v.v 2.1 Hằng và biến 1. Hằng Trong VF có các loại hằng sau:   Hằng nguyên Viết bình thường như trong toán họcV: 12, -23, 0, -234 v.v   Hằng thực Dù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ến Là một vị trí trong bộ nhớ mà giá trị của nó có thể bị thay đổi trong khi chạy chươ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, S1 Tên biến không hợp lệ:-x, 2y,Dien tich, S 1 3. Các loại biến Trong 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ắt buộc). Ví dụ: m.DienTich, m.X, S1   Biến hệ thống Do 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 ELEC Trang 19
  20. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI   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ến A=123 (gán giá trị 123 cho biến A) Hoặc Store 123 To A Có thể gán một giá trị cho nhiều biến: Store 2 To A, B, C Ví dụ về làm việc với biến: A=12 B=20 S=A+B ?S 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 VF 1. Phép cộng: + Ví dụ: ?23+12 sẽ cho kết quả 35 2. Phép trừ: - ?5-10 sẽ cho kết quả -5 3. Phép nhân: * ?2*4 sẽ cho kết quả 8 4. Phép chia: / ?4/3 sẽ cho kết quả 1.33 5. Phép luỹ thừa: hoặc ^ ?2^3 sẽ cho kết quả 8 6. Phép lấy số dư: % ?5%3 sẽ cho kết quả 2 2.3 Các phép toán Logic trong VF Giá 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 sẽ cho kết quả .F. 2. Phép và: And ? (2 cho kết quả .T. ? (2 2) cho kết quả .F. Phép And chỉ đúng khi cả hai toán hạng đều đúng 3. Phép hoặc: or ? (2 2) cho kết quả .T. ? (2>4) or (1>2) cho kết quả .F. ? (2>4) or (1 cho kết quả .T. ? (2 cho kết quả .T. Phép or chỉ sai khi cả hai toán hạng cùng sai ELEC Trang 20
  21. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 2.4 Các phép quan hệ trong VF 1. Phép so sánh bằng: = ?(1=2) cho kết quả .F. 2. Phép so sánh nhỏ hơn: cho kết quả .T. 3. Phép so sánh lớn hơn: > ?(1>2) cho kết quả .F. 4. Phép so sánh nhỏ hơn hoặc bằng: cho kết quả .T. 5. Phép so sánh lớn hơn hoặc bằng: >= ?(1>=2) cho kết quả .F. 6. Phép so sánh không bằng: cho kết quả .T. 7. Phép thuộc dùng cho văn bản: $ ?("abc" $ "mnabcd") cho kết quả .T. ?("123" $ "dfsabc") cho kết quả .F. 2.5 Các phép toán về chuỗi ký tự trong VF 1. Phép kết nối chuỗi: + ?"abc"+"de" 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" cho kết quả là "abcde" Còn nếu dùng + ?"abc "+"de" cho kết quả là "abc de" 2.6 Kiểu dữ liệu Character Khi gặp phép gán: A="Tin học", ta hiểu ngay biến A có kiểu Character. Vậy kiểu Character 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" 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ắt buộ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 " B=" học " ?ALLTRIM(A)+ALLTRIM(B) s ẽ cho kết quả: "Tinhọc " Ta cũng có thể viết gọn: ?ALLT(A)+ALLT(B) 2. Hàm ASC () ELEC Trang 21
  22. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Trả về mã ASCII của một ký tự: ?ASC("A") sẽ cho kết quả 65 ?ASC("B") sẽ cho kết quả 66 3. 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" B="Hoan" ?AT(A,B) sẽ cho kết quả 3 vì chuỗi A xuất hiện bắt đầu từ vị trí thứ 3 trong chuỗi B Còn nếu: A="an" B="an nhan" ?AT(a,b,2) 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 sẽ cho giá trị .F. ?BETW(8, 5, 9) sẽ cho giá trị .T. ?BETW("c", "a", "n") 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) cho kết quả là ký tự A 5. Hàm LEN () Cho biết độ dài của chuỗi. A="Hoàng Xuân Hãn" ?Len(a) 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ường A=" CHAO" ?Lower(A) sẽ cho kết quả "chao" 7. Hàm UPPER () Chuyển các ký tự chữ thường sang chữ hoa A=" chao" ?Upper(A) sẽ cho kết quả "CHAO" 8. LTRIM() Cắt các khoảng trắng phía trái của chuỗi A=" Tin học" ?LTRIM(a) sẽ cho kết quả "Tin học" ELEC Trang 22
  23. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 9. RTRIM() Cắt các khoảng trắng phía phải của chuỗi A=" Tin học " ?RTRIM(a) 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ữ hoa A=" TIN HOC QUAN LY" ?Proper(a) 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ỗi a="Tin hoc" ?Left(a,2) sẽ cho kết quả "Ti" 12. Hàm RIGHT () Cho kết quả n ký tự bên phải của chuỗi a="Tin học" ?Right(a,2) sẽ cho kết quả "ọc" 13. Hàm Str () Chuyển số thành văn bản ?"Km '+str(12) sẽ cho kết quả "Km 12", còn nếu viết: ?"Km"+12 sẽ báo lỗi vì văn bản không thể cộng với số được 14. Hàm SUBSTR () Cú pháp: SUSTR(Xau,m,n) Cho kết quả n ký tự trong Xau từ ký tự thứ m a="Chao anh" ?SubStr(a,2,3) sẽ cho kết quả "hao" 2.7 Kiểu Date và Date Time 1. Hàm Date () Hàm Date ()cho biết ngàyc, tháng, năm hiện thời: ?Date() sẽ cho kết quả 7/28/01 2. Hàm Datetime () Cho kết quả là ngày và giờ hiện thời ?Datetime() sẽ cho kết quả 7/28/01 08:12:56 AM 3. Hàm CTOD () Chuyển đổi biểu thức ký tự sang dạngh kiểu Date ?CTOD("12/04/76") sẽ cho dứ liệu kiểu Date 12/03/76 4. 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}) 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} sẽ cho kết quả 2 ELEC Trang 23
  24. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 5. Hàm Day5 () Trả về ngày lấy từ đại lượng Date ?Day(Date()) sẽ cho kết quả là 28 (vì ngày hiện thời là 7/28/01 6.Hàm Month () Trả về tháng lấy từ đại lượng Date ?Month(Date()) sẽ cho kết quả là 7 (vì ngày hiện thời là 7/28/01 7. Hàm Year () Trả về năm lấy từ đại lượng Date ?Year(Date()) sẽ cho kết quả là 2001 (vì năm hiện thời là 7/28/01 8. Hàm Cmonth () Trả về tháng (bằng văn bản) lấy từ đại l ượng Date ?Cmonth(Date()) sẽ cho kết quả July (tháng 7) 9. Hàm CDOW () Trả về thứ trong tuần ?CDOW(Date()) sẽ cho kết quả Saturday (vì ngày hiện thời là 28/07/01) ?CDOW({^2001-07-27}) sẽ cho kết quả Friday Chú ý: 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 Date Ví dụ: Người Mỹ thường theo trật tự: mm-dd-yy: SET DATE AMERRICAN ?DATE() sẽ cho kết quả 07-28-01 (tháng 7 ngày 28 năm 2001) SET DATE FRENCH ?DATE() 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,5807 Nghĩ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 ?Tien sẽ cho kết quả 1000.0000 (tự động đặt 4 chữ số sau dấu chấm thập phân) 2. Các lệnh SET Dấ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" Tien=$1000 ELEC Trang 24
  25. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI @10,1 Say Tien Function "$99,999.99" s ẽ cho kết quả VND1000.0000 Bạn sẽ hiểu lệnh in: @10,1 Say Tien Function "$99, 999.99" ở phần sau. C òn nế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" Tien=$1000 SET CURRENCY RIGHT @10,1 Say Tien Function "$99,999.99" 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 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 ?Set("Currency") sẽ cho kết quả "Left" 2.7 Dữ liệu kiểu Logic Như đã nói ở phần trên, dữ liệu này có hai giá trị là: .T. và .F. (đúng và sai). Khi gá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. ?a sẽ cho kết quả .T. a=.F. ?a sẽ cho kết quả .F. a=(5>9) ?a sẽ cho kết quả .F. a=(1 ?a 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ểu trườ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) sẽ cho kết quả 4 a=10 b=20 ?Abs(a-b) sẽ cho kết quả 10 2. Hàm INT () Trả về phần nguyên của một số ?Int(3.34) sẽ cho kết quả 3 ?Int(2.2*3) sẽ cho kết quả 6 Nghĩa là đối số có thể là một số hoặc một biểu thức. ELEC Trang 25
  26. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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) cho kết quả 6 ?Max('a','b','n') cho kết quả 'n', vì mã của n lớn hơn mã của a và b 4. Hàm Min () Trả về giá trị nhỏ nhất trong các đối số của hám ?Min(3,5,6,-5) cho kết quả -5 ?Min('a','b','n') cho kết quả 'a', vì mã của a nhỏ hơn mã của b và n 5. Hàm Mod () Trả về số dư của phép chia ?Mod(6,4) cho kết quả 2 ?Mod(6.1,3.2) cho kết quả 2.9 6. Hàm Round () Trả về giá trị sau khi đã làm tròn Cú 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) 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) 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) 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) 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) 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) 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' b=Val(a) ?b+10 sẽ cho kết quả 130 8. Hàm SQRT () Kết quả là căn bậc hai của một số dương. ?Sqrt(9) cho kết quả 3 9. Hàm EXP () Trả về kết quả của exT ?Exp(1) cho kết quả 2.72 ?Exp(0) cho kết quả 1.00 ?Exp(2) cho kết quả 7.39 10. Hàm LOG () ELEC Trang 26
  27. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Đây là hàm logarit cơ số e. ?Log(2.72) cho kết quả 1 ?Log(1) cho kết quả 0.00 ?Log(2) cho kết quả 0.69 11. Các hàm lượng giác ?Sin(3.14) cho kết quả 0.00 ?Cos(3.14) cho kết quả -1.00 ?Tan(3.14) cho kết quả 0.00 2.9 Dữ liệu kiểu General Kiể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ào CSDL. 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 MEMO Dù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ứa vù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 b=cos(6) c=log(12) d=exp(6) ELEC Trang 27
  28. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI s1=a+b s2=c+d Tich=s1*s2 ?Tich Đú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 b=5 c=-7 Delta=b*b-4*a*c x1=(-b+Sqrt(delta))/(2*a) x2=(-b-Sqrt(Delta))/(2*a) ?x1 ?x2 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 ẩn 18. 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 đầu Biến b lưu tổng của 5 nhân viên tiến theo v.v Hãy dùng phép gán để tính tổng lương của 20 nhân viên trên. ELEC Trang 28
  29. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương 3: Database và Table Thuật ngữ Database (CSDL) và Table (bảng) là hai khái niệm không đồng nhất trong VF. Database (tệp có dạng *.dbc) sẽ tham chiếu đến các quan hệ thông tin chứa đựng trong một hay nhiều Table (tệp có dạng *.dbf). Chúng ta tạm h ình dung 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 quan hệ giữa các Table và các thành phần khác trong đó, Database cung cấp cấu trúc dùng để lưu trữ dữ liệu, thiết lập các Procedure (thủ tục) để xử lý các mối quan hệ giữa các Table và các thành phần khác như View, Queries v.v Chương này chúng ta sẽ đề cấp đến một vấn đề cơ bản là: Tổ chức một Database và tạo dựng cá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ài toá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ần nhỏ 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ải tuâ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ụng nhằm nhanh chóng giúp cho người học có công cụ để giải quyết ngay các công việ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ơn sau 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ưng trướ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ển sinh, nhân viên nhận hồ sơ sẽ căn cứ vào hồ sơ mà tạo một tệp HoSoKhoiA.dbf có hình ảnh sau: HoDem | Ten | NgaySinh | SBD ELEC Trang 29
  30. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Sau khi chấm điểm xong, nhân viên phòng máy tính lại tổ chức tệp DiemKhoiA.dbf, có dạng sau: SBD | Toan | Ly | Hoa | Tong| UuTien| KhuVuc Sau đâ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: ELEC Trang 30
  31. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI   Hãy chuyển đến thư mục C:\ VF6o và gõ tên tệp dự án là: TuyenSinh.pjx và 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.dbc Sau 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 đó ta có hộp thoại:   Hãy gõ tên tệp HoSo.dbc vào và chọn Save, sau đó ta có: ELEC Trang 31
  32. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Đâ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: ELEC Trang 32
  33. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI   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 ELEC Trang 33
  34. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI   Chuyển sang cột Type chọn Integer Như 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ích và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ó: ELEC Trang 34
  35. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 CSDL CSDL 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ất 3.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 Modify Sau đó CSDL hiện ra như sau: 3.2.2 Sắp xếp các bảng trong CSDL Nế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 ELEC Trang 35
  36. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 3.2.3 Thiết lập mối quan hệ giữa các Table Giả sử với hai bảng HoSoKhoiA.dbf v à DiemKhoiA.dbf ở trênG, nếu cần biết thô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ệp HoSoKhoiA.dbf đối chiếu với sbd tương ứng trong tệp DiemKhoiA.dbf để lấy thông tin ra. Trường sbd là duy nhất, nghĩa là Họ tên, ngày sinh v.v có thể trùng nhau nhưng sbd thì không trùng nhau. Ta gọi trường sbd là trường khoá. Ta nói rằ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 ường sbd. 2. Thiết lập mối quan hệ   Mở CSDL HoSo: ELEC Trang 36
  37. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI   Đưa trỏ chuột vào trường Khoá (indexsbd) kéo sang trường Indexsbd của tệp DiemKhoiA.dbf. Như vậy hai trường Sbd đã được đặt mối quan hệ. Quan hệ 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ác thao 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 CSDL Từ cửa sổ lệnh bạn gõ: Open Database C:\VF60\HoSo.dbc Modify Database 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: Modify 2. Hiển thị dữ liệu chọn: Browse 3. Xoá bảng chọn: Delete v.v Chúng ta cũng có thể: Open Database C:\VF60\HoSo use? ELEC Trang 37
  38. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Sau đó ta có hộp thoại: Chọn một têp, giả sử chọn tệp HoSoKhoiA.dbf và chọn OK Nghĩa là tệp HoSoKhoiA.dbf đã được mở và sau đây là cách dùng một số lệnh. 1. Lệnh Browse Lệ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   Hiển thị một số trường ELEC Trang 38
  39. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Browse Field Hodem, ten   Hiển thị có điều kiện Browse for sbd>=6 (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 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 Chỉ hiển thị những bản ghi có năm sinh bằng 1982, v.v ELEC Trang 39
  40. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 2. Lệnh EDIT Lệnh Edit có cú pháp như lệnh Browse, như hiển thị theo cột, ví dụ: Edit for year(ngaysinh)=1982 3. Lệnh Append Dùng để nối thêm các bản ghi vào sau bảng: Append 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 + W 4. Lệnh Modify Structure Dùng để sửa cấu trúc bảngD, ví dụ: Modify Structure 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ài trườ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 Delete (đánh dấu bản ghi thứ 4) Pack (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ứ m Go 2 Delete next 3 Pack Như vậy xoá 3 bản ghi: 2,3,4   Xoá từ bản ghi thứ n đến cuối tệp Go 7 Delete Rest Pack 6. Phục hồi bản ghi đã bị đánh dấu xoá Go 3 Delete next 4 Recall all (4 bản ghi đã bị đánh dấu, nhưng ta lại không muốn xoá nên phụ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 ELEC Trang 40
  41. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 7. Đếm số bản ghi   Đếm xem có bao nhiêu bản ghi Count all   Đếm có điều kiện Count for Year(ngaysinh)=1982   Đếm có lưu Count for sbd>=2 To A ?A biến A được lưu kết quả. 8. Tính tổng trường Ví dụ ta có bảng với các trường sau: Hoten, luong, con Sum luong (tính tổng cột luong) Sum luong to S Sum luong for luong>=400000 v.v 9. Tính tổng trung bình Average luong Average luong for year(ngaysinh)=1980 Average luong to X for year(ngaysinh)=1980 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 /A Như 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 /D 11. Sắp xếp bằng lệnh Index Lệ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, ghi trậ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ường hợp người ta hay dùng lệnh này. Ví dụ: Index on sbd to sbdindex 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ệp Go Top (đưa trỏ về đầu tệp) Go Bottom (đưa trỏ về cuối tệp) 13. chuyển dịch bản ghi Skip 1 (tiến 1 bản ghi) Skip 3 (tiến 3 bản ghi) Skip -1 (lùi 1 bản ghi) v.v ELEC Trang 41
  42. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 14. Chèn một bản ghi trống Giả sử ta muốn chèn một bản ghi, để trở thành bản ghi thứ 3, hãy gõ: Go 3 Insert before (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 ành thứ 5, v.v hoặc có thể viết: Go 2 Insert (Chèn sau bản ghi thứ 2) 15. Lệnh thay thế   Thay đổi nội dung của 1 trường Replace all Luong With Luong+Luong*0.15 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ện Replace all Luong With Luong+Luong*0.15 For Luong 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 Create Chúng ta cũng có thể tạo một bảng tự do bằng lệnh: Create , ví dụ: Create C:\VF60\NhanSu 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ên hoặ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ấu chấm thập phân ở phần Decimal. ELEC Trang 42
  43. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ũi tên và chọn Ascending (tăng dần) hoặc Descendin g (giảm dần), sau khi chọn một trong 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ạn nhậ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 Kiểu dữ liệu Độ dài Giải thích tên Field (Fieldname) (Type) Width MNV Integer 4 Mã Nhân Viên Hodem Character 20 Họ và tên đệm (lót) Ten Character 7 Tên nhân viên GT Logical 1 Giới tính NS Date 8 Ngày sinh SoCon Integer 1 Số con BacLuong Numeric 9 Bậc lương DiaChi 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:\VF60 b. 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ân viê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 ELEC Trang 43
  44. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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à Character f. Hãy tạo chỉ mục và đặt khoá chính cho trường MNV g. Hãy hiển thị bảng đó băng lệnh Browse h. 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 Kiểu dữ liệu Độ dài Giải thích tên Field (Fieldname) (Type) Width MNV Character 4 Mã Nhân Viên TDVH Character 10 Trình độ văn hoá NN Character 7 Ngoại ngữ DangVien Logical 1 Đảng viên hoặc không DoanVien Logical 1 Đoàn viên hoặc không TuoiDang Integer 1 Tuổi đảng CV 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 Database b. Thiết lập mối quan hệ giữa hai trường MNV 3. Bạn tự thiết kế một Project về việc quản lý th ư viện 4. Cũng như câu hỏi 3, nhưng về quản lý lớp học của bạn ELEC Trang 44
  45. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ELEC Trang 45
  46. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương 5: FORM, Report và Label 5.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ế t kế 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 (ứng vớ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ột dạ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 Wizard Selection hiện ra và chọn Form Wizard. Vì ta muốn giao diện ứng với một bảng, nên trong hộp thoại trên hãy chọn Form Wizard và chọn OK. Ta có hộp thoại: ELEC Trang 46
  47. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Chọn CSDL (HOSO), chọn bảng (HOSOKHOIA), chọn các tr ường mà bạn cần ứng với bảng đã chọn, giả sử: Hodem, ten, ngaysinh, chuyển sang selected Fields, ta có hình ảnh sau: Chọn Next >, sau đó ta có: ELEC Trang 47
  48. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Hãy chọn một thành phần ở Style - giả sử ta chọn Embossed và một thành phầ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ại tiếp: ELEC Trang 48
  49. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Bạn hãy chọn: Save form for later use (Lưu Form vừa tạo không chạy thử) hoặc Save and run form (lưu Form và chạy thử) hoặc Save Form and modify it in Form 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 as hiệ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ảng Prev : Về bản ghi trước Next : tiến 1 bản ghi Botton: Về cuôí bản ghi Find : Tim kiếm bản ghi có điều kiện Print : In Add : Nói thêm bản ghi Edit : soạn hoặc sửa bản ghi Delete: Xoá bản ghi Exit:Thoát 5.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ọn Form Wizard, sau đó ta có hộp thoại: ELEC Trang 49
  50. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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ạn chọn bảng DiemKhoiA và tải các trường sang phải như hình sau: ELEC Trang 50
  51. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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ọn Next >, 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. ELEC Trang 51
  52. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 5.2 Report và Label Report 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 Report Chúng ta có thể thiết kế Report, thể hiện dữ liệu ở nhiều dạng khác nhau khi in ra giấy. Dùng Report Designer hay Report Wizard chúng ta có th ể thiết kế tạo ra cá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: ELEC Trang 52
  53. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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ãy chọn Next >, ta có tiếp: ELEC Trang 53
  54. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Đến đây bạn chọn kiểu bố cục dữ liệu, giả sử bạn chọn Executive và chọn Next>, 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ả: ELEC Trang 54
  55. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ó: ELEC Trang 55
  56. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Đến đây bạn có thể chọn Preview để xem qua dạng của Report, nếu vừa ý hãy chọ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ình sau: 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ách giữa chúng. ELEC Trang 56
  57. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Định dạng lại Font và kích cỡ Font Chọ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 Label Label 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ọc cho 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ông cụ Label Designer. 1. Sử dụng công cụ Label Wizard Công cụ này là cách dễ nhất để tạo Label, tao xong bạn có thể sửa nó bằng Label Designer. Để 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ạn chọn CSDL: HOSO và bảng là HOSOKHOIA, chọn Next >, ta có: ELEC Trang 57
  58. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 Label chỉ chứa 3 trường là: Hodem, Ten, sbd mỗi trường ngăn cách bởi dấu gạch (hoặc dấ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ừ ELEC Trang 58
  59. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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ọn Next > 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ệp Label 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ều dò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ó: ELEC Trang 59
  60. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 Report Controls lên màn hình, bằng cách chọn: Chọn View /Report Controls Toolbar ta có: a. Đưa một văn bản vào Report hoặc Label làm chức năng tiêu đề hay một chứ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ần gõ 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ết thúc.  Gõ xong, hoặc đang gõ bạn có thể chọn Font và kích cỡ Font cho nó (chọn Format /font)  Bạn cũng có thể đặt màu nền hoặc màu chữ quan hộp Color Palette (chọn View /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: ELEC Trang 60
  61. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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 Labal Chọn 3, đưa trỏ chuột vào Report hoặc Label, rê. d. Bao bằng một hình chữ nhật Chọ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 ELEC Trang 61
  62. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 File hiệ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 Label Giả 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 nam Trường ĐHQL &KD HN Độc lập - Tự do - Hạnh phúc Thẻ dự thi ảnh Hoten : Ngày sinh: Sbd : Hà nội ngày 25/6/2001 Chủ tịch HĐTS Ts. Lê Khắc Đoá Nguồn dữ liệu là bảng HoSoKhoiA trong CSDL HoSo (nh ư các phần trên) ELEC Trang 62
  63. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 để in cho hợp lý. ELEC Trang 63
  64. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Bài tập chương 5: 1. Hãy thao tác lại các cách tạo Report và Label 2. Cho bảng DiemKhoiA trong CSDL HOSO. H ãy tạo một Report để in danh sách đỗ, bao gồm các trường SBD và Tong 3. Cho hai bảng: HoSoKhoiA và DiemKhoiA có mối quan hệ qua SBD, hãy tạo một Report bao gồm các trường Hodem, ten, sbd, Tong (sắp xếp theo sbd tăng dầ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à địa chỉ 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ãy tạ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. ELEC Trang 64
  65. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương 6: Lập trình trong VF Lậ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áo danh 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 12 Rõ 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\DiemKhoiA Browse for sbd=12 Sau 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ải lấy nội dung của trường Toan nhân với 1.2 sau đó lại g õ vào trường Toan đúng và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ời gian! nhưng nếu lập trình bạn chỉ cần viết như sau: Use C:\vf60\DiemKhoiA Replace all Toan With Toan*1.2 Replace Tong With Toan+Ly+Hoa Browse ở lệnh trên: Replace all Toan With Toan*1.2 có nghĩa là nội dung của trường Toan (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 With Toan+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ập trì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ình trong VF, cho dù có bạn còn quan niệm là không nên đưa phần lập trình vào chương trình Tin học ứng dụng (đại cương, văn phòng). Tuy nhiên cũng cần phải nó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ột cô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 VF 6.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) ELEC Trang 65
  66. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Trong PM chọn Code /Program/New, sau đó cửa sổ để soạn thảo ch ương trì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ình có tên Vidu1.prg (prg là viết tắt chữ program =prg) 2. Dùng Menu File ELEC Trang 66
  67. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  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, sau khi 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 , 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ình Sau 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 Run Chươ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: ELEC Trang 67
  68. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI  Chọn tệp Vidu1.prg và chọn Do 3. Dùng cửa sổ lệnh  Chuyển về cửa sổ lệnh  Gõ: Do C:\VF60\Vidu1 6.1.3 Sửa chương trình Khi 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 (hay cò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ại 3. Trong cửa sổ lệnh Gõ: Modify Command C:\VF60\ViDu1 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ửa xong hãy đóng lại. 6.1.4 Ghi chú trong chương trình Khi đọ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ời chú thích. Lời chú thích máy sẽ bỏ qua, nhưng với con người thì laị quan trọng bởi vì nhờ chú thích mà bạn biết được nội dung đó cái gì?. Để ghi chú trong ELEC Trang 68
  69. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 sbd Use C:\VF60\DiemKhoiA && Mở bảng Browse For sbd=12 && Hiển thị bản ghi có số báo danh là 12 Close all && lệnh đóng tất cả các bảng 6.1.5 Hằng, biến Trong 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ến Việ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 A Biến A có kiểu Character. Kiểu số (Numeric) X=120 Store 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 Logic L=.T. hoặc L =.F. 2. Các loại biến Như đã nói trong chương 2, có 3 loại biến: Biến nhớ, biến hệ thống và biến vùng. Biến nhớ nên có ký tự m, một dấu chấm và sau đó là tên biến để khỏi nhầm với biến khác (không bắt buộc). Ví dụ m.DienTích, m.Luong, v.v n ên đặt tê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*BanKinh dễ hiểu hơn làd: m.D=p*R*R Biế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á 10 kí 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ạn viế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. ELEC Trang 69
  70. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 6.2 Một số lệnh về lập trình 1. Vào ra dữ liệu Để vào một số từ bàn phím ta dùng lệnh sau: Input To Ví dụ: Input "Hãy cho biết tuổi của bạn? " To Tuoi Gặ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ạn gõ tuổi của bạn. Giả sử bạn gõ 24 thì giá trị số 24 được lưu trong biến có tên là Tuoi Vào một văn bản từ bàn phím ta dùng lệnh sau: Accept To Ví dụ: Accept "Hãy gõ vào một câu kiều?" TO Kieu Gặ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ạn gõ một câu Kiều. Giả sử bạn g?: " Kiều càng sắc sảo mặn mà" 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 To Ví dụ: Wait "Bạn gõ vào một ký tự?" To C Giả sử bạn gõ: Q thì Ký tự Q được lưu trong biến có tên C. Còn nếu viết: Wait [ ], thì khi bạn gõ một biến bất kỳ, máy sẽ vượt qua lệnh đó Ví dụ: Wait Wait "Gõ phím để tiếp tục!" Hiển thị nội dung của biến lên màn hình Ta 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 ?A Ta có kết quả: 12 12 12 Còn nếu: ??A ??A ELEC Trang 70
  71. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ??A Ta có kết quả: 12 12 12 Ví dụ về lập trình: Nếu đứng trong cửa sổ lệnh hãy gõ: Modify Command C:\VF60\TongTrungBinh.prg Sau khi gõ máy chuyển sang cửa sổ chương trình. Trong cửa sổ này hãy gõ các lệnh sau: Clear && Xoá màn hình Input "Cho biết tuổi của bạn?" To TCon Input "Cho biết tuổi bố của bạn?" To TBo TuoitrungBinh=(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 Và bạn gõ vào: 40 20 Kết quả sẽ là: Tuổi trung bình làT: 30 Chào bạnC, hẹn gặp lại! 2. Lệnh điều kiện Lệnh này có hai dạng: Dạng 1: IF ENDIF Hoạt động của lệnh này như sau: Nếu đúng thì thực hiện Nếu sai thì bỏ qua lệnh IF Ví dụ: IF x>=3 x=x+1 ENDIF Có 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 X Dạng 2: IF ELSE ELEC Trang 71
  72. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ENDIF Nếu N đúng thì thực hiện bỏ Nếu N sai thì bỏ thực hiện Ví dụ: IF X>=3 x=x+1 ELSE x=x+10 ENDIF Nghĩ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ải phươ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 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ím Input "Vào a =" To a Input "Vào b =" To b Input "Vào c =" To c Tính Delta Delta=b*b-4*a*c Dùng lệnh IF dạng 2 IF Delta , sau đó ta gõ: 3 5 -9 Kết quả máy hiện lên màn ảnh: X1=1.08876 X2=-2.75542 Chú ý: 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. ELEC Trang 72
  73. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 3. Lệnh chọn3 Lệnh IF chỉ chọn một nhánh trong 2 nhánh, nếu có nhiều nhánh th ì chúng ta cũ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 là thanh niên Nếu Tuoi >30 thì hiển thị: Bạn hết tuổi thanh niên Ta có đoạn mã với lệnh IF như sau: IF 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 Nhóm lệnh 1 CASE ELEC Trang 73
  74. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI CASE ENDCASE Nếu đúng thì thực hiện và ra khỏi lệnh DO CASE Nếu không có một nào đúng, thì ra khỏi DO CASE mà không thực hiện một nào cả. Dạng 2: DO CASE CASE Nhóm lệnh 1 CASE CASE OTHERWISE ENDCASE Nếu các , , đều sai th ì thực hiện Sau đây là một ví dụ về xem lịch học trong tuần: Set talk off Set date French Clear Input "Bạn hỏi thứ mấy?" To Thu Do 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 ELEC Trang 74
  75. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ? " 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 CASE như 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ím Input "Vào a =" To a Input "Vào b =" To b Input "Vào c =" To c Tính Delta Delta=b*b-4*a*c Do Case Case Delta 0 X1=(-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 EndCase 4. Lệnh lặp For Giả 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=0 For i=1 To 1001 Step 2 && Từ i =1 đến 1001 bước 2 S=S+i EndFor ELEC Trang 75
  76. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Hoạt động của lệnh For giống như cách tính trên, nghĩa là: Bước 1: i=1 Bước 2: Tính S: S=S+1 Bước 3: Tăng I: I=I+2 Bước 4: Nếu I = TO STEP ENDFOR Ví dụ 1V: Như bạn đã biết, trong C:\ VF60 ta có bảng DiemKhoiA.dbf. Hãy dù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 off Use C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiA Count to n && đếm xem có bao nhiêu bản ghi, lưu vào biến n For i=1 to n && Lệnh FOR Go 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 Tong Wait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phím Clear && Xoá màn hình Endfor Ví 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ệp HoSoKhoiA 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ệp HoSoKhoiA, vùng 2 cho tệp DiemKhoiA bằng cách: Select 1 && Chọn vùng 1 Use C:\VF60\HoSoKhoiA Select 2 && Chọn vùng 2 Use C:\VF60\DiemKhoiA ELEC Trang 76
  77. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Về sau ta chỉ cần chọn: Select 1 th ì làm việc ngay với tệp HoSoKhoiA mà không cần mở lại, v.v Chương trình như sau: Select 1 Use C:\VF60\HoSoKhoiA Index On Sbd To IndexHS && Xếp tăng dần theo Sbd bằng lệnh Index Select 2 Use C:\VF60\DiemKhoiA Index On Sbd To IndexDi && Xếp tăng dần theo Sbd bằng lệnh Index Count To n For i=1 To n Select 1 && Về tệp HoSoKhoiA Go i ?Hodem, ten, ngaysinh,sbd Select 2 && Về tệp DiemKhoiA Go i ??Toan, Ly, Hoa, Tong EndFor 5. Lênh lặp DO WHILE Lệnh này có dạng như sau: DO WHILE ENDDO Hoạt động của lệnh này như sau: Chừng nào mà còn đúng thì thực hiện , còn sai thì ra khỏi lệnh DO WHILE. Ví dụ trên có thể viết bằng lênhụ DO WHILE như sau: Set Talk off Use C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiA Count to n && đếm xem có bao nhiêu bản ghi, lưu vào biến n i=1 Do While i<=n && Lệnh Do While Go 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 Tong Wait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phím Clear && Xoá màn hình I=I+1 &&Tăng i thêm 1 EndDo Nế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 ELEC Trang 77
  78. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI EOF ()cho gía trị .T. nếu con trỏ bản ghi đã chỉ cuối tệpc, nếu con trỏ bản ghi chưa chỉ cuối tệp thì EOF ()=.F. Ví dụ trên có thể viết như sau: Set Talk off Use C:\VF60\DiemKhoiA &&Mở bảng DiemKhoiA Do 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 Tong Wait "ấn phím để tiếp tuc" && Lệnh Wait tạm dừng để chờ bạn ấn 1 phím Clear && Xoá màn hình Skip &&Dịch tiến 1 bản ghi EndDo Ví dụ ứng với hai tệp trên, ta viết lại như sau: Select 1 Use C:\VF60\HoSoKhoiA Index On Sbd To IndexHS && Xếp tăng dần theo Sbd bằng lệnh Index Select 2 Use C:\VF60\DiemKhoiA Index On Sbd To IndexDi && Xếp tăng dần theo Sbd bằng lệnh Index Do While Not Eof() Select 1 && Về tệp HoSoKhoiA ?Hodem, ten, ngaysinh,sbd Skip Select 2 && Về tệp DiemKhoiA ??Toan, Ly, Hoa, Tong Skip EndDo 6. Duyệt dữ liệu bằng vòng lặp SCAN ENDSCAN Lệnh này tự động duyệt dữ liệu từ Record đầu cho đến Record cuối. Cú pháp như sauL: SCAN [ ][FOR /WHILE ] [LOOP] [EXIT] ENDSCAN Sau đâ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ứ 10 Use C:\VF60\DiemKhoiA Go 3 Scan Next 8 && duyệt 8 bản ghi từ bản ghi thứ 3 ELEC Trang 78
  79. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI ?sbd, tong EndScan Ví dụ 2: Duyệt từ bản ghi thứ 8 đến hết tệp Use C:\VF60\DiemKhoiA Go 8 Scan Rest && duyệt từ bản ghi thứ 8 đến hết tệp ?sbd, tong EndScan Ví dụ 3: Duyệt những bản ghi chẵn Use C:\VF60\DiemKhoiA Scan For Mod(Recno(),2)=0 && Recno()là hàm cho giá tr ị bản ghi hiện thờil ?sbd, tong EndScan Ví dụ 4: Duyệt, chừng nào gặp Tong >20 thì dừng Use C:\VF60\DiemKhoiA Scan While Tong<=20 ?sbd, tong EndScan Ví dụ 5: Duyệt, chừng nào gặp số thứ tự bản ghi chia hết cho 3 th ì thoát Use C:\VF60\DiemKhoiA Scan If Mod(Recno(),3)=0 Exit EndIf ?sbd, tong EndScan Ví dụ 6: Duyệt, chừng nào gặp số thứ tự bản ghi chẵn thì bỏ không in Use C:\VF60\DiemKhoiA Scan If Mod(Recno(),3)=0 Loop EndIf ?sbd, tong EndScan ELEC Trang 79
  80. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 6.3 Lập trình cấu trúc Khi 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àn thà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ông phâ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ạn có 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ình trong 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 ta chia 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ên chia nhỏ nữa hay không. Ta cứ coi như chia thành hai đã. Bây giờ ta gọi chương trì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 off S1=0 && Khai báo S1 là số và ở vị trí toàn cục S2=0 && Khai báo S2 là số và ở vị trí toàn cục Do Tong1 && Chạy chương trình con có tên Tong1 Do Tong2 && Chạy chương trình con có tên Tong2 S=S1*S2 ?"S=",S Chương trình con có tên Tong1 Procedure Tong1 For i=1 To 100 S1=S1+i*i EndFor EndProcedure Chương trình con có tên Tong2 Procedure Tong2 For i=1 To 100 S2=S2+i*i*i EndFor EndProcedure ELEC Trang 80
  81. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ính bằ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 Tong1 For i=1 To 100 S1=S1+i*i EndFor EndProcedure Dù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àn bộ chương trình, nghĩa là thủ tục nào cũng dùng được. Còn biến i nằm trong Tong1 gọi là biến cục bộ, biến cục bộ chỉ có ý nghĩa trong Tong1 mà thội, nghĩa là ở 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 Tong1 Có nghĩa là chạy thủ tục Tong1, nhờ chạy Tong1 mà ta thu về kết quả nằm trong biến S1. Sau khi chạy xong l ại quay về lệnh nằm sau Do Tong1, nghĩa là gặp Do Tong2, sau khi Tong2 hoàn thành ta thu đư ợc S2. Sau đó lại quay về lệnh đứng sau Do tong2 và gặp lệnh S =S1*S2 v.v Cơ chế hoạt động là như vậy!. Tổng quát, một thủ tục có dạng: PROCEDURE ENDPROCEDURE Mộ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 off S1=0 && Khai báo S1 là số và ở vị trí toàn cục S2=0 && Khai báo S2 là số và ở vị trí toàn cục Do Tong1 With S1 && Chạy chương trình con có tên Tong1 Do Tong2 With S2 && Chạy chương trình con có tên Tong2 S=S1*S2 ?"S=",S Chương trình con có tên Tong1 Procedure Tong1 Parameter T1 For i=1 To 100 T1=T1+i*i ELEC Trang 81
  82. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI EndFor EndProcedure Chương trình con có tên Tong2 Procedure Tong2 Parameter T2 For i=1 To 100 T2=T2+i*i*i EndFor EndProcedure Rõ 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ãy hì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ôm na 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úa thì 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 RETURN Như đã nói ở phần PROCEDURE, bất kể là dạng gì thì nhiệm vụ của chương trì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ương trì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 ở , còn PROCEDURE thì có thể có nhiều kết quả, bởi có thể khai báo PARAMETER T1, T2, T3 v.v và khi truyền thì: Do 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 off S1=0 && Khai báo S1 là số và ở vị trí toàn cục S2=0 && Khai báo S2 là số và ở vị trí toàn cục S=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 Tong1 Function Tong1(T1) For i=1 To 100 T1=T1+i*i EndFor Return T1 && Gửi kết quả T1 cho hàm (Tong1) ELEC Trang 82
  83. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Chương trình con có tên Tong2 Function Tong2(T2) For i=1 To 100 T2=T2+i*i*i EndFor Return 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 With Cũng như ở PROCEDURE, trong hàm Tong1 có hai biến cục bộ là T1 và i, trong Tong2 có T2 và i. Còn S1 và S2 là toàn c ục. 6.4 Dữ liệu mảng Trong 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ằng ví 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ên ta 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 đó ta nê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 off Dimention A(100) Vào dữ liệu For i=1 To 100 Input "Vào A ("+allt(str(i))+")=" To A(i) EndFor Tính tổng Tong=0 For i=1 To 100 Tong=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 a Input "Vào b =" To b ELEC Trang 83
  84. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Input "Vào c =" To c Input "Vào d =" To d Tong=a+b+c+d ? "Tổng lương là:", Tong a, 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 4 Input "Vào A ("+allt(str(i))+")=" To A(i) EndFor Tong=0 For i=1 To 4 Tong=Tong+A(i) EndFor ? "Tổng lương là:", Tong Như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 of Dime a(10) && Viết tắt, bạn có thể viết tắt 4 kí tự đầu Vào mảng For i=1 to 10 Input "Vao a("+Allt(str(i))+")=" To a(i) EndFor 88Tìm Max Max=a(1) For i=2 To 10 If max <a(i) Max=a(i) Endif ?"Max=",Max Ví dụ 2: Xếp mảng tăng dần Dime a(10) && Viết tắt, bạn có thể viết tắt 4 kí tự đầu Vào mảng For i=1 to 10 Input "Vao a("+Allt(str(i))+")=" To a(i) EndFor Xếp mảng For i=1 To 9 For j=i+1 To 10 ELEC Trang 84
  85. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI If a(i)>a(j) Tg=a((j) a(j)=a(i) a(i)=Tg Endif EndFor EndFor Mả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 ELEC Trang 85
  86. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Bài tập chương 6 1. 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 qua bà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ích Hodem C 20 Họ và đệm Ten C 8 Tên MNV C 4 Mã nhân viên BL N 9,0 Bậc lương PC N 3,1 Phụ cấp TT 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ên 5. Viết chương trình hiện ra màn hình người có lương cao nhất 6. Viết chương trình tính lương trung bình của của cơ quan 7. 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 cho nhữ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ệc sau:  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ác trườ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ệc sau:  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. ELEC Trang 86
  87. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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ững phần nhỏ tương đối độc lập, mỗi phần nhỏ đó thường được mô tả bằng một chươ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ình con đó 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ình mộ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 được xế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ực hiệ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úp cho 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ài mó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òng hoặ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ợn Thực đơn trên gọi là thực đơn ngang (Menu bar), mỗi món trên (1. Thịt lợn kho1, 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 kho 2. 2. Thịt lợn luộc 3. 3. Thịt chân giò lợn Thì được gọi là Menu dọc hay còn gọi là MENU POPUP còn các thành phần củ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ìm hiểu chi tiết trong các phần sau. ELEC Trang 87
  88. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 7.2 Thiết kế các Menu 7.2.1 Menu ngang Giả 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* *10 Bài toán yêu cầu thiết kế giao diện qua menu ngang Chương trình 1.2.1 Clear Define Menu MemuNgang Define Pad Tong Of MenuNgang Prompt ' Tính tổng các số từ 1 đến 10' At 00,00 Define Pad Tich Of MenuNgang Prompt ' Tính tích các số từ 1 đến 10' At 00,30 On Selection Pad Tong Of MenuNgang Do DieuKhien With Pad() On Selection Pad Tich Of MenuNgang Do DieuKhien With Pad() Activate Menu MenuNgang Procedure DieuKhien Parameter TsPad Do Case Case TsPad='TONG' Do TinhTong Case TsPad='TICH' Do TinhTich EndCase Return Procedure TinhTong s=0 For i=1 To 10 s=s+i EndFor ?'Tổng S =',s Return Procedure TinhTich p=1 For i=1 To 10 p=p*i ELEC Trang 88
  89. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI EndFor ?'Tích p =',p Return Giải thích: Dòng 1: Define Menu MemuNgang Ý nghĩa: Định nghĩa một Menu Ngang có tên là MenuNgang Dòng 2: Define Pad Tong Of MenuNgang Prompt ' Tính tổng các số từ 1 đến 10' At 00,00 Ý nghĩa: Định nghĩa một Pad có tên là Tong thuộc MenuNgang, đồng thời hiện thị:'Tính tổng các số từ 1 đến 10' tại (At) toạ độ có d òng là 0 và cột là 0 Dòng 3: Define Pad Tich Of MenuNgang Prompt ' Tính tích các số từ 1 đến 10' At 00,30 Ý nghĩa: Định nghĩa một Pad có tên là Tich thuộc MenuNgang, đồng thời hiện thị:'Tính tích các số từ 1 đến 10' tại (At) toạ độ có dòng 0 cột là 30 Dò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ổng các số từ 1 đến 10' và ấn Enter thì chương trình con có tên TinhTong được thực hiện, đồng thời truyền giá trị (t ên của Pad tương ứng) cho thông số đứng sau Parameter của chương trình con Dò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ác số từ 1 đến 10' và ấn Enter thì chương trình con có tên TinhTich được thực hiện, đồng thời truyền giá trị (tên của Pad tương ứng) cho thông số đứng sau Parameter của chương trình con Dò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 Entert Ví dụ: Nếu vệt sáng nằm ở Pad thứ 2: Hàm Pad ()sẽ cho giá trị TICHs ELEC Trang 89
  90. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI · · Hàm Menu ()trả về tên Menu khi Menu được kích hoạtt Ví 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ên expC, expC1, expC2 v.v là biểu thức văn bản expR 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 [Mesage ] [Bar [At Line ]] [In[Window] | In Screen] [Color Scheme | Color ] Trong đó: · · Message là thông báo với nội dung là tại dòng mà trước đó dùng lệnh:Set Message to Ví dụ: Set Message to 23 Define Menu MenuNgang Mesage 'Đây là Menu ngang' · · Bar [At Line ] Menu sẽ được đặt tại dòng , nếu dùng Bar, khi thực hiện xong thực đơn không hoạt động nữa · · [In[Window] | In Screen] Menu sẽ được đặt trong cửa sổ hoặc trong màn hình · · [Color Scheme | Color ] Đặ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 of Prompt [At ] [Mesage ] [Color Scheme | Color ] Trong đó: · · Prompt ứng với tên Pad thứ nhất hiện thông báo · · At Đặt ở toạ độ · · Mesage Như phần trên ELEC Trang 90
  91. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI · · Color Scheme | Color Như phần trên 7.2.2 Menu dọc Cũ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.2 Clear Define Popup MenuDoc From 5,10 Define 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 DieuKhien Parameter TsBar Do Case Case TsBar=1 Do TinhTong Case TsBar=2 Do TinhTich EndCase Return Procedure TinhTong s=0 For i=1 To 10 s=s+i EndFor ?'Tổng S =',s Return Procedure TinhTich p=1 For i=1 To 10 p=p*i EndFor ?'Tích p =',p Return Giải thích: ELEC Trang 91
  92. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI 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 10 Dò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 đến 10' 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 đến 10' 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ên TinhTong hoặc TinhTich được thực hiện, đồng thời truyền giá trị (t ên của Bar tương ứng) cho thông số đứng sau Parameter của ch ương trình con Dò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 Enter Ví 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 From [To ] [Prompt Field | Prompt Files[Like ]| Prompt structure] [Mesage ] [Title ] [In[Window] | In Screen] [Color Scheme | Color ] Trong đó: · · Prompt Field : khi đưa tuỳ chọn này vào và chỉ định một tên trường 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 ELEC Trang 92
  93. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI · · 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 CSDL là 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ọn của Popup · · Title : Sẽ hiện tiêu đề của Popup · · [In[Window] | In Screen] Menu sẽ được đặt trong cửa sổ hoặc trong màn hình · · [Color Scheme | Color ] Đặ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 Of Prompt [Mesage ] [Skip] [Color Scheme | Color ] Trong đó: · · Prompt ứng với tên Bar thứ nhất hiện thông báo · · Mesage Như phần trên · · Skip: tuỳ chọn đó không chọn được · · Color Scheme | Color Như phần trên 7.2.3 Menu hỗn hợp Ví 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ộc Thịt Ngan luộc Thit Bò luộc Ứng với ThitKho?: Thịt Gà kho Thịt Ngan kho Thịt Bò kho Ta lập trình như sau: Chương trình 1.2.3.1 Clear Define Menu MonThit Define Pad ThitLuoc Of MonThit Prompt ' Day la thit luoc ' At 00,00 ELEC Trang 93
  94. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Define Pad ThitKho Of MonThit Prompt ' Day la Thit kho ' At 00,20 Define Popup Luoc From 02,00 Define 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,20 Define 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 Luoc On Pad ThitKho Of MonThit Activate Popup Kho Activate Menu MonThit Procedure Hien Parameter TsBar,TsPopup Do 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 ' Endcase Return Ví 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 ELEC Trang 94
  95. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Clear Define Menu Toan Define Pad LuongGiac Of Toan Prompt ' Các bài tập lượng giác ' At 00,00 Define Pad DaiSo Of Toan Prompt ' Các bài tập đại số ' At 00,35 Define Popup LG From 02,00 Define 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,35 Define 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 LG On Pad DaiSo Of Toan Activate Popup DS Activate Menu Toan Procedure DieuKhien Parameter TsBar,TsPopup Do Case Case TsBar=1 and TsPopup='LG' Do TinhSin Case TsBar=2 and TsPopup='LG' Do TinhCos Case TsBar=1 and TsPopup='DS' Do TinhTong Case TsBar=2 and TsPopup='DS' Do TinhTich Endcase Return Procedure TinhSin For i=1 to 1000 ?i,sin(i) Endfor Return Procedure TinhCos For i=1 to 1000 ?i,Cos(i) ELEC Trang 95
  96. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Endfor Return Procedure TinhTong s=0 For i=1 to 1000 s=s+i Endfor ?'Tong s=',s Return Procedure TinhTich p=1 For i=1 to 10 p=p*i Endfor ?'Tich p=',p Return Lệnh sau: On Pad LuongGiac Of Toan Activate Popup LG Giải thích: Gắn Pad LuongGiac của Menu Toan với Popup LG và kích hoạt luôn 7.3 Window Ta định nghĩa Window như sau Define Window From To [Title ] [Footer ] [System | Double |Panel |None | ] [Close | Noclose] [Float | Nofloat] [Shadow | Noshadow] [Fill ] [Color scheme | In Screen] · · [Title ] : Nếu chọn cửa sổ sẽ có tiêu đề trên là · · [Footer ]: Nếu chọn cửa sổ sẽ có tiêu đề dưới là · · [System | Double |Panel |None | ] Đườ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 ELEC Trang 96
  97. TRUNG TÂM ĐÀO TẠO TRỰC TUYẾN - ĐẠI HỌC KINH DOANH & CÔNG NGHỆ H À NỘI Không đường viền nếu chọn None Đường viền là ký tự nếu chọn · · [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 ]: Cửa sổ được lấp đầy bởi Ví dụ: Clear Define Window Win1 From 1,2 To 10,20 Title 'Cửa sổ 1' double Close Define Window Win2 From 12,2 To 20,20 Title 'Cửa sổ 2' double Close Activate Window Win1 ?'Chào ban, tôi đang ở cửa sổ Win1' Deactivate Window Win1 Activate Window Win2 ?'Chào bạn, tôi đã đến cửa sổ Win2' Deactivate Window Win2 Chươ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 Deactivate Window Win2 Giả 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 Toan 2. 2. Cửa sổ thứ hai có tên WinSin hiện thị kết quả Sin 3. 3. Cửa sổ thứ ba có tên WinCos hiện thị kết quả Cos 4. 4. Cửa sổ thứ tư có tên WinTong hiện thị kết quả Tong 5. 5. Cửa sổ thứ năm có tên WinTich hiện thị kết quả Tich 6. 6. Thêm một Pad để thiết lập Procedure Thoat Chương trình sẽ như sau: Chương trình 1.3 Clear Define 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 Toan Define 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ố ' ELEC Trang 97