You are on page 1of 69

BÀI TẬP WINDOWS FORM

Tuần 1
Bài Tập 1.1
Hãy thiết kế giao diện một form như sau:

lblHoVaTen

txtHoLot
lblHoLot

txtTen

lblTen

btnHoLot

Viết lệnh để chương trình hoạt động như sau:


• Nhấn vào button btnHolot thì gán nội dung của txtHolot cho lblHolot (lblHolot.Text = txtHolot.text)
• Nhấn vào button cmdTen thì gán nội dung của txtTen cho lblTen (lblTen.Text = txtTen.text)
• Nhấn vào button btnHoVaTen thì gán nội dung của txtHolot cộng với txtTen cho lblHoVaTen
lblHoVaTen.Text = txtHolot.text + “ “ + txtTen.Text)
• Nhấn double click vào lblHoVaTen thì nội dung của lblHoVaTen bị xoá
• Nhấn vào btnKetThuc thi đóng chương trình (this.Close() hoặc Application.Exit())

Bài tập 1.2


Thêm vào bài tập 1 với các yêu cầu sau:
Nội dung của txtHoLot và txtTen được thể hiện ngay trên lblHoLot và LblTen khi user nhập dữ liệu vào
txtHoLot hay txtTen (gợi ý : viết lệnh cho sự kiện TextChanged của txtHoLot va txtTen)

Bài Tập 1.3


txtHuongDan

picOn
picOff

lblHuongDan

btnThoat

Yêu cầu:
1. Thiết kế phải kéo đối tược tooltip vào form (nó hiện phần tray, khay phía duới form xem
hình) thì mới tạo tooltip được.
2. Khi chương trình chay lện
a. Hiện tên người hướngdẫn mặc định vào ô người hướng dẫn (tùy ý họ tên sinh viên)
hướng dẫn viết trong formload hặc trong design.
private void FrmLightSwitcher_Load(object sender, EventArgs e)
{
txtnguoihuongdan.Text = "Nguyễn Văn Tuấn";
lblhuongdan.Text = "Click the light to turn off" + txtnguoihuongdan.Text;
}

b. Hình đèn picOn (hình đèn mở) được hiện hướng dẫn hiệu chỉnh property trong
design.
c. Ô hướng dẫn là “Nếu nhấn vào tôi thì đèn tắt + giá trị ô người hướng dẫn” hướng
dẫn xem đoạn code trên.
d. Nếu đưa chuột vào hình đèn thì hiện tooltip là “Nhấn tôi thì tắt” cho đèn mở và
ngược lại cho đèn tắt hướng dẫn cách làm hiệu chỉnh trong phần design.
3. Nếu nhấn vào đèn picOn thì:
a. picOn ẩn đi và hiện hình đèn picOff
b. Đồng thời ô Hướng dẫn hiện “Nhấn tôi thì mở + giá trị ô người hướng dẫn” hướng
dẫn cách làm viết trong sự kiện đèn chọn.
private void picmo_Click(object sender, EventArgs e)
{
picmo.Visible = false;// công viêc 1
pictat.Visible = true; // công viêc 1
lblhuongdan.Text = "Click the light to turn on." + " " + txtnguoihuongdan.Text; // công việc 2
}
4. Nhấn nút thoát hoặc Esc thì thoát chương trình.
5. Khi đưa chuột vảo hình thì hiện lên Tooltip “Click me” (Xem hình)
6. Khi chương trình đã chạy thì hiệu chỉnh sao cho hai hỉnh đè lên nhau và có size như nhau.
7. chạy chượng trình cho hình sau:
Tuần 2
Bài tập 2.1
Thiết kế form như hình bên

lblDisplay

picRain

Yêu cầu:
Khi form được load thì txtName được focus, để user nhập tên vào và 4 image tương ứng được ẩn đi
Khi đã nhập text vào txtName mà user click chuột hoặc dùng phím nóng vào các option tương ứng thì
thông tin trong lblDisplay là một lời khuyên tự bạn cho và cộng thêm text trong txtName, đồng thời hiện
image tương ứng.
Nếu user nhấn chuột vào Option khác thì ẩn image trước đi và hiện image tương ứng.
Nếu nhấn vào nút Exit hoặc phím Esc thì kết thúc chương trình
Bài Tập 2.2

txtName
btnDisplay

txtMessa
chkVisible
ge

radRed

btnClear

radGreen

btnExit

picBig
lblMessage picSmall

Viết lệnh để chương trình hoạt động như sau:


• Khi form vừa load lên thì:
 con nháy hiện tại vị trí ô Name
 Hình CDRom lớn hiện ngược lại hình nhỏ ẩn.
Hướng dẫn: hiệu chỉnh property Visible của picSmall thành false (trong lúc thiết kế)
 Đưa chụôt vào hình CDRom (lớn, nhỏ) hiện lên tooltip “Click Me”
• Hiệu chỉnh TabIndex sao cho hợp lý (Tham khảo hình vào Menu View\Tab Order)
• Nhấn vào Button Display hoặc phím Enter thì gán nội dung của ô Name và Message cho Label
Message (lblMessage)
Hướng dẫn: lblMessage.Text = txtName.Text + " : " + txtMessage.Text;
• Nhấn vào Button Clear thì xóa nội dung trong ô Name và Message
Hướng dẫn:
txtMessage.Clear ();
txtName.Clear();
• Nhấn vào RadioButton (Red, Green …) thì đổi màu chữ trong ô Message thành màu tương ứng.
Hướng dẫn: lblMessage.ForeColor = Color.Red;
• Ần hiện Message (lblMessage) phụ thuộc vào giá trị của Check box (chkVisible)
Hướng dẫn: lblMessage.Visible = chkVisible.Checked;:
• Nhấn vào Button Exit hoặc phím Esc thi đóng chương trình
This.Close();
• Click chuột vào hình CDRom nào thì hình đó ẩn đi và hiện hình CDRom khác lên
Hướng dẫn:
picBig.Visible = false;
picSmall.Visible = true;
• Khi chuơng trình chạy hòan chỉnh hãy hiệu chỉnh hai hình CDRom chồng lên nhau sao cho đồng tâm
(hướng dẫn chỉnh đồng tâm qua thanh toolbar)

Bài Tập 2.3


lblNhapten
chkBold

radGreen

lblLapTrinh

btnThoat

Yêu cầu
1. khi Formload.
a. Radiobutton Red chon mặc định (gợi ý viết trong sự kiện form_Load).
b. Con trỏ hiện Focus ngay tại ô Nhập tện.
2. Khi gõ tên vào ô Nhập tên (gõ ký tự nào thì ô lập trình bởi chạy song song cùng
giá trị trong ô nhập tên)
Hướng dẫn viết trong sự kiện txtNhapTen_TextChanged(..)
private void txtNhapTen_TextChanged(object sender, EventArgs e)
{
lblLapTrinh.Text = txtNhapTen.Text

}
3. Nhấn nút thoát hoặc Esc thì thoát chương trình.
4. Nhấn Radiobutton Red, Green.. thì đổi màu chữ trong ô Lập trình bởi và ô nhập
tên có màu tương ứng với Radiobutton phù hợp.
private void raddo_CheckedChanged(object sender, EventArgs e)
{
lblLapTrinh.ForeColor = Color.Red;
txtNhapTen.ForeColor = Color.Red;
}
5. Nhấn các CheckBox chữ đậm, nghiêng… thì đổi font chữ trong ô Lập trình bởi và
ô nhập tên tương ứng.
private void chkdam_CheckedChanged(object sender, EventArgs e)
{
lblLapTrinh.Font = new Font(lblLapTrinh.Font.Name, lblLapTrinh.Font.Size,
lblLapTrinh.Font.Style ^ FontStyle.Bold);
//??? Tương tự **** .
}
Bài tập 2.4

Thiết kế form như hình dưới đây.

Yêu cầu:
Nhập tên của bạn và nhập lời nhắn vào text box sau đó thực hiện các nút chức năng sau:
• Nếu nhấn vào đĩa cdrom01.ico thì ẩn nó đi và hiện cdrom02.ico, nếu nhấn chuột vào cdrom02.ico
thì làm ngược lại (chú ý trong khi thiết kế bạn phải chọn thuộc tính SizeMode=Stretch)
• Nếu chọn vào option nào thì lblmessage đổi thành màu tương ứng đó (gợi ý :
lblmessage.ForeColor=Color.….. Bạn nhớ thiết kế để có thể thực hiện phím nóng)
• Nếu nhấn vào checbox Bold, Italic, Underline thì thay đổi text trong lblmessage tương ứng (Bạn
nhớ thiết kế để có thể thưc hiện phím nóng. HD: Xử lý sự kiện CheckChanged của checkbox)
• Nếu nhấn vào nút Display thì lấy thông tin của text box tên bạn cộng với textbox lới nhắn gán
vào lblmesssage (bạn nhớ cộng thêm khoảng trắng hoặc xuống dòng để tách tên và lời nhắn)
• Nếu nhấn vào nút Clear thì xoá text trong lblmessage, hộp text name và hộp text lới nhắn, đồng
thời rời con nháy về hôp text name.
• Nếu nhấn enter thì lấy thông tin của text box tên bạn cộng với textbox lới nhắn gán vào
lblmesssage (bạn nhớ cộng thêm khoảng trắng hoặc xuống dòng để tách tên và lời nhắn)
(AcceptButton = nút Display)
• Nếu nhấn Esc thì đóng ứng dụng (CancelButton = nút Exit)
HD:
Xử lý sự kiện CheckChanged của checkbox:
if (chkBold.Checked)
lblmessage.Font = new Font(lblmessage.Font.Name, lblmessage.Font.Size, FontStyle.Bold);
else
lblmessage.Font = new Font(lblmessage.Font.Name, lblmessage.Font.Size, FontStyle.Regular);
Tuần 3_Biến
Bài Tập 3.1
Thiết kế Form cho phép thực hiện cộng hai số hạng và mở rộng 4 phép toán.

Bài Tập 3.2


Thiết kế form thực hiện các phép toán như sau:

Bài Tập 3.3

1. Thiết kết form bằng cách tách form ra làm 2

2. Hiệu chỉnh sao cho có dạng như hình phí dưới bằng cách hiệu chỉnh property
Oraintation thành Horizontal của đối tượng Splitcontainer.
3. Tách Panel1 làm hai sao cho như hình

Kéo vào panel1

4. Thiết kế và hiệu chỉnh các control như hình sao cho khi chạy chương trình mà co dãn
size của form thì các button co dãn theo (Xem hình). Riêng button thoát thì hiệu chỉnh
qua property Doc là “ Button ”
nh
Chỉ
u
Hiệ
5. Hiệu chỉnh vị trí Tabindex sao cho phợp lý
6. Viết lệnh cho các nút lệnh tượng ứng và xuất kết quả vào ô kết quả.
Gợi ý:
+ Công, trừ, nhân các bạn tự làm.
+ Chia có thể có số lẻ bạn phải khai báo kiểu cho chính xác.
private void btnChia_Click(object sender, EventArgs e)
{
int intSoA, intSoB;
Double decKetQua;
intSoA = int.Parse(txtA.Text);
intSoB = int.Parse(txtB.Text);
decKetQua = Convert.ToDouble(intSoA) / Convert.ToDouble(intSoB);
lblKQ.Text = decKetQua.ToString();
}
7. Nấn phím Esc thóat chương trình và nhấn phím Enter tương đương nhấn nút
A+B.

Bài Tập 3.4

Bài Tập 3.5


Yêu cầu:
1) Sinh viên tự thiết kế các đối tượng trên form cho phù hợp
2) Thiết đặt TabIndex cho hợp lý.
3) Nhấn Calculate hoặc Enter thì tính và hiện thông tin lên các ô tương ứng (sinh vien co
the xem demo tren blog http://thangdhcn.wordpress.com mục của từng lớp)
4) Nhấn vào Exit hoặc Esc thì thoát chương trình.
Ghi chú: sử dụng biến toàn cục và hằng số cho hợp lý, tham khảo hình
Tuần 4_Cấu trúc điều khiển (If…Else, Switch…Case)
Bài Tập 4.1
Thiết kế Form cho phép thực hiện Giải phương trình bậc I.
Bài Tập 4.2
Thiết kế Form cho phép thực hiện Giải phương trình bậc II.

Bài tập 4.3

Giả sử chỉ nhập


Thiết kết form như sau.
số, có thể âm
Yêu cầu:
1. Thiết kế và hiệu chỉnh TabIndex cho hợp lý ví dụ xem hình.

Huớng dẫn set TabIndex. Vào Menu View->TabOrder


2. Viết code xong thì phải thu nhỏ form như hình phía dưới, chồng hai group bậc 1 và
bậc 1 lên. Khi form load thì group phương trình bậc 1 ẩn đi.
3. Khống chế các ô nhập hệ số chỉ được nhập số. Hướng dẫn vào cửa sổ Properties chọn
biểu tượng Events tìm tới Event muốn bắt và chọn double click. Ở đây ta chon :
private void txtHeA_KeyPress(object sender, KeyPressEventArgs e)
{
//char.IsDigit(e.KeyChar) kiểm tra có phải số không
//char.IsControl(e.KeyChar) kiểm tra phíp ConTrol như Backspace, Shifh..
// e.KeyChar !='-' cho phép nhập dấu trừ (dấu âm)
if (char.IsDigit(e.KeyChar) == false &&
char.IsControl(e.KeyChar) == false &&
e.KeyChar !='-')
e.Handled = true;// ép không nhận ký tự gõ vào
}
4. Nhấn nút giải mới xóa hết thông tin và di chuyển con nháy về ô Hệ A (dùng Focus)
5. Nhấn nút giải
Hướng dẫn các giải.
AX 2+BX+C=0;
If( A!=0)
Delta= B*B+4A*C
if (Delta>0)
{
X1=??
X2=??
}
Else if(Delta==0)
{
X1=??
}
Else // các bạn hiệu là Delta<0
PTVo nghiệm
a) Nếu đúng các hệ số thì giải và đưa kết quả tương ứng ra Xem hình

b) Nếu không đúng (thiếu hệ số A=0) hiện thông tin group cho phương
trình bậc 1 và phải gán giá trị đã nhập cho các hệ trong phương trình bậc nhất hợp
lý. Xem hình

private void btnMoi_Click(object sender, EventArgs e)


{
txtHeA.Clear();
txtHeB.Clear();
txtHeC.Clear();
lblketqua.Text = "";
grpBac2.Visible= true ;
grpBac1.Visible = false;
}

string GiaiBac2(int A, int B, int C)


{
string strKQua="";
double dblDenTa ,dblx1, dblx2;
dblDenTa = Math.Pow((double)B, 2) - 4 * A * C;
if (dblDenTa > 0)
{
dblx1 = ((double)(-B) + Math.Sqrt(dblDenTa )) / (2 * (double)A);
dblx2 = ((double)(-B) - Math.Sqrt(dblDenTa )) / (2 * (double)A);
strKQua = "PT có 2 nghiệm phân biệt:\n"
+ "x1 = " + dblx1.ToString() + "\n"
+ "x2 = " + dblx2.ToString();

}
else if (dblDenTa == 0)
{
dblx1 = (double)(-B) / (2 * (double)A);
strKQua = "PT có nghiệm kép:\n" + "x1 = x2 = " + dblx1.ToString();

}
else// hieu denta<0
{
strKQua = "PT vô nghiệm";

}
return strKQua;
}
string GiaiBac1(int A, int B)
{
// Ax+B=0
string strKQua = "";
if (A == 0)
if (B == 0)//0x+0=0
strKQua = "Phuong trinh co vo so nghiem";
else //0x+B=0
strKQua = "Phuong trinh vo nghiem ";
else
{
Double ketqua = Convert.ToDouble(-B) / A;
strKQua ="Phuong trinh co nghiem la x = " + ketqua.ToString();
}
return strKQua;
}

private void btnGiai_Click(object sender, EventArgs e)


{
try
{
int inta, intb, intc;
if ((txtHeA.Text != "") && (txtHeB.Text != "") && (txtHeC.Text !=
""))
{
inta = Convert.ToInt32(txtHeA.Text);
intb = Convert.ToInt32(txtHeB.Text);
intc = Convert.ToInt32(txtHeC.Text);
if (inta != 0)
{
grpKetQuaPT.Text = "Nghiệm PT bậc 2";
lblketqua.Text = GiaiBac2(inta, intb, intc);
}
else if (inta == 0)
{
grpBac1.Visible = true;
grpBac2.Visible = false;
grpBac1.Text = "Nhập phương trình bậc nhất";
grpKetQuaPT.Text = "Nghiệm PT bậc 1";
txtA1.Text = intb.ToString ();
txtB1.Text = intc.ToString();
lblketqua.Text = GiaiBac1(intb, intc);

}
else
MessageBox.Show("Bạn nhập thiếu thông tin", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
catch (FormatException a)
{
MessageBox.Show(a.Message);
}
}

Hướng dẫn xưống dòng qua “\n” ví dụ


strkq = "PT có 2 nghiệm phân biệt:\n"
+ "x1 = " + dblx1.ToString() + "\n"
+ "x2 = " + dblx2.ToString();

6. Nhấn phíp Enter tương đương nút giải.


7. Nhấp phím Esc tương đương nút thoát

Bài tập 4.4


Thiết kế Form cho phép thực hiện Tính tiền tiêu thụ điện.
Bài Tập 4.5

Bài tập 4.6


Thiết kế Form cho phép thực hiện các phép tính của một máy tính đơn giản.

Bài Tập 4.7


Viết chương trình cho trò chơi số 7 may mắn.
Thết kế giao diện xem hình.

Yêu cầu:

1) Khi chương trình bắt đầu chạy thì số tiền có trong máy là 100 đồng, tiền của người chơi cũng phải
có 100 đồng .
2) Mỗi lần quay số
a. Nngười chơi phải bỏ vào tiền cược bao nhiêu (số tiền trong máy tăng theo số tiền cược
đồng còn tiền người chơi giảm đi theo số tiền cược)
b. Các hộp chứa chữ số từ trái qua phải có tên như sau: lbl1, lbl2, lbl3.Giá trị trong các hộp số
được tạo bằng giá trị ngẫu nhiên so1, so2, so3 phát sinh giá trị ngẫu nhiên lần lượt trong
khoang [0, 7], [0, 8], [0,10]
3) Kết quả nhận được là:
• Nếu kết quả của lbl1 = 7 thì
o Hiện tiền thưởng qua messagebox
o số tiền được thưởng là 100 +50% số tiền cược đang có trong máy
o Số tiền người chơi = tiền người chơi+ tienthuong + dectiencuoc.
o Số tiền máy mdectienmay = mdectienmay - tienthuong - dectiencuoc
Tham khảo :
tienthuong = 100 + (dectiencuoc * 50) / 100;
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;

• Nếu kết quả của lbl2 = 7 thì


o số tiền được thưởng là =30 +10% số tiền cược đang có trong máy
o Số tiền người chơi = tiền người chơi+ tienthuong + dectiencuoc.
o Số tiền máy mdectienmay = mdectienmay - tienthuong - dectiencuoc
Tham khảo :
tienthuong = 30 + (dectiencuoc * 10) / 100;
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc ;
• Nếu kết quả của lbl3 = 7 thì
o số tiền được thưởng là =10 +10% số tiền cược đang có trong máy
o Số tiền người chơi = tiền người chơi+ tienthuong + dectiencuoc.
o Số tiền máy mdectienmay = mdectienmay - tienthuong - dectiencuoc
Tham khảo :
tienthuong = 10 + (dectiencuoc * 10) / 100;
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;

mdectienmay = mdectienmay - tienthuong - dectiencuoc ;

Khi trúng thưởng thì số tiền thưởng được cộng dồn trong trường hợp trúng nhiều số 7và sẽ hiện lên màn
hình qua messagebox cho người chơi biết số tiền thưởng mà họ đang có. Sau đó cập nhật lại tiền trên
form (tiền máy, tiền người chơi tương ứng).
Chi tiết tham khảo chương trình demo trên « http://thangdhcn.wordpress.com/ »

Khi nút Game mới được click (bắt đầu cho một người chơi khác) thì thiết lập lại như ban đầu

Quay số ngẫu nhiên :


int so1, so2, so3;
decimal tienthuong;
Random ran = new Random();
so1 = ran.Next(0, 7);
so2 = ran.Next(0, 8);
so3 = ran.Next(0, 9);

Để tạo cảm giác quay số nhanh rồi chậm dần dùng time với Interval tăng dần
timer1.Interval += 10;
timer1.Interval += 10;
lbl1.Text = so1.ToString();
lbl2.Text = so2.ToString();
lbl3.Text = so3.ToString();
if (timer1.Interval >= 200)
{
timer1.Stop();
if (so1 == 7)
{
tienthuong = 100 + (dectiencuoc * 50) / 100;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" + tienthuong);
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
}
if (so2 == 7)
{
tienthuong = 30 + (dectiencuoc * 10) / 100;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" + tienthuong);
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
}
if (so3 == 7)
{
tienthuong = 10 + (dectiencuoc * 10) / 100;
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" + tienthuong);
}

lbltienmay.Text = mdectienmay.ToString();
lbltiennguoichoi.Text = mdectiennguoichoi.ToString();

code toàn bài sinh viên chỉ xem tham khảo phài tư viết code không được copy hay gõ y như
hướng dẫn

decimal mdectienmay = 100;


decimal mdectiennguoichoi = 100;
decimal dectiencuoc;

private void btnquayso_Click(object sender, EventArgs e)


{

dectiencuoc = Convert.ToDecimal(txttiencuoc.Text);
btnquayso.Enabled = true;
if (mdectiennguoichoi >= dectiencuoc)
{
mdectienmay += dectiencuoc;
mdectiennguoichoi -= dectiencuoc;
timer1.Interval = 10;
timer1.Start();
}
else
{
MessageBox.Show("Bạn không đủ tiền chơi", "Thông Báo");
timer1.Interval = 10;
timer1.Stop();
btnchoilai.Enabled = true;
}
lbltienmay.Text = mdectienmay.ToString();
lbltiennguoichoi.Text = mdectiennguoichoi.ToString();

private void timer1_Tick(object sender, EventArgs e)


{
dectiencuoc = Convert.ToDecimal(txttiencuoc.Text);
int so1, so2, so3;
decimal tienthuong;
Random ran = new Random();
so1 = ran.Next(0, 7);
so2 = ran.Next(0, 8);
so3 = ran.Next(0, 9);
timer1.Interval += 10;
lbl1.Text = so1.ToString();
lbl2.Text = so2.ToString();
lbl3.Text = so3.ToString();
if (timer1.Interval >= 200)
{
timer1.Stop();
if (so1 == 7)
{
tienthuong = 100 + (dectiencuoc * 50) / 100;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" +
tienthuong);
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
}
if (so2 == 7)
{
tienthuong = 30 + (dectiencuoc * 10) / 100;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" +
tienthuong);
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
}
if (so3 == 7)
{
tienthuong = 10 + (dectiencuoc * 10) / 100;
mdectiennguoichoi = mdectiennguoichoi + tienthuong + dectiencuoc;
mdectienmay = mdectienmay - tienthuong - dectiencuoc;
MessageBox.Show("Số tiền bạn nhận đc :\nTiền thưởng :" +
tienthuong);
}

lbltienmay.Text = mdectienmay.ToString();
lbltiennguoichoi.Text = mdectiennguoichoi.ToString();

}
}

private void btnchoilai_Click(object sender, EventArgs e)


{

mdectiennguoichoi = 100;
mdectienmay = 100;
lbltienmay.Text = mdectienmay.ToString();
lbltiennguoichoi.Text = mdectiennguoichoi.ToString();
lbl1.Text = "7";
lbl2.Text = "7";
lbl3.Text = "7";
txttiencuoc.Clear();
}

private void btnthoat_Click(object sender, EventArgs e)


{
this.Close();
}

private void FRMtre_Load(object sender, EventArgs e)


{
lbltienmay.Text = mdectienmay.ToString();
lbltiennguoichoi.Text = mdectiennguoichoi.ToString();
}

private void txttiencuoc_KeyPress(object sender, KeyPressEventArgs e)


{
if (char.IsDigit(e.KeyChar) == false && char.IsControl(e.KeyChar) ==
false)
e.Handled = true;

private void FRMtre_FormClosing(object sender, FormClosingEventArgs e)


{
DialogResult hoi;
hoi = MessageBox.Show("Bạn có muốn thoát không?", "Thông báo thoát",
MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
if (hoi == DialogResult.No)
e.Cancel = true;

}
Hình tham khảo:
Bài Tập 4.8
Bài tập cấu trúc Switch Case
Thiết kế form (xem hình)

Số phải
canh lề trái

Ta có bảng quy luật:

0 1 2 3 4 5 6 7 8 9 10 11
Can Canh Tan Nham Quy Giap At Binh Din Mau Ky
h
Chi Than Dau Tuat Hoi Ti Suu Dan Meo Thin Ti Ngo Mui

Yêu cầu:
1) Nhấn nút xem thì hiện năm tương ứng qua các con giáp xem hình
Hướng dẫn:
Nhận thấy.
Can = Năm %10 lấy dư
Chi= Năm %12 lấy dư
Canchi tương ứng = Can + chi
Yêu cầu viết hàm trả về chuỗi can chi khi biết số năm.
switch (intNamDuong % 10)
{
case 0:
strCan = "Canh";
break;
case 1:
strCan = "Tân";
break;
…..
}

2) Khống chế ô năm chỉ được nhập số

private void txtnhap_KeyPress(object sender, KeyPressEventArgs e)


{
if ((char.IsDigit(e.KeyChar) == false) && (char.IsControl(e.KeyChar) ==
false))
e.Handled = true;
}

3) Nhấn phím Enter tương đương nhấn nút xem và phím Esc tương đương nút thóat
4) Hệ thống menu tương ứng các chức năng trên form.
5) StatusTrip hiện ngày tháng hiện tại và tên programmer gợi ý:
statusStrip1.Items[0].Text = Convert.ToDateTime(DateTime.Now).ToShortDateString();
//Convert.ToString(DateTime.Now);
Tuần 5 _ Vòng lặp – Phương thức (Method)
Bài tập 5.1
Viết một chương trình theo yêu cầu thiết kế sau:

Bài Tập 5.2


Viết một chương trình theo yêu cầu thiết kế sau:

Cho phép người sử dụng nhập một số nguyên, sau đó in lên màn hình các ước số nguyên này lên form.
Việc in các ước số lên màn hình được thực hiện bởi một Sub. Sub này có một tham số dạng tham trị, sẽ
nhận số nguyên cần tìm các ước số.
• Khi chương trình bắt đầu thực hiện thì textbox nhập số được focus.
• Sau khi nhập số nếu ấn Enter hoặc Click vào nút thực hiện thì hiện kết quả lên TextBox kết
quả, và TextBox nhập vẫn được Focus.
• Nếu ấn Esc hoặc click vào “Kết thúc” thì dừng chương trình

Bài Tập 5.3 (Method)


Viết một chương trình theo yêu cầu thiết kế sau
Yêu cầu tất cả dùng hàm
Code gợi ý :

Ta nhận thấy viết hàm có giá trị trả về là lợi cho bài toán
nhất vì các bút lệng sau gọi hàm của các nút lệnh trước. So
với Code gợi ý các bạn sinh viên hãy dùngt vòng lặp khác với
trong code gợi ý như ( for, while…)
• Dãy Fibonaci các bạn chuyển thành hàm đệ quy.

private void buttong1_Click(object sender, EventArgs e)


{
n = Convert.ToInt32(txtN.Text);
lblKQ.Text = TongWhile(n).ToString();
}

private void btnTongTich_Click(object sender, EventArgs e)


{
n = Convert.ToInt32(txtN.Text);
lblKQ.Text = TongTich(n).ToString();
}
private void btnTinh1_Click(object sender, EventArgs e)
{
n = Convert.ToInt32(txtN.Text);
lblKQ.Text = Convert.ToString((double)TongTich(n) /
(double)Tong(n));

}
private void btnTinh2_Click(object sender, EventArgs e)
{
n = Convert.ToInt32(txtN.Text);
lblKQ.Text = Convert.ToString((double) (TongTich(n) *
TongTich(n) )/ (double)Tong(n));

private void btnKTraSNTo_Click(object sender, EventArgs e)


{
n = Convert.ToInt32(txtN.Text);
if (KiemTraSNTo(n) == true)
lblKQ.Text = n.ToString() + "La so Nguyen To";
else
lblKQ.Text = n.ToString() + "Khong la so Nguyen To";
}
private void btnCacSNTo_Click(object sender, EventArgs e)
{
lblKQ.Text ="";
n = Convert.ToInt32(txtN.Text);
for (int i = 2; i <= n; i++)
if (KiemTraSNTo(i) == true)
lblKQ.Text = lblKQ.Text + i.ToString() + " ";

}
private void btnFibo_Click(object sender, EventArgs e)
{
int i, f1, f2, fn;
n =Convert.ToInt32 ( txtN.Text);
i = 0;
f1 = 0;
f2 = 1;
lblKQ.Text = "";
while (i < n)
{
fn=f1+f2;

lblKQ.Text = lblKQ.Text + fn.ToString() +" ";


f1 = f2;
f2 = fn;
i++;

Bài Tập 5.4


Thiết kế giao diện.

flowLayoutPanel1

Mô tả: Viết chương trình bán vé rạp chiếu phim với các yêu cầu sau: Hãy tạo một project giúp cho
rạp chiếu phim quản lý việc bán vé của một rạp hát. 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ô (xem hình):
Giá vé lô A 20 ngàn/vé - ghế từ 1-5 Giá vé lô B 30 ngàn/vé - ghế từ 6-10 Giá vé lô C 40 ngàn/vé-
ghế từ 11-15
Một người vào có thể mua nhiều vé, và Người bán sẽ chọn các ghế từ các checkbox. +Khi vừa
chọn ghế nào thì chương trình là việc sau:
- Lập tức cập nhật danh sách các ghế đang chọn và listbox bên dưới (các ghế đang chọn)
- hiển thị tổng số tiền vào label bên dưới (Thành tiền)
+ Khi người mua muốn thực sự chọn ghế thì nhấn nút “Thống kê”. Chương trình lập tức chuyển
các ghế trong listbox1 (Các ghế đang chọn) qua listbox2 (Cácghế đã chọn) đồng thời khóa các
checkbox ghế không cho chọn.
+Nút “<<Xóa ghế đã chọn” sẽ xóa tất cả các số ghế đang chọn trong listbox2 (các ghế đã chọn)
và đưa trạng thái tất cả các checkbox tương ứng với các ghế xóa về trạng thái không chọn như ban
đầu.
+ Nút “Xem mới” đưa về trạng thái ban đầu như khi vừa load lên.
+Chương trình sử dụng kỹ thuật nạp động các control để sau này dễ dàng cho việc nâng cấp số
lượng ghế mỗi hàng
. +Chương trình cho phép người sử dụng thay đổi kích thước nhưng vẫn giữ bố cục như ban đầu.
Gợi ý: Nạp động các checkbox (đại diện cho các vị trí ghế) và ghép chung hàm sự kiện. Duyệt các
checkbox này mỗi khi checkbox thay đổi và cập nhật Listbox.
Nạp động các button trong formload

private void frmChieufilm_Load(object sender, EventArgs e)


{
for (int i = 1; i < 16; i++)
{
CheckBox chk = new CheckBox();
chk.Text = i.ToString();
flowLayoutPanel1.Controls.Add(chk);
chk.CheckedChanged += CacCheck_CheckedChanged;
}

private void CacCheck_CheckedChanged(object sender, EventArgs e)


{
int kq = 0, tong = 0;
listBox1.Items.Clear();
foreach (CheckBox chk in flowLayoutPanel1.Controls )
{
if (chk.Checked)// co chon chk.Checked=true
{
if (chk.Enabled == true)
{
listBox1.Items.Add(chk.Text);
kq += GiaTien(Convert.ToInt32 ( chk.Text));
}

}
lblKQ.Text = kq.ToString();
lbltong.Text = tong.ToString();
}

}
private void btnThongke_Click(object sender, EventArgs e)
{
int tong = 0;
listBox2.Items.Clear();
foreach (CheckBox chk in flowLayoutPanel1.Controls)
{
if (chk.Checked)
{
listBox2.Items.Add(chk.Text);
chk.Enabled = false;
tong += GiaTien(Convert.ToInt32(chk.Text));
}
}
lbltong.Text = tong.ToString();

listBox1.Items.Clear();
lblKQ.Text = "";
}
int GiaTien(int VitriGhe)
{
int DonGia = 0;
if (VitriGhe <= 5)
DonGia = 20000;
else if (VitriGhe <= 10)
DonGia = 30000;
else
DonGia = 40000;
return DonGia;
}

private void btnXoaDaChon_Click(object sender, EventArgs e)


{
xoaghe(listBox2);
}
void BochonCheck(string SoViTri)
{
foreach (CheckBox chk in flowLayoutPanel1.Controls)
{
if ( chk.Text.Equals(SoViTri))
{
chk.Checked = false;
chk.Enabled = true;
}
}
}
void xoaghe(ListBox lst)
{

int i=0;
while (i <= lst.Items.Count - 1)
{
if (lst.GetSelected(i) == true)
{
BochonCheck(lst.Items[i].ToString());
lst.Items.RemoveAt(i);
}
else
i++;
}

private void btnXoa_Click(object sender, EventArgs e)


{
listBox1.Items.Clear();
listBox2.Items.Clear();
foreach (CheckBox chk in flowLayoutPanel1.Controls)
{
chk.Enabled = true;
chk.Checked = false;
}
}

Hình khi chọn


Khi chọn

Bài Tập 5.5


a.Viết hàm mã hóa 1 ký tự thành số dùng cho việc bảo mật thông tin.
Hàm có dạng : int MaHoaKyTu (char Kytu)
HD: Căn cứ trên mã ASCII và key, chẳng hạn như
“a”->4, “b”->5, “c”->5….”z”->30, “ “->100
“A”->44, “B”->41, “C”->42….”Z”->70 (ví dụ: MaHoaKyTu(‘b’)=5).
b.Sử dụng hàm này để mã hóa 1 chuỗi nhập vào. (ví dụ: “I Love You” ->57 100 50 42 26 …).
c.Viết hàm giải mã và kiểm tra việc mã hóa - giải mã.

Bài Tập 5.6 (RadioButton)


Thiết kế chương trình có giao diện như sau
Chương trình cho phép chọn kiểu Button và kiểu Icon của Message box. Sau khi click “Chọn” sẽ hiển thị
hộp thông báo tương ứng. Ví dụ:

Khi kết thúc chương trình, sẽ xuất hiện một Message box để khẳng định có chắc là kết thúc không, như
hình bên dưới.

HD: Khai báo các biến toàn cục để giữ giá trị chọn trên các radio button, xử lý sự kiện CheckChanged
hoặc sự kiện Click của từng radio button.

Bài Tập 5.7 (Listbox)


Thiết kế form và thực hiện các chức năng sau:

Khi người sử dụng nhập một số vào textbox rồi Enter hoặc nhấp vào nút cập nhật thì số này được thêm
vào listbox, đồng thời nội dung trong textbox bị xóa và focus được chuyển về textbox.
Người dùng nhấn vào nút nào thì thực hiện chức năng tương ứng của nút đó.

Bài Tập 5.8


Yêu cầu:
1) Thiất kế tạo các TabOrder sao cho hợp lý.
2) Khi Form vừa chạy lên (load).
a. Có 2 sinh viên trong danh sách lớp A. Yêu cầu thêm vào trong lúc thiết kế (design trong
properties Item)
b. 3 sinh viên trong danh sách lớp B yêu cầu viết trong sự kiện Load của Form
Gợi ý.
lstLopB.Items.Add("Nguyễn Hoài Nam");
lstLopB.Items.Add("Tăng Hồng Phú");
lstLopB.Items.Add("Hồ Ngọc Lan");
c. Combobox có 2 lớo A, B nhưng Lớp B được chọn mặc định
Gợi ý.
Có thể AddItem trong lúc design hoặc trong sự kiện formload. Giả sử Item trong Combobox
lớp có thứ thự
Vị Trí (Index) Giá Tri (Value)
0 Lớp A
1 Lớp B
Để hiện lớp B trước ta làm => cboLop.SelectedIndex = 1;

Chọn nhiều đổi


SelectionMode =
MultiExtended

3) Nhấn nút cập nhật đưa thông tin Sinh Viên vừa nhập vào danh sách lớp. Đưa vào danh sách lớp
nào phải phụ thuộc CboLop (xem hình). Nhưng không nhập tên sinh viên thì phải cài bẫy lỗi
thông báo và hướng dẫn cho người sử dụng biết.
Xem hình

Hướng dẫn:
private void btnCapnhat_Click(object sender, EventArgs e)
{
try
{
if (txtten.Text == "")
MessageBox.Show("Bạn chưa nhập dữ liệu", "Thông báo");
else if (cboLop.SelectedIndex == 0)
lstLopA.Items.Add(txtten.Text);
else
lstLopB.Items.Add(txtten.Text);
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message);
}
}
4) Nhấn nút > thì chuyển các Sinh Viên đang chọn trong lớp A Qua Lớp B. Và ngược lại cho nút <
( danh sách có thể chọn nhiều). xem hình. Yêu cầu viết hàm.
Tham khảo lời gọi hàm sau:

Chọn nhiều đổi


SelectionMode =
MultiExtended

private void btnAToB_Click(object sender, EventArgs e)


{
ChuyenSinhVien(lstLopA, lstLopB);
}
void ChuyenSinhVien(ListBox lstchuyen, ListBox lstnhan)
{
// sinh viên viết nội dụng hàom vào đây
}
private void btnBToA_Click(object sender, EventArgs e)
{
ChuyenSinhVien(lstLopB, lstLopA);
}
5) Nếu đưa chuột vào nút “>” thì hiện Tooltiptext là “Chuyển Sinh Viên lớp A-> Lớp B” và ngược lại
cho nút “<”.

6) Nếu nhấn vào nút “>>|” thì chuyển hết sinh viên trong lớp A -> Lớp B và tương tự cho lớp nút “|
<<”

Dựa vào đoạn khai báo và gọi hàm sau.


private void btnAtoBAll_Click(object sender, EventArgs e)
{
ChuyenHetSinhVien(lstLopA, lstLopB);
}
void ChuyenHetSinhVien(ListBox lstchuyen, ListBox lstnhan)
{
int i = 0;
string str;
while (i < lstchuyen.Items.Count)
{
str = (string)lstchuyen.Items[i];
lstnhan.Items.Add(str);
i++;
}
lstchuyen.Items.Clear(); // chuyển hết di xóa một lần
}
7) Thiết kế thêm Menu và viết lệnh cho các chức năng (xem hình)

• Vết lệnh cho Menu “Chuyển A->B”

private void mnuChucNangAToB_Click(object sender, EventArgs e)


{
btnAToB_Click (sender, e); // chỉ cần gọi lại sự kiện của sự kiện
nút “>”
}
• Viết lệnh cho Menu Font (xem hình)
private void mnuChucNangMauFontFont_Click(object sender, EventArgs e)
{
dlgHopThoaiFont.ShowDialog(); // hiện hộp thoại font
lstLopA.Font = dlgHopThoaiFont.Font; // gán giá trị của hộp thoại font
vào
lstLopB.Font = dlgHopThoaiFont.Font;
}

• Tương tự viết cho Menu “Màu” (Dialog Color).


8) Đếm số lượng Sinh Viên trong từng danh sách của lớp rồi xuất ra qua MessageBox theo đoạn code
sau.

Bài Tập 5.9 (Listbox)


Viết chương trình thực hiện các chức năng trên giao diện như sau
- Nút Cập nhật cho phép nhận N số ngẫu nhiên từ 1..1000 vào combobox (N là số nhập tại textbox)
- Khi người sử dụng chọn 1 số trên combobox, chương trình hiển thị các ước số của số đang chọn vào
listbox.
- Các nút lệnh: Tổng ước số, số lượng ước số chẵn, kiểm tra số nguyên tố thông báo kết quả trên
messageBox.

Bài Tập Tuần 6


Bài Tập 6.1 (Array)
+Một số thuộc tính của các control
+Các đối tượng móc nối CSDL trong mô hình ADO.NET
+Thiết lập giao diện chương trình móc nối CSDL thông qua sự kết hợp giữa
các control
Viết chương trình với các chức năng được trình bày trên Form như sau
b. Các giá trị của mảng được tạo ngẫu nhiên trong [-100 ..100]. Sử dụng hộp thoại khác cho nhập số phần
tử của mảng.
a. Việc nhập giá trị cho các phần tử của mảng thực hiện bởi một hộp thoại khác, sử dụng lớp ArrayList.
RichTexBox
(Readonly=tr
ue)
Bài Tập 6.2 RichTexBox
Thiết kế form (xem hình) (Readonly=true)

form nhập liệu sinh viên tự hiệu chỉnh các properties của form cho phù hợp:

Yêu cầu
1) Khi form load
Khóa các button mờ (xem hình)
Code gợi ý:
namespace Mang_Array
{
public partial class frmMang : Form
{
public frmMang()
{
InitializeComponent();
}

private void frmMang_Load(object sender, EventArgs e)


{
KhoaHieuLucButton(false);
}
void KhoaHieuLucButton(Boolean Giatri)
{
btnclear.Enabled = Giatri;
btnnhap.Enabled = !Giatri;// gia tri NOT
btnmax.Enabled = Giatri;
btnmin.Enabled = Giatri;
btntongmang.Enabled = Giatri;
btntongchan.Enabled = Giatri;
btntongle.Enabled = Giatri;
btndemchan.Enabled = Giatri;
btndemle.Enabled = Giatri;
btnnguyento.Enabled = Giatri;
btndemnguyento.Enabled = Giatri;
btndaoso.Enabled = Giatri;
btntim.Enabled = Giatri;
btnxoa.Enabled = Giatri;
}
2) Nhấn nút nhập mảng thì
a. hiện form nhập thông tin cho phép nhập số lượng phần tử của mảng.
b. Viết hàm nhập mảng
c. Viết hàm xuất giá trị ra RichTextBox mảng gốc.

int GiaTri()
{
frmNhapLieu frm = new frmNhapLieu();
frm.ShowDialog();
int gt;
gt = Convert.ToInt32(frm.txtGTri.Text);
return gt;
}
private void btnnhap_Click(object sender, EventArgs e)
{
try
{
int gt = 0;
gt = GiaTri();
mA = new int[gt];
nhapmang(mA);
xuatmang(mA, rtxtGoc);
KhoaHieuLucButton(true);
}
catch
{
MessageBox.Show("Bạn chưa nhập dữ liệu", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
int[] mA ;
void nhapmang(int[] A)
{
Random n = new Random();
int i=0;
while (i < A.Length)
{
A[i] = n.Next(1, 91);
i++;
}
}
void xuatmang(int[] A, RichTextBox rtxt)
{
rtxt.Clear();
int i=0;
while (i < A.Length)
{
rtxt.Text += A[i].ToString() + " ";
i++;
}
}
3) Nhấn nút tìm kiếm hiện lên form cho phép nhập thông tin tìm. Viết hàm tìm trả về vị trí tìm
và xuất giá trị thông báo cho người sử dụng biết qua code gợi ý.
private void btntim_Click(object sender, EventArgs e)
{
try
{
int vt, gt = 0;
gt = ?? sinh viên tự nghĩ cho tiện lợi nhất
vt = Tim(mA, gt);
if (vt != -1)
{
vt += 1;
MessageBox.Show("Tìm thấy tại vị trí thứ " + vt.ToString(), "Thông
báo", MessageBoxButtons.OK);
}
else
MessageBox.Show("Không tìm thấy", "Thông báo",
MessageBoxButtons.OK);
}
catch {
MessageBox.Show("Bạn chưa nhập dữ liệu", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
int Tim(int[] a, int gt)
{
int i, vt = -1;
for (i = 0; i < a.Length; i++)
{
if (a[i] == gt)
{
vt = i;
break;
}
}
return vt;
}
4) Nhấn nút xóa hiện form cho phép nhập giá trị cần xóa. Trong code gợi ý chỉ xóa vị trí tìm
thấy đầu tiên sinh viên viết thêm xóa tất cá các gá trị bằng giá trị nhập vào ( gợi ý hai vòng
lặp lồng nhau)
private void btnxoa_Click(object sender, EventArgs e)
{
try
{
int i,gt, vt;
gt = GiaTri();
vt = Tim(mA, gt);
//sinh viên viết thêm xóa tất cá các gá trị bằng giá trị nhập vào
if (vt != -1)
{
for (i = vt; i < mA.Length - 1; i++)
mA[i] = mA[i + 1];
Array.Resize(ref mA,mA.Length-1);
}
xuatmang(mA, rtxtKQ );
}
catch
{
MessageBox.Show("Bạn chưa nhập dữ liệu", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); }
KhoaHieuLucButton(false);
}
5) Nhấn nút đảo ngược dãy số chính là dảo ngược mảng xem code gợi ý.
private void btndaoso_Click(object sender, EventArgs e)
{
daonguocdayso(mA, rtxtKQ);
}
void daonguocdayso(int[] a, RichTextBox rtxt)
{
int i = 0;
int j = (a.Length - 1);
int tam;
do
{
tam = a[j];
a[j] = a[i];
a[i] = tam;
i++;
j--;
}
while (i < (a.Length / 2));
xuatmang(a, rtxt );
}
6) Nhấn nút clear khóa mở text cho hợp lý xem code gợi ý.
private void btnclear_Click(object sender, EventArgs e)
{
rtxtGoc.Clear ();
rtxtKQ.Clear() ;
btnnhap.Focus();
KhoaHieuLucButton(false);
}
7) Cá nút khác sinh viên tự giải quyết nhưng nên viết theo hàm vá sử dụng một số
gợi ý hàm sau:
string xuatsonguyento(int[] A)
{
string str = "";
int i = 0;
do
{
if (ktsonguyento(A[i]) == true)
str += A[i].ToString() + " ";
i++;
}
while (i < A.Length);
return str;
}
Boolean ktsonguyento(int n)
{
int dem = 0, i;
for (i = 1; i <= n; i++)
{
if (n % i == 0)
dem++;
if (dem > 2)
break;
}
return (dem == 2);
}

Bài Tập 6.3

Thiết kế Form cho phép nhập vào giá trị hai số nguyên A và B. Sau đó người dùng bấm vào nút phát sinh
chương trình sẽ cho biết dãy số vừa được phát sinh, tổng giá trị của các phần tử trong dãy và sắp xếp dãy
số theo thứ tự tăng.

Bài tập chuỗi


Bài 7.1:
Thiết kế form (xem hình)
Yêu cầu
Giả sử có mảng
string[] ho = { "nguyễn", "trần", "đinh", "gia", "ngô", "lê", "hà", "lâm", "vương" };
string[] tenlot = { "thị", "hoàng", "huy", "cao", "văn", "duy", "thanh", "anh" };
string[] ten = { "lan", "hương", "tuấn", "hùng", "cường", "vy", "loan", "nam", "tú",
"nga", "phát", "kiệt", "triều", "hạ", "hải", "thủy" };
1. Khi form vừa load lên các button mất hiệu lực hỉ có một nút nhập tên ngẫu nhiên là có thể hoạt động
được.
Code gợi ý:
private void frmMangchuoi_Load_1(object sender, EventArgs e)
{
KhoaButton(false);
}
void KhoaButton(Boolean giatri)
{
btnxoaten.Enabled = giatri;
btnxoaho.Enabled = giatri;
btndoiten.Enabled = giatri;
btndoiho.Enabled = giatri;
btndoitenhoa.Enabled = giatri;
btndoihoadautu.Enabled = giatri;
btnclear.Enabled = giatri;
}
2. Khi nhấn nút “nhập tên ngẫu nhiên” hiện lên một form cho phép nhập vào số lượng , dựa vào mảng
ho, tenlot, ten để
tạo ra danh sách các tên ngẫu nhiện. Quy định họ tên =Ho+tenLot+Ten đưa vào list danh sách sinh vien.
Code tham khảo.
private void btnnhap_Click(object sender, EventArgs e)
{
try
{
int n;
n = Convert.ToInt32(GiaTri("Nhập số lượng:"));
TaoHoTenNgauNhien(lst, n);
groupBox1.Text = "Danh sách SV: " + lst.Items.Count.ToString() + "
SV";
KhoaButton(true);
}
catch
{
MessageBox.Show("Bạn chưa nhập dữ liệu", "Thông báo");
}
}
string GiaTri( string str)
{
frmNhapDLieu frm = new frmNhapDLieu();
frm.lblHuongDan.Text = str;
frm.ShowDialog();
return frm.txtDL.Text;
}
void TaoHoTenNgauNhien(ListBox lst, int n)
{
lst.Items.Clear();
Random x = new Random();
StringBuilder hoten;
int i;
string Temp = "";
for (i = 0; i < n; i++)
{
hoten = new StringBuilder();
Temp = ho[x.Next(0, ho.Length)];
hoten.Append(Temp);
Temp = tenlot[x.Next(0, tenlot.Length)];
hoten.Append(" ");
hoten.Append(Temp);
Temp = ten[x.Next(0, ten.Length)];
hoten.Append(" ");
hoten.Append(Temp);
lst.Items.Add(hoten);
}
}
3. Nhấn nút “Xóa SV theo tên” hiện form cho phép nhập tên cấn xóa. Xóa tất cả các
tến trong List trùng với tên nhập vào. Sử dụng hàm LastIndexOf(' ') trong thuật
toán sinh viên có thể dùng hàm EndsWith("chuỗi tìm")
Code gợi ý:
private void btnxoaten_Click(object sender, EventArgs e)
{
string ten;
int dem;
ten = GiaTri ("Nhập ten cần xóa");
dem = xoaSVtheoten(lst, ten);
groupBox1.Text = "";
groupBox1.Text = "Danh sách SV: " + lst.Items.Count.ToString() + "
SV";
statusStrip1.Items[0].Text = "đã xóa " + dem.ToString() + " SV";
}
int xoaSVtheoten(ListBox lst, string ten)
{
//string[] mangten; string hoten, tentam;
int i = 0, dem = 0, vt;
while (i < lst.Items.Count)
{
hoten = lst.Items[i].ToString();
//hoten.EndsWith("") vt = hoten.LastIndexOf(' ');
tentam = hoten.Substring(vt + 1, hoten.Length - (vt + 1));
if (tentam.ToUpper().Equals(ten.ToUpper()))
{
lst.Items.RemoveAt(i);
dem++;
}
else
i++;
}
return dem;
}
4. Nút “ xóa sinh viên theo họ” thuật toán như theo tên chỉ khác biệt lấy họ ngược lại lấy tên.
Code gợi ý:
private void btnxoaho_Click(object sender, EventArgs e)
{
string strHo;
int Dem ;
strHo = GiaTri("Nhập tên theo họ") ;
Dem = xoaSVtheoho(lst, strHo);
groupBox1.Text = "Danh sách SV: " + lst.Items.Count.ToString() + "
SV";
statusStrip1.Items[0].Text = "đã xóa " + Dem.ToString() + " SV";
}
int xoaSVtheoho(ListBox lst, string ho)
{
string hoten, hotam;
int i = 0, Dem = 0;
while (i < lst.Items.Count)
{
hoten = lst.Items[i].ToString ();
hotam = hoten.Substring(0, hoten.IndexOf(' '));
if (hotam.ToUpper().Equals(ho.ToUpper()))
{
lst.Items.RemoveAt(i);
Dem++;
}
else
i++;
}
return Dem;
}
5. Đổi tên thì chọn tên cần đổi trên list và nhập tên mới.
private void btndoiten_Click(object sender, EventArgs e)
{
string strTenMoi;
int Dem;
if (lst.SelectedIndex != -1)
{
strTenMoi = GiaTri ("Nhập tên mới");
Dem = DoiTen(lst, strTenMoi);
groupBox1.Text = "Danh sách SV: " + lst.Items.Count.ToString() + "
SV";
statusStrip1.Items[0].Text = "đã đổi tên của " + Dem.ToString() +
" SV";
}
Hướng dẫn thực hành - Lập trình Windows Cơ Bản
Trang 4/5
else MessageBox.Show("Chon sv doi ten");
}
int DoiTen(ListBox lst, string tenmoi)
{
string hotenMoi, hoten;
int vitri, vtChen;
hoten = lst.SelectedItem.ToString () ;
vitri = hoten.LastIndexOf(' ');
hotenMoi = hoten.Substring(0, vitri) + " " + tenmoi;
vtChen = lst.SelectedIndex;
lst.Items.RemoveAt(vtChen);
lst.Items.Insert(vtChen , hotenMoi);
return 1;
}
6. Đổi sinh viên theo họ.
private void btndoiho_Click(object sender, EventArgs e)
{
string strTenMoi;
int Dem;
if (lst.SelectedIndex != -1)
{
strTenMoi = GiaTri("Nhập họ mới");
Dem = DoiHo(lst, strTenMoi);
groupBox1.Text = "Danh sách SV: " + lst.Items.Count.ToString() + "
SV";
statusStrip1.Items[0].Text = "đã đổi tên của " + Dem.ToString() + "
SV";
}
else MessageBox.Show("Chon sv doi ten");
}
int DoiHo(ListBox lst, string HoMoi)
{
string hotenMoi, hoten;
int vitri, vtChen;
hoten = lst.SelectedItem.ToString();
vitri = hoten.IndexOf(' ');
hotenMoi = HoMoi + hoten.Substring(vitri, hoten.Length -vitri );
vtChen = lst.SelectedIndex;
lst.Items.RemoveAt(vtChen);
lst.Items.Insert(vtChen, hotenMoi);
return 1;
}
7. Đổi tên hoa:
private void btndoitenhoa_Click(object sender, EventArgs e)
{
string ten;
int dem;
ten = GiaTri("Nhập tên SV cần đổi:");
dem = doitenhoa(lst, ten);
statusStrip1.Items[0].Text = "Đã đổi tên hoa của " + dem.ToString() + "
SV";
}
int doitenhoa(ListBox lst, string ten)
{
string[] mangten;
string hotendaydu;
int dem = 0;
string hoten, tentam, tenlottam, hotam;
int i = 0;
while (i < lst.Items.Count)
{
hoten = lst.Items[i].ToString ();
mangten = hoten.Split(' ');
tentam = mangten[mangten.Length - 1];
Hướng dẫn thực hành - Lập trình Windows Cơ Bản
Trang 5/5
tenlottam = mangten[mangten.Length - 2];
hotam = mangten[0];
if (tentam.ToUpper().Equals(ten.ToUpper()))
{
hotendaydu = hotam.ToUpper() +""+ tenlottam.ToUpper() +" "+
tentam.ToUpper();
lst.Items[i] = hotendaydu;
hotendaydu = hotam.ToUpper() + " " + tenlottam.ToUpper() + " " +
tentam.ToUpper();
lst.Items[i] = hotendaydu;
dem++;
}
i++;
}
return dem;
}
8. Hoa đầu từ
private void btndoihoadautu_Click(object sender, EventArgs e)
{
string ten;
int dem;
ten = GiaTri ("Nhập tên SV cần đổi: ");
dem = doihoa(lst, ten);
statusStrip1.Items[0].Text = "Đã đổi tên hoa của " + dem.ToString() + "
SV";
}
int doihoa(ListBox lst, string ten)
{
string[] mangten;
string hoten, tentam, hotam, tenlottam;
int i = 0, dem = 0;
while (i < lst.Items.Count)
{
hoten = lst.Items[i].ToString ();
mangten = hoten.Split(' ');
tentam=mangten[mangten.Length-1];
tenlottam = mangten[mangten.Length - 2];
hotam = mangten[0];
if (tentam.ToUpper().Equals(ten.ToUpper()))
{
string tam = "", a = "", b = "",c="";
a = hotam.Substring(0, 1).ToUpper() + hotam.Substring(1,
hotam.Length - 1).ToLower();
b = tenlottam.Substring(0, 1).ToUpper() + tenlottam.Substring(1,
tenlottam.Length - 1).ToLower();
c = tentam.Substring(0, 1).ToUpper() + tentam.Substring(1,
tentam.Length - 1).ToLower();
tam = a + b + " " + c;
lst.Items[i] = tam;
tam = a+" " + b + " " + c;
lst.Items[i] = tam;
dem++;
}
i++;
}
return dem;
}
9. Nút clser
private void btnclear_Click(object sender, EventArgs e)
{
groupBox1.Text = "Danh sách SV:";
lst.Items.Clear();
KhoaButton(false);
}
Bài tập 6.2. Bài tập viết class
a. Xây dựng một class CHinhTamGiac như sau:

CHinhTamGiac
- ma (int)
- mb (int)
- mc (int)
+ CHinhTamGiac()
+ CHinhTamGiac(int, int, int)
+ get / set (ma, mb, mc)
+ int ChuVi()
+ int DienTich()
+ bool LaTamGiac()

Trong đó:
• ma, mb, mc là ba cạnh của tam giác.
• Trong constructor CHinhTamGiac(int, int, int), nếu 3 giá trị số nguyên truyền vào không lập thành
một hình tam giác thì thông báo «Không phải hình tam giác» và khởi tạo giá trị cho các biến ma, mb,
mc bằng 0.
(ba giá trị lập thành một hình tam giác khi và chỉ khi tổng hai cạnh bất kỳ luôn lớn hơn cạnh còn lại)
• Hàm ChuVi(), DienTich() tính chu vi và diện tích của tam giác.
• Hàm LaTamGiac() trả về giá trị True khi ba giá trị ma, mb, mc lập thành một hình tam giác, ngược
lại trả về giá trị False.

b. Viết ứng dụng (console) sử dụng class CHinhTamGiac theo yêu cầu sau:
Cho nhập vào 3 giá trị số nguyên và khởi tạo hình tam giác có các cạnh ứng với 3 giá trị này, nếu 3 giá trị
này không lập thành tam giác thì thông báo, ngược lại thì tính và xuất ra chu vi và diện tích của nó.

Bài tập 1. Bài tập viết class


1. Xây dựng một class CNhanVien như sau:
Trong đó:
• mHo, mTen, mSoSP lần lượt là họ, tên, số sản phẩm của nhân viên.
• Constructor CNhanVien(String, String, int) sẽ khởi tạo họ, tên, số sản phẩm của nhân viên; phải
kiểm tra số sản phẩm là số lớn hơn hoặc bằng 0, nếu là số âm thì thông báo và khởi tạo giá trị cho biến
mSoSP là 0.
• Hàm TinhLuong(): lương = số sản phẩm * đơn giá, với đơn giá tùy thuộc vào số sản phẩm như
sau:
Số sản phẩm Đơn giá
1 - 199 0.5
200 - 399 0.55
400 - 599 0.6
600 trở lên 0.65
• Hàm LonHon(CNhanVien nv2): hàm này trả về giá trị True khi số sản phẩm (mSoSP) lớn hơn số
sản phẩm của nv2.

2. Viết ứng dụng (console) sử dụng class CNhanVien theo yêu cầu sau:
Cho người dùng nhập vào 2 nhân viên, mỗi nhân viên nhập vào họ, tên, số sản phẩm của họ. Hãy tính và
xuất ra lương của từng nhân viên. So sánh và xuất ra thông báo nhân viên nào có số sản phẩm nhiều hơn
và nhiều hơn bao nhiêu. Có thể so sánh mà không dùng hàm LonHon được hay không ? Nếu được thì hãy
lập trình.

Bài tập 2. (File)


Viết chương trình thao tác trên tập tin như sau:
Yêu cầu:
Nút ...: cho phép mở hộp thoại Open để người dùng chọn một tập tin (chỉ hiện các tập tin .txt). Nội dung
tập tin sau khi được chọn sẽ được đưa vào mục Nội dung tập tin.

Bài tập 3. (File)


Viết chương trình thao tác trên tập tin như sau:

Yêu cầu:
• Nút ...: cho phép mở hộp thoại Open để người dùng chọn các tập tin (chỉ hiện các tập tin .txt). Các
tập tin sau khi được chọn sẽ được đưa vào Danh sách tập tin, mỗi phần tử trong danh sách là tên tập
tin.
• Nút Xóa: xóa một phần tử đang chọn trong Danh sách tập tin.
• Khi nhấn vào tập tin nào trong Danh sách tập tin thì nội dung của tập tin đó được hiển thị tương
ứng trong phần Nội dung tập tin.

Bài tập 4. (File)


Viết chương trình thao tác trên tập tin như sau:

Yêu cầu:
• Nút Lưu: chương trình sẽ lưu thông tin sinh viên (gồm Mã số, Họ tên, Ngày sinh) vào tập tin
SinhVien.txt. Trước khi lưu phải kiểm tra dữ liệu có hợp lệ không, nếu không hợp lệ thì thông báo và
không cho lưu vào tập tin (dữ liệu hợp lệ khi nhập đầy đủ thông tin vào ô Mã số và Họ tên, nếu có
Ngày sinh thì ngày phải hợp lệ)
• Nút Hiện danh sách: cho phép hiện danh sách ở Listbox bên dưới theo định dạng như hình.
Dữ liệu được lưu trong tập tin SinhVien.txt với định dạng:
Mã SV
Họ tên
Ngày sinh
Bài tập 5. (File)
Viết chương trình thao tác trên tập tin như sau:
Dữ liệu được lưu trong tập tin SinhVien.txt với định dạng:
Mã SV
Họ tên
Ngày sinh
• Khi form load lên thì danh sách sinh viên đã nhập được hiện lên ListView bên dưới.
• Nút Thêm: thêm một dòng vào ListView, gồm Mã số, Họ tên, Ngày sinh. Trước khi lưu phải kiểm
tra dữ liệu có hợp lệ không, nếu không hợp lệ thì thông báo và không cho lưu vào tập tin (dữ liệu hợp
lệ khi nhập đầy đủ thông tin vào ô Mã số và Họ tên, nếu có Ngày sinh thì ngày phải hợp lệ)
• Nút Xóa: dùng để xóa một dòng đang chọn trong ListView.
• Nút Lưu dùng để lưu toàn bộ thông tin trong ListView vào tập tin SinhVien.txt

Bài tập 6. (String)


Viết chương trình theo giao diện và thực hiện các yêu cầu sau
• Khi form được load lên màn hình thì chỉ có nút Nhập Liệu và nút Kết Thúc là sử dụng được, và
đồng thời nút Nhâp Liệu được focus
• Khi nút Nhập Liệu được nhấn thì các button khác mới sáng nên để có thể thao tác được, đồng thời
quét khối các text trong text nhập liệu và cho con nháy về text Nhập Liệu.
• Khi một nút chức năng nào đó được nhấn thì kết quả tương ứng hiện vào text kết quả và làm mờ
tất cả các nút (trừ nút Nhập Liệu và Kết Thúc)
• Khi nhấn Xoá Chuỗi hiện ra một hộp thoại cho bạn nhập một chuỗi để xoá, nếu thực sự có trong
text Nhập Liệu, có text bằng text vừa nhập thì xoá đi và nếu không có thì báo không có text muốn xóa
(=> bạn có thể mở rộng bằng thay thế một chuỗi)

Bài tập 7.
Viết chương trình quay số may mắn.
Quy luật chơi như sau:
• Khi bắt đầu chơi số tiền có sẵn trong máy là 10 đồng và số tiền thưởng là 0. Mỗi lần quay số thì
người chơi phải bỏ vào 30 đồng (=> số tiền có trong máy tăng 30 đồng)
• Nếu kết quả quay số =0 => người chơi nhận được cộng 10 đồng vào tiền thưởng
• Nếu kết quả quay số =9 => người chơi nhận được cộng 30 đồng vào tiền thưởng
• Nếu kết quả quay số =7 => người chơi nhận được cộng 100 đồng và 50% số tiền đang có trong
máy vào tiền thưởng (=> số tiền trong máy giảm 50%)
• Khi nút Game mới được nhấn thì số tiền thưởng phải có gía trị = 0
• Khi có thưởng thì chương trình phải hiện dòng thông báo cho biết số tiền thưởng hiện tại là bao
nhiêu.

Bài tập 8.
Viết lại chương trình quay số may mắn theo mẫu sau:

Khi chương trình bắt đầu chạy thì số tiền có trong máy là 100 đồng.
Mỗi lần quay số người chơi phải bỏ vào máy 30 đồng (số tiền trong máy tăng 30 đồng mỗi lần quay số)
Các hộp chứa chữ số từ trái qua phải có tên như sau: txt1, txt2, txt3.
Giá tri trong các hộp số được tạo bằng giá trị ngẫu nhiên txt1, txt2, txt3 phát sinh giá trị ngẫu nhiên lần
lượt trong [0, 7], [0, 8], [0,10]
• Nếu kết quả của txt1 = 7 thì số tiền được thưởng là 100 +50% số tiền đang có trong máy (số tiền
trong máy giảm 50%)
• Nếu kết quả của txt2 = 7 thì số tiền được thưởng là 30 +10% số tiền đang có trong máy (số tiền
trong máy giảm 10%)
• Nếu kết quả của txt1 = 7 thì số tiền được thưởng là 10.
Khi trúng thưởng thì số tiền thưởng được cộng dồn và sẽ hiện lên màn hình cho người chơi biết số tiền
thưởng mà họ đang có.
Khi nút Game mới được click (bắt đầu cho một người chơi khác) thì số thưởng quay về 0

Bài tập 9.
Thiết kế Form kê khai sơ yếu lý lịch của một Sinh viên
Bài tập 8:
Thiết kế Form cho màn hình soạn thảo của NotePad
Bài tập 10.
Thiết kế Form sao cho khi người sử dụng nhập vào giá trị tại hộp lên xuống hoặc trái phải
( NumericUpDown ) thì Hình vuông nhỏ bên trong sẽ dịch chuyển trong phạm vi bên trong cuả hình
vuông lớn bên ngoài.

Bài tập 11.


Thiết kế Form Cho phép tính chi phí Cầm Đồ.
Code minh họa:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Dichvucamdo
{
public partial class Giangthanhtron : Form
{
int songay;
public Giangthanhtron()
{
InitializeComponent();
}

private void cmbMaTS_SelectedIndexChanged(object sender,


EventArgs e)
{
if (cmbMaTS.Text == "XeDap")
txtTenTS.Text = "Xe Đạp Các Loại";
else
{
if (cmbMaTS.Text == "XeGanMay")
xtTenTS.Text = "Xe Gắn Máy Các Loại";
else
{
if (cmbMaTS.Text == "XeHoi")
xtTenTS.Text = "Xe Hơi Các Loại";
else
{
if (cmbMaTS.Text == "TrangSuc")
txtTenTS.Text = "Đồ Trang Sức Các Loại";
else
{
if ((cmbMaTS.Text == "DienThoai"))
txtTenTS.Text = "Điện Thoại Các Loại";
else
txtTenTS.Text = "Vật Dụng Cá Nhân
Khác";
}
}

}
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
Close();
}

private void btnThanhtien_Click(object sender, EventArgs e)


{
int songay;
TimeSpan Songaygui;
DateTime Ngaygui, Ngaynhan;
Ngaygui = DateTime.Parse(txtNgaygui.Text);
Ngaynhan = DateTime.Parse(txtNgaynhan.Text);
Songaygui = Ngaynhan.Subtract(Ngaygui).Duration();
songay = Songaygui.Days;
txtSongaygui.Text = songay.ToString();

int thanhtien, laisuat,trephat;


trephat = int.Parse(txtTrephat.Text);
laisuat = int.Parse(txtLaisuat.Text);
thanhtien = laisuat + trephat;
txtChiphi.Text = thanhtien.ToString();
}

private void txtGiatriTS_TextChanged(object sender, EventArgs


e)
{
int trigia, lai;
trigia=int.Parse(txtGiatriTS.Text);
if (trigia <= 5000000)
{
lai = (10 * trigia) / 100;
txtLaisuat.Text = lai.ToString();
}
else
{
if (trigia <= 10000000)
{
lai = (20 * trigia) / 100;
txtLaisuat.Text = lai.ToString();
}
else
{
lai = (30 * trigia) / 100;
txtLaisuat.Text = lai.ToString();
}
}
}

private void txtThoihan_TextChanged(object sender, EventArgs e)


{
int thoihan;
thoihan = int.Parse(txtThoihan.Text);
if (thoihan <= songay)
{
txtTrephat.Text = "0";
}
else
{
if ((thoihan - songay)<=10)
{
txtTrephat.Text = "100000";
}
else
txtTrephat.Text = "500000";
}
}

}
}
Bài tập 12.
Thiết kế Form Cho phép tính Lưong thời gian cho Nhân Viên.

Code Minh Họa


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Luongthoigian
{
public partial class GiangThanhTron : Form
{
public GiangThanhTron()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string a;
a = txtTenNV.Text.Substring(1,3);
txtLuongCB.Text = a;
}

private void GiangThanhTron_Load(object sender, EventArgs e)


{

private void Thoat_Click(object sender, EventArgs e)


{
Close();
}

private void txtNC_TextChanged(object sender, EventArgs e)


{
int thuong, ngay;
ngay = int.Parse(txtNC.Text);
thuong = ngay * 50000;
txtThuong.Text = thuong.ToString();
}

private void btnTinh_Click(object sender, EventArgs e)


{
int songay, luongnv, luongcb;
songay = int.Parse(txtNC.Text);
luongcb = int.Parse(txtLuongCB.Text);
if (songay <= 25)
{
luongnv = songay * luongcb;
}
else
luongnv = (25 * luongcb) + ((songay - 25) * 2 *
luongcb);
txtLuong.Text = luongnv.ToString();

int tongcong, luong, thuong, phucap;


phucap = int.Parse(txtPCCV.Text);
luong=int.Parse(txtLuong.Text);
thuong=int.Parse(txtThuong.Text);
tongcong = luong + phucap + thuong;
txtThanhtien.Text = tongcong.ToString();
}

private void cbmNV_SelectedIndexChanged(object sender,


EventArgs e)
{
string MNV;
MNV=cbmNV.Text.Substring(0,1);
if (MNV == "A")
txtPCCV.Text = "500000";
else
{
if (MNV == "B")
txtPCCV.Text = "300000";
else
txtPCCV.Text = "200000";
}

}
}
}

You might also like