Hà Nội, ngày … tháng … năm 2011

advertisement
MẪU ĐT -BG-01
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC KINH TẾ - KỸ THUẬT CÔNG
NGHIỆP
KHOA CÔNG NGHỆ THÔNG TIN - BỘ MÔN HỆ THỐNG
THÔNG TIN
BÀI GIẢNG
LẬP TRÌNH WINDOWS
Đối tượng:
HSSV trình độ Đại học, Cao đẳng
Ngành đào tạo: Công nghệ thông tin
Lưu hành nội bộ
MỤC LỤC
MỤC LỤC ..............................................................................i
LỜI GIỚI THIỆU ................................................................vi
Chương 1: TỔNG QUAN VỀ LẬP TRÌNH .NET ........... 13
1.1 Visual Studio.NET và .NET Framework .................. 13
1.1.1 Giới thiệu ................................................................ 13
1.1.2 Cấu trúc .NET Framework...................................... 16
1.1.3 Một số đặc trưng của Visual Studio .NET .............. 19
1.2 Cài đặt phần mềm Visual Studio 2005 ...................... 21
1.2.1 Yêu cầu phần cứng ................................................. 22
1.2.2 Cài đặt:.................................................................... 22
1.3 Visual Basic.NET ........................................................ 28
1.3.1 Các phương pháp lập trình trong VB.NET ............. 28
1.3.2 Visual Basic.NET ................................................... 29
1.3.3 Ví dụ 1 - Hello, World ............................................ 31
1.3.4 Ví dụ 2 - Hello, Windows ....................................... 35
1.3.5 Ví dụ 3 - Hello, Browser ......................................... 37
Chương 2: NGÔN NGỮ LẬP TRÌNH VISUAL BASIC
.NET ..................................................................................... 41
2.1 Các kiểu dữ liệu và đặc điểm ..................................... 41
2.1.1 Các kiểu dữ liệu ...................................................... 41
2.1.2 Đặc điểm của các kiểu dữ liệu ................................ 43
2.1.3 Biểu diễn các giá trị ................................................ 50
2.2 Biến, hằng.................................................................... 52
2.2.1 Biến và tính chất ..................................................... 52
2.2.2 Khai báo và khởi tạo giá trị cho biến ...................... 54
2.2.3 Xác định phạm vi biến (tầm vực của biến) ............. 55
2.2.4 Hằng và số ngẫu nhiên ............................................ 56
2.2.5 Chuyển đổi các kiểu dữ liệu.................................... 57
2.3 Toán tử ........................................................................ 59
2.3.1 Toán tử toán học ..................................................... 59
2.3.2 Toán tử nối chuỗi .................................................... 59
i
2.3.3 Toán tử gán ............................................................. 59
2.3.4 Toán tử so sánh ....................................................... 60
2.3.5 Toán tử luận lý và bitwise ....................................... 61
2.4 Các lệnh VB.NET ....................................................... 61
2.4.1 Chú thích và cách viết lệnh ..................................... 61
2.4.2 Nhập/xuất dữ liệu ................................................... 62
2.4.3 Các lệnh rẽ nhánh ................................................... 70
2.4.4 Câu lệnh lặp ............................................................ 74
2.5 Dữ liệu có cấu trúc...................................................... 78
2.5.1 Enum ...................................................................... 78
2.5.2 Mảng ....................................................................... 80
2.5.3 Structure ................................................................. 83
2.6 Xử lý lỗi ....................................................................... 84
2.6.1 Phân loại lỗi ............................................................ 84
2.6.2 Xử lý lỗi .................................................................. 85
2.7 Một số chỉ thị của VB.NET ........................................ 89
2.7.1 Chỉ thị Option Explicit ON|OFF ............................. 89
2.7.2 Chỉ thị #Region … #End Region ............................ 89
2.8 Thủ tục (Procedure) ................................................... 90
2.8.1 Khái niệm ............................................................... 90
2.8.2 Tham số của thủ tục ................................................ 90
2.8.3. Sub Procedure ........................................................ 91
2.8.4 Function Procedure (Hàm) ...................................... 95
Chương 3: LỚP VÀ ĐỐI TƯỢNG TRONG VB.NETError!
Bookmark not defined.
3.1 Tổng quan về lập trình hướng đối tượng............ Error!
Bookmark not defined.
3.1.1 Tính trừu tượng ........Error! Bookmark not defined.
3.1.2 Tính bao bọc ............Error! Bookmark not defined.
3.1.3 Tính kế thừa .............Error! Bookmark not defined.
3.1.4 Tính đa hình .............Error! Bookmark not defined.
3.2 Lớp đối tượng ..................Error! Bookmark not defined.
ii
3.2.1 Khai báo lớp ............Error! Bookmark not defined.
3.2.2 Đối tượng .................Error! Bookmark not defined.
3.2.3 Phương thức .............Error! Bookmark not defined.
3.2.4 Ví dụ về thiết kế lớp Error! Bookmark not defined.
3.3 Phương thức thiết lập và phương thức phá hủy Error!
Bookmark not defined.
3.3.1 Phương thức thiết lập ............. Error! Bookmark not
defined.
3.3.2 Phương thức phá hủy ......... Error! Bookmark not
defined.
3.4 Thuộc tính - Property......Error! Bookmark not defined.
3.5 Khai báo sự kiện (Event) Error! Bookmark not defined.
3.5.1 Phát sinh sự kiện .....Error! Bookmark not defined.
3.5.2. Kết hợp sự kiện với xử lý sự kiện ................. Error!
Bookmark not defined.
3.6 Từ khóa Me, Mybase, MyClass .. Error! Bookmark not
defined.
3.6.1. Me ..........................Error! Bookmark not defined.
3.6.2. Mybase ..................Error! Bookmark not defined.
3.6.3 MyClass ..................Error! Bookmark not defined.
Chương 4: CÁC ĐIỀU KHIỂN NGƯỜI DÙNG ........ Error!
Bookmark not defined.
4.1 Tạo ứng dụng Windows Form ..... Error! Bookmark not
defined.
4.1.1 Mở một project mới .Error! Bookmark not defined.
4.1.2 Thao tác với project .Error! Bookmark not defined.
4.2 Biểu mẫu - Form ..............Error! Bookmark not defined.
4.2.1 Thuộc tính, biến cố và phương thức của biểu mẫu
..........................................Error! Bookmark not defined.
4.2.2 Thao tác với form trong một ứng dụng ........... Error!
Bookmark not defined.
4.2.3 Viết code cho các biến cố trên form ............... Error!
Bookmark not defined.
iii
4.2.4 Form MDI ................Error! Bookmark not defined.
4.3 Label, Textbox, Button....Error! Bookmark not defined.
4.3.1 Nhãn - Label ............Error! Bookmark not defined.
4.3.2 Ô nhập liệu - Textbox ............ Error! Bookmark not
defined.
4.3.3 Nút lệnh - Command Button .. Error! Bookmark not
defined.
4.4 Check box, Radio Button Error! Bookmark not defined.
4.4.1 Hộp kiểm - Check box ........... Error! Bookmark not
defined.
4.4.2 Nút chọn - Radio button......... Error! Bookmark not
defined.
4.4.3 Ví dụ về form sử dụng điều khiển check box và radio
button ................................Error! Bookmark not defined.
4.5 Combo box, list box: ........Error! Bookmark not defined.
4.5.1 Danh sách lựa chọn - list box . Error! Bookmark not
defined.
4.5.2 Điều khiển hộp lựa chọn (Combo box) ........... Error!
Bookmark not defined.
4.5.3 Ví dụ về sử dụng list box ....... Error! Bookmark not
defined.
4.6 Điều khiển thanh cuộn ....Error! Bookmark not defined.
4.7 Menu và Toolbar .............Error! Bookmark not defined.
4.7.1 Menu ........................Error! Bookmark not defined.
4.7.2 Toolbar ....................Error! Bookmark not defined.
Chương 5: PHÁT TRIỂN ỨNG DỤNG CƠ SỞ DỮ LIỆU
...................................................Error! Bookmark not defined.
5.1 Tổng quan về ADO.NET ............ Error! Bookmark not
defined.
5.1.1 Managed Provider...Error! Bookmark not defined.
5.1.2 Data Storage ............Error! Bookmark not defined.
5.2 Connection.......................Error! Bookmark not defined.
iv
5.2.1. Kết nối sử dụng OLEDB....... Error! Bookmark not
defined.
5.2.2 Kết nối sử dụng SQLClient.... Error! Bookmark not
defined.
5.2.3 Các thuộc tính khác của Connection ............... Error!
Bookmark not defined.
5.2.4 Các phương thức trên Connection Error! Bookmark
not defined.
5.2.5 Minh họa tạo Connection ....... Error! Bookmark not
defined.
5.3 Command .........................Error! Bookmark not defined.
5.3.1 Tạo Command .........Error! Bookmark not defined.
5.3.2 Các thuộc tính của Command Error! Bookmark not
defined.
5.3.3 Thực hiện câu lệnh thông qua đối tượng Command
..........................................Error! Bookmark not defined.
5.3.4 Parameter ................Error! Bookmark not defined.
5.4 DataReader ......................Error! Bookmark not defined.
5.4.1 Các thuộc tính của DataReader .....Error! Bookmark
not defined.
5.4.2 Các phương thức của DataReader ................. Error!
Bookmark not defined.
5.4.3 Tạo và sử dụng DataReader ... Error! Bookmark not
defined.
5.5 DataAdapter ....................Error! Bookmark not defined.
5.5.1 Tạo DataAdapter......Error! Bookmark not defined.
5.5.2 Thuộc tính của DataAdapter .. Error! Bookmark not
defined.
5.5.3 Chức năng của DataAdapter .. Error! Bookmark not
defined.
5.5.3 Sử dụng DataAdapter lấy cấu trúc từ nguồn dữ liệu
..........................................Error! Bookmark not defined.
v
5.5.4 Tạo bộ lệnh cập nhật cho DataAdapter: .......... Error!
Bookmark not defined.
5.5.5 Dùng DataAdapter cập nhật các thay đổi về nguồn
dữ liệu ...............................Error! Bookmark not defined.
5.6 DataSet .............................Error! Bookmark not defined.
5.6.1 Tạo DataSet .............Error! Bookmark not defined.
5.6.2. Làm việc với DataSet ........... Error! Bookmark not
defined.
5.6.3 Ví dụ minh họa làm việc với DataSet ............. Error!
Bookmark not defined.
5.7 DataTable .........................Error! Bookmark not defined.
5.7.1 Các thuộc tính của DataTable Error! Bookmark not
defined.
5.7.2 Một số phương thức của DataTable ................ Error!
Bookmark not defined.
5.7.3 Một số sự kiện của DataTable......Error! Bookmark
not defined.
5.7.4. Cấu trúc của bảng - DataColumn Error! Bookmark
not defined.
5.7.5 DataRow .................Error! Bookmark not defined.
5.7.6 Tập hợp Rows ..........Error! Bookmark not defined.
5.8 Tạo báo biểu .....................Error! Bookmark not defined.
5.8.1 Crystal Report ..........Error! Bookmark not defined.
5.8.2 Hướng dẫn sử dụng report wizart. Error! Bookmark
not defined.
TÀI LIỆU THAM KHẢO .......Error! Bookmark not defined.
vi
LỜI GIỚI THIỆU
Lập trình ứng dụng là môn học rất quan trọng đối với sinh
viên ngành công nghệ thông tin. Lập trình không chỉ là một
công việc đó còn là một thú vui và là một niềm đam mê.
Đã có rất nhiều các ngôn ngữ lập trình được sinh ra theo
nhu cầu và yêu cầu của thực tế. Và bạn có thể chọn bất kì theo
sở
thích
và
thiên
hướng
của
bạn.
Nhưng thực tế, ngôn ngữ lập trình chỉ là cái để chúng ta có thể
sai bảo được máy tính, khiến nó hiểu và thực hiện những điều
chúng ta chờ đợi. Kết quả đó phụ thuộc vào cấu trúc ngôn
ngữ, vào nền tảng ngôn ngữ, vào những hỗ trợ và đặc tính của
ngôn ngữ; một phần quan trọng đó là thuật toán - tư duy logic
và trừu tượng của người lập trình.
Hiện nay có rất nhiều các ngôn ngữ lập trình chuyên
nghiệp có thể sử dụng tốt để lập trình các ứng dụng trong
đó có thể nói Visual Basic.NET là một trong những công cụ
lập trình trực quan dễ học nhất.
Bài giảng này được xây dựng với mục đích phục vụ nhu
cầu học môn Lập trình Windows cho học sinh, sinh viên hệ
Cao đẳng, Đại học chuyên ngành Công nghệ thông tin trường
Đại học Kinh tế Kỹ thuật Công nghiệp. Bài giảng đề cập đến
những nội dung về lập trình Visual Basic.NET căn bản và các
kỹ thuật lập trình cơ sở dữ liệu sử dụng ADO.NET. Kết quả
cuối cùng là tạo ra các ứng dụng quản lý sử dụng Visual
Basic.NET như một công cụ phát triển trên hệ cơ sở dữ liệu
SQL Server.
Bài giảng được biên soạn theo đúng chương trình đào tạo
và các quy định về cách trình bày của Nhà trường. Nội dung
của bài giảng bao gồm 5 chương, trong mỗi chương bao gồm
các phần nội dung chủ yếu như sau:
- Mục tiêu của chương.
- Nội dung phần thảo luận.
- Tóm tắt nội dung cốt lõi.
vii
- Bài tập thực hành.
- Hướng dẫn tự học ở nhà.
Do thời gian và trình độ có hạn nên bài giảng khó có thể
tránh khỏi những thiếu sót nhất định. Chúng tôi luôn mong
nhận được sự góp ý của bạn đọc để bài giảng được tái bản
hoàn thiện hơn trong những lần sau.
Xin chân thành cám ơn!
Nhóm biên soạn
Nhóm sửa chữa
Vũ Thị Thu Huyền
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC KT - KT
CÔNG NGHIỆP
KHOA CÔNG NGHỆ THÔNG
TIN
Lê Kiều Oanh
CỘNG HOÀ XÃ HỘI CHỦ
NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
CHƯƠNG TRÌNH TRÌNH ĐỘ ĐẠI HỌC
NGÀNH ĐÀO TẠO: CÔNG NGHỆ THÔNG TIN
ĐỀ CƯƠNG CHI TIẾT HỌC PHẦN
1. Tên học phần: Lập trình Window
Mã số học
phần:...................
2. Số tín chỉ:
04
3. Tính chất học phần: Bắt buộc.
4. Học phần thay thế, tương đương: Không.
5. Phân bổ thời gian giảng dạy trong học kỳ: 4(52,16,6)/ 12
(12 tuÇn thùc häc)
- Số tiết thực lên lớp: 68 tiết
 Lý thuyết: 6 tiết/tuần x 8 tuần + 4 tiết/tuần x 1 tuần
=52 tiết = 52 tiết chuẩn.
 Thảo luận, thực hành môn học:
viii
12 tiết/tuần x 2 tuần + 8 tiết/tuần x 1 tuần = 32 tiết
= 16 tiết chuẩn.
- Số giờ sinh viên tự học: 10 giờ/tuần x 12 tuần =
120 giờ.
6. Điều kiện học:
- Học phần tiên quyết: Cơ sở dữ liệu, SQL Server
- Học phần học trước: Không
- Học phần song hành: Phân tích và thiết kế hệ thống
7. Mô tả vắn tắt nội dung học phần:
Học phần trang bị cho sinh viên các kiến thức về .NET
Framwork; cú pháp và cách sử dụng các cấu trúc lệnh trong
ngôn ngữ lập trình Visual Basic .NET; cách làm việc với các
điều khiển Windows, phương pháp kết nối với cơ sở dữ liệu
và xây dựng các ứng dụng cơ sở dữ liệu.
8. Mục tiêu của học phần:
Sau khi kết thúc học phần sinh viên sẽ có kỹ năng lập
trình trên hệ điều hành Windows; kỹ năng làm việc với các
điều khiển để thiết kế màn hình và phải xây dựng được các
chương trình truy xuất cơ sở dữ liệu SQL.
ix
9. Nội dung chi tiết học phần (6 tiết / tuần)
Tuần
1
2,3
4
Nội dung
Tài liệu
học tập,
tham
khảo
1
Hình
thức
học
Giảng
Chương 1: Tổng quan về Lập
trình .NET
1.1 Visual Studio.NET và .NET
Framework
1.2. Cài đặt phần mềm Visual
Studio 2005
1.3. Visual Basic.NET
1
Giảng
Chương 2: Ngôn ngữ lập trình
Visual Basic.NET
2.1 Các kiểu dữ liệu và đặc điểm
2.2 Biến, hằng
2.3 Toán tử
2.4 Các lệnh VB.NET
2.5 Dữ liệu có cấu trúc
2.6 Xử lý lỗi
2.7 Một số chỉ thị của VB.NET
2.8 Thủ tục (Procedure)
1, 2, 3, 4 Giảng
Chương 3: Lớp và đối tượng
trong VB.NET
3.1 Tổng quan về lập trình hướng
đối tượng
3.2 Lớp đối tượng
3.3 Phương thức thiết lập và
phương thức phá hủy
3.4 Thuộc tính - Property
3.5 Khai báo sự kiện (Event)
3.6 Từ khóa Me, Mybase,
MyClass
x
Tuần
Nội dung
5,6
Chương 4: Các điều khiển người
dùng
4.1 Tạo ứng dụng Windows Form
4.2 Biểu mẫu - Form
4.3 Label, Textbox, Button
4.4 Check box, Radio Button
4.5 Combo box, list box:
4.6 Điều khiển thanh cuộn
4.7 Menu và Toolbar
Thực hành
7
8-10 Chương 5: Phát triển ứng dụng
cơ sở dữ liệu
5.1 Tổng quan về ADO.NET
5.2 Connection
5.3 Command
5.4 DataReader
5.5 DataAdapter
5.6 DataSet
5.7 DataTable
5.8 Tạo báo biểu
11,12 Thực hành, thảo luận, kiểm tra
Tài liệu
học tập,
tham
khảo
1, 2, 5
1, 5, 6
1, 2, 5,6
Hình
thức
học
Giảng
Thực
hành
Giảng
1, 3, 5, 6 Thực
hành,
thảo
luận
10. Tài liệu học tập:
1. Bài giảng Lập trình Windows - Đại học Kinh tế Kỹ
thuật Công nghiệp.
xi
11. Tài liệu tham khảo:
2. Tài liệu hướng dẫn giảng dạy Visual Basic.NET - Đại học
Khoa học tự nhiên thành phố Hồ Chí Minh, 2006
3. Kỹ thuật lập trình ứng dụng chuyên nghiệp Visual
Basic.NET- Phạm Hữu Khang, 2002
4. Visual Studio.Net – Nguyễn Ngọc Tuấn, NXB Thống kê
2005
5. Lập trình Visual Basic.NET 1 (Nhập môn lập trình) - Đại
học Khoa học tự nhiên TP. Hồ Chí Minh, 2006
6. Lập trình Visual Basic.NET 2 (Kỹ thuật lập trình công
nghệ .NET) - Đại học Khoa học tự nhiên TP. Hồ Chí Minh,
2006
12. Nhiệm vụ của Sinh viên:
- Dự lớp đầy đủ, đúng giờ các buổi học lý thuyết và thực
hành, thực hiện tốt các nội quy của Nhà trường trong giờ lên
lớp
- Thực hiện tốt các bài tập, hoàn thành các bài tập thực
hành, tích cực tham gia thảo luận theo yêu cầu của giáo viên.
- Phải đọc và nghiên cứu trước bài giảng, tài liệu tham
khảo, chuẩn bị các ý kiến, đề xuất khi nghe giảng.
13. Tiêu chuẩn đánh giá Sinh viên:
- Theo quyết định số 43 / 2007 / QĐ-BGD&ĐT ngày 15
tháng 08 năm 2007 của Bộ trưởng Bộ Giáo dục và Đào tạo.
- Theo quyết định số 674/QĐ-ĐHKTKTCN ngày 15 tháng
10 năm 2010 của Hiệu trưởng Trường Đại học Kinh tế - Kỹ
thuật Công nghiệp
- Hình thức thi kết thúc học phần: Thi thực hành
14. Cán bộ tham gia giảng dạy
Là giáo viên cơ hữu, giáo viên kiêm nhiệm, giáo viên
thỉnh giảng do Khoa, Bộ môn quản lý, phân công giảng dạy
khi có đủ các điều kiện, tiêu chuẩn, được Hiệu trưởng duyệt.
- Giảng lý thuyết
Giảng viên có học vị từ Thạc sỹ trở lên, có kinh nghiệm
trong giảng dạy hoặc hướng dẫn thảo luận, được Bộ môn phân
công.
xii
- Hướng dẫn làm bài tập, bài tập lớn, thảo luận, thực
hành môn học, thí nghiệm, tiểu luận.
Là giảng viên, giáo viên có học vị từ Cử nhân trở lên, có
kinh nghiệm trong giảng dạy hoặc hướng dẫn thảo luận, được
Bộ môn phân công.
Đề cương chi tiết này đã được thông qua bộ môn làm cơ
sở giảng dạy cho các lớp hệ đại học của ngành Công nghệ
thông tin.
Hà Nội, ngày … tháng … năm
Khoa
Tổ bộ môn 2011
Người biên soạn
xiii
Chương 1
TỔNG QUAN VỀ LẬP TRÌNH .NET
MỤC TIÊU CỦA CHƯƠNG
- Về kiến thức
Giới thiệu các khái niệm cơ bản và cấu trúc của .Net
Framework, đồng thời thông qua việc trình bày một ứng
dụng để giới thiệu về Visual Studio .Net.
- Về thái độ:
Giúp sinh viên chú ý và tiếp nhận ngôn ngữ lập trình
Visual Basic.NET như một công cụ lập trình hiện đại và
được ứng dụng nhiều trong thực tế.
- Về kỹ năng
Sau khi kết thúc bài học sinh viên có thể cài đặt phần
mềm Visual Studio 2005 và chạy được các chương trình
1.4.2; 1.4.3; 1.4.4.
NỘI DUNG BÀI GIẢNG LÝ THUYẾT
1.1 Visual Studio.NET và .NET Framework
1.1.1 Giới thiệu
Trong thời đại công nghệ thông tin, dữ liệu trở nên
quan trọng đến nỗi người ta mong muốn tất cả mọi thứ như
điện thoại di động, máy tính xách tay, các máy PDA
(Personal Digital Assistant) đều phải kết nối với nhau để
chia sẽ dữ liệu và việc sử dụng các phần mềm để quản lý,
sử dụng những dữ liệu đó là "không biên giới". Ứng dụng
phải sẵn sàng để sử dụng từ trên máy tính cũng như trên
điện thoại di động 24/24 giờ, ít lỗi, xử lý nhanh và bảo mật
chặt chẽ.
Các yêu cầu này làm đau đầu những chuyên gia phát
triển ứng dụng khi phần mềm chủ yếu viết cho hệ thống
14
này không chạy trên một hệ thống khác bởi nhiều lý do như
khác biệt về hệ điều hành, khác biệt về chuẩn giao tiếp dữ
liệu, mạng. Thời gian và chi phí càng trở nên quý báu vì
bạn không phải là người duy nhất biết lập trình. Làm sao sử
dụng lại những ứng dụng đã viết để mở rộng thêm nhưng
vẫn tương thích với những kỹ thuật mới?
Sun Microsystems đi đầu trong việc cung cấp giải pháp
với Java. Java chạy ổn định trên các hệ điều hành Unix hay
Solaris của Sun từ máy chủ tới các thiết bị cầm tay hay
thậm chí trên các hệ điều hành Windows của Microsoft
(một ví dụ rõ ràng đó là hầu hết các điện thoại di động thế
hệ mới đều có phần mềm viết bằng Java). Kiến trúc lập
trình dựa trên Java bytecode và thi hành trên máy ảo Java
(JVM – Java Virtual Marchine) cho phép các ứng dụng
Java chạy trên bất cứ hệ điều hành nào. Mô hình lập trình
thuần hướng đối tượng của Java giúp các lập trình viên tùy
ý sử dụng lại và mở rộng các đối tượng có sẵn. Các nhà
cung cấp công cụ lập trình dựa vào đây đểø gắn vào các
môi trường phát triển ứng dụng bằng Java của mình đủ các
thư viện lập trình nhằm hỗ trợ các lập trình viên.
Sức mạnh của Java dường như quá lớn đến nỗi
Microsoft từng phải chống trả bằng cách loại bỏ Java
Virtual Marchine khỏi các phiên bản hệ điều hành
Windows mới của mình như Windows XP. Tuy nhiên,
Microsoft thừa hiểu rằng dù không cung cấp JVM, Sun
cũng có thể tự cung cấp các JVM package cho những người
dùng Windows. Đó là lý do tại sao nhà khổng lồ quyết định
bắt tay xây dựng lại từ đầu một nền tảng phát triển ứng
dụng mới: Microsoft.NET Framework.
15
Hiểu một cách đơn giản thì .NET Framework là bộ thư
viện dành cho các lập trình viên .NET. Framework chính
là một tập hợp hay thư viện các lớp đối tượng hỗ trợ người
lập trình khi xây dựng ứng dụng. Bộ thư viện của .NET
Framework bao gồm hơn 5000 lớp đối tượng đủ sức hỗ trợ
hầu hết các yêu cầu từ phía lập trình viên. Công nghệ mã
nguồn mở được đưa vào .NET và trong .NET, mọi thành
phần đều có thể kế thừa và mở rộng.
Ngày 13/02/2002, Microsoft chính thức giới thiệu bộ
công cụ lập trình mới của mình – Visual Studio.NET dựa
trên công nghệ Microsoft .NET. Đó là một môi trường phát
triển ứng dụng sử dụng giao diện đồ hoạ, tích hợp nhiều
chức năng, tiện ích khác nhau để hỗ trợ tối đa cho các lập
trình viên.
.NET Framework là thành phần quan trọng nhất trong
kỹ thuật phát triển ứng dụng dựa trên .NET. Visual Studio
sẽ giúp người lập trình nắm bắt và tận dụng tốt hơn những
chức năng của .NET Framework.
16
1.1.2 Cấu trúc .NET Framework
Common language Specification:
Vai trò của thành phần này là đảm bảo sự tương tác
giữa các đối tượng bất chấp chúng được xây dựng trong
ngôn ngữ nào, miễn là chúng cung cấp được những thành
phần chung của các ngôn ngữ muốn tương tác
ASP.NET
Bộ thư viện các lớp đối tượng dùng trong việc xây
dựng các ứng dụng Web. Ứng dụng web xây dựng bằng
ASP.NET tận dụng được toàn bộ khả năng của .NET
Framework. Bên cạnh đó là một "phong cách" lập trình mới
mà Microsoft đặt cho nó một tên gọi rất kêu : code behind.
Đây là cách mà lập trình viên xây dựng các ứng dụng
Windows based thường sử dụng – giao diện và lệnh được
tách riêng.
Web services có thể hiểu khá sát nghĩa là các dịch vụ
được cung cấp qua Web (hay Internet). Dịch vụ được coi là
17
Web service không nhằm vào người dùng mà nhằm vào
người xây dựng phần mềm. Web service có thể dùng để
cung cấp các dữ liệu hay một chức năng tính toán.
Ví dụ, công ty du lịch của bạn đang sử dụng một hệ
thống phần mềm để ghi nhận thông tin về khách du lịch
đăng ký đi các tour. Để thực hiện việc đặt phòng khách sạn
tại địa điểm du lịch, công ty cần biết thông tin về phòng
trống tại các khách sạn. Khách sạn có thể cung cấp một
Web service để cho biết thông tin về các phòng trống tại
một thời điểm. Dựa vào đó, phần mềm của bạn sẽ biết rằng
liệu có đủ chỗ để đặt phòng cho khách du lịch không? Nếu
đủ, phần mềm lại có thể dùng một Web service khác cung
cấp chức năng đặt phòng để thuê khách sạn. Điểm lợi của
Web service ở đây là bạn không cần một người làm việc
liên lạc với khách sạn để hỏi thông tin phòng, sau đó, với
đủ các thông tin về nhiều loại phòng người đó sẽ xác định
loại phòng nào cần đặt, số lượng đặt bao nhiêu, đủ hay
không đủ rồi lại liên lạc lại với khách sạn để đặt phòng.
Đừng quên là khách sạn lúc này cũng cần có người để làm
việc với nhân viên của bạn và chưa chắc họ có thể liên lạc
thành công.
Web service được cung cấp dựa vào ASP.NET và sự hỗ
trợ từ phía hệ điều hành của Internet Information Server.
Windows Form
Bộ thư viện về Window form gồm các lớp đối tượng
dành cho việc xây dựng các ứng dụng Windows based.
ADO.NET and XML
Bộ thư viện này gồm các lớp dùng để xử lý dữ liệu.
ADO.NET thay thế ADO để trong việc thao tác với các dữ
liệu thông thường. Các lớp đối tượng XML được cung cấp
18
để bạn xử lý các dữ liệu theo định dạng mới: XML. Các ví
dụ cho bộ thư viện này là SqlDataAdapter, SqlCommand,
DataSet, XMLReader, XMLWriter,…
Base Class Library
Đây là thư viện các lớp cơ bản nhất, được dùng trong
khi lập trình hay bản thân những người xây dựng .NET
Framework cũng phải dùng nó để xây dựng các lớp cao
hơn. Ví dụ các lớp trong thư viện này là String, Integer,
Exception,…
Common Language Runtime
Là thành phần "kết nối" giữa các phần khác trong .NET
Framework với hệ điều hành. Common Language Runtime
(CLR) giữ vai trò quản lý việc thi hành các ứng dụng viết
bằng .NET trên Windows.
CLR sẽ thông dịch các lời gọi từ chương trình cho
Windows thi hành, đảm bảo ứng dụng không chiếm dụng
và sử dụng tràn lan tài nguyên của hệ thống. Nó cũng
không cho phép các lệnh "nguy hiểm" được thi hành. Các
chức năng này được thực thi bởi các thành phần bên trong
CLR như Class loader, Just In Time compiler, Garbage
collector, Exception handler, COM marshaller, Security
engine,…
Trong các phiên bản hệ điều hành Windows mới như
XP.NET và Windows 2003, CLR được gắn kèm với hệ
điều hành. Điều này đảm bảo ứng dụng viết ra trên máy
tính của chúng ta sẽ chạy trên máy tính khác mà không cần
cài đặt, các bước thực hiện chỉ đơn giản là một lệnh copy
của DOS!
Operating System
19
.NET Framework cần được cài đặt và sử dụng trên một
hệ điều hành. Hiện tại, .NET Framework chỉ có khả năng
làm việc trên các hệ điều hành Microsoft Win32 và Win64
mà thôi. Trong thời gian tới, Microsoft sẽ đưa hệ thống này
lên Windows CE cho các thiết bị cầm tay và có thể mở
rộng cho các hệ điều hành khác như Unix.
Với vai trò quản lý việc xây dựng và thi hành ứng
dụng, .NET Framework cung cấp các lớp đối tượng (Class)
để NLT có thể gọi thi hành các chức năng mà đối tượng đó
cung cấp. Tuy nhiên, lời gọi này có được "hưởng ứng" hay
không còn tùy thuộc vào khả năng của hệ điều hành đang
chạy ứng dụng.
Các chức năng đơn giản như hiển thị một hộp thông
báo (Messagebox) sẽ được .NET Framework sử dụng các
hàm API của Windows. Chức năng phức tạp hơn như sử
dụng các COMponent sẽ yêu cầu Windows phải cài đặt
Microsoft Transaction Server (MTS) hay các chức năng
trên Web cần Windows phải cài đặt Internet Information
Server (IIS).
Như vậy, việc lựa chọn một hệ điều hành để cài đặt và
sử dụng .NET Framework cũng không kém phần quan
trọng. Cài đặt .NET Framework trên các hệ điều hành
Windows 2000, 2000 Server, XP, XP.NET, 2003 Server sẽ
đơn giản và tiện dụng hơn trong khi lập trình.
1.1.3 Một số đặc trưng của Visual Studio .NET
Điểm đặc trưng của Microsoft Visual Studio là tất cả
các ngôn ngữ lập trình trong .NET Framework đều có
chung một IDE (Integrated Development Environment),
trình gỡ lỗi, trình duyệt project và solution, class view, cửa
sổ thuộc tính, hộp công cụ, menu và toolbar.
20
Ngoài ra còn phải kể đến một số các đặc trưng sau
1. Từ khóa và cú pháp lệnh được tô sáng.
2. Tự động hoàn thành các cú pháp lệnh khi người lập
trình đánh dấu chấm với objects, namespace, enum và khi
sử dụng từ khóa New.
3. Trình duyệt project, solution cho phép quản lý các
ứng dụng chứa nhiều file với khuôn dạng khác nhau.
4. Cho phép người sử dụng xây dựng giao diện chỉ với
thao tác kéo và thả trên form.
5. Cửa sổ thuộc tính cho phép thiết lập các giá trị cho
các thuộc tính khác nhau của các điều khiển trên form hoặc
trên trang web.
6. Trình gỡ rối cho phép gỡ lỗi của chương trình bằng
cách thiết lập các điểm break point khi theo dõi quá trình
hoạt động của chương trình.
7. Trình biên dịch trực tiếp (Hot compiler) cho phép
kiểm tra cú pháp của dòng mã lệnh và thông báo các lỗi
được phát hiện ngay khi người sử dụng nhập dòng lệnh vào
từ bàn phím.
8. Người sử dụng được trợ giúp bằng trình Dynamic
Help sử dụng MSDN (Microsoft Development Network
library).
9. Biên dịch và xây dựng các ứng dụngCompilating and
building applications.
10. Cho phép thi hành ứng dụng có/ không bộ gỡ rối
(debugger).
11. Triển khai ứng dụng .NET của người sử dụng trên
Internet hoặc CD.
21
Project và Solutions
Một Project là sự kết hợp của các file thực thi chương
trình và file thư viện để tạo nên một ứng dụng hoặc một mô
đun. Thông tin về project thường được lưu trữ trong các file
có phần mở rộng là .vbproj (VB.NET) hoặc csproj (C#). Có
thể kể đến một số loại project trong Visual Studio .NET
như Console, Windows Application, ASP.NET, Class
Librraries,...
Trái lại, một solution thường là sự kết hợp nhiều dự án
khác nhau để tạo thành một số ứng dụng. Ví dụ trong một
solution có thể bao gồm một project là ASP.NET WEB
Application và một Windows Form project. Thông tin của
một solution được lưu trữ trong các file .sln và được quản
lý nhờ Visual Studio.NET Solution Explorer.
Toolbox, Properties và Class View Tabs
Tất cả các ngôn ngữ lập trình trong bộ Visual Studio
.NET đều dùng chung một bộ công cụ (toolbox). Bộ công
cụ này (thường xuất hiện bên tay trái màn hình) chứa một
số các điều khiển chung cho các ứng dụng windows, web
và dữ liệu như texbox, checkbox, tree view, list box,
menus, file open dialog
Properties Tab - cửa sổ thuộc tính (thường xuất hiện
bên tay phải) cho phép thiết lập các thuộc tính cho form và
điều khiển tại thời điểm thiết kế mà không cần viết code.
1.2 Cài đặt phần mềm Visual Studio 2005
Microsoft Visual Studio 2005 là một bộ sản phẩm cung
cấp 3 ngôn ngữ lập trình Visual Basic.NET (VB.NET), C#
(C Sharp), Visual C++.NET và Visual J#.NET. Thêm vào
đó là Integrated Development Environment (IDE) giúp lập
trình dễ đàng, thoải mái. IDE không những cung cấp mọi
22
công cu lập trình cần thiết mà còn giúp kiểm tra nguồn mã
hay tạo giao diện Windows trực quan, truy tìm các tập tin
liên hệ đến dự án và nhiều thứ khác nữa.
1.2.1 Yêu cầu phần cứng
1.2.2 Cài đặt:
Microsoft Visual Studio 2005 thường gồm 4 đĩa CD.
Trước khi cài đặt bạn phải chạy các file trên 3 đĩa để giải
nén vào một thư mục trên đĩa cứng. Sau khi giải nén xong,
xong sẽ có hai thư mục chính: thư mục VS (chứa các file
cài Visual Studio .Net 1.17GB) và thư mục MSDN (chứa
các thư viện hỗ trợ việc sử dụng Visual Studio.NET
1.55GB).
Để cài đặt, ta chạy file Setup.exe trong thư mục VS sau
đó chọn chức năng Install Visual Studio 2005.
23
- Hộp thoại dưới đây sẽ xuất hiện trên màn hình:
24
- Click chọn “Next”. Xuất hiện cửa sổ yêu cầu đăng ký
25
- Đăng ký bằng cách lựa chọn click chuột vào “I accept
the term of the License Agreement”. Sau đó click chọn
“Next” để sang trang tiếp theo.
26
- Chọn kiểu cài đặt Default (ngầm định) hay Full (đầy
đủ) hay Custom (tự thiết lập các thông số); sau đó click vào
nút Install và làm theo các hướng dẫn trên màn hình. Quá
trình cài đặt sẽ yêu cầu bạn khởi động lại máy trước khi kết
thúc.
27
Tùy theo cấu hình từng máy mà thời gian cài đặt có thể
mất từ 25-35 phút.
28
1.3 Visual Basic.NET
1.3.1 Các phương pháp lập trình trong VB.NET
Phương pháp lập trình hướng lệnh
Trong phương pháp này người ta xem chương trình là
tập hợp các lệnh. Khi đó việc viết chương trình là xác
định xem chương trình gồm những lệnh nào, thứ tự thực
hiện của chúng ra sao.
Phương pháp lập trình hướng thủ tục
Trong phương pháp này chương trình được xem là
một hệ thống các thủ tục (sub và function). Trong đó, mỗi
thủ tục là một dãy các lệnh được sắp thứ tự. Khi đó, việc
29
viết chương trình là xác định xem chương trình gồm các
thủ tục nào, mối quan hệ giữa chúng ra sao?
Phương pháp lập trình hướng đơn thể
Trong phương pháp này chương trình được xem là một
hệ thống các đơn thể, mỗi đơn thể là một hệ thống các thủ
tục và hàm. Khi đó, việc viết chương trình là xác định
xem chương trình gồm những đơn thể nào? Đơn thể nào
đã có sẵn, đơn thể nào phải đi mua, đơn thể nào phải tự
viết.
Trong VB.NET đơn thể được xem là một trong các cấu
trúc Module, Class, Structure.
Phương pháp lập trình hướng đối tượng
Trong phương pháp này người ta xem chương trình là
một hệ thống các đối tượng, mỗi một đối tượng là sự bao
bọc bên trong nó 2 thành phần:
- Dữ liệu: là các thông tin về chính đối tượng.
Trong một số sách, thành phần này còn được gọi là thành
phần thuộc tính, thông tin .
- Hành động: là các khả năng mà đối tượng có thể
thực
hiện. Thành phần này còn có các tên như sau:
phương thức, hàm thành phần, hành vi.
Mỗi một đối tượng sẽ được cài đặt trong chương trình
với dạng đơn thể chứa dữ liệu. Thêm vào đó tính chất
kế thừa cho phép chúng ta xây dựng đối tượng mới dựa
trên cơ sở đối tượng đã có.
1.3.2 Visual Basic.NET
Nhiều lập trình viên đã quen với ngôn ngữ lập trình
Visual Basic do Microsoft phát triển dựa trên ngôn ngữ
BASIC từ năm 1964. Từ khi ra đời đến nay, Visual Basic
30
đã phát triển qua nhiều thế hệ và kết thúc ở phiên bản VB
6.0 với rất nhiều modules, công cụ hay ứng dụng được bổ
sung vào và đặc biệt là phương pháp kết nối với cơ sở dữ
liệu qua sự kết hợp của ADO (Active Data Object). Tuy
nhiên một trong những nhược điểm của VB 6.0 là không
cung ứng tất cả các đặc trưng của một ngôn ngữ lập trình
hướng đối tượng (Object Oriented Language - OOL) như
các ngôn ngữ C++ hay Java.
Thay vì cải thiện hay vá víu thêm thắt vào VB 6.0,
Microsoft đã xóa bỏ tất cả để làm lại từ đầu các ngôn ngữ
lập trình hướng đối tượng rất hùng mạnh. Đó là các ngôn
ngữ lập trình Visual Basic .NET và C# (C Sharp).
Có thể nói Visual Basic.NET (VB.NET) là một ngôn
ngữ lập trình hướng đối tượng do Microsoft thiết kế lại từ
con số 0. VB.NET không kế thừa hay bổ sung, phát triển từ
VB 6.0 mà nó là một ngôn ngữ lập trình hoàn toàn mới trên
nền Microsoft .NET FrameWork. VB.NET hỗ trợ đầy đủ
các đặc trưng của một ngôn ngữ hướng đối tượng như là
trừu tượng, bao đóng, kế thừa, đa hình, đa luồng và cấu trúc
xử lý các exception.
VB.NET là một ngôn ngữ lập trình cho phép người sử
dụng thiết lập các ứng dụng theo 3 loại:
- Ứng dụng Console là các chương trình chạy trên hệ
điều hành MS-DOS thông qua trình biên dịch Visual Studio
2005 Command Prompt.
- Ứng dụng Windows Form là các ứng dụng chạy trên
hệ điều hành Windows với các biểu mẫu (form) và các điều
khiển (button, texbox, label,...)
- Ứng dụng ASP.NET gồm WEB Form và WEB
Services.
31
1.3.3 Ví dụ 1 - Hello, World
Chương trình dưới đây là một ví dụ về consoleapplication. Bạn có thể biên soạn chương trình này bằng
bất kỳ phần mềm soạn thảo nào, ví dụ Notepad và lưu
thành một file có phần mở rộng là vb chẳng hạn Hello.vb.
Imports System
Public Module Hello
Public Sub Main( )
Console.WriteLine("Hello,
World")
End Sub
End Module
Để biên dịch chương trình, sử dụng tính năng Visual
Studio 2005 Command Prompt và đánh lệnh sau vào cửa
sổ: vbc Hello.vb
File Hello.vb sẽ được biên dịch thành file Hello.exe và
khi muốn chạy chương trình, bạn chỉ việc gõ lệnh hello tại
cửa sổ lệnh. Dòng chữ Hello, World sẽ xuất hiện trên màn
hình.
Ví dụ 1.3.3 thể hiện một cấu trúc đơn giản nhất của
chương trình VB.NET. Cấu trúc này gồm một đơn thể duy
nhất là mô đun và trong mô đun này sẽ chứa thủ tục main
và các hàm, các thủ tục cần thiết khác.
32
Namespace
Dòng đầu tiên của chương trình chỉ ra rằng chương
trình sẽ sử dụng một trong những kiểu được định nghĩa của
không gian tên (Namespace) System. Namespace là tên gọi
một nhóm các lớp đối tượng phục vụ cho một mục đích nào
đó. Chẳng hạn, các lớp đối tượng xử lý dữ liệu sẽ đặt trong
một namespace tên là Data. Các lớp đối tượng dành cho
việc vẽ hay hiển thị chữ đặt trong namespace tên là
Drawing.
Một namespace có thể là con của một namespace lớn
hơn. Namespace lớn nhất trong .NET Framework là
System.
Lợi điểm của Namespace là phân nhóm các lớp đối
tượng, giúp người dùng dễ nhận biết và sử dụng. Ngoài ra,
Namespace tránh việc các lớp đối tượng có tên trùng với
nhau không sử dụng được. .NET. Framework cho phép
chúng ta tạo ra các lớp đối tượng và các Namespace của
riêng mình.
33
Từ khóa Imports
Mục đích của lệnh Imports là để đưa không gian tên
vào trong chương trình để việc khai báo và tạo các lớp
trong không gian tên ngắn gọn hơn.
Cú pháp:
Imports [<bí danh> = ]<không gian
tên> [.<thành phần>]
Trong đó
- <bí danh> là một chuỗi được đặt tùy ý, là tên tắt của
<Namespace> được sử dụng trong tham chiếu trên Module,
Class. Nếu lệnh Imports không có phần bí danh, các thành
phần định nghĩa trong không gian tên có thể được truy cập
34
mà không cần chỉ rõ. Nếu có bí danh, bí danh phải được sử
dụng trong phần truy cập.
- <không gian tên>: bắt buộc.
- <thành phần>: tùy chọn, tên của một thành phần đã
được khai báo trong không gian tên.
Ví dụ
- Imports System cho phép ta truy cập và sử dụng
các lớp trong namespace có tên System. Trong ví dụ 1.3.3
dòng lệnh này cho phép truy cập vào lớp Console từ Main()
sub.
- Imports System.Collections cho phép sử
dụng các lớp được định nghĩa trong namespace Collection
là một thành phần của namespace System.
Chú ý
rts chỉ được sử dụng với một không
gian tên.
khai báo, kể cả lệnh khai báo Module hoặc Class.
không cần phải chỉ ra nội dung phần Imports.
Module cùng tên với bí danh đã đặt
Module
Một chương trình VB.NET có thể chứa một hoặc nhiều
module. Modules trong VB.NET là sự kết hợp của các dữ
liệu chung (fields) và các hàm dùng chung (method). Tất cả
các thành phần được khai báo trong một module như field,
35
method, properties đều là dùng chung và có thể được sử
dụng tại bất kỳ một dòng code nào trong projects.
Module trong VB.Net được định nghĩa bằng cách sử
dụng từ khóa Module đi kèm với tên Module và kết thúc
bằng câu lệnh End Module.
Module Hello
...
End Module
Main() Sub
Dòng tiếp theo của chương trình 1.3.2 định nghĩa thủ
tục Main() với cấu trúc như sau:
Sub Main()
...
End Sub
Một chương trình VB.NET có thể bao gồm một hoặc
nhiều thủ tục. Thủ tục Main() sub có nghĩa là chương trình
sẽ bắt đầu thực thi từ dòng lệnh đầu tiên của thủ tục Main()
và sẽ kết thúc khi kết thúc các lệnh trong Main().
Dòng thông báo
Trong ứng dụng Console, để hiển thị một dòng thông
báo ta dùng cú pháp lệnh:
Console.WriteLine(chuỗi_thông_báo)
1.3.4 Ví dụ 2 - Hello, Windows
Dưới đây là một ví dụ về phiên bản GUI (Graphical
User Interface) của Hello, World.
Imports System
Imports System.Drawing
Imports System.Windows.Forms
36
Public Class HelloWindows
Inherits Form
Private lblHelloWindows As Label
Public Shared Sub Main( )
Application.Run(New
HelloWindows( ))
End Sub
Public Sub New( )
lblHelloWindows = New Label( )
With lblHelloWindows
.Location = New Point(37, 31)
.Size = New Size(392, 64)
.Font = New Font("Arial", 36)
.Text = "Hello, Windows!"
.TabIndex = 0
.TextAlign =
ContentAlignment.TopCenter
End With
Me.Text = "Programming Visual
Basic .NET"
AutoScaleBaseSize = New Size(5,
13)
FormBorderStyle =
FormBorderStyle.FixedSingle
ClientSize = New Size(466, 127)
Controls.Add(lblHelloWindows)
End Sub
End Class
Hai lệnh Imports ở đầu chương trình chỉ ra rằng
chương trình sẽ sử dụng các đối tượng và phương thức có
sẵn trong không gian tên Drawing và Windows.Forms. Từ
37
khóa Inherits cho thấy lớp HelloWindows thừa kế lớp Form
là một lớp đã được thiết kế sẵn trong Namespace
Windows.Forms.
Thủ tục New định nghĩa các thuộc tính trên form
HelloWindows và định nghĩa một điều khiển label trên
form.
Để biên dịch chương trình này chúng ta sử dụng câu
lệnh:
vbc HelloWindows.vb
/reference:System.dll,System.Drawing.
dll, System.Windows.Forms.dll
/ target:winexe
Tham số reference chỉ ra rằng có 3 dll cần sử dụng để
biên dịch chương trình. Target cho biết file output được
biên dịch theo dạng nào. Có 3 kiểu biên dịch gồm exe cho
các ứng dụng console, winexe cho các ứng dụng windows
GUI và library để biên dịch một class library (*.dll).
Kết quả thực hiện chương trình Hello Windows được
thể hiện ở hình sau:
1.3.5 Ví dụ 3 - Hello, Browser
Hello, Browser là một phiên bản WEB của Hello,
World:
<script language="VB" runat="server">
38
Sub Page_Load(Sender As Object, E
As EventArgs)
lblMsg.Text = "Hello, Browser!"
End Sub
Sub btnBlack_Click(Sender As Object,
E As EventArgs)
lblMsg.ForeColor =
System.Drawing.Color.Black
End Sub
Sub btnGreen_Click(Sender As Object,
E As EventArgs)
lblMsg.ForeColor =
System.Drawing.Color.Green
End Sub
Sub btnBlue_Click(Sender As Object,
E As EventArgs)
lblMsg.ForeColor =
System.Drawing.Color.Blue
End Sub
</script>
<html>
<head>
<title>Programming Visual Basic
.NET</title>
</head>
<body>
<form action="HelloBrowser.aspx"
method="post" runat="server">
<h1><asp:label id="lblMsg"
runat="server"/></h1>
<p>
39
<asp:button type="submit"
id="btnBlack"
text="Black"
OnClick="btnBlack_Click"
runat="server"/>
<asp:button id="btnBlue"
text="Blue"
OnClick="btnBlue_Click"
runat="server"/>
<asp:button id="btnGreen"
text="Green"
OnClick="btnGreen_Click"
runat="server"/>
</p>
</form>
</body>
</html>
Đoạn chương trình này được ghi lại thành file
HelloBrowser.aspx. Output của chương trình này được thể
hiện trong hình dưới đây:
TÓM TẮT NỘI DUNG CỐT LÕI
1. Cấu trúc .NET Frame Work
2. Cài đặt Microsoft Visual Studio 2005
3. Một số khái niệm:
40
- Solution và projects
- Namespace
- Module
41
Chương 2
NGÔN NGỮ LẬP TRÌNH VISUAL BASIC .NET
MỤC TIÊU CỦA CHƯƠNG
- Về kiến thức
Giới thiệu các kiểu dữ liệu cơ bản và kiểu dữ liệu có
cấu trúc, cách khai báo và sử dụng các biến, cách viết và sử
dụng các lệnh trong VB.NET.
- Về thái độ:
Giúp sinh viên hệ thống và củng cố lại các khái niệm
chính trong lập trình hướng lệnh như nhập xuất dữ liệu,
hoạt động của các cấu trúc rẽ nhánh và cấu trúc lặp.
- Về kỹ năng
Sau khi kết thúc bài học sinh viên giải được các ví dụ
trong phần bài tập bằng cách viết các đoạn chương trình và
xây dựng các thủ tục, hàm bằng ngôn ngữ VB.NET.
NỘI DUNG BÀI GIẢNG LÝ THUYẾT
2.1 Các kiểu dữ liệu và đặc điểm
2.1.1 Các kiểu dữ liệu
Các kiểu dữ liệu của .Net được mô tả chi tiết trong một
cấu trúc gọi là Common Type System (CTS). CTS định
nghĩa các kiểu dữ liệu, cách thức sử dụng, cách thức được
quản lý lúc thực thi và cùng với Common Language
Specification đóng một vai trò quan trọng trong việc trao
đổi giữa các ngôn ngữ lập trình trong .Net.
Common Type System có chức năng:
ngôn ngữ lập trình, bảo toàn giá trị của dữ liệu khi có sự
trao đổi dữ liệu giữa các ngôn ngữ và bảo đảm việc thực
hiện câu lệnh được tối ưu
42
ng cho các
ngôn ngữ lập trình.
phải tuân thủ nhằm bảo đảm các thành phần viết trên các
ngôn ngữ khác nhau có thể tương tác với nhau.
Các kiểu dữ liệu trong VB.NET được chia thành 2 loại
chính đó là
1. Value type (data types, Structure and Enumeration)
2. Reference Type (objects, delegates)
Bảng 2-1 mô tả các loại dữ liệu thuộc kiểu value type.
Kiểu dữ
liệu
trong
VB.NET
Boolean
Kiểu dữ Kích
Mô tả
liệu
cỡ
tương
ứng
trong
.NET
Boolean
1 Biểu diễn giá trị lôgic True
hoặc False
Biểu diễn một ký tự Unicode
(giá trị từ 0 đến 65535 không
dấu)
Char
Char
2
String
String
(Class)
0 đến khoảng 2 tỷ ký tự
Unicode
8 0:00:00 ngày 01 tháng
Giêng 0001 đến
23:59:59 ngày 31 tháng Mười
Hai 9999.
Số nguyên
DateTime DateTime
43
0 đến 255
Từ -2 147 483 648 đến 2 147
483 647
Long
Int64
4 Từ -9 223 372 036 854 775
808
đến 9 223 372 036 854 775
807
Short
Int16
8 -32 768 to 32 767
Số thực
Decimal Decimal
12 Biểu diễn giá trị từ 1.0 × 10-28
đến 7.9 × 1028 với độ chính
xác 28-29 chữ số thập phân.
Double
Double
8 Biểu diễn giá trị từ ±5.0 × 10324
to ±1.7 × 10308 với độ
chính xác 15-16 chữ số thập
phân
Single
Single
4 Biểu diễn giá trị từ ±1.5 × 1045
đến ±3.4 × 1038 với độ
chính xác 7 chữ số thập phân
Bảng 2-1 Các kiểu dữ liệu cơ bản trong VB.NET
Byte
Integer
Byte
Int32
1
2
2.1.2 Đặc điểm của các kiểu dữ liệu
Các kiểu dữ liệu mặc nhiên phát sinh từ lớp
SysTem.Object. Ngoài các phương thức kế thừa từ lớp
SysTem.Oject, các biến kiểu dữ liệu còn có các phương
thức và thuộc tính đặc thù.
Các phương thức chung kế thừa từ SysTem.Object bao
gồm
44
object được tự động xóa bỏ.
trị của object.
hiện của lớp.
Dưới đây là các bảng liệt kê những phương thức và
thuộc tính đặc thù của các kiểu dữ liệu. Do các phương
thức có nhiều cách sử dụng khác nhau, nên trong các phần
nói về phương thức chỉ mô tả công dụng
a. Kiểu String
Thuộc tính
Tên
Mô tả
Chars(i)
Trả về ký tự tại vị trí chỉ ra trong biến. Thuộc tính
có tính chỉ đọc
Length
Trả về số ký tự trong biến.
Phương thức
Tên
Mô tả
Clone
Trả về một tham chiếu của biến.
Compare
Phương thức so sánh hai tham số kiểu String dựa
vào thứ tự các ký tự theo ngôn ngữ qui định trong
Regional Settings của từng ký tự và trả về:
-1 khi chuỗi thứ 1 nhỏ hơn chuỗi thứ 2
Ngoài ra có thể có tham số qui định có phân biệt
chữ Hoa chữ thường, v.v…
CompareOrd So sánh hai tham số kiểu String dựa theo bảng mã
45
Mô tả
các ký tự của các tham số. Hàm trả về hiệu của mã
tham số thứ nhất và mã tham số thứ hai.
Concat
Nối các tham số lại với nhau và trả về chuỗi nối.
Copy
Tạo một thể hiện mới kiểu String có giá trị như
tham số chuỗi truyền vào.
CopyTo
Sao chép một số ký tự chỉ ra từ một vị trí trên biến
vào một vị trí chỉ ra trên mảng ký tự với số lượng
ký tự truyền vào.
EndsWith
Trả về True/False cho biết các ký tự cuối của biến
có khớp với chuỗi chỉ ra không.
Format
Thay thế phần biểu thức định dạng trong chuỗi
bằng các các giá trị tương ứng đã được định dạng
theo biểu thức.
IndexOf
Trả về vị trí đầu tiên tìm thấy chuỗi hoặc ký tự
truyền vào trên biến, ; có thể sử dụng thêm vị trí
bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.
IndexOfAny Trả về vị trí tìm thấy đầu tiên trên biến bất kỳ ký
tự nào trong mảng ký tự truyền vào; có thể sử
dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm
thấy thứ mấy.
Insert
Chèn vào một giá trị String truyền vào tại vị trí chỉ
định trên biến.
Join
Nối các phần tử của mảng String truyền vào thành
một chuỗi duy nhất với dấu nối là chuỗi dấu ngăn
cách chỉ ra (separator)
LastIndexOf Trả về vị trí tìm thấy cuối cùng trên biến, chuỗi
hoặc ký tự truyền vào; có thể sử dụng thêm vị trí
bắt đầu tìm, trả về vị trí lần tìm thấy thứ mấy.
LastIndexOf Trả về vị trí tìm thấy cuối cùng trên biến bất kỳ ký
Tên
inal
46
Tên
Any
PadLeft
PadRight
Remove
Replace
Split
StartsWith
StartsWith
Substring
ToLower
ToUpper
Trim
TrimEnd
Mô tả
tự nào trong mảng ký tự truyền vào; có thể sử
dụng thêm vị trí bắt đầu tìm, trả về vị trí lần tìm
thấy thứ mấy.
Nối thêm bên trái ký tự truyền vào với số lần sao
cho độ dài tổng cộng bằng độ dài chỉ ra. Nếu độ
dài tổng cộng chỉ ra nhỏ hơn độ dài của biến,
không ký tự nào được thêm vào.
Nối thêm bên phải ký tự truyền vào với số lần sao
cho độ dài tổng cộng bằng độ dài chỉ ra. Nếu độ
dài tổng cộng chỉ ra nhỏ hơn độ dài của biến,
không ký tự nào được thêm vào.
Xóa bỏ một số ký tự chỉ ra khỏi biến từ vị trí
truyền vào.
Thay thế tất cả ký tự hay chuỗi tìm thấy trên biến
bằng ký tự hay chuỗi truyền vào.
Trả về một mảng String với các phần tử chứa các
chuỗi con được ngắt ra từ biến tùy theo ký tự ngăn
cách truyền vào.
Cho biết trị bắt đầu của biến có khớp với chuỗi
truyền vào.
Cho biết trị bắt đầu của biến có khớp với chuỗi
truyền vào.
Trả về một chuỗi con từ biến.
Trả về bản sao của biến với các ký tự in thường.
Trả về bản sao của biến với các ký tự in HOA.
Trả về biến đã loại bỏ tất cả các ký tự từ đầu đến
cuối của biến khớp với mảng ký tự truyền vào.
Trả về biến đã loại bỏ tất cả các ký tự từ vị trí cuối
của biến khớp với mảng ký tự truyền vào.
47
Mô tả
Trả về biến đã loại bỏ tất cả các ký tự từ vị trí đầu
của biến khớp với mảng ký tự truyền vào.
b. Kiểu DateTime
Thuộc tính
Tên
Mô tả
MaxValue Hiển thị giá trị lớn nhất của kiểu DateTime (chỉ
đọc).
MinValue Hiển thị giá trị nhỏ nhất của kiểu DateTime (chỉ
đọc).
Phương thức
Tên
Mô tả
Date
Trả về giá trị ngày tháng năm của biến.
Day
Trả về giá trị ngày trong tháng của biến.
DayOfWeek Trả về giá trị ngày trong tuần của biến, với ngày
đầu tiên là Chủ nhật có giá trị là 0.
DayOfYear
Trả về giá trị ngày trong năm của biến.
Hour
Trả về giá trị giờ của biến.
Millisecond
Trả về giá trị phần ngàn giây của biến.
Minute
Trả về giá trị phút của biến.
Month
Trả về tháng của biến.
Now
Trả về giá trị ngày giờ hiện hành của hệ thống.
Second
Trả về giá trị giây của biến.
TimeOfDay Trả về giá trị giờ phút giây của biến.
Today
Trả về ngày hiện hành.
Year
Trả về năm của biến.
AddDays
Thêm số ngày truyền vào cho giá trị của biến.
AddHours
Thêm số giờ truyền vào cho giá trị của biến.
AddMillisecon Thêm số phần ngàn giây truyền vào cho giá trị
Tên
TrimStart
48
Mô tả
của biến.
Thêm số phút truyền vào cho giá trị của biến.
Thêm số tháng truyền vào cho giá trị của biến.
Thêm số giây truyền vào cho giá trị của biến.
Thêm số năm truyền vào cho giá trị của biến.
So sánh hai biến ngày giờ và cho biết biến nào
lớn hơn.
CompareTo
So sánh biến với một tham số Object.
DaysInMonth Cho biết số ngày trong tháng theo tham số tháng,
năm truyền vào.
IsLeapYear
Cho biết giá trị năm truyền vào (dạng yyyy) có
phải là năm nhuận hay không.
Subtract
Trừ một giá trị thời gian khỏi biến.
ToLongDateSt Chuyển giá trị biến ra định dạng Long Date.
ring
ToLongTimeS Chuyển giá trị biến ra định dạng Long Time.
tring
ToShortDateSt Chuyển giá trị biến ra định dạng Short Date.
ring
ToShortTimeS Chuyển giá trị biến ra định dạng Short Time.
tring
ToString
Trả về chuỗi trị của biến theo định dạng truyền
vào
c. Kiểu Number
Thuộc tính
Tên
Mô tả
MaxValue Hiển thị giá trị lớn nhất của kiểu (chỉ đọc).
MinValue Hiển thị giá trị nhỏ nhất của kiểu (chỉ đọc).
Tên
ds
AddMinutes
AddMonths
AddSeconds
AddYears
Compare
49
Ngoại trừ kiểu String, các kiểu khác khi muốn chuyển
sang kiểu chuỗi đều có thể dùng phương thức ToString (kế
thừa từ lớp Object) để chuyển đổi và định dạng cùng lúc.
Cú pháp sử dụng:
ToString()
ToString(<biểu thức định dạng>)
Dưới đây là bảng biểu thức định dạng
Biểu
thức
c, C
Ý nghĩa
Ví dụ
Định dạng tiền
tệ
Định dạng số
khoa học.
Định dạng cố
định
Định
dạng
tổng quát
12345.67 ToString(“C”) hiển thị
$ 12,345.67
e, E
12345.67 ToString(“E”) hiển thị
1.234567E+0004
f, F
12345.67 ToString(“F”) hiển thị
12345.67 (với 2 số lẻ)
g, G
12345.67 ToString(“G”) hiển thị
12345.67 tùy theo gía trị
có thể hiện thị dưới dạng E hoặc
F
n, N
Định dạng số 12345.67 ToString(“N”) hiển thị
12,345.67
p, P
Định
dạng 0.45 ToString(“P”) hiển thị 45
phần trăm
%
x, X
Định
dạng 250 ToString(“X”) hiển thị FA
Thập lục phân
Bảng 2-2 Biểu thức định dạng
Ngoài ra chúng ta cũng có thể sử dụng các ký tự sau
đây để lập biểu thức định dạng
50
Biểu
thức
0
Ý nghĩa
Ví dụ
Số không giữ
chỗ
Số bất kỳ giữ
chỗ
Dấu phần lẻ
123 ToString(“0000”) hiển thị
0123
#
123 ToString(“####”) hiển thị
123
.
123 ToString(“####.00”) hiển
thị 123.00
,
Dấu chia cụm 12345 ToString(“#,###”) hiển
ba số
thị 12,345
%
Dấu phần trăm 0.45 ToString(“# %”) hiển thị
45 %
E+0,E- Dấu hiển thị 12345678 ToString
0,e+0, e- số khoa học
(“#.#######E+000”)
0
hiển thị 1.2345678E+007
\
Ký tự literal
123456 ToString(“\# #,###”)
hiển thị # 123,456
; Ký tự Ký tự ngăn Với ToString(“dương #,###;âm
ngăn
cách vùng
#,###; số không”)
cách
-123456 hiển thị âm 123,456
vùng
0 hiển thị số không
Bảng 2-3 Ký tự định dạng biểu thức
2.1.3 Biểu diễn các giá trị
Bảng dưới đây mô tả cách biểu diễn các giá trị cụ thể
theo các kiểu dữ liệu trong VB.NET
Kiểu
Biểu diễn
dữ liệu
Boolea True, False
n
Ví dụ
Dim bFlag As Boolean =
False
51
Kiểu
Biểu diễn
dữ liệu
Char
C
Date
# #
Decima D
l
Double Bất kỳ một số viết
kiểu dấu phẩy động
nào hoặc R
Ví dụ
Dim chVal As Char = "X"C
Dim datMillen As Date =
#01/01/2001#
Dim decValue As Decimal =
6.14D
Dim dblValue As Double =
6.142
Dim dblValue As Double =
6.142R
Dim iValue As Integer = 362
Dim iValue As Integer =
362I
Dim iValue As Integer =
&H16AI (hệ 16)
Dim iValue As Integer =
&O552I (hệ 8)
Dim lValue As Long = 362L
Dim lValue As Long =
&H16AL (hệ 16)
Dim lValue As Long =
&O552L (hệ 8)
Integer
Bất kỳ một số nguyên
nào thuộc khoảng (2,147,483,648
đến
2,147,483,647), hoặc
I
Long
Bất kỳ một số nguyên
nào ngoài khoảng
(9,223,372,036,854,77
5,808
đến -2,147,483,649
hoặc ngoài khoảng từ
2,147,483,648
đến
9,223,372,036,854,77
5,807), hoặc L
S
Dim shValue As Short =
362S
Short
52
Kiểu
Biểu diễn
dữ liệu
Ví dụ
Dim shValue As Short
&H16AS (hệ 16)
Dim shValue As Short
&O552S (hệ 8)
Single F
Dim sngValue As Single
6.142F
String " "
Dim strValue As String
"This is a string"
Bảng 2-4 Cách viết các giá trị theo từng kiểu dữ liệu
2.2 Biến, hằng
2.2.1 Biến và tính chất
Biến là một thực thể với 6 tính chất sau:
Name: Tên của biến. Tên của biến phải là định
danh hợp lệ trong VB.Net, nghĩa là phải bắt đầu bằng một
chữ cái hoặc ký tự _ và không được trùng với các từ khóa
củaVB.Net. Trường hợp muốn dùng từ khóa làm tên biến
phải
được
dùng
trong
ngoặc
vuông
như [String], [Boolean], … Tên biến nên có ý nghĩa gợi
nhớ đến nội dung trong nó như Don_gia, So_luong_xuat.
Address: Địa chỉ vùng nhớ nơi lưu giữ giá trị của
biến. Trong thời gian sống của chương trình, địa chỉ của
biến có thể thay đổi.
Type: Kiểu của biến, còn gọi là kiểu dữ liệu. Mỗi
biến phải thuộc về một kiểu dữ liệu trong Common Type
System.
Value: Giá trị. Giá trị của biến phải phù hợp với
kiểu dữ liệu của biến.
53
=
=
=
=
Scope: Phạm vi sử dụng của biến.
Mỗi biến có một phạm vi sử dụng là phạm vi trong
chương trình nơi biến được nhìn nhận đối với câu lệnh. Có
các loại phạm vi sau:
Cấp độ
Mô tả
Block Scope - Phạm vi khối Chỉ được nhìn nhận trong
lệnh
khối lệnh mà biến được khai
báo
Procedure Scope - Phạm vi Cho phép truy cập tại bất kỳ
thủ tục
một dòng lệnh nào bên trong
thủ tục mà biến được khai
báo
Procedure Scope - Phạm vi Cho phép truy cập tại bất kỳ
thủ tục
một dòng lệnh nào bên trong
thủ tục mà biến được khai báo
Module Scope - Phạm vi Cho phép truy cập tại bất kỳ
Module
một dòng code nào trong
module, class hoặc structure
nơi biến được khai báo
Namespace Scope - Phạm vi Cho phép truy cập tại bất kỳ
Namespace
một dòng code nào của
namespace nơi biến được khai
báo
LifeTime: Thời gian tồn tại của biến.
Trong khi phạm vi sử dụng của biến xác định nơi chốn
biến được phép sử dụng, thì thời gian tồn tại của biến xác
định khoảng thời gian biến có thể lưu giữ giá trị.
54
Biến có phạm vi Module có thời gian tồn tại là thời
gian ứng dụng đang thực hiện. Biến có phạm vi khối lệnh,
thủ tục chỉ tồn tại trong khi thủ tục đang thực hiện. Biến
này sẽ được khởi tạo theo giá trị mặc định của kiểu dữ liệu
khi thủ tục bắt đầu thực hiện và chấm dứt khi thủ tục kết
thúc.
2.2.2 Khai báo và khởi tạo giá trị cho biến
Khai báo
Trong VB.NET các biến được khai báo với cú pháp
sau:
Dim tên_biến AS kiểu_dữ_liệu
Trong đó tên biến là một chuỗi được bắt đầu bởi một
chữ cái, không chứa dấu cách và là duy nhất trong một
phạm vi.
- Ví dụ: Khai báo biến i thuộc kiểu integer
Dim i as integer
- Để nhấn mạnh vai trò của hàm tạo (constructor),
chúng ta có thể viết:
Dim x as Integer = New Integer()
- Khi khai báo nhiều biến trên cùng dòng và không chỉ
ra kiểu của biến, biến sẽ lấy kiểu dữ liệu của biến khai báo
dữ liệu tường minh tiếp sau đó
Dim x as Integer, a, b, c as Long
Các biến a, b, c đều cùng có kiểu Long
Khai báo và khởi tạo giá trị
- Có thể khai báo và khởi tạo giá trị cho biến cùng lúc:
Dim x as Integer = 100, y as Integer
= 200
55
Trong cách này, phải khai báo tường minh kiểu dữ liệu
cho từng biến.
Khai báo biến sử dụng các ký tự hậu tố
Có thể khai báo biến bằng cách thêm vào sau tên biến
một ký tự (hậu tố) xác định kiểu dữ liệu của biến.
Ví dụ: Dim x% tương ứng với lệnh khai báo Dim x
As Integer
Các ký tự hậu tố được chỉ ra trong bảng dưới đây:
Kiểu
dữ Ký tự
liệu
Decimal
@
Double
#
Integer
%
Long
&
Single
!
String
$
Ví dụ
Dim decValue@ =
132.24
Dim dblValue# =
.0000001327
Dim iCount% = 100
Dim lLimit& =
1000000
Dim sngValue! =
3.1417
Dim strInput$ = ""
Bảng 2-5 Các ký tự hậu tố xác định kiểu dữ liệu
2.2.3 Xác định phạm vi biến (tầm vực của biến)
Phạm vi khối lệnh
Trong VB.NET khối lệnh là tập hợp các câu lệnh thuộc
về một trong các cấu trúc điều khiển sau:
- Do .. Loop
- For [Each] .. Next
- If .. End If
56
- Select .. End Select
- SyncLock .. End SyncLock
- Try .. End Try
- While .. End While
- With .. End With
Một biến được khai báo trong khối lệnh sẽ có tầm vực
khối lệnh nghĩa là nó chỉ được phép sử dụng trong khối
lệnh này.
Phạm vi thủ tục
Có hai loại thủ tục trong VB.NET đó là sub và
function. Các biến được khai báo trong thủ tục và nằm
ngoài bất kỳ khối lệnh nào của thủ tục là các biến có phạm
vi thủ tục. Chúng còn được gọi là các biến cục bộ.
Phạm vi Module (phạm vi đơn thể)
Biến được khai báo trong đơn thể và không nằm trong
bất kỳ khối lệnh hay thủ tục nào của đơn thể là các biến có
phạm vi đơn thể.
Các biến có phạm vi đơn thể được khai báo bằng cách
thay từ khóa Dim bằng từ khóa Private.
Phạm vi Namespace
Các biến có phạm vi đơn thể và được khai báo với từ
khóa Public hoặc Friend được gọi là các biến có phạm vi
Namespace.
2.2.4 Hằng và số ngẫu nhiên
Hằng
Hằng là đại lượng có giá trị không đổi trong một phạm
vi nào đó. Trong VB.NET các hằng số được khai báo với từ
khóa Const và phải được khởi tạo giá trị ngay khi khai báo.
57
Cú pháp khai báo hằng:
Const <Tên_hằng> As
<Kiểu_dữ_liệu>=<Biểu_thức>
Ví dụ:
Const Max as Interger=100
Số ngẫu nhiên
- Sử dụng đối tượng Random để khai báo số ngẫu nhiên
- Dùng phương thức Next của đối tượng Random để
khai báo khoảng mà số ngẫu nhiên lấy ra
Ví dụ:
Dim rd As Random
Set rd =New Random
Dim rdSo As Integer
rdSo = rd.Next (1,1000)
2.2.5 Chuyển đổi các kiểu dữ liệu
Option Strict ON|OFF
Khai báo Option Strict On|Off là một chỉ thị không cho
phép các chuyển đổi kiểu làm mất dữ liệu. Nhưng chúng
ta có thể thực hiện các chuyển đổi mở rộng như
chuyển biến kiểu Integer sang kiểu Long.
Ví dụ: Đoạn code sau không có lỗi vì kiểu integer có
thể chuyển sang kiểu Long là một kiểu chuyển đổi mở rộng
được gọi là implicit conversion.
Dim a As Integer = 5
Dim b As Long = a
Song khi đảo ngược lại kiểu dữ liệu của hai biến a và b
như sau
Dim a As Long = 5
Dim b As Integer = a
58
Thì sẽ gây ra lỗi trường hợp Option Strict là ON.
Cũng như vậy, khi khai báo này bật (On) sẽ không cho
phép tự động chuyển đổi kiểu chuỗi sang kiểu số hay
ngược lại. Thay vào đó ta phải sử dụng các hàm convert.
Ví dụ khi Option Strict là ON, với hai biến x và y được
khai báo như sau
Dim x as string, y as integer
Thì câu lệnh x=y sẽ gây ra lỗi cú pháp. Thay vào đó ta
phải dùng lệnh x=CStr(y) hoặc x=y.ToString
Các hàm chuyển đổi dữ liệu
Ta có thể sử dụng các hàm trong bảng dưới đây để
chuyển đổi giữa các kiểu dữ liệu. Kiểu chuyển đổi này
được gọi là explicit conversion vì trong kiểu chuyển đổi
này lập trình viên đã chỉ định rõ cần chuyển về kiểu dữ liệu
nào.
Hàm chuyển Chuyển đối số về kiểu
đổi
CBool
Boolean
CByte
Byte
CChar
Char
CDate
Date
CDbl
Double
CDec
Decimal
CInt
Integer
CLng
Long
CObj
Object
59
Hàm
đổi
CSng
CStr
chuyển Chuyển đối số về kiểu
Single
String
Bảng 2-6 Các hàm chuyển đổi dữ liệu
2.3 Toán tử
Toán tử là ký hiệu chỉ ra phép toán nào được thực hiện
trên các toán hạng (có thể là một hoặc hai toán hạng)
2.3.1 Toán tử toán học
Ký hiệu
Mô tả
+
(cộng)
(trừ)
*
(nhân)
/
(chia)
\
(chia lấy phần nguyên)
Mod
chia lấy phần dư của số nguyên
^
(lũy thừa)
2.3.2 Toán tử nối chuỗi
Toán tử chỉ dành cho toán hạng kiểu String với hai toán
tử là & (ampersand) và + (cộng). Kết quả là một trị String
gồm các ký tự của toán hạng thứ nhất tiếp theo sau là các
ký tự của toán hạng thứ hai.
2.3.3 Toán tử gán
Ký hiệu
Mô tả
=
Gán toán hạng thứ hai cho toán hạng thứ
nhất
+=
Cộng hoặc nối chuỗi toán hạng sau vào
60
toán hạng đầu và gán kết quả cho toán hạng
đầu
-=
Trừ toán hạng sau khỏi toán hạng đầu và
gán hiệu cho toán hạng đầu
*=
Nhân hai toán hạng với nhau và gán tích
cho toán hạng đầu
/=
Chia toán hạng đầu cho toán hạng sau và
gán thương cho toán hạng đầu
\=
Thực hiện phép toán \ giữa toán hạng đầu
và toán hạng sau và gán kết quả cho toán
hạng đầu
^=
Tính lũy thừa toán hạng đầu với số mũ là
toán hạng sau và gán kết quả cho toán hạng
đầu
&=
Nối chuỗi toán hạng sau vào toán hạng đầu
và gán kết quả cho toán hạng đầu
2.3.4 Toán tử so sánh
Ký hiệu
Mô tả
=
Bằng
>=
Lớn hơn hoặc bằng
<=
Nhỏ hơn hoặc bằng
>
Lớn hơn
<
Nhỏ hơn
<>
Khác
TypeOf … Is So sánh kiểu của biến kiểu tham chiếu thứ
…
nhất có trùng kiểu trên toán hạng thứ hai,
nếu trùng trả về True, ngược lại False
Is
Toán tử dành cho toán hạng kiểu tham
chiếu, trả về True nếu hai toán hạng
cùng tham chiếu đến một đối tượng, ngược
61
Ký hiệu
Mô tả
lại là False)
Like
Toán tử dành cho toán hạng kiểu String, trả
về True nếu toán hạng thứ nhất trùng với
mẫu (pattern) của toán hạng thứ hai, ngược
lại là False.
2.3.5 Toán tử luận lý và bitwise
Toán tử luận lý trả về giá trị True, False
Ký hiệu
Not
And
AndAlso
Or
OrElse
Xor
Not
Mô tả
Trả về giá trị ngược lại của toán hạng
Trả về True (1) khi và chỉ khi hai toán hạng
cùng là True (1)
Trả về giá trị như And nhưng khi toán hạng
thứ nhất là False (0) sẽ không kiểm tra toán
hạng thứ hai và trả về False
Trả về False (0) khi và chỉ khi hai toán
hạng cùng là False (0)
Trả về giá trị như Or nhưng khi toán hạng
thứ nhất là True (1) sẽ không kiểm tra toán
hạng thứ hai và trả về True (1)
Trả về True (1) khi và chỉ khi có 1 toán
hạng là True (1)
Trả về giá trị ngược lại của toán hạng
2.4 Các lệnh VB.NET
2.4.1 Chú thích và cách viết lệnh
Thông thường, mỗi lệnh VB.NET được viết trên một
dòng. Trình biên dịch sẽ coi ký hiệu xuống dòng cũng là ký
hiệu kết thúc câu lệnh. Trong trường hợp muốn viết một
62
câu lệnh trên nhiều dòng, trước khi xuống dòng cần bổ
sung thêm ký tự gạch dưới.
Ví dụ: Câu lệnh sau sẽ sinh ra lỗi
Dim myName As String = "My name is
Faraz Rasheed"
Ta có thể sửa thành
Dim myName As String = "My name is" & _
"Faraz Rasheed"
Để viết thêm các chú thích trong chương trình, ta sử
dụng dấu nháy đơn ở đầu dòng chú thích
Để viết nhiều lệnh trên cùng một dòng ta sử dụng dấu
hai chấm ngăn cách các câu lệnh.
Ví dụ: Đoạn mã sau:
X=1
Y=2
Có thể viết liền một dòng:
X=1 : y=2
2.4.2 Nhập/xuất dữ liệu
a. Nhập/xuất dữ liệu với Console
- Xuất dữ liệu:
Console.Write(value)
- Nhập một ký tự
Console.Read()
- Nhập một dòng:
Console.Readline()
Ví dụ 2-1: Chương trình dưới đây sẽ nhập tên, điểm
toán, điểm văn từ màn hình console sau đó hiển thị lại tên
và điểm trung bình.
63
Imports System
Public Module Module1
Sub Main()
Dim hoten as string
Dim toan,van, diemtb as decimal
Console.Write("Nhap ho ten:")
HoTen = Console.ReadLine()
Console.Write("Nhap diem toan:")
Toan = Console.ReadLine()
Console.Write("Nhap diem van:")
Van = Console.ReadLine()
DiemTB = (Toan+Van)/2
Console.WriteLine("Ho ten :" & HoTen)
Console.WriteLine("Diem Trung Binh:" &
DiemTB)
End Sub
End Module
b. InputBox- Hộp nhập liệu
InputBox là một hàm cho phép hiển thị một hộp thoại
có chứa một thông báo và một textbox, chờ người sử dụng
nhập vào một chuỗi hoặc nhấn một nút lệnh và sau đó trả
lại chuỗi đã nhập trong textbox.
Cú pháp:
InputBox(
Prompt,[Title],[DefaultResponse],
[Xpos], [Ypos])
Trong đó
- Prompt (tham số bắt buộc) là chuỗi thông báo hiển thị
trong hộp thoại. Trường hợp thông báo trên nhiều dòng cần
dùng biểu thức Chr(13)&Chr(10) để ngắt dòng.
64
- Title (tham số tùy chọn) là tiêu đề của hộp thoại. Nếu
không chỉ định thì tên của ứng dụng sẽ được dùng làm tiêu
đề.
- DefaultResponse (tham số tùy chọn) là chuỗi hiển thị
trong textbox khi người sử dụng không nhập giá trị gì và
nút ngầm định được đáp ứng. Nếu không chỉ định thì
textbox bỏ trống
- Xpos (tham số tùy chọn) là một giá trị số xác định
khoảng cách giữa mép trái của hộp thoại với mép trái màn
hình. Nếu không chỉ định thì hộp thoại do inputbox tạo ra
sẽ được căn giữa màn hình theo chiều ngang.
- Ypos (tham số tùy chọn) là một giá trị số xác định
khoảng cách giữa mép trên của hộp thoại với đỉnh màn
hình. Nếu không chỉ định thì hộp thoại do inputbox tạo ra
sẽ được căn giữa màn hình theo chiều dọc.
Ví dụ: Để nhập giá trị cho biến a chúng ta có thể sử
dụng hàm InputBox
a=InputBox("Nhập giá trị cho biến a")
Hộp thoại hiển thị trên màn hình như sau:
c. Hiển thị thông báo - Hàm Msgbox
Msgbox là một hàm hiển thị một thông báo trong một
hộp thoại, chờ người sử dụng chọn một nút lệnh và trả về
giá trị nguyên tương ứng với nút lệnh được chọn.
65
Cú pháp
MsgBox(Prompt[,Buttons][,Title)
Trong đó:
- Prompt (bắt buộc) là chuỗi được hiển thị trong hộp
thông báo, độ dài tối đa 1024 ký tự; có thể dùng Chr(13) &
Chr(10) để ngắt dòng.
- Buttons (tham số tùy chọn) là một biểu thức số tương
ứng với tổng của tất cả các giá trị bao gồm số lượng và kiểu
của các nút được hiển thị, biểu tượng trong hộp thông báo,
nút bấm tùy chọn. Nếu tham số này được bỏ qua thì giá trị
ngầm định là zero.
Các giá trị quy ước dạng của hộp thông báo được hiển
thị trong bảng dưới đây:
Member
OKOnly
Value
0
Description
Chỉ hiển thị nút OK
OKCancel
1
Hiển thị nút OK và
Cancel
AbortRetryIgnore
2
Hiển thị nút Abort,
Retry và Ignore
YesNoCancel
3
Hiển thị nút Yes, No
và Cancel
YesNo
4
Hiển thị nút Yes và No
RetryCancel
5
Hiển thị nút Retry và
Cancel
Critical
16
Question
32
Hiển thị biểu tượng
Hiển thị biểu tượng
66
Member
Value
Description
Exclamation
48
Hiển thị biểu tượng
Information
64
Hiển thị biểu tượng
DefaultButton1
0
Nút bấm đầu tiên là
ngầm định
DefaultButton2
256
Nút bấm thứ hai là
ngầm định
DefaultButton3
512
Nút bấm thứ ba là
ngầm định
AplicationModal
0
Ứng dụng là modal có
nghĩa là người sử dụng
phải nhấn một nút
trong hộp thông báo
mới có thể tiếp tục làm
việc với ứng dụng
SystemModal
4096
System là modal. Mọi
ứng dụng phải đợi cho
đến khi người sử dụng
đáp ứng hộp thông báo
MsgboxSetForeground 65536
Chỉ định hộp thông
báo như màu nền của
window
MsgBoxRight
524288
Text được căn phải
MsgBoxRtlReading
1048576
Text xuất hiện theo
67
Member
Value
Description
thứ tự từ phải sang trái
Bảng 2-6 Các giá trị xác định dạng hộp thoại Msgbox
Nhóm thứ nhất có giá trị từ 0 đến 5 mô tả số lượng và
kiểu của các button xuất hiện trong hộp thông báo. Nhóm
thứ hai (16,32,48,64) mô tả kiểu của các icon. Nhóm thứ ba
(0, 256, 512) xác định nút bấm nào là ngầm định. Nhóm
thứ 4 (0,4096) xác định kiểu đáp ứng của hộp thông báo và
nhóm thứ 5 chỉ định màu cũng như kiểu căn lề của dòng
text trong hộp thông báo.
- Title (tham số tùy chọn) là tiêu đề của hộp thông báo.
Nếu bỏ qua tham số này thì tên của ứng dụng sẽ được dùng
làm tiêu đề.
- Giá trị trả về
Hằng số
OK
Giá trị
1
Cancel
2
Abort
3
Retry
4
Ignore
5
Yes
6
No
7
Ví dụ: Để hiển thị hộp thông báo như dưới đây (gồm
hai nút Yes, No và icon Question) ta sử dụng lệnh
MsgBox("Bạn có chấp nhận xóa không",
36)
68
Trong đó 36 là tổng của 4 (nút YesNo) và 32 (biểu
tượng Question).
Muốn lấy giá trị trả về tương ứng với nút người sử
dụng đã bấm ta sử dụng lệnh
X=MsgBox("Bạn có chấp nhận xóa
không", 36)
Khi đó nếu người sử dụng nhấn nút Yes ta sẽ có giá trị
của x bằng 6; nếu nhấn nút No ta có giá trị của x bằng 7
d. Hiển thị thông báo - MessageBox.Show
Ngoài hàm msgbox, ta có thể sử dụng phương thức
Show của lớp MessageBox để hiển thị một hộp thông báo
với cú pháp như sau:
MessageBox.Show(text,caption,button,i
con,defaultButton,option,displayHelpB
utton)
Trong đó:
- Text: String là nội dung dòng thông báo
- Caption: String là tiêu đề của hộp thoại. Nếu không
chỉ định thì tiêu đề sẽ là tên của ứng dụng.
- Button: xác định các nút được hiển thị trong hộp
thông báo và thuộc về một trong các giá trị sau:
+ MessageBoxButtons.AbortRetryIgnore
+ MessageBoxButtons.OK
69
+ MessageBoxButtons.OKCancel
+ MessageBoxButtons.RetryCancel
+ MessageBoxButtons.YesNo
+ MessageBoxButtons.YesNoCancel
- Icon: Biểu tượng xuất hiện trong hộp thoại; nhận một
trong các giá trị sau:
+ MessageBoxIcon.Asterisk
+ MessageBoxIcon.Error
+ MessageBoxIcon.Exclamation
+ MessageBoxIcon.Hand
+ MessageBoxIcon.Information
+ MessageBoxIcon.None
+ MessageBoxIcon.Question
+ MessageBoxIcon.Stop
+ MessageBoxIcon.Warning
- Default button: Nút bấm ngầm định nhận 1 trong 3 giá
trị Button1, Button2, Button3
- Option: kiểu căn lề của hộp thoại
- DisplayHelpButton (True,False) cho phép hiển thị hay
không hiển thị nút Help.
Ví dụ: Lệnh
MessageBox.Show("Xóa bản ghi hiện thời?",
"Thông báo", MessageBoxButtons.YesNo,
MessageBoxIcon.Question)
Sẽ hiển thị hộp thông báo dưới đây
70
2.4.3 Các lệnh rẽ nhánh
a. Lệnh If
Mẫu 1:
If <điều kiện> Then
' Các câu lệnh
End if
Trong đó <điều kiện> có thể là biểu thức trả về giá
trị True/False hoặc là một giá trị số. Giá trị số khác 0 tương
ứng với True, ngược lại là False.
Sử dụng cú pháp này, người lập trình muốn khai báo
với trình biên dịch rằng các câu lệnh trong vùng If …
End If chỉ được thực hiện nếu như <điều kiện> là đúng.
Nếu chỉ có một lệnh được thực hiện khi điều kiện đúng
ta có thể viết lại mẫu 1 như sau:
If <điều kiện> then Câu_lệnh
Mẫu 2:
If <điều kiện> Then
' Các câu lệnh khi điều kiện đúng
Else
' Các câu lệnh khi điều kiện sai
End if
71
Nếu chỉ có một câu lệnh được thực hiện trong mỗi
trường hợp khi điều kiện đúng hoặc sai ta có thể viết như
sau:
If <điều kiện> Then Câu_lệnh1 Else Câu_lệnh2
Trong đó câu_lệnh1 là lệnh được thực hiện khi điều
kiện đúng còn câu_lệnh 2 là lệnh được thực hiện khi
điều kiện sai.
Ví dụ: Đoạn mã dưới đây:
If x>0 then
Msgbox ("Số dương")
Else
Msgbox ("Số âm")
End if
Có thể được viết như sau:
If x>0 then Msgbox ("Số dương") Else Msgbox
("Số âm")
Trong trường hợp nhiều điều kiện, chúng ta sử dụng
mẫu 3 dưới đây:
Mẫu 3:
If <điều kiện 1> Then
...
ElseIf <điều kiện 2> Then
...
ElseIf <điều kiện n> Then
...
Else
...
End If
72
Chú ý: Các mệnh đề If … Then … Else có thể lồng
nhau.
Ví dụ 2-2: Đoạn chương trình dưới đây sử dụng hàm
InputBox để nhập giá trị cho 2 số nguyên x và y sau đó
dùng MsgBox để đưa ra thông báo về số lớn nhất và số nhỏ
nhất.
Dim x%, y%
x = InputBox("Nhập số thứ nhất")
y = InputBox("Nhập số thứ hai")
If x > y Then
MsgBox("Số lớn nhất là " & x & Chr(13) &
Chr(10) _
& "Số nhỏ nhất là" & y)
Else
MsgBox("Số lớn nhất là " & y & Chr(13) &
Chr(10) _
& "Số nhỏ nhất là" & x)
End If
Trong ví dụ trên biểu thức Chr(13) & Chr(10) được
dùng để tách chuỗi thông báo trong hộp thoại thành 2 dòng.
Dấu _ dùng để xuống dòng khi chưa kết thúc câu lệnh.
b. Lệnh Case
Select Case <biểu thức>
Case <danh sách 1>
' Các lệnh thực hiện trong nhánh 1
Case <danh sách 2>
' Các lệnh thực hiện trong nhánh 2
...
Case Else
73
' Các lệnh thực hiện khi không có nhánh
nào ở trên được chọn
End Select
Danh sách được đưa ra để làm điều kiện rẽ nhánh có
thể rơi vào một trong các trường hợp sau:
- biểu thức
- biểu thức 1, biểu thức 2,...
- biểu thức 1 TO biểu thức 2
- IS <phép toán so sánh> biểu thức
Ví dụ 2-3: Đoạn chương trình sau dùng InputBox để
nhập vào giá trị của một tháng trong một năm và hiển thị số
ngày của tháng đó.
Dim thang, nam, songay As Integer
thang = InputBox("Tháng") : nam =
InputBox("Năm:")
Select Case thang
Case 1, 3, 5, 7, 8, 10, 12
songay = 31
Case 4, 6, 9, 11
songay = 30
Case Else
If (nam Mod 400=0) Or (nam Mod 4=0 And
nam Mod 100 <>0) _
Then songay = 29 Else songay = 28
End Select
MsgBox("Tháng " & thang & " năm " & nam & "
có " & _
songay & " ngày")
Ví dụ 2-4: Nhập vào tuổi của một người và in ra thông
báo Thiếu niên nếu tuổi nhỏ hơn 15; Thanh niên nếu tuổi từ
74
15 đến 25; Trung niên nếu tuổi từ 26 đến 45; Hoa niên nếu
tuổi lớn hơn 26
Dim tuoi%
tuoi = InputBox("Tuổi:")
Select Case tuoi
Case Is < 15
MsgBox("Thiếu niên")
Case 15 To 25
MsgBox("Thanh niên")
Case 26 To 45
MsgBox("Trung niên")
Case Is > 46
MsgBox("Hoa niên")
End Select
2.4.4 Câu lệnh lặp
a. For .. Next
Cú pháp:
For <biến đếm> = <giá trị đầu> To <giá trị
cuối> [Step <bước>]
' Các câu lệnh
[Exit For]
' Các câu lệnh
Next [biến đếm]
thực hiện nếu <biến đếm> có giá trị trong đoạn [<giá trị
đầu>, <giá trị cuối>]
thêm <bước>. Nếu không chỉ định, <bước> có giá trị là 1.
75
<giá trị đầu> <= <giá trị cuối>
<giá trị đầu> >= <giá trị cuối>
lặp
Ví dụ 2-5: Tính số tiền nhận được sau N tháng gửi tiết
kiệm biết số tiền đem gửi là S và lãi suất kép là H% một
tháng.
Dim N%, i%
Dim H, S As Decimal
S = InputBox("Số tiền đem gửi:")
H = InputBox("Lãi suất hàng tháng: (%)")
N = InputBox("Số tháng gửi:")
For i = 1 To N
S += H * S / 100
Next
MsgBox("Số tiền nhận được là " & S)
b. For Each … Next
Cú pháp:
For Each <phần tử> In <tập hợp>
' Các câu lệnh
[Exit For]
' Các câu lệnh
Next [phần tử]
Với cú pháp này, chương trình sẽ duyệt qua từng phần
tử trong tập hợp đang duyệt. Chú ý kiểu của phần tử phải
khai báo tương thích với kiểu của tập hợp đang duyệt.
Exit For dùng để thoát khỏi vòng lặp For
76
Ví dụ: Đoạn chương trình dưới đây dùng cấu trúc For ..
Each .. Next để duyệt qua lần lượt các phần tử trong một
tập hợp nhằm tìm phần tử có chứa chuỗi "Hello". Đoạn mã
này giả thiết là tập hợp thisCollection đã được thiết lập và
mỗi phần tử của nó thuộc kiểu String.
Dim found As Boolean = False
Dim thisCollection As New Collection
For Each thisObject As String In
thisCollection
If thisObject = "Hello" Then
found = True
Exit For
End If
Next thisObject
c. Do … Loop
Mẫu 1:
Do While <biểu thức logic>
' Các câu lệnh
Loop
Với cú pháp này, các câu lệnh đặt trong vùng Do While
… Loop chỉ thực hiện bao lâu <biểu thức logic> có giá trị
True. Sau mỗi lần thực hiện các câu lệnh trong vùng Do
While...Loop, <biểu thức logic> sẽ được kiểm tra lại:
Cấu trúc này kiểm tra <biểu thức logic> trước khi thực
hiện các lệnh nên sẽ không thực hiện lần nào nếu ngay lần
đầu tiên <biểu thức logic> có trị False.
Mẫu 2:
77
Do
' Các câu lệnh
Loop While <biểu thức logic>
Tương tự Do While … Loop, các câu lệnh chỉ tiếp tục
thực hiện khi <biểu thức logic> có giá trị True và sẽ kiểm
tra lại <biểu thức logic> sau mỗi lần thực hiện.
Do kiểm tra sau khi thực hiện nên nếu ngay lần đầu
<biểu thức logic> có trị False, các lệnh cũng được thực
hiện một lần.
Mẫu 3:
Do Untile <biểu thức logic>
' Các câu lệnh
Loop
Mẫu 4:
Do
' Các câu lệnh
Loop Until <biểu thức logic>
Hai cú pháp này tương tự hai cú pháp trên (Do While
… Loop, Do … Loop While), với một khác biệt là chỉ
thực hiện hoặc tiếp tục thực hiện khi <biểu thức logic> là
False.
Chúng ta có thể chấm dứt giữa chừng vòng lặp với lệnh
Exit Do
d. While … End While
Cú pháp
While <biểu thức logic>
' Các câu lệnh
[ Exit While ]
' Các câu lệnh
78
End While
Cách sử dụng như Do While … Loop
Ví dụ 2-6: Tìm ước số chung lớn nhất của 2 số m và n
Cách 1: - Dùng Do .. While
Dim n%, m%, UCLN%
n = InputBox("Nhập số thứ nhất:")
m = InputBox("Nhập số thứ hai")
Do While m <> n
If m > n Then m = m-n Else n = n-m
Loop
UCLN = m
msgBox("USCLN= " & UCLN)
Cách 2: - Dùng Do ..Until
Do Until m = n
If m > n Then m = m-n Else n = n-m
Loop
Cách 3: - Dùng While .. End While
While m <> n
If m > n Then m = m - n Else n = n - m
End While
2.5 Dữ liệu có cấu trúc
2.5.1 Enum
Kiểu Enum là sự liên kết một tập hợp các trị
với các tên gợi nhớ. Các trị này mặc nhiên có
Integer và chỉ có thể là kiểu Byte, Short, Long
Integer. Kiểu Enum chỉ được tạo trong các Class
Module.
hằng
kiểu
hoặc
hoặc
79
Cú pháp:
[Phạm vi] [ Shadows ] Enum <tên> [ As <Kiểu
DL>]
<tên thành phần thứ nhất> [= trị hằng 1]
<tên thành phần thứ hai> [= trị hằng 2]
...
End Enum
Trong đó phạm vi được xác định bởi một trong các từ
khóa [Public | Protected | Friend | Protected Friend |
Private]
Ví dụ:
Public Enum DoTuoi as Integer
Nhidong = 0
Thieunien = 1
Thanhnien = 2
Trungnien = 3
End Enum
Khi không chỉ ra trị hằng, VB.NET sẽ gán trị cho
thành phần đầu tiên là 0 và tăng dần cho các thành phần
kế tiếp:
Ví dụ:
Public Enum DoTuoi as Integer
Nhidong ' mặc nhiên có trị 0
Thieunien ' mặc nhiên có trị 1
Thanhnien ' mặc nhiên có trị 2
Trungnien ' mặc nhiên có trị 3
End Enum
Nếu chỉ gán trị hằng cho thành phần đầu tiên, các thành
phần kế tiếp sẽ nhận giá trị tăng dần:
80
Public Enum DoTuoi as Integer
Nhidong = 100
Thieunien ' mặc nhiên có trị 101
Thanhnien ' mặc nhiên có trị 102
Trungnien ' mặc nhiên có trị 103
End Enum
Sau khi khai báo kiểu Enum, chúng ta có thể khai báo
biến kiểu Enum cũng như sử dụng các thành phần của kiểu
này thay cho các trị hằng.
2.5.2 Mảng
Mảng là tập hợp các biến có cùng kiểu dữ liệu, cùng tên
nhưng có chỉ số khác nhau. Trong VB.Net, mảng có chỉ số
bắt đầu là 0 và luôn luôn là mảng động. Chúng ta có các
cách khai báo mảng như sau.
- Khai báo không khởi tạo kích thước và giá trị
Dim a() as Integer
Hoặc
Dim a as Integer()
- Khai báo có khởi tạo kích thước nhưng không khởi
tạo giá trị ban đầu:
Dim a(6) as Integer
- Khai báo có khởi tạo kích thước và khởi tạo giá trị
ban đầu:
Dim a() as Integer = {1,2,3,4,5,6,7}
81
Hoặc
Dim a() as Integer = New
Integer(6){1,2,3,4,5,6,7}
Hoặc
Dim a() as Integer = New Integer (6) {}
Chú ý: Khi dấu { } rỗng, các phần tử có giá trị khởi tạo
là giá trị mặc định của kiểu dữ liệu.
Mảng có kiểu tham chiếu nên khi gán hai biến mảng
cho nhau, biến được gán sẽ là một tham chiếu đến mảng
bên phải toán tử =, khác với trong VB6, là tạo ra một mảng
mới có số phần tử mang trị giống nhau.
Mảng thuộc lớp System.Array nên có các thuộc tính và
phương thức của lớp này. Sau đây là một số thuộc tính và
phương thức đáng chú ý:
Thuộc tính
Tên
Length
Rank
Phương thức:
Tên
BinarySearch
Clear
Clone
Mô tả
Số phần tử của mảng
Số chiều của mảng
Mô tả
Tìm kiếm trên mảng một chiều đã
được sắp xếp giá trị truyền vào, sử
dụng thuật giải tìm kiếm nhị phân.
Gán các phần tử trong dãy chỉ ra bằng
giá trị mặc định của kiểu dữ liệu các
phần tử
Trả về bản sao cạn (shallow copy) của
mảng. Bản sao này chỉ sao chép kiểu
82
trị và kiểu tham chiếu nhưng không
sao chép các đối tượng được tham
chiếu đến.
Copy
Sao chép một phần của mảng vào
mảng khác và thực hiện chuyển đổi
kiểu nếu cần.
CopyTo
Sao chép toàn bộ các phần tử của
mảng một chiều vào mảng một chiều
được truyền vào bắt đầu từ vị trí chỉ
ra.
GetLength
Trả về số phần tử của một chiều được
chỉ ra trên mảng
GetLowerBound Trả về chỉ số nhỏ nhất của một chiều
được chỉ ra trên mảng
GetUpperBound Trả về chỉ số lớn nhất của một chiều
được chỉ ra trên mảng
GetValue
Trả về trị của một phần tử chỉ ra trên
mảng
IndexOf
Trả về chỉ số của phần tử đầu tiên trên
mảng một chiều (hoặc trên một vùng
của mảng) trùng với giá trị truyền vào
LastIndexOf
Trả về chỉ số của phần tử cuối cùng
trên mảng một chiều (hoặc trên một
vùng của mảng) trùng với giá trị
truyền vào
Reverse
Đảo ngược thứ tự các phần tử trên
mảng một chiều hoặc trên một phần
của mảng
SetValue
Gán trị cho một phần tử chỉ ra trên mảng
Sort
Sắp xếp các phần tử trong mảng một
83
chiều
2.5.3 Structure
Khác với mảng, Structure, kiểu do người dùng định
nghĩa (UDT: User Defined Type), là một cấu trúc gồm một
hoặc nhiều thành phần có kiểu dữ liệu khác nhau. Tuy
chúng ta có thể truy xuất riêng lẻ các thành phần nhưng
Structure được xem như là một thực thể duy nhất. Trong
phiên bản trước, UDT được khai báo với từ khóa Type …
End Type. Trong VB.NET, cú pháp khai báo Structure như
sau:
[Public|Private|Protected] Structure <tên
structure>
{Dim|Public|Private|Friend}<tên thành
phần> As <kiểu dữ liệu>
...
{Dim|Public|Private|Friend}<tên thành
phần N> As <kiểu dữ liệu> End Structure
Với Structure, chúng ta được phép khai báo các phương
thức. Sau đây là các đặc điểm của Structure:
thuộc tính, hằng, sự kiện.
tham số.
Public.
ture không được khai báo
với từ khóa Protected.
84
Mỗi Structure có một bộ khởi tạo mặc nhiên không
tham số ban đầu. Bộ khởi tạo này sẽ khởi tạo mọi thành
phần dữ liệu của Structure với giá trị mặc định của chúng.
Chúng ta không thể định nghĩa lại chức năng này.
Vì Structure là kiểu trị (Value Type), nên mỗi
biến Structure luôn luôn gắn liền với một thể hiện
Structure.
2.6 Xử lý lỗi
2.6.1 Phân loại lỗi
Trong VB.NET, chúng ta có thể gặp các loại lỗi sau:
Syntax error
Lỗi cú pháp, còn gọi là lỗi trong lúc thiết kế. Những lỗi
này dễ chỉnh sửa vì VB.NET sẽ kiểm tra cú pháp khi ta
đang nhập từ bàn phím nên sẽ báo lỗi tức thời khi ta gõ sai
hoặc dùng một từ không thích hợp.
Run-time error
Lỗi thực thi xảy ra khi chương trình đang thực thi. Đây
là những lỗi khó xác định hơn lỗi cú pháp. Lỗi thực thi có
thể từ các lý do khác nhau như:
đó
g
CSDL
v.v…
85
Logic error
Lỗi luận lý cũng xảy ra khi chương trình đang thực thi
và được thể hiện dưới những hình thức hay những kết quả
không mong đợi. Loại lỗi này thường do sai lầm trong thuật
giải.
2.6.2 Xử lý lỗi
Một lỗi xảy ra khi chương trình đang chạy gọi là một
Exception. Trong CLR, Exception là một đối tượng từ lớp
System.Exception. Chúng ta cần lưu ý một lỗi xảy ra trong
lúc thực thi không làm treo chương trình, nhưng nếu không
được xử lý sẽ làm treo chương trình. CLR chỉ ra tình trạng
lỗi qua lệnh Throw. Lệnh này sẽ đưa ra một đối tượng kiểu
System.Exception chứa thông tin về lỗi đang xảy ra.
VB.NET cung cấp một cơ chế xử lý lỗi hoàn chỉnh với
cú pháp sau:
Try
' các lệnh có khả năng gây lỗi
Catch
' các lệnh xử lý khi lỗi xảy ra
[Finally]
' các lệnh thực hiện sau cùng
End Try
Cấu trúc này cho phép chúng ta thử (Try) thực hiện một
khối lệnh xem có gây lỗi không; nếu có sẽ bẫy và xử lý
(Catch) lỗi.
Cấu trúc này chia làm các khối sau:
Chứa các câu lệnh có khả năng gây lỗi
86
Các dòng lệnh để bẫy và xử lý lỗi phát sinh trên khối
Try. Khối này gồm một loạt các lệnh bắt đầu với từ khóa
Catch, biến kiểu Exception ứng với một kiểu Exception
muốn bẫy và các lệnh xử lý. Dĩ nhiên, chúng ta có thể dùng
một lệnh Catch cho các System.Exception, nhưng như thế
sẽ không cung cấp thông tin đầy đủ cho người dùng về lỗi
đang xảy ra cũng như hướng dẫn cách xử lý cụ thể cho mỗi
tình huống. Ngoài những lỗi đã xử lý, có thể xảy ra những
lỗi ngoài dự kiến, để xử lý các lỗi này, chúng ta nên đưa
thêm một lệnh Catch để bẫy tất cả các trường hợp còn lại
và xuất thông tin về lỗi xảy ra.
Khối tùy chọn, sau khi chạy qua các khối Try và Catch
nếu không có chỉ định nào khác, khối Finally sẽ được thực
hiện bất kể có xảy ra lỗi hay không.
Cuối cùng, cấu trúc bẫy và xử lý lỗi chấm dứt với từ
khóa End Try. Cú pháp chung cho một cấu trúc xử lý lỗi
như sau
Try
' khối lệnh có thể gây lỗi
Catch <biến1> As <Kiểu Exception> [When
<biểu thức>]
' khối lệnh bẫy và xử lý lỗi
Catch <biến2> As <Kiểu Exception> [When
<biểu thức>]
' khối lệnh bẫy và xử lý lỗi
Finally
' khối lệnh kết thúc
End Try
87
Ví dụ:
Dim d as Double, i as Integer
Try
i = CInt(InputBox("Xin nhập một số
nguyên"))
d = 42 \ i
Catch ex As DivideByZeroException
Messagebox.Show("Không thể chia cho
số không")
Catch ex As InvalidCastException
Messagebox.Show("Xin nhập số nguyên
!")
End Try
Câu lệnh Catch có thể có nhiều cách sử dụng:
a. Bẫy không có điều kiện
Dim d as Double, i as Integer
Try
i = CInt(InputBox(“Xin nhập một số
nguyên”))
d = 42 \ i
Catch
Messagebox.Show(“Không thể chia")
End Try
b. Bẫy với kiểu lỗi chung Exception
Dim d As Double, i As Integer
Try
i = InputBox("Xin nhập một số
d = 42 \ i
Catch ex As Exception
MessageBox.Show("Không thể
nguyên")
chia")
88
End Try
c. Bẫy với những kiểu Exception đặc biệt
Các kiểu Exception đặc biệt thường gặp:
Tên
ArgumentException
Mô tả
Tham số truyền không hợp lệ
DivideByZeroException
Chương trình thực hiện phép
chia một số cho số không
OverFlowException
Kết quả của một phép toán
hoặc của một phép chuyển đổi
kiểu lớn hơn khả năng lưu giữ
của biến
FieldAccessException
Chương trình truy xuất một
field Private hoặc Protected
của lớp
InvalidCastException
Chương trình đang cố thực
hiện một chuyển đổi không
hợp lệ
InvalidOperationException Chương trình đang cố gọi một
thủ tục không hợp lệ
MemberAccessException
Truy xuất một thành phần của
một lớp bị thất bại
MethodAccessException
Chương trình đang cố gọi thủ
tục Private hoặc Protected của
lớp
NullReferenceException
Chương trình đang cố truy
xuất một đối tượng không tồn
tại
89
Tên
TypeUnloadException
Mô tả
Chương trình truy xuất một
lớp chưa được tải lên vùng nhớ
d. Bẫy với điều kiện When
Dim d As Double, i As Integer
Try
i = InputBox("Xin nhập một số nguyên")
d = 42 \ i
Catch ex As Exception When i = 0
MessageBox.Show("Không thể chia cho số
không")
End Try
2.7 Một số chỉ thị của VB.NET
2.7.1 Chỉ thị Option Explicit ON|OFF
Khi Option Eplicit là ON, VB.NET không cho phép sử
dụng các biến mà không khai báo trước.
2.7.2 Chỉ thị #Region … #End Region
Chỉ thị #Region … #End Region được dùng để đánh
dấu một khối lệnh có thể thu gọn, giãn ra trên cửa sổ viết
lệnh.
Cú pháp:
#Region <chuỗi định danh>
' khối lệnh
#End Region
Trong đó <chuỗi định danh>: bắt buộc, có giá trị kiểu
String, là tiêu đề của khối lệnh
Ví dụ với đoạn mã sau:
#Region "Các khai báo"
90
' Đưa vào các dòng lệnh khai báo.
#End Region
Khi thu lại ta sẽ thấy trên cửa sổ lệnh:
+ Các khai báo
2.8 Thủ tục (Procedure)
2.8.1 Khái niệm
Thủ tục (procedure) là một khối lệnh Visual Basic
được đặt trong cặp từ khóa khai báo (Function, Sub,
Operator, Get, Set) và từ khóa kết thúc tương ứng với
nó(End).
Thủ tục được thi hành tại bất kỳ một vị trí nào trong
chương trình. Lệnh thi hành một thủ tục được xem như lời
gọi thủ tục. Khi thực hiện xong các lệnh trong một thủ tục
ứng dụng sẽ quay lại thực hiện câu lệnh tiếp theo câu lệnh
đã gọi thủ tục. Thủ tục có thể được gọi trong một câu lệnh
hoặc được gọi trong một biểu thức.
Trong VB.NET thủ tục được chia thành 5 loại: Sub
Procedure, Function Procedure,
Property Procedure,
Operator Procedure,Generic Procedure.
2.8.2 Tham số của thủ tục
Định nghĩa
- Các thông số đầu vào của một thủ tục được gọi là
tham số của thủ tục.
- Tham số (parameter) là các tên (định danh) được các
thủ tục dùng để nhận thông tin đầu vào để thực hiện các xử
lý. Khi một thủ tục được gọi thì nó sẽ đòi hỏi các đối số cụ
thể tương ứng với các tham số và thông thường các đối số
này phải được gán giá trị cụ thể trước khi thủ tục thực thi.
91
Phân loại tham số
Có hai loại tham số.
- Tham biến: thay đổi (về mặt giá trị sau lời gọi hàm).
Tham số loại này trong VB.NET được khai báo với từ khóa
ByRef.
- Tham trị: Không đổi (về mặt giá trị sau lời gọi hàm).
Tham số loại này trong VB.NET được khai báo với từ khóa
ByVal.
2.8.3. Sub Procedure
Sub là một dãy các câu lệnh để thực thi một công việc,
một chức năng đặc thù nào đó, sub được xem như là một
thành phần của chương trình. Nói một cách khác, sub là các
câu lệnh được nhóm vào một khối và được đặt tên.
Các sub có thể được gọi để thi hành (thường là thông
qua subname). Điều này cho phép gọi tới những thủ tục
nhiều lần mà không cần phải lặp lại các khối lệnh giống
nhau một khi đã hoàn tất việc viết mã lệnh cho các thủ tục
đó chỉ một lần.
- Từ khóa để tham khảo khái niệm thủ tục trong
MSDN là “Sub Procedures, Sub Statement”.
Khai báo sub
Cấu trúc tổng quát của việc định nghĩa một thủ tục
được đưa ra như sau:
[<attributelist>] [accessmodifier]
[proceduremodifiers] [Shared] [Shadows]
Sub name [(Of typeparamlist)]
[(parameterlist)]
[Implements implementslist | Handles
eventlist]
92
các lệnh
[ Exit Sub ]
các lệnh
End Sub
Cú pháp thông dụng nhất để khai báo một thủ tục dạng
sub là:
[Public|Protected|Private] Sub <Tên thủ tục>
[(DS tham số)]
<Khai báo biến>
Câu lệnh 1
Câu lệnh 2
...
End Sub
Trong đó
- Public, Protected, Private là các từ khóa xác định
phạm vi của thủ tục
- Tên thủ tục đặt theo qui tắc giống tên biến. Trong
VB.NET các thủ tục có thể trùng tên nhau song số tham số
hoặc kiểu dữ liệu của các tham số phải khác nhau.
- Danh sách tham số: phải xác định rõ là tham biến hay
tham trị.
Ví dụ: Thủ tục nhập tên, điểm toán và điểm văn của
một sinh viên:
Public Sub Nhap(ByRef HoTen As String,ByRef
Toan As _
Integer,ByRef Van As Integer)
Console.Write("Nhap ho ten:")
HoTen = Console.ReadLine()
Console.Write("Nhap toan:")
Toan = Console.ReadLine()
93
Console.Write("Nhap van:")
Van = Console.ReadLine()
End Sub
Trong thủ tục này, giá trị của các tham số HoTen,
Toan, Van sau khi kết thúc thủ tục đã được thay bằng các
giá trị mới nhập từ bàn phím do đó chúng phải là tham biến
và được khai báo với từ khóa ByRef.
Ví dụ: Thủ tục xuất ra màn hình Console tên và điểm
toán, điểm văn, điểm trung bình của sinh viên:
Public Sub Xuat(ByVal HoTen As String, ByVal
Toan As _
Integer,ByVal Van As Integer, ByVal
DiemTrungBinh As Double)
Console.WriteLine("Ho ten :" & HoTen)
Console.WriteLine("Toan :" & Toan)
Console.WriteLine("Van:" & Van)
Console.WriteLine("Diem Trung Binh:" &
DiemTrungBinh)
End Sub
Trong thủ tục Xuat; các tham số HoTen, Toan, Van,
DiemTrungBinh không thay đổi giá trị do đó có thể khai
báo chúng là tham trị bằng cách sử dụng từ khóa ByVal.
Lời gọi thủ tục:
- Thủ tục sử dụng như một lệnh bằng cách viết tên của
thủ tục cùng với danh sách tham số.
- Có thể sử dụng câu lệnh Call để gọi thủ tục.
- Thông thường, thủ tục sẽ kết thúc và trở về đơn thể
gọi nó khi gặp từ khóa End Sub. Tuy nhiên có thể thoát
trực tiếp khỏi thủ tục tại bất kỳ một vị trí nào trong thân nó
bằng câu lệnh Exit Sub hoặc Return.
94
Ví dụ 2-8: Chương trình nhập họ tên, điểm toán, điểm
văn của một sinh viên và xuất ra màn hình các thông tin về
họ tên, điểm toán, điểm văn và điểm trung bình của sinh
viên đó.
Chương trình được xây dựng gồm 1 đơn thể - Module
chứa 3 thủ tục là Nhap (nhập dữ liệu), Xuat (hiển thị dữ
liệu), XuLy(tính điểm trung bình). Thủ tục Main() chứa các
lệnh cần thiết để khai báo biến, gọi và truyền tham số cho
các thủ tục.
Imports System
Public Module Module1
Public Sub Nhap(ByRef HoTen As String,ByRef
Toan As _
Integer,ByRef Van As Integer)
Console.Write("Nhap ho ten:")
HoTen = Console.ReadLine()
Console.Write("Nhap toan:")
Toan = Console.ReadLine()
Console.Write("Nhap van:")
Van = Console.ReadLine()
End Sub
Public Sub XuLy(ByVal Toan As Integer, ByVal
Van As _
Integer,ByRef DiemTrungBinh As Double)
DiemTrungBinh = (Toan + Van) / 2
End Sub
Public Sub Xuat(ByVal HoTen As String, ByVal
Toan As _
95
Integer,ByVal Van As Integer, ByVal
DiemTrungBinh As Double)
Console.WriteLine("Ho ten :" & HoTen)
Console.WriteLine("Toan :" & Toan)
Console.WriteLine("Van:" & Van)
Console.WriteLine("Diem Trung Binh:" &
DiemTrungBinh)
End Sub
Sub Main()
Dim ht As String = ""
Dim t,v As Integer
Dim tb As Double
Nhap(ht, t, v)
XuLy(t, v, tb)
Xuat(ht, t, v, tb)
End Sub
End Module
2.8.4 Function Procedure (Hàm)
Một hàm là dãy các lệnh để thực thi một thao tác đặc
thù nào đó như là một phần của chương trình lớn hơn. Nói
một cách khác hàm là các câu lệnh được nhóm vào một
khối, được đặt tên và có một giá trị trả về.
Các hàm có thể được gọi để thi hành (thường là thông
qua tên của hàm). Điều này cho phép gọi tới hàm nhiều lần
mà không cần phải lặp lại các khối mã giống nhau một khi
đã hoàn tất việc viết mã cho các hàm đó chỉ một lần.
Trong VB.NET quan niệm hàm là một thủ tục có giá trị
trả về.
96
Từ khóa để tham khảo về hàm trong MSDN là
"Function Statement”.
Cú pháp khai báo hàm
Hàm được định nghĩa và khai báo tương tự như thủ tục.
[<attributelist>][accessmodifier][procedurem
odifiers]
[Shared][Shadows]
Function name [(Of typeparamlist)]
[(parameterlist)]
[As returntype]
[Implements implementslist | Handles
eventlist]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Thông dụng nhất của việc khai báo hàm là như sau:
[Public, Protected, Private] Function <Tên
Hàm>
[(Danh sách các tham số)] As Kiểu dữ liệu
trả về
<Khai báo các biến>
Các câu lệnh
[Exit Function]
Các câu lệnh
...
End Function
Trong đó
- Public, Protected, Private là các từ khóa xác định
phạm vi của hàm.
97
- Tên hàm đặt theo qui tắc giống tên sub; có thể trùng
tên nhau miễn là khác về kiểu dữ liệu, số tham số.
- Danh sách tham số: phải xác định rõ là tham biến hay
tham trị.
- Kiểu dữ liệu trả về: Là kiểu dữ liệu của biểu thức mà
hàm trả về.
- Lệnh Exit Function dùng để thoát ngang một
hàm.
- Nếu muốn hàm trả về một giá trị ta dùng lệnh
return biểu thức.
Ví dụ: Thủ tục XuLy để tính điểm trung bình trong ví
dụ 3-3 có thể xây dựng bằng hàm như sau:
Public Function XuLy(ByVal Toan As Integer,
ByVal Van _
As Integer) As Double
return (Toan+Van)/2
End Function
Hàm trả về giá trị (Toan+Van)/2 bằng câu lệnh return.
Trong trường hợp này Sub Main() được viết như sau:
Sub Main()
Dim ht As String = ""
Dim t,v As Integer
Dim tb As Double
Nhap(ht, t, v)
tb=XuLy(t, v)
Xuat(ht, t, v, tb)
End Sub
98
Lời gọi hàm
- Hàm được sử dụng trong biểu thức bằng cách viết tên
hàm kèm theo danh sách các tham số . Ví dụ ta có thể viết
tb=XuLy(Toan,Van)
- Trong trường hợp không cần quan tâm đến giá trị của
hàm, ta có thể gọi hàm như cách gọi của thủ tục.
NỘI DUNG PHẦN THẢO LUẬN
1. Phương pháp lập trình hướng thủ tục và cách xây
dựng.
2. Tham số, tham biến, giá trị trả về của sub, function
3. Cấu trúc và các giải thuật trên cấu trúc
TÓM TẮT NỘI DUNG CỐT LÕI
Trong chương này sinh viên cần chú ý đến các nội
dung sau:
• Khai báo và sử dụng các biến
• Cách viết các hằng giá trị trong VB.NET
• Toán tử
• Lệnh rẽ nhánh, Vòng lặp
• Mảng, Cấu trúc
• Sub, Function
BÀI TẬP ỨNG DỤNG
Dùng ngôn ngữ lập trình VB.NET để tạo các ứng dụng
Console giải các bài tập dưới đây:
99
2.1. Xây dựng, biên dịch và chạy thử các chương trình
tương ứng với ví dụ 2-1, 2-2, 2-3, 2-4, 2-5, 2-6.
2.2. Viết chương trình nhập vào một phân số. Hãy cho
biết phân số đó là phân số âm hay dương hay bằng không.
2.3. Viết chương trình nhập tọa độ hai điểm trong
không gian. Tính khoảng cách giữa chúng và xuất kết quả.
2.4. Viết chương trình giải phương trình bậc nhất
ax+b=0
2.5. Viết chương trình giải phương trình bậc hai
ax2+bx+c=0
2.6. Viết chương trình nhập vào một số nguyên và kiểm
tra xem đó có phải là số chính phương hay không.
2.7. Viết chương trình nhập vào một số kiểu Long và
kiểm tra xem số đó là số nguyên tố hay hợp số.
2.8. Xây dựng hàm Public Function SoNT
(ByVal n as Long) as Boolean. Hàm trả về True
nếu n là số nguyên tố và trả về giá trị False nếu n là hợp số.
HƯỚNG DẪN TỰ HỌC Ở NHÀ
1. Bài tập 2.1:
* Chạy ví dụ 2-1 (chương trình nhập tên, điểm toán,
điểm văn và in ra tên, điểm trung bình).
- Dùng Notepad biên soạn file có tên C:\vd1.vb với nội
dung là chương trình trong ví dụ 2-1.
- Khởi động Visual Studio 2005 Command prompt
- Biên dịch chương trình vd1.vb thành file exe bằng
lệnh vbc C:\vd1.vb và chạy chương trình từ file exe này.
* Sử dụng lệnh Console.Write() thay cho MsgBox và
Console.Readline() thay cho InputBox để viết lại các
100
chương trình tương ứng với các ví dụ 2-2, 2-3, 2-4, 2-5, 26. Sau đó dùng Visual Studio 2005 Command prompt để
biên dịch và chạy thử các chương trình này.
2. Bài tập 2.2: Sử dụng hai biến a và b cho tử số và mẫu
số. Nhập dữ liệu lần lượt cho từng biến sau đó kiểm tra các
trường hợp. Chú ý kiểm tra mẫu số phải khác 0 trước khi
thực hiện phép chia.
3. Bài tập 2.5: Sử dụng hàm SQRT(d) để lấy căn bậc 2
của d (delta). Chú ý bổ sung lệnh Imports
System.Math vào đầu chương trình sau lệnh Imports
System để có thể sử dụng được các hàm toán học này.
4. Bài tập 2.6: Sử dụng hàm ROUND (làm tròn) và
SQRT (tính căn bậc 2). Hai hàm này nằm trong Namespace
System.Math.
101
Download