Bài giảng Tin học quản lý

pdf 58 trang phuongnguyen 5590
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học quản lý", để 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:

  • pdfbai_giang_tin_hoc_quan_ly.pdf

Nội dung text: Bài giảng Tin học quản lý

  1. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN I BÀI GIẢNG TIN HỌC QUẢN LÝ HÀ NỘI - 2013
  2. HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ THÔNG TIN I BÀI GIẢNG TIN HỌC QUẢN LÝ NGƯỜI VIẾT: Ths. TRỊNH THỊ VÂN ANH HÀ NỘI - 2013
  3. MỤC LỤC MỤC LỤC 1 CHƯƠNG 1: GIỚI THIỆU VISUAL BASIC.NET 2 1.1. Sơ lược về VB.NET 2 1.2. Cài đặt Microsoft Visual Studio.NET 3 1.3. Giới thiệu MS Visual Studio.Net 11 1.4. Thực đơn và thanh công cụ 14 CHƯƠNG 2: SỬ DỤNG MS VISUAL STUDIO.NET 16 2.1. Chương trình đầu tiên 16 2.2. Mở rộng bài welcome 23 CHƯƠNG 3: KIỂU DỮ LIỆU 28 3.1. Giới thiệu chung 28 3.2. Biến số (Variable) 29 3.3. Chú thích 30 3.4. Loại dữ kiện (Data Types) 30 3.5. Hằng số (Contants) 31 3.6. Tên 32 3.7. Phương thức (method) 32 CHƯƠNG 4: CẤU TRÚC LỆNH 34 4.1. Lệnh điều kiện 34 4.2. Toán tử so sánh 37 4.3. So sánh xâu 38 4.5. Vòng lặp 40 CHƯƠNG 6: VIẾT CHƯƠNG TRÌNH 44 6.1. Chương trình myMenu 44 6.2. Chương trình các toán tử cơ sở 50 CHƯƠNG 7: MẢNG 52 7.1. Làm việc với mảng 52 7.2. Làm việc với các phần tử trong mảng 52 1
  4. CHƯƠNG 1: GIỚI THIỆU VISUAL BASIC.NET 1.1. Sơ lược về VB.NET Ngôn ngữ BASIC (Beginner's All Purpose Symbolic Instruction Code) đã có từ năm 1964, BASIC rất dễ học và dễ dùng. Trong vòng 15 năm đầu, có rất nhiều chuyên gia Tin Học và công ty tạo các chương trình thông dịch (Interpreters) và biên dịch (Compilers) cho ngôn ngữ làm BASIC trở nên rất phổ thông. Năm 1975, Microsft tung ra thị trường sản phẩm đầu tay Microsoft BASIC và tiếp đó Quick BASIC (còn gọi là QBASIC) thành công rực rỡ. Quick BASIC phát triển trong nền Windows nhưng vẫn khó khăn khi tạo giao diện kiểu Windows. Sau đó nhiều năm, Microsoft bắt đầu tung ra một sản phẩm mới cho phép ta kết hợp ngôn ngữ dễ học BASIC và môi trường phát triển lập trình với giao diện bằng hình ảnh (Graphic User Interface - GUI) trong Windows. Đó là Visual Basic Version 1.0. Sự chào đời của Visual Basic Version 1.0 vào năm 1991 thật sự thay đổi bộ mặt lập trình trong Công Nghệ Tin Học. Trước đó, ta không có một giao diện bằng hình ảnh (GUI) với một IDE (Integrated Development Environment) giúp các chuyên gia lập trình tập trung công sức và thì gìờ vào các khó khăn liên hệ đến doanh nghiệp của mình. Mỗi người phải tự thiết kế giao diện qua thư viện có sẵn Windows API (Application Programming Interface) trong nền Windows. Điều này tạo ra những trở ngại không cần thiết làm phức tạp việc lập trình. Visual Basic giúp ta bỏ qua những hệ lụy đó, chuyên gia lập trình có thể tự vẽ cho mình giao diện cần thiết trong ứng dụng (application) một cách dễ dàng và như vậy, tập trung nổ lực giải đáp các vần đề cần giải quyết trong doanh nghiệp hay kỹ thuật. Ngoài ra, còn nhiều công ty phụ phát triển thêm các khuôn mẫu (modules), công cụ (tools, controls) hay ứng dụng (application) phụ giúp dưới hình thức VBX cộng thêm vào giao diện chính càng lúc càng thêm phong phú. Khi Visual Basic phiên bản 3.0 được giới thiệu, thế giới lập trình lại thay đổi lần nữa. Kỳ này, ta có thể thiết kế các ứng dụng (application) liên hệ đến Cơ Sở Dữ Liệu (Database) trực tiếp tác động (interact) đến người dùng qua DAO (Data Access Object). Ứng dụng này thưòng gọi là ứng dụng tiền diện (front-end application) hay trực diện. Phiên bản 4.0 và 5.0 mở rộng khả năng VB nhắm đến Hệ Điều Hành Windows 95. Phiên bản 6.0 cung ứng một phương pháp mới nối với Cơ Sở Dữ Liệu (Database) qua sự kết hợp của ADO (Active Data Object). ADO còn giúp các chuyên gia phát triển mạng nối với Cơ Sở Dữ Liệu (Database) khi dùng Active Server Pages (ASP). Tuy nhiên, VB phiên bản 6.0 (VB6) không cung ứng tất cả các đặc trưng của kiểu mẫu ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Language - OOL) như các ngôn ngữ C++, Java. Thay vì cải thiện hay vá víu thêm thắt vào VB phiên bản 6.0, Microsoft đã xoá bỏ tất cả làm lại từ đầu các ngôn ngữ lập trình mới theo kiểu OOL rất hùng mạnh cho khuôn nền .NET Framework. Đó là các ngôn ngữ lập trình Visual Basic.NET và C# (gọi là C Sharp). Sau đó, nhiều ngôn ngữ lập trình khác cũng thay đổi theo ví dụ như smalltalk.NET, COBOL.NET, làm Công Nghệ Tin Học trở nên phong phú hơn, đa dạng hơn. 2
  5. Tất cả những thay đổi này nhằm đáp ứng kịp thời sự đòi hỏi và nhu cầu phát triển cấp bách trong kỹ nghệ hiện nay. Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không. Visual Basic.NET (VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft's .NET Framework. Do đó, nó cũng không phải là VB phiên bản 7. Thật sự, đây là ngôn ngữ lập trình mới và rất lợi hại, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác đã vang danh C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình. Hơn nữa, dù không khó khăn gì khi cần tham khảo, học hỏi hay đào sâu những gì xảy ra bên trong hậu trường OS, Visual Basic.NET (VB.NET) giúp ta đối phó với các phức tạp khi lập trình trên nền Windows và do đó, ta chỉ tập trung công sức vào các vấn đề liên quan đến dự án, công việc hay doanh nghiệp mà thôi. Trong khóa học này, các bạn sẽ bắt đầu làm quen với kiểu lập trình dùng Visual Basic.NET (VB.NET) và dĩ nhiên, các khái niệm và thành phần cơ bản của .NET Framework. Nếu ta để ý tên của Visual Basic.NET (VB.NET), ta thấy ngay ngôn ngữ lập trình này chuyên tạo ứng dụng (application) dùng trong mạng, liên mạng hay trong Internet. Do đó, ta sẽ tập trung vào việc lập trình các ứng dụng (applications) trên nền Windows và đó cũng là mục tiêu chính yếu khi học Visual Basic.NET cơ bản. 1.2. Cài đặt Microsoft Visual Studio.NET Bộ Microsoft Visual Studio.NET bao gồm vừa mọi công cụ yểm trợ lập trình và ngôn ngữ lập trình .NET, tỷ như: Visual Basic.NET (VB.NET), C# (C Sharp), Visual C++.NET và Visual J#.NET Tùy ý ta chọn loại ngôn ngữ lập trình nào thích hợp để cài vào máy vi tính. Không ai cấm ta cài đủ thứ vào máy nhưng dĩ nhiên cần phải có dư chỗ trong hard drive, Microsoft Visual Studio.NET sẽ tính toán và cho ta biết khả năng chứa như thế nào. Tuy nhiên, ta có thể chỉ chọn Visual Basic.NET (VB.NET) và các ứng dụng (application) liên hệ trước, nếu cần học thêm về C# hay Visual C++.NET, ta có thể cài sau cũng được vì nếu cài toàn bộ, ta sẽ cần khoãng trên dưới 1.5 GBytes trong hard drive. Microsoft Visual Studio.NET có nhiều phiên bản khác nhau. Dưới đây, ta tạm dùng phiên bản Enterprise Architecture 2003 làm thí dụ điển hình. Tùy theo phiên bản ta có, những bước cài đặt sẽ khác nhau 1 chút nhưng trên nguyên tắc, ta phải cài đầy đủ môi trường .NET yểm trợ lập trình trước khi cài Microsoft Visual Studio.NET, tỷ như: Microsoft .NET Framework Microsoft FrontPage Web Extensions Client Microsoft Access trong bộ MS Office Professional Microsoft SQL Server - sẽ hướng dẫn cài và bố trí MS SQL Server cho khóa học trong bài Cơ Sở Dữ Liệu (Database) và các ứng dụng (application) liên hệ (Microsoft Visual Studio.NET cho biết ta cần những gì) như hình trong bước thứ 3. 3
  6. Bước 1: Bắt đầu với dĩa 1 của bộ Microsoft Visual Studio.NET, dĩa này tự khởi động và hiển thị Windows hướng dẫn ta cài Microsoft Visual Studio.NET Setup. Nếu CD không tự khởi động được, ta cần chạy ứng dụng 'setup.exe' trong vị trí gốc (root directory): Chạy Windows Explorer, chọn dĩa cứng chứa Microsoft Visual Studio.NET Setup dĩa 1, nhấp đôi ứng dụng 'setup.exe' hay Khởi động (Windows Start Menu) và chọn 'Run', gõ hàng chữ: 'e:\setup.exe' (nếu CD/DVD drive của ta là drive E). Microsoft Visual Studio.NET hiển thị 4 bước cài. Bước đầu tiên là chuẩn bị môi trường lập trình .NET với 'Visual Studio .NET Prerequisites': Hình 1.1. Màn hình bước 1 Bước 2: Nhập CD tên Microsoft Visual Studio.NET 2003 Prerequisites, chọn 'I agree' chấp nhận điều kiện dùng nhu liệu và nhấp Continue. 4
  7. Hình 2: Màn hình bước 2 Bước 3: Nhấp Install Now! để cài các ứng dụng (application) liên hệ tạo môi trường .NET. Lưu ý ở đây, Microsoft Visual Studio.NET sẽ dò tìm những ứng dụng (application) cần thiết trong máy vi tính và tùy theo mỗi máy, bảng liệt kê ứng dụng có thể khác nhau. Thí dụ ở đây cho biết máy vi tính cần 4 ứng dụng phụ thuộc như hình sau: Hình 3: Màn hình bước 3 Bước 4: 5
  8. Chờ cho đến khi nào Microsoft Visual Studio.NET cài xong các ứng dụng phụ thuộc, nhấp nút Done. Hình 1.4. Màn hình bước 4 Bước 5: Tiếp tục chọn Visual Studio.NET Hình 1.5. Màn hình bước 5 Bước 6: 6
  9. Nhập dĩa 1 vào máy và nhấp nút OK. Hình 1.6. Màn hình bước 6 Bước 7: Ta chọn 'I agree' và cung cấp Product Key trước khi nhấp nút Continue. Hình 1.7. Màn hình bước 7 Bước 8: Ta chỉ chọn những gì liên hệ đến Visual Basic.NET (VB.NET) cho khóa học Visual Basic.NET (VB.NET) Cơ Bản. Xóa bỏ (uncheck) ngôn ngữ lập trình Visual C++.NET, Visual C#.NET, Visual J#.NET và các ứng dụng liên hệ, tỷ như: template, documetation, 7
  10. Bước 9: Nhấp Install Now. Microsoft Visual Studio.NET sẽ chạy ứng dụng cài và bố trí này khoãng trên dưới 1 tiếng đồng hồ tùy theo khả năng máy vi tính. Bước 10: 8
  11. Nhấp Done. Microsoft Visual Studio.NET sẽ hiển thị Windows cài các thông tin phụ giúp lập trình và cả thư viện để ta tham khảo khi lập trình với Visual Basic.NET (VB.NET): Hình 1.10. Màn hình bước 10 Bước 11: Chọn Product Documetation và nhập dĩa 3 Microsoft Visual Studio.NET (tức dĩa 1 MSDN): 9
  12. Hình 1.11. Một số màn hình bước 11 10
  13. Bước 12: Tiếp tục với các dĩa 2, 3 MSDN cho đến hết. Hình 1.12. Màn hình bước 12 Như vậy, ta sẳn sàng cho việc lập trình với Visual Basic.NET (VB.NET). Bài kế hướng dẫn sơ lược cách dùng Microsoft Visual Studio.NET Integrated Development Environment (gọi tắc là IDE) cho việc tạo các ứng dụng (application) trong nền Windows. Thật ra, ta có thể dùng Notepad để soạn mã nguồn (source code) và Visual Basic.NET compiler để chạy ứng dụng (application) mà không cần Microsoft Visual Studio.NET IDE tuy nhiên trong khóa học cơ bản, chúng tôi chọn Microsoft Visual Studio.NET để việc lập trình trở nên vui thích và hấp dẫn. 1.3. Giới thiệu MS Visual Studio.Net Microsoft Visual Studio.NET IDE là môi trường tập trung mọi công cụ cần thiết giúp việc lập trình dễ dàng. Để khởi động, chọn Start, Programs, thực đơn Microsoft Visual Studio.NET 2003 và ứng dụng (application) Microsoft Visual Studio.NET 2003. Chọn phần My Profile Chọn Profile là Visual Basic Developer vì khóa này chuyên trị Visual Basic.NET (VB.NET) Microsoft Visual Studio.NET sẽ hiển thị Visual Basic 6 trong hộp chữ Keyboard Scheme và ngay cả trong hộp Windows Layout. Bố trí này giúp tổ chức các cửa sổ trong IDE như các phiên bản trước của Microsoft Visual Studio. Trong khóa này, ta chọn Visual Studio Default. Bố trí gạn lọc giúp đỡ dành riêng cho ngôn ngữ lập trình Visual Basic.NET (VB.NET) trong hộp Help Filter. Internal Help hiển thị các thông tin ngay trong cùng một IDE window, trong khi External hiển thị thông tin trong 1 window riêng biệt. Ở phần Startup, chọn Show Start Page 11
  14. Hình 1.13. Màn hình bước 13 Đây là chổ tạo dự án mới hay mở dự án đã lập trình để sửa đổi. Ta chọn New Project để tìm hiểu thêm môi trường lập trình dùng Microsoft Visual Studio.NET Hình 1.14. Màn hình bước 14 12
  15. Ta nhấp nút New Project để hiển thị bảng liệt kê các khuôn mẫu cho ứng dụng (application). Chọn Visual Basic Project trong window Project Types Chọn Windows Application trong bảng Template Đặt tên dự án là Welcome. Lưu ý ở đây, tên của dự án cũng là tên ngăn chứa (folder) chứa phụ dự trữ dự án. Thí dụ ta nhấp nút Browse để tạo 1 ngăn chứa (folder) tên Dev ở dĩa D, Microsoft Visual Studio.NET hiển thị D:\Dev ở hộp Location nhưng project sẽ được tạo và chứa ở ngăn chứa (folder) D:\Dev\Welcome (để ý hàng phía trên phần hiển thị các nút Less, OK, ta thấy hàng chữ: 'Project will be created at D:\Dev\Welcome) Nhấp OK Hình 1.15. Mở dự án mới Microsoft Visual Studio.NET IDE khởi động dự án mới trong phương thức thiết kế (Design Mode): 13
  16. Hình 16: màn hình bước 15 1.4. Thực đơn và thanh công cụ Thực đơn (menu) của Microsoft Visual Studio.NET IDE 'biến hóa' tùy theo công việc đang làm nhưng tổng quát, thực đơn (menu) chính hiển thị bao gồm: File Tiêu chuẩn chung cho mọi ứng dụng (application) trong nền Windows. File dùng để mở (open) hay đóng (close) các tập tin (files) hay dự án (project). Edit Edit cung cấp các chọn lựa khi soạn nguồn mã và dùng các công cụ lập trình, tỷ như: Undo, Redo, Cut, Copy, Paste và Delete View View cung cấp sư chọn lựa hiển thị các Windows tạo môi trường của IDE, tỷ như: Solution Explorer, Properties, Output, Tool Box, Server Explorer. Nếu ta để ý sẽ thấy các Windows này thường nằm 2 bên hoặc bên dưới window thiết kế Form hay soạn nguồn mã.Các windows này cũng có thể hiển lộ hay thu kín lại nhường chổ cho window thiết kế được rộng rãi. Project Dùng để quản lý dự án (project) bằng cách thêm vào hay xóa bỏ các tập tin liên hệ. Build 14
  17. Một lựa chọn quan trọng trong thực đơn là Build cho phép ta xây dựng và chạy ứng dụng (application) 1 cách độc lập bên ngoài IDE. Debug Debug không những giúp phương tiện rà tìm các lỗi lập trình trong môi trường IDE mà còn giúp kiểm tra từng bước một các nguồn mã trong dự án (project). Data Giúp ta nối và sử dụng dữ kiện hay thông tin trong Cơ Sở Dữ Liệu (Database). Tools Chứa các công cụ bố trí Microsoft Visual Studio.NET IDE. Windows Tiêu chuẩn chung dùng quản lý mọi windows trong IDE. Help Cung cấp nối yêu cầu giúp đỡ với Microsoft Visual Studio.NET documentation hay từ mạng Internet. Cách dùng thanh công cụ sẽ được hướng dẫn tùy từng dự án (project). Tuy nhiên, 1 cách tổng quát, thanh công cụ mặc định (default) bao gồm như sau (theo thứ tự từ trái qua phải): New Project Add Item Open File Save (lưu trữ form hay module đang dùng) Save All (lưu trữ mọi forms, modules, đang dùng hay đang mở) Cut Copy Paste (sẽ hiển lộ sau khi ta nhấp nút Cut hay Copy) Undo Redo Navigate Backward (lướt lui) Navigate Forwards (lướt tới) Nút Start để chạy thử ứng dụng trong IDE Build Configuration (bố trí xây dựng ứng dụng) trong IDE. Ở đây, cho ta biết bố trí hiện dùng là Debug Truy tìm tập tin (Find in files) và cuối cùng, nút Toolbar Options để hiển thị thêm các công cụ phụ thuộc khác. Nhấp đơn hộp công cụ nằm phía bên tay trái window thiết kế như hình sau. Hộp công cụ bao gồm: Hộp Data Hộp Components Hộp Windows Forms Hộp Clipboard Ring 15
  18. Hộp Gerneral Hình 1.17. Màn hình soạn thảo Bài kế tiếp, ta sẽ bắt đầu soạn dự án (project) đâu tiên với Microsoft Visual Studio.NET CHƯƠNG 2: SỬ DỤNG MS VISUAL STUDIO.NET 2.1. Chương trình đầu tiên ta bắt đầu với dự án (project) đầu tiên để chào mừng các bạn đến với khóa học cơ bản Visual Basic.NET. Trong khi thiết kế, ta sẽ nhân cơ hội này bàn thêm về các công cụ trợ giúp lập trình. Như ta đã biết, dự án (project) Welcome được lưu trữ trong ngăn chứa D:\Dev\Welcome như hình sau: 16
  19. Hình 2.1. Mở dự án mới Nhấp nút OK sẽ mở ra window dùng thiết kế một form trong nền Windows. Dự án Welcome Bước 1: Microsoft Visual Studio.NET IDE khởi động dự án mới trong phương thức thiết kế (Design Mode) với 1 Windows Form nằm ở giữa, tên mặc định là Form1.vb Hình 2.2. Màn hình thiết kế Nếu ta không lảm gì cả mà chỉ lưu trữ bằng cách chọn File, Save All và kiểm tra ngăn chứa (folder) D:\Dev\Welcome, ta thấy Microsoft Visual Studio.NET tự động tạo ra và lưu trữ 1 số tập tin cần thiết trong đó có các tập tin Welcome.sln và Welcome.vbproj dùng đề quản lý dự án (project). 17
  20. Ngăn chứa (folder) bin là nơi lưu trữ dự án dưới hình thức ứng dụng (application) với phần nối thêm là .EXE (tỷ như: Welcome.exe) khi ta xây dựng dự án thành 1 ứng dụng (application) chạy ngoài IDE. Hình 2.3. Các file tạo ra từ dự án Bước 2: Đổi tên Form1.vb thành Welcome.vb bằng cách nhấp vào tên form ở Solution Explorer Window (nằm phiá trên góc tay phải) hay ở hộp chữ File Name trong Properties Windows (phiá dưới Solution Explorer) Lưu ý: 1 solution có thể gồm nhiều dự án (project), 1 dự án (project) có thể gồm nhiều Forms khác nhau. Lưu ý: Khi đổi tên Form mặc định như vậy, ta phải bố trí Startup Object với tên Welcome là object ta muốn khởi động đầu tiên khi chạy dự án Welcome. Nếu không, dự án vẫn dùng Form1 và sẽ tạo lỗi vì Form1 đã đổi tên không còn hiện diện nữa. Đổi tên Form1 bằng cách chọn dự án Welcome trong Solution Explorer và chọn Properties. Chọn Welcome trong hộp chữ combo Startup Object. Nhấp nút Apply, OK Bước 3: Nhấp vào Form hiển thị trong phần thiết kế. Properties Window liên hệ thay đổi và hiển thị bảng đặc tính (properties) của Form. Bảng này sắp xếp và phân loại các đặc tính ra thành: Accessibility Appearance Behaviour nhằm giúp ta dể dàng truy cập đặc tính cần đến. 18
  21. Ta đổi tựa đề của Form từ Form1 ra Welcome bằng cách chọn đặc tính (property) Text và gỏ chữ Welcome. Hình 2.4. Tiêu đề form Tới đây, ta có thể nhấp nút Start để kiểm tra tựa đề của Form đã thay đổi theo ý hay không? Nút Start nằm ở Toolbar: Hình 2.5. Chạy bằng nút start Như vậy, ta thấy Microsoft Visual Studio.NET IDE giúp ta tạo 1 Form dễ dàng như Bước 4: Từ Form 'Welcome' này, ta sẽ gắn: 1 nhãn hiệu (label) mang tựa 'Enter your name:" 1 hộp chữ để nhận dữ kiện từ user 1 nút mệnh lệnh 'Click Me' hiển thị hàng chữ 'Chào Mừng' 1 nút mệnh lệnh 'Exit' chấm dứt ứng dụng (application). 19
  22. Mở Toolbox Window (nằm phía trái window thiết kế Form) và chọn công cụ Label. Hộp công cụ này chứa mọi đối tượng dùng tạo giao diện cũng như các công cụ phụ thuộc trong nền Windows. Hình 2.6. Công cụ thiết kế Dùng mouse kéo lê (click and drag) 1 hình chữ nhật vừa đủ rộng nhằm chứa hàng chữ 'Enter your name:'. Nếu cần ta có thể điều chỉnh độ dài hay độ cao nhãn hiệu tùy ý. Nhấp hộp chữ Text ở Properties Window và gỏ hàng chữ Enter your name: Đặt tên nhãn hiệu này là lblName trong hộp chữ (Name) ở Properties Window: Hình 2.7. Đặt tên Bước 5: Lập lại thao tác này cho các công cụ sau đây bằng cách chọn công cụ trong Toolbox và sau đó vẽ (click and drag) giao diện trên Form: Công cụ Tên (Name) Text Textbox tbxName (enter your name here) 20
  23. Button 1 btnClickMe Click Me Button 2 btnExit Exit Cuối cùng, ta sẽ có 1 giao diện cho ứng dụng (application) Welcome như sau: Hình 2.8. Sau khi thiết kế Thông thường, công ty nào cũng có tiêu chuẩn chung về danh pháp cho các hệ thống tin học, máy vi tính, thiết bị, công cụ hay nguồn mã, Để thống nhất lập trình với Visual Basic.NET (VB.NET) trong khóa học, ta có thể ấn định danh pháp cho các công cụ lập trình như sau: Tên đính kèm Công cụ Thí dụ: phía trước Button btn hoặc cmd btnClickMe, cmdClickMe ComboBox cbo cboContactName CheckBox chk chkOver50 Label lbl lblTitle ListBox lst lstProduct MainMenu mnu mnuExtraOption RadioButton rdb rdbYes PictureBox pic picVovisoft TextBox tbx tbxName Như vậy, khi viết ngưồn mã, mỗi lần gặp công cụ có tên đính kèm phiá trước là tbx, ta biết ngay đó là Textbox. Bước 6: Sau khi hoàn tất phần giao diện cho ứng dụng (application), ta cần thêm nguồn mã để xử lý các tình huống đặc biệt, tỷ như: nếu user nhấp vào nút Click Me thì chuyện gì sẽ xãy ra? 21
  24. Code Editor sẽ giúp ta chuẩn bị nguồn mã. Thật vậy, khi ta nhấp đôi vào nút Click Me, Code Editor hiển thị nguồn mã tạo sẵn tổng quát cho mọi giao diện Windows và cho phép ta thêm mã vào phần btnClickMe_Click. Lưu ý ở đây, Click là biến cố mặc định khi user nhấp nút Click Me, Microsoft Visual Studio.NET chuẩn bị dùm ta 1 Subroutine để xử lý biến cố đó. Lưu ý chỉ gỏ phần mã in đậm như sau: Private Sub btnClickMe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClickMe.Click 'Display a greeting box MessageBox.Show("Chào mừng " & tbxName.Text & _ " đến với Khóa Học Cơ Bản Visual Basic.NET", "Welcome") End Sub Nhấp tab Welcome.vb [Design]* (kế bên tab Welcome.vb * có hình con trõ) để trở lại phần thiết kế Form, nhấp đôi nút Exit và gỏ mã: 'End the program Me.Dispose() Hình 2.9. Màn hình code Bước 7: Nhấp nút Run để chạy thử ứng dụng trong môi trường IDE. Nhập tên vào hộp chữ dưới hàng 'Enter your name:' 22
  25. Hình 2.10. Nhập liệu Khi nhấp nút Click Me, ứng dụng sẽ xử lý biến cố nhấp đó và hiển thị 1 window chào mừng: Hình 2.11. Kết quả Như vậy, ta đã hoàn thành sứ mạng tạo 1 ứng dụng (application) đầu tiên dùng Microsoft Visual Studio.NET với ngôn ngữ lập trình Visual Basic.NET (VB.NET). 2.2. Mở rộng bài welcome Bước 8: Sau khi đi dạo một vòng làm quen với IDE của MS Visual Studio.NET, ta tiếp tục dự án Adder với giao diện sau: Hình 2.12. Thiết kế chương trình 23
  26. Dùng (bằng cách kéo lê - Click and Drag hay Click and Draw) các thiết bị trong hộp công cụ (Toolbox) vào Form1 và bố trí như sau: Lưu ý, ở đây chỉ hướng dẫn và trình bày chi tiết phương pháp dùng và bố trí đặc tính (property) của 1 thiết bị trong hộp công cụ mà thôi. Sau đó, các bạn áp dụng tương tự như vậy với các thiết bị khác. Thí dụ dùng và trình bày tiêu đề (lable) Toán Cộng như sau: Nhấp hộp công cụ (phía bên trái IDE) và nhấp đơn thiết bị Label (Click ) Vẽ ( and Draw) 1 hình chữ nhật trong mặt trống của Form Chọn Properties Window của Label (để ý label có được chọn hay không, nếu không, ta có thể mở nhằm properties window của một thiết bị nào khác chứ không phải thiết bị ta muốn bố trí) Chọn đặc tính (property) Text va gõ hàng chữ Toán Cộng (có thể dùng ứng dụng VPSKeys với bố trí Unicode hoặc các ứng dụng gõ tiếng Việt tương đương) Chọn và mở rộng đặc tính (property) Fonts và thay đổi cở chữ và màu tùy ý. Chọn Name và đặt tên theo tiêu chuẩn định trước, tỷ như: lblTitle với lbl là chữ viết tắc của label cộng với tên của tiêu đề. Kéo lê (Click and Drag) thiết bị này đến vị trí tùy ý trong Form, tỷ như: vị trí phía trên bên trái như hình trình bày. Áp dụng linh động hướng dẫn trên cho các thiết bị textbox, button, như sau: Công cụ Bố trí đặc tính (property) textbox1 Name = TbxNumber1 Text = (để trống ở đây) Text Align = Right BackColor = (tùy ý) textbox2 Name = TbxNumber2 Text = (để trống ở đây) Text Align = Right BackColor = (tùy ý) textbox3 Name = TbxNumber1 Text = (để trống ở đây) Text Align = Right BackColor = (tùy ý) ForeColor = Red button1 Name = cmdMore Text = More button2 Name = cmdCheckIt Text = Check It label2 Name = lblResult Text = Answers Status TextAlign = MiddleCenter Bước 9: 24
  27. Tuy ta có thể giữ tên mặc định Form1 trong dự án Adder nhưng có vẻ không chuyên nghiệp bằng đổi tên mặc định Form1 đó thành tên Adder thích hợp với dự án. Lưu ý: khi đổi tên Form mặc định như vậy, ta phải bố trí Startup Object với tên Adder là object ta muốn khởi động đầu tiên khi chạy dự án Adder. Nếu không, dự án vẫn dùng Form1 và sẽ tạo lỗi vì Form1 đã đổi tên không còn hiện diện nữa. Đổi tên Form1 bằng cách chọn dự án Adder trong Solution Explorer và chọn Properties. Chọn Adder trong hộp chữ combo Startup Object. Nhấp nút Apply, OK Hình 2.13. Thêm thuộc tính Bước 10: Lập trình theo kiểu mẫu event - driven Khi dùng MS Visual Studio.NET làm môi trường lập trình với Visual Basic.NET (VB.NET), thường thường ta tạo một giao diện (dưới hình thức Form) trước và sau đó gài nguồn mã vào, tỷ như: nhấp đôi nút Check It để mở tập tin chứa nguồn mã với tên mặc định là tên của dự án. Trước tiên, MS Visual Studio.NET sẽ tạo nguồn mã mặc định với các công dụng cơ bản yểm trợ giao diện ta vừa thiết kế (Form Adder) và ta sẽ cộng thêm mã để bố trí và kế hoạch sẵn mọi tình huống có thể xảy ra hầu hành động kịp thời tùy theo biến cố mà Form nhận được (thí dụ: người dùng nhấn vào nút Check It để kiểm tra bài toán cộng trong ứng dụng Adder). Kiểu chuẩn bị với nguồn mạ định trước như vậy được gọi là lập trình theo kiểu mẫu Event-Driven. Bây giờ, ta bắt đầu thêm nguồn mã xử lý biến cố Click của nút Check It như sau: Nhấp đôi vào Form, IDE sẽ dùng Designer Code Generator tạo phần nguồn mã với tập tin Adder.vb Nguồn mã bắt đầu với Public Class Adder. Nhấp vào tab mang tên Adder.vb [Design] để trở về giao diện Form Adder. (Lưu ý hình con trỏ chỉ các tab trong IDE từ Satrt Page, Adder.vb [Design] và Adder.vb ) Nhấp đôi vào nút Check It để mở phần nguồn mã của nút này với biến cố Click Gỏ nguồn mã sau đây phía dưới hàng Private Sub cmdCheckIt_Click (nhắc lại, cmdCheckIt là tên ta đặt cho nút Check It trong phần giao diện Form Adder): mã này kiểm tra xem ta đưa 1 giải đáp với con số hay chữ vào hộp chữ tbxResult? Nếu là con 25
  28. số, mã sẽ so sánh con số đó với kết quả bài toán cộng và báo cáo lại trong phần nhản hiệu lblResult. Dim resultNumber As Integer If IsNumeric(tbxResult.Text) Then resultNumber = CInt(tbxNumber1.Text) + CInt(tbxNumber2.Text) If CInt(tbxResult.Text) = resultNumber Then lblResult.Text = "Correct" Else lblResult.Text = "Wrong" End If Else tbxResult.Text = "" lblResult.Text = "Answer Status" MsgBox("Please enter your answer in number. Thanks", MsgBoxStyle.Information, "Warning") End If Tương tự, trở về phần thiết kế Form: Nhấp đôi vào chổ trống của Form cho nguồn mã Adder_Load Nhấp đôi vào nút More cho nguồn mã cmdMore_Click Gỏ nguồn mã cho Subroutine (sẽ học cách tạo Subroutine và Function ở các bài kế) SetRandomNumber. Mã ở đây tạo 2 con số ngẫu nhiên từ 1 đến 10000 cho bài toán cộng khi chạy ứng dụng Adder trong phần Adder_Load và trong nút More. Private Sub Adder_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SetRandomNumber() End Sub Private Sub cmdMore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdMore.Click SetRandomNumber() End Sub Private Sub SetRandomNumber() Dim firstNumber, secondNumber As Integer Randomize() firstNumber = CInt(Int((10000 - 0 + 1) * Rnd() + 0)) secondNumber = CInt(Int((10000 - 0 + 1) * Rnd() + 0)) tbxNumber1.Text = firstNumber tbxNumber2.Text = secondNumber End Sub Hình đặc trưng nguồn mã của dự án Adder: 26
  29. Hình 2.14. Viết code Bước 11: Nhấp nút Run (như hình dưới đây) để chạy ứng dụng (application) Adder trong môi trường IDE: Hình 2.15. Thanh menu Ta thấy bài toán cộng được hình thành với 2 số ngẫu nhiên và chờ ta gỏ vào giải đáp trong hộp chữ kế bên bút Check It. Sau đó, ta nhấp nút này để kiểm tra kết quả. Khi nào muốn làm lại bài toán cộng này, nhấp nút More: Hình 2.16. Chạy chương trình Lưu ý: MS Visual Studio.NET tạo một executable file mặc định là Adder.exe dưới một ngăn chứa cấp dưới (subfolder) BIN. Tập tin này là ứng dụng Adder tạo ra bởi dự án Adder. 27
  30. Bước 12: Lưu trữ mọi tập tin với thực đơn File, Save All CHƯƠNG 3: KIỂU DỮ LIỆU 3.1. Giới thiệu chung Thông tin (Information) diễn tả một sự việc nào đó dưới nhiều hình thức khác nhau, tỷ như: tin tức trên báo, tin nhận được từ ký giả viết tay trên giấy, sự cố báo cáo trên TV, khác với dữ kiện (Data) dùng diển tả thông tin đã được kiểm tra, đối chiếu, so sánh, xếp loại theo thứ tự và quan trọng hơn cả là được tổ chức để dùng trong một ứng dụng (application) điện toán. Do đó, thông tin được ghi chú ở các sổ tay không thể là dữ kiện mà một ứng dụng (application) nào đó có thể dùng được. Nếu muốn dùng thông tin như vậy, ta phải chuyển đổi qua hình thức dữ kiện, tỷ như: rà (scan) hay nhập (enter) vào 1 trang kế toán của MS Excel để có thể phân tích kết quả thu lượm. Mặc dù, Công Nghệ Tin Học đã phát triển và thay đổi nhanh chóng nhưng tiến trình xử lý và phát triển nhu liệu hầu như vẫn 'trước sau như một', nghĩa là không đổi gì cả. Ở đây, ta muốn nói đến phương thức cơ bản cho phát triển và giải đáp vấn đề cho việc lập trình. Anh Ngữ gọi là Algorithm. Algorithm đó là: Trước khi ta viết nhu liệu giải quyết một vần đề nào đó, ta phải phân ra (phân tích) thành những phần nhỏ hơn tùy từng trường hợp một để diển tả cách giải quyết vấn đề và sau cùng tổng hợp lại. Tóm lại, đây là một phương thức phân tích tổng hợp. Nếu không áp dụng phương thức này, vấn đề xem có vẻ như 'rối tung lên' không thể giải quyết được. Bây giờ, tưởng tượng bạn đang làm việc cho một ông ty viển thông. Vấn đề đặt ra là làm sao cung cấp được hoá đơn tính tiền điện thoại mà khách hành đã dùng. Ta phải bắt đầu từ đâu? Làm gì truớc, làm gì sau? Hoá đơn như thế nào? Phương thức cần có là chia vấn đề thành những phần việc nhỏ và truy cập cách giải quyết phần việc đó, giả dụ như: Vào mỗi đầu tháng, ta sẽ cung cấp hoá đơn đến mỗi khách hàng. Cho mỗi khách hành, ta cần một bảng liệt kê các cú gọi đi trong tháng. Ta cần biết khoãng thời gian dùng cho mỗi cú điện thoại? lúc gọi? trong tuần hay cuối tuần? ban ngày hay ban đêm? để tính toán chi phí mỗi cú điện thoại. Trong từng hoá đơn một, ta tổng kết chi phí các cú điện thoại (dưới tiêu đề nội địa, ngoại quốc hay mobile, ). Trong các dịp lễ lạc hay khuyến mãi, bao nhiêu phần trăm hạ giá? Ta cần cộng thêm tiền thuế bán dịch vụ cho mỗi hoá đơn. Sau khi tổng hợp lại, in ra và gởi hoá đơn đến khách hàng. Như vậy, ta thấy phân tích để giải quyết vấn đề khi viết nhu liệu, ta hoàn toàn không để ý hay làm gì dính dáng tới ngôn ngữ lập trình. Thật sự, đây là mấu chốt quan trọng nhất của một chuyên gia lập trình chuyên nghiệp. Nếu không, ta chỉ là thiên lôi, ai sai đâu thì đánh đó, không thể tự mình đưa giải đáp cho các trở ngại nêu ra trong khi chuẩn bị thiết kế và 28
  31. phát triển một ứng dụng (application). Nên làm chuyên gia lập trình chứ đừng ngừng lại ở 'người viết mã' mà thôi. Việc còn lại là chọn cho mình một ngôn ngữ lập trình hùng mạnh đủ khả năng phát triển các giải đáp cho mọi trở ngại trong nhu liệu. 'May mà có em': Visual Basic.NET (VB.NET). Một cách tổng quát, ngôn ngữ lập trình chỉ gồm các biến số (variables) và cách thức (methods). Vấn đề là ta vận dụng như thế nào trong khi viết nhu liệu. Ngôn ngữ lập trình dù phức tạp đến đâu thì cũng được xây dựng trên các biến số và cách thức mà thôi. Do đó, ta không thể so sánh ngôn ngữ lập trình này mạnh hơn hay yếu hơn, nhất là các ngôn ngữ lập trình .NET như Visual Basic.NET (VB.NET) hay C# hay C++. Trên thực tế, các ngôn ngữ lập trình .NET đều được biên dịch ra một ngôn ngữ trung gian là MSIL (Microsoft Intermediate Language). Nhớ trở thành một chuyên gia lập trình (Programmer) chứ đừng là chuyên gia lập trình Visual Basic.NET hay chuyên gia lập trình C#, Chỉ là Chuyên Gia Lập Trình thôi, ngôn ngữ lập trình chỉ là công cụ phụ giúp công việc của ta và chắc chắn sẽ thay đổi trong tương lai. Tội nghiệp, nhiều người cứ cho mình chỉ là chuyên gia lập trình VB6 chẳng hạn, và do suy nghĩ chưa tới hay chưa chính chắn như vậy, đã không thể học tiếp tục hay chuyển sang Visual Basic.NET làm uổng phí bao công sức và tài nguyên đào tạo trước đây. 3.2. Biến số (Variable) Biến số (Variable) dùng chứa một giá trị nào đó trong phương thức lập trình (algorithm). Ta có thể làm một quyết định dựa trên giá trị đó, tỷ như: giá trị đó bằng 9 không? hay nhỏ hơn 7? hay có thể thực hiện các thuật toán trên giá trị đó như cộng, trừ, nhân, chia, Quan sát phương thức lập trình (algorithm) sau: Tạo 1 biến số đặt tên là 'count' Trong biến số count, chứa giá trị 35 Cộng thêm 1 vào biến số count Hiển thị giá trị của biến số count trên màn hình (monitor) Như vậy, ta phải tuyên bố biến số (variables) count, cho vào giá trị 35, cộng 1 thành 36 và hiển thị số 36 trên màn hình. Trong Visual Basic.NET (VB.NET), dùng Dim và Redim tuyên bố biến số như sau: Dim myVariable As Long Dim myArray (5) As Integer Dim yourArray ( ) As String = {"Dần", "Thân", "Tỵ", "Hợi", "Tứ Hành Xung"} Redim myArray (10) As Integer Giải thích: Dùng Dim tuyên bố (hay tuyên cáo) biến số myVariable thuộc loại dữ kiện Long. Redim để tuyên bố lại, nhất là khi thay đổi cở của Array. myArray (5) là một chuỗi biến số gồm 6 số bắt đầu từ số 0 với myARray (0), myArray (1), đến myArray (5) loại dữ kiện số nguyên (Integer). yourArray ( ) dùng giá trị bên trong dấu { } để xác định cở (ở đây, cở = 5, chỉ số hay 'index' bắt đầu từ số 0, 1, 2, 3, 4). Array: 29
  32. Array dùng chỉ số (index) để lưu trữ nhiều giá trị dưới cùng một tên biến số (variables), tỷ như: Dim yourArray ( ) As String = {"Dần", "Thân", "Tỵ", "Hợi", "Tứ Hành Xung"} Dim strMonths ( ) As String = {"Giêng", "Hai", "Ba", "Tư", "Năm", "Sáu", "Bảy", "Tám", "Chín", "Mười", "Mười Một", "Chạp"} Dim empRecords (100) 3.3. Chú thích Trình biên dịch Visual Basic.NET (VB.NET Compiler) bỏ qua không biên dịch các phần comments, do đó ta có thể chú thích thêm phần dẩn giải hay phương thức giải quyết vấn đề cho từng nguồn mã. Chuyên nghiệp nhất là ghi lại algorithm của ta để các lập trình viên khác hay cả chính ta có thể hiểu mã ta đã viết từ nhiều tháng trước. Nhớ là con người cũng 'mau quên lạ lùng'. Trên thực tế, chính ta cũng không biết ta viết cái gì nếu đọc lại mã sau chừng vài tháng. Trong Visual Basic.NET (VB.NET), đánh dấu nơi ghi chú thích với dấu ' (dấu apostrophe) , tỷ như: 'tạo biến số count và chứa giá trị 35 Dim count As Integer count = 35 'cộng thêm 1 vào count count = count + 1 'hiển thị giá trị của count MessageBox.Show ("Value of count is now " & count) Whitespace cũng quan trọng không kém. Việc chừa các khoãng trống như vậy nhằm cho nguồn mã được đọc dễ dàng. Thường thường, ta nên chừa một hàng trống giữa các bước trong phươn gthức lập trình (algorithm) như thí dụ trình bày ở trên, ta thấy có hàng trống sau hàng count = 35. 3.4. Loại dữ kiện (Data Types) Khi dùng biến số (variables), ta cần biết và bố trí trước biến số đó lưu trữ loại dữ kiện (data types) nào, điều này giúp ích máy vi tính xử lý tài nguyên dễ dàng hơn trong lúc chạy ứng dụng (application). Tổng quát, các loại dữ kiện (data types) bao gồm: Số nguyên (Number) Loại dữ Cở (Size) Range Chú thích kiện Byte 1 byte 0 tới 255 Byte = 8 bits trong hệ thống nhị phân. Byte không yểm trợ số âm (negative number). Short 2 bytes -32,768 tới 32,768 Rất tiện lợi cho các biến số (variables) lưu trữ số nguyên cở nhỏ. Integer 4 bytes -2,147,483,648 tới Tiêu chuẩn số nguyên. Loại dữ kiện 30
  33. 2,147,483,647 này được máy vi tính xử lý nhanh nhất và ít tài nguyên nhất. Long 8 bytes 9,223,372,036,854,775,808 Đây là số nguyên lớn từ -9 quintillion tới tới 9 quintillion (-9 x 1018 tới +9 x 9,223,372,036,854,775,808 1018) Số thực (Decimal Number) Loại dữ Cở (Size) Range Chú thích kiện Single 4 bytes Cho số âm: -3.402823 x 10-38 tới Đây là số thực vô cùng nhỏ -1.401298 x 10-45. hay vô cùng lớn. Cho số dương: 1.401298 x 10-45 tới 3.402823 x 1038. Double 8 bytes Cho số âm: -1.79769313486231 Double còn gọi là loại dữ kiện x 10308 tới -4.94065645841247 x 'double prescision floating 10-324. point' do có thể lưu trữ số lẻ Cho số dương: gấp đôi loại 'single', tức là 15 4.94065645841247 x 10-324 tới số lẻ sau 'decimal point'. 1.79769313486231 x 10308. Chữ và hàng chữ (hay câu) Loại dữ kiện Cở (Size) Range Chú thích Char 2 bytes Một chữ Dùng lưu trữ từng chữ một. String 10 bytes + 2 bytes Hàng chữ Dùng lưu trữ một hàng chữ hay cả cho mỗi chữ có thể kéo dài tới 2 nguyên một cuốn sách. (character) tỷ (billion) chữ Các loại đơn giản khác Loại dữ kiện Cở (Size) Range Chú thích Boolean 2 bytes True hoặc VB.NET dùng 2 bytes cho số 0 (False) False và 1 (True). Date 8 bytes Từ ngày 1 Loại dữ kiện có khả năng tính toán tháng Giêng năm năm nhuần. Nếu ta cộng 1 ngày vào biến số 100 tới ngày 31 lưu trữ ngày 28/02/2000, ta sẽ có 29/02/2000 tháng Chạp năm nhưng nếu cộng cho ngày 28/02/2001, ta lại có 9999 01/03/2001. 3.5. Hằng số (Contants) Trái với biến số (variables), hằng số không thay đổi giá trị trong suốt đời sống của ứng dụng (application). Ta dùng Const để tuyên bố hằng số, tỷ như: Const PI = 3.1416 As Double Const DSN As String = "MyDatabaseName" 31
  34. 3.6. Tên Thông thường, ta thoả thuận một danh pháp chung khi đặt tên các biến số (variables) hay hằng số, nếu không, chính ta sau này có thể mất công tìm hiểu loại các biến số hay hằng số trong ứng dụng (application). Quy ước tổng quát khi đặt tên bao gồm 2 phần: Tiền tố (Prefix): thường dùng chữ in thường chỉ loại biến số (variables) hay hằng số (constant). Tên: chữ đầu tiên dùng chữ Hoa và tên phải đầy đủ ý nghĩa để khỏi mất công tham khảo sau này. Đề nghị tên quy ước như sau: Loại dữ kiện Tiền Tố (Prefix) Thí dụ Byte byt bytAge Short sht shtCounter Integer int intCounter Long lng lngResolution Single sng sngInterestRate Double dbl dblTotalSalesInYear Char chr chrMiddleName String str strAddress Boolean bol bolIsCompleted Date dte dteHireDate (User-defined types) (vài chữ - 2 hay 3 empRecord chữ trong tên của structure) Constant (no prefix, chữ nối TAX_RATE nhau bằng dấu _ underscores) Enumerations (vài chữ - 2 hay 3 dteWeekday, chữ trong tên của dowWeekday, Enumerations) colBackGroundColor 3.7. Phương thức (method) Method là nguồn mã độc lập (self-contained) dùng để thực hiện công việc ta muốn làm trong ứng dụng (application). Method rất quan trọng vì: Phân giải (break-up) chương trình thành các phần tử nhỏ hơn, có trách nhiệm rõ ràng, đơn giản hơn và dễ hiểu. Khuyến khích dùng lại nguồn mã (reusable code) Ta phân biệt 2 loại mehods: Subroutine: với Sub End Sub 32
  35. Function: với Function End Function Dùng Subroutine khi ta muốn thực hiện công việc gì đó và Function khi muốn nhận kết quả trả về. Thí dụ dùng subroutine 'SetRandomNumber' trong bài 5: Bố trí 2 số ngẫu nhiên vào hộp chữ nhưng không trả về giá trị nào. Sub SetRandomNumber() Dim firstNumber, secondNumber As Integer Randomize() firstNumber = CInt(Int((10000 - 0 + 1) * Rnd() + 0)) secondNumber = CInt(Int((10000 - 0 + 1) * Rnd() + 0)) tbxNumber1.Text = firstNumber tbxNumber2.Text = secondNumber End Sub Thí dụ dùng Function: Cộng 2 số và trả về kết quả bài toán cộng. Function Addition (ByVal Number1 As Integer, ByVal Number2 As Integer) Addition = Number1 + Number2 End Function Tên methods: Thường thường, ta đặt tên quy ước cho methods bằng động từ chỉ công việc thực hiện và tên phải đầy đủ ý nghĩa, tỷ như: GetCustomerName OpenCustomerRecord CalculateRepaymentPerMonth ReadXMLFile GetEnvironementVariables SaveMyNetworkConfiguration 3.8. Phạm vi (scope) Nhắc lại, method là nguồn mã chạy độc lập, do đó các biến số (variables) được tuyên bố trong một method chỉ có ý nghĩa khi dùng trong method đó mà thôi. Ta gọi là trong phạm vi method hay scope. Biến số (variables) dùng trong method này không có một chút ảnh hưởng gì đến biến số (variables) trong method khác, tỷ như: Sub DisplayMyName Dim strName strName = "Vũ Năng Hiền" MessageBox.Show(strName) End Sub Sub DisplayYourName Dim strName strName = "Đặng Quang Lương" MessageBox.Show(strName) End Sub 33
  36. Ta nhận thấy 2 subroutine có cùng 1 biến số (variables) strName nhưng giá trị 2 biến số (variables) này khác nhau. Thay đổi giá trị biến số strName trong subroutine DisplayMyName không làm thay đổi giá trị biến số strName trong subroutine DisplayYourName. CHƯƠNG 4: CẤU TRÚC LỆNH 4.1. Lệnh điều kiện Ta thường thấy một quyết định (making decisions) cần chuẩn bị và thi hành trong phương thức cơ bản (Algorithm). Với If , ta có thể khiến cho máy vi tính có vẻ như một con người có cá tính riêng biệt có thể quyết định muốn làm chuyện này hay chuyện kia tùy ý. Quyết định kiểu Conditional Logic trong nguồn mã gồm 2 loại: Loại để tìm hiểu ta đang xử lý phần nào trong algorithm hoặc đối phó với các trở ngại định trước hay bất ngờ. Thí dụ như: ta muốn mở 10 tập tin để đọc, trước hết ta cần kiểm tra xem tập tin có hiện diện hay không? Nếu không, ta sẽ phải làm gì? Nếu có, ta cần kiểm tra xem khi nào tập tin đó được đọc hết? Sau đó, ta sẽ lập lại các bước kiểm tra đó với tập tin kế. Loại để thi hành các phần khác nhau trong algorithm dựa trên dữ kiện nào đó. Thí dụ như: ta muốn gởi email đến 10 khách hàng trong danh sách với điều kiện khách hàng đó có máy vi tính, nếu không ta phải điện thoại hay in thư gởi đến khách hàng. Các cú pháp (syntax) khi dùng If như sau: Cú pháp 1: Cách đơn giản nhất khi làm một quyết định. If (điều kiện) Then (mã thi hành nếu điều kiện thỏa mãn, nghĩa là = True) End If Thí dụ: 'Tuyên bố biến số và giá trị cho intYourAge Dim intYourAge intYourAge = 70 'Quyết định và công bố kết quả If intYourAge => 65 Then MessageBox.Show ("You should retire") End If Cú pháp 2: Quyết định với 2 tình trạng trái ngược nhau. If (điều kiện) Then (mã thi hành nếu điều kiện thỏa mãn, nghĩa là = True) Else (mã thi hành nếu điều kiện không được thỏa mãn, nghĩa là = False) End If 34
  37. Thí dụ: 'Tuyên bố biến số và giá trị cho intYourAge Dim intYourAge intYourAge = 40 'Quyết định và công bố kết quả If intYourAge => 65 Then MessageBox.Show ("You should retire.") Else MessageBox.Show ("You are too young to retire.") End If Cú pháp 3: Quyết định với nhiều tình trạng thay đổi hay khác nhau. If (điều kiện 1) Then (mã thi hành nếu điều kiện 1 thỏa mãn, nghĩa là điều kiện 1 = True) ElseIf (điều kiện 2) Then (mã thi hành nếu điều kiện 2 được thỏa mãn, nghĩa là điều kiện 2 = True) Else (mã thi hành khi không điều kiện nào thỏa mãn, nghĩa là điều kiện 1 và điều kiện 2 đều = False) End If Thí dụ: 'Tuyên bố biến số và giá trị cho intYourAge Dim intYourAge intYourAge = 50 'Quyết định và công bố kết quả If intYourAge => 65 Then MessageBox.Show ("You should retire.") ElseIf intYourAge => 45 Then MessageBox.Show ("You should pay more to your current scheme.") Else MessageBox.Show ("You are too young to worry about.") End If Cú pháp 4: Quyết định trong quyết định (Nested If). If (điều kiện 1) Then (mã thi hành nếu điều kiện 1 thỏa mãn, nghĩa là điều kiện 1 = True) If (điều kiện 2) Then (mã thi hành nếu điều kiện 1 và 2 được thỏa mãn, nghĩa là điều kiện 1 = true và điều kiện 2 = True) End If End If Thí dụ: 'Tuyên bố biến số và giá trị cho intYourAge 35
  38. Dim intYourAge intYourAge = 65 'Quyết định và công bố kết quả If intYourAge > 55 Then MessageBox.Show ("You should retire.") If intYourAge = 65 Then MessageBox.Show ("You must retire.") End If End If Chú thích: Nếu ta trên 55 tuổi, MessageBox sẽ hiển thị hàng chữ 'You should retire', nhưng nếu ta đúng 65, MessageBox sẽ hiển thị hàng chữ 'You must retire'. Sở dỉ có điều kiện trong điều kiện trên 55 tuổi như vậy là vì tuổi ta có thể là 60 hay 70 miễn sao trên 55 là được, do đó ta kèm thêm một điều kiện nữa để có thể hiển thị hàng chữ 'You must retire' khi nào số tuổi vừa đúng 65. Cú pháp 5: Dùng If chỉ trong một hàng mã có thể gọn gàng hơn nhưng không cung cấp cấu trúc algorithm rõ ràng và thường khó đọc hơn. If (điều kiện) Then (mã thi hành nếu điều kiện = True) Else (mã thi hành nếu điều kiện = False) hoặc If (điều kiện) Then (nếu điều kiện =True, thi hành mã 1: mã 2 : mã 3: ) Lưu ý: kiểu cú pháp 5 không cần phải có End If ở cuối hàng. Thí dụ: Dim count As Integer If count = 8 Then MessageBox.Show ("Count = 8") Else MessageBox.Show ("Count is not 8") If count = 8 Then MessageBox.Show ("Count = 8") : count = count + 1 : MessageBox.Show ("Count is now " & count) Chú thích: Ở hàng If đầu tiên, ta tuyên bố biến số (variables) count , so sánh với giá trị 8 và hiển thị kết quả. Hàng If thứ nhì, ta hiển thị kết quả, sau đó cộng thêm 1 vào cùng 1 biến số (variables) count, như vậy count (cuối cùng) = count (với giá trị là 8) + 1 sẽ bằng 9 và hiển thị kết quả Count is now 9. Tuy nhiên, với chỉ 1 hàng mã như vậy, ta nhận thấy khó đọc và khó theo dõi các bước tiến hành trong algorithm. Trong trường hợp có chừng 10, 20 hàng mã, các bạn thữ xem nguồn mã của ta 'rối mù' lên như thế nào? Kiểu viết này cần phải tránh tối đa khi soạn nguồn mã. Thữ so sánh với mã sau đây với từng bước phân biệt rõ ràng theo 1 quy ước 'đá ngầm' =8-)) chung là mã được viết từ trên xuống dưới, ta thấy mã dễ đọc, dễ hiểu hơn gấp bội lần: Dim count As Integer 36
  39. If count = 8 Then MessageBox.Show ("Count = 8") count = count + 1 MessageBox.Show ("Count is now " & count) End If 4.2. Toán tử so sánh Khi dùng If để kiểm tra các diều kiện, không những ta chỉ so sánh bằng ( = ) không thôi, mà còn so sánh nhiều kiểu khác nhau nữa. Gọi chung là các dấu so sánh (Comparision Operators) gồm có: : là dấu không bằng (Not Equal To) : dấu lớn hơn = : dấu lớn hơn hoặc bằng AND : dùng kiểm tra hơn 1 điều kiện OR : dùng kiểm tra điều kiện này hoặc điều kiện nọ Vài thí dụ: If yourSurName "Vu" Then MessageBox.Show("You are not my relative") End If If yourAge 21 Then MessageBox.Show("You can marry") End If If yourAge = 65 Then MessageBox.Show("You must retire") End If If yourAge >= 18 AND yourHeigth >= 1.60 Then MessageBox.Show("You can be a movie star") End If If yourPreferredDrink = "Rượu" OR yourPreferredDrink = "Bia" Then MessageBox.Show("You are dân nhậu") End If Chú thích: Nhắc thêm ở đây về cách dùng AND và OR trong điều kiện. Ta biết khi điều kiện được kiểm tra sẽ cho biết giá trị là True (hay 1, hay 'ON', hay là Tắc hoặc Đóng) hoặc False 37
  40. (hay 0, hay 'OFF', hay là Mở hoặc Khoá). Wow, tiếng Việt cũng phong phú quá nhỉ, diển tả một việc mà có cả 2, 3 chữ lận. Để dễ nhớ, ta thiết lập bảng sau: AND operator: Điều kiện A Điều kiện B Kết quả Chú thích 0 0 0 Nếu A False và B False, kết quả sau cùng là False 0 1 0 Nếu A False và B True, kết quả sau cùng là False 1 0 0 Nếu A True và B False, kết quả sau cùng là False 1 1 1 Nếu A True và B True, kết quả sau cùng là True. Ta thấy chỉ có một trường hợp bằng True với dấu AND khi nào cả 2 đều True. OR operator: Điều kiện A Điều kiện B Kết quả Chú thích 0 0 0 Nếu A Fasle và B False, kết quả sau cùng là False. Ta thấy chỉ có một trường hợp bằng False với dấu OR khi nào cả 2 đều False. 0 1 1 Nếu A False và B True, kết quả sau cùng là True 1 0 1 Nếu A True và B False, kết quả sau cùng là True 1 1 1 Nếu A True và B True, kết quả sau cùng là True. 4.3. So sánh xâu Khi so sánh chữ hay câu, ta thường gặp trở ngại khi không lưu ý đến các chữ thường hay chữ Hoa (case sensitive). Nhớ là đối với máy vi tính, khi so sánh như vậy, chữ a thường khác với chữ A Hoa vì chúng có giá trị khác nhau. Thí dụ 1: Dim mySociety As String mySociety = "VOVISOFT" If mySociety = "Vovisoft" Then MessageBox.Show("You are a Vovisoft's member") Else MessageBox.Show("You are not a Vovisoft's member") End IF Thí dụ 2: dùng Compare method của String object so sánh 2 chữ hay câu như sau: Dim mySociety As String mySociety = "VOVISOFT" If String.Compare (mySociety, "Vovisoft", True) = 0 Then MessageBox.Show("You are a Vovisoft's member") Else MessageBox.Show("You are not a Vovisoft's member") 38
  41. End IF Chú thích: String.Compare dùng để so sánh 2 giá trị của String và trả về 1 số nguyên (Integer) sau khi so sánh. Nếu method trả về số 0, nghĩa là 2 chữ hay câu giống nhau về giá trị, ngoài ra sẽ trả về số khác số 0. 4.4. Lệnh lựa chọn Đây là loại thứ nhì trong Conditional Logic để thi hành các phần khác nhau trong algorithm dựa trên những điều kiện khác nhau nào đó. Thí dụ như: Nếu là khách hàng A, gởi email đến địa chỉ khách hàng A. Nếu là khách hàng B, gởi email đến địa chỉ khách hàng B. Nếu là khách hàng C, gởi email đến địa chỉ khách hàng C. Nếu là khách hàng D, gởi email đến địa chỉ khách hàng D. Nếu là khách hàng E, gởi email đến địa chỉ khách hàng E. Ta có thể dùng If Then ElseIf End If như sau: If khách hàng = "A" Then gởi email đến địa chỉ khách hàng A ElseIf khách hàng = "B" Then gởi email đến địa chỉ khách hàng B ElseIf khách hàng = "C" Then gởi email đến địa chỉ khách hàng C ElseIf khách hàng = "D" Then gởi email đến địa chỉ khách hàng D ElseIf khách hàng = "E" Then gởi email đến địa chỉ khách hàng E End If Tuy nhiên, nếu ta muốn đổi khách hàng thành công ty chẳng hạn, ta phải thay đổi chữ khách hàng ở từng câu If một, như vậy quả là phiền phức và không đạt năng suất cao như cách dùng cú pháp Select Case : Cú pháp 1 (Syntax 1): Select Case công ty Case "A" gởi email đến địa chỉ công ty A Case "B" gởi email đến địa chỉ công ty B Case "C" gởi email đến địa chỉ công ty C Case "D" gởi email đến địa chỉ công ty D Case "E" gởi email đến địa chỉ công ty E End Select Lưu ý: 39
  42. Khi dùng Select Case, nhớ để ý chữ thường và chữ Hoa là 2 chữ khác biệt nhau, tỷ như: công ty A khác với công ty a. Cú pháp 2: Dùng Select Case để chọn trường hợp gồm nhiều điều kiện có một giải đáp chung: Select Case strMyContactName Case "A", "B", "E" MessageBox.Show ("Chào các bạn học viên khoá VB.NET", "Greeting") Case "C", "D" MessageBox.Show ("Chào các bạn mới tham gia khoá VB.NET", "Greeting") End Select Trong đó, ta thấy trường hợp A, B và E có chung một giải đáp nhưng khác với trường hợp C và D. Cú pháp 3: Dùng Select Case cho các trường hợp ngoại lệ Case Else: Select Case strMyContactName Case "A", "B", "E", "C", D" MessageBox.Show ("Chào các bạn học viên khoá VB.NET", "Greeting") Case Else MessageBox.Show ("Chào quí vị quan khách tham quan khoá VB.NET", "Greeting") End Select 4.5. Vòng lặp Looping Logic dùng trong trường hợp cần lập đi lập lại nhiều lần (hay đúng hơn nữa, một số lần nhất định) việc thi hành một công tác nào đó, tỷ như: cộng thêm 10 sản phẩm vào bảng liệt kê sản phẩm của công ty, hiển thị (display) 5 CD nhạc tuyệt phẩm hàng đầu trong năm 2 loại cơ bản của Looping Logic - For loop và Do loops bao gồm: For Next For Each In Next Do Until Loop Do While Loop Các trường hợp đặc biệt Cú pháp 1: For số lần đếm từ số đến số (thi hành công việc nào đó) Next Thí dụ 1: 'Tuyên bố biến số dùng làm counter Dim intCounter For intCounter = 1 To 10 MessageBox.Show ("Vovisoft", "Greeting") 40
  43. Next Thí dụ 2: 'Tuyên bố biến số dùng làm counter Dim intCounter For intCounter = 10 To 100 Step 10 MessageBox.Show ("Vovisoft", "Greeting") Next Chú thích: Thí dụ 1, tạo biến số (variables) intCounter để đếm từ 1 đến 10, mỗi lần đếm như vậy trong For Next loop, ta hiển thị 1 window với hàng chữ Vovisoft. Thí dụ 2, mỗi lần đếm ta nhảy 10 bước (hay cộng thêm 10 vào số lần đếm) bắt đầu với inCounter = 10 là lần đầu tiên, kế là 20, 30, đến 100. Cú pháp 2: For Each In (thi hành công việc nào đó) Next Thí dụ: Liệt kê tất cả các ngăn chứa phụ (subfolders) trong dĩa C (root directory trong drive C) 'Tuyên bố biến số loại array dùng lưu trữ các ngăn chứa phụ (subfolders) Dim subFolders( ) As DirectoryInfo subFolders = New DirectoryInfo("C:\").GetDirectories 'Loop để liệt kê tất cả các ngăn chứa phụ (subfolders) trong dĩa C Dim subFolder As DirectoryInfo For Each subFolder In subFolders lstData.Items.Add (subFolder.FullName) Next Chú thích: Tuyên bố và tạo biến số (variables) loại Array trực thuộc object DirectoryInfo. Dùng method GetDirectories của object DirectoryInfo để lấy và lưu trữ các ngăn chứa phụ trong dĩa C. Sau đó, dùng For Each Next loop kiểm tra từng khoản (món) một trong array subFolders và cộng tên của món đó vào bảng liệt kê tên lstData. Cú pháp 3: Do Until (điều kiện) (thi hành công việc nào đó) Loop Thí dụ: Liệt kê từng số ngẫu nhiên và chấm dứt loop khi nào số đó là số 10 'Bố trí object tạo số ngẫu nhiên Dim random As New Random( ) 'Tuyên bố và bố trí 1 biến số chứa số ngẫu nhiên mặc định là 0 Dim intRandomNumber As Integer = 0 41
  44. 'Loop cho đến khi nào số intRandomNumber = 10 Do Until intRandomNumber = 10 'Tạo 1 số ngẫu nhiên intRandomNumber = random.Next (25) 'cộng vào bảng liệt kê tên lstData lstData.Items.Add (intRandomNumber) Loop Chú thích: Ta dùng random là 1 instance của object Random để tạo số ngẫu nhiên (random number generator) trong Do Until Loop và lưu trữ giá trị đó vào biến số (variables) intRandomNumber. Khi nào giá trị số này bằng 10, ta chấm dứt việc cộng số vào bảng liệt kê tên lstData. Cú pháp 4: Ngược lại với Do Until Loop là Do While Loop. Do While Loop chỉ thi hành khi nào điều kiện bằng True, ngược lại với Do Until Loop sẽ chấm dứt khi nào điều kiện bằng True. Do While (điều kiện) (thi hành công việc nào đó) Loop Thí dụ: Liệt kê từng số ngẫu nhiên và chấm dứt loop khi nào số đó = 10 hay lớn hơn 10 'Bố trí object tạo số ngẫu nhiên Dim random As New Random( ) 'Tuyên bố và bố trí 1 biến số chứa số ngẫu nhiên mặc định là 0 Dim intRandomNumber As Integer = 0 'Loop khi số intRandomNumber < 10 Do While intRandomNumber < 10 'Tạo 1 số ngẫu nhiên intRandomNumber = random.Next (25) 'cộng vào bảng liệt kê tên lstData lstData.Items.Add (intRandomNumber) Loop Chú thích: Ta dùng random là 1 instance của object Random để tạo số ngẫu nhiên (random number generator) trong Do While Loop và lưu trữ giá trị đó vào biến số (variables) intRandomNumber. Khi nào giá trị số này nhỏ hơn 10, ta cộng số đó vào bảng liệt kê tên lstData, nếu không, ta chấm dứt loop. Cú pháp 5: Đây là phiên bản khác của Do Until và Do While: 42
  45. Do (thi hành công việc nào đó) Loop While (điều kiện) Do (thi hành công việc nào đó) Loop Until (điều kiện) Lưu ý: Phiên bản này khác phiên bản trước ở chổ: Thi hành công việc trước Sau đó mới kiểm tra điều kiện để tiếp tục hay chấm dứt loop, như vậy tối thiểu, công việc được thi hành 1 lần. Các trường hợp đặc biệt: 1. Nested Loops: Nhiều trường hợp cần đến 2 hay nhiều loop trong algorithm, tỷ như: 'Tuyên bố và bố trí hàng và cột Dim intRow, intColume As Integer 'Loop hàng từ hàng thứ nhất đến hàng 10 For intRow = 1 To 10 'Trong mỗi hàng, loop từng cột một từ cột thứ nhất đến cột 5 For intColume = 1 To 5 'hiển thị hàng và cột vào bảng liệt kê tên lstData lstData.Items.Add ("Hàng " & intRow & " và cột " & intColume) Next Next Chú thích: Ta dùng 2 lần For Next (nested loop) để hiển thị hàng trước cột sau trong bảng liệt kê tên lstData theo thứ tự sau: Hàng 1 và cột 1 Hàng 1 và cột 2 Hàng 1 và cột 3 Hàng 1 và cột 4 Hàng 1 và cột 5 Hàng 2 và cột 1 Hàng 2 và cột 2 Hàng 2 và cột 3 Hàng 2 và cột 4 Hàng 2 và cột 5 Hàng 10 và cột 1 Hàng 10 và cột 2 Hàng 10 và cột 3 43
  46. Hàng 10 và cột 4 Hàng 10 và cột 5 Dùng Exit For hay Exit Do để chấm dứt loop (quit) vô điều kiện. Coi chừng, khi tạo và bố trí loop, ta có thể sa vào nghiệp chướng không lối thoát, vú dụ như: 'Tuyên bố biến số Dim counter As Integer = 0 'Loop bế tắc không lối thoát Do counter += 1 Loop Until counter = 0 Chú thích: Mặc dù trước khi vào loop, counter = 0 nhưng với counter += 1 được thi hành trước khi kiểm tra điều kiện counter = 0, ở đây có nghĩa là counter (hiện tại) bằng counter (trước đó là 0) cộng thêm 1 như vậy giá trị của counter bây giờ bằng 1 (vì 0 + 1 = 1). Đến khi kiểm tra điều kiện counter = 0 ở câu Loop Until counter = 0, điều kiện này sẽ là False, do đó loop bắt đầu lập lại với counter = 2, 3, 4, cho đến 'muôn đời'. =8-(( Cách trị khi sa vào Infinite Loop: Trường hợp chạy ứng dụng (application) trong MS Visual Studio.NET, chọn Debug | Stop Debugging để chấm dứt. Trường hợp chạy ứng dụng (application) bên ngoài MS Visual Studio.NET, nhấp các nút Ctrl + Alt + Delete và chọn Task Manager, sau đó chọn ứng dụng (application) có hàng chữ kèm 'Not Responding' trong phần mục Status và nhấp nút End để chấm dứt. Cuối cùng, kiểm tra và điều chỉnh lại điều kiện để chấm dứt loop. CHƯƠNG 6: VIẾT CHƯƠNG TRÌNH 6.1. Chương trình myMenu Tạo mới một giải pháp mang tên MyMenu và thêm vào đó một dự án mới cùng tên như đã biết trong các bài tập trước. Tại giao diện thiết kế, các bạn đưa điều khiển MenuStrip vào trong Form bằng cách double click hay kéo thả như đã biết. Chúng ta không cần quan tâm đến vị trí của menu trên form vì VS sẽ tự động đặt nó sao cho phù hợp. Các bạn có thể thay đổi các thuộc tính sao cho phù hợp bằng cách click mở Smart Tags là nút mũi tên tam giác màu đen bên góc phải điều khiển Menu. 44
  47. Hình 6.1. Tạo menu Khi được đặt vào form thì điều khiển menu sẽ được đặt tại một vùng như trên hình gọi là khay công cụ - Component tray và VS sẽ hiển thị trực quan menu trên đầu cửa sổ Form. Chuỗi Type Here là nơi bạn có thể click chọn và nhập vào các mục chọn cho menu. Chúng ta sẽ tạo ra menu ngay sau đây. Nhắp chuột vào chuỗi Type Here và gõ vào chuỗi “Clock” và ấn enter. Nhắp chuột vào chuỗi Type Here con ở dưới rồi gõ Date, Time như hình Hình 6.2. Menu con Để đóng phần thiết kế menu, bạn click vào một vùng nào đó trên form, để hiển thị bạn lại click vào menu Clock như trên. Bây giờ chúng ta sẽ tạo một số tùy biến cho Menu. Trong một số phần mềm hay ngay trình duyệt Windows Explorer của hệ điều hành các bạn có thể ấn tổ hợp Alt + phím tắt để mở nhanh một thực đơn nào đó. Các phím tắt ấy được gọi là phím truy cập – Access Key. Phím này có dấu gạch chân ở dưới. Trong VS, để tạo phím này ở menu khá đơn giản. Bạn chỉ việc gõ thêm dấu „&‟ trước ký tự nào muốn hiển thị gạch chân trong phần Type Here. Bạn hãy tạo ra các phím tắt cho các mục chọn của menu Clock như hình: 45
  48. Hình 6.3. Phím tắt Việc thay đổi thứ tự các mục chọn khá đơn giản, bạn mở chế độ thiết kế menu rồi nhắp chọn mục chọn nào đó và kéo nó đến vị trí mong muốn. Bạn thử kéo mục chọn Time lên thay cho vị trí mục chọn Date xem. Bây giờ chúng ta tạo ra sự kiện click cho các mục chọn của menu. Khi bạn click vào Date hay Time thì một nhãn Label sẽ xuất hiện và hiển thị thông tin ngày hay giờ tương ứng. Để làm được như thế, trước hết bạn tạo ra một Label vào trong form.Tạo thuộc tính cho đối tượng Label1 như sau: BorderStyle – FixedSingle; Font – Bold 14; Text – rỗng; TextAlign – MiddleCenter. Cài đặt thủ tục sự kiện cho mục chọn menu Bây giờ chúng ta sẽ tạo sự kiện click cho các mục con trong menu Clock. Nhắp vào menu Clock trên form1 để hiển thị menu con Nhắp đôi chuột vào mục chọn Time để mở cửa sổ Code Editor và tạo ra một thủ tục có tên TimeToolStripMenuItem_Click. Trong VS.NET 2005 thì khi bạn gõ tên mục chọn là gì thì mặc định khi double click để viết mã thì VS sẽ tạo ra một thủ tục có phần đầu tên trùng với tên mục chọn (phần tên chưa có dấu cách trống phân cách tên mục chọn) menu (ở trên là TimeToolStripMenuItem_Click). Tất nhiên đây là default, bạn có thể thay đổi tên nhờ thuộc tính Name ở cửa sổ Properties. Nhập dòng mã sau: Label1.Text = TimeString Tương tự với thủ tục DateToolStripMenuItem_Click của mục chọn Date Label1.Text = DateString Thêm mục File vào menu chương trình Bạn tạo thêm một mục con Color vào trong menu Clock. Mục này sẽ kích hoạt hộp thoại 46
  49. ColorDialog1 chọn màu cho Label1. Tạo một Menu File bên cạnh menu Clock như hình. Đồng thời tạo thêm các mục con Open, Close, Exit trong menu này. Hình 6.4. Menu file Tiếp theo bạn thay đổi tên bằng thuộc tính Name trong cửa sổ Properties cho các mục chọn: mục Open thành mnuOpenItem, Close thành mnuCloseItem, Exit thành mnuExitItem. Bạn cũng đặt thuộc tính Enable của mục Close (giờ là mnuCloseItem) thành False. Thuộc tính này vô hiệu hóa hay làm mờ mục Close như hình. Nó chỉ được sáng lên để người dùng click khi mã thực thi chương trình cho phép. Viết mã chương trình Bạn tạo thủ tục mnuOpenItem_Click bằng cách double click vào mục Open trên menu File và nhập đoạn mã sau: OpenFileDialog1.Filter = "Bitmaps (*.bmp) | *.bmp" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then PictureBox1.Image = System.Drawing.Image.FromFile _ (OpenFileDialog1.FileName) mnuCloseItem.Enabled = True End If Chú thích mã: - Đoạn mã thứ nhất giúp lọc ra loại file để mở là file ảnh dạng Bitmap (*.bmp). Bạn có thể mở nhiều loại file bằng câu lệnh: OpenFileDialog1.Filter = _ "Bitmaps(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg|All Files(*.*)|*.*" - Phương thức ShowDialog() là phương thức mới trong VS.NET, nó có thể dùng được với mọi hộp thoại và cửa sổ Windows Forms. Phương thức này trả về kết quả mang tên DialogResult cho biết người dùng đã click vào hộp thoại. Và nếu nút OK được click thì kết quả trả về sẽ bằng với DialogResult.OK. 47
  50. - Khi nút Open được nhấn, nếu hợp lệ thì thuộc tính FileName của OpenFileDialog sẽ mang đầy đủ đường dẫn và tên file của file đã mở vì thế mà dòng mã thứ 3 sẽ nạp chính xác ảnh vào PictureBox1. Tương tự bạn cũng double click vào mục Close để tạo thủ tục click cho nó và nhập chính xác đoạn mã sau: PictureBox1.Image = Nothing mnuCloseItem.Enabled = False Khi mở ảnh rồi thì mục Close sáng lên, khi click vào mục này thì PictureBox1 không còn ảnh nữa và mục này lại bị vô hiệu hóa. Nhắp đôi vào mục Exit và nhập dòng mã: End Tạo thủ tục mnuColorItem_Click bằng cách double click hay chọn từ danh sách xổ xuống như hình Hình 6.5. Sự kiện tích chuột 48
  51. Hình 6.6. Sự kiện Nhập vào đoạn mã: ColorDialog1.ShowDialog() Label1.ForeColor = ColorDialog1.Color Chú thích mã: - Phát biểu đầu tiên gọi ShowDialog() để hiển thị hộp thoại ColorDialog. - Phát biểu thứ hai nhận giá trị màu trả về từ hộp thoại ColorDialog và gán cho màu chữ Text – ForeColor của điều khiển Label1. Bạn có thể gán màu cho bất cứ thuộc tính nào như BackColor. Ngoài ra, bạn cũng có thể thêm các thuộc tính khác cho hộp thoại ColorDialog trước khi gọi đến phương thức ShowDialog(). Một số thuộc tính và cách gọi được liệt kê như sau: 'ColorDialog1.FullOpen = True :Hiển thị khung tùy biến màu mở rộng 'ColorDialog1.AllowFullOpen = True: hiển thị nút định nghĩa màu tùy biến 'ColorDialog1.AnyColor = True: cho phép chọn tất cả các loại màu 'ColorDialog1.ShowHelp = True: Hiển thị nút nhấn trợ giúp 'ColorDialog1.SolidColorOnly = True: Hiển thị chỉ những màu đặc Bạn hãy chạy chương trình bằng cách nhấn phím F5 hay Start trên Standard Bar và thử tất 49
  52. cả các tính năng của chương trình. Phím tắt cho phép bạn ấn tổ hợp phím để thực hiện lệnh mà không cần chọn menu. Ví dụ như Ctrl+C để sap chép một đoạn text trong Word. Chúng ta thử gán các phím tắt cho menu trong chương trình MyMenu xem sao. Trước hết mở giải pháp MyMenu ở chế độ thiết kế Click vào menu Clock trên Form, chọn mục Time và R-Click chọn Properties. Thiết lập thuộc tính ShortCutKeys như hình Hình 6.7. đặt phím tắt Tương tự bạn chọn các mục còn lại theo ý thích miễn là các phím nóng không trùng nhau. 6.2. Chương trình các toán tử cơ sở Giao diện: Hình 6.8. Giao diện các phép toán cơ sở 50
  53. Chương trình gồm hai textbox cho phép nhập hai giá trị để gán cho hai biến value1 và value2, bốn radiobutton cho phép chọn bốn toán tử khác nhau, khi đã nhập đầy đủ hai giá trị thì có thể thực hiện tính bằng cách nhấp chọn nút „thực hiện tính‟ và kết quả hiển thị trong ô textbox3 – kết quả. Xây dựng giao diện: Bạn tạo một giải pháp và thêm một dự án cùng tên BasicMath đồng thời thiết kế giao diện như hinh. Viết mã: - Khai báo biến: bạn khai báo 2 biến value1, value2 ở đầu lớp form1 như sau: Dim value1, value2 As Double - Tạo thủ tục Button1_Click bằng cách double click vào nút „thực hiện tính‟ và nhập đoạn mã sau: If TextBox1.Text = "" Or TextBox2.Text = "" Then MsgBox("Bạn cần nhập đầy đủ hai giá trị") Else value1 = CDbl(TextBox1.Text) value2 = CDbl(TextBox2.Text) If RadioButton1.Checked = True Then TextBox3.Text = value1 + value2 End If If RadioButton2.Checked = True Then TextBox3.Text = value1 - value2 End If If RadioButton3.Checked = True Then TextBox3.Text = value1 * value2 End If If RadioButton4.Checked = True Then TextBox3.Text = value1 / value2 End If End If Chú thích mã: - Hàm CDbl là hàm chuyển kiểu sang kiểu Double. Thực thi chương trình: Bạn ấn phím F5 hay nút start để chạy chương trình. 51
  54. CHƯƠNG 7: MẢNG 7.1. Làm việc với mảng Mảng giúp quản lý các dữ liệu lớn hết sức dễ dàng. Việc truy cập các phần tử của mảng thông qua chỉ số. Việc khai báo mảng tương tự như khai báo biến. Việc khai báo thường chứa các thông tin như: - Tên mảng: Tên đại diện cho mảng, việc truy cập một phần tử mảng gồm tên mảng và chỉ số mảng. - Kiểu dữ liệu: Tất cả các phần tử trong mảng phải có cùng kiểu. - Kích thước mảng: Là số chiều của mảng. - Số phần tử của mảng: Số phần tử tối đa của mảng Cú pháp chung khai báo mảng có kích thước là: Dim ArrayName(Dim1Index, Dim2Index) As DataType Trong đó: - ArrayName: tên mảng - Dim1Index và Dim2Index: là hai chiều của mảng - Datatype: kiểu dữ liệu của mảng. Khi chưa xác định kiểu cụ thể, có thể dùng kiểu Object. Ví dụ: Khai báo Dim Employee(4) As String khai báo mảng một chiều chứa 5 phần tử có tên là Employee có kiểu String. Bạn cũng có thể khai báo mảng một cách toàn cục trong module bằng từ khóa Public như sau: Public Employee(4) As String. Để khai báo mảng hai chiều mang tên ScoreBoard bạn có thể khai báo như sau: Dim ScoreBoard(1, 4) As Short Mảng này gồm 2*5 = 10 phần tử tương ứng với 10 ô vuông gồm hai dòng và 5 cột đánh số từ 0. 7.2. Làm việc với các phần tử trong mảng Sau khi khai báo, bạn có thể sử dụng mảng. Việc truy cập vào một phần tử của mảng nhờ tên mảng và chỉ số của mảng đặt trong ngoặc đơn, chỉ số là số nguyên, là biến nguyên hay biểu thức có giá trị. Để duyệt qua tất cả các phần tử trong mảng, dùng vòng lặp For Next. Ví dụ: employee(3) = "Thanh Van" 52
  55. Phát biểu trên gán cho phần tử có chỉ số thứ 3 (tại ô thứ 4) tên là “Thanh Van”. ScoreBoard(0, 2) = 12 Phát biểu trên gán cho phần tử ở dòng 0, cột 2 giá trị là 12. 7.3. Sử dụng mạng có kích thước cố định Bây giờ ta tạo ví dụ MyFixedArray sử dụng mảng một chiều có tên nhietdo để ghi lại giá trị nhiệt độ cao thấp hàng ngày trong tuần. Mảng này được khai báo ở đầu form và được gán giá trị bằng hàm InputBox nhờ vòng lặp For Next. Toàn bộ nội dung của mảng sau đó lại được hiển thị lại vào một textbox cũng nhờ vòng lặp For Next. Thiết kế giao diện: Tạo mới một giải pháp và thêm vào một dự án có cùng tên là MyFixedArray. Thiết kế giao diện như hình: Hình 7.1. Màn hình thiết kế Trong đó: nút button1 có text là “Điền nhiệt độ”, button2 là “Hiển thị nhiệt độ”, button3 là “Thoát”. Viết mã: Trước hết ta khai báo mảng nhietdo ở ngay dưới dòng Public Class Form1 như sau: Dim nhietdo(6) As Single Khai báo như thế này nghĩa là tất cả các thủ tục, các hàm đều có thể sử dụng mảng này. Tiếp theo ta tạo ra sự kiện nhập vào các giá trị nhiệt độ trong tuần bằng cách tạo thủ tục Button1_Click và nhập mã như sau: Private Sub Button1_Click(ByVal sender As Object, _ 53
  56. ByVal e As System.EventArgs) Handles Button1.Click Dim Prompt, tieude As String Dim i As Short Prompt = "Điền vào nhiệt độ của ngày." For i = 0 To UBound(nhietdo) tieude = "Ngày " & (i + 1) nhietdo(i) = CInt(InputBox(Prompt, tieude)) Next End Sub Trong đó, hàm Ubound(nhietdo) là hàm lấy về chỉ số trên của mảng nhietdo, trong trường hợp này là 6. Sau đó ta cho hiển thị các giá trị nhiệt độ trong bảy ngày trong tuần cũng như giá trị nhiệt độ trung bình bằng thủ tục Button2_Click khi người dùng click vào nút “Hiển thị nhiệt độ” như sau: Private Sub Button2_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim ketqua As String Dim i As Short Dim tong As Single = 0 ketqua = "Nhiệt độ của tuần: " & vbCrLf & vbCrLf For i = 0 To UBound(nhietdo) ketqua = ketqua & "Ngày " & (i + 1) & _ vbTab & nhietdo(i) & vbCrLf tong = tong + nhietdo(i) Next ketqua = ketqua & vbCrLf & _ "Nhiệt độ trung bình: " & _ Format(tong / 7, "0.0") TextBox1.Text = ketqua End Sub Thủ tục này lại sử dụng vòng lặp For Next để duyệt lại các phần tử trong mảng sau khi đã được gán giá trị ở thủ tục button1_Click. Biến ketqua được dùng để làm chuỗi kết xuất gộp các giá trị phần tử mảng. Sau mỗi lần gộp ta sử dụng hằng số vbCrLf để khiến dấu ngắt dòng và dấu về đầu dòng (tương đương với hai hàm Chr(13) và Chr(10)). Hằng vbTab để 54
  57. phân cách giữa phần ghi ngày và ghi nhiệt độ. Bạn tạo thủ thục Button3_Click và nhập phát biểu End để kết thúc chương trình. Chạy chương trình: Bạn chạy chương trình và nhập đủ giá trị nhiệt độ 7 ngày. 7.4. Tạo mảng động Việc dùng mảng là rất thuận tiện. Tuy nhiên khi bạn chưa biết chính xác số phần tử của mảng là bao nhiêu thì sao? Ví dụ khi bạn muốn để người dùng nhập vào bao nhiêu nhiệt độ tùy thích, nhập càng nhiều thì độ chính xác càng cao. VB giải quyết việc này bằng mảng động. Kích thước mảng động chỉ được chỉ định khi chương trình thực thi chứ không định trong lúc viết mã. Việc khai báo trước kích thước mảng là không cần thiết nhưng cũng cần dành chỗ trước cho mảng đó. Các bước tạo mảng động: - Chỉ định tên và kiểu cho mảng khi thiết kế form, ví dụ Dim nhietdo() As Single - Thêm mã xác định kích thước mảng khi chương trình thực thi. Ví dụ khi chương trình chạy bạn hỏi xem người dùng muốn nhập bao nhiêu ngày, ví dụ: Dim songay As Integer songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang dong") - Dùng biến songay để định lại kích thước mảng (trừ đi 1 vì mảng tính từ 0). Ví dụ If songay > 0 Then ReDim nhietdo(songay - 1) - Tiếp theo ta dùng hàm Ubound(nhietdo) để xác định số phần tử của mảng. Bây giờ chúng ta sẽ làm lại ví dụ trên sử dụng mảng động: - Trước hết, bạn khai báo lại mảng động và khai báo biến songay chứa số ngày người dùng muốn nhập bằng đoạn mã ngay dưới dòng khai báo lớp form1: Dim nhietdo() As Single Dim songay As Integer - Sau đó sửa lại mã của thủ tục Button1_Click như sau: Dim Prompt, tieude As String Dim i As Short Prompt = "Điền vào nhiệt độ của ngày." 'Nhap so ngay muon ghi nhiet do songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang dong") If songay > 0 Then ReDim nhietdo(songay - 1) For i = 0 To UBound(nhietdo) tieude = "Ngày " & (i + 1) nhietdo(i) = CInt(InputBox(Prompt, tieude)) Next 55
  58. - Tiếp theo thay số 7 trong thủ tục Button2_Click bằng biến songay: ketqua = ketqua & vbCrLf & _ "Nhiệt độ trung bình: " & _ Format(tong / songay, "0.0") - Bạn có thể dùng phát biểu Try Catch để bắt lỗi nếu người dùng nhập vào một số nhỏ hơn 0. - Chạy lại chương trình và kết quả rõ ràng linh động hơn. 56