You are on page 1of 139

B Ộ C ÔN G T HƯ ƠN G

TRƯỜNG CAO ĐẲNG KỸ THUẬT CAO THẮNG

THỰC HÀNH

MÔN LẬP TRÌNH WINDOWS CĂN BẢN

Giảng Viên: Trần Thị Ngọc Châu

Năm 2012
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

MỤC LỤC

CHƯƠNG 1.CÁC CONTROL CƠ BẢN................................................................... 3


Tuần 1. Label, Textbox, Button................................ Error! Bookmark not defined.
Tuần 2. Picture, checkbox và radiobutton ................ Error! Bookmark not defined.
CHƯƠNG 2 BIẾN, BIẾN CỤC BỘ, BIẾN TOÀN CỤC.......................................... 8
Tuần 3. Biến cục bộ .................................................................................................... 8
Tuần 4. Biến cục bộ và toàn cục............................................................................... 14
CHƯƠNG 3.HÀM, MENU, CÁC HÔP THOẠI DIALOG THÔNG THƯỜNG ... 24
Tuần 5. Hàm, menu và các hộp thoại thông thường................................................. 24
CHƯƠNG 4.CẤU TRÚC ĐIỀU KHIỂN (IF,SWITCH, CẤU TRÚC LẶP) .......... 28
Tuần 6. Cấu trúc if và switch..case ........................................................................... 28
Tuần 7. Vòng lặp ...................................................................................................... 37
Tuần 8. Listbox va combobox .................................................................................. 69
Tuần 9. Vòng lặp , listbox và combobox ................................................................. 87
CHƯƠNG 5.MẢNG................................................................................................. 90
Tuần 10. Mảng một chiều ....................................................................................... 108
CHƯƠNG 6.GIAO DIỆN NÂNG CAO ................................................................ 111
Tuần 11. Treeview .................................................................................................. 111
Tuần 12. Listview ................................................................................................... 116
Tuần 13. Treeview và listview ............................................................................... 122
CHƯƠNG 7.FILE .................................................................................................. 132
Tuần 14. Mở và lưu file .......................................................................................... 134
Tuần 15. Lưu file .................................................................................................... 136

2
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG1
CÁC CONTROL CƠ BẢN

Bài 1. Định dạng màu chữ (t)


a. Mục đích:
Sử dụng các properties và methods cơ bản của các đối tượng trong window
Làm quen với ngôn ngữ C#
+ Tạo ứng dụng dạng Windows Appliction
+ Một số thuộc tính, phương thức qua Control .

lblHienThi

radHoneydew
radRed

radBlue
radGreen
radMarron

radPink radSnow

btnClose
radGold

Label(không
đặt tên)

3
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

b. Yêu cầu thực hiện:


Viết lệnh để chương trình hoạt động như sau:
 Nhấn vào radio button radRed thì đổi màu chữ cho lblHienThi
Hướng dẫn: lblHienThi.ForeColor = Color.Red;
 Nhấn vào btnClose thi đóng chương trình
Hướng dẫn: Vào sự kiện Click gõ:
This.Close();
 Nhấn vào radio button khác cũng tượng tự thay đổi màu chữ tương ứng
cho lblHienThi.
Bài 2. (thực hành)
a. Mục đích:
Sử dụng các properties và methods cơ bản của các đối tượng trong Windows Form.

txtName
btnDispla
y

txtMessa chkVisible
ge

radRed
btnClear
radGreen

btnExit

picBig
lblMessag picSmall
e

b. Yêu cầu thực hiện: 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.

4
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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 hoàn 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)

5
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 3. (thực hành): thiết kế form dịnh dạng màu và font chữ như hình
Sử dụng các properties và methods của các đối tượng trong Windows Form.

txtNhapten
chkBold

radGreen

lblLapTrinh

btnThoat

Yêu cầu
 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.
 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 ; }
 Nhấn nút thoát hoặc Esc thì thoát chương trình.
 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; }

6
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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ự **** . }

7
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 2
BIẾN, BIẾN CỤC BỘ, BIẾN TOÀN CỤC

Mục đích:
Sử dụng biến cục bộ và biến toàn cục trong ứng dụng cho việc xử lý trên giao
diện window form
Tuần 1. Biến cục bộ

Thực hành bài 6 và bài 7


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 4. Thực hiện phép tính cộng trừ nhân chia cơ bản (lý thiết)
a. Mục đích : làm quen với biến cục bộ xử lý kết quả trong từng sự kiện

Kéo vào
form

Hình 1 Hình 2

8
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Kéo vào panel1

Hình 3

b. Yêu cầu thực hiện như sau:


 Thiết kết form bằng cách tách form ra làm 2 (như hình 1)
 Hiệu chỉnh sao cho có dạng như hình phía dưới bằng cách hiệu chỉnh
property Oraintation thành Horizontal của đối tượng Splitcontainer.( như hình 2)
 Tách Panel1 làm hai sao cho như hình 3
 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 4). Riêng button
thoát thì hiệu chỉnh qua property Doc là “Button”
 Hiệu chỉnh vị trí Tabindex sao cho phợp lý
 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ả.
 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.

9
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Hiệu
Chỉn
h
Hình 4

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();
}

10
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 5. Sự dụng biến cục bộ và try..Catch (lý thuyết)


a. Mục đích : làm quen với lệnh try …Catch để bẫy lỗi
b. Yêu cầu thực hiện sau :
 Dựa vào from bài 6
 Thực hiện lại các thao tác cộng trừ ,nhân, chia bằng cách bẫy lỗi dựa vào
lệnh Try ..Catch
c. Hướng dẫn thực hiện
int intSoA, intSoB;
long dblKetQua;
try
{
intSoA = Convert.ToInt32(txtA.Text);
intSoB = Convert.ToInt32(txtB.Text);
dblKetQua = intSoA + intSoB;
lblKQ.Text = dblKetQua.ToString();
}
catch (ArithmeticException MyErr)
{
MessageBox.Show("loi ve toan hoc " + MyErr.Message, "Thông báo
lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception MyErr)
{
MessageBox.Show("Loi chuyen kieu" + MyErr.Message, "Thông báo
lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); }
 Thực hiện tương tự cho phép trừ ,nhân, chia bằng cách bẫy lỗi dựa vào lệnh
Try ..Catch
 Button Close thực hiện lệnh Message Box hiển thị thông tin yêu cầu người
dùng có muốn thoát không ?
DialogResult dlgHoiThoat;
dlgHoiThoat = MessageBox.Show("Ban co
chac thoat?", "thong bao", MessageBoxButtons.YesNo
, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);

11
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

if (dlgHoiThoat == DialogResult.Yes )
this.Close();

Bài 6. Sự dụng biến cục bộ


a. Mục đích : làm quen với lệnh try …Catch để bẫy lỗi và viết sự kiện trong text
box để ép người dùng nhập dữ liệu theo số hoặc theo ký tự
b. Yêu cầu thực hiện sau :
 Thiết kế form bán hàng như sau:

 Thực hiện Button Bàn mới như sau xóa các textbox về số lượng, đơn giá
và label thành tiền
 Viết sự kiện KeyPress trong textbox ngăn không cho người dùng nhập ký
tự mà chỉ nhập ký tự số
c. Hướng dẫn thực hiện:
private void txtsl_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..
if (char.IsDigit(e.KeyChar) == false && char.IsControl(e.KeyChar) ==
false)
e.Handled = true;// ép không nhận ký tự gõ vào
}
Thực hiện button Tính tiền như sau:
int intSL;
decimal decDGia;

12
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

decimal decThanhTien;
// intSL = txtsl.Text;
intSL=Convert.ToInt32 ( txtsl.Text) ;
decDGia = Convert.ToDecimal (txtDG.Text );
decThanhTien = intSL * decDGia; lblthanhtien.Text =
decThanhTien.ToString();

13
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 2. Biến cục bộ và toàn cục

Thực hành bài 9 và bài 10 . Bài 11 đến 22 bài tập về nhà làm
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 7. Sự dụng biến cục bộ và biến toàn cục (LT)


a. Mục đích : làm quen với lệnh try …Catch để bẫy lỗi và viết sự kiện trong text
box để ép người dùng nhập dữ liệu theo số hoặc theo ký tự
b. Yêu cầu thực hiện sau :
 Thiết kế form bán hàng như sau:

 Viết sự kiện KeyPress cho txtSoluong để người dùng chỉ nhập số

14
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Button Bàn mới xóa dữ liệu trong txtSoluong, lblHoadon, lblThanhTien và


các radio, check box về trạng thái chưa được chọn.
 Thực hiện sự kiện nút Tính thì hiển thị thành tiền khi người dùng chọn mặt
hàng mua và số lượng
 Nếu người dùng không chọn mang về thì thanhtien=soluong*dongia( giá
tương ứng với các radiobutton Ngược lại thì thành tiền=(1.05)*soluong*dongia
private void radcafeda_CheckedChanged(object sender, EventArgs e)
{
if (radcafeda.Checked)
{
lblhd.Text = "cafe đá ";
mdecdongia = 5000;
}}
private void btntinhtien_Click(object sender, EventArgs e)
{
if (chkmuave.Checked)
{
decthtien = (1+ mdecTHUE )*decsoluong*mdecdongia ;
}
lblthanhtien.Text = decthtien.ToString();
minttongsl += intsl;//tổng số lượng bán hàng
minttongslban += 1;//tổng số lần mua
mdectongtien += decthtien;//tổng tiền bán hàng
}
 Khi Click vào nút thông kê yêu cầu người dùng hiển thị tổng số lượng bán
,tổng tiền, và Trung bình/solan
private void btnthke_Click(object sender, EventArgs e)
{
decimal dectbban;
dectbban = mdectongtien / minttongslban;//trungbinhlanban
lbltongtien.Text = mdectongtien.ToString();//tong tien
lbltongsl.Text = minttongsl.ToString();//tong so luong ban
lbltb.Text = dectbban.ToString();//tong tien trung binh tren so lan ban

15
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

}
 Viết sự kiện Click của nút Thoát

Bài 8. (thực hành) Tính tiền lợi nhuận và huê hồng khi biết giá bán , giá gốc
a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form kết
biến.
Thiết kế giao diện xem hình
b. Yêu cầu:
 Hoa hồng luôn luôn 0.15%
 Nhấn nút Calculator tính tiền
theo nguyên tắc
 Commission=(Sell-Cost) *
Luật Hoa Hồng
 Proft= Sell-Cost-
Commission
c. Hướng dẫn code
private void btnTinh_Click(object sender, EventArgs e)
{
try
{
decimal decsell, deccost, dechh, decproft;
decsell = Convert.ToInt32(txtsell.Text);
deccost = Convert.ToInt32(txtcost.Text);
dechh = (decsell - deccost) * mdecCOMMISSION_RATE;
decproft = decsell - deccost - dechh;
//định dạng Currency
lblhh.Text = string.Format("{0:C}", dechh);
lbltl.Text = string.Format("{0:C}", decproft);
}
catch
{ MessageBox.Show("Bạn chưa nhập đủ thông tin", "Tông báo");
}

16
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

}
 Nhấn nút clear thì xóa hết như trạng thái ban đầu
private void btnClear_Click(object sender, EventArgs e)
{ txtname.Clear(); txtsell.Clear(); txtcost.Clear(); lblhh.Text = "";
lbltl.Text = "";
txtname.Focus(); }
 Nhấn phím Enter tương đương nhấn nút Calculator, phím Esc thì thóat
chương trình.

Bài 9. (Thực hành) Viết chương trình bán hàng cho người dùng nhập vào số
lượng, đơn giá ( bắt buộc người dùng nhập số không cho nhập ký tự ) .Khi nhấn nút
tính thì hiển thị thành tiền,tổng số lượng bán, tổng tiền bán hàng cho các lần bán,
trung bình số lần bán ( tổng tiền/số lần bán)
a. Mục đích
Sử dụng các properties và methods cơ bản của các đối tượng trong Windows Form,
sử dụng biến toàn cục và cục bộ.

17
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

b. Yêu cầu:
 Sinh viên tự thiết kế các đối tượng trên form cho phù hợp
 Thiết đặt TabIndex cho hợp lý.
 Nhấn nút Tính hoặc Enter thì tính và hiện thông tin lên các ô tương ứng
(sinh có thể tham khảo demo trên blog http://thangdhcn.wordpress.com mục đề
moCSharp cơ bản)
 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 cho
việc nhập liên tục số lượng 5, 8

18
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 10. Viết chương trình tính tiền sách


a. Mục đích:
Sử dụng các properties và methods cơ
bản của các đối tượng trong Windows Form.
b. Yêu cầu:
 Sinh viên tự thiết kế các đối tượng
trên form cho phù hợp
 Thiết đặt TabIndex cho hợp lý.
 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)
 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
 Nhấn nút Calculator theo nguyên tắc :
ExtendedPrice = Quantity * Price
15%Discount = ExtendedPrice *
mdecLUATGIAM
mdecLUATGIAM = 0.15M:Giảm
15%
DiscountPrice = ExtendedPrice *
mdecLUATGIAM
SumSL += Quantity
TotalDiscountbGiven += Discount
TotalDiscountedAmount +=
DiscountPrice
AverageDiscount =
TotalDiscountGiven / mintSLB
Với mintSLB:là số lượng thấp nhất
được bán

19
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn :
//Khai báo biến toàn cục
int mintSLB = 0, mintSumSL = 0;
decimal mdecTotalDiscountGiven = 0, mdecTotaldiscountedAmount = 0;
const decimal mdecLUATGIAM = 0.15M;
private void btnCalculate_Click(object sender, EventArgs e)
{
//Khai báo biến cục bộ
decimal decExtendedPrice, decPrice, decDiscount, decDiscountPrice,
decAverageDiscount;
int decQuantity;
try
{
decQuantity = Convert.ToInt32(txtQuantiTy.Text);
decPrice = Convert.ToInt32(txtPrice.Text);
decExtendedPrice = decQuantity * decPrice;
decDiscount = decExtendedPrice * mdecLUATGIAM;
decDiscountPrice = decExtendedPrice - decDiscount;

mintSumSL += decQuantity;
mdecTotalDiscountGiven += decDiscount ;
mdecTotaldiscountedAmount += decDiscountPrice ;
mintSLB += 1;
decAverageDiscount = mdecTotalDiscountGiven / mintSLB;
//Định dạng VND
lblExtendedPrice.Text = String.Format("{0}VND",
decExtendedPrice);
lblDiscount.Text = String.Format("{0}VND", decDiscount);
lblDidcountedPrice.Text = String.Format("{0}VND",
decDiscountPrice);

lblTotalNumberOfBook.Text =mintSumSL.ToString ();

20
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

lblTotalDiscountGiven.Text = String.Format("{0}VND",
mdecTotalDiscountGiven);
lblTotalDiscountedAmonut.Text = String.Format("{0}VND",
mdecTotaldiscountedAmount);
lblAverageDiscount.Text = String.Format("{0}VND",
decAverageDiscount);
}
catch(Exception MyE)
{
MessageBox.Show(MyE.Message + "NHap sai thong tin");//bắt lỗi khi
nhập sai thông tin
} }
 Nhấn nút Clear Sale thì xóa hết như trạng thái ban đầu:
private void btnClearSale_Click(object sender, EventArgs e)
{
txtQuantiTy.Clear();
txtTitle.Clear();
txtPrice.Clear();
lblAverageDiscount.Text = "";
lblDidcountedPrice.Text = "";
lblDiscount.Text = "";
lblExtendedPrice.Text = "";
lblTotalDiscountedAmonut.Text = "";
lblTotalDiscountGiven.Text = "";
lblTotalNumberOfBook.Text = "";
txtQuantiTy.Focus();
}
 Nhấn vào Exit hoặc Esc thì thoát chương trình

21
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài tập : (tự viết code)


Bài 11. Phát triển bài 2.6, cho phép tính tổng, hiệu, tích, thương. Kết quả được
hiển thị dưới dạng thông điệp (MessageBox)

Bài 12. Viết chương trình nhập vào 2 số nguyên a, b. Sau đó, nhấp chuột trái
vào nút “Tong” thì giá trị tổng được đặt ở TextBox kết quả.

Bài 13. Phát triển bài 2.8 bổ sung thêm phép tính hiệu, tích, thương. Sau khi
nhấp chuột vào nút tương ứng thì kết quả được hiển thị ở TextBox kết quả.

22
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 14. Viết chương trình nhập vào 2 cạnh a, b của hình chữ nhật. Hãy tính
chu vi, diện tích và đường chéo của hình chữ nhật. Kết quả hiển thị tại ô TextBox
kết quả.

Bài 15. Viết chương trình nhập vào 2 cạnh a, b của hình chữ nhật. Hãy tính
chu vi, diện tích và đường chéo của hình chữ nhật. Khi nhấp chuột trái vào các nút
tương ứng sẽ hiển thị kết quả dưới dạng thông điệp (MessageBox).

Bài 16. Tương tự như bài 2.10 nhưng đối với hình vuông. Kết quả hiển thị ở ô
TextBox kết quả.
Bài 17. Tương tự như bài 2.11 nhưng đối với hình vuông. Kết quả hiện thị
dưới dạng thông điệp MessageBox.

23
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 3
HÀM, MENU,
CÁC HÔP THOẠI DIALOG THÔNG THƯỜNG

Tuần 3. Hàm, menu và các hộp thoại thông thường

Thực hành bài 23,24, và 25


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 18. Thực hiện viết hàm tính cộng, trừ, nhân, chia

a. Mục đích:
Sử dụng các properties và methods cơ bản của các đối tượng trong Windows Form.

24
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

b. Yêu cầu:
Thực hiện lại tính Cộng, Trừ, Nhân, Chia như bài 7 nhưng thực hiện bằng cách viết
lại các hàm Cộng, trừ, Nhân, Chia không làm trực tiếp trong các sự kiện Click của các
button tương ứng
c. Hướng dẫn thực hiện:

//Hàm tính tổng //gọi lại hàm tính tổng trong button
void HamTong() Cong
{ private void btnCong_Click(object
int intA, intB, intTong; sender, EventArgs e)
intA = Convert.ToInt32(txtSoA.Text); {
intB = Convert.ToInt32(txtSoB.Text); HamTong();
intTong = intA + intB; }
lblKQ.Text = intTong.ToString(); Tương tự hàm Trừ, Nhân , Chia
cũng viết như button Cộng.
}

Bài 19. (LT) Nhập nhập giá trị A và B , viết hàm chuyển đổi giá trị như công
thức sau. Xuất giá trị A, B, C trước và sau khi dùng hàm
A=A+ 10; B=B+10; C= 10
a. Mục đích : Hiểu rõ về
tham biến và tham trị
b. Yêu cầu :
 Thiết kế form như hình vẽ
 Viết hàm tình như hướng dẫn
 Viết sự kiện Click trong
button Tính hiển thị giá trị A,B,C
trước và sau khi dùng hàm tính

25
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn code (tham khảo)

void Tinh(int intA, ref int intB, out double private void btnTinh_Click(object sender,
dblC) EventArgs e)
{ {
// out phải gán giá trị trước khi thao tác int intA, intB;
intA += 10; double dblC=0;
intB += 10; intA = Convert.ToInt16( txtSoA.Text);
//dblC += 10; intB = Convert.ToInt32( txtSoB.Text);
dblC = 0; lblATruoc.Text = intA.ToString();
dblC += 10; lblBTruoc.Text = intB.ToString();
dblC = Math.Sqrt(dblC); lblSoCTruoc.Text = dblC.ToString();
}
Tinh(intA, ref intB, out dblC);

lblASau.Text = intA.ToString();
lblBSau.Text = intB.ToString();
lblSoCSau.Text = dblC.ToString();
}

Bài 20. (LT)Tạo menu và thực hiện phép tính cộng, trừ, nhân, chia. Định
dạng màu và font chữ cho label kết quả

Toolstrip

ContextMenuStrip

private void mnuPhepTinhCong_Click(object


sender, EventArgs e)
{
// HamTong();
btnCong_Click(sender, e);
}
private void mnuTuyChinhKieuMau_Click(object
sender, EventArgs e)
{

dlgColor.Color = lblKQ.ForeColor;
dlgColor.ShowDialog();
lblKQ.ForeColor = dlgColor.Color;
}

26
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

a. Mục đích : sử dụng Toolstrip,


private void mnuTuyChinhKieuFont_Click(object sender,
ContextMenuStrip, Hàm của các phép tính EventArgs
và e)
{
các Hộp Dialog thông dụng dlgFont.Font = lblKQ.Font;
if (dlgFont.ShowDialog()== DialogResult.OK )
b. Yêu cầu: lblKQ.Font = dlgFont.Font;
}
- Thiết kế form như hình private void mnuMau_Click(object sender, EventArgs e)
{
- Gọi lại chức năng cộng, trừ, nhân, chia mnuTuyChinhKieuMau_Click(sender, e)
}
trong menu Phép Tính
- Viết sự kiện click trong
menutuychinhmau như hướng dẫn
- Viết sự kiện click trong
menutuychinhFont như hướng dẫn
- Gọi lại sự kiện trong menutuychinhmau
va menutuychinhfont trong
contextmenu tương ứng

27
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 4
CẤU TRÚC ĐIỀU KHIỂN
(IF,SWITCH, CẤU TRÚC LẶP)

Tuần 4. Cấu trúc if và switch..case

Thực hành bài 26 và 27 .Bài 28 bài tập về nhà


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 21. Nhập vào 3 số a,b,c. Viết hai hàm tìm giá trị nhỏ nhất và lớn nhất và
hiển thị ra màn hình như hình dưới đây
a. Mục đích : sử dụng hàm và cấu trúc
điều khiển if để thực hiện
b. Yêu cầu:
 Thiết kế form như hình
 Viết hàm tìm giá trị lớn nhất
 Viết hàm tìm giá trị nhỏ nhất
 Thực hiện sự kiện click của
button Tìm min,max
 Hiển thị kết quả vào trong label
Max, Min

28
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn sử dụng

//Tìm giá trị lớn nhất //Tìm giá trị lớn nhất
private int max(int a, int b, int c) private int min(int a, int b, int c)
{ {
int max; int min;
if (a > b) max = a; min = a;
else max = b; if (min > b) min = b;
if (max < c) max = c; if (min > c) min = c;
return max; return min;
} }

private void btnTim_Click(object sender, EventArgs e)


{ try
{ int int1, int2, int3;
int1 = Convert.ToInt32(txt1.Text);
int2 = Convert.ToInt32(txt2.Text);
int3 = Convert.ToInt32(txt3.Text);
lblmax.Text = max(int1, int2, int3).ToString();
lblmin.Text = min(int1, int2, int3).ToString();
} catch (FormatException a)
{
MessageBox.Show(a.Message);
}
}

29
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 22. Nhập vào số tháng, xuất ra màn hình số tháng tương ứng bằng chữ và
quý tương ứng trong năm như hình vẽ.
a. Mục đích : sử dụng hàm và cấu trúc điều khiển (switch .. case..) để thực hiện
b. Yêu cầu:
 Thiết kế form như hình
 Viết hàm chuyển sang tháng
 Viết hàm chuyển sang quý
 Viết sự kiện Click Thực Hiện
 Hiển thị vào label Tháng tướng ứng và quý tương ứng
c. Hướng dẫn code

private void btnTHien_Click(object


sender, EventArgs e)
{
int intSo;
try {
intSo = Convert.ToInt32(txtSo.Text);
lblThang.Text = ChuyenThang(intSo);
lblQuy.Text = ChuyenQuy(intSo);
}
catch (Exception Err)
{ MessageBox.Show(Err.Message); }
}

30
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

string ChuyenQuy(int intThangSo) string ChuyenThang(int intThangSo)


{ {
string strQuy=""; string strThangChu;
if (intThangSo>0 &&
switch (intThangSo)
intThangSo<=12)
{
{
case 1:
switch (intThangSo)
strThangChu = "Tháng Một";
{
break;
case 1:
case 2: case 2:
case 3: strThangChu = "Tháng Hai";
strQuy = "Quý Một"; break;
break; case 3:
case 4: strThangChu = "Tháng Ba";
case 5: break;
case 6:
case 4:
strQuy = "Quý Hai";
strThangChu = "Tháng Bốn";
break;
break;
//tương tự quý 3(tháng 7,8,9) ,4(tháng
case 5:
10,11,12)
strThangChu = "Tháng Năm";
}// không dùng default mà dùng if
} break;
else strQuy="Không Hợp Lệ"; case 6:
return strQuy; } strThangChu = "Tháng Sáu";
break;
//tương tự các tháng khác sinh viện
tự làm
default :
strThangChu = "Không Có
Tháng Tương Ứng";
break;
}
return strThangChu;
}

31
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 23. (thực hành) Chương trình tính tiền thuê đĩa CD. Khi người dùng nhập
vào số lượng và đơn giá tính tiền thuê đĩa và thống kê tiền bán được
a. Mục đích: Sử dụng các properties và methods của các đối tượng trong
Windows Form. Sử dụng câu lệnh rẽ nhánh if và menu.
b. Yêu cầu:
 Thiết kết form như sau.(hình 1)
 Yêu cầu chung phải cài bẫy lỗi try/catch, if else và viết theo hàm cho các
trường hợp.
 Khi chương trình vừa load lên nút thống kê mờ đi mất hiệu lực nó chỉ có
hiệu lực khi nhấn nút Tính Thuê.
 Hệ thống menu của menustrip1 bao gồm xem hình

1) Hệ thống me nu của contextMenuStrip1 bao gồm

32
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Nhấn nút tính thuê yêu cầu xuất tông tin ra ô thành tiền theo nguyên tắc
sau: (hình 2)
 Ô mã và tên khách mờ đi mất hiệu lực nó chỉ có hiệu lực khi nhấn khách mới.
 Khuyến kích thuê nhiều cứ 5 đĩa giảm giá 1 đĩa (Tặng 1 đĩa không tính tiền) ví dụ:
Thuê 6 tính tiền 5. Thuê 10 tính tiền 8
 Nhấn vào hệ thống menuStrip
 Chức năng không viết lại code mà gọi lại các sự kiện trên form.
 Tùy chọn thay đỗi màu nền và font chữ cho các ô trong thống kê
 Trợ giúp/About hiện qua hộp thoại messagebox thông tin programmer
 Nhấn phải vào các ô thống kê hiện contextMenuStrip1 và thực hiện theo
lệnh trong menu
 Nhấn nút khách mới thiết lập cho nhập thông tin khách hàng mới.
c. Hướng dẫn code
Gợi ý hàm tính tiền
private decimal tinhtien(int intsluong, decimal decdongia, Boolean
blndunghan)
{
Decimal decthanhtien;
int inttang,intconlai;
inttang = (int)intsluong / 5;
intconlai = intsluong - inttang;
decthanhtien = intconlai * decdongia;
if (blndunghan==true)
decthanhtien = decthanhtien - decthanhtien * mdecGIAM;
return decthanhtien;
}
Khuyến kích nếu người trả đúng hẹn (đúng hẹn dựa vào Check trả đúng hẹn)
giảm thêm theo luật 3%
Gợi ý:
private void btntinh_Click(object sender, EventArgs e)
{
try
{

33
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

btnthongke.Enabled=true;
int intsluong;
decimal decdongia;
Boolean blndunghan;
if (txtmaKH.Text == "")
{
MessageBox.Show("Bạn chưa nhập dữ liệu mã", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
txtmaKH.Focus() ;
}
else if (txtsoluong.Text == "")
{
MessageBox.Show("Bạn chưa nhập dữ liệu SL", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
txtsoluong.Focus();
}
else if (txtdongia.Text == "")
{
MessageBox.Show("Bạn chưa nhập dữ liệu ĐG", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
txtdongia.Focus();
}
else
{
intsluong = Convert.ToInt32(txtsoluong.Text);
decdongia = Convert.ToDecimal(txtdongia.Text);
blndunghan = Convert.ToBoolean(chkdunghan.Checked);
lblthanhtien.Text = tinhtien(intsluong, decdongia,
blndunghan).ToString();

txtmaKH.Enabled = false;

34
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

txthoten.Enabled = false;

mdectongtien += tinhtien(intsluong, decdongia, blndunghan);


mdectongsl += intsluong;
mintlanthue += 1;
} }
catch(FormatException x )
{
MessageBox.Show(x.Message);
}
}
Nếu nhấn nút xem thống kê thì hiện thông tin tương ứng vào các ô phần thống
kê.
(hình 3)
Gợi ý
private void btnthongke_Click(object sender, EventArgs e)
{
btnthongke.Enabled = false;
lbltongtien.Text = mdectongtien.ToString();
lbltongsoluong.Text = mdectongsl.ToString();
lbltrungbinh.Text = (mdectongtien / (decimal) mintlanthue).ToString();
}

35
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Hinh 2

Hinh 1

Hinh 3

36
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 5. Vòng lặp

Thực hành bài 29 , 30, 33 . Bài 31, 32, 34,35 sinh viên về nhà làm
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 24. (TH)Nhập vào giá trị n và xuất ra dãy giá trị và tổng tương ứng của
dãy đó.
a. Mục đích: Sử dụng các properties và methods của các đối tượng trong
Windows Form. Sử dụng câu lệnh rẽ nhánh if và vòng lặp.
b. Yêu cầu:
 Thiết kế như hình
 Tính tổng và xuất ra dãy số (dùng vòng lặp for)
 Tính tổng và xuất ra dãy số (dùng vòng lặp while )
 Tính tổng và xuất ra dãy số (dùng vòng lặp do..while)
private void btnTong1_Click(object sender, EventArgs e)

37
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

{
int n=Convert.ToInt32 ( txtN.Text);
int i=1;
string strList="";
long lngTong=0;

for (i = 1; i <= n; i++)


{
lngTong+=i;
strList += i.ToString() + "+ ";
}
rtxtKQ.Text = "Tổng dãy" +
strList + "= " + lngTong;
}
private void btnTong1_Click(object
sender, EventArgs e)
{
int n=Convert.ToInt32 (
txtN.Text);
int i=1;
string strList="";
long lngTong=0;
while (i <=n)
{
lngTong+=i;
strList += i.ToString() + "+ ";
i++;
}
rtxtKQ.Text = "Tổng dãy" + strList + "= " + lngTong;
}
private void btnTong1_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(txtN.Text);

38
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

int i = 1;
string strList = "";
long lngTong = 0;
do
{
lngTong += i;
strList += i.ToString() + "+ ";
i++;

} while (i <= n);


rtxtKQ.Text = "Tổng dãy" + strList + "= " + lngTong; }

Bài 25. (TH) Nhập giá trị n, Xuất ra danh sách vào trong listbox , hiển thị ước
số và dãy Fibonaci vào trong danh sách listbox kết quả
a. Mục đích: Sử dụng các properties và methods của các đối tượng trong
Windows Form. Sử dụng câu lệnh rẽ nhánh if và vòng lặp.
b. Yêu cầu:
 Thiết kế như hình
 Tạo ProListLapHam.
 Thiất kế tạo các Taborder sao cho hợp lý.
 Nhấn nút tạo danh sách tạo ra các số dạng ngẫu nhiện rồi Add vào
ListDayso (xem hình)

39
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn dùng hàm tạo số ngẫu nhiên.


private void btnDaySo_Click(object sender, EventArgs e)
{
try
{
lstDaySo.Items.Clear();
int n, i, SoNgauNhien;
Random x = new Random();
n = Convert.ToInt32(txtn.Text);
for (i = 0; i < n; i++)
{
SoNgauNhien = x.Next(1, 21);
lstDaySo.Items.Add(SoNgauNhien);
}
}
catch
{

40
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

MessageBox.Show("Bạn chưa nhập n", "Thông báo",


MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
}
}
 Chọn một phẩn tử (Item) nào đó trong ListBox nhấn nút Ước Số thì
hiện các ước số của Item đang chọn vào ListBox kết quả Xem hình.

+ Viết Hàm
void TaoDayUocSo(ListBox lst,
int gtri)
{
int i = 1;
lst.Items.Clear();
while (i <= gt)
{
if (gtri % i == 0)
lst.Items.Add(i);
i++;
}
// ?? trong hàm có một chõ sai các bạn tự sửa
}
+ Gọi Hàm.
private void btnUocSo_Click(object sender, EventArgs e)
{
try
{
if (txtn.Text == "")
MessageBox.Show("Bạn chưa nhập n", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
else
{

41
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

TaoDayUocSo(lsttKetQua,
(int)lstDaySo.Items[lstDaySo.SelectedIndex]);
int SoLuongItem;
SoLuongItem = lsttKetQua.Items.Count;
grp.Text = "Số " +
lstDaySo.Items[lstDaySo.SelectedIndex].ToString() + " có " +
SoLuongItem.ToString() + " ước số";
}
}
catch
{
MessageBox.Show("Bạn chưa chọn list", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
}
}
 Chọn một phẩn tử (Item) nào đó trong ListBox nhấn nút Fibonaci thì
hiện dãy số Fibonaci sao cho các số Fibonaci = Item đang chọn vào ListBox kết
quả Xem hình

42
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Chọn Item trong danh sách nấn nút xóa hiện thông báo xác nhận lại
Item đang chọn có hai nút Yes/ No nếu nhấn Yes thì xóa và ngược lại cho nút No
xem hình

 Nhấn nút Clear All xóa tất cả các item về trạng thái ban đầu khi
formload.
 Nhấn thóat hiện thông báo xác định lại có thoát hay không. Hướng dẫ
vào sự kiện của FormClosing gõ
private void frmListBox_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dlgHoiXoa;
dlgHoiXoa = MessageBox.Show(this, "Bạn Có Chắc thoát? ",
"Thông Báo",MessageBoxButtons.YesNo , MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1 );
if (dlgHoiXoa == DialogResult.No )

43
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

e.Cancel =true; }

 Hãy tạo thêm các cách thực hiện bằn phím khi nhấn Alt + ký thự gạch
chân.

44
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 26. (TH)Giải phương trình bậc nhất và bậc hai


a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form.
Sử dụng câu lệnh rẽ nhánh if
b. Yêu cầu:
Giả sử chỉ nhập
 Thiết kết form như sau. số, có thể âm

 Thiết kế và hiệu chỉnh TabIndex cho hợp lý ví dụ xem hình.

45
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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


 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.
 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
}
 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)
 Nhấn nút giải
Hướng dẫn các giải.
AX2+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

46
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

PTVo nghiệm
 Nếu đúng các hệ số thì giải và đưa kết quả tương ứng ra Xem hình

 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;

47
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

}
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

48
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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();

49
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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();

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


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

50
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 27. (TH) Viết chương trình cho trò chơi số 7 may mắn.
a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form.
Sử dụng câu lệnh rẽ nhánh if và đối tượng timer.
b. Yêu cầu
 Thết kế giao diện xem
hình.
 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 .
 Mỗi lần quay số
 Ngườ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)
 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]
 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;

51
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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).
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);

52
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Để 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();

53
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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();

54
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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;

55
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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)
{

56
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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:

57
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 28. Nhập vào số năm, xuất ra năm tương ứng như hình
a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form.
Sử dụng câu lệnh rẽ nhánh switch case.
b. Yêu cầu
 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 Dinh Mau Ky
Chi Than Dau Tuat Hoi Ti Suu Dan Meo Thin Ty Ngo Mui

 Nhấn nút xem thì hiện năm tương ứng qua các con giáp xem hình

58
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn code


Nhận thấy quy luật.
Can = Năm %10 lấy dư
Chi= Năm %12 lấy dư
Canchi tương ứng = Can + chi dò bảng can chi
lblKQ.Text = LayCan(intso) + " " + LayChi(intso);
Gợi ý hàm:
string LayChi(int intNam)
{
Sinh vien dung switch
}
string LayCan(int intNam)
{
Sinh vien dung switch
}

 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;
…..
}
 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;

59
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Nhấn phím Enter tương đương nhấn nút xem và phím Esc tương đương nút
thóat
 Hệ thống menu tương ứng các chức năng trên form.
 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);

60
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 29. (TH)Viết chương trình nhập vào N ,xuất ra cac giá trị tổng như trong hình
a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form.
Sử dụng câu lệnh rẽ nhánh if , vòng lặp kết hợp hàm.
b. Yêu cầu
 Thiết kế giao diện.
 Viết tất cả các hàm tính tổng
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 cú nút lệnh 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();
}
long = TongWhile (int n)
{
Sinh viên tự viết hàm tổng
}
long TongTich(int n)
{
61
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Sinh viên tự viết hàm tổng //TT = TT + i*(i+1);}

private void btnTinh1_Click(object sender, EventArgs e)


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

private void btnTinh2_Click(object sender, EventArgs e)


{
n = Convert.ToInt32(txtN.Text);
lblKQ.Text = Convert.ToString((double) (TongTich(n) * TongTich(n) )/
(double) TongWhile (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";
}
Boolean KiemTraSNTo(int n )
{
sinh viên tự viết hàm này
}

62
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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++;

63
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 30. (TH)Bán vé rạp chiếu bóng


a. Mục đích:
Nạp đối tượng động. Quản lý và sử dụng các đối tượng động.
b. Yêu cầu
 Thiết kế giao diện.
 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.

flowLayoutP
anel1

64
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn code


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();
}
}

65
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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);
}

66
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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;
} }

67
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Hình khi chọn

Khi chọn

68
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 6. Listbox va combobox

Thực hành bài 36 . Bài 37 đến 69 sinh viên tự làm


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 31. (TH)Viết chương trình nhập danh sách của 2 lớp như hình
a. Mục đích:
Sử dụng các properties và methods của các đối tượng trong Windows Form kết hợp
listbox, vòng lặp và hàm.
b. Yêu cầu:
 Thiết kế form như hình
 Thiất kế tạo các TabOrder sao cho hợp lý.
 Khi Form vừa chạy lên (load).
 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)
 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

69
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Chọn nhiều đổi


SelectionMode
=
MultiExtended

70
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

c. Hướng dẫn viết code


lstLopB.Items.Add("Nguyễn Hoài Nam");
lstLopB.Items.Add("Tăng Hồng Phú");
lstLopB.Items.Add("Hồ Ngọc Lan");
Combobox có 2 lớo A, B nhưng Lớp B
được chọn mặc định
Có thể AddItem trong lúc design hoặc trong sự kiện formload. Giả sử Item trong
Combobox lớp có thứ thự
Để hiện lớp B trước ta làm => cboLop.SelectedIndex = 1;

 Nhấn nút cập nhật đưa thông tin Sinh


Vị Trí Giá Tri
Viên vừa nhập vào danh sách lớp. Đưa vào danh
(Index) (Value)
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 0 Lớp A
cài bẫy lỗi thông báo và hướng dẫn cho người sử 1 Lớp B
dụng biết.Xem hình

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);
}
}

 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.

71
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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)
{
// viết nội dụng hàom vào đây if (lstchuyen.GetSelected(i) ==
true)
}
private void btnBToA_Click(object sender, EventArgs e)
{
ChuyenSinhVien(lstLopB, lstLopA);
}

72
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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 “<”.

 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);
}

73
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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
}
 Thiết kế thêm Menu và viết lệnh cho các chức năng (xem hình)

74
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Viế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).


1) Đế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.

75
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài tập sinh viên tự làm


- Lệnh và khối lệnh, Toán tử so sánh (>=, <=, =), Toán tử logic (&, |, !), Cấu
trúc if…, if…else…, Cấu trúc switch …
case…
Bài 32. Viết chương trình nhập vào số
thực x. Hãy tính:

  8 x 3  12 x  1 Khi x  2

y  f ( x)  x 2  6 x  19 Khi 1  x  2
 7x Khi x  1

Kết quả xuất ra TextBox f.

Bài 33. Viết chương trình nhập vào tháng của một năm. Cho biết tháng đó
thuộc mùa nào trong năm.

Bài 34. Giải hệ phương trình:


 ax  by  c
 Các hệ số a, b, c, d, e, f
dx  ey  f
nhập từ bàn phím. Yêu cầu xét tất cả
trường hợp có thể.

76
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 35. Viết chương trình nhập vào ngày, tháng kiểm tra xem ngày tháng đó
có hợp lệ không?
Các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày.Các tháng 4, 6, 9, 11 có 30 ngày.Tháng
2 có 28 ngày.

Nếu ngày nhập Nếu ngày nhập


vào hợp lệ thì vào KHÔNG hợp
xuất hiện thông lệ thì xuất hiện
báo: thông báo:

Bài 36. Viết chương trình tìm số lớn nhất, nhỏ nhất và nhỏ nhì trong 3 số thực
a, b, c.

77
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 37. Tương tự như bài 3.5, với 4 số thực a, b, c, d. Tìm số lớn nhất, nhỏ
nhất, nhỏ nhì, lớn nhì.

Bài 38. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0

78
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 39. Viết chương nhập vào một ngày (ngày, tháng, năm). Hãy cho biết ngày
tiếp theo (ngày, tháng, năm). Ghi chú: Năm có thể là năm thường hoặc năm nhuận.
Ví dụ: Nhập: 1/2/2008 => Ngày tiếp theo: 2/2/2008
- Nhập: 31/1/2008 => Ngày tiếp theo: 1/2/2008
- Nhập: 31/12/2008 => Ngày tiếp theo: 1/1/2009 ….

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

79
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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

Bài 42. 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.

80
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 43. Thiết kế Form mở rộng từ Bài tập số 47, thêm các chức năng như: Căn
bậc hai của một số; Phép toán 1/x...

KIẾN THỨC CƠ BẢN:


- Cú pháp của for, while, do…while…
- Hoạt động của for, while, do…while…
Bài 44. Bài tập (*):
Mục đích: Nạp động nhiều đối tượng lúc run-time. Quản lý các đối tượng mới tạo
thông qua Collection Controls Lập trình biến cố trên các đối tượng nạp động lúc run-time
Mô tả: Viết chương trình nạp động các đối tượng như sau. Khi chương trình vừa khởi
động, giao diện chương trình chứa textbox dùng để nhập số phần tử n
Khi người sử dụng bấm OK
(chương trình phải kiểm tra số nhập có
hợp lệ hay không-là số nguyên dương),
chương trình sẽ tự động tạo n button
động vào như hình dưới, với giá trị text
là ngẫu nhiên từ 2..100. +Nút “Chọn số
chẵn”: các button chứa số chẵn sẽ đổi
màu chữ thành màu đỏ. Các button còn
lại màu chữ vẫn màu đen. +Nút “Chọn
số lẻ”: các button chứa số lẻ sẽ đổi
màu chữ thành màu đỏ. Các button còn
lại màu chữ vẫn màu đen. +Nút xóa tất
cả: chương trình sẽ xóa tất cả button
vừa tạo và đưa chương trình về trạng
thái ban đầu. +Khi người sử dụng click
vào một button chứa số: chương trình
sẽ hiện thông báo cho biết số đó phải là số nguyên tố hay không? Đồng thời button này sẽ
bị mờ, không cho bấm lần thứ 2

Gợi ý: Sử dụng FlowLayoutPanel để chứa các đối tượng nạp động lúc run-
time, với thuộc tính AutoScroll=True. Dùng vòng lặp for each để duyệt qua
collection Controls của FlowLayoutPanel. Viết hàm kiểm tra số nguyên tố

81
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Viết chương trình nhập vào số nguyên n. (áp dụng từ Bài 49 đến Bài 62)

Hãy tính:

82
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 45. S = 1 + 2 + 3 + ... + n


Bài 46. S = 12 + 22 + 32 + ...+ n2
𝟏 𝟏 𝟏
Bài 47. 𝑺= 𝟏+ + + ⋯+
𝟐 𝟑 𝒏
Bài 48. S = 1 + 3 + 5 + ... + (2n-1) + (2n+1)
Bài 49. S = 2 + 4 + 6 + ... + (2n-2) + 2n
𝟏 𝟏 𝟏
Bài 50. 𝑺= 𝟏+ + + ⋯+
𝟑 𝟓 𝟐𝒏−𝟏
Bài 51. S = n! = 1*2*3*...*(n-1)*n
𝟏 𝟏 𝟏 𝟏 𝟏
Bài 52. 𝑺= 𝟏− + − …+ −
𝟐 𝟑 𝟒 𝟐𝒏+𝟏 𝟐𝒏+𝟐
𝟏 𝟐 𝟑 𝒏
Bài 53. 𝑺= + + + ⋯+
𝟐 𝟑 𝟒 𝒏+𝟏
𝟏 𝟏 𝟏 𝟏
Bài 54. 𝑺= + + + ⋯+
𝟏𝒙𝟐 𝟐𝒙𝟑 𝟑𝒙𝟒 𝒏 𝒙 (𝒏+𝟏)
𝟏 𝟑 𝟓 𝟐𝒏+𝟏
Bài 55. 𝑺= + + + ⋯+
𝟐 𝟒 𝟔 𝟐𝒏+𝟐

Bài 56. 𝑺 = √𝟏 + √𝟐 + ⋯ + √(𝒏 − 𝟏) + √𝒏

Bài 57. 𝑺 = √𝒏 + √(𝒏 − 𝟏) + ⋯ + √𝟐 + √𝟏

Bài 58. Viết chương trình nhập vào tuổi cha và tuổi con hiện tại. (tuổi cha > 2 lần
tuổi con). Hỏi sau bao nhiêu năm nữa tuổi cha bằng 2 lần tuổi con.

83
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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

Bài 60. 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

84
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 61. Viết một chương trình theo yêu cầu thiết kế sau

Bài 62. Viết chương trình Đổi năm dương lịch qua năm âm lịch, giao diện như
sau
Năm MOD 10 = 0…9: Canh - Tân – Nhâm –
Quý – Giáp – Ất – Bính – Đinh – Mậu - Kỷ
Năm MOD 12 = 0…11: Thân – Dậu – Tuất – Hợi –
Tý – Sửu – Dần – Mẹo – Thìn – Tỵ – Ngọ – Mùi

Bài 63.
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ã.

85
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 64. (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.

86
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 7. Vòng lặp , listbox và combobox

Thực hành bài 70. Bài 71 và 72 sinh viên về nhà làm


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 65. (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 đó.

87
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 66. (Listbox) Viết chương trình nhập danh sách và quản lý ca học sinh
viên, giao diện như sau:

Yêu cầu:
- Các ListBox được phép chọn nhiều mục (kết hợp giữa phím Shift, Control và
chuột)
- Các nút btnQua2 và btnQua1 khi được Click sẽ sao chép tất cả các mục đang chọn
sang ListBox bên kia tương ứng, sau đó xóa các mục đang chọn đi
- Các nút btnChuyenQ2 và btnChuyenQ1 khi được Click sẽ chuyển cả các mục
ListBox bên kia tương ứng sau đó xoá sạch đi.
- Nút lệnh Xóa cho phép xóa các mục đang chọn trong list hiện hành
- Nếu nhấn nút Cập nhật thì kiểm tra đã nhập tên sinh viên chưa, nếu chưa thì thông
báo cho user nhập vào, nếu đã đủ thông tin thì tùy thuộc vào combo box là nhóm một hay
nhóm hai mà add vào list tương ứng.
- Hai label phía dưới list box luôn luôn thể hiện đúng trong mỗi list có bao nhiêu
phần tử.

88
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 67. (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.

89
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 5
MẢNG

Nội dung kiến thức thực hành:


- Nắm vững cấu trúc if, vòng lặp và các control
- Sử dụng các properties và methods của mảng và tích hợp kiến thức
tổng hợp.

Bài 68. (LT) Viết chương trình nhập vào giá trị của mảng và xuất kết qủa vào
trong label kết quả. Thực hiện các chức năng của mảng tương ứng với các button
RichTexBox
(Readonly=tr
ue)

a. Mục đích:
Sử dụng các Properties và methods các control, mảng một chiều
b. Yêu cầu :
 Khóa các button mờ (xem hình 2)
 Nhấn button nhập mảng mới thì hiển thị from nhập liệu như trong
hình 1 và nhập giá trị n và đồng thể random n phần tử mảng A vào trong
Richtextbox mảng gốc
90
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 form nhập liệu sinh viên tự hiệu chỉnh các properties của form cho phù
hợp:
 Thực hiện các button hiển thị vào trong Richtextbox kết quả

c. Hướng dẫn code


int[] mA ;
private void frmMang_Load(object sender, EventArgs e)
{

KhoaHieuLucButton(false);
}

- Khóa và ẩn các button


void KhoaHieuLucButton(Boolean
Giatri)
{ Hình 1
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; Hình 2
btnxoa.Enabled = Giatri;
}

91
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

- 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(); //gọi from nhập liệu
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);
}
}

92
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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++;
}
}

 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)

93
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

{
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;
}

 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)

94
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

{
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);
}

- 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;

95
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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 );
}

 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);
}

96
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Cá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);
}

97
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 69. (LT) Viết chương trình nhập mảng chuỗi xuất ra tên ngẫu nhiên họ tên
như bài gợi ý. Thực hiện các chức năng tương ứng như form thiết kế.
a. Mục đích:
Sử dụng các properties và methods của mảng, string , stringBuilder và tích hợp kiến
thức tổng hợp.
b. Yêu cầu:
 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" };

98
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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.
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;
}
 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");
}

99
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

}
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);
}
}

100
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 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")
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++;
}

101
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

return dem; }
 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;
}

102
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Đổ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";
}
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;
}

103
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Đổ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;
}

104
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

 Đổ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";
}
 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";
}
 Nút clser
private void btnclear_Click(object sender, EventArgs e)
{
groupBox1.Text = "Danh sách SV:";
lst.Items.Clear();
KhoaButton(false);
}

105
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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];
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;
}

106
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

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;
}

107
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 8. Mảng một chiều

Thực hành bài 73. Bài 74 sinh viên về nhà làm


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 70. (TH) Viết chương trình nhập vào số phần tử n và hiển thị mảng được
tạo ngẫu nhiên trong [-100 ..100]vào trong RichTextbox mảng gốc. Thực hiện các yêu
cầu như thiết kế form dưới đây

1 2

4 5 6

7 8 9

10

11

12

108
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 71. (TH) Viết chương trình nhập vào số phần tử n và hiển thị mảng được
tạo ngẫu nhiên trong [-100 ..100]vào trong RichTextbox mảng gốc. Thực hiện các yêu
cầu như thiết kế form dưới đây

13 20
14 21
15 22
16 23
17 24
18 25
19 26

Bài 72. (Array) Viết chương trình với các chức năng được trình bày trên Form
như sau:
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. 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.

109
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 73. (Array)


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.

110
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 6
GIAO DIỆN NÂNG CAO

Bài tập về Treeview và Listview


Tuần 9. Treeview

Thực hành bài 79 và 80.


Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 74. (LT)Thiết kế chương trình theo Form sau:


a. Mục đích
Làm quen với đôi tượng Treeview
b. Yêu cầu
 Thiết kế form như hình.
 Thiết kế theo màn hình trên 1 Treeview, 1
imagelist, 1Textbox, 2button
 Thiết lập các thuộc tính cho từng đối tượng

111
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Đối tượng Thuộc tính Giá trị


Form Name frmTreeview
Text TreeViews
TextBox Text
Treeview Name tvwSV
ImageList Name ilsSmall
Button1 Text AddRoot
Name btnRoot
Button2 Text AddChild
Name btnChild

 Khi bấm nút AddRoot thì thêm vào nút Root của Treeview
 Khi bấm nút AddChild thì thêm vào trong nút con cuả nút được chọn
c. Hướng dẫn code
//Tạo nút Root
private void btnRoot_Click(object sender, System.EventArgs e)
{
TreeNode NodeObj = new TreeNode();
NodeObj.Text = txtNode.Text;
tvwSV.Nodes.Add(NodeObj); }
//Tạo nút con
private void btnChild_Click(object sender, System.EventArgs e)
{
TreeNode ChildNodeObj = new TreeNode();
ChildNodeObj.Text = txtNode.Text;
if (tvwSV.SelectedNode != null)
{
tvwSV.SelectedNode.Nodes.Add(ChildNodeObj);
}
}

112
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 8 : Thiết kế chương trình theo Form sau:


a. Mục đích
Làm quen với đôi tượng TreeView và
ImageList
b. Yêu cầu
 Thiết kế form như hình.Thiết kế theo
màn hình trên 1 TreeView, 1 Imagelist
 Thiết lập các thuộc tính cho từng đối
tượng
Đối tượng Thuộc tính Giá trị
Form Name frmTreeview
Text Bai
Treeview Name tvwBai
ImageList1 Name ImageList1

 Viết trong sự kiện frmTreeview_Load()


 Tạo các nút cấp 1 : Class, Numbers, Chars
 Tạo các nút con của nút cấp 1 như sau:
i. Nút Class : có nút con (“+”,”-“, “*”, “\”)
ii. Nút Number : có nút con từ số 1 đến số 50
iii. Nút Chars : có nút con từ “A” đến “Z”

c. Hướng dẫn code


private void Bai1_Load(object sender, System.EventArgs e)
{
tvwBai.ImageList = ImageList1;
//Tao Nut "Class"
TreeNode t = tvwBai.Nodes.Add("Class");
//Tao cac nut con cua Class
t.ImageIndex = 0;
t.SelectedImageIndex = 0;

t.Nodes.Add("+");
t.Nodes.Add("-");

113
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

t.Nodes.Add("*");
t.Nodes.Add("/");

//Tao Nut "Numbers" cung cap voi Class


t = tvwBai.Nodes.Add("Numbers");
t.ImageIndex = 1;
t.SelectedImageIndex = 4;
//Tao cac nut con cua Numbers
for (int i = 1; i <= 50; i++)
{
TreeNode x ;
x= t.Nodes.Add(i.ToString());
x.ImageIndex = 2;
x.SelectedImageIndex = 4;
}

//Tao Nut "Chars" cung cap voi Class


t = tvwBai.Nodes.Add("Chars");
t.ImageIndex = 2;
t.SelectedImageIndex = 4;
//Tao cac nut con cua Char

for (int i = System.Convert.ToInt32('A'); i <=


System.Convert.ToInt32('Z'); i++)
{
string c;
c = char.ConvertFromUtf32(i);
TreeNode x = t.Nodes.Add(c);
x.ImageIndex = 3;
x.SelectedImageIndex = 4;
}

114
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 75. (TH) Thiết kế như hình sau:


a. Mục đích
Làm quen với đôi tượng Treeview, Listbox và ImageList
b. Yêu cầu
 Thiết kế theo màn hình trên 1 TreeView, 1Listbox, 1 Imagelist
 Thiết lập các thuộc tính cho từng đối tượng

Đối tượng Thuộc tính Giá trị


Form Name frmListView
Text Nhân viên công ty IBM
Treeview Name tvwCongtyIBM
ImageList1 Name ilsTreeView

 Viết sự kiện Afterselect cuả TreeView


i. Khi Click vào nút CtyIBM
thì hiển thị vào listbox như sau
Công ty IBM bao gồm:
Phòng kế toán
Phòng kinh doanh
Phòng bảo vệ
ii. Khi click vào Phòng kế toán
thì hiển thị con cuả nút đó vào
trong listbox
“Nhân viên cuả phòng kế
toán:
Lý thông
Lý Đức”

iii. Khi Click vào tên từng nhân viên thì hiển thị vào trong list box như sau:
“Xin chào nhân viên Lý thông”

115
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 10. Listview


Thực hành bài 81 và 85.
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 76. (TH) Thiết kế như hình sau:


a. Mục đích
Làm quen với đôi tượng Treeview
b. Yêu cầu
 Thiết kế theo màn hình trên 1 TreeView, 1 Imagelist, 2TextBox, 4button,
1CheckBox
 Thiết lập các thuộc tính cho từng đối tượng
Đối tượng Thuộc Giá trị
tính
Form Name frmBai5
Text frmBai5
Treeview Name tvwDanhsach
ImageList1 Name ilsTreeView
Textbox1 Name txtNode
TextBox2 Name txtIndex
Button1 Name btnAdd
Text Add
Button2 Name btnIndex
Text AddIndex

116
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Button3 Name btnClear


Text Clear
Button4 Name btnRemove
Text Remove
Checkbox Name chkSelect
Text Tạo trong
selected node

 Khi nhấn nút “Add” thì thêm vào trong treeview( Kiểm tra nếu checkbox
được chọn thì thêm vào trong nút con còn ngược lại thì thêm vào nút cha )
 Nếu chọn nút “AddIndex” thì thêm vào tại vị trí index được chọn
 Chọn nút “Clear ” thì xóa các textbox
 Bấm nút “Remove” thì xóa nút được chọn

117
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 77. (LT)Thiết kế form main như sau :

a. Mục đích
Làm quen với đôi tượng listview, listview
b. Yêu cầu
 Thiết kế theo màn hình trên 2label,2textbox, 3button, 1listview, 1listbox,
2groupbox
 Thiết lập các thuộc tính cho từng đối tượng

Đối tượng Thuộc tính Giá trị


form Name frmHoaDon
Text Hoá đơn bán hàng
Label1 Text Tên Khách hàng
Label2 Text Thành tiền
Button1 Text Tính tiền
Name btnTinhtien
Button2 Text >
Name btnChonMonAn
Button3 Text <
Name btnHuyMonAn
GroupBox1 Text Thục đơn
GroupBox2 Text Khẩu phần
ListView Name lvwThucdon
ListBox Name lstKhauphan

118
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 78. (LT)Thiết kế chương trình theo Form sau:


a. Mục đích
Làm quen với đôi tượng
ListView
b. Yêu cầu
 Thiết kế theo màn
hình trên 1 Listview, 3Label,
3Textbox, 3 button
 Thiết lập các thuộc
tính cho từng đối tượng
 Bấm nút “Cập nhật”
thì thêm vào trong listview Hoten,Lop,Đia chỉ
 Bấm nút “Xoá Text ” thì xoá các textbox
 Bấm nút “Xóa node” thì xóa dòng đuợc chọn

Đối tượng Thuộc tính Giá trị


Form Name frmListView
Text Nhập danh sách học sinh
Label1 Text Họ tên
Label2 Text Lớp
Label3 Text Điạ chỉ
TextBox1 Name txtHTen
TextBox2 Name txtLop
TextBox3 Name txtDC
Listview Name lvwDanhsach
Button1 Text Cập nhật
Name btnCapNhat
Button2 Text Xoá Text
Name btnXoatext
Button2 Text Xoá Node
Name btnXoaNode

119
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 79. (TH) Thiết kế chương trình theo Form sau:


a. Mục đích
Làm quen với đôi tượng
Listview
b. Yêu cầu
 Thiết kế theo màn
hình trên 1 ListView, 1
lable, 1TextBox
 Thiết lập các
thuộc tính cho từng đối
tượng
 Khi người sử dụng
gõ từng ký tự trên textbox
thì nhảy đến vị trí tên trong
danh sách

Đối tượng Thuộc tính Giá trị


Form Name frmBai3
Text frmListview
Listview Name lsvDanhsach
Label Text Tìm tên
Textbox Name txtTen

120
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 80. (TH) Thiết kế như hình sau:


a. Mục đích
Làm quen với đôi tượng Treeview,
Listview và ImageList
b. Yêu cầu
 Thiết kế theo màn hình trên 1
TreeView, 1Listbox, 1 Imagelist ,4Label,
4Textbox, 3button
 Thiết lập các thuộc tính cho từng
đối tượng
 Khi click vào nút Xoá text thì xoá
toàn bộ
 Khi click vào nút Xoá Node thì xóa nút đang chọn
 Khi click vào nút cập nhật thì kiểm tra xem.Nếu nút được chọn là True thì
thêm vào nút được chọn ngược lại thì thêm vào nút hiện tại ( MaSV, Hoten,Lop,Dc )
 Khi Click vào nút đang chọn thì hiển thị toàn bộ sinh viên chọn vào trong
Listview
Đối tượng Thuộc tính Giá trị
Form Name frmTreeListView
Text Tree List View
Treeview Name tvwSV
ImageList1 Name ilsTreeView
Listview Name lvwListView
Label1 Text Mã sinh viên
Label2 Text Họ tên
Label3 Text Lớp
Label2 Text Điạ chỉ
Textbox1 Name txtMasv
Textbox2 Name txtHoten
Textbox3 Name txtLop
Textbox4 Name txtDC
Button text Cập nhật
Name btnCapnhat

121
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Button Text Xóa Text


Name btnXoatext
Button Text Xóa Node
Name btnXoaNode
Checkbox Text Tạo nút trong selected
Name chkSelected

Tuần 11. Treeview và listview


Thực hành bài 86.
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm
việc (1đ):
5. Thời gian (1đ):

Bài 81. * Giao diện nâng cao và Treeview, Listview (sinh viên tự làm nộp cộng
điểm)
a. Mục đích:
Sử dụng thuộc tính và phương thức của control nâng cao để tạo giao diện làm bước
đệm cho chương kế tiếp móc nối CSDL.
b. Yêu cầu
1. Tạo formmain theo các bước sau:

122
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Khi nhấn OK thì chương trình tao ra một Form mặc định sinh viên hãy xóa form
mặc định và thêm một Form mới từ menu Project/Add windows form. Và đặt tên như
sau:

123
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

2. Kế tiếp sinh viên cho chạy Form frmmain lên trước bằng cách: vào menu
Project / ChuongTrinhNhieuFormProperties và chỉnh lai thông số StartupForm:
frmMain

3. Tiếp tục tạo 3 form con là frmTreeview, frmListview và frmListVaTree. Ba


Form con vẫn còn trống chưa có thết kế gì.
Quay lại form frmMain thiết kế như như hình sau:

124
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

4. Viết lệnh cho


menu và các Button
trên Toolbar tương
ứng ý nghĩa. Ví dụ:
Menu File/Open/
tree view thì mở Form
Tree view lên.
5. Chạy thử
chương trình với các
lệnh tương ứng trên
form Main.
6. Thiết kế các
Form con Treeview
như sau.

Yêu cầu:
+ Combobox Lớp có hai hoặc 3 lớp được đưa vào trong lúc runtime, mặc định lớp
thứ 2 trong Combobox được chọn trước.
+ contextMenustrip là của Treeview
+ IlsTree là Imagelist cho Treeview chứa 2 hình thể hiện hai trạng thái chọn và
không chọn của Node.
+ Nhấn nút Cập nhật là phải cài bẫy lỗi kiểm tra thông tin nhập đúng đủ trên form
rồi đưa vào Treeview theo nguyên tắc: mã sinh viên là node gốc các thông tin khác là
node con.
+ Nhấn node Tạo mới xóa các thông tin cho phép nhập thông tin một sinh viên mới.
+ Nhấn node thoát hiện thông báo xác nhận thông tin có muốn thóat không.
+ viết lệnh cho contextMenustrip

125
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

7. Viết lệnh cho các Form Listview dựa theo kỹ năng đã học trong giờ lý thuyết.

Yêu cầu:
+ Thông tin Sinh Viên không thiết kế mà copy từ form Treeview qua.
+ ilsNho là Imagelist có kìch thước mặc định 16 x 16 phục vụ cho ListView
+ ilsLon là Imagelist có kìch thước mặc 48 x 48 phục vụ cho ListView
+ contextMenustrip như hình khi Right click trên Listview thì hiện ra.

126
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

+ Nhấn nút Cập nhật Item thì đưa thông tin sinh viên vào Listview theo nguyên tắc
dựa theo hình.
+ Nhấn nút Xóa item là xóa item đang chọn trên Liatview ( có thể chọn nhiều),
nhưng phải cài bẫy lỗi xác nhận lại tình trạng xóa.
- Xác nhận đã chọn Item nào chưa
- Xác nhận có chắc xóa không.
+ Nhấn nút thêm mới thì xóa thông tin sinh viên cho phép nhập thông tin Sinh Viên
mới.
+ Nếu chọn một Sinh Viên nào trong Listview thì hiện lại thông tin Sinh Viên đó
lên các Texbox tương ứng đễ cho phép người sử dụng có thể thay đổi chỉnh sửa thông tin
phục vụ cho lệnh Update trong contexMenustrip.
+ Viết lệnh tương ứng phù hợp cho các chức năng trong contexMenustrip.

127
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

8) Viết lệnh cho Form Tree và Listview kết hợp dựa theo yêu cầu đã học trong giờ
lý thuyết.

Yêu cầu:
+ Các thông tin chung như các form đã làm các bài trước .
+ Nhấn nút cập nhật đưa thông tin vào Treeview theo nguyên tắc
- Node gốc là mã Sinh Viên
- Node con là các thông tin còn lại của Sinh Viên.
+ Khi right click trên TreeView thì hiện contextMenustrip.
- Nếu nhấn Duyệt Node thì hiện thông tin của Node đang chọn qua
Listview
- Nếu Nhấn Duyệt All thì duyệt tòan bộ thông tin của Treeview qua
Listview..
+ Viết lệnh cho contextMenustrip tương ứng

128
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

8) Chạy chương trình vào Menu của form main cố tình nhấn hai lần vào menu cho
phép mở formcon. Nếu đúng thì hiện thị 2 lần form con.
9) Khắc phục form chỉ hiện lên một lần.
- Nếu form con chưa mở mà nhấn nút mở form con thì hiện form con
- Nếu form con đã mở mà cố tình nhấn nút mở form con thì Active form con
không hiện thêm form con nữa.
10) Chạy lại chương trình thử các tác vụ chức năng.
11) Thêm form About

129
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

progressBar

Yêu cầu:
+ Chỉnh sửa thông tin trong form About cho phù hợp
+ Thuộc tính Maximum của Progressbar là 500
+ Khi form hiện lên Progress tự động chạy nếu value của progressbar chạy tới vị trí
Maximum thì tự động đóng form About và hiện form Main
+ Nhấn nút OK đóng form About và hiện form Main

12 ) Hiệu chỉnh khi ứng dụng chạy lên form About chạy trước
Gợi ý :
Vào menu Project/Add Module…
 Program như sau:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
frmAbout frm = new frmAbout();
if (frm.ShowDialog() == DialogResult.OK)
{

130
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Application.Run(new frmMain());
}

Gợi ý form About:

private void okButton_Click(object sender, EventArgs e)


{
timer1.Stop();
timer1.Enabled = false;
progressBar1.Value = progressBar1.Maximum;
this.DialogResult = DialogResult.OK;
}
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Value += 10;
if (progressBar1.Value >= progressBar1.Maximum)
{
timer1.Stop();
timer1.Enabled = false;
this.DialogResult = DialogResult.OK;
}
}

131
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

CHƯƠNG 7
FILE

Bài 82. (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.

132
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 83. (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.

133
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 84. (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
Tuần 12. Mở và lưu file
Thực hành bài 90.
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :

134
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 85. (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

135
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Tuần 13. Lưu file


Thực hành bài 91.
Họ và tên học sinh:
Ngày:
Thời gian thực hiện: 2.25h
Điểm: Lời phê của giáo viên
1. Kỹ thuật (6đ) :
2. Thao tác (1đ) :
3. An toàn (1đ):
4. Tổ chức nơi làm việc (1đ):
5. Thời gian (1đ):

Bài 86. Thiết kế Form kê khai sơ yếu lý lịch của một Sinh viên(sv tự làm)

136
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 87. Viết chương trình theo giao diện và thực hiện các yêu cầu sau (sv tự
làm)

 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)

137
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 88. Viết chương trình quay số may mắn. (sv tự làm)

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.

138
Hướng dẫn và bài tập thực hành Lập Trình WinCB GV:Trần Thị Ngọc Châu

Bài 89. (sv tự làm)Thiết kế Form cho màn hình soạn thảo của NotePad

Bài 90.
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.

139

You might also like