Professional Documents
Culture Documents
Tong Hop Lap Trinh Net Lap Trinh Net Hufi
Tong Hop Lap Trinh Net Lap Trinh Net Hufi
nhập môn công nghệ thông tin (Đại học Công nghiệp Thực phẩm Thành phố Hồ Chí
Minh)
MỤC LỤC
I
BÀI 13. LẬP TRÌNH THEO DỰ ÁN ..................................................................... 129
F
BÀI 14. LẬP TRÌNH THEO DỰ ÁN ..................................................................... 132
U
H
BÀI 15. LẬP TRÌNH THEO DỰ ÁN ..................................................................... 135
-
IT
F
FI
U
- H
IT
F
FI
U
- H
IT
F
A. MỤC TIÊU:
Xử lý các thao tác cơ bản trong ngôn ngữ C#.
Sử dụng đƣợc các cấu trúc điều khiển trong C#.
Sử dụng các vòng lặp thực hiện các bài toán cơ bản.
Xử lý các ngoại lệ phát sinh.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
Trong đó:
[1][2]: Chọn loại ngôn ngữ phù hợp
[3]: Chọn loại project
[4]: Tên project
[5]: Đƣờng dẫn lƣu project
Bước 3:
FI
Hình 2. Cấu trúc một chương trình C#
Trong đó: U
- H
[1]: Vùng khai báo các thƣ viện cần thiết.
IT
[2]: Vùng viết các code xử lý của chƣơng trình.
1.2 Giới thiệu bài tập mẫuF
Bài 1: Viết chƣơng trình nhập vào số nguyên, kiểm tra số đã nhập là số âm hay số
dƣơng.
Bước 1: Xử lý nhập vào số nguyên.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
Trong đó:
[1]: Sử dụng cấu trúc điều khiển if.
I
[2]: Dừng màn hình lại xem kết quả (tƣơng đƣơng getch() trong C++).
F
Ngoài ra chúng ta có thể sử dụng cấu trúc điều khiển đầy đủ của if nhƣ sau:
U
using System;
- H
T
using System.Collections.Generic;
I
using System.Linq;
using System.Text; F
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
// Khai báo biến số nguyên n
int n;
//thông báo nhập n
Console.Write("Nhap vao so nguyen n=");
//đọc dữ liệu nhập từ bàn phím vào chuỗi s
}
Console.ReadLine();
FI
} U
}
- H
I
Hướng dẫn sử dụng try…catch…T
F
Trong một lệnh hoặc đoạn lệnh có khả năng phát sinh lỗi chúng ta nên dùng mệnh đề
try..catch.. để tránh phát sinh lỗi không mong muốn khi đang thực hiện chƣơng
trình. Ví dụ khi nhập vào số nguyên n ngƣời dùng có thể vô tình nhập một ký tự không
là số khi đó lệnh:
n = int.Parse(Console.ReadLine());
sẽ xảy ra lỗi. Khi đó chúng ta có thể sử dụng mệnh đề try..catch..với cú pháp
nhƣ sau:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
//Khai báo biến số nguyên n
int n;
//Thông báo nhập n
Console.Write("Nhap vao so nguyen n=");
//Đọc dữ liệu nhập từ bàn phím vào chuỗi s
try
{
//Chuyển chuổi nhập vào thành số
n = int.Parse(Console.ReadLine());
}
catch
{
Console.Write("Bạn nhập n không phải số");
}
return;
FI
U
// Sử dụng cấu trúc điều kiện if
if (n == 0)
- H
{
IT
}
F
Console.Write("Không âm không dương");
else
{
if (n > 0)
{
Console.Write("Số dương");
}
else
{
Console.Write("Số âm");
}
}
Console.ReadLine();
}
}
}
Nếu ngƣời dùng vô tình nhập một ký tự không là số thì những lệnh trong catch{ }
sẽ đƣợc thực thi.
Bài 2: Viết chƣơng trình tính tích: 1*2*3*4*5*….*n, trong đó n nhập từ phím.
Bộ giá trị kiểm tra:
n = 1: S1 = 1; n = 2: S1 = 2; n = 3: S1 = 6
Bước 1: Xử lý nhập vào số nguyên
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
FI
U
static void Main(string[] args)
{
- H
int n; IT
//Khai báo biến số nguyên n
F
//Thông báo nhập n
Console.Write("Nhap vao so nguyen n=");
//Đọc sữ liệu nhập từ bàn phím vào chuỗi s
//Chuyển chuổi nhập vào thành số
n = int.Parse(Console.ReadLine());
}
}
}
Bước 2: Xác định biểu thức 1 (bt1), biểu thức 2 (bt2), biểu thức 3 (bt3) cho vòng lặp
for. Công việc cần làm là gì?
bt1 là: int i=1; // khởi tạo gán giá trị
bt2 là: i<=n;// điều kiện dừng
bt3 là: i++; // tăng bƣớc nhảy
10
Công việc cần làm là tính tích giá trị từ 1 đến n. Khai báo khởi tạo biến giữ giá trị tích.
Bước 3: Code xử lý yêu cầu đề bài:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
//Khai báo biến số nguyên n
int n;
//Khởi tạo giá trị cho biến tích
int tich = 1;
//Thông báo nhập n
Console.Write("Nhap vao so nguyen n=");
FI
//Nhập n từ bàn phím
U
try
{ - H
IT
//Chuyển chuỗi nhập vào thành số
}
F
n = int.Parse(Console.ReadLine());
catch
{
Console.Write("Bạn nhập n không phải số");
return;
}
//Xử lý tính tích
for (int i = 1; i <= n; i++)
{
tich = tich * i;
}
//In giá trị ra màn hình theo 1 trong 2 cách
Console.Write("Tich la: {0}",tich);
11
Chúng ta có thể chuyển ví dụ trên thành dạng phƣơng thức gọi khi cần. Lƣu ý có thể
đặt phƣơng thức phía trên hoặc phía dƣới void main() mà không cần phải khai báo
prototype (nguyên mẫu hàm).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
FI
U
// Gọi phương thức BaiMau()
BaiMau();
- H
} IT
Console.ReadLine();
F
//Phương thức BaiMau() được định nghĩa như sau
static void BaiMau()
{
//Khai báo biến số nguyên n
int n;
//Khởi tạo giá trị cho biến tích
int tich = 1;
// thông báo nhập n
Console.Write("Nhap vao so nguyen n=");
//Nhập từ bàn phím
try
{
// Chuyển chuỗi nhập vào thành số
12
n = int.Parse(Console.ReadLine());
}
catch
{
Console.Write("Bạn nhập n không phải số");
return;
}
// Xử lý tính tích
for (int i = 1; i <= n; i++)
{
tich = tich * i;
}
// In giá trị ra màn hình
Console.Write("Tich la: {0}", tich);
//Console.Write("Tich la: "+ tich);
}
}
}
I
Bài 3: Viết chƣơng trình tìm ƣớc chung lớn nhất (UCLN) của hai số nguyên a và b.
F
Bước 1: Xử lý nhập vào 2 số nguyên a và b
U
using System;
- H
T
using System.Collections.Generic;
I
using System.Linq;
using System.Text; F
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
//Khai báo
int a, b;
//Nhập a, b
Console.Write("Mời nhập a: ");
a = int.Parse(Console.ReadLine());
13
Bước 2: Xác định biểu thức 1, biểu thức 2, biểu thức 3 cho bài toán. Công việc cần
làm là gì?
Bước 3: Công việc cần làm là tìm UCLN của 2 số a và b, thực hiện nhƣ sau:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
static void Main(string[] args)
FI
{
U
// Khai báo
- H
int a, b;
IT
F
// Nhập a, b
Console.Write("Mời nhập a: ");
a = int.Parse(Console.ReadLine());
Console.Write("Mời nhập b: ");
b = int.Parse(Console.ReadLine());
while (a != b) //bt2
{
if (a > b)
{
a = a - b; //bt2
}
else
{
b = b - a; //bt2
14
}
}
// In kết quả
Console.Write("UCLN la: ",a);
Console.ReadLine();
}
}
}
Viết dạng phƣơng thức bài trên chúng ta làm nhƣ sau:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo
{
class Program
{
FI
U
static void Main(string[] args)
{
- H
// Khai báo
int a, b; IT
F
// Nhập giá trị cho biến a và b
Console.Write("Mời nhập a: ");
a = int.Parse(Console.ReadLine());
Console.Write("Mời nhập b: ");
b = int.Parse(Console.ReadLine());
//In kết quả
Console.Write("UCLN la: ",UCLN(a,b));
Console.ReadLine();
}
static int UCLN(int a, int b)
{
while (a != b) //bt2
{
15
if (a > b)
{
a = a - b; //bt2
}
else
{
b = b - a; //bt2
}
}
return a;
}
}
}
16
Bài 6. Viết chƣơng trình vẽ hình chữ nhật có kích thƣớc d x r, trong đó d là chiều dài,
và r là chiều rộng đƣợc nhập từ phím.
* * * * *
* *
* * * * *
Bài 7. Viết chƣơng trình tính tổng: 12 + 22 + … + n2 với 0 nhập từ bàn phím.
Bộ giá trị kiểm tra:
n = 1: S1 = 1; n = 2: S1 = 5; n = 3: S1 = 14
Bài 8. Kiểm tra n có phải là số nguyên tố hay không?
Bài 9. Liệt kê các số nguyên tố < n
Bài 10. Nhập dãy số nguyên (nhập số 0 thì dừng)
a. Tìm tổng dãy số vừa nhập
b. Tìm max của dãy số đó
c. Tìm min của dãy số đó
3 . Bài tập nâng cao
Bài 1. Viết chƣơng trình hỗ trợ cách giải phƣơng trình bậc 2 (ax2 + bx + c = 0).
Bài 2. In tam giác cân rỗng.
4 . Bài tập về nhà FI
Bài 1. Tính giá trị hàm U
- H
IT
F
17
A. MỤC TIÊU:
Sử dụng cấu trúc mảng một chiều thực hiện các bài toán cơ bản.
Biết cách xử lý dùng mảng một chiều trong C#.
Sử dụng cấu trúc mảng hai chiều thực hiện các bài toán cơ bản.
Biết cách xử lý dùng mảng hai chiều trong C#.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
- H
Ví dụ: khai báo mảng số nguyên A (không xác định số phần tử tối đa)
IT int[] A;
F
Khởi tạo mảng A bằng từ khóa ‚new‛. Ƣu điểm là tiết kiệm vùng nhớ vì chỉ khai báo
đủ nhu cầu sử dụng.
A = new int[n];
b. Mảng hai chiều:
m (cột)
1[0,0] 2[0,1] 4[0,2] 9[0,3] 3[0,4] …[0,…] … … …
[0,m]
6[0,1] 4 3 6 … … … … … …
… … … … … … … … … …
n (dòng)
… … … … … … … … …
[0,n]
18
Ví dụ: khai báo mảng 2 chiều số nguyên A (không xác định số phần tử tối đa)
int[][] A;
Khởi tạo mảng A bằng từ khóa ‚new‛ với n dòng và m là cột:
A = new int[n][m];
c. Chuỗi
Khái niệm: Chuỗi là mảng một chiều chứa các ký tự.
Ví dụ:
IndexOf (s1) Vị trí xuất hiện đầu tiên của chuỗi s1 trong chuỗi ban đầu
LastindexOf (s1) Giống IndexOf, nhƣng tìm lần xuất hiện cuối cùng
Replace (s1, s2)
FI
Thay thế chuỗi s1 thành s2 trong chuỗi ban đầu
Substring (vt, l) - H
Trả về chuỗi con bắt đầu ở một vị trí vt và chiều dài l.
ToLower () IT
Chuyển chuỗi thành chữ thuờng
ToUpper ()
F
Chuyển chuỗi thành chữ in
19
Viết phƣơng thức tổng quát gọi kiểm tra kết quả 2 phƣơng thức trên:
public static void Mang1Chieu()
{
// Khai báo mảng A
int[] A;
Console.Write("Mời bạn nhập vào số phần tử: ");
// Nhập n
int n = int.Parse(Console.ReadLine());
// Khởi tạo mảng A đúng n phần tử
20
A = new int[n];
//Gọi phương thức nhập mảng
A = NhapMang(A,n);
//Gọi phương thức xuất mảng
XuatMang(A);
}
21
}
// Xử lý
FI
U
H
Bước 2: Viết code xử lý công việc xuất mảng
-
T
static void XuatMang2Chieu(int[][] A)
I
{
// Xử lý F
for (int i = 0; i < A.GetLength(0); i++)
{
for (int j = 0; j < A.GetLength(1); j++)
{
Console.Write("{0} ", A[i][j]);
}
Console.WriteLine();
}
}
22
Viết phƣơng thức tổng quát gọi kiểm tra kết quả 2 phƣơng thức trên
static void Mang2Chieu()
{
int n, m;
int[][] A;
Console.Write("Mời bạn nhập số dòng: ");
n = int.Parse(Console.ReadLine());
Console.Write("Mời bạn nhập số cột: ");
m = int.Parse(Console.ReadLine());
// Khởi tạo
A = new int[n][];
for (int i = 0; i < n; i++)
{
A[i] = new int[m];
}
NhapMang2Chieu(A, n, m);
XuatMang2Chieu(A);
}
23
string S;
S = Console.ReadLine();
Console.ReadLine();
}
24
}
Console.ReadLine();
}
IT
Bài 3. Nhập chuỗi s (là họ tên). Viết phƣơng thức thực hiện các yêu cầu sau:
S có phải là chuỗi đối xứng không?
F
Đổi ký tự đầu từ thành chữ hoa
Đổi ký tự thƣờng thành chuỗi hoa và ngƣợc lại
Có bao nhiêu nguyên âm, phụ âm, khoảng trắng trong chuỗi s.
3. Bài tập nâng cao
Bài 1. Thực hiện phép cộng 2 đa thức trên mảng một chiều. Với đa thức cho trƣớc nhƣ
sau: DaThuc {int Bac, int ChiSoDaThuc[]};
Bài 2. Cho một ma trận nguyên kích thƣớc m*n. Viết phƣơng thức tìm:
Số nhỏ nhất, lớn nhất (kèm chỉ số) của ma trận.
Số nhỏ nhất, lớn nhất (kèm chỉ số) của từng hàng của ma trận.
Số nhỏ nhất, lớn nhất (kèm chỉ số) của đƣờng chéo chính của ma trận.
Viết phƣơng thức tìm giá trị phần tử xuất hiện nhiều nhất trong dòng i,
nếu có nhiều phần tử có số lần xuất hiện bằng nhau thì xuất phần tử đầu tiên.
25
Bài 3. Nhập chuỗi s (là họ tên). Viết phƣơng thức thực hiện các yêu cầu sau:
Xóa khoảng trắng thừa trong chuỗi s.
Có bao nhiêu từ trong chuỗi s
Lấy ra họ
Lấy ra tên
Lấy ra họ lót (nếu có)
4. Bài tập về nhà
Bài 1. Viết phƣơng thức tính tổng các phần tử cực đại trong mảng các số nguyên (phần
tử cực đại là phần tử lớn hơn các phần tử xung quanh nó).
Ví dụ: 1 5 2 6 3 5 1 8 6
Bài 2. Cho ma trận vuông cấp n chứa các số nguyên. Viết phƣơng thức thực hiện các
yêu cầu sau:
Liệt đƣờng chéo chính, phụ.
Liệt kê tam giác trên, dƣới.
Tổng đƣờng chéo chính, phụ.
Tổng tam giác trên, dƣới.
FI
U
- H
IT
F
26
A. MỤC TIÊU:
Thiết kế đƣợc giao diện Windows Form từ các control trong C#.
Sử dụng đƣợc các Controls Textbox, Label, Button.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
MyName.sln FI
Đây là file solution (file text) lƣu trữ thông tin về
solution và project. Nếu project đã có sẵn thì ta sẽ
U
mở file này để tiếp tục project.
- H Lƣu trữ code trong form.
frmMyName.cs
IT
frmMyName.Designer.cs
F Lƣu trữ code design trong form.
Sau khi thực thi một project thì một số file khác sẽ
Các files khác
tự động phát sinh trong thƣ mục solution.
27
F
Hình 3. Cửa sổ tạo projec mớiI
U
Sau khi chọn ngôn ngữ, ứng dụng, đặt tên cho project, … click OK, cửa sổ thiết kế
H
giao diện (Form Design) sẽ hiện ra:
-
IT
F
Form ứng dụng
Solution Explorer
Control
Toolbox
Form Properties
28
Lưu ý:
1. Trong cùng một project có thể có nhiều form, muốn chọn form khởi động đầu
tiên ta mở file Program.cs và thay tên form cần mở trong lệnh
Application.Run(new Ten_form());
FI
2. Trƣớc khi làm bài tập thì nên xóa Form1 (form đƣợc tạo mặc định), tạo Form
U
mới và đặt tên theo yêu cầu. Cách thực hiện nhƣ sau:
H
Trong cửa sổ Solution Explorer, Click chuột phải vào Form1 Delete
-
IT
Sau đó Click chuột phải trên MyProject Add Windows Form…
Cửa sổ Add New Item xuất hiện, đặt tên cho form mới và chọn Add.
29
FI
U
- H
IT
Yêu cầu: F
Khi Form khởi động thực hiện nhập tên, năm sinh vào TextBox YourName và
Year of Birth tƣơng ứng. Nếu YourName không đƣợc nhập dữ liệu, năm sinh
không phải là số thì thông báo lỗi (dùng ErrorProvider).
Errorpvider: Cung cấp thông tin lỗi của điều khiển trên Form, thƣờng đƣợc dùng
với control input (ví dụ: TextBox) ràng buộc với một điều kiện nhập.
30
Khi ngƣời dùng nhấn button Show sẽ hiển thị thông tin nhập vào Messagebox bao
gồm: tên, tuổi (năm hiện tại – năm sinh)
Khi ngƣời dùng nhấn button Clear sẽ xóa thông tin đã nhập trên các TextBox, đặt
con trỏ văn bản vào Textbox YourName.
Khi nhấn button Exit xác nhận ngƣời dùng có thực sự muốn thoát khỏi chƣơng
trình không? Yes: thoát, No: không.
Hướng dẫn:
Danh sách các thuộc tính của các đối tượng (Object) cần thiết:
chuột - H
AcceptButton: btnShow (nhận sự kiện Click
khi nhấn Enter)
IT
CancelButton: btnExit (nhận sự kiện Click
chuộtF khi nhấn Esc)
Name: txtYourName
txtYourName Leave (mất tiêu điểm)
BorderStyle: FixSingle
Name: txtYear
txtYear TextChanged
BorderStyle: FixSingle
Name: btnShow
btnShow Click
Text: &Show
Name: btnClear
btnClear Click
Text: &Clear
Name: btnExit
btnExit Click
Text: E&xit
errorProvider Name: errorProvider1
31
Thay đổi thứ tự nhận tiêu điểm trên Form: chọn menu View Tab Order
Lần lƣợt thực hiện click chọn từng phần tử trên Form theo thứ tự nhận tiêu điểm:
FI
U
Viết các sự kiện tương ứng với các yêu cầu:
- H
Sự kiện đóng xác nhận khi form đƣợc đóng:
IT
private void frmBT1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult r;
F
r = MessageBox.Show("Bạn có muốn thoát?", "Thoát",
MessageBoxButtons.YesNo, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);
if (r == DialogResult.No)
e.Cancel = true;
}
Kiểm tra Textbox YourName đã đƣợc nhập nội dung chƣa:
private void txtYourName_Leave(object sender, EventArgs e)
{
Control ctr = (Control)sender;
if (ctr.Text.Trim().Length == 0)
this.errorProvider1.SetError(ctr, ‚You must enter Your Name‛);
32
else
this.errorProvider1.Clear();
}
Yêu cầu Textbox Year phải nhập số, nhập sai dùng ErrorProvider thông báo lỗi:
private void txtYear_TextChanged(object sender, EventArgs e)
{
Control ctr = (Control)sender;
if (ctr.Text.Length>0 && !Char.IsDigit(ctr.Text[ctr.Text.Length-11])
this.errorProvider1.SetError(ctr, ‚This is not avalid number‛);
else
this.errorProvider1.Clear();
}
Hiển thị thông tin theo yêu cầu khi click vào Button Show:
private void btnShow_Click(object sender, EventArgs e)
{
int age;
string s;
s = "My name is: " + txtYourName.Text + "\n";
FI
age = DateTime.Now.Year - Convert.ToInt32(txtYear.Text);
U
s = s + "Age: " + age.ToString();
-
MessageBox.Show(s);H
}
IT
F
Button Clear thực hiện lệnh xóa các TextBox chuẩn bị cho lần nhập tiếp theo:
private void btnShow_Click(object sender, EventArgs e)
{
//clear Text
txtYourName.Clear();
txtYear.Clear();
//Textbox YourName reset focus
txtYourName.Focus();
}
Yêu cầu: Khi chọn các phép toán +, -, *, / tƣơng ứng trên các button thì hiển thị kết
quả lên textbox kết quả.
Kiểm tra tính hợp lệ của các textbox theo hai mức độ:
Mức 1: Nếu dữ liệu nhập vào textbox a, b không hợp lệ thì dùng
ErrorProvider thông báo lỗi.
Mức 2: Chặn không cho ngƣời dùng nhập giá trị khác số vào textbox a, b.
Thông báo lỗi bằng MessageBox nếu dữ liệu nhập không phù hợp
Hỏi xác nhận trƣớc khi đóng Form.
Bài 2. Thiết kế form đăng ký tài khoản FI
U
- H
IT
F
Yêu cầu:
Kiểm tra định dạng của email sau khi nhập và ra khỏi textbox Địa chỉ email.
Bắt buộc nhập dữ liệu trên những textbox có (*).
Khi chọn button Đăng ký hoặc nhấn phím Enter sau khi nhập xong dữ liệu vào
textbox Xác nhận mật khẩu thì hiển thị thông tin của tất cả các textbox lên
MessageBox.
Hỏi xác nhận trƣớc khi đóng Form.
34
Bài 3. Thiết kế giao diện thực hiện yêu cầu nhập vào 2 số a, b. Xuất ra UCLN và
BCNN của 2 số a và b (kiểm tra dữ liệu nhập và xuất các thông báo lỗi nếu có).
FI
U
- H
IT
F
Yêu cầu:
Nhập vào một dãy số nguyên bất kỳ (nhập số nguyên vào textbox Nhập số,
nhấn button Nhập), xuất các số vừa nhập ra textbox Dãy vừa nhập.
Bổ sung thêm buton Tính tổng, Tổng chẵn, Tổng lẻ các số vừa nhập và xuất ra
các textbox tƣơng ứng.
Tính tổng các số chẵn và tổng các số lẻ.
Button Tiếp tục trả lại trạng thái ban đầu của form.
Button Thoát: xác nhận và đóng form.
35
Bài 5. Viết chƣơng trình đọc số thành chữ với giao diện sau:
Yêu cầu:
Nhập vào một số nguyên dƣơng bất kỳ từ 1 đến 999.
Đọc số vừa nhập thành chữ số khi chọn button Thực hiện.
Button Xóa: trả form lại trạng thái ban đầu
Button Thoát: xác nhận và đóng form.
3. Bài tập nâng cao
Bài 1. Thiết kế giao diện sau:
FI
U
- H
IT
F
Yêu cầu: Tạo một project giúp cho rạp chiếu phim quản lý việc bán vé của mình. Rạp
có 3 hàng ghế, mỗi hàng có 5 ghế, các ghế đƣợc đánh số từ 1 đến 15 và đƣợc phân
thành 3 lô nhƣ (hình trên). Giá vé theo lô nhƣ sau:
Giá vé lô A 1000/vé
Giá vé lô B 1500/vé
Giá vé lô C 2000/vé
Form giao diện trình bày là sơ đồ các chổ ngồi tƣơng ứng trong rạp phim để ngƣời sử
dụng chọn vị trí muốn mua. Trên sơ đồ này cũng thể hiện vị trí vé đã bán và những vị
36
trí vé chƣa bán bằng các thể hiện màu khác nhau (vé chƣa bán màu trắng, vé đã bán
màu vàng, vé đang chọn màu xanh). Khi ngƣời sử dụng click chuột tại một vị trí trên
sơ đồ thì:
Nếu đây là vị trí chƣa bán thì đổi màu của vị trí này sang màu xanh để cho biết
đây là vị trí đang chọn.
Nếu đây là vị trí đang chọn (có màu xanh) thì đổi màu của vị trí này trở về
màu trắng.
Nếu đây là một vị trí đã bán vé thì xuất hiện một MessageBox thông báo cho
ngƣời sử dụng biết.
Sau khi đã chọn các vị trí, ngƣời sử sụng có thể click chuột vào button CHỌN để
thanh toán hoặc HỦY BỎ:
Nếu click vào button CHỌN thì:
Đổi màu các vị trí đang chọn (màu xanh) trên sơ đồ sang màu vàng (đây là vị
trí đã bán).
Xuất tổng số tiền phải trả cho số vé đã mua lên label Thành Tiền.
Nếu click vào button HỦY BỎ thì:
Xuất lên label Thành Tiền giá trị 0. FI
Đổi màu các vị trí đang chọn (màu xanh) trên sơ đồ sang màu trắng.
37
A. MỤC TIÊU:
Thiết kế đƣợc giao diện Windows Form từ các control trong C#.
Sử dụng đƣợc các Controls Textbox, Label, Button, RadioButton, Checkbox.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
Yêu cầu:
Tạo giao diện nhƣ hình: nhập vào 2 số và 4 radio button tƣơng ứng với 4 phép
toán.
Thực hiện các phép toán tƣơng ứng của 2 số khi ngƣời dùng click chọn các
radio button và xuất kết quả vào textbox Kết quả.
Nếu dữ liệu nhập vào textbox a, b không hợp lệ, cảnh báo theo hai mức:
+ Dùng ErrorProvider thông báo lỗi.
38
FI
U
- H
IT
F
Yêu cầu:
Định dạng nội dung của label theo các checkbox và radio button đƣợc chọn
tƣơng ứng về Font Style và Color.
Khi chọn button Exit: xác nhận và thoát khỏi Form.
Hướng dẫn:
Thiết lập thuộc tính màu chữ cho label:
Tên_Label.ForeColor = Color.Blue ;
Thiết lập thuộc tính Font Style là in nghiêng:
Tên_Label.Font = new Font(TênLabel.Font, FontStyle.Italic);
40
Thiết lập thuộc tính Font Style vừa nghiêng, vừa đậm:
Tên_Label.Font = new Font(TênLabel.Font,
(FontStyle)(FontStyle.Bold|FontStyle.Italic));
Sự kiện CheckedChanged của radio button Red
private void rdo_red_CheckedChanged(object sender, EventArgs e)
{
if (rdo_red.Checked == true)
label1.ForeColor = Color.Red;
}
FI
U
- H
IT
F
Khi chọn radio button Giải phƣơng trình Bậc nhất thì TextBox Nhập c bị mờ/ ẩn
đi. Khi nhập thông tin đầy đủ vào Textbox cần thiết thì Chức năng “Giải” có tác
dụng để thực thi. Giải phƣơng trình kết quả hiện lên trong Textbox Kết quả, sau
đó Button Giải mờ đi nhƣ hình sau:
41
Khi chọn radio button Giải phƣơng trình Bậc hai thì hiển thị đầy đủ 3 Textbox
để nhập liệu và thực hiện yêu cầu giống nhƣ giải phƣơng trình bậc nhất, kết
quả nhƣ hình sau:
FI
U
- H
IT
F
Kiểm tra dữ liệu nhập vào và hiện thông báo lỗi khi cần.
Khi Form đóng cần có xác nhận từ ngƣời dùng.
42
Bài 2. Thiết kế giao diện sau và thực hiện các yêu cầu về mảng một chiều ở bên dƣới:
FI
U
- H
IT
Yêu cầu: F
Viết class lƣu trữ mảng một chiều số nguyên với các thuộc tính và phƣơng thức
thực hiện theo yêu cầu của giao diện: sắp xếp mảng tăng/ giảm, tìm kiếm giá trị
và vị trí phần tử bất kỳ trong mảng, thêm giá trị mới tại một vị trí đƣợc chỉ định
trong mảng, tính tổng mảng, tổng chẵn và tổng lẻ trong mảng, tìm giá trị lớn nhất
và nhỏ nhất của mảng, thay thế giá trị và vị trí với số thay thế bất kỳ trong mảng.
Thực hiện kiểm tra các lỗi có khả năng xảy ra.
Đóng form phải có xác nhận từ ngƣời dùng.
43
Yêu cầu:
FI
U
Khi nhóm khách hàng vào quán gọi cafe sẽ đƣợc chọn một trong các loại cafe,
H
chọn thức ăn sẽ chọn một trong các loại thức ăn. Giá cho từng loại tƣơng ứng nhƣ sau:
-
Cafe đen:
Cafe đá: IT
20.000đ
25.000đ
Bánh mỳ trứng:
Bánh mỳ cá:
15.000đ
15.000đ
Cafe sữa: F25.000đ Mỳ tôm trứng: 20.000đ
Cafe sữa đá: 30.000đ Mỳ xào bò: 30.000đ
Cafe kem: 35.000đ Mỳ cay: 50.000đ
Khi khách hàng gọi tính tiền, thu ngân sẽ nhập thông tin tên khách hàng và tùy
vào từng loại thì sẽ có giá tƣơng ứng (Lưu ý: nếu khách hàng là Sinh Viên – check
vào checkbox Sinh Viên – thì sẽ đƣợc giảm giá 20%).
Lưu ý: Textbox số khách hàng chỉ cho nhập số.
Chƣơng trình thực hiện:
+ Form_Load: con trỏ văn bản đặt vào ô tên khách hàng, các button TinhTien,
NhapLai, ThanhToan bị mờ (Enabled = false). Thực hiện nhập tên khách hàng (tên
khách hàng không đƣợc để trống). Check vào checkbox Sinh Viên nếu khách hàng là
Sinh Viên, chọn loại nƣớc uống và thức ăn mà khách hàng đã gọi. Khi nhập đầy đủ
thông tin thì btnTinhTien có tác dụng.
44
+ btnTinhTien _Click: thực hiện tính tiền cho khách hàng vừa nhập và hiển
thị lên Messagebox, btnNhapLai, btnThanhToan sáng lên.
+ btnNhapLai_Click: quay về trạng thái ban đầu của Form, btnNhapLai mờ.
+ btnThanhToan_Click: Ghi lại thông tin tổng số khách và tổng tiền Thanh
toán vào các label tƣơng ứng, sẵn sàng cho việc nhập nhóm khách hàng mới.
btnThanhToan bị mờ.
+ btnThoat_Click: hỏi ngƣời dùng có chắc chắn thoát khỏi chƣơng trình hay
không? Yes: thoát, No: không.
4. Bài tập về nhà
Bài 1. Thiết kế giao diện Quản lý Thanh toán tiền phòng cho Khách sạn Thanh Thanh
nhƣ sau:
FI
U
- H
Khi khách trả phòng, nhân viên kế toán sẽ thực hiện kiểm tra tên, địa chỉ, số
IT
ngày ở, loại phòng, tiện nghi và dịch vụ của khách. Sau đây là bảng giá:
o Loại phòng: F
Phòng đơn: 300.000đ/1 ngày
Phòng đôi: 350.000đ/1 ngày
Phòng ba: 400.000đ/1 ngày
o Tiện nghi: mỗi loại cộng thêm 10.000đ
o Dịch vụ:
Karaoke: 50.000đ
Ăn sáng: 15.000đ/1 ngày
Cuối ngày Nhân viên kế toán sẽ thống kê tổng số lƣợt ngƣời trả phòng, tổng số
tiền thu đƣợc trong ngày.
Chƣơng trình thực hiện các chức năng:
Form_Load: con trỏ văn bản đặt vào ô tên khách hàng, các button TongKet,
NhapMoi, ThanhToan bị mờ (enabled=false). Thực hiện nhập tên (tên khách không
45
đƣợc để trống), địa chỉ, số ngày ở (number), check vào loại phòng, tiện nghi, dịch vụ
mà khách đã thuê. Khi nhập đầy đủ thông tin thì btnThanhToan có tác dụng.
btnThanhToan: thực hiện tính tiền cho khách vừa nhập và hiển thị lên label
Thành Tiền, đồng thời lƣu lại thông tin tổng số tiền và tổng số lƣợt khách.
btnNhapMoi, btnTongKet sáng lên sẵn sàng cho việc nhập khách mới.
btnNhapMoi: khởi tạo lại trạng thái ban đầu của Form, btnNhapMoi bị mờ.
btnTongKet: Ghi lại thông tin tổng số khách và tổng tiền Thanh toán vào các
label tƣơng ứng, đồng thời khởi tạo lại giá trị tổng số khách hàng =0, tổng tiền thanh
toán =0. btnTongKet bị mờ.
btnThoat_Click: hỏi ngƣời dùng có chắc chắn thoát khỏi chƣơng trình hay
không? Yes: thoát, No: không.
FI
U
- H
IT
F
46
A. MỤC TIÊU:
Thiết kế đƣợc giao diện Windows Form từ các control trong C#.
Sử dụng đƣợc các Controls Textbox, Label, Button, Listbox, Combobox,
TreeView, TabControl.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
47
Hướng dẫn:
Danh sách các đối tượng được sử dụng trong form:
F
Các sự kiện tương ứng với các yêu cầu:
Chuyển một item từ listbox trái sang listbox phải:
private void btnQuaPhai_Click(object sender, EventArgs e)
{
// Chuyển giá trị chọn bên trái sang phải
lst_Phai.Items.Add(lst_Trai.SelectedItem);
// Xóa giá trị chọn bên trái
lst_Trai.Items.Remove(lst_Trai.SelectedItem);
}
48
Sinh viên tự viết code thực hiện cho các yêu cầu còn lại.
Bài 2: Thiết kế giao diện sau:
Yêu cầu:
Click chọn button Load dữ liệu Combobox, 5 dân tộc: Kinh, Hoa, K‟Me,
H‟Mong, Khác sẽ đƣợc đƣa vào combobox Dân tộc.
FI
U
- H
IT
F
Chọn một dân tộc trong combobox, hiển thị dân tộc đƣợc chọn theo 2 cách:
+ Cách 1: click button Hiển thị, dân tộc đƣợc chọn sẽ xuất hiện trong một
Label hoặc Textbox.
+ Cách 2: Dân tộc đƣợc chọn sẽ xuất hiện trên MessageBox ngay khi chọn.
49
Hướng dẫn:
Sự kiện click của button Load dữ liệu Combobox
private void btn_loadDL_Click(object sender, EventArgs e)
{
string[] dt = { "Kinh", "Hoa", "K’Me", "H’Mong", "Khac" };
foreach (string s in dt)
{
cbo_dt.Items.Add(s);
}
}
FI
Sự kiện click của button Hiển thị U
- H
{ IT
private void btn_hienthi_Click(object sender, EventArgs e)
F
string s = "Dân tộc được chọn: ";
if (cbo_dt.SelectedIndex >= 0)
lbl_kq.Text = s + cbo_dt.SelectedItem.ToString();
else
lbl_kq.Text = "Bạn chưa chọn dân tộc";
}
50
Yêu cầu:
Khi Form hiển thị lên, TreeView phòng ban và ComboBox phòng ban có sẵn
những phòng ban sau: Giám đốc, Tổ chức hành chính, Kế hoạch, Kế Toán.
Thực hiện thêm mới phòng ban và xóa phòng ban đƣợc chọn (Lƣu ý: kiểm tra
trùng khi thêm và có xác nhận khi xóa).
FI
Khi một phòng ban mới đƣợc thêm thì phải thêm phòng đó vào ComboBox
phòng ban. U
- H
Thực hiện thêm mới nhân viên vào phòng ban đƣợc chọn lên TreeView.
IT
F
Hướng dẫn:
Danh sách các thuộc tính của các Object:
51
52
trv_DS.Nodes.Add(txt_Phongban.Text);
cbo_phongban.Items.Add(txt_Phongban.Text);
}
else
MessageBox.Show("Phòng ban đã tồn tại!");
txt_Phongban.Text = "";
txt_Phongban.Focus();
}
Lưu ý: Sinh viên tự viết phƣơng thức kiểm tra trùng phòng ban: bool
kiemtra(string s) và sử dụng phƣơng thức so sánh chuỗi không phân biệt chữ
hoa chữ thƣờng:
string.Compare(string,string,bool)
Xóa phòng ban được chọn trong treeview
private void btn_XoaPB_Click(object sender, EventArgs e)
{
if(MessageBox.Show("Bạn có chắc muốn xóa?","Thông báo",
MessageBoxButtons.YesNo,MessageBoxIcon.Question,
{
FI
MessageBoxDefaultButton.Button1)==DialogResult.Yes)
U
// Một phòng ban trong treeView được chọn
- H
if (trv_DS.SelectedNode != null)
{
IT
F
cbo_phongban.Items.Remove(trv_DS.SelectedNode.Text);
trv_DS.Nodes.Remove(trv_DS.SelectedNode);
}
}
}
53
index = node.Index;
break;
}
trv_DS.Nodes[index].Nodes.Add(txt_hoten.Text+"
("+txt_maso.Text+")");
trv_DS.ExpandAll(); //mở rộng treeview
}
Yêu cầu:
FI
Nhập số vào textbox Nhập số (có kiểm tra dữ liệu nhập).
U
btnCapNhat: thêm số vừa nhập vào combobox, đồng thời xóa dữ liệu trong
- H
textbox Nhập số, đặt con trỏ lại textbox (có kiểm tra số vừa nhập đã tồn tại trong
I
combobox chƣa trƣớc khi thêm).T
F
Khi ngƣời dùng chọn một số trong combobox thì danh sách các ƣớc số của số
này sẽ hiển thị vào listbox bên phải tƣơng ứng.
Khi nhấn các button Tính: “Tổng các ƣớc số”, “Số lƣợng các ƣớc số chẵn”, “Số
lƣợng các ƣớc số nguyên tố” thì hiển thị thông tin tƣơng ứng vào MessageBox dựa vào
các ƣớc số trên listbox.
btnThoat: thoát khỏi ứng dụng có xác nhận từ ngƣời dùng.
Tạo HotKey cho các button nhƣ trên giao diện
54
Yêu cầu:
Khi Form hiện lên, danh sách lớp ở treeView đã tồn tại một số lớp; checkbox
Thêm lớp là false (groupbox Thông tin lớp và các Control bên trong ẩn đi). Khi
checkbox Thêm lớp là true groupBox Thông tin lớp và các control bên trong hiện lên.
FI
Button Thêm lớp: Thực hiện thêm một lớp mới vào Danh sách lớp của TreeView
(Kiểm tra tên lớp không đƣợc trùng trƣớc khi thêm), đồng thời thêm lớp đó vào
ComboBox chọn lớp. U
- H
Button Cập Nhật: Thêm một sinh viên vào danh sách lớp đang chọn trên
IT
ComboBox với nội dung các node nhƣ hình. Trƣớc khi thêm kiểm tra thông tin nhập
F
bao gồm: các textbox nhập không đƣợc để trống, không trùng mã sinh viên.
55
Button Xóa: Chỉ cho phép xóa một node là sinh viên đang chọn trên TreeView
(xác nhận trƣớc khi xóa).
Khi click chọn một node là mã sinh viên trong TreeView, hiển thị thông tin của
sinh viên đó lên textbox tƣơng ứng.
56
Yêu cầu:
btnNgauNhien: thực hiện thêm vào listbox 50 tên dựa vào mảng chuỗi HO,
TENLOT, TEN đƣợc kết hợp ngẫu nhiên
HO = {“Lê”, “Nguyễn”, “Lý”, “Trần”, “Lâm”, “Hồ”, “Lai”, “Huỳnh”, “La”}
TENLOT = {“Quang”, “Thành”, “Ngọc”, “Anh”, Xuân”, “Bảo”, “Cẩm”, “Thị”,
“Kim”, “Thái”, “Hồng”}
TEN = {“Hà”, “Danh”, “Sơn”, “Mai”, “Thắng”, “Kỳ”, “Thành”, “Lâm”, “Tâm”,
“Phụng”, “Thắm”}
Thực hiện các button tƣơng ứng trên giao diện.
Khi ngƣời dùng double click vào tên đang chọn thì sẽ mở Inputbox, cho phép
ngƣời dùng thay đổi tên mới vào vị trí tên này.
4. Bài tập về nhà
Bài 1. Viết chƣơng trình từ điển Anh – Việt và Việt – Anh
FI
U
- H
IT
F
Yêu cầu:
Khi nhập vào combobox từ cần tra thì chƣơng trình sẽ dò tìm đến chữ nào khớp
với ký tự gần nhất.
Khi nhấn button Enter hoặc double click vào từ cần tra thì nghĩa tƣơng ứng của
từ sẽ hiển thị vào textbox bên phải tƣơng ứng.
Danh sách các từ lƣu sẵn vào List
Bài 2. Viết chƣơng trình thêm các phần tử vào listbox (listbox đƣợc chọn nhiều phần
tử) các số tự nhiên N đƣợc nhập từ textbox.
57
Yêu cầu: các button lệnh thực hiện các công việc sau:
Tính tổng các phẩn tử trong Listbox, hiển thị lên Messagebox.
Xóa phần tử đầu và cuối của listbox.
Xóa các phần tử đang chọn trong listbox.
Tăng giá trị mỗi phần tử lên 2. FI
U
Thay mỗi giá trị của mỗi phần tử bằng bình pƣơng của chính nó
- H
Thực hiện chọn các phần tử trong listbox là số chẵn.
IT
Thực hiện chọn các phần tử trong listbox là số lẻ.
F
Bài 3. Thiết kế giao diện nhập danh bạ với yêu cầu nhƣ sau:
58
Yêu cầu:
Khi form đƣợc load lên treeView chứa tất cả các ký tự từ A Z.
Nhằm mục đích tiện lợi cho ngƣời sử dụng, khi muốn thêm một ngƣời mới vào
danh bạ, chƣơng trình sẽ đƣa ngƣời này vào treeView ở vị trí node tƣơng ứng với chữ
cái đầu của tên (xem hình).
FI
U
- H
IT
F
59
A. MỤC TIÊU:
Thiết kế đƣợc giao diện Windows Form từ các control trong C#.
Sử dụng đƣợc các Controls Textbox, Label, Button, ListView, Menu,
ContextMenustrip, Timer, Common Dialog.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
+
- H
Phƣơng thức: Add, AddRange, RemoveAt, Remove, IndexOf, Contains
Menustrip: cung cấp nhóm lệnh có quan hệ với nhau cho các ứng dụng
Windows Form IT
F
+ Khai báo trình xử lý sự kiện Click cho MenuStrip:
Kích đúp vào menu item của MenuStrip để tạo sự kiện.
Hoặc trong cửa sổ Properties chọn Event, double click vào sự kiện
Click.
ContextMenustrip: Khi user kích chuột phải lên control thì sẽ hiển thị Context
Menu đã cài đặt sẵn. Cách tạo và sử dụng tƣơng tự MenuStrip.
Timer (bộ định thời gian):
+ Thuộc tính: Enabled, Interval.
+ Sự kiện: Tick.
+ Phƣơng thức: Start, Stop.
Dialog: SaveDialog, OpenDialog, ColorDialog, FontDialog
Các bước tạo một Dialog:
1. Kéo thả dialog vào form
60
Hướng dẫn:
Các control đƣợc sử dụng trong form gồm: một Label (label1) (dùng để hiển thị
giờ lấy từ hệ thống), một Timer (timer1). Timer đƣợc khai báo với các thuộc tính sau:
o Enabled: Enable sự kiện Tick.
o Interval: khoảng thời gian chờ giữa 2 lần gọi Tick (đơn vị mili giây)
Các sự kiện được xử lý:
private void timer1_Tick(object sender, EventArgs e) FI
{ U
- H
// Lấy thời gian hệ thống
IT
DateTime now = new DateTime();
}
F
label1.Text = now.ToString();
61
Hướng dẫn:
Thiết kế giao diện
Bƣớc 1: Chọn chế độ hiển thị View cho listview:
FI
U
- H
Bƣớc 3: Thiết lập thuộc tính GridLines, FullRowSelect (nếu cần) cho listview:
IT
Các sự kiện xử lý cho button:
+ Button Thêm:
F
private void btnthem_Click(object sender, EventArgs e)
{
//cách 1
//lstv1.Items.Add(txtmssv.Text).SubItems.Add(txthoten.Text);
//cách 2
ListViewItem item = new ListViewItem();
ListViewItem.ListViewSubItem subitem = new
ListViewItem.ListViewSubItem();
item.Text = txtmssv.Text;
subitem.Text = txthoten.Text;
item.SubItems.Add(subitem);
lstv1.Items.Add(item);
62
//cách 3
/*ListViewItem item1 = new ListViewItem(new[] { txtmssv.Text,
txthoten.Text });
lstv1.Items.Add(item1); */
}
Lưu ý: Sinh viên tự viết phƣơng thức kiểm tra trùng mã số sinh viên trƣớc khi
thêm vào danh sách.
+ Button Xóa:
private void btnxoa_Click(object sender, EventArgs e)
{
foreach (ListViewItem l in lstv1.SelectedItems)
{
l.Remove();
}
}
+ Button Sửa:
private void btnsua_Click(object sender, EventArgs e)
{
FI
if (lstv1.FocusedItem != null && lstv1.FocusedItem.Index >= 0)
{ U
- H
ListViewItem item = lstv1.FocusedItem;
IT
item.SubItems[0].Text = txtmssv.Text;
}
F
item.SubItems[1].Text = txthoten.Text;
63
Yêu cầu:
Nhập văn bản vào textbox, sau đó lƣu nội dung đã nhập thành file: *.txt
Bổ sung phần đọc file text từ ví dụ trên: mở file *.txt và hiển thị nội lên TextBox.
Hướng dẫn:
Thiết kế giao diện
Các sự kiện:
+ Button Lưu File:
SaveFileDialog svg = new SaveFileDialog();
svg.Filter = "Text files | *.txt";
if (svg.ShowDialog() == DialogResult.OK)
FI
{
U
string filename;
- H
IT
filename = svg.FileName;
textBox1.Text = filename;
F
StreamWriter sw = File.CreateText(filename);
sw.Write(richTextBox1.Text);
sw.Close();
}
+ Button Mở File
//Lọc loại đuôi file theo mong muốn
openFileDialog1.Filter = "All Text File (*.txt)|*.txt|All
Document (*.pdf)|*.pdf";
//Nếu dialog openFileDialog1 chọn OK
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//Gán đường dẫn lên Textbox
textBox1.Text = openFileDialog1.FileName;
64
FI
U
- H
Yêu cầu: IT
F
Khi Load form lên thực hiện thêm dữ liệu vào Combobox dân tộc.
Thực hiện Thêm, Xóa, Sửa từ các control lên Listview. Lƣu ý “Thêm không cho
trùng mã sinh viên”, không cho sửa Mã sinh viên.
Sử dụng ContextMenustrip cho thực hiện Xóa khi kích chọn phải chuột vào
Listview.
Hỏi xác nhận trƣớc khi đóng Form.
Bài 2. Thiết kế chƣơng trình quản lý thông tin tài khoản cho một ngân hàng với giao
diện sau:
65
Yêu cầu:
Form load lên có hiện trạng nhƣ hình trên.
Khi nhấn vào button “Thêm”, text của button chuyển thành “Hủy” và Enabled
button “Lƣu”, các control textbox là rỗng, đặt con trỏ vào textbox Số tài khoản.
Button “Lƣu” có tác dụng lƣu dữ liệu từ các textbox vào trong listview.
Button “Xóa” có tác dụng xóa mẫu tin hiện hành trong listview (Enabled = true
khi một mẫu tin đƣợc chọn trong listview).
FI
U
Khi click một khách hàng trong listview, hiển thị thông tin lên các textbox tƣơng
ứng.
- H
Thực hiện tính Tổng tiền, STT đƣợc đánh tự động khi thực hiện Thêm, Xóa.
IT
F
66
Yêu cầu:
Khi ngƣời sử dụng click vào mục kết thúc thì xuất hiện một Messagebox hỏi
ngƣời sử dụng sau đó mới quyết định có dừng chƣơng trình hay không.
Trong menu Cập Nhật có các mục:
FI
U
- H
+ Xóa học viên: Xóa tất cả các học viên đang chọn trong Lớp A và Lớp B. (các
IT
listbox Lớp A và Lớp B cho phép chọn cùng lúc nhiều mục).
+ F
Chuyển sang lớp A: Chuyển các mục đang chọn trong Lớp B sang Lớp A
+ Chuyển sang lớp B: Chuyển các mục đang chọn trong Lớp A sang Lớp B
Lưu ý: Khi hai mục trên đƣợc chọn nếu không có học viên nào đƣợc chọn trong
listbox thì xuất hiện một MessageBox yêu cầu ngƣời sử dụng phải chọn học viên
trƣớc.
+ Nhập học viên mới: Khi mục này đƣợc chọn thì xuất hiện form cho phép
nhập thông tin nhƣ sau (combobox Lớp: chứa Lớp A và Lớp B).
67
Bài 2. Thiết kế form main có menustrip, gắn tất cả bài tập trong tuần này và hiển thị
các form khi chọn menu tƣơng ứng.
FI
U
- H
IT
F
68
A. MỤC TIÊU:
Khai báo đƣợc đối tƣợng SqlConnection, SqlCommand.
Sử dụng đƣợc đối tƣợng SqlConnection để thực hiện kết nối cơ sở dữ liệu.
Sử dụng SqlCommand thực hiện thêm, xóa, sửa dữ liệu trên bảng.
Lƣu trữ dữ liệu dùng SQL Server 2012.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
Thuộc tính Mô tả
State Tình trạng kết nối của Connection với các giá trị.
Closed Kết nối đã đóng.
Connecting Đang kết nối với nguồn dữ liệu.
69
Command: Đối tƣợng SQLCommand cho phép chúng ta chọn kiểu tƣơng tác
ứng với thao tác thực hiện trên cơ sở dữ liệu.
+ Khai báo:
SqlCommand cmd = new SqlCommand();
string strsql = "select MaSinhVien from SinhVien";
+ Thuộc tính:
cmd.CommandText = <chuỗi tương tác>;
cmd.Connection = <tên biến kết nối>;
+ Phƣơng thức:
FI
U
ExecuteReader(): dạng truy vấn dữ liệu
- H
Chuỗi tƣơng tác: câu truy vấn Select
Đối tƣợng lƣu trữ:
IT
SqlDataReader rdr = cmd.ExecuteReader();
F
ExecuteNonQuery(): dạng hành động (thêm/ sửa/ xóa dữ liệu)
Chuỗi tƣơng tác: câu truy vấn Insert/ Update/ Delete
Đối tƣợng lƣu trữ:
bool kq = cmd.ExecuteNonQuery();
ExecuteScalar(): dạng truy vấn lấy một giá trị (cột đầu tiên, dòng đầu
tiên tập kết quả)
Chuỗi tƣơng tác: câu truy vấn Select với Count()/ Sum()/ Max()/
Min()
Đối tƣợng lƣu trữ:
int kq = (int)cmd.ExecuteScalar();
70
Yêu cầu:
FI
Chức năng thêm dữ liệu: nhập thông tin vào textbox Mã khoa, Tên khoa sau đó
U
nhấn chọn button Thêm thì hai thông tin Mã khoa, Tên khoa vừa nhập sẽ đƣợc lƣu vào
- H
bảng Khoa trong cơ sở dữ liệu QLSinhVien.
IT
Chức năng xóa dữ liệu: nhập thông tin vào textbox Mã khoa, sau đó nhấn chọn
F
button Xóa thì thông tin của Khoa có mã khoa vừa nhập sẽ bị xóa khỏi bảng Khoa
trong cơ sở dữ liệu.
Chức năng sửa dữ liệu: nhập thông tin vào textbox Mã khoa, Tên khoa sau đó
nhấn button Sửa thì thông tin của bảng Khoa trong cơ sở dữ liệu sẽ thay đổi (Tên khoa
thay đổi tƣơng ứng Mã khoa vừa nhập).
Hướng dẫn:
Bước 1: Khai báo thƣ viện dùng cho việc thực hiện kết nối cơ sở dữ liệu:
//…
using System.Data.SqlClient;
71
namespace ADO1
{
public partial class QLKhoa : Form
{
SqlConnection connsql;
public QLKhoa()
{
InitializeComponent();
}
}
Bước 3: Khởi tạo các thông số cấu hình cho đối tƣợng kết nối theo 2 cách:
(1): Chứng thực quyền Windows.
(2): Chứng thực quyền SQL Server.
Thực hiện việc Thêm dữ liệu từ textbox Mã khoa và Tên khoa.
namespace ADO1
{
public partial class QLKhoa : Form
{
FI
SqlConnection connsql;
U
H
SqlConnection conn;
-
T
public QLKhoa()
I
{
F
InitializeComponent();
conn = new SqlConnection("Data Source=Tên_Server;
Initial Catalog=QLSINHVIEN;Integrated Security=True");
connsql = new SqlConnection("Data Source=Tên_Server;
Initial Catalog=QLSINHVIEN;User ID=…; Password=…");
}
}
Trong sự kiện của button Thêm chúng ta xử lý nhƣ sau:
private void btnThem_Click(object sender, EventArgs e)
{
try
{
72
Tƣơng tự nhƣ việc thêm dữ liệu để thực hiện xóa và sửa chúng ta chỉ cần thực hiện
thay đổi chuỗi câu lệnh điều khiển ở câu lệnh điều khiển trong quy trình trên tƣơng
ứng với sự kiện của việc xóa hay sửa nhƣ sau:
//Chuoi ket noi ung voi yeu cau sua du lieu
string updateString = "update Khoa set TenKhoa='" +
txtTenKhoa.Text + "' where MaKhoa='"+ txtMaKhoa.Text + "'";
//Chuoi ket noi ung voi yeu cau xoa du lieu
string deleteString = "delete Khoa where MaKhoa='" +
txtMaKhoa.Text + "'";
73
Yêu cầu:
Chức năng thêm dữ liệu:
+ Nhập thông tin cho trƣờng Mã môn học, Tên môn học sau đó nhấn vào
button Thêm thì hai thông tin Mã môn học, Tên môn học vừa nhập sẽ đƣợc lƣu vào
bảng MonHoc trong cơ sở dữ liệu QLSinhVien.
+ Mã môn học, Tên môn học không đƣợc để trống.
Chức năng xóa dữ liệu:
+ Nhập thông tin cho trƣờng Mã môn học, sau đó nhấn button Xóa thì thông tin
liệu. FI
của môn học có mã môn học vừa nhập sẽ bị xóa khỏi bảng MonHoc trong cơ sở dữ
+ U
Mã môn học không đƣợc để trống, Tên môn học không nhập dữ liệu.
Chức năng sửa dữ liệu: - H
+ IT
Nhập thông tin cho trƣờng Mã môn học, Tên môn học sau đó nhấn button
F
Sửa thì thông tin của Môn học trong cơ sở dữ liệu sẽ thay đổi (tên môn học thay đổi
tƣơng ứng mã môn học vừa nhập vào).
+ Mã môn học, Tên môn học không đƣợc để trống.
3. Bài tập nâng cao
Bài 1: Thiết kế form Quản lý sinh viên nhƣ hình mẫu sau:
74
Yêu cầu:
Chức năng thêm dữ liệu:
+ Nhập thông tin cho trƣờng Mã lớp, Mã sinh viên, Tên sinh viên, Ngày sinh
sau đó nhấn vào button Thêm thì 4 thông tin vừa nhập sẽ đƣợc lƣu vào bảng SinhVien
trong cơ sở dữ liệu QLSinhVien.
+ Mã lớp, Mã sinh viên, Tên sinh viên, ngày sinh không đƣợc để trống.
Chức năng xóa dữ liệu:
+ Nhập thông tin cho trƣờng Mã sinh viên, Tên sinh viên, sau đó nhấn button
Xóa thì thông tin của sinh viên có mã sinh viên và tên trùng với thông tin vừa nhập sẽ
bị xóa khỏi bảng SinhVien trong cơ sở dữ liệu.
+ Mã sinh viên, Tên sinh viên không đƣợc để trống, Mã lớp, Ngày sinh không
nhập dữ liệu.
Chức năng sửa dữ liệu:
+ Nhập thông tin cho trƣờng Mã sinh viên, Mã lớp, Tên sinh viên, Ngày sinh
sau đó nhấn button Sửa thì thông tin của sinh viên trong cơ sở dữ liệu sẽ thay đổi (Mã
lớp, Tên sinh viên, Ngày sinh thay đổi nếu đƣợc nhập liệu, trƣờng nào không nhập liệu
thì không thay đổi tƣơng ứng với mã sinh viên đã nhập).
+
ít nhất một trƣờng có dữ liệu. FI
Mã sinh viên không đƣợc để trống, Mã lớp, Tên sinh viên, Ngày sinh phải có
U
H
Bài 2: Thiết kế form Quản lý Điểm nhƣ hình mẫu sau:
-
IT
F
Yêu cầu:
Chức năng thêm dữ liệu:
+ Nhập thông tin cho trƣờng Mã sinh viên, Mã môn học, Điểm sau đó nhấn
vào button Thêm thì 3 thông tin vừa nhập sẽ đƣợc lƣu vào bảng Diem trong cơ sở dữ
liệu QLSinhVien.
+ Mã môn học, Mã sinh viên, Điểm không đƣợc để trống.
Chức năng xóa dữ liệu:
75
+ Nhập thông tin cho trƣờng Mã sinh viên, Mã môn học, sau đó nhấn button
Xóa thì một dòng có mã sinh viên và mã môn học tƣơng ứng với thông tin vừa nhập sẽ
bị xóa khỏi bảng Diem trong cơ sở dữ liệu.
+ Mã sinh viên, Mã môn học không đƣợc để trống, Điểm không nhập dữ liệu.
Chức năng sửa dữ liệu:
+ Nhập thông tin cho trƣờng Mã sinh viên, Mã môn học, Điểm sau đó nhấn
button Sửa thì điểm của sinh viên theo môn học trong cơ sở dữ liệu sẽ thay đổi (điểm
thay đổi tƣơng ứng Mã sinh viên, Mã môn học vừa nhập vào).
+ Mã sinh viên, Mã môn học không đƣợc để trống, Điểm phải đƣợc nhập dữ
liệu và chỉ đƣợc nhập số.
4. Bài tập về nhà
Bài 1: Thiết kế form Quản lý Lớp nhƣ hình mẫu sau:
FI
U
Yêu cầu:
- H
Chức năng thêm dữ liệu:
IT
+
F
Nhập thông tin cho trƣờng Mã khoa, Mã lớp, Tên lớp, sau đó nhấn vào
button Thêm thì 3 thông tin Mã khoa, Mã lớp, Tên lớp vừa nhập sẽ đƣợc lƣu vào bảng
Lop trong cơ sở dữ liệu QLSinhVien.
+ Mã khoa, Mã lớp, Tên lớp không đƣợc để trống.
Chức năng xóa dữ liệu:
+ Nhập thông tin cho trƣờng Mã lớp, sau đó nhấn button Xóa thì thông tin của
Lớp có mã lớp vừa nhập sẽ bị xóa khỏi bảng Lop trong cơ sở dữ liệu.
+ Mã lớp không đƣợc để trống, Mã khoa, Tên lớp không nhập dữ liệu.
Chức năng sửa dữ liệu:
+ Nhập thông tin cho trƣờng Mã lớp, Mã khoa, Tên lớp, sau đó nhấn button Sửa
thì thông tin của Lớp trong cơ sở dữ liệu sẽ thay đổi (Mã khoa, Tên lớp thay đổi tƣơng
ứng Mã lớp vừa nhập vào).
+ Mã lớp không để trống, Mã khoa, Tên lớp phải có ít nhất 1 trƣờng có dữ liệu.
76
1 Computer 1 1
+ Thuộc tính:
cmd.CommandText = <chuỗi tương tác>;
cmd.Connection = <tên biến kết nối>;
+ Phƣơng thức:
ExecuteReader(): dạng truy vấn dữ liệu
o Chuỗi tƣơng tác: câu truy vấn Select
o Đối tƣợng lƣu trữ:
SqlDataReader rdr = cmd.ExecuteReader();
77
ExecuteScalar(): dạng truy vấn lấy một giá trị (cột đầu tiên, dòng đầu
tiên tập kết quả)
o Chuỗi tƣơng tác: truy vấn Select với Count()/ Sum()/ Max()/ Min()
o Đối tƣợng lƣu trữ:
int kq = (int)cmd.ExecuteScalar();
Yêu cầu:
Chức năng thêm dữ liệu:
+ Nhập thông tin cho trƣờng Mã khoa, Tên khoa, sau đó nhấn vào button Thêm
thì 2 thông tin Mã khoa, Tên khoa vừa nhập sẽ đƣợc lƣu vào bảng Khoa trong cơ sở dữ
78
liệu QLSinhVien.
+ Kiểm tra Mã khoa không đƣợc trùng khi thêm mới (Kiểm tra khóa chính).
Chức năng xóa dữ liệu: nhập thông tin cho trƣờng Mã khoa, sau đó nhấn button
Xóa thì thông tin của Khoa có mã khoa vừa nhập sẽ bị xóa khỏi bảng Khoa trong cơ sở
dữ liệu.
Chức năng sửa dữ liệu: nhập thông tin cho trƣờng Mã khoa, Tên khoa sau đó
nhấn button Sửa thì thông tin của Khoa trong cơ sở dữ liệu sẽ thay đổi (Tên khoa thay
đổi tƣơng ứng Mã khoa vừa nhập vào).
Hướng dẫn:
Công việc 1: Viết phƣơng thức thêm, xóa , sửa vào bảng Khoa (bài thực hành số 7)
Công việc 2:
Định nghĩa phƣơng thức kiểm tra trùng Mã khoa
bool KT_MaKhoa(string ma)
{
try
{
//Mo ket noi
connsql.Open();
FI
U
//Xay dung chuoi truy van
- H
string selectString = "select count(*) from Khoa
where MaKhoa = '" + ma + "'" ;
IT
//Khai bao command voi chuoi truy van va bien ket noi
F
SqlCommand cmd = new SqlCommand(selectString, connsql);
//goi ham thuc thi truy van
int count = (int)cmd.ExecuteScalar();
//Dong ket noi
connsql.Close();
//Xu ly ket qua truy van
if (count >= 1)
return false;
return true;
}
catch (Exception ex) { return false; }
}
79
Bổ sung việc gọi phƣơng thức kiểm tra trùng mã khoa thực thi
private void btnThem_Click(object sender, EventArgs e)
{
try
{
if (KT_MaKhoa(txtMaKhoa.Text) == true)
{
connsql.Open();
string insertString;
insertString = "insert into Khoa values('" +
txtMaKhoa.Text + "',N'" + txtTenKhoa.Text + "')";
SqlCommand cmd = new SqlCommand(insertString, connsql);
cmd.ExecuteNonQuery();
connsql.Close();
MessageBox.Show("Thanh cong");
}
else { MessageBox.Show("Trung ma khoa"); }
}
catch (Exception ex) {
FI
U
MessageBox.Show("That bai"); }
}
- H
IT
Bài 2: Thiết kế form Quản lý Lớp nhƣ hình mẫu sau:
F
Yêu cầu:
Hiển thị mã khoa trong bảng Khoa lên comboBox Khoa.
Chức năng thêm dữ liệu:
+ Chọn Mã khoa trong comboBox, Nhập mã lớp, Tên lớp, sau đó nhấn vào
button Thêm thì các thông tin Mã khoa, Mã lớp, Tên lớp vừa nhập sẽ đƣợc lƣu vào
bảng Lop trong cơ sở dữ liệu QLSinhVien.
80
+ Kiểm tra Mã lớp không đƣợc trùng khi thêm mới (Kiểm tra khóa chính).
Chức năng xóa dữ liệu: nhập thông tin cho trƣờng Mã lớp, sau đó nhấn button
Xóa thì thông tin của Lớp có Mã lớp vừa nhập sẽ bị xóa khỏi bảng Lop trong cơ sở dữ
liệu.
Chức năng sửa dữ liệu: chọn Mã khoa, nhập Mã lớp, Tên khoa, sau đó nhấn
button Sửa thì thông tin của Lop trong cơ sở dữ liệu sẽ thay đổi (Tên lớp, Mã khoa
thay đổi tƣơng ứng Mã lớp vừa nhập vào).
Hướng dẫn:
Công việc 1: Dùng SqlDataReader hiển thị khóa ngoại cho combobox Khoa.
Bƣớc 1: Khai báo thƣ viện thực hiện kết nối cơ sở dữ liệu. Thực hiện việc kết nối
CSDL thông qua đối tƣợng SqlConnection chúng ta có đối tƣợng connsql.
Bƣớc 2: Viết phƣơng thức load dữ liệu vào combobox Khoa nhƣ sau:
private void LoadKhoa_ComboBox()
{
//Mo ket noi CSDL
connsql.Open();
//Thiet lap chuoi truy van dang hien thi du lieu
string selectString = "select
//Xay dung command truy van FI * from Khoa";
U
SqlCommand cmd = new SqlCommand(selectString, connsql);
- H
//Goi phuong thuc truy van dang hien thi du lieu
IT
SqlDataReader rd = cmd.ExecuteReader();
F
//Hien thi ket qua truy van
while (rd.Read())
{
cboKhoa.Items.Add(rd["MaKhoa"].ToString());
}
rd.Close();
//Dong ket noi
connsql.Close();
}
Bƣớc 3: sự kiện Form Load gọi thực thi phƣơng thức LoadKhoa_ComboBox()
81
Công việc 2: Dùng SqlDataReader kiểm tra khóa chính trƣớc khi thêm dữ liệu
Bƣớc 1: viết phƣơng thức kiểm tra khóa chính cho bảng Lop dùng
SqlDataReader. Tham số truyền vào là mã lớp, kết quả trả về là true khi mã lớp không
tồn tại trong bảng Lop (thêm đƣợc dữ liệu), trả về là false khi tồn tại mã lớp trong
bảng lớp (không thêm đƣợc dữ liệu và thông báo lỗi trùng khóa chính):
public bool KT_KhoaChinh(string pMa)
{
//Mo ket noi CSDL
connsql.Open();
//Thiet lap chuoi truy van dang hien thi du lieu
string selectString = "select * from Lop where MaLop =
'" + pMa + "'";
//Xay dung SqlCommand truy van
FI
SqlCommand cmd = new SqlCommand(selectString, connsql);
//Goi phuong thuc truy van dang hien thi du lieu
U
SqlDataReader rd = cmd.ExecuteReader();
//Xu ly ket qua - H
if (rd.HasRows)
IT
{ F
rd.Close();
connsql.Close();
return false;
}
else
{
rd.Close();
connsql.Close();
return true;
}
}
Bƣớc 2: Gọi phƣơng thức KT_KhoaChinh() kiểm tra khóa chính trƣớc khi thêm
nhƣ sau:
82
}
}
- H
IT
Công việc 3: Dùng SqlDataReader kiểm tra khóa ngoại trƣớc khi Xóa/Sửa dữ liệu.
F
Thực hiện tƣơng tự Công việc 2.
Lưu ý: Kiểm tra ràng buộc giao diện cho các trƣờng hợp không cho rỗng. Ví dụ
không cho rỗng mã lớp khi thêm:
private void btnThem_Click(object sender, EventArgs e)
{
try
{
if (txtMaLop.Text == string.Empty)
{
MessageBox.Show("Bạn phải nhập " + lblMaLop.Text);
txtMaLop.Focus();
return;
}
83
if (KT_KhoaChinh(txtMaLop.Text) == true)
{
connsql.Open();
string insertString;
insertString = "insert into Lop values('" +
txtMaLop.Text + "','" + txtMaMaKhoa.SelectedItem.toString()
+ "',N'" + txtTenKhoa.Text + "')";
SqlCommand cmd = new SqlCommand(insertString, connsql);
cmd.ExecuteNonQuery();
connsql.Close();
MessageBox.Show("Thanh cong");
}
else
{
MessageBox.Show("Trung ma khoa");
}
}
catch (Exception ex)
{
MessageBox.Show("That bai"); FI
} U
}
- H
2. Bài tập tại lớp IT
F
Bài 1: Thiết kế form SinhVien theo mẫu sau:
Yêu cầu:
Hiển thị mã lớp trên comboBox Lớp.
Khi nhấn button Thêm:
+ Mã sinh viên mới nhập vào không đƣợc trùng mã sinh viên có trong bảng
84
Yêu cầu:
Hiển thị mã sinh viên trên combobox Sinh viên
Hiển thị mã môn học lên combobox Môn học.
Tất cả thông tin phải đƣợc nhập dữ liệu, Điểm phải nằm trong khoảng (0-10)
FI
Khi nhấn button Thêm: chỉ đƣợc phép thêm điểm mới nếu mã sinh viên và mã
U
môn học đã tồn tại trong cơ sở dữ liệu, và dữ liệu mới nhập vào không đƣợc trùng
- H
khóa chính có trong bảng Điểm (thông báo nếu trùng).
Khi nhấn button Xóa/ Sửa: kiểm tra khóa chính/khóa ngoại khi thao tác.
3. Bài tập nâng cao IT
F
Bài 1: Thiết kế form hiển thị danh sách Lớp trên listview:
85
Yêu cầu:
Khi nhấn vào button Hiển thị dữ liệu thì thông tin lớp học trong bảng Lop sẽ
đƣợc hiển thị nhƣ hình sau:
Khi nhấn vào button Thoát thì thực hiện chức năng đóng form.
Bài 2: Thiết kế form hiển thị danh sách điểm của sinh viên theo môn hoc trên listview
nhƣ hình sau:
FI
U
- H
IT
F
Yêu cầu:
Trong sự kiện Load của Form:
+ Hiển thị mã môn học trong bảng dữ liệu MonHoc lên combobox Môn học,
thêm một item là khoảng trắng (hiểu là tất cả môn học).
86
+ Hiển thị dữ liệu lên listview tất cả các thông tin có trong cơ sở dữ liệu (gồm
Số thứ tự, Tên sinh viên, Ngày sinh, Tên môn học, Điểm).
+ Tính tổng điểm của cột Điểm hiển thị trên listview và gán vào textbox Tổng
điểm.
Nếu chọn một mã môn học cụ thể (khác khoảng trắng) trong combobox Môn học
và nhấn button lọc dữ liệu, dữ liệu trên listview sẽ trở thành:
FI
U
+ Chỉ hiển thị trên listview thông tin Điểm của những sinh viên có Mã môn học
đƣợc chọn.
- H
T
+ Tổng điểm cũng đƣợc cập nhập theo kết quả hiển thị trên ListView
I
+
F
Nếu chọn khoảng trắng trong combobox và nhấn lọc dữ liệu thì:
Hiển thị thông tin điểm của tất cả môn học của từng sinh viên.
Cập nhập tổng điểm theo kết quả hiển thị trên listview
4. Bài tập về nhà
Bài 1: Cho cơ sở dữ liệu QLCuaHang nhƣ sau :
87
Ghi chú:
Cột MaSP trong bảng SANPHAM, MaHD trong bảng HOADON là trƣờng dữ
liệu tự động tăng.
Dữ liệu ban đầu bảng nhƣ sau:
Yêu cầu:
Thiết kế form chính chứa thanh menu gồm các chức năng:
Tạo tồn kho (thực hiện 1 lần mỗi ngày, trƣớc khi bán hàng/ nhập hàng)
Thêm sản phẩm mới
Bán hàng
Thiết kế chức năng tồn kho:
Tạo dữ liệu cho bảng tồn kho cho tất cả sản phẩm trong theo ngày hiện tại, biết rằng:
SLTon = SLTon (ngày trƣớc) + Tổng SL nhập (ngày trƣớc) Tổng SL xuất
(ngày trƣớc)
Tổng số lƣợng nhập = 0
FI
Tổng số lƣợng xuất = 0
U
H
Tạo form nhập dữ liệu cho bảng SANPHAM theo mẫu sau:
-
IT
F
88
Textbox mã hóa đơn, mã sản phẩm, số lƣợng, button Thêm, Hủy, thanh toán bị
mờ
Tạo hóa đơn mới:
+ Thêm một hóa đơn mới vào bảng hóa đơn với mã hóa đơn tự động tăng, ngày
tạo hóa đơn là ngày hiện tại, tình trạng hóa đơn = 0 (chƣa thanh toán)
+ Lấy mã hóa đơn vừa tạo ghi vào textbox mã hóa đơn
+ Hiển thị textbox mã sản phẩm, số lƣợng, button Thêm, Hủy, Thanh toán
Button Thêm:
+ Thêm một dòng tin vào bảng chi tiết hóa đơn
FI
U
Hiển thị mã sản phẩm trên comboBox Sản phẩm
- H
Kiểm tra khóa chính/ khóa ngoại trong bảng chi tiết hóa đơn
IT
Số lƣợng bán phải lớn hơn 0 và nhỏ hơn số lƣợng tồn trong bảng tồn kho
F
+ Cập nhật lại tổng số lƣợng bán trong bảng tồn kho (Tổng SLBan = Tổng
SLBan số lƣợng)
Gợi ý: (có thể sử dụng một trong hai cách)
Cách 1. Sử dụng SqlCommand Update để cập nhật.
Cách 2. Sử dụng Trigger để cập nhật.
89
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
U
+ DataTable (tƣơng đƣơng với một bảng trong database)
- H
+ DataRow (tƣơng đƣơng với một dòng)
T
+ DataColumn( tƣơng đƣơng với một cột)
I
Khởi tạo
F
DataSet ds_QLSinhVien = new DataSet();
Sử dụng
+ Hiển thị dữ liệu lên đối tƣợng comboBox: lấy đối tƣợng DataTable trong
DataSet làm bảng dữ liệu nguồn tƣơng ứng thuộc tính DataSource của
ComboBox.
Ví dụ:
cboKhoa.DataSource = ds_QKhoa.Tables[0];
cboKhoa.DisplayMember = "TenKhoa";
cboKhoa.ValueMember = "MaKhoa";
+ Hiển thị dữ liệu lên đối tƣợng datagridview: sử dụng DataTable trong DataSet
làm bảng dữ liệu nguồn tƣơng ứng thuộc tính DataSource của datagridview.
90
Ví dụ:
gdvKhoa.DataSource= ds_QLSinhVien.Tables[0];
IT
Tạo một command dạng update vào cơ sở dữ liệu sử dụng SqlDataAdapter
o
F
o Tạo trƣờng khóa chính (Primary Key) cho DataTable trong DataSet.
Khai báo và khởi tạo một SqlDataAdapter mới.
o Tìm một DataRow là 1 dòng tin trong DataTable của DataSet.
o Sửa/Xóa thông tin dòng DataRow vừa tìm đƣợc trong DataSet.
o Khai báo và khởi tạo SqlCommandBuilder mới tƣơng ứng với
SqlDataAdapter
o Gọi phƣơng thức Update của SqlDataAdapter.
1.2 Giới thiệu bài tập mẫu (Sử dụng cơ sở dữ liệu QLSinhVien)
Bài 1: Xây dựng form cho phép thêm, xóa, sửa dữ liệu trên bảng Lop có giao diện nhƣ
sau:
91
Yêu cầu:
Đỗ dữ liệu từ bảng Khoa lên combobox Khoa, với mỗi item con thỏa tính chất
nhãn hiển thị là tên khoa (DisplayMember), còn giá trị (ValueMember) là mã khoa khi
chọn item.
Kiểm tra ràng buộc khóa ngoại của bảng lớp dựa vào danh mục khoa trong bảng
khoa.
Kiểm tra mã lớp không trùng khóa chính trong bảng lớp khi thêm.
Hướng dẫn:
Công việc 1: Đỗ dữ liệu từ cơ sở dữ liệu lên combobox (sử dụng SqlDataAdapter)
void Load_ComboBox()
{
FI
//Khai bao DataSet
U
-
//Tao SqlDataAdapter H
DataSet ds = new DataSet();
IT
string strselect = "Select * from Khoa";
F
SqlDataAdapter da = new SqlDataAdapter(strselect, cn);
//cn la doi tuong SqlConnection da duoc khai bao
//Do du lieu tu SqlDataAdapter vao DataSet
da.Fill(ds, "Khoa");
//Gan du lieu nguon cho comboBox
cboKhoa.DataSource = ds.Tables[0];
cboKhoa.DisplayMember = "TenKhoa";
cboKhoa.ValueMember = "MaKhoa";
}
Công việc 2: Viết phƣơng thức kiểm tra trùng khóa, kiểm tra ràng buộc khóa ngoại
(TH tuần 8).
Công việc 3: Viết sự kiện thêm/xóa/sửa trên bảng Lớp (TH tuần 8).
92
FI
U
- H
IT
F
Yêu cầu:
Hiển thị dữ liệu bảng Khoa trên lƣới datagridview khi form đƣợc load lên.
Chức năng Thêm/Xóa/Sửa dữ liệu sử dụng SqlCommandBuilder.
Hướng dẫn:
public partial class Form3 : Form
{
SqlConnection cn;
SqlDataAdapter da_khoa;
DataSet ds_khoa;
DataColumn[] key = new DataColumn[1];
93
public Form3()
{
InitializeComponent();
cn = new SqlConnection("Data Source=PC24;Initial Catalog
= QLSINHVIEN; User ID=sa; Password=sa2012");
string strSelect = "select * from Khoa";
da_khoa = new SqlDataAdapter(strSelect, cn);
ds_khoa = new DataSet();
da_khoa.Fill(ds_khoa, "Khoa");
//them khoa chinh
key[0] = ds_khoa.Tables["Khoa"].Columns[0];
ds_khoa.Tables["Khoa"].PrimaryKey = key;
}
void Databingding(DataTable pDT)
{
txtMaKhoa.DataBindings.Clear();
txtTenKhoa.DataBindings.Clear();
//lien ket du lieu tren textbox voi truong du lieu tuong
ung trong dataTable
FI
txtMaKhoa.DataBindings.Add("Text", pDT, "MaKhoa");
U
txtTenKhoa.DataBindings.Add("Text", pDT, "TenKhoa");
}
- H
T
void load_grid()
I
{
F
dataGridView1.DataSource = ds_khoa.Tables[0];
Databingding(ds_khoa.Tables[0]);
}
private void Form3_Load(object sender, EventArgs e)
{
load_grid();
}
private void btnThem_Click(object sender, EventArgs e)
{
//Tao 1 dong du lieu moi
DataRow newrow = ds_khoa.Tables[0].NewRow();
newrow["MaKhoa"] = txtMaKhoa.Text;
newrow["TenKhoa"] = txtTenKhoa.Text;
94
}
dr.Delete();
FI
//Cap nhat trong CSDL U
- H
SqlCommandBuilder cB = new SqlCommandBuilder(da_khoa);
IT
// Cap nhat trong dataSet hien thi
}
F
da_khoa.Update(ds_khoa, "Khoa");
95
Yêu cầu:
Hiển thị thông tin Lớp lên datagridview.
FI
Đỗ dữ liệu lên combobox Khoa, thông tin khoa lấy từ cơ sở dữ liệu với tên khoa là
U
- H
nhãn hiển thị, mã khoa là giá trị khi nhấn chọn item, trong đó dòng đầu tiên là “Tất cả
khoa”. Khi chọn một khoa trên combobox, datagridview sẽ đƣợc lọc dữ liệu theo.
IT
Chọn một dòng trên datagridview hiển thị thông tin dòng đang chọn lên các control
(textbox, combobox). F
Thực hiện thao tác thêm, xóa, sửa trên bảng lớp (kiểm tra khóa chính, khóa ngoại).
Bài 2: Hiển thị, cập nhật dữ liệu bảng Sinh viên
96
Yêu cầu:
Hiển thị thông tin sinh viên trên datagridview.
Đỗ dữ liệu lên combobox Lớp, thông tin lớp lấy từ cơ sở dữ liệu với tên lớp là nhãn
hiển thị, mã lớp là giá trị khi nhấn chọn item, trong đó dòng đầu tiên là “Tất cả lớp”.
Khi chọn tên lớp trên combobox Lớp, datagridview sẽ đƣợc lọc dữ liệu theo.
Chọn một dòng trên datagridview hiển thị thông tin dòng đang chọn lên các control
(textbox, comboBox).
Thực hiện thao tác thêm, xóa, sửa trên bảng sinh viên (có kiểm tra khóa chinh,
khóa ngoại).
3. Bài tập nâng cao
Cho cơ sở dữ liệu gồm các bảng dữ liệu:
DMChatLieu(MaChatLieu, TenChatLieu)
DMHang (MaHang, TenHang, MaChatLieu, SoLuong, DonGiaNhap,
DonGiaBan, Hinh, GhiChu)
Yêu cầu:
Thiết kế form theo mẫu sau:
FI
U
- H
IT
F
Thực hiện thao tác thêm, xóa, sửa trên bảng mặt hàng (có kiểm tra khóa chinh,
khóa ngoại).
Tìm kiếm: lọc dữ liệu trên datagridview theo các trƣờng dữ liệu có nhập dữ liệu.
4. Bài tập về nhà
Bài 1: Hiển thị, cập nhật dữ liệu bảng Điểm
Yêu cầu:
FI
U
Hiển thị thông tin Điểm của sinh viên theo môn học trên datagridview.
- H
Đỗ dữ liệu trên combobox Sinh viên, thông tin sinh viên lấy từ cơ sở dữ liệu với
IT
tên sinh viên là nhãn hiển thị, mã sinh viên là giá trị khi nhấn chọn item. Khi chọn tên
F
sinh viên trên combobox Sinh viên, datagridview sẽ lọc dữ liệu theo.
Đỗ dữ liệu trên combobox Môn học, thông tin môn học lấy từ cơ sở dữ liệu với tên
môn học là nhãn hiển thị, mã môn học là giá trị khi nhấn chọn item. Khi chọn tên môn
học trên combobox Môn học, datagridview sẽ lọc dữ liệu theo.
Chọn một dòng trên datagridview hiển thị thông tin dòng đang chọn lên các control
(textbox, comboBox).
Thực hiện thao tác thêm, xóa, sửa trên bảng điểm (có kiểm tra khóa chinh, khóa
ngoại).
98
1 Computer 1 1
T
lệnh SQL (dạng Select) và đối tƣợng Connection để đọc và ghi dữ liệu.
I
F
DataSet: nhận dữ liệu từ SqlDataAdapter, và cung cấp các phƣơng thức xử lý dữ
liệu. DataSet có nhiều đối tƣợng đi kèm theo nhƣ sau:
DataTable (tƣơng đƣơng với 1 bảng trong database)
DataRow (tƣơng đƣơng với 1 dòng trong bảng)
DataColumn( tƣơng đƣơng với 1 cột trong bảng)
SqlCommandBuilder: là đối tƣợng cập nhật dữ liệu từ SqlDataAdapter vào cơ sở
dữ liệu.
1.2 Giới thiệu bài tập mẫu
Thiết kế form Quản lý Khoa hoàn chỉnh (nhập trên Textbox), các control giãn
theo tỷ lệ tùy ý (Sử dụng cơ sở dữ liệu QLSinhVien)
99
Yêu cầu:
FormLoad:
+ Datagridview: hiển thị tất cả khoa trong bảng Khoa
+ Tất cả textbox bị vô hiệu hóa
+ Các button Sửa, Xóa, Lƣu bị vô hiệu hóa
Khi chọn vào button lệnh Thêm:
+ Các Textbox có hiệu lực
FI
+ Button Lƣu có hiệu lực
U
+
- H
Dấu nháy xuất hiện ở textbox Mã khoa.
Khi chọn vào Datagrid
IT
+
+
F
Hiển thị thông tin tƣơng ứng lên các textbox
Button Sửa và Xóa có hiệu lực
Chọn button Sửa
+ Button Lƣu có hiệu lực
+ Các textbox có hiệu lực trừ textbox Mã khoa
+ Cho phép sửa các thông tin còn lại
Khi chọn button Lƣu
+ Kiểm tra thông tin vừa nhập hoặc sửa cho phù hợp
+ Lƣu vào Cơ sở dữ liệu (cần xác định là đang lƣu cho hành động Thêm hay
Sửa).
+ Thông báo thành công hoặc báo lỗi nếu có.
+ Button Lƣu bị vô hiệu hóa.
100
FI
U
- H
IT
F
101
102
F
btnLuu.Enabled = true;
//Các textbox có hiệu lực trừ textbox Mã khoa
txtTenKhoa.Enabled = true;
txtMaKhoa.Enabled = false;
}
//Sự kiện click của button Lưu
private void btnLuu_Click(object sender, EventArgs e)
{
//Kiểm tra thông tin vừa nhập hoặc sửa cho phù hợp
if (txtMaKhoa.Text == string.Empty)
{
MessageBox.Show("Chưa nhập Mã Khoa");
txtMaKhoa.Focus();
return; }
103
if (txtTenKhoa.Text == string.Empty)
{
MessageBox.Show("Chưa nhập Tên Khoa");
txtTenKhoa.Focus();
return;
}
if (txtMaKhoa.Enabled == true) // Thêm
{
DataRow insert_New = ds_QLSV.Tables["Khoa"].NewRow();
insert_New["MaKhoa"] = txtMaKhoa.Text;
insert_New["TenKhoa"] = txtTenKhoa.Text;
ds_QLSV.Tables["Khoa"].Rows.Add(insert_New);
}
else // Sửa
{
DataRow update_New = ds_QLSV.Tables["Khoa"].Rows.Find
(txtMaKhoa.Text);
if (update_New != null)
{
FI
update_New["TenKhoa"] = txtTenKhoa.Text;
} U
}
- H
IT
SqlCommandBuilder cmb = new SqlCommandBuilder(da_Khoa);
F
da_Khoa.Update(ds_QLSV, "Khoa")
MessageBox.Show("Thành công");
btnLuu.Enabled = false;
}
//Sự kiện click của button Xóa
private void btnXoa_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Bạn muốn xóa?", "Thông báo",
MessageBoxButtons. YesNo, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2) ==
System.Windows.Forms.DialogResult.Yes)
{
//Nếu đồng ý xóa
DataTable dt_Lop=new DataTable();
104
}
}
FI
U
2. Bài tập tại lớp - H
IT
Thiết kế giao diện theo mẫu sau:
F
105
Yêu cầu:
Thiết kế:
+ Sử dụng tableLayoutPanel để thiết kế giao diện nhƣ hình vẽ, sao cho
nôi dung luôn hiển thị ở giữa khi phóng to hay thu nhỏ cửa sổ.
FormLoad:
+ Combobox Khoa: hiển thị tất cả khoa trong Bảng Khoa
+ Combobox Lớp:hiện thị tất cả lóp theo khoa
+ Datagridview: Hiển thị tất cả sinh viên trong bảng sinh viên
+ Tất cả textbox bị vô hiệu hóa
+ Các button Sửa, Xóa, Lƣu bị vô hiệu hóa
Button Tìm kiếm:
+ Hiển thị danh sách sinh viên theo lớp đã chọn trên combobox lớp
Khi chọn vào button Thêm:
+ Các textbox có hiệu lực
+ Button Lƣu có hiệu lực
+ Textbox Mã sinh viên chờ nhập liệu
Khi chọn vào Datagridview
FI
+
U
Hiển thị thông tin tƣơng ứng lên các textbox
+
- H
Button lệnh Sửa và Xóa có hiệu lực
Chọn button Sửa
IT
+
+
F
Button Lƣu có hiệu lực
Các textbox có hiệu lực trừ textbox Mã sinh viên
+ Cho phép sửa các thông tin còn lại
Khi chọn button Lƣu
+ Kiểm tra thông tin vừa thêm hoặc sửa cho phù hợp
+ Lƣu vào Cơ sở dữ liệu (Lƣu ý đang lƣu Thêm hay Sửa)
+ Thông báo thành công hoặc báo lỗi nếu có.
+ Button Sửa, Lƣu bị vô hiệu hóa
Khi nhấn button Xóa
+ Hiển thị thông báo xác nhận
+ Nếu đồng ý
Kiểm tra mã sinh viên xóa có tồn tại trong bảng điểm hay không. Nếu có
106
thì thông báo “Dữ liệu đang sử dụng không thể xóa ?”.
Nếu mã sinh viên không tồn tại bên bảng lớp thì xóa bên bảng sinh viên.
+ Hiển thị thông báo nếu xóa thành công hoặc báo lỗi (nếu có)
3. Bài tập về nhà
Thiết kế form Phiếu Nhập hàng nhƣ sau:
FI
U
- H
Yêu cầu IT
Formload:
F
Groupbox Phiếu nhập:
+ Textbox Mã phiếu nhập để trống, textbox ngày nhập là ngày hiện tại
+ Con trỏ nhập liệu tại textbox Mã phiếu nhập.
+ Combobox Nhà cung cấp: Chứa tất cả Mã nhà cung cấp của bảng NCC
+ Textbox thành tiền: Bị vô hiệu hóa, hiển thị số 0.
Groupbox Chi tiết phiếu nhập
+ Combobox mã phiếu nhập: Hiển thị tất cả Mã phiếu nhập trong bảng
Phieunhap.
+ Combobox mã sản phẩm: Hiển thị tất cả Mã sản phẩm trong bảng Sanpham.
+ Textbox đơn giá: bị vô hiệu hóa.
+ Số lƣợng: Hiển thị số 0.
107
+
F
Cập nhật Thành tiền vào trong bảng Phieunhap.
Khi chọn datagridview Chi tiết phiếu nhập:
+ Hiển thị thông tin vừa chọn lên các control trong groupbox Chi tiết phiếu
nhập.
+ DataGridView Chi tiết phiếu nhập cho hiển thị ContextMenuStrip có các
chức năng Sửa, Xóa Chi tiết phiếu nhập.
108
1 Computer 1 1
109
Yêu cầu:
Formload:
+ Combobox mã lớp: hiển thị tên lớp trong bảng lop
+ Datagridview Sinh viên: hiển thị tất cả sinh viên trong bảng SinhVien và có
thuộc tính chỉ đọc.
Tất cả textbox, combobox bị vô hiệu hóa
+
+ Các button Sửa, xóa, Lƣu bị vô hiệu hóa
FI
+ U
Thiết lập liên kết giữa control nhập liệu với chọn thông tin trên datagridview
Khi chọn vào button Thêm:
- H
+
IT
Button Lƣu có hiệu lực
+ F
Cho phép thêm các dòng tiếp theo trên datagridview
Lưu ý: không đƣợc sửa đổi các dòng trên datagridview đã có dữ liệu.
Khi chọn vào datagridview
+ Hiển thị thông tin tƣơng ứng lên các textbox, combobox
+ Button Sửa và Xóa có hiệu lực
Chọn button Sửa
+ Button Lƣu có hiệu lực
+ Cho phép sửa các thông tin trên Datagrid
Lưu ý: không cho phép nhập thêm các dòng mới.
Khi chọn button Lƣu
+ Kiểm tra thông tin vừa nhập hoặc sửa trên lƣới cho phù hợp
+ Lƣu vào cơ sở dữ liệu
110
}
InitializeComponent();
FI
void LoadDuLieuKhoa()
U
{
- H
IT
string strsel = "select * from Lop";
SqlDataAdapter da_Khoa = new SqlDataAdapter(strsel, _Connsql);
F
da_Khoa.Fill(ds_QLSV, "Lop");
cboLop.DataSource=ds_QLSV.Tables["Lop"];
cboLop.DisplayMember = "TenLop";
cboLop.ValueMember = "MaLop";
}
void LoadDuLieuDataG()
{
string strsel = "select * from SinhVien ";
SqlDataAdapter da_Khoa = new SqlDataAdapter(strsel, _Connsql);
da_Khoa.Fill(ds_QLSV, "SinhVien");
dataGridView1.DataSource = ds_QLSV.Tables["SinhVien"];
}
void Databingding(DataTable pDT)
{
111
cboLop.DataBindings.Clear();
txtHoTen.DataBindings.Clear();
txtMaSv.DataBindings.Clear();
maskedTextBox1.DataBindings.Clear();
- H
foreach (Control item in tableLayoutPanel1.Controls)
{
IT
F
if (item.GetType() == typeof(TextBox) || item.GetType() ==
typeof(ComboBox) || item.GetType() == typeof(MaskedTextBox))
item.Enabled = false;
}
//+ Các button Sửa, xóa, Lưu bị vô hiệu hóa
btnSua.Enabled = btnXoa.Enabled = btnLuu.Enabled = false;
Databingding(ds_QLSV.Tables["SinhVien"]);
}
private void btnThem_Click(object sender, EventArgs e)
{
btnLuu.Enabled = true;
//+ Cho phép thêm các dòng tiếp theo trên datagridview
dataGridView1.AllowUserToAddRows = true;
dataGridView1.ReadOnly = false;
112
T
btnSua.Enabled = btnXoa.Enabled = true;
I
}
F
private void btnSua_Click(object sender, EventArgs e)
{
//+Button Lưu có hiệu lực
btnLuu.Enabled = true;
//+Cho phép sửa các thông tin trên Datagrid
dataGridView1.ReadOnly = false;
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
dataGridView1.Rows[i].ReadOnly = false;
dataGridView1.Columns[0].ReadOnly = true;
//+Lưu ý: không cho phép gõ thêm các dòng mới
dataGridView1.AllowUserToAddRows = false;
}
113
FI
U
- H
Yêu cầu:
IT
Formload: F
+ Combobox tên sinh viên: hiển thị tên sinh viên trong bảng SinhVien.
+ Combobox Môn học: hiển thị tên môn học trong bảng MonHoc.
+ Datagrid: Hiển thị tất cả điểm trong bảng Điểm và chỉ cho phép đọc.
+ Tất cả textbox, combobox bị vô hiệu hóa.
+ Các button Sửa, xóa, Lƣu bị vô hiệu hóa.
+ Thiết lập liên kết giữa control nhập liệu với chọn thông tin trên datagridview.
Khi chọn vào button Thêm:
+ Button Lƣu có hiệu lực
+ Cho phép thêm các dòng tiếp theo trên datagridview
Lưu ý: không đƣợc sửa đổi các dòng trên datagridview đã có dữ liệu
Khi chọn vào datagridview
114
+ Hiển thị thông tin tƣơng ứng lên các textbox, combobox
+ Button Sửa và Xóa có hiệu lực
Chọn button Sửa
+ Button Lƣu có hiệu lực
+ Cho phép sửa các thông tin trên datagridview
Lưu ý: không cho phép gõ thêm các dòng mới
Khi chọn button Lƣu
+ Kiểm tra thông tin vừa nhập hoặc sửa (không trùng khóa chính) trên lƣới cho
phù hợp
+ Lƣu vào cơ sở dữ liệu
+ Thông báo thành công hoặc báo lỗi nếu có
+ Button Lƣu bị vô hiệu hóa
Khi nhấn button Xóa
+ Hiển thị thông báo xác nhận
+ Nếu đồng ý: hiển thị thông báo nếu xóa thành công hoặc báo lỗi (nếu có)
3. Bài tập về nhà
Thiết kế giao diện sau:
FI
U
- H
IT
F
Yêu cầu:
Formload:
+ Combobox tên Khoa: hiển thị tên Khoa trong bảng Khoa.
+ Datagridview: hiển thị tất cả Lớp trong bảng Lop và chỉ cho phép đọc.
+ Tất cả textbox, combobox bị vô hiệu hóa.
+ Các button Sửa, Xóa, Lƣu bị vô hiệu hóa.
115
+ Thiết lập liên kết giữa control nhập liệu với chọn thông tin trên datagridview.
Khi chọn vào button Thêm:
+ Button Lƣu có hiệu lực
+ Cho phép thêm các dòng tiếp theo trên datagridview
Lưu ý: không đƣợc sửa đổi các dòng trên datagridview đã có dữ liệu
Khi chọn vào Datagrid
+ Hiển thị thông tin tƣơng ứng lên các textbox, combobox
+ Button Sửa và Xóa có hiệu lực
Chọn button Sửa
+ Button Lƣu có hiệu lực
+ Cho phép sửa các thông tin trên datagridview
Lưu ý: không cho phép gõ thêm các dòng mới
Khi chọn button Lƣu
+ Kiểm tra thông tin vừa nhập hoặc sửa (không trùng khóa chính) trên lƣới cho
phù hợp
+ Lƣu vào cơ sở dữ liệu
+ Thông báo thành công hoặc báo lỗi nếu có
FI
+ Button Lƣu bị vô hiệu hóa
U
Khi nhấn button Xóa
- H
+
IT
Hiển thị thông báo xác nhận
+ Nếu đồng ý
F
Kiểm tra dữ liệu trong bảng Sinh viên tƣơng ứng với mã lớp đang chọn
(nếu có) nếu tồn tại mã lớp đang cần xóa thì cảnh báo nhắc nhở dữ liệu đang sử dụng
không thể xóa. Ngƣợc lại xóa dữ liệu trong bảng Lớp tƣơng ứng với mã số lớp đang
chọn.
Hiển thị thông báo nếu xóa thành công hoặc báo lỗi (nếu có).
116
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
C. NỘI DUNG THỰC HÀNH
1. Cơ sở lý thuyết
1.1 Kiến thức cần nhớ
Giới thiệu:
Reports là các báo cáo có thể truy xuất và định dạng thông tin hiển thị của
dữ liệu từ các nguồn dữ liệu khác nhau như cơ sở dữ liệu hoặc file …
FI
Điểm khác nhau cơ bản nhất của report và form đó là: form dùng để hiển thị
và cập nhật thông tin, report dùng để hiển thị và định dạng thông tin và có chức năng
in ra giấy. U
- H
Crystal Report là công cụ để tạo các báo cáo cho các ứng dụng Windows
IT
Application hoặc Web Application.
F
Crystal Report có thể hiển thị thông tin dƣới dạng bảng, đồ hoạ, biểu đồ, …
có khả năng tính toán nhƣ tính tổng, trung bình, …
Crystal Report có thể làm việc trên môi trƣờng .NET hoặc Java.
Thiết kế report với Crystal Report: để tạo một report, chúng ta cần xác định
các giai đoạn sau:
• Giai đoạn chuẩn bị: cần xác định
Mục đích tạo report ?
Các field (các cột) nào sẽ có trong report ?
Dữ liệu đƣợc lấy từ bảng hay view nào ?
Hiển thị tất cả các record hay chỉ 1 phần ?
Dữ liệu có đƣợc group (gom nhóm) hay sort (sắp xếp)?
Những summary, calculations nào có trong report ?
• Giai đoạn tạo report: thực hiện 3 bƣớc sau
117
FI
U
- H
IT
F
Yêu cầu: Click vào button Show Report hiển thị danh sách tất cả sinh viên trong bảng
SinhVien
Hướng dẫn:
Bước 1: Tạo file report mới có tên là MyReport.rpt
Right click vào project Add New Item ...
118
FI
U
- H
IT
F
119
FI
U
Bước 2: Configure (Cấu hình) và Design (Thiết kế) MyReport.rpt
- H
IT
F
120
FI
U
Tiến hành kết nối cơ sở dữ liệu QLSINHVIEN (bảng SINHVIEN)
- H
Right click Database Fields (trong Field Explorer) chọn Database Expert…
IT
F
121
Chọn Create New Connection OLEDB (ADO) (Nếu muốn tạo một Connection
mới)
FI
U
Chọn Microsoft OLE DB Provider for SQL Server
- H
IT
F
122
NEXT
Nhập thông tin kết nối
FI
U
- H
IT
F
FINISH
123
OK
Khi đó trong Database Fields xuất hiện
FI
U
- H
IT
F
Kéo các Fields vào Report và sắp xếp nhƣ hình sau:
124
FI
U
- H
IT
F
125
FI
U
- H
IT
F
Kết quả như sau:
126
Lưu ý: Khi chạy chƣơng trình để không phải nhập password khi kết nối thêm dòng
code sau vào button Show Button
FI
U
- H
IT
F
127
Yêu cầu:
Thực hiện đổ dữ liệu cho combobox tên lớp
Thiết kế report theo mẫu
FI
Chọn một lớp trong combobox tên lớp thực hiện in danh sách sinh viên cho
lớp đó. U
- H
Bài 2: Mở form Quản lý sinh viên (bài tập tại lớp tuần 10):
IT
F
Yêu cầu: Viết lệnh cho button Xem in thực hiện in danh sách sinh viên theo mẫu
report bài 1.
128
A. MỤC TIÊU:
Tổng hợp kiến thức xây dựng phần mềm ứng dụng
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
FI
U
- H
IT
F
Yêu cầu
Formload:
Groupbox Phiếu nhập:
+ Textbox Mã phiếu nhập để trống, textbox ngày nhập là ngày hiện tại
+ Con trỏ nhập liệu tại textbox Mã phiếu nhập.
+ Combobox Nhà cung cấp: Chứa tất cả Mã nhà cung cấp của bảng NCC
129
130
+ DataGridView Chi tiết phiếu nhập cho hiển thị ContextMenuStrip có các
chức năng Sửa, Xóa Chi tiết phiếu nhập.
FI
U
- H
IT
F
131
A. MỤC TIÊU:
Tổng hợp kiến thức xây dựng phần mềm ứng dụng.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
2. Khi ngƣời dùng kích chuột vào nút thoát chƣơng trình hiện ra cửa sổ hỏi ngƣời dùng
có chắc chắn muốn thoát không
- Nếu ngƣời dùng chọn Yes chƣơng trình sẽ thoát khỏi chƣơng trình
- Nếu ngƣời dùng chọn No chƣơng trình sẽ trở lại chƣơng trình
3. Khi textbox tên chƣơng trình hoặc tên cơ sở dữ liệu để trống chƣơng trình sẽ hiển
thị báo cho ngƣời dùng biết, ngƣời dùng chọn Ok chƣơng trình sẽ quay lại textbox
đó.
4. a. Nếu chƣơng trình kết nối không thành công cơ sở dữ liệu thì thông báo cho ngƣời
dùng biết biết “kết nối đến cơ sở dữ liệu thất bại”.
132
b. Nếu kết nối thành công thông báo cho ngƣời dùng biết kết nối thành công và hiển
thị form nhƣ câu 3.
1. Tạo form theo cấu trúc:
2. a. Khi ngƣời dùng chọn một cơ sở thì chƣơng trình hiển thị danh sách đơn vị đào
tạo thuộc cơ sở đó (sắp xếp theo tên đơn vị), chƣa đơn vị nào đƣợc chọn từ
ComboBox này, và không có GV nào hiển thi trong danh
b. Ngƣời dùng chọn một đơn vị để xem danh sách giáo viên (thuộc đơn vị hiện tại)
hiển thị trong danh sách phía dƣới (thông tin hiển thị chỉ chứa tên gv, đƣợc đánh số
thứ tự).
1. Ngƣời dùng có thể bấm phải chuột
trên một GV từ danh sách để hiển FI
thị popup menu chứa 2 menu U
- H
(xem hình). Nếu ngƣời dùng bấm
IT
phải chuột trên danh sách khi chƣa
F
chọn GV nào thì hai menu này sẽ
bị mờ, không cho sử dụng.
133
b. Khi ngƣời dùng chọn menu [Hiển thị thông tin chi tiết GV] hoặc double click vào
một GV trong danh sách, chƣơng trình sẽ hiển thị form trên với thông tin giáo viên
đang chọn.
c. Ngƣời dùng nhấn nút quay lại để thoát khỏi form.
FI
U
- H
IT
F
134
A. MỤC TIÊU:
Tổng hợp kiến thức xây dựng phần mềm ứng dụng.
B. DỤNG CỤ - THIẾT BỊ THỰC HÀNH CHO MỘT SV:
STT Chủng loại – Quy cách vật tư Số lượng Đơn vị Ghi chú
1 Computer 1 1
Mã độc giả
Madg FI
Hoten U
Họ và tên độc giả
Gioitinh - H
Gới tính
IT
Ngaysinh
Diachi
F Ngày sinh
Địa chỉ
Coquan Cơ quan
NHANVIEN
Field Name Description
Mã nhân viên
Manv
Hoten Họ và tên nhân viên
135
LOAISACH
Field Name Description
Mã loại
Maloai
Tenloai Tên loại
Vitri Vị trí
SACH
Field Name Description
Mã phòng
Masach
Tensach Tên sách
Sotrang Số trang
Tacgia Tác giả
Mã nhân viên
Manv
Mã độc giả
Madg
Masach Mã sách
Ngaymuon Ngày mƣợn
136
U
- H
IT
F
…………………………..Hết………………………
137