CHƯƠNG 1: NGÔN NGỮ CƠ BẢN C#
I. MÔI TRƯƠNG LẬP TRÌNH
1. Sử dụng notepad soạn thảo
Bước 1: soạn thảo tập tin và lưu tập tin C:\thanhhuy.cs có nội dung như sau:
class thanhhuy
{
static void main ()
{
//xuất hiện ra màn hình chuỗi thông báo 'chào mừng bạn đến với thanhhuy auto'
System.Console.WriteLine ("chào mừng bạn đến với thanhhuy auto");
System.Console.ReadLine();
}
}
Bước 2: Vào menu Start/All Programe/Visul studio 2013/ Visul studio Tools/ Visual studio 2013 Command Prompt
Bước 3: Gõ lệnh biên dịch tập tin thanhhuy.cs thành tập tin thanhhhuy.exe
C:\> csc /t:exe /out:thanhhhuy.exe thanhhuy.cs
Chạy tập tin ChaoMung.exe và được kết quả như sau :
C:\> thanhhuy.exe
Chào mừng bạn đến với thanhhuy auto
2. Sử dụng Micosoft Visual Studio 2013 để tạo chương trình
Bước 1: Khởi động Visual Studio 2013
Start | All Programs | Microsoft Visual Studio 2013 | Microsoft Visual Studio 2013
Bước 2: Vào menu File | New | Project
Bước 3: Khai báo
Mặc định: Visual Studio 2013 (Visual Studio .NET) sẽ tạo ra tập tin Program.cs
chứa một namespace tên ChaoMung và trong namespace này chứa mộtclass tên Program.
Bước 4: trong phương thức Main, gõ đoạn mã lệnh sau:
//xuất hiện ra màn hình chuỗi thông báo 'chào mừng bạn đến với thanhhuy auto'System.Console.WriteLine ("chao mừng bạn đến với thanhhuy auto");
System.Console.ReadLine();
Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút Play
II. BIẾN, HẰNG, TOÁN TỬ
1.Biến
1.1. Định nghĩa
Biến là một vùng lưu trử ứng với một kiểu dữ liệu. Biến có thể được gán giá trị và cũng có thể thay đổi giá trị trong khi thực hiện các lện của chưowng trình.
1.2. Khai báo biến
Sau khi khai báo biến phải gán giá trị cho biến<Kiểu_Dữ_Liệu> <tên_biến> [ = <giá_trị> ] ;
class Bien
{
static void Main()
{
// Khai báo và khởi tạo biến (biên)
int bien = 9 ;
System.Console.WriteLine("Sau khi khoi tao: bien = {0}", bien) ;
// Gan gia tri cho bien
bien = 5 ;
// Xuat ra man hinh
System.Console.WriteLine("Sau khi gan: bien = {0}", bien) ;
}
}
2. Hằng.
2.1. Định nghĩa hằng
Hằng cũng là một biến nhưng giá trị của hằng không thay đổi trong khi thực hiện các
lệnh của chương trình.
- Hằng được phân làm 3 loại:
+ Giá trị hằng (literal)
+ Biểu tượng hằng (symbolic constants)
+ Kiểu liệt kê (enumerations)
2.2. Gía trị hằng
x =1706; //1706 là giá trị hằng;
2.3. Biểu tượng hằng.
gán một tên hằng cho một giá trị hằng.
Khai báo: <const> <Kiểu_Dữ_Liệu> <tên_hằng> = <giá_trị> ;
Ví dụ 2.1: Nhập vào bán kính, in ra chu vi và diện tích hình tròn
class HinhTron
{
static void Main()
{
// Khai bao bieu tuong hang
const double PI = 3.14159 ;
// Khai bao bien
int bankinh ;
double chuvi , dientich ;
string chuoi ;
// Nhap gia tri cho bien chuoi
System.Console.Write("Nhap ban kinh hinh tron: ") ;
chuoi = System.Console.ReadLine() ;
// Doi chuoi thanh so va gan vao bien so
bankinh = System.Convert.ToInt32(chuoi) ;
// Gan gia tri cho bien
chuvi = 2 * bankinh * PI ;
dientich = bankinh * bankinh * PI ;
// Xuat ra man hinh
System.Console.WriteLine("Chu vi hinh tron = {0:0.00}", chuvi) ;
System.Console.WriteLine("Dien tich hinh tron = {0:0.00}", dientich) ;
}
}
d) Kiểu liệt kê: là tập hợp các tên hằng có giá trị số không thay đổi (danh sách liệt kê)
Khai báo: <enum> <Tên_Kiểu_Liệt_Kê>
{<tên_hằng_1> = <giá_trị_số_1>,
<tên_hằng_2> = <giá_trị_số_2>,
... ,} ;
Ví dụ:
enum NhietDoNuoc
{
DoDong = 0, DoNguoi = 20,
DoAm = 40, DoNong = 60,
DoSoi = 100,
} ;
3. Toán tử
3.1 Toán tử toán học: + , - , * , / , %
3.2 Toán tử tăng / giảm: += , -= , *= , /= , %=
3.3 Toán tử tăng / giảm 1 đơn vị: ++ , --
3.4 Toán tử gán: =
3.5 Toán tử quan hệ: == , != , > , >= , < , <=
3.6 Toán tử logic: ! , && , ||
3.7 Toán tử 3 ngôi: (Điều_Kiện) ? (Biểu_Thức_1) : (Biểu_Thức_2) ;
4. Quy tắc lập trình và ứng dụng console application
4.1. Quy tắc lập trình
Khi tạo một chương trình trong C#, chúng ta nên thực hiện theo các bước sau:
Bước 1: Xác định mục tiêu của chương trình
Bước 2: Xác định những phương pháp giải quyết vấn đề
Bước 3: Tạo một chương trình để giải quyết vấn đề
Bước 4: Thực thi chương trình để xem kết quả
4.2. Ứng dụng Console Application.
Là ứng dụng giao tiếp với người dùng thông qua bàn phím và không có giao diện người
dùng (UI).
using System;
class ChaoMung
{
static void Main()
{
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi thanhhuy auto'
Console.WriteLine("Chao mung ban den voi thanhhuy auto") ;
Console.ReadLine() ;
}
}
* Phần Bổ sung
1. Namespace:
.NET cung cấp một thư viện các class rất đồ sộ, trong đó Console là một class nhỏ trong
thư viện các class này.
Mỗi class có một tên riêng, vì vậy người lập trình không thể nào nhớ hết tên các class
trong .NET. Để giải quyết vấn đề này là việc tạo ra một namespace, namespace sẽ hạn chế
phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa.
2. Từ khóa using:
Để không phải viết namespace cho từng đối tượng, ta dùng từ khóa using.
- Ta có thể dùng dòng lệnh sau ở đầu chương trình:
using System ;
Khi đó, thay vì viết đầy đủ System.Console. ta chỉ cần viết Console.
3. Từ khóa static:
Từ khóa static chỉ ra rằng hàm Main() có thể được gọi mà không cần phải tạo đối tượng
ChaoMung.
4. Từ khóa this:
Từ khóa this dùng để tham chiếu đến thể hiện hiện hành của đối tượng.
5. Chú thích (Comment):
Một chương trình được viết tốt thì cần phải có chú thích các đoạn mã lệnh được viết.
- Mục đích chính là làm cho đoạn mã lệnh nguồn rõ ràng và dễ hiểu.
- Có 2 loại chú thích:
+ Chú thích một dòng: //
+ Chú thích nhiều dòng: /* */
6. Phân biệt chữ thường và chữ hoa
C# là ngôn ngữ phân biệt chữ thường với chữ hoa.
7. Toán tử '. 'Toán tử '. ' được sử dụng để truy cập đến phương thức hay dữ liệu trong một class và
ngăn cách giữa tên class đến một namespace.
Ví dụ: System.Console.WriteLine()
8. Câu lệnh (statement)
Một chỉ dẫn lập trình đầy đủ được gọi là một câu lệnh.
Ví dụ:
int bankinh = 5 ; // một câu lệnh
chuvi = 2 * bankinh * PI ; // một câu lệnh khác
9. Kiểu chuỗi ký tự Kiểu chuỗi ký tự là một mảng các ký tự.
a) Khai báo chuỗi hằng: string <Tên_chuỗi_hằng> = <"Noi dung chuoi hang"> ;
Ví dụ: string tentuong = "ThanhHuy" ;
b) Khai báo biến kiểu chuỗi: string <Biến_chuỗi> [= "Noi dung chuoi hang"] ;
Ví dụ: string hoten = "Nguyen Van Teo" ;
c) Nhập chuỗi: <Biến_chuỗi> = System.Console.ReadLine() ;
Ví dụ: hoten = System.Console.ReadLine() ;
d) Xuất chuỗi: System.Console.WriteLine("Chuoi") ;
Ví dụ: System.Console.WriteLine("Do dai cua chuoi la:") ;
e) Một số thao tác trên chuỗi:
Ví dụ : Nhập vào họ và tên, in ra màn hình họ tên bằng chữ IN HOA, chữ thường, độ
dài của họ và tên
1.Biến
1.1. Định nghĩa
Biến là một vùng lưu trử ứng với một kiểu dữ liệu. Biến có thể được gán giá trị và cũng có thể thay đổi giá trị trong khi thực hiện các lện của chưowng trình.
1.2. Khai báo biến
Sau khi khai báo biến phải gán giá trị cho biến<Kiểu_Dữ_Liệu> <tên_biến> [ = <giá_trị> ] ;
class Bien
{
static void Main()
{
// Khai báo và khởi tạo biến (biên)
int bien = 9 ;
System.Console.WriteLine("Sau khi khoi tao: bien = {0}", bien) ;
// Gan gia tri cho bien
bien = 5 ;
// Xuat ra man hinh
System.Console.WriteLine("Sau khi gan: bien = {0}", bien) ;
}
}
2. Hằng.
2.1. Định nghĩa hằng
Hằng cũng là một biến nhưng giá trị của hằng không thay đổi trong khi thực hiện các
lệnh của chương trình.
- Hằng được phân làm 3 loại:
+ Giá trị hằng (literal)
+ Biểu tượng hằng (symbolic constants)
+ Kiểu liệt kê (enumerations)
2.2. Gía trị hằng
x =1706; //1706 là giá trị hằng;
2.3. Biểu tượng hằng.
gán một tên hằng cho một giá trị hằng.
Khai báo: <const> <Kiểu_Dữ_Liệu> <tên_hằng> = <giá_trị> ;
Ví dụ 2.1: Nhập vào bán kính, in ra chu vi và diện tích hình tròn
class HinhTron
{
static void Main()
{
// Khai bao bieu tuong hang
const double PI = 3.14159 ;
// Khai bao bien
int bankinh ;
double chuvi , dientich ;
string chuoi ;
// Nhap gia tri cho bien chuoi
System.Console.Write("Nhap ban kinh hinh tron: ") ;
chuoi = System.Console.ReadLine() ;
// Doi chuoi thanh so va gan vao bien so
bankinh = System.Convert.ToInt32(chuoi) ;
// Gan gia tri cho bien
chuvi = 2 * bankinh * PI ;
dientich = bankinh * bankinh * PI ;
// Xuat ra man hinh
System.Console.WriteLine("Chu vi hinh tron = {0:0.00}", chuvi) ;
System.Console.WriteLine("Dien tich hinh tron = {0:0.00}", dientich) ;
}
}
d) Kiểu liệt kê: là tập hợp các tên hằng có giá trị số không thay đổi (danh sách liệt kê)
Khai báo: <enum> <Tên_Kiểu_Liệt_Kê>
{<tên_hằng_1> = <giá_trị_số_1>,
<tên_hằng_2> = <giá_trị_số_2>,
... ,} ;
Ví dụ:
enum NhietDoNuoc
{
DoDong = 0, DoNguoi = 20,
DoAm = 40, DoNong = 60,
DoSoi = 100,
} ;
3. Toán tử
3.1 Toán tử toán học: + , - , * , / , %
3.2 Toán tử tăng / giảm: += , -= , *= , /= , %=
3.3 Toán tử tăng / giảm 1 đơn vị: ++ , --
3.4 Toán tử gán: =
3.5 Toán tử quan hệ: == , != , > , >= , < , <=
3.6 Toán tử logic: ! , && , ||
3.7 Toán tử 3 ngôi: (Điều_Kiện) ? (Biểu_Thức_1) : (Biểu_Thức_2) ;
4. Quy tắc lập trình và ứng dụng console application
4.1. Quy tắc lập trình
Khi tạo một chương trình trong C#, chúng ta nên thực hiện theo các bước sau:
Bước 1: Xác định mục tiêu của chương trình
Bước 2: Xác định những phương pháp giải quyết vấn đề
Bước 3: Tạo một chương trình để giải quyết vấn đề
Bước 4: Thực thi chương trình để xem kết quả
4.2. Ứng dụng Console Application.
Là ứng dụng giao tiếp với người dùng thông qua bàn phím và không có giao diện người
dùng (UI).
using System;
class ChaoMung
{
static void Main()
{
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi thanhhuy auto'
Console.WriteLine("Chao mung ban den voi thanhhuy auto") ;
Console.ReadLine() ;
}
}
* Phần Bổ sung
1. Namespace:
.NET cung cấp một thư viện các class rất đồ sộ, trong đó Console là một class nhỏ trong
thư viện các class này.
Mỗi class có một tên riêng, vì vậy người lập trình không thể nào nhớ hết tên các class
trong .NET. Để giải quyết vấn đề này là việc tạo ra một namespace, namespace sẽ hạn chế
phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa.
2. Từ khóa using:
Để không phải viết namespace cho từng đối tượng, ta dùng từ khóa using.
- Ta có thể dùng dòng lệnh sau ở đầu chương trình:
using System ;
Khi đó, thay vì viết đầy đủ System.Console. ta chỉ cần viết Console.
3. Từ khóa static:
Từ khóa static chỉ ra rằng hàm Main() có thể được gọi mà không cần phải tạo đối tượng
ChaoMung.
4. Từ khóa this:
Từ khóa this dùng để tham chiếu đến thể hiện hiện hành của đối tượng.
5. Chú thích (Comment):
Một chương trình được viết tốt thì cần phải có chú thích các đoạn mã lệnh được viết.
- Mục đích chính là làm cho đoạn mã lệnh nguồn rõ ràng và dễ hiểu.
- Có 2 loại chú thích:
+ Chú thích một dòng: //
+ Chú thích nhiều dòng: /* */
6. Phân biệt chữ thường và chữ hoa
C# là ngôn ngữ phân biệt chữ thường với chữ hoa.
7. Toán tử '. 'Toán tử '. ' được sử dụng để truy cập đến phương thức hay dữ liệu trong một class và
ngăn cách giữa tên class đến một namespace.
Ví dụ: System.Console.WriteLine()
8. Câu lệnh (statement)
Một chỉ dẫn lập trình đầy đủ được gọi là một câu lệnh.
Ví dụ:
int bankinh = 5 ; // một câu lệnh
chuvi = 2 * bankinh * PI ; // một câu lệnh khác
9. Kiểu chuỗi ký tự Kiểu chuỗi ký tự là một mảng các ký tự.
a) Khai báo chuỗi hằng: string <Tên_chuỗi_hằng> = <"Noi dung chuoi hang"> ;
Ví dụ: string tentuong = "ThanhHuy" ;
b) Khai báo biến kiểu chuỗi: string <Biến_chuỗi> [= "Noi dung chuoi hang"] ;
Ví dụ: string hoten = "Nguyen Van Teo" ;
c) Nhập chuỗi: <Biến_chuỗi> = System.Console.ReadLine() ;
Ví dụ: hoten = System.Console.ReadLine() ;
d) Xuất chuỗi: System.Console.WriteLine("Chuoi") ;
Ví dụ: System.Console.WriteLine("Do dai cua chuoi la:") ;
e) Một số thao tác trên chuỗi:
Phương thức
|
Ý nghĩa
|
Length
|
Chiều dài của chuỗi
|
Substring()
|
Lấy chuỗi con
|
ToLower()
|
Trả về bản sao của chuỗi ở kiểu chữ thường
|
ToUpper()
|
Trả về bản sao của chuỗi ở kiểu chữ IN HOA
|
dài của họ và tên
using System ; class HoTen { static void Main() // Nhap gia tri cho bien chuoi Console.Write("Nhap Ho va Ten: ") ; hoten = Console.ReadLine() ; // Thao tac tren chuoi string HT = hoten.ToUpper() ; string ht = hoten.ToLower() ; int dodai = hoten.Length ; // Xuat ra man hinh Console.WriteLine("Ho va Ten (chu IN HOA): {0}", HT) ; Console.WriteLine("Ho va Ten (chu thuong): {0}", ht) ; |
string hoten ; Console.WriteLine("Do dai Ho va Ten la: {0}",dodai) ;
}
}
10. Bảng liệt kê các từ khóa của ngôn ngữ C# 2013
abstract as base bool break byte case catch Char checked Class Const continue decimal default delegate do double else enum from into orderby select | event explicit extern false finally fixed float for foreach goto if implicit in interface internal is lock long namespace | new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string get join partial (type) set | struct switch this throw true try typeof unit ulong unchecked unsafe ushort using virtual volatile void while |
group let partial (method) value | |||
where (generic type constraint) | where (query clause) | yield |
III. KIỂU DỮ LIỆU
C# chia kiểu dữ liệu thành hai tập hợp kiểu dữ liệu chính:
Kiểu xây dựng sẵn (built-in): do ngôn ngữ cung cấp cho người lập trình.
Kiểu do người dùng định nghĩa (user-defined): do người lập trình tạo ra
1. Kiểu dữ liệu dựng sẵn
Kiểu C# | Số byte | Kiểu .NET | Mô tả |
byte | 1 | Byte | Số nguyên dương không dấu từ 0 đến 255 |
char | 2 | Char | Ký tự Unicode |
bool | 1 | Boolean | Giá trị logic true / false |
sbyte | 1 | Sbyte | Số nguyên có dấu từ -128 đến 127 |
short | 2 | Int16 | Số nguyên có dấu từ -32768 đến 32767 |
ushort | 2 | Uint16 | Số nguyên dương không dấu từ 0 đến 65535 |
int | 4 | Int32 | Số nguyên có dấu từ -2.147.483.647 đến 2.147.483.647 |
uint | 4 | Uint32 | Số nguyên không dấu từ 0 đến 4.294.967.295 |
float | 4 | Single | Kiểu dấu chấm động, giá trị xấp xỉ từ -3.4E-38 đến 3.4E+38, với 7 chữ số có nghĩa |
double | 8 | Double | Kiểu dấu chấm động có độ chính xác gấp đôi, giá trị xấp xỉ từ -1.7E-308 đến 1.7E+308, với 15, 16 chữ số có nghĩa |
decimal | 8 | Decimal | Có độ chính xác đến 28 con số và giá trị thập phân, được dùng trong tính toán tài chính, kiểu này đòi hỏi phải có hậu tố “m” hay “M” |
long | 8 | Int64 | Kiểu số nguyên có dấu có giá trị trong khoảng -9.223.370.036.854.775.808 đến 9.223.372.036.854.775.807 |
ulong | 8 | Uint64 | Số nguyên không dấu từ 0 đến 0xfffffffffffffff |
Ký tự | Ý nghĩa |
\' | Dấu nháy đơn |
\" | Dấu nháy kép |
\\ | Dấu chéo |
\0 | Ký tự null |
\a | Alert |
\b | Backspace |
\f | Sang trang form feed |
\n | Dòng mới |
\r | Đầu dòng |
\t | Tab ngang |
\v | Tab dọc |
Ví dụ a:
short x = 10 ;
int y = x ; // chuyển đổi ngầm định
Ví dụ b:
short x ;
int y = 100 ;
x = (short) y ; // ép kiểu tường minh, trình biên dịch không báo lỗi
Ví dụ c:
short x ;
int y = 100 ;
x = y ; // không biên dịch, lỗi
1. Câu lệnh if … else
a) Cú pháp: if (Điều_Kiện)
<Khối lệnh Điều_Kiện đúng>
[else<Khối lệnh Điều_Kiện sai>]
b) Ví dụ 2.1: Dùng câu lệnh điều kiện if … else
{
static void Main()
{
// Khai bao va khoi tao bien
int bienDem = 9 ;
// Xuat ra man hinh
if (bienDem % 2 == 0)
Console.WriteLine("{0} la so chan", bienDem) ;
else Console.WriteLine("{0} la so le", bienDem) ;
}
}
2. Câu lệnh if lồng nhau
a. Cú pháp: if (Điều_Kiện_1)
<Khối lệnh 1>else if (Điều_Kiện_2)
<Khối lệnh 2.1>else<Khối lệnh 2.2>
b. Ví dụ 2.2:
using System;
class Thu_Trong_Tuan
a. Cú pháp: switch (Biểu_Thức){case <giá_trị_1>:
< Khối lệnh 1>
<Lệnh Nhảy>
case <giá_trị_2>:
< Khối lệnh 2>
<Lệnh Nhảy>
….
[default:
< Khối lệnh khác>]}
b. Ví dụ 2.3:
{
static void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
switch (thu)
{
case 0:
Console.WriteLine("Chu nhat") ;
break;
case 1:
Console.WriteLine("Thu hai") ;
break;
case 2:
Console.WriteLine("Thu ba") ;
break;
case 3:
Console.WriteLine("Thu tu") ;
break;
case 4:
Console.WriteLine("Thu nam") ;
break;
case 5:
Console.WriteLine("Thu sau") ;
break;
case 6:
Console.WriteLine("Thu bay") ;
break;
default:
Console.WriteLine("Khong phai la thu trong tuan") ;
break;
}
}
}
V. CẤU TRÚC LẶP
1. Cấu trúc lặp
1. 1. Lệnh lặp while
a. Cú pháp: while (Điều_Kiện)
< Khối lệnh>
b. Ví dụ 2.4:
using System;
class UsingWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
while (i<=10)
{
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem,
}
}
}
2. Lệnh lặp do … while
a. Cú pháp: do< Khối lệnh>while (Điều_Kiện) ;
b. Ví dụ 2.5:
using System;
class UsingDoWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
do {
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem
} while (i<= 10) ;
}
}
3. Lệnh lặp for
a. Cú pháp: for ([Khởi_tạo] ; [Điều_kiện] ; [Bước_lặp])
< Khối lệnh>
b. Ví dụ 2.6:
using System;
class UsingFor
{
static void Main()
{
for (int i=1 ; i<=30 ; i++)
if (i % 10 ==0)
Console.Write("{0} \n\r",i) ;
else Console.Write("{0} ",i) ;
}
}
4. Lệnh lặp foreach
a. Cú pháp: for each (<Kiểu_tập_hợp> <Tên_truy_cập_thành_phần> in <Tên_tập_hợp>)
< Khối lệnh>
b. Ví dụ 2.7:
using System;
public class UsingForeach
{
public static void Main()
{
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
foreach (int item in intArray)
Console.WriteLine("i = {0} ",item) ;
}
}
1. Khởi động
Bước 1: Khởi động Visual Studio 2013
Start | All Programs | Microsoft Visual Studio 2013 | Microsoft Visual Studio 2013
Bước 2: Vào menu File | New | Project
Bước 3: Khai báo
Mở hộp ToolBox: Menu View | ToolBox là chứa các control
Mở cửa sổ Properties: Menu View | Properties là chứa thuộc tính· Mở cửa sổ Solution Explorer: Menu View | Solution Explorer à cửa sổ Project.
xuất hiện.
Bước 4: Thiết kế Form – Viết code· Thiết kế form: Nhắp vào View Designer (trong cửa số Solution Explorer)· Viết code: Nhắp vào View Code (trong cửa số Solution Explorer)
Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút "Play"
Để dừng chương trình, nhấn Shift + F5 hoặc nhắp vào nút "Play"
a) Cú pháp: if (Điều_Kiện)
<Khối lệnh Điều_Kiện đúng>
[else<Khối lệnh Điều_Kiện sai>]
b) Ví dụ 2.1: Dùng câu lệnh điều kiện if … else
using System;
class Chan_Le{
static void Main()
{
// Khai bao va khoi tao bien
int bienDem = 9 ;
// Xuat ra man hinh
if (bienDem % 2 == 0)
Console.WriteLine("{0} la so chan", bienDem) ;
else Console.WriteLine("{0} la so le", bienDem) ;
}
}
2. Câu lệnh if lồng nhau
a. Cú pháp: if (Điều_Kiện_1)
<Khối lệnh 1>else if (Điều_Kiện_2)
<Khối lệnh 2.1>else<Khối lệnh 2.2>
b. Ví dụ 2.2:
using System;
class Thu_Trong_Tuan
{
static void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
if ((thu == 1) || (thu == 3) || (thu == 5))
Console.WriteLine("Day la ngay 2-4-6") ;
else if ((thu == 2) || (thu == 4) || (thu == 6))
Console.WriteLine("Day la ngay 3-5-7") ;
else Console.WriteLine("Day la ngay chu nhat") ;
}
}
3. Câu lệnh switchstatic void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
if ((thu == 1) || (thu == 3) || (thu == 5))
Console.WriteLine("Day la ngay 2-4-6") ;
else if ((thu == 2) || (thu == 4) || (thu == 6))
Console.WriteLine("Day la ngay 3-5-7") ;
else Console.WriteLine("Day la ngay chu nhat") ;
}
}
a. Cú pháp: switch (Biểu_Thức){case <giá_trị_1>:
< Khối lệnh 1>
<Lệnh Nhảy>
case <giá_trị_2>:
< Khối lệnh 2>
<Lệnh Nhảy>
….
[default:
< Khối lệnh khác>]}
b. Ví dụ 2.3:
using System;
class Thu{
static void Main()
{
// Khai bao va khoi tao bien
int thu = 5 ; // 0: Chu nhat, 1: Thu hai, 2: Thu ba, 3: Thu tu,
// 4: Thu nam, 5: Thu sau, 6: Thu bay
// Xuat ra man hinh
switch (thu)
{
case 0:
Console.WriteLine("Chu nhat") ;
break;
case 1:
Console.WriteLine("Thu hai") ;
break;
case 2:
Console.WriteLine("Thu ba") ;
break;
case 3:
Console.WriteLine("Thu tu") ;
break;
case 4:
Console.WriteLine("Thu nam") ;
break;
case 5:
Console.WriteLine("Thu sau") ;
break;
case 6:
Console.WriteLine("Thu bay") ;
break;
default:
Console.WriteLine("Khong phai la thu trong tuan") ;
break;
}
}
}
V. CẤU TRÚC LẶP
1. Cấu trúc lặp
1. 1. Lệnh lặp while
a. Cú pháp: while (Điều_Kiện)
< Khối lệnh>
b. Ví dụ 2.4:
using System;
class UsingWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
while (i<=10)
{
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem,
}
}
}
2. Lệnh lặp do … while
a. Cú pháp: do< Khối lệnh>while (Điều_Kiện) ;
b. Ví dụ 2.5:
using System;
class UsingDoWhile
{
static void Main()
{
// Khai bao va khoi tao bien dem
int i = 1 ;
// Xuat ra man hinh
do {
Console.WriteLine("i = {0}",i) ;
i++ ; // tang bien dem
} while (i<= 10) ;
}
}
3. Lệnh lặp for
a. Cú pháp: for ([Khởi_tạo] ; [Điều_kiện] ; [Bước_lặp])
< Khối lệnh>
b. Ví dụ 2.6:
using System;
class UsingFor
{
static void Main()
{
for (int i=1 ; i<=30 ; i++)
if (i % 10 ==0)
Console.Write("{0} \n\r",i) ;
else Console.Write("{0} ",i) ;
}
}
4. Lệnh lặp foreach
a. Cú pháp: for each (<Kiểu_tập_hợp> <Tên_truy_cập_thành_phần> in <Tên_tập_hợp>)
< Khối lệnh>
b. Ví dụ 2.7:
using System;
public class UsingForeach
{
public static void Main()
{
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
foreach (int item in intArray)
Console.WriteLine("i = {0} ",item) ;
}
}
CHƯƠNG 2: XÂY DỰNG WINDOWN FORM APPLICATION
I. SỬ DỤNG VISUL STUDIO 20131. Khởi động
Bước 1: Khởi động Visual Studio 2013
Start | All Programs | Microsoft Visual Studio 2013 | Microsoft Visual Studio 2013
Bước 2: Vào menu File | New | Project
Bước 3: Khai báo
Mở hộp ToolBox: Menu View | ToolBox là chứa các control
Mở cửa sổ Properties: Menu View | Properties là chứa thuộc tính· Mở cửa sổ Solution Explorer: Menu View | Solution Explorer à cửa sổ Project.
xuất hiện.
Bước 4: Thiết kế Form – Viết code· Thiết kế form: Nhắp vào View Designer (trong cửa số Solution Explorer)· Viết code: Nhắp vào View Code (trong cửa số Solution Explorer)
Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút "Play"
Để dừng chương trình, nhấn Shift + F5 hoặc nhắp vào nút "Play"
2. Các thao tác với Project / Solution
a. Tạo Project
C1. Vào menu File | New | Project
C2. Ctrl + Shift + N
C3. Chọn công cụ New Project trên thanh Standart
b. Mở Project / Solution:
C1. Vào menu File | Open | Project / Solution
C2. Ctrl + Shift + O
c. Lưu Project / Solution
C1. Vào menu File | Save All
C2. Chọn công cụ Save All trên thanh Standart
d. Đóng Solution:
Vào menu File | Close Solution
C2. Ctrl + Shift + N
C3. Chọn công cụ New Project trên thanh Standart
b. Mở Project / Solution:
C1. Vào menu File | Open | Project / Solution
C2. Ctrl + Shift + O
c. Lưu Project / Solution
C1. Vào menu File | Save All
C2. Chọn công cụ Save All trên thanh Standart
d. Đóng Solution:
Vào menu File | Close Solution
2. Màn hình giao diện của Windows Forms
a. Cửa sổ thiết kế Form (Designer):
b. Cửa sổ thiết viết code
* Các thao tác với Form
a. Thêm một Form mới vào Project:
Bước 1: Khởi động
C1. Vào menu Project | Add New Item …
C2. Chọn công cụ Add New Item trên thanh StandartC1. Vào menu Project | Add New Item …
Bước 2: Khai báo
+ Categories: chọn Windows Forms
+ Templates: chọn Windows Form
+ Name: đặt tên Form
Bước 3. Nhắp Add
b. Thêm một Form có sẵn vào Project:
Bước 1. Vào menu Project | Add Existing Item …
Bước 2. Chọn Form
Bước 3. Nhắp Add
c. Xóa bỏ một Form đang có trong Project:
Bước 1. Chọn Form cần gỡ bỏ (ở cửa sổ Solution Explorer)
Bước 2. Vào menu Edit | Delete
d. Lưu Form
Vào menu File | Save Form.cs
Hoặc Ctrl + S
* Ghi chú
Ta đem “bỏ vào” form các đối tượng như: Label, TextBox, Button, …
+ Label, TextBox, Button, … được gọi là control hay còn gọi là component.
+ Form được gọi là control “chứa”.
- Khi thay đổi nội dung của Label, TextBox, Button, … ta thay đổi vào Text. Text được
gọi là Property của control
Ta đem “bỏ vào” form các đối tượng như: Label, TextBox, Button, …
+ Label, TextBox, Button, … được gọi là control hay còn gọi là component.
+ Form được gọi là control “chứa”.
- Khi thay đổi nội dung của Label, TextBox, Button, … ta thay đổi vào Text. Text được
gọi là Property của control
3. Control là gì?
Control là lớp (class) các thành phần được thêm vào Windows Forms để tương tác giữangười sử dụng với Windows.
Có rất nhiều loại control trong Windows Forms như: Label, TextBox, ListBox,
ComboBox, Button, …
Các control sử dụng trên Windows Forms dùng namespace System.Windows.Forms
4. Properties (thuộc tính) của control
Properties là những thông tin mà ta có thể thay đổi nội dung, cách trình bày … của
người thiết kế để ứng dụng vào control.
Mỗi lớp (class) có nhiều property khác nhau. Tuy nhiên, vẫn có một số property giống
nhau được xây dựng từ lớp ban đầu.
* Bảng trình bày các thuộc tính (Properties) giống nhau
Thuộc tính | Mô tả |
Anchor | Có 4 hướng được định nghĩa là: top, bottom, left, right để cố định (neo). Khi control chứa nó thay đổi kích thước thì nó sẽ bị thay đổi kích thước nếu nếu các hướng left / right / top / bottom bị cố định (neo). |
BackColor | Màu nền của control. |
Bottom | Là khoảng cách theo chiều dọc từ cạnh đáy của control đến cạnh trên của control chứa nó. |
Dock | Giống như Anchor nhưng việc cố định (neo) này theo một cạnh nào đó của control (hoặc cả 4 cạnh) với control chứa nó. |
Enabled | Control được phép tương tác (True) hay không được phép tương tác (False)) với người dùng. |
ForeColor | Màu chữ của control. |
Height | Là chiều cao của control tính từ cạnh trên của control đến cạnh dưới của control. |
Left | Là khoảng cách theo chiều ngang từ cạnh trái của control đến cạnh trái của control chứa nó. |
Name | Tên của control. |
Parent | Chỉ đến control chứa control hiện hành. |
Right | Là khoảng cách theo chiều ngang từ cạnh phải của control đến cạnh trái của control chứa nó. |
TabIndex | Thứ tự focus khi nhấn phím Tab (trên bàn phím) của control so với các control khác cùng nằm trong control chứa nó. |
TabStop | Chỉ định control có được phép “bắt” (True) / không được phép “bắt” (False) phím Tab. Nếu không được phép thì TabIndex cũng không dùng được. |
Tag | Là nhãn phân biệt giữa các control giống nhau trong cùng form. |
Text | Nội dung hiện trong control. |
Top | Là khoàng cách theo chiều dọc từ cạnh trên của control đến cạnh trên của control chứa nó. |
Visible | Cho phép control hiện (True) / không hiện (False) khi chạy ứng dụng. |
Width | Là chiều rộng của control tính từ cạnh trái của control đến cạnh phải của control. |
Phương thức | Mô tả |
Clear() | Xóa nội dung |
ResetText() | Xóa nội dung Text |
Trim() | Cắt bỏ khoảng trắng thừa hai bên chuỗi |
1. Label ( )
a. Công dụng:
Hiển thị chuỗi ký tự không thay đổi trên form (nhãn).
b. Tạo Label:
Chọn công cụ
Rê chuột và vẽ Label trên form.
c. Thuộc tính
2. TextBox
a. Công dụng:
Dùng trình bày văn bản và cho phép người dùng được thay đổi nội dung văn bản.
Công dụng chính là cho người dùng nhập văn bản.b. Tạo TextBox:- Chọn công cụRê chuột và vẽ TextBox trên form.
c. Thuộc tính:
3. Button ( )
a. Công dụng:
Dùng để thực thi lệnh.
- Khi nhắp chuột lên button, chương trình nhận được tín hiệu Click và lệnh được thi hành.
b. Tạo Button:
- Chọn công cụ
- Rê chuột và vẽ Button trên form.
c. Thuộc tính:
4. CheckBox ( )
a. Công dụng:
Cho phép người dùng chọn hoặc không chọn.
b. Tạo CheckBox:
Chọn công cụ
Rê chuột và vẽ CheckBox trên form.
c. Thuộc tính:
Ví dụ 3.1:* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là như sau:
* Yêu cầu:
- Nhập:
+ Username vào TextBox Tên đăng nhập (Name: txtUser)
+ Password vào TextBox Mật khẩu (Name: txtPass)
a. Công dụng:
Hiển thị chuỗi ký tự không thay đổi trên form (nhãn).
b. Tạo Label:
Chọn công cụ
Rê chuột và vẽ Label trên form.
c. Thuộc tính
Thuộc tính | Mô tả |
AutoSize | Điều chỉnh kích thước đối tượng cho vừa với chiều dài chuỗi ký tự |
Font | |
Name | Quy định font chữ cho văn bản |
Bold | True: đậm / False: bỏ đậm |
Italic | True: nghiêng / False: bỏ nghiêng |
Size | Quy định cỡ chữ cho văn bản |
Underline | True: gạch dưới / False: bỏ gạch dưới |
TextAlign | Canh lề (Left / Center / Right) |
a. Công dụng:
Dùng trình bày văn bản và cho phép người dùng được thay đổi nội dung văn bản.
Công dụng chính là cho người dùng nhập văn bản.b. Tạo TextBox:- Chọn công cụRê chuột và vẽ TextBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
PasswordChar | Quy định ký tự hiển thị cho ô mật khẩu. |
Multiline | True: hiện thanh cuộn / False: không hiện thanh cuộn |
ScrollBars | Thanh cuộn (None / Horizontal / Vertical / Both) |
a. Công dụng:
Dùng để thực thi lệnh.
- Khi nhắp chuột lên button, chương trình nhận được tín hiệu Click và lệnh được thi hành.
b. Tạo Button:
- Chọn công cụ
- Rê chuột và vẽ Button trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
Text | Nhập nội dung vào Button |
a. Công dụng:
Cho phép người dùng chọn hoặc không chọn.
b. Tạo CheckBox:
Chọn công cụ
Rê chuột và vẽ CheckBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
Checked | Không có dấu check (False) / Có dấu check (True) |
* Yêu cầu:
- Nhập:
+ Username vào TextBox Tên đăng nhập (Name: txtUser)
+ Password vào TextBox Mật khẩu (Name: txtPass)
- Chọn hoặc không chọn ô CheckBox Ghi nhớ (Name: chkNho)
- Nhắp button Đăng nhập thì hiện ra hộp thông báo chứa Tên đăng nhập, Mật khẩu; Và“Bạn có ghi nhớ” (nếu chkNho có đánh dấu chọn).- Nhắp button Xóa thì xóa trống TextBox Tên đăng nhập và TextBox Mật khẩu, đồng
thời di chuyển con trỏ vào txtUser.
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: Form Đăng Nhập
+ Icon: logo.ico
- Nhắp đúp vào button Đăng nhập, thêm đoạn code sau:
- Nhắp đúp vào button Đăng nhập, thêm đoạn code sau:
string thongbao;thongbao = "Tên đăng nhập là: " ;
thongbao += this.txtUser.Text ;
thongbao += "\n\rMật khẩu là: " ;
thongbao += this.txtPass.Text;if (this.chkNho.Checked==true) {
thongbao += "\n\rBạn có ghi nhớ.";
}MessageBox.Show(thongbao,"Thông báo");
- Nhắp đúp vào button Xóa, thêm đoạn code sau:
this.txtUser.Clear();this.txtPass.Clear();
this.txtUser.Focus();
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
Application.Exit();
+ Có thể thay button Xóa bằng button Reset với đoạn code như sau:
this.txtUser.ResetText();
this.txtPass.ResetText();
this.txtUser.Focus();
* Phần Bổ sung:
1. MessageBox.Show: hiện hộp thông báo MessageBox.Show("Thông báo" , "Tiêu đề");
MessageBox.Show("Thông báo", "Tiêu đề", Buttons, Icon);
+ Buttons(nút lệnh): MessageBoxButtons.OKMessageBoxButtons.OKCancelMessageBoxButtons.YesNoMessageBoxButtons.YesNoCancel
+ Icon (biểu tượng):MessageBoxIcon.InformationMessageBoxIcon.QuestionMessageBoxIcon.Warning
+ DialogResult (kết quả trả về):DialogResult.Ok
MessageBox.Show("Thông báo", "Tiêu đề", Buttons, Icon);
+ Buttons(nút lệnh): MessageBoxButtons.OKMessageBoxButtons.OKCancelMessageBoxButtons.YesNoMessageBoxButtons.YesNoCancel
+ Icon (biểu tượng):MessageBoxIcon.InformationMessageBoxIcon.QuestionMessageBoxIcon.Warning
+ DialogResult (kết quả trả về):DialogResult.Ok
DialogResult.Yes
2. Dừng chương trình: this.Close();
Application.Exit();
3. Event (sự kiện) là gì?
Sự kiện là những phản ứng của đối tượng. Nói cách khác, sự kiện là những tín hiệu phát
ra khi người dùng thao tác trên đối tượng.
Nhờ có event, người lập trình sẽ nhận được những tín hiệu và xử lý những tín hiệu đó để
phản hồi lại cho người dùng, tạo nên sự nhịp nhàng cho chương trình.
4. Bảng trình bày các sự kiện (Events) của control
Sự kiện | Mô tả |
Click | Gọi đến khi control bị Click. Trong một vài control, event này cũng xảy ra khi người dùng nhấn phím Enter. |
DoubleClick | Gọi đến khi control bị Double-Click. Trong một vài control, event này không báo giờ được gọi. Ví dụ: control Button. |
DragDrop | Gọi đến khi việc “Drag and Drop” được hoàn tất. |
DragEnter | Gọi đến khi đối tượng vừa được “Drag” đến biên của control. |
DragLeave | Gọi đến khi đối tượng vừa được “Drag” ra ngoài biên của control. |
DragOver | Gọi đến khi đối tượng được “Drag” bên trong control. |
KeyDown | Gọi đến khi vừa bấm một phím bất kỳ từ 1 control đang focus. Sự kiện này luôn được gọi trước sự kiện KeyUp. |
KeyPress | Gọi đến khi vừa bấm một phím bất kỳ từ 1 control được focus. Sự kiện này được gọi sau sự kiện KeyUp. |
KeyUp | Gọi đến khi vừa bấm một phím bất kỳ rồi thả ra từ 1 control đang focus. Sự kiện này luôn được gọi sau sự kiện KeyDown. |
GotFocus | Gọi đến khi control được focus. |
LostFocus | Gọi đến khi control bị mất focus. |
MouseDown | Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột được nhắp nhưng chưa thả ra. |
MouseMove | Gọi đến khi con trỏ chuột đi qua 1 control. |
MouseUp | Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột vừa được thả. |
Paint | Gọi đến khi control được vẽ. |
Validated | Gọi đến khi control focus, property CaucesValidation được đặt là true và sau khi gọi việc kiểm tra bằng Validating. |
Validating | Gọi đến khi control mất focus, property CaucesValidation được đặt là true. |
- Khi nhắp vào button Dừng thì xuất hiện hộp thoại hỏi đáp có 2 button Ok, Cancel.
- Chương trình chỉ dừng khi nhắp tiếp vào nút Ok.
* Hướng dẫn: Sửa lại button Dừng như sauDialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if ( traloi == DialogResult.OK) Application.Exit();
Ví dụ 3.3:* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 3.3 gồm:
- Form1: được thiết kế như sau
- Form2: được thiết kế như sau
* Yêu cầu:
- Khi chạy chương trình thì Form2 (Đăng nhập hệ thống) được mở lên trước.
- Nhập:
+ Tên người dùng vào TextBox txtUser+ Mật khẩu vào TextBox txtPass- Nhắp button Đăng nhập thì thực hiện kiểm tra
+ Nếu txtUser = "teonv" và txtPass = "123" thì chuyển sang Form1.
+ Ngược lại thì thông báo "Không đúng tên người dùng / mật khẩu !!!"
- Nhắp button Thoát thì hiển thị thông báo "Chắc không? "
+ Nếu chọn Yes thì kết thúc chương trình.
+ Ngược lại thì trở lại màn hình Đăng nhập hệ thống.
* Hướng dẫn:
- Form1. Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: Màn hình chính
+ Icon: star.ico
. Form load:Form frm = new Form2();
frm.ShowDialog();
- Form2. Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
Lưu hành nội bộ Trang 23+ Size: 12
+ Text: Đăng nhập hệ thống
+ Icon: logo.icoĐăng nhập: Nhắp đúp vào button btnDangnhap, gõ vào đoạn code sau
if ((this.txtUser.Text=="teonv")&&(this.txtPass.Text=="123"))this.Close();
else{MessageBox.Show("Không đúng tên người dùng / mật
khẩu !!!","Thông báo");
this.txtUser.Focus();
}. Thoát: Nhắp đúp vào button btnThoat, gõ vào đoạn code sauDialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if ( traloi == DialogResult.OK)Application.Exit();
5. ListBox ( )
a. Công dụng:
Dùng để hiển thị một danh sách các lựa chọn.
b. Tạo ListBox:
Chọn công cụ
Rê chuột và vẽ ListBox trên form.
c. Thuộc tính:
a. Công dụng:
Dùng để hiển thị một danh sách các lựa chọn.
b. Tạo ListBox:
Chọn công cụ
Rê chuột và vẽ ListBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
Items | Các mục giá trị trong ListBox |
SelectedItem | Item được chọn |
Phương thức | Mô tả |
Add("chuỗi") | Thêm một mục giá trị là "chuỗi" |
ToString() | Trả về chuỗi ký tự được chọn |
* Lấy giá trị trong ListBox: <Ten_ListBox>.SelectedItem.ToString() ;
Ví dụ 4.1:* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 4.1 như sau:
- ListBox lstWeb (Liên kết website) chứa các giá trị:
+ Tuổi trẻ
+ Thanh niên
+ VNExpress
+ Dân trí
+ Công an
- TextBox txtKQ (chứa kết quả) để trống.
- Nhắp button btnOk (Ok) sẽ hiện trong txtKQ tên website được chọn ở lstWeb.
- Nhắp button btnReset (Reset) sẽ xóa trống txtKQ.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: FormWebLinks
- Nhắp đúp vào button Ok rồi thêm đoạn code sau:this.txtKQ.Text = "Bạn đã chọn website ";this.txtKQ.Text += this.lstWeb.SelectedItem.ToString()
- Nhắp đúp vào button Reset rồi thêm đoạn code sau:this.txtKQ.ResetText();
* Cải tiến: Ta có thể đưa các giá trị của lstWeb trong Form1_Load.
+ Thiết kế lại form như sau
* Cải tiến: Ta có thể đưa các giá trị của lstWeb trong Form1_Load.
+ Thiết kế lại form như sau
+ Nhắp đúp chuột vào nền form, rồi gõ đoạn codethis.lstWeb.Items.Add("Tuổi trẻ");this.lstWeb.Items.Add("Thanhniên");
this.lstWeb.Items.Add("VNExpress");
this.lstWeb.Items.Add("Dân trí");
this.lstWeb.Items.Add("Công an");
this.lstWeb.SelectedItem = "Tuổi trẻ";
6. ComboBox ( )
a. Công dụng:
- Dùng để hiển thị một danh sách các lựa chọn / hoặc nhập vào một giá trị.
b. Tạo ComboBox:
- Chọn công cụ
- Rê chuột và vẽ ComboBox trên form.
c. Thuộc tính:
Ví dụ 4.2
this.lstWeb.Items.Add("VNExpress");
this.lstWeb.Items.Add("Dân trí");
this.lstWeb.Items.Add("Công an");
this.lstWeb.SelectedItem = "Tuổi trẻ";
6. ComboBox ( )
a. Công dụng:
- Dùng để hiển thị một danh sách các lựa chọn / hoặc nhập vào một giá trị.
b. Tạo ComboBox:
- Chọn công cụ
- Rê chuột và vẽ ComboBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
DisplayMember | Gán nội dung thể hiện trên ComboBox |
Items | Liệt kê các mục giá trị trong ComboBox |
SelectedItem | Lấy Item được chọn |
SelectedText | Lấy nội dung thể hiện trên ComboBox từ DisplayMember |
SelectedValue | Lấy giá trị từ ValueMember |
ValueMember | Gán giá trị cho ComboBox |
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 4.2 như sau:
Thực hiện giống như Ví dụ 4.1,nhưng thay ListBox bằng ComboBoxcbWeb.
7. RadioButton ( )
a. Công dụng:- Dùng để chọn một trong các lựa chọn trong danh sách.
b. Tạo RadioButton:
- Chọn công cụ
- Rê chuột và vẽ RadioButton trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
Checked | Không có dấu chọn (False) / Có dấu chọn (True) |
a. Công dụng:
- Tạo ra một nhóm.
b. GroupBox:
- Chọn công cụ
- Rê chuột và vẽ GroupBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
BackgroundImage | Hình nền |
BackgroundImageLayout | None / Tile / Center / Stretch / Zoom |
- Chọn kiểu chữ
+ Radio Button (rad1): chữ thường
+ Radio Button (rad2): chữ HOA
- Nhắp vào Button Kết quả (btnKQ) sẽ in họ và tên bằng kiểu chữ được chọn trong
TextBox txtKQ.
- Nhắp vào Button Xóa (btnXoa) sẽ xóa trống txtHoTen, txtKQ, rad1 được chọn và đưa
con trỏ vào ô TextBox txtHoTen.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True
+ Font: Times New Roman
+ Size: 12
+ Text: Đổi kiểu chữ
- Nhắp đúp vào nút Kết quả rồi thêm đoạn code sau:string hoten=this.txtHoTen.Text.Trim();if (this.rad1.Checked == true)
txtKQ.Text = hoten.ToLower();
if (this.rad2.Checked == true)
txtKQ.Text = hoten.ToUpper();
- Nhắp đúp vào nút Xóa rồi thêm đoạn code sau:
this.txtHoTen.Clear();
this.txtKQ.Clear();
this.rad1.Checked = true;
this.txtHoTen.Focus();
* Bổ sung:
- Nhắp vào Button Dừng (btnDung) sẽ dừng chương trình: thiết kế và viết code sau:
Application.Exit();
9. Timer ( )
a. Công dụng:
- Quy định khoảng thời gian định kỳ để thực hiện một công việc.
b. Tạo Timer:
- Chọn công cụ
- Rê chuột và vẽ Timer à là control dạng unvisible (ẩn).
c. Thuộc tính:
Thuộc tính Mô tả
Enabled Bật / tắt chế độ hẹn thời gian
Interval Khoảng thời gian định kỳ
Ví dụ 4.4:* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 4.4 như sau:
* Yêu cầu:
- Tạo Timer1 có Enabled = false; Interval = 1000
- Khởi tạo biến đếm i = 20
- Button Bắt đầu (btnBatDau): dùng để bật chế độ hẹn thời gian.
- Button Dừng (btnDung): dùng để dừng chương trình.
- Timer1: Đếm ngược từ 20 đến 1 và xuất ra dòng chữ “Hết giờ”.
+ Xuất giá trị biến đếm i ra Label lblDongHo.
+ Giảm biến i xuống 1 đơn vị.
+ Khi biến đếm i < 0 thì tắt chế độ hẹn giờ và xuất “Hết giờ!” ra Label lblDongHo.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ AutoSize: True- Tạo Timer1 có Enabled = false; Interval = 1000
- Khởi tạo biến đếm i = 20
- Button Bắt đầu (btnBatDau): dùng để bật chế độ hẹn thời gian.
- Button Dừng (btnDung): dùng để dừng chương trình.
- Timer1: Đếm ngược từ 20 đến 1 và xuất ra dòng chữ “Hết giờ”.
+ Xuất giá trị biến đếm i ra Label lblDongHo.
+ Giảm biến i xuống 1 đơn vị.
+ Khi biến đếm i < 0 thì tắt chế độ hẹn giờ và xuất “Hết giờ!” ra Label lblDongHo.
* Hướng dẫn:
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
+ Font: Times New Roman
+ Size: 12
+ Text: Đồng hồ đếm ngược
- Khai báo biến đếm i: qua code, thêm đoạn code để được kết quả như sau:
public Form1()
{
InitializeComponent();
}int i = 10;
- Nhắp đúp vào nút Bắt đầu rồi thêm đoạn code sau:this.timer1.Enabled = true;- Nhắp đúp vào nút Dừng rồi thêm đoạn code sau:
Application.Exit();
- Nhắp đúp vào nút Timer1 (Timer1_Tick) rồi thêm đoạn code sau:t
his.lblDongHo.Text = i.ToString();
i--;
if (i < 0)this.timer1.Enabled = false;
10. RichTextBox ( )
a. Công dụng:
- Dùng để nhập văn bản với định dạng văn bản đa dạng.
b. Tạo RichTextBox:
- Chọn công cụ
- Rê chuột và vẽ RichTextBox trên form.
c. Thuộc tính:
Thuộc tính | Mô tả |
ReadOnly | Không cho soạn thảo, chỉ đọc. |
a. Công dụng:
- Bảng chứa các control hay một nhóm các control.
b. Tạo Panel:
- Chọn công cụ
- Rê chuột và vẽ Panel.
c. Thuộc tính:
Thuộc tính | Mô tả |
AutoScroll | Tự động cuộn nếu số control nằm ngoài vùng |
BorderStyle | None / FixedSingle / Fixed3D |
a. Công dụng:
- Khung chứa hình ảnh.
b. Tạo PictureBox:
- Chọn công cụ
- Rê chuột và vẽ PictureBox.
c. Thuộc tính:
Thuộc tính | Mô tả |
Image | Hình chứa trong PictureBox |
a. Công dụng:
- Hỗ trợ thông báo lỗi cho các control khác.
- Thường được dùng với control input (ví dụ: TextBox) ràng buộc với 1 điều kiện nhập
nào đó.
b. Tạo ErrorProvider:
- Chọn công cụ
- Rê chuột và vẽ ErrorProvider à là control dạng unvisible (ẩn)
III. Menu, ToolBar và Dialog
1. MenuStrip ( )a. Công dụng:
- Tạo menu.
b. Tạo MenuStrip:
- Nhắp đúp vào control .
- Nhập menu.
2. ToolStrip ( )
a. Công dụng:
- Tạo ra toolbar.
b. Tạo ToolStrip:
- Chọn công cụ
- Kéo control ToolStrip vào trong form.
- Bấm vào ToolStrip vừa tạo, ta có thể tạo ra các tool (công cụ) như: Label, TextBox,
Button, ComboBox, DropDownButton….
Ví dụ 4.5:* Tạo ứng dụngWindows Forms Application như hình.
* Hướng dẫn: dùng RichTextBox, MenuStrip và ToolStrip.
IV. Common Dialog (Hộp thoại dùng chung)
1. FontDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Font.
b. Tạo FontDialog:
- Nhắp đúp vào control
2. OpenFileDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Open File.
b. Tạo OpenFileDialog:
- Nhắp đúp vào control
3. SaveFileDialog ( )
a. Công dụng:
Tạo ra hộp thoại Save File.
b. Tạo SaveFileDialog:
- Nhắp đúp vào control
4. PrintPreviewDialog ( )
a. Công dụng:
- Xem trước khi in.
b. Tạo SaveFileDialog:
- Nhắp đúp vào control
5. PrintDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Print File.
b. Tạo PrintDialog:
- Nhắp đúp vào control
6. FolderBrowserDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Browser.
b. Tạo FolderBrowserDialog:
- Nhắp đúp vào control
1. Viết chương trình tạo dòng chữ xuất hiện lần lượt từng ký tự, có nội dung như sau:
( lblChucMung, Timer1, btnDungChay, btnThoat)1. FontDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Font.
b. Tạo FontDialog:
- Nhắp đúp vào control
2. OpenFileDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Open File.
b. Tạo OpenFileDialog:
- Nhắp đúp vào control
3. SaveFileDialog ( )
a. Công dụng:
Tạo ra hộp thoại Save File.
b. Tạo SaveFileDialog:
- Nhắp đúp vào control
4. PrintPreviewDialog ( )
a. Công dụng:
- Xem trước khi in.
b. Tạo SaveFileDialog:
- Nhắp đúp vào control
5. PrintDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Print File.
b. Tạo PrintDialog:
- Nhắp đúp vào control
6. FolderBrowserDialog ( )
a. Công dụng:
- Tạo ra hộp thoại Browser.
b. Tạo FolderBrowserDialog:
- Nhắp đúp vào control
1. Viết chương trình tạo dòng chữ xuất hiện lần lượt từng ký tự, có nội dung như sau:
- Button Dừng/Chạy có nhiệm vụ không cho / cho Timer hoạt động và đổi nội dung
(Text) của button btnDungChay từ Dừng sang Chạy hoặc ngược lại.
- Button Thoát dùng để dừng chương trình.
2. Viết chương trình tạo form Bướm bay (trong phạm vi form) như sau:
* Hướng dẫn:Sử dụng: timer, PictureBox, Button và 2 file hình BFClose.ico, BFOpen.ico
3. Viết chương trình nhập hai số nguyên dương n và m. Tính theo yêu cầu đã chọn như sau:
(txtN, txtM, rad1, rad2, txtKQ, btnTinh, btnXoa, btnThoat)
- Button Tính (btnTinh): tính toán và xuất kết quả ra TextBox txtKQ.
- Button Xóa: xóa trống tất cả các TextBox, đưa con trỏ vào ô txtN.
- Button Thoát: dừng chương trình.
4. Từ Ví Dụ 4.5, tạo và bổ sung thêm các công cụ CommonDialog để được ứng dụng dạng
giao diện đơn văn bản (Single-Document Interface SDI).5. Phát triển bài tập 4, để có thể mở cùng lúc nhiều cửa sổ - dạng giao diện đa văn bản
(Multi-Document Interface MDI)
CHƯƠNG 3: ARRAY-STRING-EXCEPTION
I. MẢNG 1 CHIỀU
1. Định nghĩa- Mảng là một tập hợp có thứ tự của những đối tượng (objects), tất cả các đối tượng này
có cùng một kiểu dữ liệu.
- Mảng trong ngôn ngữ C# sử dụng những phương thức và các thuộc tính. Thể hiện của
mảng trong C# có thể truy cập những phương thức và các thuộc tính của System.Array.
- Một số các thuộc tính và phương thức của lớp System.Array:
Thành viên | Mô tả |
Sort() | Phương thức sắp xếp giá trị tăng dần trong mảng một chiều |
Reverse() | Phương thức sắp xếp giá trị giảm dần trong mảng một chiều |
Length | Thuộc tính chiều dài của mảng |
SetValue() | Phương thức thiết lập giá trị cho một thành phần xác định trong mảng |
<kiểu dữ liệu>[] <tên mảng> ;
Ví dụ:
int[] myIntArray ;
Tạo thể hiện của mảng: sử dụng từ khóa new
Ví dụ:
myIntArray = new int[5] ;
3. Khởi tạo thành phần của mảng
- Tạo thể hiện của mảng đồng thời với khởi tạo các giá trị:
+ Cách 1:
int[] myIntArray = new int[5] {2, 4, 6, 8, 10};
+ Cách 2:
int[] myIntArray = {2, 4, 6, 8, 10};
- Các khai báo trên sẽ thiết lập bên trong bộ nhớ một mảng chứa 5 số nguyên.
Chú ý: Không thể thiết lập lại kích thước cho mảng.
4. Giá trị mặc định:
- Khi chúng ta tạo một mảng có kiểu dữ liệu giá trị, mỗi thành phần sẽ chứa giá trị mặc
định của kiểu dữ liệu.
Ví dụ:
Với khai báo int myIntArray = new int[5] ;
thì:
- Mỗi thành phần của mảng được thiết lập giá trị là 0 (giá trị mặc định của số nguyên).
- Những kiểu tham chiếu trong một mảng không được khởi tạo giá trị mặc định, chúng
được khởi tạo giá trị null.5. Truy cập các thành phần trong mảng:- Để truy cập vào thành phần trong mảng ta sử dụng toán tử chỉ mục ([]).
- Chỉ mục của thành phần đầu tiên trong mảng luôn luôn là 0.
- Thuộc tính Length của mảng cho biết số đối tượng trong một mảng.
6. Duyệt mảng 1 chiều:
for (int i=0; i < myIntArray.Length; i++) {
xử lý myIntArraya[i];
}Có thể thay for bằng foreach như sauforeach (int phantu in a)
{
xử lý myIntArraya[i];
}
Ví dụ 5.1: (Mảng 5 số nguyên từ 1 đến 5)
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 5.1 như sau:
* Yêu cầu
- Thiết kế form như mẫu (lblKQ, btnIn, btnXoa, btnDung).
- Khai báo mảng 1 chiều (a) gồm 5 số nguyên từ 1 đến 5.
- Nhắp vào button In mảng (btnIn) sẽ in ra label (lblKQ) các giá trị trong mảng.
- Nhắp vào button Xóa (btnXoa) sẽ xóa trống nội dung của label (lblKQ).
- Nhắp vào button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo mảng: qua code, thêm đoạn code để được kết quả như sau:public partial class Form1 : Form{// Khai bao mang 1 chieu gom 5 so nguyen tu 1 den 5int[] a = { 1, 2, 3, 4, 5 };
}
- Nhắp đúp vào button In mảng, thêm đoạn code sau:// Xuat cac phan tu trong mang ra man hinhthis.lblKQ.Text="Các phần tử trong mảng là:\n\r";
for (int i=0; i < a.Length; i++) {this.lblKQ.Text += a[i]+" ";
}Có thể thay for bằng foreach như sauforeach (int phantu in a){this.lblKQ.Text += a[i]+" ";
}
- Nhắp đúp vào button Xóa, thêm đoạn code sau:this.lblKQ.Text = "";
- Nhắp đúp vào button Dừng, thêm đoạn code sau:Application.Exit();
Ví dụ 5.2: (Mảng 5 số nguyên)
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 5.2 như sau:
- Thiết kế form như mẫu (lblKQ, btnIn, btnXoa, btnDung).
- Khai báo mảng 1 chiều (a) gồm 5 số nguyên từ 1 đến 5.
- Nhắp vào button In mảng (btnIn) sẽ in ra label (lblKQ) các giá trị trong mảng.
- Nhắp vào button Xóa (btnXoa) sẽ xóa trống nội dung của label (lblKQ).
- Nhắp vào button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo mảng: qua code, thêm đoạn code để được kết quả như sau:public partial class Form1 : Form{// Khai bao mang 1 chieu gom 5 so nguyen tu 1 den 5int[] a = { 1, 2, 3, 4, 5 };
}
- Nhắp đúp vào button In mảng, thêm đoạn code sau:// Xuat cac phan tu trong mang ra man hinhthis.lblKQ.Text="Các phần tử trong mảng là:\n\r";
for (int i=0; i < a.Length; i++) {this.lblKQ.Text += a[i]+" ";
}Có thể thay for bằng foreach như sauforeach (int phantu in a){this.lblKQ.Text += a[i]+" ";
}
- Nhắp đúp vào button Xóa, thêm đoạn code sau:this.lblKQ.Text = "";
- Nhắp đúp vào button Dừng, thêm đoạn code sau:Application.Exit();
Ví dụ 5.2: (Mảng 5 số nguyên)
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 5.2 như sau:
* Yêu cầu
- Thiết kế form: btnNhap, txtNhap, btnTang, btnGiam, lblKQ, btnIn, btnXoa, btnDung.- Khai báo mảng 1 chiều (a) chứa 5 số nguyên, số phần tử hiện có (sopt) là 0.
- Nhập số vào TextBox txtNhap, nhắp vào button Nhập 1 phần tử mảng (btnNhap) cho
phép đưa giá trị trong TextBox txtNhap vào mảng. Khi mảng đã đủ 5 số nguyên thì phải
thông báo “Mảng đã đầy” và không cho nhập nữa.
- Nhắp vào button Sắp tăng (btnTang) sẽ sắp xếp mảng theo thứ tự tăng dần.
- Nhắp vào button Sắp giảm (btnGiam) sẽ sắp xếp mảng theo thứ tự giảm dần.
- Nhắp vào button In mảng (btnIn) sẽ in ra label (lblKQ) các giá trị trong mảng.
- Nhắp vào button Xóa (btnXoa) sẽ xóa trống nội dung của label (lblKQ) đồng thời khai
báo lại số phần tử hiện có (sopt) của mảng là 0.
- Nhắp vào button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo mảng như sau:public partial class Form1 :
Form{// Khai bao mang 1 chieu gom 5 so nguyenint[] a = new int[5];
// Khai bao so phan tu hien co cua mangint sopt = 0;}
- Nhắp đúp vào button Nhập 1 phần tử mảng, thêm đoạn code sau:
// Nhap mot phan tu cho mangif (sopt == 5)MessageBox.Show("Mảng đã đầy!");
else{
a[sopt] = Convert.ToInt32(this.txtNhap.Text);
sopt++;
this.txtNhap.ResetText();this.txtNhap.Focus();
}
- Nhắp đúp vào button Sắp tăng, thêm đoạn code sau:
// Sap xep mang giamif (sopt == 0)this.lblKQ.Text = "Mảng rỗng!";
elseArray.Sort(a, 0, sopt);
this.lblKQ.Text = "Đã sắp xếp mảng tăng dần!";
- Nhắp đúp vào button Sắp giảm, thêm đoạn code sau:
// Sap xep mang giamif (sopt == 0)this.lblKQ.Text = "Mảng rỗng!";
elseArray.Reverse(a, 0, sopt);
this.lblKQ.Text = "Đã sắp xếp mảng giảm dần!";
- Nhắp đúp vào button Xóa, thêm đoạn code sau:this.lblKQ.Text = "";
sopt = 0;
this.txtNhap.Focus();
- Nhắp đúp vào button In mảng, thêm đoạn code sau:
// Xuat cac phan tu trong mang ra man hinhif (sopt==0)this.lblKQ.Text = "Mảng rỗng!";
else{this.lblKQ.Text="Các phần tử trong mảng là:\n\r";
for (int i = 0; i < sopt; i++)this.lblKQ.Text += a[i] + " ";
}
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
Application.Exit();
II. MẢNG NHIỀU CHIỀU
1. Định nghĩa
- Mảng đa chiều là mảng mà mỗi thành phần là một mảng khác.- Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là:
+ Mảng đa chiều cùng kích thước.
+ Mảng đa chiều khác kích thước.
- Trong phạm vi bài học này, ta chỉ khảo sát mảng 2 chiều mà thôi.2. Khai báo mảng 2 chiều<kiểu dữ liệu>[ , ] <tên mảng>
Ví dụ:
int[ , ] myRectangularArray ;
3. Khởi tạo thành phần của mảngint[] myRectangularArray = new int[sodong , socot] ;
4. Duyệt mảng 2 chiều
for (int i = 0; i < sodong; i++)
{for (int j = 0; j < socot; j++)
{
Xử lý myRectangularArray[i,j];
}
}
Ví dụ 5.3:* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 5.3 như sau:
- Thiết kế form như mẫu (lblKQ, btnIn, btnXoa, btnDung, btnNhap, btnSapXep).- Khai báo mảng 2 chiều gồm 4 dòng, 3 cột chứa các số nguyên.
- Nhắp vào button Nhập mảng để nhập các phần tử cho mảng (có giá trị = dòng - cột).
- Nhắp vào button Sắp Xếp sẽ sắp xếp mảng tăng dần theo từng hàng.
- Nhắp vào button In mảng (btnIn) sẽ in ra label (lblKQ) các giá trị trong mảng.
- Nhắp vào button Xóa (btnXoa) sẽ xóa trống nội dung của label (lblKQ).
- Nhắp vào button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo mảng: qua code, thêm đoạn code để được kết quả như sau:public partial class Form1 :
Form{ // Khai bao 4 dong 3 cotconst int sodong = 4;
const int socot = 3;
// Khai bao mang 2 chieu gom 4 dong, 3 cot chua 12 so
nguyenint[,] Array2 = new int[sodong,socot];
}
- Nhắp đúp vào button Nhập mảng, thêm đoạn code sau:
// Nhap cac phan tu cho mangfor (int i=0; i < sodong; i++)for (int j=0; j< socot; j++)
Array2[i,j]= i-j;
- Nhắp đúp vào button Sắp xếp, thêm đoạn code sau:
// Sap xep mangint[] t = new int[sodong * socot];
for (int i = 0; i < sodong; i++)
{for (int j = 0; j < socot; j++)
t[j] = Array2[i, j];
Array.Sort(t, 0, socot);
for (int j = 0; j < socot; j++)
Array2[i, j]=t[j];
}
- Nhắp đúp vào button In mảng, thêm đoạn code sau:
// Xuat cac phan tu trong mang ra man hinhthis.lblKQ.Text = "Các phần tử trong mảng là:\n\r";
for (int i = 0; i < sodong; i++)
{for (int j = 0; j < socot; j++)
{this.lblKQ.Text += Array2[i,j] + " ";
}this.lblKQ.Text += "\n\r";
}
- Nhắp đúp vào button Xóa, thêm đoạn code sau:this.lblKQ.Text = "";
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
Application.Exit();
III. STRINGArray2[i, j]=t[j];
}
- Nhắp đúp vào button In mảng, thêm đoạn code sau:
// Xuat cac phan tu trong mang ra man hinhthis.lblKQ.Text = "Các phần tử trong mảng là:\n\r";
for (int i = 0; i < sodong; i++)
{for (int j = 0; j < socot; j++)
{this.lblKQ.Text += Array2[i,j] + " ";
}this.lblKQ.Text += "\n\r";
}
- Nhắp đúp vào button Xóa, thêm đoạn code sau:this.lblKQ.Text = "";
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
Application.Exit();
1. Tạo một chuỗi
a. Chuỗi hằng
string TenChuoi = "Chuỗi" ;
Ví dụ:
string thongbao = "Đây là một câu thông báo." ;
Chú ý: Ta có 2 khai báo chuỗi sau là như nhau
string chuoi = "Dong mot \n Dong hai";
string chuoi = @"Dong mot
Dong hai";
b. Chuỗi dùng phương thức ToString
Ví dụ:
int myInt = 9 ;
string intString = myInt.ToString();
2. Thao tác trên chuỗiLớp string cung cấp rất nhiều các phương thức để so sánh, tìm kiếm, thay thế …;
các phương thức này được trình bày trong bảng sau:
Phương thức | Ý nghĩa |
Compare() | So sánh hai chuỗi (Chuỗi 1 ? Chuỗi 2) = (-1 ; 0 ; 1) tương ứng (<, =, >) |
Concat() | Nối chuỗi |
EndsWidth() | Xem chuỗi có kết thúc bằng một nhóm ký tự xác định hay không. |
IndexOf() | Chỉ ra vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi lớn. |
Insert() | Trả về một chuỗi mới đã được chèn thêm. |
LastIndexOf() | Chỉ ra vị trí xuất hiện cuối cùng của một chuỗi con trong chuỗi lớn. |
Length | Chiều dài của chuỗi. |
Remove() | Xoá đi một chuỗi con. |
Replace() | Thay thế chuỗi cũ bằng chuỗi mới. |
Split() | Trả về chuỗi con được phân định bởi ký tự xác định. |
StartsWidth() | Xem chuỗi có bắt đầu bằng một nhóm ký tự xác định hay không. |
Substring() | Lấy chuỗi con. |
ToLower() | Trả về bản sao của chuỗi ở kiểu chữ thường. |
ToUpper() | Trả về bản sao của chuỗi ở kiểu chữ IN HOA |
* Yêu cầu
- Thiết kế form gồm: lblTieuDe, lbl1, txtS1, lbl2, txtS2, lbl3, lblKQ, và các button (xem
hình).
- Nhắp vào button Compare: so sánh 2 chuỗi txtS1 và txtS2 (có phân biệt chữ HOA và
chữ thường), kết quả xuất trong lblKQ.
- Nhắp vào button COMPARE: so sánh 2 chuỗi txtS1 và txtS2 (không phân biệt chữ
HOA và chữ thường), kết quả xuất trong lblKQ.
- Nhắp vào button Concat, nối 2 chuỗi txtS1 và txtS2, kết quả xuất trong lblKQ.
- Nhắp button IndexOf, cho biết vị trí xuất hiện của chuỗi txtS2 trong chuỗi txtS1. Nếu
có txtS2 trong txtS1 thì thay thế txtS2 (trong txtS1) bằng chuỗi "CHỖ NÀY". Xuất kết quả
trong lblKQ.
- Nhắp vào button Insert, chèn chuỗi txtS2 vào sau từ đầu tiên của chuỗi txtS1;
và chèn chuỗi txtS2 vào trước từ sau cùng của chuỗi txtS1. Xuất kết quả trong lblKQ.
- Nhắp vào button Substring, cho biết vị trí xuất hiện của chuỗi "TRÌNH XỬ LÝ" trong
lblTieuDe. Nếu có thì xóa chuỗi ra khỏi lblTieuDe. Xuất kết quả trong lblKQ.
- Nhắp button Xóa thì xóa trống: TextBox txtS1, TextBox txtS2, Label lblKQ đồng thời
đưa con trỏ vào TextBox txtS1.
- Nhắp button Dừng thì dừng chương trình.
- Thiết kế form như yêu cầu.
- Nhắp đúp vào button Compare, thêm vào đoạn code:
string s1=this.txtS1.Text;
string s2=this.txtS2.Text;
// So sánh hai chuỗi với nhau có phân biệt chữ thường và
chữ hoaint kq = string.Compare(s1,s2);
this.lblKQ.Text = "txtS1 ";
if (kq == -1)this.lblKQ.Text += "<";
else if (kq == 0)this.lblKQ.Text += "=";
else
this.lblKQ.Text += ">";
this.lblKQ.Text += " txtS2";
- Nhắp đúp vào button COMPARE, thêm vào đoạn code:
string s1=this.txtS1.Text;
string s2=this.txtS2.Text;// So sánh hai chuỗi với nhau không phân biệt chữ thườngvà chữ hoaint kq = string.Compare(s1,s2, true);
this.lblKQ.Text = "txtS1 ";
if (kq == -1)this.lblKQ.Text += "<";
else if (kq == 0)this.lblKQ.Text += "=";
else
this.lblKQ.Text += ">";
this.lblKQ.Text += " txtS2";
- Nhắp đúp vào button Concat, thêm vào đoạn code:
string s1 = this.txtS1.Text;
string s2 = this.txtS2.Text;
// Nối chuỗi
this.lblKQ.Text = string.Concat(s1,s2);
- Nhắp đúp vào button IndexOf, thêm vào đoạn code:
string s1 = this.txtS1.Text;
string s2 = this.txtS2.Text;
// Chỉ ra vị trí xuất hiện của chuỗi 2 trong chuỗi 1if (s1.IndexOf(s2) >= 0)
{this.lblKQ.Text = "txtS2 xuất hiện trong txtS1 tại vị trí ";
this.lblKQ.Text += s1.IndexOf(s2);
this.lblKQ.Text += ".!";// Thay thế chuỗi s="CHỖ NÀY" vào vị trí chuỗi 2
trong chuỗi 1string s = "CHỖ NÀY";
this.lblKQ.Text += "\n\rThay thế txtS2 trong txtS1
bằng chuỗi CHỖ NÀY,";
this.lblKQ.Text+= "\n\rKết quả:"+s1.Replace(s2, s);
}else this.lblKQ.Text = "txtS2 không xuất hiện trong
txtS1!";
- Nhắp đúp vào button Insert, thêm vào đoạn code:
string s1 = this.txtS1.Text;
string s2 = this.txtS2.Text;
// Chèn chuỗi 2 vào sau từ đầu tiên của chuỗi 1
this.lblKQ.Text = "Chèn txtS2 vào sau từ đầu tiên của txtS1:\n\r";
this.lblKQ.Text += s1.Insert(s1.IndexOf(" "), s2);
// Chèn chuỗi 2 vào trước từ cuối cùng của chuỗi 1
this.lblKQ.Text += "\n\rChèn txtS2 vào trước từ cuối cùng của txtS1:\n\r ";
this.lblKQ.Text += s1.Insert(s1.LastIndexOf(" "), s2);
- Nhắp đúp vào button Substring, thêm vào đoạn code:
// Chỉ ra vị trí xuất hiện của s="TRÌNH XỬ LÝ" trong
lblTieuDe
string s="TRÌNH XỬ LÝ";
int ix;
ix = this.lblTieuDe.Text.IndexOf(s);
// Trích s từ lblTieuDe và in vào lblKQif (ix >= 0)
{this.lblKQ.Text = this.lblTieuDe.Text.Substring(ix,s.Length);
this.lblKQ.Text += " xuất hiện trong tiêu đề tại vịtrí ";
this.lblKQ.Text += ix;// Xóa s ra khỏi lblTieuDe
this.lblKQ.Text += "\n\rTiêu đề sau khi xóa " + s;
this.lblKQ.Text += "\n\rKết quả là: ";
this.lblKQ.Text += this.lblTieuDe.Text.Remove(ix,s.Length);
}
else this.lblKQ.Text = "Không xuất hiện trong chuỗi 1!";
- Nhắp đúp vào button Xóa, thêm vào đoạn code:this.txtS1.ResetText();
this.txtS2.ResetText();this.lblKQ.Text = "";
this.txtS1.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
4. Ví dụ 6.2* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 6.2 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txtHoTen, lbl2, lblKQ, và các button (xem hình).
- Nhắp vào button CountOfWord: đếm số từ trong chuỗi txtHoTen, kết quả xuất trong
lblKQ.
- Nhắp vào button Proper: đổi thành chữ Hoa Đầu Từ cho chuỗi txtHoTen, kết quả xuất
trong lblKQ.
- Nhắp vào button Left, lấy ra từ bên trái của chuỗi txtHoTen, kết quả xuất trong lblKQ.
- Nhắp vào button Right, lấy ra từ bên phải của chuỗi txtHoTen, kết quả xuất trong
lblKQ.
- Nhắp button Xóa thì xóa trống: TextBox txtS1, TextBox txtS2, Label lblKQ đồng thời
đưa con trỏ vào TextBox txtS1.
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Nhắp đúp vào button CountOfWord, thêm vào đoạn code:
// Đếm số từ trong chuỗi
// Tạo ra hằng ký tự khoảng trắngconst char Space =' ';
// Gán giá trị cho chuỗistring s = hoten.Trim();
// Thực hiện việc chia chuỗi vào mảng --> Đếm từ = độ dài
mảngint cWord = s.Split(Space).Length;)
// Gởi kết quả trả vềreturn cWord;
** Tham khảo thêm đoạn code sau:
// Đếm số từ trong chuỗi
txtHoTenint count=0;
string s=this.txtHoTen.Text.Trim();
for (int i = 0; i < s.Length-1; i++)if ((s.Substring(i, 1)==" ") && (s.Substring(i + 1,1)!=" "))
count++;
if (s.Length > 0) count++;
this.lblKQ.Text = "Số từ là: " + count;
- Nhắp đúp vào button Proper, thêm vào đoạn code:
// Đổi thành chữ Hoa Đầu Từ trong chuỗi txtHoTenstring s = this.txtHoTen.Text.Trim();
if (s.Length == 0)this.lblKQ.Text = "Chuỗi rỗng!";
else{this.lblKQ.Text = "Chuỗi kết quả là: ";
this.lblKQ.Text += s.Substring(0,1).ToUpper();
for (int i = 1; i < s.Length; i++)
{if ((s[i-1].ToString()==" ")&&(s[i].ToString()!=" "))
{string ss = s[i].ToString();
this.lblKQ.Text += ss.ToUpper();
- Thiết kế form gồm: lbl1, txtHoTen, lbl2, lblKQ, và các button (xem hình).
- Nhắp vào button CountOfWord: đếm số từ trong chuỗi txtHoTen, kết quả xuất trong
lblKQ.
- Nhắp vào button Proper: đổi thành chữ Hoa Đầu Từ cho chuỗi txtHoTen, kết quả xuất
trong lblKQ.
- Nhắp vào button Left, lấy ra từ bên trái của chuỗi txtHoTen, kết quả xuất trong lblKQ.
- Nhắp vào button Right, lấy ra từ bên phải của chuỗi txtHoTen, kết quả xuất trong
lblKQ.
- Nhắp button Xóa thì xóa trống: TextBox txtS1, TextBox txtS2, Label lblKQ đồng thời
đưa con trỏ vào TextBox txtS1.
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Nhắp đúp vào button CountOfWord, thêm vào đoạn code:
// Đếm số từ trong chuỗi
// Tạo ra hằng ký tự khoảng trắngconst char Space =' ';
// Gán giá trị cho chuỗistring s = hoten.Trim();
// Thực hiện việc chia chuỗi vào mảng --> Đếm từ = độ dài
mảngint cWord = s.Split(Space).Length;)
// Gởi kết quả trả vềreturn cWord;
** Tham khảo thêm đoạn code sau:
// Đếm số từ trong chuỗi
txtHoTenint count=0;
string s=this.txtHoTen.Text.Trim();
for (int i = 0; i < s.Length-1; i++)if ((s.Substring(i, 1)==" ") && (s.Substring(i + 1,1)!=" "))
count++;
if (s.Length > 0) count++;
this.lblKQ.Text = "Số từ là: " + count;
- Nhắp đúp vào button Proper, thêm vào đoạn code:
// Đổi thành chữ Hoa Đầu Từ trong chuỗi txtHoTenstring s = this.txtHoTen.Text.Trim();
if (s.Length == 0)this.lblKQ.Text = "Chuỗi rỗng!";
else{this.lblKQ.Text = "Chuỗi kết quả là: ";
this.lblKQ.Text += s.Substring(0,1).ToUpper();
for (int i = 1; i < s.Length; i++)
{if ((s[i-1].ToString()==" ")&&(s[i].ToString()!=" "))
{string ss = s[i].ToString();
this.lblKQ.Text += ss.ToUpper();
}
else this.lblKQ.Text += s[i].ToString();}
}
- Nhắp đúp vào button Left, thêm vào đoạn code:
// Từ đầu tiên của chuỗi txtHoTen
string s = this.txtHoTen.Text.Trim();
if (s.Length == 0)this.lblKQ.Text = "Chuỗi rỗng!";
else{this.lblKQ.Text = "Từ đầu tiên của chuỗi là: ";
this.lblKQ.Text += s.Substring(0, s.IndexOf(" "));
}
- Nhắp đúp vào button Right, thêm vào đoạn code:
// Từ cuối cùng của chuỗi txtHoTenstring s = this.txtHoTen.Text.Trim();
if (s.Length == 0)this.lblKQ.Text = "Chuỗi rỗng!";
else{this.lblKQ.Text = "Từ đầu tiên của chuỗi là: ";
this.lblKQ.Text += s.Substring(s.LastIndexOf(" ")+1,
s.Length-s.LastIndexOf(" ") - 1);
}- Nhắp đúp vào button Xóa, thêm vào đoạn code:
this.txtHoTen.ResetText();
this.lblKQ.Text = "";
this.txtHoTen.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
IV. EXCEPTION
1. Khái niệm
- Exception có thể được hiểu là bắt giữ lỗi với những đoạn mã hợp lệ để không tổn hại
đến chương trình.
- Lỗi có thể do nguyên nhân từ chính người sử dụng; hoặc có thể do những vấn đề không
mong đợi khác như: thiếu bộ nhớ, thiếu tài nguyên hệ thống ….
- Một trình xử lý ngoại lệ là một khối lệnh chương trình được thiết kế xử lý các ngoại lệ
mà chương trình phát sinh.
- Xử lý ngoại lệ được thực thi trong trong câu lệnh catch.
- Các câu lệnh có khả năng xảy ra ngoại lệ thực thi trong câu lệnh try.
* Một cách lý tưởng, nếu một ngoại lệ được bắt và được xử lý thì chương trình có thể sửa
chữa được vấn đề bị lỗi và tiếp tục thực hiện hoạt động. Thậm chí nếu chương trình không
tiếp tục, bằng việc bắt giữ ngoại lệ chúng ta cũng có cơ hội để in ra những thông điệp có ý
nghĩa và kết thúc chương trình một cách rõ ràng.
2. Ví dụ 6.3
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 6.3 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txtSo1, lbl2, txtSo2, lbl3, txtKQ và các button (xem hình).
- Nhập số vào 2 TextBox txtSo1 và TxtSo2.
- Nhắp vào button Chia:
+ Nếu txtSo1, txtSo2 không phải là số; hoặc nhập vào txtSo2 là 0 thì báo lỗi: “Lỗi rồi!”.
+ Nếu txtSo1, txtSo2 là số thì xuất kết quả là txtSo1 / txtSo2 vào TextBox txtKQ.
- Nhắp button Xóa thì xóa trống: TextBox txtS1, TextBox txtS2, Label lblKQ đồng thời
đưa con trỏ vào TextBox txtS1.
- Nhắp buuton Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Nhắp đúp vào button Chia, thêm vào đoạn code:
// Xóa trống TextBox txtKQtxtKQ.ResetText();
// Đoạn code có xảy ra ngoại lệ khi thực hiệntry{int so1 = int.Parse(this.txtSo1.Text);
int so2 = int.Parse(this.txtSo2.Text);
this.txtKQ.Text += (float)so1 / so2;
}// Xử lý ngoại lệcatch (Exception ex)
{this.txtKQ.Text = "Lỗi rồi!";
}
I. ĐỊNH NGHĨA LỚP (CLASS)
1. Định nghĩa lớp (class)
Khái niệm- Kiểu dữ liệu trong C# được định nghĩa là một lớp (class).
- Thể hiện riêng của từng lớp được gọi là đối tượng (object).
- Hai thành phần chính cấu thành một lớp (class) là thuộc tính / tính chất và phương thức
(method) / hành động ứng xử của đối tượng .
1. Cú pháp [Thuộc tính] [Bổ sung truy cập] class <Tên lớp> [: Lớp cơ sở]
{
// Các thuộc tính
<Thuộc tính>
// Các phương thức
<Phương thức>
}
2. Ví dụ 7.1
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 7.1 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txtHoTen, lbl2, lblKQ, và các button (xem hình).
- Tạo class Chuoi như sau:
public class Chuoi{// Thuộc tính...// Phương thức...
}
+ Trong phần thuộc tính, khai báo:
string tenchuongtrinh = "Chương trình xử lý họ và tên!";
+ Trong phần phương thức, khai báo các phương thức sau:
// Phương thứcpublic string In()
{
// In tên chương trìnhreturn tenchuongtrinh;
}
public string Ten(string hoten)
{
// Lấy tênint lio=hoten.LastIndexOf(" ");
return hoten.Substring(lio+1, hoten.Length-lio-1);
}
public string HoLot(string hoten)
{// Lấy họ và lótint lio = hoten.LastIndexOf(" ");
return hoten.Substring(0,lio);
}public int CountOfWord(string hoten)
{
// Đếm số từ trong chuỗi
// Tạo ra hằng ký tự khoảng trắngconst char Space =' ';
// Gán giá trị cho chuỗistring s = hoten.Trim();
// Thực hiện việc chia chuỗi thành mảng --> Đếm từcWord = s.Split(Space)).Length ;
// Gởi kết quả trả về return cWord;
}
** Tham khảo thêm đoạn code sau:
// Đếm số từ trong chuỗi HoTenint count = 0;
string s = hoten.Trim();
for (int i = 0; i < s.Length - 1; i++)if ((s.Substring(i,1)==" ")&&(s.Substring(i+1,1)!= " "))
count++;
if (s.Length > 0)
count++;
return count;
public string Proper(string hoten)
1. Khái niệm
- Exception có thể được hiểu là bắt giữ lỗi với những đoạn mã hợp lệ để không tổn hại
đến chương trình.
- Lỗi có thể do nguyên nhân từ chính người sử dụng; hoặc có thể do những vấn đề không
mong đợi khác như: thiếu bộ nhớ, thiếu tài nguyên hệ thống ….
- Một trình xử lý ngoại lệ là một khối lệnh chương trình được thiết kế xử lý các ngoại lệ
mà chương trình phát sinh.
- Xử lý ngoại lệ được thực thi trong trong câu lệnh catch.
- Các câu lệnh có khả năng xảy ra ngoại lệ thực thi trong câu lệnh try.
* Một cách lý tưởng, nếu một ngoại lệ được bắt và được xử lý thì chương trình có thể sửa
chữa được vấn đề bị lỗi và tiếp tục thực hiện hoạt động. Thậm chí nếu chương trình không
tiếp tục, bằng việc bắt giữ ngoại lệ chúng ta cũng có cơ hội để in ra những thông điệp có ý
nghĩa và kết thúc chương trình một cách rõ ràng.
2. Ví dụ 6.3
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 6.3 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txtSo1, lbl2, txtSo2, lbl3, txtKQ và các button (xem hình).
- Nhập số vào 2 TextBox txtSo1 và TxtSo2.
- Nhắp vào button Chia:
+ Nếu txtSo1, txtSo2 không phải là số; hoặc nhập vào txtSo2 là 0 thì báo lỗi: “Lỗi rồi!”.
+ Nếu txtSo1, txtSo2 là số thì xuất kết quả là txtSo1 / txtSo2 vào TextBox txtKQ.
- Nhắp button Xóa thì xóa trống: TextBox txtS1, TextBox txtS2, Label lblKQ đồng thời
đưa con trỏ vào TextBox txtS1.
- Nhắp buuton Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Nhắp đúp vào button Chia, thêm vào đoạn code:
// Xóa trống TextBox txtKQtxtKQ.ResetText();
// Đoạn code có xảy ra ngoại lệ khi thực hiệntry{int so1 = int.Parse(this.txtSo1.Text);
int so2 = int.Parse(this.txtSo2.Text);
this.txtKQ.Text += (float)so1 / so2;
}// Xử lý ngoại lệcatch (Exception ex)
{this.txtKQ.Text = "Lỗi rồi!";
}
CHƯƠNG 4: CLASS-OBJECT-MENTHOD
I. ĐỊNH NGHĨA LỚP (CLASS)
1. Định nghĩa lớp (class)
Khái niệm- Kiểu dữ liệu trong C# được định nghĩa là một lớp (class).
- Thể hiện riêng của từng lớp được gọi là đối tượng (object).
- Hai thành phần chính cấu thành một lớp (class) là thuộc tính / tính chất và phương thức
(method) / hành động ứng xử của đối tượng .
1. Cú pháp [Thuộc tính] [Bổ sung truy cập] class <Tên lớp> [: Lớp cơ sở]
{
// Các thuộc tính
<Thuộc tính>
// Các phương thức
<Phương thức>
}
2. Ví dụ 7.1
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 7.1 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txtHoTen, lbl2, lblKQ, và các button (xem hình).
- Tạo class Chuoi như sau:
public class Chuoi{// Thuộc tính...// Phương thức...
}
+ Trong phần thuộc tính, khai báo:
string tenchuongtrinh = "Chương trình xử lý họ và tên!";
+ Trong phần phương thức, khai báo các phương thức sau:
// Phương thứcpublic string In()
{
// In tên chương trìnhreturn tenchuongtrinh;
}
public string Ten(string hoten)
{
// Lấy tênint lio=hoten.LastIndexOf(" ");
return hoten.Substring(lio+1, hoten.Length-lio-1);
}
public string HoLot(string hoten)
{// Lấy họ và lótint lio = hoten.LastIndexOf(" ");
return hoten.Substring(0,lio);
}public int CountOfWord(string hoten)
{
// Đếm số từ trong chuỗi
// Tạo ra hằng ký tự khoảng trắngconst char Space =' ';
// Gán giá trị cho chuỗistring s = hoten.Trim();
// Thực hiện việc chia chuỗi thành mảng --> Đếm từcWord = s.Split(Space)).Length ;
// Gởi kết quả trả về return cWord;
}
** Tham khảo thêm đoạn code sau:
// Đếm số từ trong chuỗi HoTenint count = 0;
string s = hoten.Trim();
for (int i = 0; i < s.Length - 1; i++)if ((s.Substring(i,1)==" ")&&(s.Substring(i+1,1)!= " "))
count++;
if (s.Length > 0)
count++;
return count;
public string Proper(string hoten)
{
// Đổi thành chữ Hoa Đầu Từ trong chuỗi txtHoTen
// Tạo ra hằng ký tự khoảng trắngconst char Space = ' ';// Gán giá trị cho chuỗistring s = hoten.Trim();
// Đổi chuỗistring kq = "Chuỗi rỗng!";
if (s.Length == 0)
return kq;
else{
kq = "";
string [] s1 = s.Split(Space);
foreach (string tu in s1) {string ss = tu[0].ToString();
kq += ss.ToUpper();
kq += tu.Substring(1,tu.Length-1);
kq += " ";
}
return kq.Trim()
** Tham khảo thêm đoạn code sau:
// Đổi thành chữ Hoa Đầu Từ trong chuỗi txtHoTenstring s = hoten.Trim();
string kq = "Chuỗi rỗng!";
if (s.Length > 0)
{
kq = s.Substring(0, 1).ToUpper();
for (int i = 1; i < s.Length; i++)
{if ((s[i - 1].ToString() == " ") &&
(s[i].ToString() != " "))
{string ss = s[i].ToString();
kq += ss.ToUpper();
}else kq += s[i].ToString();
}
}
return kq;
- Sử dụng các phương thức trên để thực hiện các việc sau đây (xuất kết quả trong lblKQ):
+ Nhắp vào button In Lời giới thiệu, sẽ in lời giới thiệu.
+ Nhắp button Họ Lót, tách lấy họ lót của chuỗi trong txtHoTen.
+ Nhắp button Tên, tách lấy tên của chuỗi trong txtHoTen.
+ Nhắp button Đếm từ, đếm số từ của chuỗi trong txtHoTen.
+ Nhắp button Hoa Đầu Từ, đổi thành chuỗi Hoa Đầu Từ của chuỗi trong txtHoTen.
- Nhắp button Xóa thì xóa trống: TextBox txtHoTen, Label lblKQ đồng thời đưa con trỏ vào TextBox txtHoTen.
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo class: qua code, thêm đoạn code để được kết quả như saupublic Form1()
{
InitializeComponent();
}
public class Chuoi{
// Thuộc tính... (1)
// Phương thức... (2)}
+ Trong phần (1), khai báo thuộc tính (xem đề bài)
+ Trong phần (2), khai báo phương thức (xem đề bài)
- Nhắp đúp vào button In Lời giới thiệu, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = s.In();
- Nhắp đúp vào button Họ lót, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text="Họ lót: " + s.HoLot(this.txtHoTen.Text);
- Nhắp đúp vào button Tên, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Tên là: " + s.Ten(this.txtHoTen.Text);
- Nhắp đúp vào button Đếm từ, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Tổng số từ là: " ;
this.lblKQ.Text += s.CountOfWord(this.txtHoTen.Text);
- Nhắp đúp vào button Hoa Đầu Từ, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Kết quả là: " ;
this.lblKQ.Text += s.Proper(this.txtHoTen.Text);
- Nhắp đúp vào button Xóa, thêm vào đoạn code:
this.lblKQ.Text = "";this.txtHoTen.ResetText();
this.txtHoTen.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
* Bổ sung
- Nút button In Hoa: đổi thành chuỗi IN HOA của chuỗi trong txtHoTen .
- Nút button In Thường: đổi thành chuỗi in thường của chuỗi trong txtHoTen
- Nhắp button Dừng thì dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo class: qua code, thêm đoạn code để được kết quả như saupublic Form1()
{
InitializeComponent();
}
public class Chuoi{
// Thuộc tính... (1)
// Phương thức... (2)}
+ Trong phần (1), khai báo thuộc tính (xem đề bài)
+ Trong phần (2), khai báo phương thức (xem đề bài)
- Nhắp đúp vào button In Lời giới thiệu, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = s.In();
- Nhắp đúp vào button Họ lót, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text="Họ lót: " + s.HoLot(this.txtHoTen.Text);
- Nhắp đúp vào button Tên, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Tên là: " + s.Ten(this.txtHoTen.Text);
- Nhắp đúp vào button Đếm từ, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Tổng số từ là: " ;
this.lblKQ.Text += s.CountOfWord(this.txtHoTen.Text);
- Nhắp đúp vào button Hoa Đầu Từ, thêm vào đoạn code:
Chuoi s = new Chuoi();
this.lblKQ.Text = "Kết quả là: " ;
this.lblKQ.Text += s.Proper(this.txtHoTen.Text);
- Nhắp đúp vào button Xóa, thêm vào đoạn code:
this.lblKQ.Text = "";this.txtHoTen.ResetText();
this.txtHoTen.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
* Bổ sung
- Nút button In Hoa: đổi thành chuỗi IN HOA của chuỗi trong txtHoTen .
- Nút button In Thường: đổi thành chuỗi in thường của chuỗi trong txtHoTen
1. Thuộc tính (Properties):
Lưu hành nội bộ Trang 51Thuộc tính là những thông tin có thể thay đổi được.
Lưu hành nội bộ Trang 51Thuộc tính là những thông tin có thể thay đổi được.
2. Thuộc tính truy cập
3. Phương thức (Method)
- Phương thức (method) chính là các hàm (function) được tạo trong lớp (class).
- Tên của phương thức thường được đặt theo tên của hành động.4. Tham số của phương thức
a) Khái niệm:
- Các tham số theo sau tên phương thức và được bọc bên trong dấu ngoặc tròn ().
- Mỗi tham số phải khai báo kèm theo kiểu dữ liệu.
- Trong C# có 2 dạng truyền tham số:
+ Truyền tham chiếu: dùng thêm từ khóa ref.
+ Truyền tham trị
b) Ví dụ:
* Truyền tham số cho phương thức theo kiểu tham chiếu
Khi đó: khi gọi hàm HoanVi ta phải truyền tham số dưới dạng tham chiếu như sau:
HoanDoi s = new HoanDoi();
s.HoanVi(ref a, ref b);
* Truyền tham số cho phương thức theo kiểu tham trị
{
int c = a ;
a = b ;
b = c ;
}
}
5. Ví dụ 7.2* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 7.2 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txta, lbl2, txtb, và các button (xem hình).
- Tạo các class HoanDoi, trong class có hàm HoanVi cho phép hoán vị 2 giá trị số
nguyên.
- Nhắp button Hoán Đổi sẽ hoán đổi 2 giá trị trong txta và txtb
- Nhắp button Xóa sẽ xóa trống 2 TextBox và đưa con trỏ vào ô txta.
- Nhắp button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo class: qua code, thêm đoạn code để được kết quả như sau:
public Form1()
{
InitializeComponent();
}
public class HoanDoi{public void HoanVi(ref int a,ref int b)
{
int c = a ;
a = b ;
b = c ;
}
}
- Nhắp đúp vào button Hoán đổi, thêm vào đoạn code:
int a = int.Parse(this.txta.Text);
int b = int.Parse(this.txtb.Text);
HoanDoi s = new HoanDoi();
s.HoanVi(ref a, ref b);
this.txta.Text = a.ToString();
this.txtb.Text = b.ToString();
- Nhắp đúp vào button Xóa, thêm vào đoạn code:
this.txta.ResetText();
this.txtb.ResetText();
this.txta.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
I. TỔNG QUAN VỀ CSDL VÀ SQL
1. Khái niệm SQL- SQL (Structured Query Language – ngôn ngữ hỏi có cấu trúc) là công cụ sử dụng để tổ
chức, quản lý và truy xuất dữ liệu được lưu trữ trong các cơ sở dữ liệu.
- SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở
dữ liệu quan hệ.
- SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu
cung cấp cho người dùng bao gồm:
• Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu trúc
lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu.
• Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các thao
tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu.
• Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao tác
của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu.
• Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu
nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng
như các lỗi của hệ thống.2. Vai trò của SQL- SQL không phải là một hệ quản trị cơ sở dữ liệu, do nó không thể tồn tại độc lập.
- SQL là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các hệ quản trị cơ sở
dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở
dữ liệu.
- SQL có những vai trò như sau:
• SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các
trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận
kết quả trả về từ cơ sở dữ liệu.
• SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh
SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao
tiếp với cơ sở dữ liệu.
• SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ liệu
có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển
truy cập cơ sở dữ liệu, ...
• SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ
sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng
dụng phía máy khách với máy chủ cơ sở dữ liệu.
• SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ
Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương
tác với dữ liệu trong các cơ sở dữ liệu.
• SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân
tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và
nhận các yêu cầu truy xuất dữ liệu với nhau.
• SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ thống
mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được sử dụng
như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu.
3. Mô hình dữ liệu quan hệ
- CSDL quan hệ là một CSDL trong đó tất cả dữ liệu được tổ chức trong các bảng (table)
có mối quan hệ với nhau. Mỗi bảng (table) bao gồm các dòng (record/bản ghi/bộ) và các cột
(field/trường/thuộc tính).
- Tóm lại, một CSDL bao gồm nhiều bảng (table) có mối quan hệ với nhau (relationship).
Ví dụ:
Thuộc tính | Giới hạn truy cập |
public | Không hạn chế. Những thành viên được đánh dấu public có thể được dùng bất kỳ các phương thức của lớp, bao gồm cả những lớp khác. |
private | Thành viên trong lớp được đánh dấu private chỉ được dùng các phương thức của lớp này mà thôi. |
Protected | Thành viên trong lớp được đánh dấu protected chỉ được dùng các phương thức của lớp này; và các phương thức của lớp dẫn xuất từ lớp này. |
Internal | Thành viên trong lớp được đánh dấu là internal được dùng các phương thức của bất kỳ lớp nào cùng khối hợp ngữ với lớp này. |
protected internal | Thành viên trong lớp được đánh dấu là protected internal được dùng các phương thức của lớp này; các phương thức của lớp dẫn xuất từ lớp này; và các phương thức của bất kỳ lớp nào trong cùng khối hợp ngữ với lớp này. |
- Phương thức (method) chính là các hàm (function) được tạo trong lớp (class).
- Tên của phương thức thường được đặt theo tên của hành động.4. Tham số của phương thức
a) Khái niệm:
- Các tham số theo sau tên phương thức và được bọc bên trong dấu ngoặc tròn ().
- Mỗi tham số phải khai báo kèm theo kiểu dữ liệu.
- Trong C# có 2 dạng truyền tham số:
+ Truyền tham chiếu: dùng thêm từ khóa ref.
+ Truyền tham trị
b) Ví dụ:
* Truyền tham số cho phương thức theo kiểu tham chiếu
public class Hoandoi { public void HoanVi(ref int a, ref int b) { int c = a ; a = b ; b = c ; } } |
HoanDoi s = new HoanDoi();
s.HoanVi(ref a, ref b);
* Truyền tham số cho phương thức theo kiểu tham trị
public class HoanDoi { public void HoanVi(int a, int b) |
int c = a ;
a = b ;
b = c ;
}
}
5. Ví dụ 7.2* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 7.2 như sau:
* Yêu cầu
- Thiết kế form gồm: lbl1, txta, lbl2, txtb, và các button (xem hình).
- Tạo các class HoanDoi, trong class có hàm HoanVi cho phép hoán vị 2 giá trị số
nguyên.
- Nhắp button Hoán Đổi sẽ hoán đổi 2 giá trị trong txta và txtb
- Nhắp button Xóa sẽ xóa trống 2 TextBox và đưa con trỏ vào ô txta.
- Nhắp button Dừng sẽ dừng chương trình.
* Hướng dẫn
- Thiết kế form như yêu cầu.
- Khai báo class: qua code, thêm đoạn code để được kết quả như sau:
public Form1()
{
InitializeComponent();
}
public class HoanDoi{public void HoanVi(ref int a,ref int b)
{
int c = a ;
a = b ;
b = c ;
}
}
- Nhắp đúp vào button Hoán đổi, thêm vào đoạn code:
int a = int.Parse(this.txta.Text);
int b = int.Parse(this.txtb.Text);
HoanDoi s = new HoanDoi();
s.HoanVi(ref a, ref b);
this.txta.Text = a.ToString();
this.txtb.Text = b.ToString();
- Nhắp đúp vào button Xóa, thêm vào đoạn code:
this.txta.ResetText();
this.txtb.ResetText();
this.txta.Focus();
- Nhắp đúp vào button Dừng, thêm vào đoạn code:
Application.Exit();
CHƯƠNG 5: SQL SERVER
I. TỔNG QUAN VỀ CSDL VÀ SQL
1. Khái niệm SQL- SQL (Structured Query Language – ngôn ngữ hỏi có cấu trúc) là công cụ sử dụng để tổ
chức, quản lý và truy xuất dữ liệu được lưu trữ trong các cơ sở dữ liệu.
- SQL là một hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở
dữ liệu quan hệ.
- SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu
cung cấp cho người dùng bao gồm:
• Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu trúc
lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu.
• Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các thao
tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu.
• Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao tác
của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu.
• Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu
nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng
như các lỗi của hệ thống.2. Vai trò của SQL- SQL không phải là một hệ quản trị cơ sở dữ liệu, do nó không thể tồn tại độc lập.
- SQL là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các hệ quản trị cơ sở
dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở
dữ liệu.
- SQL có những vai trò như sau:
• SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các
trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận
kết quả trả về từ cơ sở dữ liệu.
• SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh
SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao
tiếp với cơ sở dữ liệu.
• SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ liệu
có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển
truy cập cơ sở dữ liệu, ...
• SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ
sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng
dụng phía máy khách với máy chủ cơ sở dữ liệu.
• SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ
Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương
tác với dữ liệu trong các cơ sở dữ liệu.
• SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân
tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và
nhận các yêu cầu truy xuất dữ liệu với nhau.
• SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ thống
mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được sử dụng
như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu.
3. Mô hình dữ liệu quan hệ
- CSDL quan hệ là một CSDL trong đó tất cả dữ liệu được tổ chức trong các bảng (table)
có mối quan hệ với nhau. Mỗi bảng (table) bao gồm các dòng (record/bản ghi/bộ) và các cột
(field/trường/thuộc tính).
- Tóm lại, một CSDL bao gồm nhiều bảng (table) có mối quan hệ với nhau (relationship).
Ví dụ:
II. TỔNG QUAN VỀ CSDL VÀ SQL
1. Bảng (table) bao gồm các yếu tố sau:
- Tên của bảng: được xác định duy nhất.
- Cấu trúc của bảng: tập hợp các cột (field/trường/thuộc tính).
- Dữ liệu của bảng: tập hợp các dòng (record/bản ghi/bộ) hiện có trong bảng.
Ví dụ: Table DONVI
2. Khóa chính của bảng (Primary Key)
- Mỗi bảng phải có một cột (hoặc một tập các cột) mà giá trị dữ liệu của nó xác định duy
nhất một dòng trong tập hợp các dòng trong bảng.
- Một cột (hoặc một tập các cột) có tính chất này gọi là khóa chính của bảng (Primary
Key).
Ví dụ: Table DONVI (Key la MA DON VI)
3. Mối quan hệ (Relationship) và khóa ngoại (Foreign Key)- Mối quan hệ (Relationship) được thể hiện thông qua ràng buộc giá trị dữ liệu xuất hiện
ở bảng này phải có xuất hiện trước ở một bảng khác.
ở bảng này phải có xuất hiện trước ở một bảng khác.
- Một cột (hoặc tập hợp các cột) (field/trường/thuộc tính) trong một bảng mà giá trị của
nó được xác định từ khóa chính (Primary Key) của một bảng khác được gọi là khóa ngoại
(Foreign Key).
nó được xác định từ khóa chính (Primary Key) của một bảng khác được gọi là khóa ngoại
(Foreign Key).
4. Sơ lược về câu lệnh SQL
Câu lệnh Chức năng
Thao tác dữ liệu
SELECT Truy xuất dữ liệu
INSERT Bổ sung dữ liệu
UPDATE Cập nhật dữ liệu
DELETE Xóa dữ liệu
TRUNCATE Xóa toàn bộ dữ liệu trong bảng
Định nghĩa dữ liệu
CREATE TABLE Tạo bảng
DROP TABLE Xóa bảng
ALTER TABLE Sửa cấu trúc bảng
CREATE FUNCTION Tạo hàm (do người sử dụng định nghĩa)
ALTER FUNCTION Sửa đổi hàm
DROP FUNCTION Xóa hàm
CREATE TRIGGER | Tạo trigger |
ALTER TRIGGER | Sửa trigger |
DROP TRIGGER | Xóa trigger |
nhiên là phải được phép) thì tên của bảng phải được viết sau tên của người sở hữu và phân
cách với tên người sở hữu bởi dấu chấm theo công thức: tên_người_sở_hữu.tên_bảng- Trong câu lệnh SQL, nếu có sử dụng từ hai cột trở lên có cùng tên trong các bảng khác
nhau thì bắt buộc phải chỉ định thêm tên bảng trước tên cột; tên bảng và tên cột được phân
cách nhau bởi dấu chấm theo công thức: tên_bảng.tên_cột
6. Kiểu dữ liệu
7. Toán tử
III. Table (Bảng)
Tên kiểu | Mô tả |
CHAR (n) | Kiểu chuỗi với độ dài cố định |
NCHAR (n) | Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE |
VARCHAR (n) | Kiểu chuỗi với độ dài chính xác |
NVARCHAR (n) | Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE |
INTEGER | Số nguyên có giá trị từ -231 đến 231 – 1 |
INT | Như kiểu Integer |
TINYTINT | Số nguyên có giá trị từ 0 đến 255 |
SMALLINT | Số nguyên có giá trị từ -215 đến 215 – 1 |
BIGINT | Số nguyên có giá trị từ -263 đến 263 – 1 |
NUMERIC (p,s) | Kiểu số với độ chính xác cố định |
DECIMAL (p,s) | Tương tự kiểu Numeric |
FLOAT | Số thực có giá trị từ -1.79E+308 đến 1.79E+308 |
REAL | Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38 |
MONEY | Kiểu tiền tệ |
BIT | Kiểu bit (có giá trị 0 hoặc 1) |
DATETIME | Kiểu ngày giờ (chính xác đến phần trăm của giây) |
SMALLDATETIME | Kiểu ngày giờ (chính xác đến phút) |
BINARY | Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes) |
VARBINARY | Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes) |
IMAGE | Dữ liệu nhị phân với độ dài chính xác (<= 2,147,483,647 bytes) |
TEXT | Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự) |
NTEXT | Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ UNICODE (tối đa 1,073,741,823 ký tự) |
Toán tử | Ý nghĩa |
a) Logic | |
AND / OR | Và / Hoặc |
b) So sánh | |
= | Bằng |
> | Lớn hơn |
< | Nhỏ hơn |
>= | Lớn hơn hoặc bằng |
<= | Nhỏ hơn hoặc bằng |
<> | Khác |
!> | Không lớn hơn |
!< | Không nhỏ hơn |
c) Danh sách | |
IN | Nằm trong danh sách |
NOT IN | Không nằm trong danh sách |
d) Giới hạn dữ liệu | |
BETWEEN | Giá_trị BETWEEN a AND b nghĩa là (a ≤ Giá_trị ≤ b) |
NOT BETWEEN | Giá_trị NOT BETWEEN a AND b nghĩa là (Giá_trị < a) AND (Giá_trị > b) |
LIKE | Mô tả khuôn dạng dữ liệu cần tìm kiếm có sử dụng ký tự đại diện: |
% | Chuỗi ký tự bất kỳ |
_ | Một ký tự bất kỳ |
[] | Ký tự bất kỳ trong giới hạn được chỉ định |
[^] | Ký tự bất kỳ không nằm trong giới hạn được chỉ định |
* Quy tắc khi viết câu lệnh SQL:- Các câu lệnh SQL không phân biệt chữ hoa và chữ thường. Tuy nhiên, để dễ đọc nên
viết hoa từ khóa trong mệnh đề.
- Câu lệnh SQL có thể viết trên một dòng hay nhiều dòng. Nhưng nên viết mỗi dòng một
mệnh đề.
- Không tách từ khóa trên nhiều dòng, không viết tắt từ khóa.
- Câu lệnh SQL kết thúc bằng dấu chấm phẩy (;)1. Tạo bảngCú pháp:
CREATE TABLE tên_bảng
(
thuộc_tính_cột Gồm:
• Kiểu dữ liệu của cột (field).
• Giá trị mặc định của cột (filed).
• IDENTITY - giá trị tự động tăng, dùng với field kiểu số.
• NULL / NOT NULL
ạo bảng NHANVIEN gồm các field MANV (mã nhân viên), HOTEN (họ và tên),
NGAYSINH (ngày sinh của nhân viên), DIACHI (địa chỉ của nhân viên), HSLUONG (hệ số
lương), MADONVI (mã đơn vị).
* Hướng dẫn:
CREATE TABLE nhanvien
(
)2. Tạo ràng buộca. Ràng buộc CHECK:- Chỉ định điều kiện hợp lệ đối với dữ liệu khi có sự thay đổi dữ liệu trên bảng.
- Dùng với các lệnh INSERT, UPDATE.
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)Ví dụ 8.2:
Tạo bảng NHANVIEN như ví dụ 8.1, trong đó:
- NGAYSINH < '1/1/1990'
- DIENTHOAI của nhân viên là một chuỗi 6 chữ số.
* Hướng dẫn:
CREATE TABLE nhanvien
(
)b. Ràng buộc PRIMARY KEY:- Chỉ định khoá chính của bảng.
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
PRIMARY KEY [(danh_sách_cột)]
Lưu ý:
• Mỗi bảng có nhiều nhất một ràng buộc PRIMARY KEY.
• Một khoá chính có thể bao gồm nhiều cột nhưng không vượt quá 16 cột.
viết hoa từ khóa trong mệnh đề.
- Câu lệnh SQL có thể viết trên một dòng hay nhiều dòng. Nhưng nên viết mỗi dòng một
mệnh đề.
- Không tách từ khóa trên nhiều dòng, không viết tắt từ khóa.
- Câu lệnh SQL kết thúc bằng dấu chấm phẩy (;)1. Tạo bảngCú pháp:
CREATE TABLE tên_bảng
(
tên_cột [ , ... | thuộc_tính_cột | các_ràng_buộc |
, tên_cột_n thuộc_tính_cột_n [ , các_ràng_buộc_trên_bảng ] | các_ràng_buộc_cột_n ] | ) |
Trong đó:tên_bảng tên_cột | ||
Tên của bảng cần tạo (<=128 ký tự) Tên của cột (field / trường) cần định nghĩa |
• Kiểu dữ liệu của cột (field).
• Giá trị mặc định của cột (filed).
• IDENTITY - giá trị tự động tăng, dùng với field kiểu số.
• NULL / NOT NULL
các_ràng_buộc Ví dụ 8.1: | Các ràng buộc được sử dụng trên mỗi cột (field) hoặc trên bảng. |
NGAYSINH (ngày sinh của nhân viên), DIACHI (địa chỉ của nhân viên), HSLUONG (hệ số
lương), MADONVI (mã đơn vị).
* Hướng dẫn:
CREATE TABLE nhanvien
(
manv hoten | NVARCHAR(10) NVARCHAR(50) | NOT NULL, NOT NULL, NULL, NULL, NULL, DEFAULT (1.92) NOT NULL |
ngaysinh DATE | ||
diachi | NVARCHAR(100) | |
dienthoai NVARCHAR(10) | ||
hsluong | DECIMAL(3,2) | |
madonvi NVARCHAR(10) |
- Dùng với các lệnh INSERT, UPDATE.
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
CHECK (điều_kiện)Ví dụ 8.2:
Tạo bảng NHANVIEN như ví dụ 8.1, trong đó:
- NGAYSINH < '1/1/1990'
- DIENTHOAI của nhân viên là một chuỗi 6 chữ số.
* Hướng dẫn:
CREATE TABLE nhanvien
(
manv hoten | NVARCHAR(10) NVARCHAR(50) | NOT NULL, NOT NULL, NULL |
ngaysinh DATE | ||
CONSTRAINT CK_nhanvien_ngaysinh CHECK (ngaysinh < '1/1/1990'), | ||
diachi | NVARCHAR(100) | NULL, NULL, |
dienthoai NVARCHAR(10) | ||
CONSTRAINT CK_nhanvien_dienthoai CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]____') | ||
hsluong | DECIMAL(3,2) | DEFAULT (1.92) NOT NULL |
madonvi NVARCHAR(10) |
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
PRIMARY KEY [(danh_sách_cột)]
Lưu ý:
• Mỗi bảng có nhiều nhất một ràng buộc PRIMARY KEY.
• Một khoá chính có thể bao gồm nhiều cột nhưng không vượt quá 16 cột.
Ví dụ 8.3:
Tạo bảng NHANVIEN như ví dụ 8.2, với khoá chính là MANV* Hướng dẫn:
CREATE TABLE nhanvien
(
manv hoten | NVARCHAR(10) NVARCHAR(50) | NOT NULL, NOT NULL, NULL |
ngaysinh DATE | ||
CONSTRAINT CK_nhanvien_ngaysinh CHECK (ngaysinh < '1/1/1990'), | ||
diachi | NVARCHAR(100) | NULL, NULL, |
dienthoai NVARCHAR(10) | ||
CONSTRAINT CK_nhanvien_dienthoai CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]____') | ||
hsluong | DECIMAL(3,2) | DEFAULT (1.92) NOT NULL, |
madonvi NVARCHAR(10) |
)c. Ràng buộc UNIQUE:- Chỉ định khoá phụ cho bảng.
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
UNIQUE [(danh_sách_cột)]Ví dụ 8.4:
Tạo bảng NHANVIEN như ví dụ 8.3, trong đó không cho phép các nhân viên khác nhau
được trùng điện thoại với nhau.
* Hướng dẫn:
CREATE TABLE nhanvien
(
manv hoten | NVARCHAR(10) NVARCHAR(50) | NOT NULL, NOT NULL, NULL |
ngaysinh DATE | ||
CONSTRAINT CK_nhanvien_ngaysinh CHECK (ngaysinh < '1/1/1990'), | ||
diachi | NVARCHAR(100) | NULL, NULL, |
dienthoai NVARCHAR(10) | ||
CONSTRAINT CK_nhanvien_dienthoai CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]____') | ||
hsluong | DECIMAL(3,2) | DEFAULT (1.92) NOT NULL, |
madonvi NVARCHAR(10) |
CONSTRAINT UNIQUE_nhanvien_dienthoai UNIQUE(dienthoai)
)d. Ràng buộc FOREIGN KEY (khóa ngoại)- Một cột (hay một tập các cột) trong một bảng được gọi là khoá ngoại (ràng buộc
FOREIGN KEY) nếu giá trị của nó được xác định từ khoá chính (PRIMARY KEY) hoặc
khoá phụ (UNIQUE) của một bảng dữ liệu khác.
Cú pháp:
[CONSTRAINT tên_ràng_buộc]
FOREIGN KEY [(danh_sách_cột)]
REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)
[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Trong đó:· CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật).· NO ACTION (Mặc định): Nếu bản ghi trong bảng tham chiếu đang được tham chiếu
bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bàn ghi đó không được phép
xoá hoặc cập nhật (đối với cột được tham chiếu).· SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu cột cho
phép nhận giá trị NULL).· SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu cột
có qui định giá trị mặc định).Ví dụ 8.5:
Tạo bảng NHANVIEN như ví dụ 8.4, trong đó khoá ngoài trên cột MADONVI (bảng
DONVI). Giả sử rằng bảng DONVI đã được định nghĩa.
* Hướng dẫn:
CREATE TABLE nhanvien
(
CONSTRAINT PK_nhanvien_manv PRIMARY KEY,
CONSTRAINT UNIQUE_nhanvien_dienthoai UNIQUE(dienthoai) ,
CONSTRAINT FK_nhanvien_madonvi
FOREIGN KEY(madonvi)
REFERENCES donvi(madonvi)
ON DELETE CASCADE
ON UPDATE CASCADE
)3. Sửa cấu trúc bảnga. Cú phápALTER TABLE tên_bảng
ADD định_nghĩa_cột |
ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] |
DROP COLUMN tên_cột |
ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |
DROP CONSTRAINT tên_ràng_buộcb. Ví dụ 8.6
REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)
[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Trong đó:· CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật).· NO ACTION (Mặc định): Nếu bản ghi trong bảng tham chiếu đang được tham chiếu
bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bàn ghi đó không được phép
xoá hoặc cập nhật (đối với cột được tham chiếu).· SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu cột cho
phép nhận giá trị NULL).· SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu cột
có qui định giá trị mặc định).Ví dụ 8.5:
Tạo bảng NHANVIEN như ví dụ 8.4, trong đó khoá ngoài trên cột MADONVI (bảng
DONVI). Giả sử rằng bảng DONVI đã được định nghĩa.
* Hướng dẫn:
CREATE TABLE nhanvien
(
manv hoten | NVARCHAR(10) NVARCHAR(50) | NOT NULL, NOT NULL, NULL |
ngaysinh DATE | ||
CONSTRAINT CK_nhanvien_ngaysinh CHECK (ngaysinh < '1/1/1990'), | ||
diachi | NVARCHAR(100) | NULL, NULL, |
dienthoai NVARCHAR(10) | ||
CONSTRAINT CK_nhanvien_dienthoai CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]____') | ||
hsluong | DECIMAL(3,2) | DEFAULT (1.92) NOT NULL, |
madonvi NVARCHAR(10) |
CONSTRAINT UNIQUE_nhanvien_dienthoai UNIQUE(dienthoai) ,
CONSTRAINT FK_nhanvien_madonvi
FOREIGN KEY(madonvi)
REFERENCES donvi(madonvi)
ON DELETE CASCADE
ON UPDATE CASCADE
)3. Sửa cấu trúc bảnga. Cú phápALTER TABLE tên_bảng
ADD định_nghĩa_cột |
ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] |
DROP COLUMN tên_cột |
ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc |
DROP CONSTRAINT tên_ràng_buộcb. Ví dụ 8.6
Bổ sung vào bảng DONVI ở ví dụ 8.5, cột GHICHU
* Hướng dẫn:
ALTER TABLE nhanvien
ADD
ghichu NVARCHAR(50)4. Xóa bảnga. Cú phápDROP TABLE tên_bảngb. Ví dụ 8.7:Xoá bảng DONVI ra khỏi CSDL.
Lưu ý: Cột MADONVI trong bảng DONVI đang được tham chiếu bởi khoá ngoài
FK_nhanvien_madonvi trong bảng NHANVIEN.
* Hướng dẫn:
- Xoá bỏ ràng buộc FK_nhanvien_madonvi khỏi bảng NHANVIEN
ALTER TABLE nhanvien
DROP CONSTRAINT FK_nhanvien_madonvi
- Xoá bảng DONVI:
DROP TABLE donvi
* Hướng dẫn:
ALTER TABLE nhanvien
ADD
ghichu NVARCHAR(50)4. Xóa bảnga. Cú phápDROP TABLE tên_bảngb. Ví dụ 8.7:Xoá bảng DONVI ra khỏi CSDL.
Lưu ý: Cột MADONVI trong bảng DONVI đang được tham chiếu bởi khoá ngoài
FK_nhanvien_madonvi trong bảng NHANVIEN.
* Hướng dẫn:
- Xoá bỏ ràng buộc FK_nhanvien_madonvi khỏi bảng NHANVIEN
ALTER TABLE nhanvien
DROP CONSTRAINT FK_nhanvien_madonvi
- Xoá bảng DONVI:
DROP TABLE donvi
5. Thực hành
1. Khởi động SQL SERVER 2013:
a. Start à All programs à Microsoft SQL Server 2013 à SQL Server Management Studio
b. Chứng thực: chọn 1 trong 2 chế độ- Là của Windows- Là của SQL Server
a. Start à All programs à Microsoft SQL Server 2013 à SQL Server Management Studio
b. Chứng thực: chọn 1 trong 2 chế độ- Là của Windows- Là của SQL Server
c. Chọn Connect2. Tạo database:
Ở cửa sổ Object Explorer, click chuột phải vào Database sau đó chọn New database- Database nane: banhang- Chọn Ok3. Tạo cấu trúc table:
a. Tạo table Nhanvien
* Ở cửa sổ Object Explorer:Ở cửa sổ Object Explorer, click chuột phải vào Database sau đó chọn New database- Database nane: banhang- Chọn Ok3. Tạo cấu trúc table:
a. Tạo table Nhanvien
- Nhắp dấu + trước database banhang (thành dấu -)
- Click chuột phải vào Table sau đó chọn New table- Khai báo cấu trúc: Ví dụ 8.1- Lưu: nhắpb. Tạo table Donvi : tự thực hiện.
4. Tạo ràng buộc cho table* Chọn table Nhanviena. Ràng buộc CHECKVí dụ 8.2* Ở cửa sổ hiển thị cấu trúc của table Nhanvien
- Click chuột phải vào field ngaysinh, chọn CheckConstraints …- Nhắp Add+ (Name): gõ CK_nhanvien_ngaysinh
Expression: gõ ([ngaysinh] < '1/1/1990')- Nhắp Add (lần 2)
+ (Name): gõ CK_nhanvien_dienthoai
+ Expression: gõ (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]____')
- Nhắp Close* Chọn table Donvi: tự thực hiện cho field dienthoai.b. Ràng buộc PRIMARY KEY* Chọn table NhanvienVí dụ 8.3* Ở cửa sổ hiển thị cấu trúc của table Nhanvien
- Click phải chuột vào field manv và chọn Set Primary Key* Cho table Donvi: tự thực hiện cho field madonvi .c. Ràng buộc UNIQUE* Chọn table NhanvienVí dụ 8.4* Ở cửa sổ hiển thị cấu trúc của table Nhanvien
- Click phải chuột vào field dienthoai và chọn Indexes / Keys…- Nhắp Add+ (Name): gõ UNIQUE_nhanvien_dienthoai
+ Columns: dienthoai (ASC)
+ Type: Unique Key
- Nhắp Close5. Tạo quan hệ (relationship) cho các table: Donvi, NhanvienVí dụ 8.5* Ở cửa sổ Object Explorer
- Click chuột phải vào Database Diagrams sau đó chọn New database Diagram- Chọn các table tham gia tạo quan hệ, nhắp Close.
- Rê field madonvi (từ table nhanvien) thả vào field madonvi (của table donvi).
- Khai báo:
Primary key table | Foreign key table |
Donvi | Nhanvien |
madonvi | madonvi |
- Khai báo (ở cuối) thêm field: ghichu, nvarchar(50), NULL
7. Nhập dữ liệu cho các table: Donvi, Nhanvien
* Ở cửa sổ Object Explorer:
- Click chuột phải vào dbo.donvi / dbo.nhanvien sau đó chọn Edit top 200 Rows- Nhập dữ liệu
III. CÂU LỆNH TRUY VẤN
* Xét CSDL banhang gồm các table:
NHANVIEN, DONVI, MATHANG, NHATKYBANHANG
- Cấu trúc:
- Dữ liệu:
1. Câu lệnh SELECTCông dụng:
- Chọn các field từ bảng.
Cú pháp:
SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn
[INTO tên_bảng_mới]
FROM danh_sách_bảng [ | khung_nhìn]
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
Chú ý: Các thành phần trong câu lệnh SELECT phải được sử dụng theo đúng thứ tự trên.c. Danh sách chọn trong câu lệnh SELECT- Chọn tất cả các fieldVí dụ 9.1a:
Câu lệnh sau đây cho biết thông tin của các nhân viên trong bảng NHANVIEN.
SELECT * FROM nhanvien n1- Đổi tên các cột trong kết quảVí dụ 9.1b:
Câu lệnh sau đây cho biết HOTEN (họ tên) được đổi thành Họ và Tên, DIACHI (địa chỉ)
được đổi thành Địa Chỉ của các nhân viên trong bảng NHANVIEN.
SELECT 'Họ và Tên' = hoten, 'Địa Chỉ' = diachi
FROM nhanvien
Hoặc:
SELECT hoten 'Họ và Tên', diachi 'Địa Chỉ'
FROM nhanvien- Sử dụng cấu trúc CASE để đổi tên các cột trong kết quảVí dụ 9.1c:
Câu lệnh sau đây cho biết HOTEN (họ tên), HSLUONG (hệ số lương) và (xếp loại lương)
của các nhân viên trong bảng NHANVIEN theo HSLUONG (hệ số lương).
SELECT 'Họ và Tên'= hoten, 'Hệ số lương' = hsluong, 'Hệ số lương' =
CASE
WHEN hsluong = NULL WHEN hsluong <= 1.92 WHEN hsluong <= 3.11 WHEN hsluong <= 5.2 ELSE 'Lương rất cao' | THEN 'Không xác định' THEN 'Lương thấp' THEN 'Lương trung bình' THEN 'Lương cao' |
FROM nhanvien- Thêm chuỗi ký tự trong kết quảVí dụ 9.1d:
Câu lệnh sau đây sẽ cho thêm chuỗi 'Hệ số lương là:' ở trước cột HSLUONG (hệ số
lương) trong từng dòng kết quả.
SELECT 'Họ và Tên' = hoten, 'Hệ số lương là:', 'Hệ số lương' = hsluong
FROM nhanvien- Tính toán các giá trị trong câu lệnh SELECT
Ví dụ 9.1e:
Câu lệnh sau đây sẽ cho HOTEN (họ tên) và LUONG (lương) của nhân viên theo công
thức LUONG = HSLUONG * 730000.
SELECT 'Họ và Tên' = hoten, 'Lương' = hsluong * 730000
FROM nhanvien- Từ khóa DISTINCT: dùng để loại bỏ những dòng dữ liệu có kết quả giống nhauVí dụ 9.1f:
Câu lệnh sau sẽ cho các giá trị hsluong khác nhau trong bảng NHANVIEN
SELECT hsluong
FROM nhanvien- Tạo bảng mới bằng câu lệnh SELECT … INTOVí dụ 9.1g:
Câu lệnh sau sẽ tạo bảng có tên NHANVIEN_LUU gồm các field HOTEN (họ tên),
DIACHI (địa chỉ) của các nhân viên có HSLUONG > 1.92 từ bảng NHANVIEN.
SELECT hoten, diachi
INTO nhanvien_luu
FROM nhanvien
WHERE hsluong > 1.92- Sắp xếp kết quả (ASC: tăng, DESC: giảm) bằng ORDER BYVí dụ 9.1h:
Câu lệnh sau đây sẽ sắp xếp các nhân viên theo thứ tự giảm dần của HSLUONG (hệ số
lương), nếu HSLUONG bằng nhau thì sắp xếp kết quả theo thứ tự tăng dần của NGAYSINH
(ngày sinh)
SELECT hoten, ngaysinh, hsluong
FROM nhanvien
ORDER BY hsluong DESC, ngaysinh ASCd. Xác định bảng bằng mệnh đề FROMFROM danh_sách_bảng [ | khung_nhìn]Ví dụ 9.1i:
Câu lệnh sau đây cho biết HOTEN (họ tên), DIACHI (địa chỉ) của các nhân viên bằng
cách gán bí danh (alias) cho bảng NHANVIEN.
SELECT hoten, diachi
FROM nhanvien n1e. Đặt điều kiện truy xuất dữ liệu bằng mệnh đề WHEREWHERE điều_kiện
điều_kiện: sử dụng các phép toán sau
+ So sánh: = , > , < , >= , <= , <> , !> , !<
+ Giới hạn: BETWEEN … AND … , NOT BETWEEN … AND …
+ Danh sách: IN , NOT IN
+ Khuôn dạng: LIKE , NOT LIKE
Với các ký tự đại diện: % , _ , [] , [^]
+ Các giá trị chưa biết: IS NULL , IS NOT NULL
+ Kết hợp các điều kiện: AND , ORVí dụ 9.1j:
Câu lệnh sau đây cho biết HOTEN (họ tên), DIACHI (địa chỉ) và DIENTHOAI (điện
thoại) của các nhân viên có HSLUONG (hệ số lương) lớn hơn 1.92
SELECT hoten, diachi
FROM nhanvien
WHERE hsluong > 1.92
Ví dụ 9.1k:
Câu lệnh sau đây cho biết HOTEN (họ tên), DIACHI (địa chỉ) và DIENTHOAI (điện
thoại) của các nhân viên có HSLUONG (hệ số lương) trong khoảng 1.92 đến 3.11
SELECT hoten, diachi
FROM nhanvien
WHERE hsluong BETWEEN 1.92 AND 3.11Ví dụ 9.1l:
Câu lệnh sau đây cho biết HOTEN (họ tên), DIACHI (địa chỉ) và DIENTHOAI (điện
thoại) của các nhân viên có HSLUONG (hệ số lương) là 1.86, 1.92, 2.11
SELECT hoten, diachi
FROM nhanvien
WHERE hsluong IN (1.86, 1.92, 2.11)
* Hoặc:
SELECT hoten, diachi
FROM nhanvien
WHERE hsluong = 1.86 OR hsluong = 1.92 OR hsluong = 2.11Ví dụ 9.1m:
Câu lệnh sau đây cho biết thông tin của nhân viên có tên là NAM.
SELECT *
FROM nhanvien
WHERE hoten LIKE '%NAM'Ví dụ 9.1n:
Câu lệnh sau đây cho biết thông tin của nhân viên không có điện thoại.
SELECT *
FROM nhanvien
WHERE dienthoai IS NULL2. Thêm dữ liệu INSERTCông dụng:
- Thêm dòng dữ liệu (mẫu tin/record) vào bảng.
Cú pháp:
INSERT INTO tên_bảng
[(danh_sách_cột)] VALUES(danh_sách_trị)Ví dụ 9.2a:
Câu lệnh sau đây thêm một dòng dữ liệu vào bảng DONVI
INSERT INTO donvi
VALUES('06', 'Phòng CTCT-HSSV', '821460')Ví dụ 9.2b:
Câu lệnh sau đây thêm một dòng dữ liệu vào bảng NHANVIEN
INSERT INTO nhanvien
VALUES('NV02003', 'Lê Thị Mai', '23/05/1972', NULL, '523312', 1.92, '02')Ví dụ 9.2c:
Câu lệnh sau đây thêm một dòng dữ liệu vào bảng NHANVIEN nhưng chỉ điền dữ liệu
vào một số cột.
INSERT INTO nhanvien(manv, hoten, diachi, madonvi)
VALUES('NV05002', 'Nguyễn Thị Hạnh Dung', '56 Trần Phú', '05')Ví dụ 9.2d: Thêm dữ liệu vào bảng với dữ liệu lấy từ bảng khácCâu lệnh sau đây thêm dữ liệu vào bảng LUONG_NHANVIEN với dữ liệu lấy từ bảng
NHANVIEN.
INSERT INTO luong_nhanvien
SELECT manv, hoten, hsluong*730000 FROM nhanvien3. Cập nhật dữ liệu UPDATECông dụng:
- Cập nhật dữ liệu trong các bảng.
Cú pháp:
UPDATE tên_bảng
SET tên_cột = biểu_thức
[ , ...
, tên_cột_k = biểu_thức_k]
[FROM danh_sách_bảng]
[WHERE điều_kiện]Ví dụ 9.3a:
Câu lệnh sau đây tăng HSLUONG (hệ số lương) thêm 0.2 cho các nhân viên có
MADONVI là 04.
UPDATE nhanvien
SET hsluong = hsluong + 0.2
WHERE madonvi = '04'Ví dụ 9.3b:Câu lệnh sau đây sẽ cập nhật giá trị cho field THANHTIEN (thành tiền) trong bảng
NHATKYBANHANG theo công thức THANHTIEN = SOLUONG * DONGIA.
UPDATE nhatkybanhang
SET thanhtien = soluong * MATHANG.dongia
FROM MATHANG
WHERE nhatkybanhang.mahang = MATHANG.mahang4. Xóa dữ liệu DELETECông dụng:
- Để xóa dữ liệu trong bảng.
Cú pháp:
DELETE FROM tên_bảng
[FROM danh_sách_bảng]
[WHERE điều_kiện]Ví dụ 9.4:
Câu lệnh sau đây xoá khỏi bảng NHANVIEN những nhân viên làm tại đơn vị có
SODIENTHOAI (số điện thoại) là '848484'
DELETE FROM nhanvien
FROM donvi
WHERE nhanvien.madonvi = donvi.madonvi AND donvi.dienthoai = '848484'5. Xóa toàn bộ dữ liệu TRUNCATECông dụng:
- Để xóa toàn bộ dữ liệu trong bảng.
Cú pháp:
TRUNCATE TABLE tên_bảngVí dụ 9.5:
Câu lệnh sau xoá toàn bộ dữ liệu trong bảng LUONG_NHANVIEN
DELETE FROM luong_nhanvien
Tương đương câu lệnh
TRUNCATE TABLE luong_nhanvien
IV. MỘT SỐ HÀM THƯỜNG DÙNG TRONG SQL SERVER
1. Hàm ngày – giờa. Hàm DATEADDCú pháp:
DATEADD(datepart, number, date)
Datepart: tham số chỉ định thành phần sẽ được cộng thêm vào ngày date.
DatePart year quarter month dayofyear day week hour minute second milisecond | Viết tắtyy, yyyy qq, q mm, m dy, y dd, d wk, ww hh mi, n ss, s ms |
trị là number vào ngày date được chỉ định.b. Hàm DATEDIFFCú pháp:
DATEDIFF(datepart, startdate, enddate)
Công dụng: Hàm trả về khoảng thời gian giữa 2 giá trị kiểu ngày startdate và enddate tùy
thuộc vào datepart.
Ví dụ:
DateDiff(year, '3/10/2003', '6/15/2010') à kết quả: 7c. Hàm DATEPARTCú pháp:
DATEPART(datepart, date)
Công dụng: Hàm trả về một số nguyên được trích ra từ thành phần được chỉ định bởidatepart trong giá trị ngày date.
Ví dụ:
DatePart(year, '6/15/2010') à kết quả: 2010d. Hàm GETDATECú pháp:
GETDATE()
Công dụng: Hàm trả về giá trị là ngày hiện tại.e. Hàm DAY, MONTH, YEARCú pháp:
DAY(date) / MONTH(date) / YEAR(date)
Công dụng: Hàm trả về giá trị là ngày / tháng / năm của ngày date.
Ví dụ:
Day('6/15/2010') à kết quả: 15
Month('6/15/2010') à kết quả: 6
Year('6/15/2010') à kết quả: 20102. Hàm chuỗia. Hàm LEFTCú pháp:
LEFT(string, n)
Công dụng: Hàm trích từ chuỗi string n ký tự tính từ bên trái.b. Hàm RIGHTCú pháp:
RIGHT(string, n)
Công dụng: Hàm trích từ chuỗi string n ký tự tính từ bên phải.c. Hàm SUBSTRINGCú pháp:
SUBSTRING(string, m, n)
Công dụng: Hàm trích từ chuỗi string n ký tự tính từ ký tự thứ m.d. Hàm LTRIMCú pháp:
LTRIM(string)
Công dụng: Hàm cắt bỏ khoảng trắng thừa bên trái chuỗi string.e. Hàm RTRIMCú pháp:
RTRIM(string)
Công dụng: Hàm cắt bỏ khoảng trắng thừa bên phải chuỗi string.f. Hàm LENCú pháp:
LEN(string)
Công dụng: Hàm trả về độ dài của chuỗi string.
CHƯƠNG 6: LẬP TRÌNH KẾT NỐI CƠ SỞ DỮ LIỆU SQL
* Chuẩn bị:
- Tên máy được sử dụng (SERVERNAME) là PC-PC- Database được sử dụng (DATABASENAME) là QuanLyBanHang, gồm có các table:
+ Nhanvien + Sanpham + Khachhang - Với quan hệ (Relationship) như sau: | + HoaDon + ChiTietHoaDon + ThanhPho |
I. TẠO KẾT NỐI , VẬN CHUYỂN DỮ LIỆU
1. Khai báo namespace sử dụngusing System.Data.SqlClient;2. Khai báo ở mức class// Chuỗi kết nốistring strConnectionString = "Data
Source=SERVERNAME;Initial Catalog=DATABASENAME;Integrated
Security=True";// Đối tượng kết nốiSqlConnection conn = null;// Đối tượng đưa dữ liệu vào DataTable dtTABLENAMESqlDataAdapter daTABLENAME = null;// Đối tượng hiển thị dữ liệu lên FormDataTable dtTABLENAME = null;3. Khai báo ở Form Load
// Khởi động kết nốiconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu lên DataTable dtTABLENAMEdaTABLENAME = new SqlDataAdapter("SELECT * FROM
TABLENAME",conn);dtTABLENAME = new DataTable();daTABLENAME.Fill(dtTABLENAME);
4. Giải phóng tài nguyên. Chuyển Form về chế độ Design View
. Ở cửa sổ properties của form đang chọn, click Events
. Nhắp đúp lên sự kiện FormClosing. Viết code cho sự kiện này như sau:// Giải phóng tài nguyêndtTABLENAME.Dispose();dtTABLENAME = null;// Hủy kết nốiconn = null;
II. SỬ DỤNG CONTROL
1. Đưa dữ liệu lên ListBox / ComboBoxVí dụ 10.1: Thiết kế form như sau
* Yêu cầu:
. Khi Form load: đưa dữ liệu từ table ThanhPho lên ListBox (lstThanhPho), kèm bẫy lỗi.
. Nhắp vào Button Thoát: dừng chương trình (có hiện hộp thoại hỏi đáp trước khi dừng).
* Hướng dẫn:
- Thiết kế form như yêu cầu.
- Khai báo namespace sử dụng:
using System.Data.SqlClient;
- Ờ mức class, khai báo:
// Chuỗi kết nối
string strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";
// Đối tượng kết nối
SqlConnection conn = null;
// Đối tượng đưa dữ liệu vào DataTable dtThanhPho
SqlDataAdapter daThanhPho = null;
// Đối tượng hiển thị dữ liệu lên Form
DataTable dtThanhPho = null;
- Form load:
try{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu lên DataTable dtThanhPhodaThanhPho = new SqlDataAdapter("SELECT * FROM
THANHPHO", conn);
dtThanhPho = new DataTable();
dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);// Đưa dữ liệu lên ListBoxthis.lstThanhPho.DataSource = dtThanhPho;this.lstThanhPho.DisplayMember = "TenThanhPho";this.lstThanhPho.ValueMember = "ThanhPho";
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong table
THANHPHO. Lỗi rồi!!!");
}- FormClosing:// Giải phóng tài nguyêndtThanhPho.Dispose();
dtThanhPho = null;// Hủy kết nốiconn = null;- Button Thoát:// Khai báo biến traloiDialogResult traloi;// Hiện hộp thoại hỏi đáptraloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);// Kiểm tra có nhắp chọn nút Ok không?if (traloi == DialogResult.OK)Application.Exit();2. Đưa dữ liệu lên DataGridViewVí dụ 10.2: Thiết kế form như sau
* Yêu cầu:
. Khi Form load: đưa dữ liệu từ table KhachHang lên DataGridView (dgvKHACHHANG),
có bẫy lỗi.
. Nhắp vào Button Thoát: dừng chương trình.
* Hướng dẫn:
- Thiết kế form theo yêu cầu.
- DataGridView có thuộc tính:
+ Name: dgvKHACHHANG
+ Nhắp phải chuột lên DataGridView chọn Edit Columns …
+ Trong hộp thoại Edit Columns, nhắp Add để mở hộp thoại Add column và các
column (cột) theo danh sách sau:
. Khi Form load: đưa dữ liệu từ table KhachHang lên DataGridView (dgvKHACHHANG),
có bẫy lỗi.
. Nhắp vào Button Thoát: dừng chương trình.
* Hướng dẫn:
- Thiết kế form theo yêu cầu.
- DataGridView có thuộc tính:
+ Name: dgvKHACHHANG
+ Nhắp phải chuột lên DataGridView chọn Edit Columns …
+ Trong hộp thoại Edit Columns, nhắp Add để mở hộp thoại Add column và các
column (cột) theo danh sách sau:
Name | Type | Header text | DataPropertyName | Width | Ghi chú |
MaKH | TextBox | Mã KH | MaKH | 100 | Frozen |
TenCty | TextBox | Tên Cty | TenCty | 250 | |
DiaChi | TextBox | Địa chỉ | DiaChi | 200 | |
ThanhPho | TextBox | Thành Phố | ThanhPho | 100 | |
DienThoai | TextBox | Ngày Nhận Hàng | DienThoai | 100 |
Trong đó:
TextBox: là DataGridViewTextBoxColumn
CheckBox: là DataGridViewCheckBoxColumn
ComboBox: là DataGridViewComboBoxColumn
Thuộc tính DataPropertyName, Width điều chỉnh trong hộp thoại Edit
Column.- Khai báo namespace sử dụng:using System.Data.SqlClient;- Ờ mức class, khai báo:// Chuỗi kết nốistring strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";// Đối tượng kết nốiSqlConnection conn = null;// Đối tượng đưa dữ liệu vào DataTable dtKhachHangSqlDataAdapter daKhachHang = null;// Đối tượng hiển thị dữ liệu lên Form
DataTable dtKhachHang = null;- Form load:try{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu lên DataTable dtKhachHangdaKhachHang = new SqlDataAdapter("SELECT * FROM
KHACHHANG", conn);
dtKhachHang = new DataTable();
dtKhachHang.Clear();
daKhachHang.Fill(dtKhachHang);// Đưa dữ liệu lên DataGridViewdgvKHACHHANG.DataSource = dtKhachHang;
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong table
KHACHHANG. Lỗi rồi!!!");
}- FormClosing:// Giải phóng tài nguyêndtKhachHang.Dispose();
dtKhachHang = null;// Hủy kết nốiconn = null;- Button Thoát:// Khai báo biến traloiDialogResult traloi;// Hiện hộp thoại hỏi đáptraloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);// Kiểm tra có nhắp chọn nút Ok không?if (traloi == DialogResult.OK)Application.Exit();3. Đưa dữ liệu vào ComboBox trong DataGridViewVí dụ 10.3: Từ Ví Dụ 10.2, bổ sung buttonReLoad (btnReLoad): load lại nội dung của table KhachHang vào DataGridView.
* Hướng dẫn:
- Ờ mức class, bổ sung đoạn code và khai báo hàm LoadData() như sau:// Đối tượng đưa dữ liệu vào DataTable dtThanhPhoSqlDataAdapter daThanhPho = null;// Đối tượng hiển thị dữ liệu lên FormDataTable dtThanhPho = null;void LoadData()
{try{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu vào DataTable dtThanhPhodaThanhPho = new SqlDataAdapter("SELECT * FROM
THANHPHO", conn);
dtThanhPho = new DataTable();
dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);// Đưa dữ liệu lên ComboBox trong DataGridView(dgvKHACHHANG.Columns["ThanhPho"] asDataGridViewComboBoxColumn).DataSource = dtThanhPho;
(dgvKHACHHANG.Columns["ThanhPho"] asDataGridViewComboBoxColumn).DisplayMember ="TenThanhPho";
(dgvKHACHHANG.Columns["ThanhPho"] asDataGridViewComboBoxColumn).ValueMember ="ThanhPho";// Vận chuyển dữ liệu vào DataTable dtKhachHangdaKhachHang = new SqlDataAdapter("SELECT * FROM
KHACHHANG", conn);
dtKhachHang = new DataTable();
dtKhachHang.Clear();
daKhachHang.Fill(dtKhachHang);// Đưa dữ liệu lên DataGridView
dgvKHACHHANG.DataSource = dtKhachHang;
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong table
KHACHHANG. Lỗi rồi!!!");
}
}-
Form Load: bỏ nội dung cũ, thay bằngLoadData();- ReLoad: Nhắp đúp vào Button ReLoad, viết đoạn code như sauLoadData();
III. CÁC THAO TÁC DỮ LIỆU: THÊM-SỬA-XÓA VỚI ADO.NET
1. Ví dụ 10.4: Từ Ví dụ 10.3, bổ sung button sauXóa (btnXoa): xóa record hiện hành ra khỏi table KhachHang.
* Hướng dẫn:
- Xóa: Nhắp đúp vào Button Xóa, thực hiện như sau// Mở kết nốiconn.Open();try{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Lấy thứ tự record hiện hànhint r = dgvKHACHHANG.CurrentCell.RowIndex;// Lấy MaKH của record hiện hànhstring strMAKH =
dgvKHACHHANG.Rows[r].Cells[0].Value.ToString();// Viết câu lệnh SQLcmd.CommandText = System.String.Concat("Delete From
KhachHang Where MaKH='" + strMAKH + "'");
cmd.CommandType = CommandType.Text;// Thực hiện câu lệnh SQL
cmd.ExecuteNonQuery();// Cập nhật lại DataGridViewLoadData();// Thông báoMessageBox.Show("Đã xóa xong!");
}catch (SqlException)
{MessageBox.Show("Không xóa được. Lỗi rồi!!!");
}// Đóng kết nốiconn.Close();
2. Ví dụ 10.5: Từ Ví dụ 10.4, bổ sung các đối tượng như sau (xem hình)
- Panel, trong đó có
+ 4 TextBox: txtMaKH, txtTenCty, txtDiachi, txtDienthoai
+ 1 ComboBox: cbThanhpho
- 4 Button: btnThem, btnSua, btnLuu, btnHuy
* Yêu cầu:
- Thiết kế không cho người dùng thao tác (Enabled = false) khi load form:
+ Panel
+ Các Button Lưu, Hủy- Điều chỉnh lại thuộc tính (properties) của DataGridView
+ AllowUserToAddRows = False
+ EditMode = EditProgrammatically
- Khi Form load: đưa dữ liệu từ table KhachHang lên DataGridView (dgvKHACHHANG),
có bẫy lỗi.
- Nhắp vào Button ReLoad: load lại nội dung table KhachHang lên dgvKHACHHANG
- Nhắp vào Button Thêm:
+ Xóa trống các đối tượng trong Panel.
+ Cho phép nhập thông tin khách hàng vào các đối tượng trên Panel
+ Không cho phép thao tác trên các Button: Thêm, Sửa, Xóa, Thoát.
+ Cho phép thao tác trên các Button: Lưu, Hủy.
- Nhắp vào Button Sửa:+ Đưa thông tin của khách hàng đang được chọn trong DataGridView lên Panel.
+ Cho phép nhập / sửa thông tin khách hàng vào / trong các đối tượng trên Panel.
+ Không cho phép thao tác trên các Button: Thêm, Sửa, Xóa, Thoát.
+ Cho phép thao tác trên các Button: Lưu, Hủy.
- Nhắp vàp Button Lưu.
+ Insert / Update thông tin khách hàng từ Panel vào table KhachHang.
+ ReLoad lại DataGridView
- Nhắp vàp Button Hủy:
+ Xóa trống các đối tượng trong Panel.
+ Không cho phép nhập thông tin khách hàng vào các đối tượng trên Panel
* Hướng dẫn:
- Thiết kế bổ sung Panel với 4 TextBox và 1 ComboBox, Panel có Enabled = false
- Ờ mức class, bổ sung khai báo biến như sau:// Khai báo biến kiểm tra việc Thêm hay Sửa dữ liệubool Them;- Hàm LoadData(): bổ sung dưới hàng// Đưa dữ liệu lên DataGridViewdgvKHACHHANG.DataSource = dtKhachHang;đoạn code sau// Xóa trống các đối tượng trong Panelthis.txtMaKH.ResetText();this.txtTenCty.ResetText();this.txtDiaChi.ResetText();this.txtDienThoai.ResetText();// Không cho thao tác trên các nút Lưu / Hủythis.btnLuu.Enabled = false;this.btnHuy.Enabled = false;this.panel.Enabled = false;// Cho thao tác trên các nút Thêm / Sửa / Xóa / Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnThoat.Enabled = true;- Thêm: nhắp đúp vào button Thêm, bổ sung đoạn code// Kich hoạt biến ThemThem = true;// Xóa trống các đối tượng trong Panelthis.txtMaKH.ResetText();this.txtTenCty.ResetText();this.txtDiaChi.ResetText();
this.txtDienThoai.ResetText();// Cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = true;this.btnHuy.Enabled = true;this.panel.Enabled = true;// Không cho thao tác trên các nút Thêm / Xóa / Thoátthis.btnThem.Enabled = false;this.btnSua.Enabled = false;this.btnXoa.Enabled = false;this.btnThoat.Enabled = false;// Đưa dữ liệu lên ComboBoxthis.cbThanhPho.DataSource = dtThanhPho;this.cbThanhPho.DisplayMember = "TenThanhPho";this.cbThanhPho.ValueMember = "ThanhPho";// Đưa con trỏ đến TextField txtMaKHthis.txtMaKH.Focus();
- Thiết kế bổ sung Panel với 4 TextBox và 1 ComboBox, Panel có Enabled = false
- Ờ mức class, bổ sung khai báo biến như sau:// Khai báo biến kiểm tra việc Thêm hay Sửa dữ liệubool Them;- Hàm LoadData(): bổ sung dưới hàng// Đưa dữ liệu lên DataGridViewdgvKHACHHANG.DataSource = dtKhachHang;đoạn code sau// Xóa trống các đối tượng trong Panelthis.txtMaKH.ResetText();this.txtTenCty.ResetText();this.txtDiaChi.ResetText();this.txtDienThoai.ResetText();// Không cho thao tác trên các nút Lưu / Hủythis.btnLuu.Enabled = false;this.btnHuy.Enabled = false;this.panel.Enabled = false;// Cho thao tác trên các nút Thêm / Sửa / Xóa / Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnThoat.Enabled = true;- Thêm: nhắp đúp vào button Thêm, bổ sung đoạn code// Kich hoạt biến ThemThem = true;// Xóa trống các đối tượng trong Panelthis.txtMaKH.ResetText();this.txtTenCty.ResetText();this.txtDiaChi.ResetText();
- Sửa: Nhắp đúp vào button Sửa, bổ sung đoạn code// Kích hoạt biến SửaThem = false;// Đưa dữ liệu lên ComboBoxthis.cbThanhPho.DataSource = dtThanhPho;this.cbThanhPho.DisplayMember = "TenThanhPho";this.cbThanhPho.ValueMember = "ThanhPho";// Cho phép thao tác trên Panelthis.panel.Enabled = true;// Thứ tự dòng hiện hànhint r = dgvKHACHHANG.CurrentCell.RowIndex;// Chuyển thông tin lên panelthis.txtMaKH.Text =
dgvKHACHHANG.Rows[r].Cells[0].Value.ToString();
this.txtTenCty.Text =dgvKHACHHANG.Rows[r].Cells[0].Value.ToString();
dgvKHACHHANG.Rows[r].Cells[1].Value.ToString();this.txtDiaChi.Text =
dgvKHACHHANG.Rows[r].Cells[2].Value.ToString();this.cbThanhPho.SelectedValue =
dgvKHACHHANG.Rows[r].Cells[3].Value.ToString();this.txtDienThoai.Text =
dgvKHACHHANG.Rows[r].Cells[4].Value.ToString();// Cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = true;this.btnHuy.Enabled = true;this.panel.Enabled = true;// Không cho thao tác trên các nút Thêm / Xóa / Thoátthis.btnThem.Enabled = false;this.btnSua.Enabled = false;this.btnXoa.Enabled = false;this.btnThoat.Enabled = false;// Đưa con trỏ đến TextField txtMaKHthis.txtMaKH.Focus();
- Lưu: Nhắp đúp vào button Lưu, bổ sung đoạn code// Mở kết nốiconn.Open();// Thêm dữ liệuif (Them)
{try{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Lệnh Insert InTocmd.CommandText = System.String.Concat("Insert{try{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
Into KhachHang Values(" + "'" +this.txtMaKH.Text.ToString() + "','" +this.txtTenCty.Text.ToString() + "','" +this.txtDiaChi.Text.ToString() + "','" +this.cbThanhPho.SelectedValue.ToString() +"','" + this.txtDienThoai.Text.ToString() +"')");
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();// Load lại dữ liệu trên DataGridViewLoadData();// Thông báoMessageBox.Show("Đã thêm xong!");
}catch (SqlException)
{MessageBox.Show("Không thêm được. Lỗi rồi!");
}
}if (!Them)
{try{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Thứ tự dòng hiện hànhint r = dgvKHACHHANG.CurrentCell.RowIndex;// MaKH hiện hànhstring strMAKH =
dgvKHACHHANG.Rows[r].Cells[0].Value.ToString();// Câu lệnh SQLcmd.CommandText = System.String.Concat("Update
KhachHang Set TenCty='" +this.txtTenCty.Text.ToString() + "', DiaChi='"+ this.txtDiaChi.Text.ToString() + "',
ThanhPho='" +this.cbThanhPho.SelectedValue.ToString() + "',
DienThoai='" +this.txtDienThoai.Text.ToString() + "' Where
MaKH='" + strMAKH + "'");// Cập nhậtcmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();// Load lại dữ liệu trên DataGridView
LoadData();// Thông báoMessageBox.Show("Đã sửa xong!");catch (SqlException)
{MessageBox.Show("Không sửa được. Lỗi rồi!");
}
}// Đóng kết nốiconn.Close();- Hủy: Nhắp đúp vào button Hủy, bổ sung đoạn code// Xóa trống các đối tượng trong Panelthis.txtMaKH.ResetText();this.txtTenCty.ResetText();this.txtDiaChi.ResetText();this.txtDienThoai.ResetText();// Cho thao tác trên các nút Thêm / Sửa / Xóa / Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnThoat.Enabled = true;// Không cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = false;this.btnHuy.Enabled = false;this.panel.Enabled = false;
CHƯƠNG 7: XÂY DỰNG ỨNG DỤNG
ỨNG DỤNG QUẢN LÝ BÁN HÀNG I. Chuẩn bị:- Tên máy được sử dụng (SERVERNAME) là PC-PC (thay đổi cho đúng máy đang dùng!)
- Database được sử dụng (DATABASENAME) là QuanLyBanHang, gồm có các table sau:
+ ThanhPho + Sanpham
+ Khachhang + Nhanvien | + Hoadon + ChitietHoadon |
- Khởi động SQL Server 2008, tạo một DataBase mới có tên QuanLyBanHang, import dữ
liệu từ file QuanLyBanHang.mdb
- Khởi động Visual Studio 2008, tạo một project mới (Windows Forms Application), lưu với
tên QUANLYBANHANGII. Sử dụng control:
Câu 01: (Form1 – Màn hình chính) Thiết kế như sau
* Yêu cầu:
Khi Form1 được thực hiện sẽ thể hiện màn hình “Đăng nhập hệ thống” là Form2.
* Hướng dẫn:
- Ờ mức class, khai báo hàm frmLogin() như sau:Form frm = new Form2();
frm.ShowDialog();- Form Load:frmlogin();Câu 02: (Form2 – Màn hình Đăng nhập - login)Viết chương trình thể hiện màn hình “Đăng nhập” (login) như sau:
* Yêu cầu:
- Khi nhắp vào nút Đăng nhập (btnDangNhap) sẽ thực hiện kiểm tra:
+ Nếu txtUser = "teonv" và txtPass = "123" thì chuyển sang Form1.
+ Ngược lại thì thông báo "Không đúng tên người dùng / mật khẩu !!!"
- Nhắp button Thoát thì hiển thị thông báo "Chắc không? "
+ Nếu chọn Yes thì kết thúc chương trình.
+ Ngược lại thì trở lại màn hình Đăng nhập hệ thống.
* Hướng dẫn:
- Đăng nhập: Nhắp đúp vào button btnDangnhap, gõ vào đoạn code sauif ((this.txtUser.Text=="teonv")&&(this.txtPass.Text=="123"))this.Close();else{MessageBox.Show("Không đúng tên người dùng / mật
khẩu !!!","Thông báo");this.txtUser.Focus();
}- Thoát: Nhắp đúp vào button btnThoat, gõ vào đoạn code sauDialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if ( traloi == DialogResult.OK)Application.Exit();
* Hướng dẫn: Sử dụng MenuStripCâu 04: (Form1 – Menu Hệ thống)* Yêu cầu: Trên Form1, viết lệnh cho menu hệ thống như sau
- Khi chọn menu “Hệ thống \ Đăng nhập” sẽ thực hiện đăng nhập lại hệ thống (Form2).
- Khi chọn menu “Hệ thống \ Thoát” sẽ dừng chương trình.
* Hướng dẫn:
- Menu “Hệ thống \ Đăng nhập”: Nhắp đúp vào menu “Hệ thống \ Đăng nhập”, gõ vào
đoạn code sau:frmlogin();- Menu “Hệ thống \ Thoát”: Nhắp đúp vào menu “Hệ thống \ Đăng nhập”, gõ vào đoạn
code sau:DialogResult traloi;
traloi = MessageBox.Show("Chắc không?", "Trả lời",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);if ( traloi == DialogResult.OK)Application.Exit();III. Sử dụng DataBase:
Câu 05:a) (Form1 – Menu Danh mục)* Yêu cầu: Trên Form1, viết lệnh cho menu danh mục như sau
- Viết hàm XemDanhMuc(int intDanhMuc) thực hiện mở Form3 và gánForm3.Text =
intDanhMuc.
- Khi chọn menu “Xem Danh mục \ <int>” sẽ thực hiện gọi hàm XemDanhMuc(<int>),
với <int> là giá trị tương ứng với danh mục được chọn.
* Hướng dẫn:
- Ờ mức class, khai báo hàm XemDanhMuc(int intDanhMuc) như sau:// Hàm xemm danh mụcvoid XemDanhMuc(int intDanhMuc)
{Form frm = new Form3();
frm.Text = intDanhMuc.ToString();
frm.ShowDialog();
}- Menu “Xem Danh mục \ Danh mục Thành Phố”: Nhắp đúp vào menu “Xem Danh
mục \ Danh mục Thành Phố”, gõ vào đoạn code sau:XemDanhMuc(1);- Menu “Xem Danh mục \ Danh mục Khách Hàng”: Nhắp đúp vào menu “Xem Danh
mục \ Danh mục Khách Hàng”, gõ vào đoạn code sau:XemDanhMuc(2);- Menu “Xem Danh mục \ Danh mục Nhân Viên”: Nhắp đúp vào menu “Xem Danh
mục \ Danh mục Nhân Viên”, gõ vào đoạn code sau:XemDanhMuc(3);- Menu “Xem Danh mục \ Danh mục Sản Phẩm”: Nhắp đúp vào menu “Xem Danh
mục \ Danh mục Sản Phẩm”, gõ vào đoạn code sau:XemDanhMuc(4);
\ Danh mục Hóa Đơn”, gõ vào đoạn code sau:XemDanhMuc(5);- Menu “Xem Danh mục \ Danh mục Chi Tiết Hóa Đơn”: Nhắp đúp vào menu “Xem
Danh mục \ Danh mục Chi Tiết Hóa Đơn”, gõ vào đoạn code sau:XemDanhMuc(6);b) (Form3) Thiết kế Form3 theo mẫu như sau
* Yêu cầu: Trên Form3
- Khi Form được load sẽ hiển thị tên table (được chọn) lên Label lblDanhMuc và nội
dung của table này lên DataGridView dgvDANHMUC.
- Khi nhắp vào button Trở Về sẽ đóng Form3.
* Hướng dẫn:
- Khai báo namespace sử dụng:using System.Data.SqlClient;- Ờ mức class, khai báo như sau:// Chuỗi kết nốistring strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";// Đối tượng kết nốiSqlConnection conn = null;// Đối tượng đưa dữ liệu vào DataTable dtTableSqlDataAdapter daTable = null;// Đối tượng hiển thị dữ liệu lên FormDataTable dtTable = null;- Form Loadtry{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Xử lý danh mụcint intDM = Convert.ToInt32(this.Text);switch (intDM)
{case 1:- Khi Form được load sẽ hiển thị tên table (được chọn) lên Label lblDanhMuc và nội
dung của table này lên DataGridView dgvDANHMUC.
- Khi nhắp vào button Trở Về sẽ đóng Form3.
* Hướng dẫn:
- Khai báo namespace sử dụng:using System.Data.SqlClient;- Ờ mức class, khai báo như sau:// Chuỗi kết nốistring strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";// Đối tượng kết nốiSqlConnection conn = null;// Đối tượng đưa dữ liệu vào DataTable dtTableSqlDataAdapter daTable = null;// Đối tượng hiển thị dữ liệu lên FormDataTable dtTable = null;- Form Loadtry{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Xử lý danh mụcint intDM = Convert.ToInt32(this.Text);switch (intDM)
lblDM.Text = "Danh Mục Thành Phố";
daTable = new SqlDataAdapter("SELECT
ThanhPho, TenThanhPho FROM THANHPHO",
conn);break;case 2:
lblDM.Text = "Danh Mục Khách Hàng";
daTable = new SqlDataAdapter("SELECT MaKH,
TenCTy FROM KHACHHANG", conn);break;case 3:
lblDM.Text = "Danh Mục Nhân Viên";
daTable = new SqlDataAdapter("SELECT MaNV,
Ho, Ten FROM NHANVIEN", conn);break;case 4:
lblDM.Text = "Danh Mục Sản Phẩm";
daTable = new SqlDataAdapter("SELECT MaSP,
TenSP, DonViTinh, DonGia FROM SANPHAM",
conn);break;case 5:
lblDM.Text = "Danh Mục Hóa Đơn";
daTable = new SqlDataAdapter("SELECT MaHD,
MaKH, MaNV FROM HOADON", conn);break;case 6:
lblDM.Text = "Danh Mục Chi Tiết Hóa Đơn";
daTable = new SqlDataAdapter("SELECT *
FROM CHITIETHOADON", conn);break;default:break;
}// Vận chuyển dữ liệu lên DataTable dtTabledtTable = new DataTable();
dtTable.Clear();
daTable.Fill(dtTable);// Đưa dữ liệu lên DataGridViewdgvDANHMUC.DataSource = dtTable;// Thay đổi độ rộng cộtdgvDANHMUC.AutoResizeColumns();
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong
table. Lỗi rồi!!!");
}
}- Trở Về: Nhắp đúp vào button Trở Về, thêm vào đoạn code sauthis.Close();Câu 06: (Form4 – Menu Quản lý danh mục đơn \ Danh mục Thành Phố )* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Thành Phố” sẽ mở
Form4.
- Trên Form4: Thiết kế như sau:
(panel, txtThanhPho, txtTenThanhPho, dgvTHANHPHO, btnReLoad, btnThem, btnSua,
btnXoa, btnLuu, btnHuyBo, btnTroVe)
* Hướng dẫn:a) (Form1 – Menu Quản lý danh mục đơn)- Menu “Quản lý danh mục đơn \ Danh mục Thành Phố”: Nhắp đúp vào menu “Quản
lý danh mục đơn \ Danh mục Thành Phố”, gõ vào đoạn code sau:Form frm = new Form4();
frm.Text = "Quản lý Danh mục Thành Phố";
frm.ShowDialog();b) (Form4) Thiết kế Form4 như mẫu
- Khai báo namespace sử dụng:using System.Data.SqlClient;- Ờ mức class, khai báo như sau:// Chuỗi kết nốistring strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";// Đối tượng kết nốiSqlConnection conn = null;
btnXoa, btnLuu, btnHuyBo, btnTroVe)
* Hướng dẫn:a) (Form1 – Menu Quản lý danh mục đơn)- Menu “Quản lý danh mục đơn \ Danh mục Thành Phố”: Nhắp đúp vào menu “Quản
lý danh mục đơn \ Danh mục Thành Phố”, gõ vào đoạn code sau:Form frm = new Form4();
frm.Text = "Quản lý Danh mục Thành Phố";
frm.ShowDialog();b) (Form4) Thiết kế Form4 như mẫu
- Khai báo namespace sử dụng:using System.Data.SqlClient;- Ờ mức class, khai báo như sau:// Chuỗi kết nốistring strConnectionString = "Data Source=PC-PC;Initial
Catalog=QuanLyBanHang;Integrated Security=True";// Đối tượng kết nốiSqlConnection conn = null;
// Đối tượng đưa dữ liệu vào DataTable dtThanhPhoSqlDataAdapter daThanhPho = null;// Đối tượng hiển thị dữ liệu lên FormDataTable dtThanhPho = null;// Khai báo biến kiểm tra việc Thêm hay Sửa dữ liệubool Them;void LoadData()
{try{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu lên DataTable dtThanhPhodaThanhPho = new SqlDataAdapter("SELECT * FROM
THANHPHO", conn);
dtThanhPho = new DataTable();
dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);// Đưa dữ liệu lên DataGridViewdgvTHANHPHO.DataSource = dtThanhPho;// Thay đổi độ rộng cộtdgvTHANHPHO.AutoResizeColumns();// Xóa trống các đối tượng trong Panelthis.txtThanhPho.ResetText();this.txtTenThanhPho.ResetText();// Không cho thao tác trên các nút Lưu / Hủythis.btnLuu.Enabled = false;this.btnHuyBo.Enabled = false;this.panel.Enabled = false;// Cho thao tác trên các nút Thêm / Sửa / Xóa /
Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnTroVe.Enabled = true;
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong
table THANHPHO. Lỗi rồi!!!");
}
}- Form Load:LoadData();- FormClosing:// Giải phóng tài nguyêndtThanhPho.Dispose();
dtThanhPho = null;
// Hủy kết nốiconn = null;- ReLoad: Nhắp đúp vào button ReLoad, thêm vào đoạn code sauLoadData();- Trở Về: Nhắp đúp vào button Trở Về, thêm vào đoạn code sauthis.Close();- Thêm: Nhắp đúp vào button Thêm, thêm vào đoạn code sau// Kich hoạt biến ThemThem = true;// Xóa trống các đối tượng trong Panelthis.txtThanhPho.ResetText();this.txtTenThanhPho.ResetText();// Cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = true;this.btnHuyBo.Enabled = true;this.panel.Enabled = true;// Không cho thao tác trên các nút Thêm / Xóa / Thoátthis.btnThem.Enabled = false;this.btnSua.Enabled = false;this.btnXoa.Enabled = false;this.btnTroVe.Enabled = false;// Đưa con trỏ đến TextField txtThanhPhothis.txtThanhPho.Focus();- Sửa: Nhắp đúp vào button Sửa, thêm vào đoạn code sau// Kích hoạt biến SửaThem = false;// Cho phép thao tác trên Panelthis.panel.Enabled = true;// Thứ tự dòng hiện hànhint r = dgvTHANHPHO.CurrentCell.RowIndex;// Chuyển thông tin lên panelthis.txtThanhPho.Text ={try{// Khởi động connectionconn = new SqlConnection(strConnectionString);// Vận chuyển dữ liệu lên DataTable dtThanhPhodaThanhPho = new SqlDataAdapter("SELECT * FROM
THANHPHO", conn);
dtThanhPho = new DataTable();
dtThanhPho.Clear();
daThanhPho.Fill(dtThanhPho);// Đưa dữ liệu lên DataGridViewdgvTHANHPHO.DataSource = dtThanhPho;// Thay đổi độ rộng cộtdgvTHANHPHO.AutoResizeColumns();// Xóa trống các đối tượng trong Panelthis.txtThanhPho.ResetText();this.txtTenThanhPho.ResetText();// Không cho thao tác trên các nút Lưu / Hủythis.btnLuu.Enabled = false;this.btnHuyBo.Enabled = false;this.panel.Enabled = false;// Cho thao tác trên các nút Thêm / Sửa / Xóa /
Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnTroVe.Enabled = true;
}catch (SqlException)
{MessageBox.Show("Không lấy được nội dung trong
table THANHPHO. Lỗi rồi!!!");
}
}- Form Load:LoadData();- FormClosing:// Giải phóng tài nguyêndtThanhPho.Dispose();
dtThanhPho = null;
dgvTHANHPHO.Rows[r].Cells[0].Value.ToString();this.txtTenThanhPho.Text =
dgvTHANHPHO.Rows[r].Cells[1].Value.ToString();// Cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = true;this.btnHuyBo.Enabled = true;this.panel.Enabled = true;// Không cho thao tác trên các nút Thêm / Xóa / Thoátthis.btnThem.Enabled = false;this.btnSua.Enabled = false;this.btnXoa.Enabled = false;this.btnTroVe.Enabled = false;// Đưa con trỏ đến TextField txtMaKHthis.txtThanhPho.Focus();- Xóa: Nhắp đúp vào button Xóa, thêm vào đoạn code sau// Mở kết nốiconn.Open();
try{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Lấy thứ tự record hiện hànhint r = dgvTHANHPHO.CurrentCell.RowIndex;// Lấy MaKH của record hiện hànhstring strTHANHPHO =
dgvTHANHPHO.Rows[r].Cells[0].Value.ToString();// Viết câu lệnh SQLcmd.CommandText = System.String.Concat("Delete From
ThanhPho Where ThanhPho='" + strTHANHPHO + "'");
cmd.CommandType = CommandType.Text;// Thực hiện câu lệnh SQLcmd.ExecuteNonQuery();// Cập nhật lại DataGridViewLoadData();// Thông báoMessageBox.Show("Đã xóa xong!");
}catch (SqlException)
{MessageBox.Show("Không xóa được. Lỗi rồi!");
}// Đóng kết nốiconn.Close();- Hủy Bỏ: Nhắp đúp vào button Hủy Bỏ, thêm vào đoạn code sau// Xóa trống các đối tượng trong Panelthis.txtThanhPho.ResetText();this.txtTenThanhPho.ResetText();// Cho thao tác trên các nút Thêm / Sửa / Xóa / Thoátthis.btnThem.Enabled = true;this.btnSua.Enabled = true;this.btnXoa.Enabled = true;this.btnTroVe.Enabled = true;// Không cho thao tác trên các nút Lưu / Hủy / Panelthis.btnLuu.Enabled = false;this.btnHuyBo.Enabled = false;this.panel.Enabled = false;- Lưu: Nhắp đúp vào button Lưu, thêm vào đoạn code sau// Mở kết nốiconn.Open();// Thêm dữ liệuif (Them)
{try{
// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Lệnh Insert InTocmd.CommandText = System.String.Concat("Insert
Into ThanhPho Values(" + "'" +this.txtThanhPho.Text.ToString() + "','" +this.txtTenThanhPho.Text.ToString() + "')");
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();// Load lại dữ liệu trên DataGridViewLoadData();// Thông báoMessageBox.Show("Đã thêm xong!");
}catch (SqlException)
{MessageBox.Show("Không thêm được. Lỗi rồi!");
}
}if (!Them)
{// Thực hiện lệnhSqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;// Thứ tự dòng hiện hànhint r = dgvTHANHPHO.CurrentCell.RowIndex;// MaKH hiện hànhstring strTHANHPHO =
dgvTHANHPHO.Rows[r].Cells[0].Value.ToString();// Câu lệnh SQLcmd.CommandText = System.String.Concat("Update
ThanhPho Set TenThanhPho='" +this.txtTenThanhPho.Text.ToString() + "' Where
ThanhPho='" + strTHANHPHO + "'");// Cập nhậtcmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();// Load lại dữ liệu trên DataGridViewLoadData();// Thông báoMessageBox.Show("Đã sửa xong!");
}// Đóng kết nốiconn.Close();Câu 07: (Form5 – Menu Quản lý danh mục đơn \ Danh mục Khách Hàng)
* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Khách Hàng” sẽ mở
Form5.
- Trên Form5: thiết kế như sau
Câu 08: (Form6 – Menu Quản lý danh mục đơn \ Danh mục Nhân Viên)
* Yêu cầu:- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Nhân Viên” sẽ mở
Form6.
- Trên Form6: thiết kế như sau
Câu 09: (Form7 – Menu Quản lý danh mục đơn \ Danh mục Sản Phẩm)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Sản Phẩm” sẽ mở
Form7.
- Trên Form7: thiết kế như sau
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Sản Phẩm” sẽ mở
Form7.
- Trên Form7: thiết kế như sau
Câu 10: (Form8 – Menu Quản lý danh mục đơn \ Danh mục Hóa Đơn)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Hóa Đơn” sẽ mở
Form8.
- Trên Form8: thiết kế như sau
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Hóa Đơn” sẽ mở
Form8.
- Trên Form8: thiết kế như sau
Câu 11: (Form9 – Menu Quản lý danh mục đơn \ Danh mục Chi Tiết Hóa Đơn)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Chi Tiết Hóa Đơn” sẽ
mở Form9.
- Trên Form9: thiết kế như sau
- Trên Form1: khi chọn menu “Quản lý danh mục đơn \ Danh mục Chi Tiết Hóa Đơn” sẽ
mở Form9.
Câu 11: (Form10 – Menu Quản lý danh mục theo nhóm \ Khách hàng theo thành phố)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Khách hàng theo Thành
Phố” sẽ mở Form10.
- Trên Form10: thiết kế như sau
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Hóa đơn theo Khách
hàng” sẽ mở Form11.
- Trên Form11: thiết kế như sau
Câu 13: (Form12 – Menu Quản lý danh mục theo nhóm \ Hóa đơn theo Sản phẩm)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Hóa đơn theo Sản phẩm”sẽ mở Form12.
- Trên Form12: thiết kế như sauà tự thực hiệnCâu 14: (Form13 – Menu Quản lý danh mục theo nhóm \ Hóa đơn theo Nhân viên)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Hóa đơn theo Nhân viên”sẽ mở Form13.
- Trên Form13: thiết kế như sauà tự thực hiệnCâu 15: (Form14 – Menu Quản lý danh mục theo nhóm \ Chi tiết hóa đơn theo Hóa
đơn)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Chi tiết hóa đơn theo Hóa
đơn” sẽ mở Form14.
- Trên Form14: thiết kế như sauà tự thực hiệnCâu 16: (Form15 – Menu Quản lý danh mục theo nhóm \ Đa cấp)* Yêu cầu:
- Trên Form1: bổ sung menu “Quản lý danh mục theo nhóm \ Quản lý Đa cấp”, và khi
chọn sẽ mở Form15.
- Trên Form15: thiết kế như sau
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Hóa đơn theo Sản phẩm”sẽ mở Form12.
- Trên Form12: thiết kế như sauà tự thực hiệnCâu 14: (Form13 – Menu Quản lý danh mục theo nhóm \ Hóa đơn theo Nhân viên)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Hóa đơn theo Nhân viên”sẽ mở Form13.
- Trên Form13: thiết kế như sauà tự thực hiệnCâu 15: (Form14 – Menu Quản lý danh mục theo nhóm \ Chi tiết hóa đơn theo Hóa
đơn)* Yêu cầu:
- Trên Form1: khi chọn menu “Quản lý danh mục theo nhóm \ Chi tiết hóa đơn theo Hóa
đơn” sẽ mở Form14.
- Trên Form14: thiết kế như sauà tự thực hiệnCâu 16: (Form15 – Menu Quản lý danh mục theo nhóm \ Đa cấp)* Yêu cầu:
- Trên Form1: bổ sung menu “Quản lý danh mục theo nhóm \ Quản lý Đa cấp”, và khi
chọn sẽ mở Form15.
- Trên Form15: thiết kế như sau
III. ỨNG DỤNG MÔ HÌNH SCADA
Nhận xét
Đăng nhận xét