bai tap hp2 mon 1

106
TRUNG TÂM TIN HỌC – ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 227 Nguyễn Văn Cừ - Quận 5- Tp.Hồ Chí Minh Tel: 8351056 – Fax 8324466 – Email: [email protected] Mã tài liệu: DT_NCM_HP2_BT_LTHDTC# Phiên bản 5 – Tháng 1/2015 BÀI TẬP CHƢƠNG TRÌNH KỸ THUẬT VIÊN NGÀNH LẬP TRÌNH Học phần 2 --- NỀN TẢNG VÀ LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG VỚI C# 5.0

Upload: independent

Post on 14-Nov-2023

1 views

Category:

Documents


0 download

TRANSCRIPT

TRUNG TÂM TIN HỌC – ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM

227 Nguyễn Văn Cừ - Quận 5- Tp.Hồ Chí Minh

Tel: 8351056 – Fax 8324466 – Email: [email protected]

Mã tài liệu: DT_NCM_HP2_BT_LTHDTC# Phiên bản 5 – Tháng 1/2015

BÀI TẬP

CHƢƠNG TRÌNH

KỸ THUẬT VIÊN

NGÀNH LẬP TRÌNH

Học phần 2

---

NỀN TẢNG VÀ LẬP

TRÌNH HƢỚNG ĐỐI

TƢỢNG VỚI C# 5.0

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 2/106

BÀI 1: Tổng quan

Thực hành một số thao tác cơ bản trong môi trường C# và ứng dụng dạng Windows

Application.

Các thao tác cơ bản trên Project

Cách thực thi một ứng dụng

Sử dụng trong lập trình:

- Tên của thể hiện: thTenTheHien

- Tên của xử lý: xlTenXuLy

- Tên biến: Viết thường ký tự đầu của từ đầu tiên, các từ sau viết hoa đầu từ (Ví dụ: chieuDai,

dienTich), viết thường nếu có một từ (Ví dụ: dai, rong, s, p)

- Tên hằng: Viết hoa tất cả các ký tự, các từ cách nhau bằng dấu gạch „_‟ (Ví dụ: PI, TY_GIA)

- Tên Hàm,Class,Object: Viết hoa ký tự đầu tiên của tất cả các từ (Ví dụ: SinhVien, ContactBook)

Quy ƣớc viết tắt các điều khiển - prefix (chung):

- form: frm (Ví dụ: frmDangNhap)

- combobox, dropdown, listbox: cbo

- checkbox: chk

- image: img

- lable: lbl

- list/menu: lst/mnu

- textfield/textArea : txt

- button: btn

- radio button: rdo

1.1. Làm quen môi trƣờng phát triển ứng dụng

Yêu cầu: Tạo Project, tổ chức cây thư mục

Thực hiện các thao tác: tạo, thêm, xoá các đối tượng

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 3/106

Hình 1: Tổ chức thư mục trong project

Hƣớng dẫn sử dụng:

Không có

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

Không có

Nhập

Không có

Xuất

Không có

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Tạo một ứng dụng dạng Windows Forms Application có tên BaiTap lưu tại thư mục làm việc

Lần lượt tạo các thư mục dùng để lưu trữ bài tập (hình 1)

Thực hiện thêm và xóa một đối tượng trong ứng dụng (Trên cửa sổ Solution Explorer, nhấn chuột phải trên Project chọn Add để thêm một đối tượng, nhấn chuột phải trên đối tượng cần xóa và chọn Delete)

1.2. Màn hình chào 1

Yêu cầu: Xây dựng form xuất câu chào

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 4/106

Hình 1: Màn hình chào 1

Hƣớng dẫn sử dụng:

Thực thi ứng dụng :nhấn phím F5 (DEBUG/Start Debugging) hoặc click Start.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thManHinhChao1: form (name = frm01Chao.cs)

Text: Trung tâm tin học ĐH KHTN

Các thể hiện phía dưới đều nằm trên form

thLoiChao: Label (hiển thị)

Nhập

Không có

Xuất

Không có

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Nhập thuộc tính Text của Label

Mở cửa sổ thuộc tính và thay đổi Font (font chữ) , ForeColor (màu chữ)

1.3. Màn hình chào 2

Yêu cầu: Xây dựng Form nhận họ tên nhập vào và xuất ra câu chào

Hình 2: Màn hình chào 2

Hƣớng dẫn sử dụng:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 5/106

Nhập họ tên rồi click nút thực hiện và xuất ra câu chào “Chào bạn <họ tên nhập>”

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thManHinhChao2: form (name= “frm02Chao.cs”)

Text: Chào

(Các thể hiện phía dưới đều nằm trong form)

thNhapHoTen: Label (hiển thị)

thNhapHoTen: TextBox (nhập liệu)

thXuatCauChao: Label (hiển thị)

thThucHien: Button (xử lý)

Nhập

Họ tên

Xuất

Lời chào

Qui tắc xử lý

Lời chào = “Chào bạn ” + Họ tên đã nhập

Thuật giải

Gán thuộc tính Text của Label với giá trị “Chào bạn “+ biến họ tên

Hƣớng dẫn

Không có.

1.4. Thông tin cá nhân

Yêu cầu: Xây dựng form thông tin cá nhân

Hình 3: Màn hình thông tin cá nhân

Hƣớng dẫn sử dụng:

Nhập họ tên, ngày sinh, sở thích rồi Click nút xác nhận xem kết quả

Tóm tắt yêu cầu:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 6/106

Thiết kế giao diện ngƣời dùng

thThongTinCaNhan: form (name=”frm03CaNhan.cs”)

Text: Thông tin cá nhân

(Các thể hiện phía dưới nằm trong form)

thHoVaTen: Label (hiển thị)

thHoTen: TextBox (nhập liệu)

thNgaySinh: Label (hiển thị)

thNgaySinh: TextBox (nhập liệu)

thSoThich: Label (hiển thị)

thSoThich: TextBox (nhập liệu)

Nhập

Họ và tên

Ngày sinh

Nghề nghiệp

Xuất

Thông tin các nhân

Qui tắc xử lý

Thể hiện xuất: họ tên + ngày sinh + sở thích

Thuật giải

Không có

Hƣớng dẫn

Không có

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 7/106

BÀI 2: Giao diện Windows Forms Application

Các kiến thức cơ bản về Windows Forms Application.

Các kiến thức cơ bản về những Control thường dùng

2.1. Thông tin học viên

Yêu cầu: Tạo form thông tin học viên như sau

Hình 1: Màn hình nhập thông tin học viên

Hƣớng dẫn sử dụng:

Nhập đầy đủ các thông tin của học viên rồi Click nút Cập nhật hoặc Click nút Thêm

mới để nhập lại thông tin khác.

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thThongTinHocVien: form (name="frm02HocVien.cs")

* (Các thể hiện phía dưới đều nằm trong form)

thHinhAnh: PictureBox (xuất hình ảnh)

thHoten: TextBox (nhập liệu)

thNgayGhiDanh: DateTimePicker (nhập liệu)

thGroupGioiTinh: GroupBox (gom nhóm)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 8/106

thGioiTinhNam: RadioButton (nhập liệu)

thGioiTinhNu: RadioButton (nhập liệu)

thGroupBoxSoThich: GroupBox (gom nhóm)

thDocSach: CheckBox (nhập liệu)

thXemPhim: CheckBox (nhập liệu)

thNgheNhac: CheckBox (nhập liệu)

thDuLich: CheckBox (nhập liệu)

thCapNhat: Button (xử lý xuất thông báo Đã cập nhật thành công)

thThemMoi: Button (xử lý xóa trắng các điều khiển đưa con trỏ lên họ tên)

thDongForm: Button (xử lý đóng Form)

Nhập:

Họ tên, ngày ghi danh, giới tính, sở thích

Xuất:

Thông báo “Đã cập nhật thành công” bằng MessagBox

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

Không có

2.2. Thông tin hàng hóa

Yêu cầu: Tạo form hiển thị thông tin Hàng hóa như sau

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 9/106

Hình 2: Màn hình nhập thông tin hàng hóa

Hƣớng dẫn sử dụng:

Nhập tên hàng, số lượng, tổng tiền, thanh toán, vận chuyển rồi Click nút chức năng

xuất ra TextBox hoặc xuất ra MessageBox để xem.

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thThongTinHangHoa: form (name="frm02HangHoa.cs")

* (Các thể hiện phía dưới đều nằm trong form)

thThongTinHang: GroupBox (gom nhóm)

thTenHang: TextBox (nhập liệu)

thSoLuong: TextBox (nhập liệu)

thTongTien: TextBox (nhập liệu)

thThanhToan: GroupBox (gom nhóm)

thTienMat: CheckBox (nhập liệu)

thChuyenKhoan: CheckBox (nhập liệu)

thVanChuyen: GroupBox (gom nhóm)

thXeOTo: RadioButton (nhập liệu)

thTauHoa: RadioButton (nhập liệu)

thMayBay: RadioButton (nhập liệu)

thXuatRaTextBox: Button (xử lý)

thXuatRaMessageBox: Button (xử lý)

thLamLai: Button (xử lý)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 10/106

thXuatHang: TextBox (xuất thông tin)

Nhập:

Tên hàng, số lượng, tổng tiền, thanh toán, vận chuyển

Xuất:

Ra TextBox

Ra MessageBox

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

Không có

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 11/106

BÀI 3: Kiểu dữ liệu và biến

Sử dụng kiểu dữ liệu trong C#, ứng dụng các kiểu dữ liệu để khai báo biến.

Áp dụng các kỹ thuật chuyển kiểu dữ liệu trong C#

Sử dụng các toán tử trong C#

Sử dụng kiểu giá trị

Mục tiêu:

Sử dụng các kiểu dữ liệu loại giá trị, kỹ thuật chuyển đổi kiểu dữ liệu và sử dụng các toán

tử

3.1. Tính chu vi và diện tích hình tròn

Yêu cầu: Xây dựng chương trình tính diện tích và chu vi hình tròn

Hình 1: Màn hình tính diện tích chu vi hình tròn

Hƣớng dẫn sử dụng:

Nhập bán kính Click nút tính và xem kết quả Chu vi, Diện tích hình tròn

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhChuViDienTichHinhTron: form (name = “frm01HinhTron.cs”)

Text: Tính chu vi, diện tích hình tròn

Các thể hiện phía dưới nằm trong form

thTieuDe: Label (hiển thị)

thBanKinh: TextBox (nhập liệu)

thChuVi: TextBox (xuất thông tin)

thDienTich: TextBox (xuất thông tin)

thTinh: Button (xử lý)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 12/106

thLamLai: Button (xử lý)

Nhập

Bán kính kiểu số thực double

Xuất

Chu vi, Diện tích kiểu số thực doulbe

Qui tắc xử lý

Diện tích = Bán kính * Bán kính * PI

Chu vi = Bán kính * 2 * PI

Thuật giải

Khai báo biến: bán kính, diện tích, chu vi

Nhận giá trị nhập vào cho biến bán kính từ thể hiện nhập bán kính

Tính chu vi và diện tích của hình tròn

Xuất kết quả ra thể hiện chu vi, diện tích

Hƣớng dẫn

private void btnTinh_Click(object sender, EventArgs e)

{

double banKinh, dienTich, chuVi;

banKinh = double.Parse(txtBanKinh.Text);

chuVi = Math.PI * banKinh * 2;

dienTich = Math.PI * banKinh * banKinh;

txtChuVi.Text = Math.Round(chuVi,2).ToString();

txtDienTich.Text = Math.Round(dienTich,2).ToString();

}

Xử lý sự kiện Click của Button “Làm lại”

private void btnLamLai_Click(object sender, EventArgs e)

{

txtBanKinh.Text = "";

txtDienTich.Text = "";

txtChuVi.Text = "";

txtBanKinh.Focus();

}

3.2. Tính chu vi và diện tích hình chữ nhật (Bài về nhà)

Yêu cầu: Xây dựng chương trình tính chu vi và diện tích hình chữ nhật

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 13/106

Hình 2: Màn hình tính chu vi, diện tích hình chữ nhật

Hƣớng dẫn sử dụng:

Nhập chiều dài, chiều rộng rồi Click Tính để xem kết quả.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhChuViDienTichHinhChuNhat: form (name = frm02HinhChuNhat.cs)

Text: Tính chu vi, diện tích hình chữ nhật

Các thể hiện phía dưới đều nằm trên form

thChieuDai: TextBox (nhập liệu)

thChieuRong: TextBox (nhập liệu)

thChuVi: TextBox (xuất thông tin)

thDienTich: TextBox (xuất thông tin)

thTinh: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Chiều dài

Chiều rộng

Xuất

Chu vi

Diện tích

Qui tắc xử lý

Chu vi = (chiều dài + chiều rộng)*2;

Diện tích = (chiều dài * chiều rộng)

Thuật giải

Khai báo biến chiều dài, chiều rộng, diện tích, chu vi kiểu số double.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 14/106

Nhận giá trị nhập vào cho biến chiều dài, chiều rộng

Tính chu vi và diện tích theo qui tắc.

Xuất chu vi ra thể hiện chu vi, diện tích ra thể hiện diện tích

Hƣớng dẫn

Không có

3.3. Tính chu vi và diện tích tam giác

Yêu cầu: Tạo form tính chu vi, diện tích tam giác

Hình 3: Màn hình tính chu vi, diện tích tam giác

Hƣớng dẫn sử dụng:

Nhập vào chiều dài 3 cạnh của tam giác kiểu số thực double rồi click Trường hợp 1 để xuất ra Chu vi, Diện tích : kiểu số thực double.

Nhập vào chiều dài 3 cạnh của tam giác kiểu số thực int rồi click Trường hợp 2 để xuất ra Chu vi, Diện tích : kiểu số thực double.

Nhập vào chiều dài 3 cạnh của tam giác kiểu số thực int rồi click Trường hợp 3 để xuất ra Chu vi, Diện tích : kiểu số thực float.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhChuViDienTichTamGiac: form (name=frm03TamGiac.cs)

Text = “Tính chu vi, diện tích hình tam giác”

Các thể hiện phía dưới đều nằm trong form

thTieuDe: Label (hiển thị)

thCanhA: TextBox (nhập liệu)

thCanhB: TextBox (nhập liệu)

thCanhC: TextBox (nhập liệu)

thChuVi: TextBox (xuất thông tin)

thDienTich: TextBox (xuất thông tin)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 15/106

thTruongHop1: Button (xử lý)

thTruongHop2: Button (xử lý)

thTruongHop3: Button (xử lý)

Nhập

Cạnh a, b, c.

Xuất

Chu vi, diện tích

Qui tắc xử lý

Chu vi = Cạnh A + Cạnh B + Cạnh C

Diện tích = p * (p-a) * (p-b) * (p-c)

(Trong đó p = Chu vi / 2)

Thuật giải

Không có.

Hƣớng dẫn

Không có.

3.4. Tính số nút của 1 số nguyên (Bài về nhà)

Yêu cầu: Tạo form nhập vào 1 số nguyên n có 4 chữ số, tính và xuất ra số nút của số nguyên n.

Ví dụ: n = 1234 số nút = 0

n = 2023 số nút = 7

Hình 4: Màn hình tính số nút

Hƣớng dẫn sử dụng:

Nhập vào một số có 4 chữ số rồi Click nút Tính và xuất ra số nút của số nguyên.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhSoNnut: form (name = frm04TinhSoNut.cs)

Text: Tính số nút

Các thể hiện phía dưới đều nằm trên form

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 16/106

thSoNguyenN: TextBox (nhập liệu)

thSoNut: TextBox (xuất kết quả)

thTinh: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Số nguyên n

Xuất

Số nút

Qui tắc xử lý

không có

Thuật giải

Khai báo biến số nguyên n và 4 biến số cho hàng ngàn, trăm, chục, đơn vị

Nhận giá trị số nguyên n nhập vào

Dùng toán tử / và % để tách hàng ngàn, trăm, chục, đơn vị từ số n

Cộng các giá trị hàng ngàn, trăm, chục, đơn vị và %10 lấy số nút

Hƣớng dẫn

Không có.

Sử dụng kiểu tham chiếu

Mục tiêu: Sử dụng các kiểu dữ liệu loại tham chiếu

3.5. Tách chuỗi họ tên

Yêu cầu: Tạo Form tách chuỗi họ tên

Hình 5: Màn hình tách chuỗi họ tên

Hƣớng dẫn sử dụng:

Nhập họ tên và Click nút Tách chuỗi để tách ra họ, lót, tên.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 17/106

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dung

thTachChuoiHoTen: form (name = frm05TachChuoi.cs)

Text: Tách chuỗi họ tên

Các thể hiện phía dưới đều nằm trên form

thHoTen: TextBox (nhập liệu)

thHo: TextBox (xuất thông tin)

thLot: TextBox (xuất thông tin)

thTen: TextBox (xuất thông tin)

thTachChuoi: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Họ tên

Xuất

Họ, lót, tên

Qui tắc xử lý

Không có

Thuật giải

Khai báo biến nhận họ tên nhập vào

Dùng thuộc tính Length và các phương thức IndexOf, LastIndexOf, Substring của biến kiểu chuỗi để tính toán và lấy các phần họ, tên, lót.

Xuất kết quả lên màn hình

Hƣớng dẫn

Không có

3.6. Sử dụng biến tham chiếu

Yêu cầu: Tạo form sử dụng biến tham chiếu

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 18/106

Hình 6: Biến tham chiếu

Hƣớng dẫn sử dụng:

Thực hiện theo thứ tự trên form và suy nghĩ về kết quả.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thBienThamChieu: form (name = frm06ThamChieu.cs)

Text: Biến tham chiếu

Các thể hiện phía dưới đều nằm trên form

thNhapS1: TextBox (nhập liệu)

thCapNhatS1: Button (xử lý)

thGanS1BangS2: Button (xử lý)

thSuaLaiS1: TextBox (nhập liệu)

thCapNhatS1: Button (xử lý)

thXuatRaS2: Button (xử lý)

thGiaTriS2: TextBox (xuất thông tin)

Nhập

Không có

Xuất

Không có

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 19/106

- Khai báo 2 biến kiểu StringBuilder và 2 biến số dùng chung trong Form

StringBuilder s1 = new StringBuilder(), s2 = new StringBuilder();

- Xử lý sự kiện Click của các Button loại biến tham chiếu

private void btnCapNhatS1_Click(object sender, EventArgs e) {

s1.Append(txtNhapS1.Text); } private void btnGanS2BangS1_Click(object sender, EventArgs e) {

s2 = s1; } private void btnCapNhatLaiS1_Click(object sender, EventArgs e) {

s1.Remove(0, s1.Length); s1.Append(txtSuaS1.Text);

} private void btnXuatS2_Click(object sender, EventArgs e) {

txtGiaTriS2.Text = s2.ToString();

}

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 20/106

BÀI 4: Cấu trúc điều khiển

Sử dụng các cấu trúc điều khiển, cách bẫy lỗi và xử lý lỗi trong C#.

4.1. Xếp loại học tập

Yêu cầu: Tạo màn hình xếp loại học tập có giao diện như sau

Hình 1: Màn hình xếp loại học tập

Hƣớng dẫn sử dụng:

Nhập điểm học kỳ 1, điểm học kỳ 2 rồi Click nút Đồng ý để xem xếp loại.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thXepLoaiHocTap: form (name = frm01XepLoai.cs)

Text: Xếp loại học tập

Các thể hiện phía dưới đều nằm trên form

thDiemHK1: TextBox (nhập liệu)

thDiemHK2: TextBox (nhập liệu)

thXepLoai: TextBox (xuất thông tin)

thDongY: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Điểm học kỳ 1, học kỳ 2

Xuất

Xếp loại

Qui tắc xử lý

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 21/106

Điểm trung bình = (điểm HK1 + điểm HK2*2)/3

Tính Xếp loại học tập, theo quy tắc sau:

Điểm trung bình <5: yếu

5 <= Điểm trung bình <6.5: trung bình

6.5 <= Điểm trung bình < 8: khá

Điểm trung bình >=8: giỏi

Thuật giải

Không có

Hƣớng dẫn

private void btnDongY_Click(object sender, EventArgs e) {

double diemHK1, diemHK2, dtb; diemHK1 = double.Parse(txtDiemHK1.Text); diemHK2 = double.Parse(txtDiemHK2.Text); dtb = (diemHK1 + diemHK2 * 2) / 3; string xepLoai=""; if (dtb < 5) xepLoai = "Yếu"; else if (dtb < 6.5) xepLoai = "Trung bình"; else if (dtb < 8) xepLoai = "Khá"; else xepLoai = "Giỏi"; txtXepLoai.Text = xepLoai;

}

4.2. Tìm ngày trƣớc, ngày sau của một ngày

Yêu cầu: Tạo form tìm ngày trước, ngày tiếp theo của ngày nhập vào

Hình 2: Màn hình tìm ngày trước, ngày tiếp theo

Hƣớng dẫn sử dụng:

Nhập ngày rồi Click nút Đồng ý để xem ngày trước và ngày tiếp theo

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 22/106

thTimNgayTruocNgaySau: form (name = frm02NgayTruocNgaySau.cs)

Text: Tìm ngày trước, ngày tiếp theo

Các thể hiện phía dưới đều nằm trên form

thNgay: TextBox (nhập liệu)

thNgayTruoc: TextBox (xuất thông tin)

thNgayTiepTheo: TextBox (xuất thông tin)

thDongY: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Ngày

Xuất

Ngày trước, ngày tiếp theo

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Sử dụng các thuộc tính (Day, Month, Year) và hàm (DaysInMonth)của kiểu DateTime

Ví dụ: Ngày hiện tại: 01/01/2009 Ngày trước = 31/12/2008, ngày sau= 02/01/2009

4.3. Tính tiền điện (bài về nhà)

Yêu cầu: Tạo form tính tiền điện như hình sau

Hình 3: màn hình tính tiền điện

Hƣớng dẫn sử dụng:

Nhập chỉ số đầu, chỉ số cuối rồi Click nút Đồng ý để xem số tiền điện phải đóng.

Tóm tắt yêu cầu:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 23/106

Thiết kế giao diện ngƣời dùng

thTinhTienDien: form (name = frm03TienDien.cs)

Text: Tính tiền điện

Các thể hiện phía dưới đều nằm trên form

thChiSoDau: TextBox (nhập liệu)

thChiSoCuoi: TextBox (nhập liệu)

thSoTienPhaiDong: TextBox (xuất thông tin)

thDongY: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Chỉ số đầu

Chỉ số cuối

Xuất

Số tiền phải đóng

Qui tắc xử lý

Tính tiền điện theo số KW tiêu thụ và đơn giá (có tính lũy tiến) theo quy tắc sau:

KW Giá tiền/KW

0 < KW <=100 500

100 < KW <=250 600

250 < KW <=300 800

KW > 300 1.000

Thuật giải

Không có

Hƣớng dẫn

Không có

4.4. Tính năm âm lịnh

Yêu cầu: Tạo form tính năm âm lịch theo hình sau

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 24/106

Hình 4: màn hình tính năm âm lịch

Hƣớng dẫn sử dụng:

Nhập năm dương lịch rồi Click nút Đồng Ý để xem năm âm lịch tương ứng.

Ví dụ: Nhập năm dương lịch: 2009 năm âm lịch: Kỷ sửu

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhNamAmLich: form (name = frm04NamAmLich.cs)

Text: Tính năm âm lịch

Các thể hiện phía dưới đều nằm trên form

thNamDuongLich: TextBox (hiển thị)

thNamAmLich: TextBox (xuất thông tin)

thDongY: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Năm dương lịch

Xuất

Năm âm lịch

Qui tắc xử lý

Năm âm lịch được tính dự vào CAN + CHI trong đó CAN và CHI được tính theo quy tắc sau:

Nam_duong % 10 0 1 2 3 4 5 6 7 8 9

CAN Canh Tân Nhâm Quý Giáp Ất Bính Đinh Mậu Kỷ

Nam_duong % 12 0 1 2 3 4 5 6 7 8 9 10 11

CHI Thân Dậu Tuất Hợi Tí Sử Dần Mẹo Thìn Tỵ Ngọ Mùi

Thuật giải

Không có

Hƣớng dẫn

Không có

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 25/106

4.5. Tính số ngày trong tháng

Yêu cầu: Tạo form tính số ngày trong tháng theo hình sau

Hình 5: màn hình tính số ngày trong tháng

Hƣớng dẫn sử dụng:

Nhập tháng, năm rồi Click Đồng ý để xem số ngày của tháng/năm đó.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thTinhSoNgayTrongThang: form (name = frm05SoNgayTrongThang.cs)

Text: Tính số ngày trong tháng

Các thể hiện phía dưới đều nằm trên form

thThang: TextBox (nhập liệu)

thNam: TextBox (nhập liệu)

thSoNgay: TextBox (xuất thông tin)

thDongY: Button (xử lý)

thLamLai: Button (xử lý)

Nhập

Tháng

Năm

Xuất

Số ngày của tháng/năm đã nhập

Qui tắc xử lý

Tháng 1,3,5,7,8,10,12 có 31 ngày

Tháng 4,6,9,11 có 30 ngày

Tháng 2 năm nhuận: có 29 ngày, năm thường có 28 ngày

Năm nhuận là năm chia hết cho 400 hoặc năm chia hết cho 4 và không chia hết cho 100.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 26/106

Thuật giải

Không có

Hƣớng dẫn

Không có

4.6. Tính ngày của mẹ, ngày của cha (Bài về nhà)

Yêu cầu: Tạo from tính ngày của mẹ và ngày của cha theo hình sau

Hình 6: Màn hình tính ngày của mẹ, ngày của cha

Hƣớng dẫn sử dụng:

Nhập năm dương lịch rồi Click nút Tính để xem ngày của mẹ, ngày của cha.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dung

thNgayMeNgayCha: form (name = frm06NgayMeNgayCha.cs)

Text: Ngày của mẹ, ngày của cha

Các thể hiện phía dưới đều nằm trên form

thNam: TextBox (nhập liệu)

thNgayCuaMe: TextBox (xuất thông tin)

thNgayCuaCha: TextBox (xuất thông tin)

thTinh: Button (xử lý)

Nhập

Năm dương lịch

Xuất

Ngày của mẹ

Ngày của cha

Qui tắc xử lý

Ngày của mẹ là ngày chủ nhật thứ 2 của tháng 5 hàng năm

Ngày của cha là ngày chủ nhật thứ 3 của tháng 6 hàng năm.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 27/106

Thuật giải

Không có

Hƣớng dẫn

Sử dụng cấu trúc switch và các thuộc tính, phương thức của kiểu DateTime

4.7. In bảng cửu chƣơng của một số

Yêu cầu: Tạo form in ra một bảng cửu chương như hình sau

Hình 7: màn hình in một bảng cửu chương

Hƣớng dẫn sử dụng:

Nhập một số nguyên từ 2 đến 9 rồi Click nút In bảng cửu chương để xem bảng cửu chương.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thInMotBangCuuChuong: form (name = frm07MotBangCuuChuong.cs)

Text: In một bảng cửu chương

Các thể hiện phía dưới đều nằm trên form

thNhapSoNguyen: TextBox (nhập liệu)

thInBangCuuChuong: Button (xử lý)

thBangCuuChuong: Label (xuất thông tin)

Nhập

Nhập số nguyên (2-9)

Xuất

Bảng cửu chương.

Qui tắc xử lý

Không có

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 28/106

Thuật giải

Không có

Hƣớng dẫn

Xử lý sự kiện Click của nút In bảng cửu chương:

int cc = int.Parse(txtSo.Text);

StringBuilder strb = new StringBuilder();

for (int i = 1; i <= 10; i++)

{

strb.AppendLine(cc.ToString("00") + " x " + i.ToString("00") + " = " + ((int)(cc *

i)).ToString("00") );

}

lblBang.Text = strb.ToString();

4.8. In bảng cửu chƣơng từ số đến số

Yêu cầu: Tạo from in các bảng cửu chương từ, đến như hình sau

Hình 8: màn hình in các bảng cửu chương từ đến

Hƣớng dẫn sử dụng:

Nhập bảng cửu chương từ, bảng cửu chương đến rồi Click nút In bảng cửu chương để xem các bảng cửu chương.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thInBangCuuChuongTuSoDenSo: form (name = frm08BangCuuChuongTuDen.cs)

Text: In bảng cửu chương

Các thể hiện phía dưới đều nằm trên form

thInBangCuuChuong: Button (xử lý)

thBangCuuChuongTuSo: TextBox (nhập liệu)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 29/106

thBangCuuChuongDenSo: TextBox (nhập liệu)

thCacBangCuuChuong: Label (xuất thông tin)

Nhập

Bảng cửu chương từ

Bảng cửu chương đến

Xuất

Các bảng cửu chương từ số đến số

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Sử dụng 2 vòng for.

4.9. Tính lãi suất ngân hàng (Bài về nhà)

Yêu cầu: Tạo form tính lãi suất ngân hàng như hình sau

Hình 9: Màn hình lãi xuất ngân hàng

Hƣớng dẫn sử dụng:

Nhập vào số tiền gởi, lãi suất ngân hàng (tính theo năm) và số tháng gởi rồi Click nút Tính lãi suất để xem số dư và tiền lãi.

Ví dụ: Nếu bạn gởi 10 triệu với lãi suất 12%/năm và gởi trong 6 tháng, thì tiền lãi cuối kỳ được tính như sau:

Lãi suất tháng = (12/12)/100 0.01

ThángTiển gốc + Lãi Tiền lãi tháng

1 10,000,000 100,000

2 10,100,000 101,000

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 30/106

3 10,201,000 102,010

4 10,303,010 103,030.1

5 10,406,040.1 104,060.401

6 10,510,100.5 105,101.005

Số dư cuối kỳ = 10,615,201.51

Tiền lãi cuối kỳ = 615,201.51

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thLaiSuatNganHang: form (name = frm09NganHang.cs)

Text: Tính lãi suất ngân hàng

Các thể hiện phía dưới đều nằm trên form

thTienGoc: TextBox (nhập liệu)

thLaiSuat: TextBox (nhập liệu)

thSoThangGoi: TextBox (nhập liệu)

thSoDu: TextBox (xuất thông tin)

thTienLai: TextBox (xuất thông tin)

thTinhLaiSuat: Button (xử lý)

Nhập

Tiền gởi

Lãi suất (%/ năm)

Số tháng gởi

Xuất

Số dư

Tiền lãi

Qui tắc xử lý

Tính và xuất Số dư cuối kỳ và tiền lãi cuối kỳ, biết rằng:

Lãi suất tháng = (Lãi suất năm / 12) /100

Tiền lãi tháng = Tiền gốc * Lãi suất tháng

Tiền lãi mỗi tháng sẽ được gộp chung vào tiền gốc

Tiền lãi cuối kỳ sẽ được tính lũy tiến từ tiền lãi mỗi tháng + tiền gốc

Thuật giải

Không có

Hƣớng dẫn

Không có

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 31/106

4.10. Thực hiện lại các bài 3.8, 3.9 và 3.10 bằng cách dùng vòng lặp while,

do..while (Bài về nhà)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 32/106

BÀI 5: Kiểu Array và kiểu Struct

Khai báo và sử dụng mảng một chiều trong C#

Xây dựng và sử dụng kiểu dữ liệu do người dùng định nghĩa (struct).

5.1. Làm việc với mảng

Yêu cầu: Tạo form làm việc với mảng như hình sau

Hình 1: Màn hình làm việc với mảng

Hƣớng dẫn sử dụng:

Nhập vào số phần tử mảng rồi Click nút Tạo mảng để phát sinh mảng với các giá trị ngẫu nhiên. Click các nút chức năng để xem kết quả.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dùng

thLamViecVoiMang: form (name = frm01Mang.cs)

Text: Làm việc với mảng

Các thể hiện phía dưới đều nằm trên form

thSoPhanTuMang: TextBox (nhập liệu)

thMangSoNguyen: TextBox (xuất thông tin)

thGiaTriX: TextBox (nhập liệu)

thTaoMang: Button (xử lý tạo mảng)

thPhanTuLonNhat: Button (xử lý tìm phần tử lớn nhất)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 33/106

thSapXepTangDan: Button (xử lý sắp mảng tăng dần)

thTongCacPT: Button (xử lý tổng các phần tử)

thPhanTuNhoNhat: Button (xử lý tìm phần tử nhỏ nhất)

thSapGiamDan: Button (xử lý sắp giảm dần)

thTimX: Button (xử lý tìm giá trị X trong mảng)

Nhập

Số phần tử

Xuất

Mảng số nguyên với các giá trị ngẫu nhiên

Giá trị nhỏ nhất; lớn nhất; tổng các phần tử; kết quả tìm X qua MessageBox.

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Khai báo biến mảng số nguyên a toàn cục

int[] a;

Xử lý sự kiện Click của Button “Tạo mảng”

// Tạo mảng số nguyên a với kích thước bằng số phần tử vừa nhập

int n = int.Parse(txtso_phan_tu.Text);a = new int[n];

// Khởi tạo mảng số nguyên a với các phần tử có giá trị ngẫu nhiên từ

-50 đến 100

Random ngau_nhien=new Random();

for (int i=0;i<a.Length;i++)

a[i]=ngau_nhien.Next(-50,101);

// Xuất mảng số nguyên a lên màn hình

string chuoi_a=a[0].ToString();

for (int i=1;i<a.Length;i++)

chuoi_a=string.Format("{0} {1}",chuoi_a,a[i]);

txtmang_so_nguyen_a.Text=chuoi_a;

5.2. Tạo và sử dụng kiểu NhanVien

Yêu cầu 1:

Tạo struct NhanVien với các thành phần dữ liệu và thành phần hàm như sau

struct NhanVien

{

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 34/106

//Thành phần dữ liệu

public string hoTen;

public DateTime ngaySinh;

public float heSoLuong;

public int luongCoBan;

public int? soCon;

//Thành phần hàm

public NhanVien(string hoTen, DateTime ngaySinh, float heSoLuong, int

luongCoBan, int? soCon){…}

public float TinhLuong() {…}

public string Xuat() {…}

}

Tóm tắt yêu cầu:

Qui tắc xử lý

Xây dựng hàm tính lương, với: Tiền lương = Lương cơ bản * Hệ số lương + ( Số con * 100000)

Xây dựng hàm xuất thông tin nhân viên ra màn hình có dạng: “Nguyễn Thanh Thúy – 32 tuổi – Số con: 2 – Tiền lƣơng: 2500000

Thuật giải

Không có

Hƣớng dẫn

Xây dựng hàm khởi tạo cho cấu trúc NhanVien

public NhanVien(string hoTen, DateTime ngaySinh, float heSoLuong, int luongCoBan, int? soCon)

{

this.hoTen = hoTen; this.ngaySinh = ngaySinh;

this.heSoLuong = heSoLuong; this.luongCoBan = luongCoBan;

this.soCon = soCon;

}

Xây dựng hàm tính tiền lương cho nhân viên:

public float TinhLuong()

{

return luongCoBan * heSoLuong+ (soCon.HasValue ? soCon.Value * 100000 : 0); }

Xây dựng hàm xuất để hiển thị thông tin của nhân viên:

public string Xuat()

{ int tuoi, con;

tuoi = DateTime.Today.Year - ngaySinh.Year;

con = soCon.HasValue ? soCon.Value : 0;

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 35/106

return string.Format("{0} - {1} tuổi - Số con: {2} - Tiền lương: {3}", hoTen, tuoi, con,

TinhLuong());

}

Yêu cầu 2: Tạo form để nhập thông tin nhân viên như hình sau

Hình 2: màn hình nhập thông tin nhân viên

Hƣớng dẫn sử dụng:

Nhập họ tên, ngày sinh, hệ số lương, lương cơ bản, số con (nếu có) rồi Click nút Đồng ý để xem thông tin nhân viên với tiền lương.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dung

thNhapThongTinNhanVien: form (name = frm02NhanVien.cs)

Text: Sử dụng kiểu tự định nghĩa (struct)

Các thể hiện phía dưới đều nằm trên form

thHoTen: TextBox (nhập liệu)

thNgaySinh: TextBox (nhập liệu)

thHeSoLuong: TextBox (nhập liệu)

thLuongCoBan: TextBox (nhập liệu)

thSoCon: TextBox (nhập liệu)

thDongY: Button (xử lý xuất thông tin)

thLamLai: Button (xử lý xóa trắng các ô và đưa con trỏ lên họ tên)

Nhập

Họ tên, ngày sinh, hệ số lương, lương cơ bản, số con

Xuất

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 36/106

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Xử lý sự kiện Click của Button “Đồng ý”

private void btnDongY_Click(object sender, EventArgs e) {

NhanVien nv; nv.hoTen = txtHoTen.Text;

nv.ngaySinh = DateTime.Parse(txtNgaySinh.Text);

nv.luongCoBan = int.Parse(txtLuongCoBan.Text); nv.heSoLuong = float.Parse(txtHeSoLuong.Text);

nv.soCon = txtSoCon.Text != "" ? (int?)int.Parse(txtSoCon.Text) : null; MessageBox.Show(nv.Xuat(),"Thông tin");

}

5.3. Nhập hàng hóa (Bài về nhà)

Yêu cầu 1: Tạo struct HangHoa có thành phần dữ liệu và thành phần hàm như sau

struct HangHoa {

//thành phần dữ liệu public string tenHang; public float soLuong; public int donGia; //thành phần hàm public HangHoa(string pTenHang, float pSoLuong, int pDonGia){…} public string Xuat(){…} public double ThanhTien() {…}

}

Tóm tắt yêu cầu:

Qui tắc xử lý

Thành tiền = số lượng * đơn giá

Hƣớng dẫn

Xây dựng hàm xuất để xuất hàng hóa

public string Xuat() {

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 37/106

return string.Format("{0,-15}{1,10}{2,10:N0}{3,15:N0}", tenHang, soLuong, donGia,

ThanhTien()); }

Yêu cầu 2: Tạo form nhập hàng hóa có sử dụng kiểu dữ liệu HangHoa như sau

Hình 3: màn hình nhập hàng hóa

Hƣớng dẫn sử dụng:

Nhập tên hàng, số lượng, đơn giá rồi Click nút Đồng ý để xem danh sách hàng hóa và tổng tiền bên dưới.

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dung

thNhapHangHoa: form (name = frm03HangHoa.cs)

Text: Nhập hàng hóa

Các thể hiện phía dưới đều nằm trên form

thTenHang: TextBox (nhập liệu)

thSoLuong: TextBox (nhập liệu)

thDonGia: TextBox (nhập liệu)

thDongY: Button (xử lý xuất danh sách hàng)

thLamLai: Button (xử lý)

thDanhSachHangHoa: TextBox (xuất thông tin)

thTongTien: TextBox (xuất thông tin)

Nhập

Tên hàng, số lượng, đơn giá

Xuất

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 38/106

Danh sách hàng hóa được nhập

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Xử lý sự kiện Click của Button Đồng ý

private void btnDongY_Click(object sender, EventArgs e)

{

HangHoa hh;

hh.tenHang = txtTenHang.Text;

hh.soLuong = float.Parse(txtSoLuong.Text);

hh.donGia = int.Parse(txtDonGia.Text);

Array.Resize(ref ds, ds.Length + 1);

ds[ds.Length - 1] = hh;

txtDanhSach.Text = XuatDanhSach();

txtTongTien.Text = TongTien().ToString("#,###");

}

Hàm Xuất danh sách hàng hóa

private string XuatDanhSach()

{

StringBuilder sb = new StringBuilder();

sb.AppendLine(string.Format("{0,-15}{1,10}{2,10}{3,15}","Mặt hàng","Số

lượng","Đơn giá","Thành tiền"));

foreach (HangHoa hh in ds)

sb.AppendLine(hh.Xuat());

return sb.ToString();

}

Hàm tính tổng tiền

private double TongTien()

{

double tongTien = 0;

foreach (HangHoa hh in ds)

tongTien += hh.ThanhTien();

return tongTien;

}

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 39/106

BÀI 6: Tổng quan Lập trình hƣớng đối

tƣợng

Xây dựng và sử dụng các class cũng như các thành phần của class trong môi trường C#

6.1. Giải phƣơng trình bậc nhất Ax + B = 0

Yêu cầu: Tạo class PhuongTrinhBac1 và sử dụng class này để cài đặt code cho form Giải

phương trình bậc 1 (frm01PhuongTrinhBac1.cs)

Hình 1: Giao diện thể hiện giải phương trình bậc 1

Hƣớng dẫn sử dụng:

Nhập giá trị cho các hệ số của phương trình

Nhấn vào nút chức năng Giải xem kết quả nghiệm số

Nhấn vào nút Làm lại nếu muốn giải phương trình mới

Tóm tắt yêu cầu

Thiết kế class - PhuongTrinhBac1

Folder lưu trữ: Bai06

Phạm vi sử dụng public

* Các thành phần trong class:

Thuộc tính (Auto-Implemented Properties)

HeSoA: kiểu float

HeSoB: kiểu float

Phương thức khởi tạo (Constructors)

PhuongTrinhBac1()

PhuongTrinhBac1(float heSoA, float heSoB)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 40/106

Gán giá trị cho các thuộc tính HeSoA, HeSoB

Phương thức xử lý tính toán - Method

Giai

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: Giai

o Kiểu trả về: String

o Tham số: Không có

Kết quả trả về: Nghiệm số của phương trình

Thuật giải:

Khai báo biến ketQua kiểu String

Nếu hệ số A bằng 0

Nếu Hệ số B bằng 0

ketQua =“Phương trình có vô số nghiệm”

Ngược lại: (Hệ số B khác 0)

ketQua= “Phương trình vô nghiệm”

Ngược lại: (Hệ số A khác 0)

ketQua = -HeSoB/HeSoA

Trả kết quả về

Thiết kế giao diện ngƣời dùng:

thGiaiPhuongTrinhBac1: Windows Form

Folder lưu trữ: Bai06

Name: frm01GiaiPhuongTrinhBac1

Text: Giải phương trình bậc 1

* Các thể hiện trong form:

thHeSoA: TextBox

thHeSoB: TextBox

thNghiem: TextBox ( ReadOnly:True)

thGiai: Button

thLamLai: Button

Nhập:

Nhập Hệ số A, Hệ số B

Xuất:

Xuất nghiệm số của phương trình

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 41/106

Qui tắc xử lý :

Xử lý cho nút chức năng Giải phương trình

Khai báo biến heSoA, heSoB

Gán giá trị cho các biến heSoA, heSoB (từ giá trị người dung nhập trên form)

Khai báo và khởi tạo biến đối tượng phuongTrinh kiểu PhuongTrinhBac1

Gọi phương thức Giai của đối tượng phuongTrinh

Xuất kết quả lên form

Xử lý cho nút chức năng Làm lại

Xóa nội dung của các thHeSoA, thHeSoB, thNghiem

Chuyển focus về thHeSoA

Thuật giải

Không có

Hƣớng dẫn

Cài đặt code trong form frm01PhuongTrinhBac1

Xử lý code trong phương thức liên kết với sự kiện Click của Button btnGiai

Cài đặt code trong class PhuongTrinhBac1

public class PhuongTrinhBac1

{

// Auto-Implemented Properties

public float HeSoA{get;set;}

public float HeSoB{get;set;}

// Constructors

public PhuongTrinhBac1() {}

public PhuongTrinhBac1(float a, float b){HeSoA = a; HeSoB = b;}

// Methods

public string Giai()

{

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 42/106

string ketQua = "";

if (HeSoA == 0)

{

if (HeSoB == 0)

ketQua = "Phương trình có vô số nghiệm";

else

ketQua = "Phương trình vô nghiệm";

}

else

{

float nghiem = -HeSoB/HeSoA;

ketQua = string.Format("Phương trình có nghiệm: x = {0}", nghiem);

}

return ketQua;

}

}

6.2. Phép toán trên phân số

Yêu cầu: Tạo class PhanSo và sử dụng class này để cài đặt code cho form Phép toán trên

phân số (frm02PhanSo.cs).

Hình 1: Giao diện thể hiện phép toán trên phân số

Hƣớng dẫn sử dụng:

Nhập giá trị cho các phân số

Nhấn vào nút chức năng Cộng,Trừ,Nhân, Chia xem kết quả

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 43/106

Nhấn vào nút Làm lại nếu muốn nhập phân số mới

Tóm tắt yêu cầu

Thiết kế class - PhanSo

Folder lưu trữ: Bai06

Phạm vi sử dụng public

* Các thành phần trong class:

Biến thành viên (Fields): lưu trữ thông tin

_ TuSo: kiểu int (Mặc định là 1)

_ MauSo: kiểu int (Mặc định là 1)

Thuộc tính (Properties)

TuSo: kiểu int

MauSo: kiểu int ( Kiểm tra giá trị phải khác 0 )

Phương thức khởi tạo (Constructors)

PhanSo ()

PhanSo (int tuSo, int mauSo)

Gán giá trị cho các thuộc tính TuSo, MauSo

Phương thức xử lý tính toán - Method

Xuat: xuất phân số theo dạng chuỗi (Ví dụ: 1/2)

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: Xuat

o Kiểu trả về: String

o Tham số: không có

Kết quả trả về: chuỗi ghép theo dạng <Tử số>/<Mẫu số>

ToiGian: xử lý tối giản phân số (ví dụ: 2/4 tối giản thành 1/2)

Phạm vi sử dụng: private

Qui tắc xử lý:

o Tên phương thức: ToiGian

o Kiểu trả về: PhanSo

o Tham số: p kiểu PhanSo

Kết quả trả về: phân số sau khi đã tối giản

Cong: tính tổng hai phân số

Phạm vi sử dụng: public

Qui tắc xử lý:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 44/106

o Tên phương thức: Cong

o Kiểu trả về: PhanSo

o Tham số: p kiểu PhanSo

Kết quả trả về: phân số kết quả sau khi đã tối giản

Tru: tính hiệu hai phân số

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: Tru

o Kiểu trả về: PhanSo

o Tham số: p kiểu PhanSo

Kết quả trả về: phân số kết quả sau khi đã tối giản

Nhan: tính tích hai phân số

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: Nhan

o Kiểu trả về: PhanSo

o Tham số: p kiểu PhanSo

Kết quả trả về: phân số kết quả sau khi đã tối giản

Chia: tính thương hai phân số

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: Chia

o Kiểu trả về: PhanSo

o Tham số: p kiểu PhanSo

Kết quả trả về: phân số kết quả sau khi đã tối giản

Công thức tính :

Thiết kế giao diện ngƣời dùng: (Cung cấp)

thPhanSo: Windows Form

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 45/106

Folder lưu trữ: Bai06

Name: frm02PhanSo

Nhập:

Nhập Phân số 1, phân số 2

Xuất:

Xuất phân số kết quả

Qui tắc xử lý :

Xây dựng phương thức sử dụng cục bộ trong form

TaoPhanSo: chuyễn giá trị nhập dạng chuỗi sang kiểu PhanSo

Phạm vi sử dụng: private

Qui tắc xử lý:

o Tên phương thức: TaoPhanSo

o Kiểu trả về: PhanSo

o Tham số: chuoi kiểu String

Kết quả trả về: phân số kết quả sau khi đã xử lý chuyển đổi

Xử lý cho nút chức năng Cộng

Khai báo biến p1, p2 kiểu PhanSo

Gán giá trị cho các biến p1, p2 (từ giá trị người dùng nhập trên form)

Gọi phương thức Cong của đối tượng p1 với giá trị truyền cho tham số là p2

Xuất kết quả lên form

Tương tự xử lý cho các nút chức năng Trừ, Nhân, Chia

Xử lý nghiệp vụ cho nút chức năng Làm lại

Xóa nội dung của các thPhanSo1, thPhanSo2, thKetQua

Chuyển focus về thPhanSo1

Thuật giải

Không có

Hƣớng dẫn

Cài đặt code trong class PhanSo

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 46/106

Cài đặt code trong form frm02PhanSo

6.3. Xử lý phân số nâng cao

Yêu cầu: trong class PhanSo (đã tạo ở bài 6.2) bổ sung các phương thức nạp chồng toán tử

+, - , *, /, ==, !=, trong form thiết kế bổ sung nút lệnh So sánh 2 phân số

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 47/106

Hình 1: Giao diện thể hiện xử lý phân số nâng cao

Hƣớng dẫn sử dụng:

Nhập giá trị cho các phân số

Nhấn vào nút chức năng Cộng,Trừ,Nhân, Chia xem kết quả

Nhấn vào nút chức năng So sánh xuất lên MessageBox kết quả so sánh hai phân số

Nhấn vào nút Làm lại nếu muốn nhập phân số mới

Tóm tắt yêu cầu

Thiết kế class - PhanSo

* Các thành phần trong class: (bổ sung thêm vào class PhanSo đã làm ở bài 6.2)

Phương thức nạp chồng toán tử +

+: tính tổng hai phân số

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: +

o Kiểu trả về: PhanSo

o Tham số: ps1 kiểu PhanSo, ps2 kiểu PhanSo

Kết quả trả về: phân số kết quả sau khi đã tối giản

Tương tự cho các phương thức nạp chồng toán tử - , *, /

Phương thức nạp chồng toán tử ==

==: so sánh hai phân số có bằng nhau hay không

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: ==

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 48/106

o Kiểu trả về: bool

o Tham số: ps1 kiểu PhanSo, ps2 kiểu PhanSo

Kết quả trả về: True|False

Tương tự cho các phương thức nạp chồng toán tử !=

Thiết kế giao diện ngƣời dùng:

thPhanSo: Windows Form

Tái sử dụng frm02PhanSo (hoặc tạo frm03PhanSo tương tự) và bổ sung thêm nút lệnh So sánh 2 phân số

Nhập:

Nhập Phân số 1, phân số 2

Xuất:

Xuất kết quả (tùy theo nút chức năng sử dụng)

Qui tắc xử lý :

Xử lý cho nút chức năng Cộng

Khai báo biến p1, p2, kq kiểu PhanSo

Gán giá trị cho các biến p1, p2 (từ giá trị người dùng nhập trên form)

Thực hiện phép tính cộng: kq = p1+ p2

Xuất kết quả lên form

Tương tự xử lý cho các nút chức năng Trừ, Nhân, Chia

Xử lý cho nút chức năng So sánh 2 phân số

Khai báo biến p1, p2 kiểu PhanSo

Gán giá trị cho các biến p1, p2 (từ giá trị người dùng nhập trên form)

Thực hiện phép so sánh: ==

Xuất kết quả lên cửa sổ MessageBox như Hình 1

Thuật giải

Không có

Hƣớng dẫn

Không có

6.4. Nhập xuất thông tin hóa đơn (Bài về nhà)

Yêu cầu: xây dựng ứng dụng hỗ trợ nhập xuất thông tin Hóa đơn bán hàng theo mô tả sau:

- Thông tin hóa đơn gồm có: Số hóa đơn, Ngày lập hóa đơn, Khách hàng và Danh sách các

sản phẩm được mua

- Thông tin sản phẩm gồm có: Tên sản phẩm, Đơn giá sản phẩm, Số lượng mua và Thành

tiền.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 49/106

- Sau khi nhập đầy đủ Thông tin hóa đơn và Chi tiết hóa đơn, người dùng được phép xem

thông tin của Hóa đơn bán hàng (frm04HoaDon.cs)

Hƣớng dẫn:

- Xây dựng hai class: HoaDon và SanPham

- Khai báo các biến dùng chung trên Form: 1 biến kiểu HoaDon, 1 biến mảng kiểu

SanPham, 1 biến kiểu int (dùng lưu trữ số sản phẩm, cũng là số phần tử của mảng)

- Gợi ý giao diện của Form:

Hình 1: Giao diện thể hiện Nhập thông tin hóa đơn

Hình 2: Giao diện thể hiện hóa đơn

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 50/106

BÀI 7: Delegate và Event

Khai báo và sử dụng Delegate

Khai báo và phát sinh Event

7.1. Quản lý thông tin nhân viên

Yêu cầu:

- Xây dựng class NhanVien bao gồm các thông tin: Họ tên, Giới tính, Ngày sinh, Ngày vào

làm, Hệ số lương, Lương cơ bản và Thâm niên. Trong đó:

o Lương cơ bản dùng chung cho tất cả các nhân viên trong công ty

o Thâm niên được tính bằng công thức: Năm hiện hành – Năm vào làm

- Xây dựng phương thức tính tiền lương, biết rằng:

Tiền lương = Lương cơ bản * Hệ số lương

- Xây dựng phương thức tính tiền thưởng, biết rằng:

Tiền thưởng = Thâm niên * 500000

- Phát ra thông báo nếu Hệ số lương có thay đổi.

Hình 1: Giao diện thể hiện Quản lý thông tin nhân viên

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 51/106

Hình 2: Giao diện thể hiện MessageBox xuất thông tin nhân viên sau khi nhấn nút Đồng ý

Hƣớng dẫn sử dụng:

Nhập thông tin của một nhân viên: Họ tên, Giới tính, Ngày sinh, Ngày vào làm, Hệ số

lương.

Nhấn vào nút chức năng Đồng ý Xuất thông tin thu nhập của nhân viên lên

MessageBox (Hình 2)

Nhấn vào nút Làm lại nếu muốn nhập thông tin nhân viên mới

Tóm tắt yêu cầu

Khai báo kiểu dữ liệu liệt kê

Tên kiểu: Phai

Danh sách giá trị: Nữ=0, Nam=1

Phạm vi sử dụng: public

Hướng dẫn:

public enum Phai {Nữ,Nam }

Thiết kế class - NhanVien

Folder lưu trữ: Bai07

Phạm vi sử dụng public

* Các thành phần trong class:

Khai báo delegate XuLy

Phạm vi sử dụng: public

Qui tắc xử lý:

Tên delegate: XuLy

Kiểu trả về: void

Tham số: noiDung kiểu String

Khai báo sự kiện (Event): sẽ phát sinh khi hệ số lương thay đổi

TangLuong kiểu delegate Xuly

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 52/106

Biến thành viên (Fields): lưu trữ thông tin

_HoTen: kiểu String

_NgaySinh: kiểu DateTime

_NgayVaoLam: kiểu DateTime

_HeSoLuong: kiểu double (mặc định là 1)

_GioiTinh: kiểu Phai (Phai là kiểu dữ liệu liệt kê)

_LuongCoBan kiểu double (mặc định là 830000)

Thuộc tính (Properties): truy xuất đến giá trị của các biến thành viên trong class

HoTen: kiểu String

NgaySinh: kiểu DateTime

NgayVaoLam: kiểu DateTime

HeSoLuong: kiểu double (phải >=1)

Khi giá trị thay đổi phát sinh sự kiện TangLuong với nội dung truyền đi

là “Bạn đã được tăng lương”

GioiTinh: kiểu Phai (Phai là kiểu dữ liệu liệt kê)

ThamNien: int (Chỉ đọc)

LuongCoBan kiểu double (áp dụng chung cho tất cả đối tượng NhanVien)

Phương thức khởi tạo (Constructors)

NhanVien()

NhanVien (string hoTen, DateTime ngaySinh, DateTime ngayVaoLam, Phai

gioiTinh, double heSoLuong)

Gán giá trị cho các thuộc tính tương ứng

Phương thức xử lý tính toán - Methods

TinhThuong

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: TinhThuong

o Kiểu trả về: double

o Tham số: Không có

Kết quả trả về: Tiền thưởng tính theo công thức

o Thâm niên * 500000

TinhLuong

Phạm vi sử dụng: public

Qui tắc xử lý:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 53/106

o Tên phương thức: TinhLuong

o Kiểu trả về: double

o Tham số: Không có

Kết quả trả về: Tiền lương tính theo công thức

o Lương cơ bản * Hệ số lương

ToString (override phương thức của lớp cơ sở)

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: ToString

o Kiểu trả về: String

o Tham số: Không có

Kết quả trả về: Thông tin chi tiết về thu nhập của nhân viên (Hình 2)

Thiết kế giao diện ngƣời dùng:

thThongTinNhanVien: Windows Form

Folder lưu trữ: Bai07

Name: frm01NhanVien

Text: Quản lý thông tin nhân viên

* Các thể hiện trong form:

thHoTen: TextBox

thGioiTinh: CheckBox

thNgaySinh: TextBox

thNgayVaoLam: TextBox

thHeSoLuong: TextBox

thThongBao: Label

thLuongCoBan: TextBox ( ReadOnly:True)

thDongY: Button

thLamLai: Button

Nhập:

Nhập thông tin nhân viên

Xuất:

Xuất thông tin thu nhập của nhân viên

Qui tắc xử lý :

Xử lý cho nút chức năng Đồng ý

Khai báo và khởi tạo biến đối tượng nv kiểu NhanVien

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 54/106

Khai báo sử dụng sự kiện TangLuong của đối tượng nv

Gán giá trị cho các thuộc tính của đối tượng nv

Gọi phương thức ToString() của đối tượng nv

Xuất kết quả lên MessageBox

Xử lý trong phương thức liên kết với sự kiện TangLuong

Khi sự kiện phát sinh xuất nội dung thông báo lên thThongBao

Xử lý cho nút chức năng Làm lại

Xóa nội dung của các thể hiện nhập liệu và thThongBao

Chuyển focus về thHoTen

Thuật giải

Không có

Hƣớng dẫn

- Không có

7.2. Xử lý Phân số mở rộng (Bài làm thêm)

Yêu cầu:

- Trong class PhanSo khai báo bổ sung sự kiện BaoLoi, phát sinh sự kiện khi và gởi thông

báo lổi ra bên ngoài khi giá trị gán cho thuộc tính MauSo là 0.

- Trong form bổ sung thêm phần khai báo sử dụng sự kiện BaoLoi. Khi sự kiện phát sinh

xuất thông báo lổi lên MessageBox.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 55/106

BÀI 8: Tính Thừa kế và Đa hình

Xây dựng class kế thừa và áp dụng kỹ thuật Late Binding

8.1. Quản lý thông tin nhân viên

Mô tả: Xây dựng ứng dụng quản lý lương của công ty Z.

- Thông tin của nhân viên gồm: Họ tên, Giới tính, Ngày sinh, Ngày vào làm, Hệ số lương,

Lương cơ bản, Thâm niên và Định mức số ngày vắng (mặc định là 3 ngày). Trong đó:

o Lương cơ bản: dùng chung cho tất cả các nhân viên trong công ty

o Thâm niên = Năm hiện hành – Năm vào làm

- Nhân viên của công ty được chia làm 2 loại:

o Nhân viên văn phòng: có thêm thông tin về Số ngày vắng và Đơn giá phạt cho

từng ngày vắng (mặc định là 100000/ngày). Các khoản phạt, thưởng và lương như

sau:

Tiền phạt: đơn giá phạt * Số ngày vắng vượt quá định mức.

Tiền thưởng: 10% của (Lương cơ bản * Hệ số lương)

Lương: (Lương cơ bản * Hệ số lương) + Tiền thưởng – Tiền phạt

o Nhân viên sản xuất: có thêm thông tin về Số ngày vắng , Số lượng sản phẩm, Định

mức sản phẩm (mặc định là 1000), và Đơn giá sản phẩm (mặc định là 10000/sản

phẩm). Riêng Định mức số ngày vắng sẽ tăng lên 2 ngày so với Nhân viên. Các

khoản thưởng và lương như sau:

Tiền thưởng: Số sản phẩm vượt định mức * đơn giá sản phẩm * 0.05

Tuy nhiên, nếu Số ngày vắng > Định mức vắng thì:

Tiền thưởng = Tiền thưởng - Số ngày vắng vượt quá định mức * (Tiền thưởng

*0.01)

Lương: (Lương cơ bản * Hệ số lương) + Tiền thưởng

Yêu cầu: xây dựng chương trình hỗ trợ nhập thông tin nhân viên, tính các khoản phạt,

thưởng, lương và xuất kết quả ra màn hình.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 56/106

Hình 1: Giao diện thể hiện Quản lý thông tin nhân viên

Hình 2: Giao diện thể hiện MessageBox sau khi nhấn nút Đồng ý

Hƣớng dẫn sử dụng:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 57/106

Nhập thông tin của một nhân viên, chọn loại nhân viên

Nhấn vào nút chức năng Đồng ý Xuất thông tin thu nhập của nhân viên lên

MessageBox (Hình 2)

Nhấn vào nút Làm lại nếu muốn nhập thông tin nhân viên mới

Tóm tắt yêu cầu

Thiết kế class - NhanVien

Folder lưu trữ: Bai08

Phạm vi sử dụng public

* Các thành phần trong class: (Tương tự class NhanVien bài 7.1 và bổ sung thêm)

Biến thành viên (Fields):

_DinhMucVang: kiểu int (Mặc định là 3)

Thuộc tính (Properties):

DinhMucVang: kiểu int (áp dụng chung cho tất cả đối tượng NhanVien)

Thiết kế class - NhanVienvp

Folder lưu trữ: Bai08

Phạm vi sử dụng public

Kế thừa từ class NhanVien

* Các thành phần trong class:

Biến thành viên (Fields):

_DinhMucVang: kiểu int

_SoNgayVang: kiểu int

_DonGiaPhat: kiểu int (Mặc định 100000)

Thuộc tính (Properties):

DinhMucVang: kiểu int (áp dụng chung cho tất cả đối tượng NhanVienvp)

SoNgayVang: kiểu int

DonGiaPhat: kiểu int (áp dụng chung cho tất cả đối tượng NhanVienvp)

Phương thức khởi tạo (Constructors)

NhanVienvp()

NhanVienvp (string hoTen, DateTime ngaySinh, DateTime ngayVaoLam, Phai

gioiTinh, double heSoLuong)

Gán giá trị cho các thuộc tính tương ứng

NhanVienvp (string hoTen, DateTime ngaySinh, DateTime ngayVaoLam, Phai

gioiTinh, double heSoLuong, int soNgayVang)

Gán giá trị cho các thuộc tính tương ứng

Phương thức xử lý tính toán - Methods

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 58/106

TinhPhat

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: TinhPhat

o Kiểu trả về: double

o Tham số: Không có

Kết quả trả về: Tiền phạt tính theo công thức

o Đơn giá phạt * Số ngày vắng vượt quá định mức

TinhThuong (override phương thức của lớp cha)

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: TinhThuong

o Kiểu trả về: double

o Tham số: Không có

Kết quả trả về: Tiền thưởng tính theo công thức

o 10% của (Lương cơ bản * Hệ số lương)

TinhLuong (override phương thức của lớp cha)

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: TinhLuong

o Kiểu trả về: double

o Tham số: Không có

Kết quả trả về: Tiền lương tính theo công thức

o (Lương cơ bản * Hệ số lương) + Tiền thưởng – Tiền phạt

ToString (override phương thức của lớp cơ sở)

Phạm vi sử dụng: public

Qui tắc xử lý:

o Tên phương thức: ToString

o Kiểu trả về: String

o Tham số: Không có

Kết quả trả về: Thông tin chi tiết về thu nhập của nhân viên văn phòng

gồm: Họ tên, Loại nhân viên, Tiền thưởng, Tiền phạt, Tiền lương, Thực

lãnh.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 59/106

Thiết kế class – NhanViensx (Tương tự)

Thiết kế giao diện ngƣời dùng:

thThongTinNhanVien: Windows Form

Folder lưu trữ: Bai08

Name: frm01NhanVien

Text: Quản lý thông tin nhân viên

* Các thể hiện trong form: (Tương tự bài 7.1, bổ sung thêm)

thLoaiNvvp: RadioButton

thLoaiNvsx: RadioButton

thSoNgayVang: TextBox

thSoSanPham: TextBox

Nhập:

Nhập thông tin nhân viên

Xuất:

Xuất thông tin thu nhập của nhân viên

Qui tắc xử lý :

Không có

Thuật giải

Không có

Hƣớng dẫn

Không có

8.2. Quản lý danh sách máy tính (Bài về nhà)

Yêu cầu: Xây dựng chương trình nhập và xuất danh sách Máy tính. Trong đó máy tính có 2

loại là Máy tính để bàn và Máy tính xách tay

Máy tính để bàn gồm các thông tin: Số hiệu, Đơn giá, Hãng sản xuất, CPU, RAM

Máy tính xách tay gồm các thông tin: Số hiệu, Đơn giá, Hãng sản xuất, Trọng lượng,

Thời gian PIN,Kích thước màn hình

Hƣớng dẫn

Xây dựng class MayTinh với các thông tin: Số hiệu, Đơn giá và Hãng sản xuất

Xây dựng phương thức Hiển thị thông tin: cho phép ghi đè (virtual) và trả về

chuỗi gồm các thông tin: Số hiệu, Đơn giá và Hãng sản xuất

Xây dựng class MayTinhDeBan được dẫn xuất từ lớp MayTinh gồm 2 thông tin:

CPU, RAM

Phương thức khởi tạo (tùy chọn)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 60/106

Xây dựng phương thức Hiển thị thông tin: cài đặt lại phương thức Hiển thị

thông tin của class MayTinh và cộng thêm thông tin về CPU và RAM

Xây dựng class MayTinhXachTay được dẫn xuất từ lớp MayTinh gồm các thông tin:

Trọng lượng, Thời gian PIN, Kích thước màn hình

Phương thức khởi tạo (tùy chọn)

Xây dựng phương thức Hiển thị thông tin: cài đặt lại phương thức tính Hiển thị

thông tin của class MayTinh và cộng thêm thông tin về: Trọng lượng, Thời

gian PIN và Kích thước màn hình.

Giao diện gợi ý:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 61/106

BÀI 9: Lớp trừu tƣợng, lớp giao tiếp

Xây dựng và sử dụng các class trừu tượng, lớp giao tiếp

Sử dụng các lớp giao tiếp được xây dựng sẵn trong C#

9.1. Quản lý các lớp hình học

Yêu cầu 1:

Xây dựng class trừu tượng HinhHoc với hai phương thức trừu tượng tính diện tích, chu vi và một phương thức cụ thể xuất thông tin như sau:

abstract class HinhHoc

{

public abstract double DienTich();

public abstract double ChuVi();

public virtual string XuatThongTin()

{

return "Thông tin của hình ";

}

}

Xây dựng các lớp hình tròn, hình chữ nhật, hình tam giác kế thừa lớp trừu tượng HinhHoc với

Thông tin của hình tròn có: Bán kính Thông tin của chữ nhật có: Chiều dài và chiều rộng Thông tin của hình tam giác có: Cạnh A, cạnh B và cạnh C

Hƣớng dẫn:

Xây dựng lớp HinhTron được dẫn xuất từ lớp HinhHoc:

class HinhTron : HinhHoc

{

public double Bankinh { get; set; }

public override double Chu_vi()

{

return Math.PI * 2 * Bankinh;

}

public override double Dien_tich()

{

return Math.PI * Bankinh * Bankinh;

}

public override string Xuat_thong_tin()

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 62/106

{

return base.Xuat_thong_tin() + "Tròn";

}

}

Xây dựng lớp HinhChuNhat, HinhTamGiac được dẫn xuất từ lớp HinhHoc tương tự như trên

Yêu cầu 2: Xây dựng form nhập, tính toán và xuất chu vi, diện tích của hình tròn, hình chữ nhật và hình tam giác.

Hình 1: màn hình quản lý đối tượng hình học

Hƣớng dẫn sử dụng:

Chọn loại hình trên radio button rồi nhập thông tin theo yêu cầu của hình và Click nút

Tính để tính chu vi và diện tích của hình được chọn.

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thQuanLyDoiTuongHinhHoc: form (name="frm01HinhHoc.cs")

Text: Quản lý đối tượng hình học

* (Các thể hiện phía dưới đều nằm trong form)

thHinhTron: Radio (nhập liệu)

thHinhChuNhat: Radio (nhập liệu)

thHinhTamGia: Radio (nhập liệu)

thBanKinh: TextBox (nhập liệu)

thChieuDai: TextBox (nhập liệu)

thChieuRong: TextBox (nhập liệu)

thCanhA: TextBox (nhập liệu)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 63/106

thCanhB: TextBox (nhập liệu)

thCanhC: TextBox (nhập liệu)

thTinh: Button (xử lý)

thChuVi: TextBox (xuất thông tin)

thDienTich: TextBox (xuất thông tin)

Nhập:

Loại hình

Thông tin theo loại hình chọn

Xuất:

Tên hình, chu vi, diện tích

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

Xử lý sự kiện click của nút Tính:

HinhHoc h;

if (rdoHinhTron.Checked == true)

{

double bankinh = double.Parse(txtBK.Text);

h = new HinhTron { Bankinh = bankinh };

}

else if (rdoHinhChuNhat.Checked == true)

{

double dai = double.Parse(txtCD.Text);

double rong = double.Parse(txtCR.Text);

h = new HinhChuNhat { Chieudai = dai, Chieurong = rong };

}

else

{

double a = double.Parse(txtCa.Text);

double b = double.Parse(txtCb.Text);

double c = double.Parse(txtCc.Text);

h = new HinhTamGiac { CanhA = a, CanhB = b, CanhC = c };

}

lblThongtin.Text = h.Xuat_thong_tin();

txtCV.Text = h.Chu_vi().ToString("#,##0.00");

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 64/106

txtDT.Text = h.Dien_tich().ToString("#,##0.00");

9.2. Quản lý đối tƣợng hình học

Yêu cầu 1:

Xây dựng lớp trừu tượng HinhHoc kế thừa giao tiếp IComparable đã xây dựng sẵn

trong C# và định nghĩa phương thức CompareTo.

abstract class HinhHoc : IComparable

{

public int CompareTo(object obj)

{

HinhHoc hh = (HinhHoc)obj;

//if (ChuVi() > hh.ChuVi())

// return 1;

//else if (ChuVi() < hh.ChuVi())

// return -1;

if (DienTich() > hh.DienTich())

return 1;

else if (DienTich() < hh.DienTich())

return -1;

return 0;

}

}

Xây dựng các lớp HinhTron, HinhChuNhat, HinhTamGiac: giống bài 9.1

Yêu cầu 2:

Xây dựng form nhập, tính toán và xuất chu vi, diện tính của hình tròn, hình chữ nhật

và hình tam giác có sắp xếp theo chu vi hoặc diện tích.

So sánh theo diện tích

So sánh theo chu vi

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 65/106

Hình 2: Màn hình quản lý đối tượng hình học

Hƣớng dẫn sử dụng:

Nhập thông tin của hình rồi chọn thêm.

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thQuanLyDoiTuongHinhHoc: form (name="frm02HinhHoc.cs")

* (Các thể hiện phía dưới đều nằm trong form)

thBanKinh: TextBox (nhập liệu)

thThemHinhTron: Button (xử lý)

thChieuDai: TextBox (nhập liệu)

thChieuRong: TextBox (nhập liệu)

thThemHinhChuNhat: Button (xử lý)

thCanh1: TextBox (nhập liệu)

thCanh2: TextBox (nhập liệu)

thCanh3: TextBox (nhập liệu)

thThemHinhTamGiac: Button (xử lý)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 66/106

thSapXep: Button (xử lý)

Nhập:

Thông tin của hình

Xuất:

Tên hình, chu vi, diện tích

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

Khai báo các biến toàn cục trong màn hình

HinhHoc[] h;

int sopt=0;

Xử lý Form_Load

h=new HinhHoc[sopt];

Xử lý xuất danh sách hình học

public void Xuat()

{

StringBuilder sb = new StringBuilder();

for (int i = 0; i < h.Length; i++)

sb.AppendLine(h[i].Xuat_thong_tin());

txtkq.Text = sb.ToString();

}

Xử lý Button Thêm hình tròn

Array.Resize<HinhHoc>(ref h, sopt + 1);

double bankinh = double.Parse(txtbankinh.Text);

h[sopt] = new HinhTron { Bankinh = bankinh };

sopt++;

Xuat();

Xử lý Button Thêm hình chữ nhật

Array.Resize<HinhHoc>(ref h, sopt + 1);

double dai = double.Parse(txtdai.Text);

double rong = double.Parse(txtrong.Text);

h[sopt] = new HinhChuNhat { Chieudai= dai, Chieurong= rong };

sopt++;

Xuat();

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 67/106

Xử lý Button Thêm hình tam giác

Array.Resize<HinhHoc>(ref h, sopt + 1);

double a = double.Parse(txta.Text);

double b = double.Parse(txtb.Text);

double c = double.Parse(txtc.Text);

h[sopt] = new HinhTamGiac { CanhA=a, CanhB=b, CanhC=c };

sopt++;

Xuat();

Xử lý Button Sắp xếp

Array.Sort(h);

Xuat();

Lưu ý: Học viên sửa lại phương thức Xuat_thong_tin cho phù hợp với bài tập này

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 68/106

BÀI 10: Collections và Generic

Sử dụng các lớp Collection và Generic Collection trong C#

10.1. Quản lý danh sách học viên

Yêu cầu: Tạo form để sử dụng đối tượng ArrayList như hình sau

Hình 1: Lúc mới mở màn hình

Hƣớng dẫn sử dụng:

Click Thêm HV mới trong hình 1 để thêm danh sách học viên mới vào danh sách học viên cũ sau đó sắp xếp lại như hình 2

Tóm tắt yêu cầu:

Thiết kế giao diện ngƣời dung

thQuanLyDSHV: form (name = frm01DSHV.cs)

Text: Danh sách học viên

Các thể hiện phía dưới đều nằm trên form

thDSHVCu: TextBox (xuất thông tin)

thDSHVMoi: TextBox (xuất thông tin)

thThemHVMoi: Button (xử lý)

Nhập

Không có

Xuất

Danh sách học viên cũ có học viên mới

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 69/106

Hình 2: Kết quả sau khi thêm HV mới

Qui tắc xử lý

Không có

Thuật giải

Không có

Hƣớng dẫn

Khai báo 2 biến toàn cục lưu danh sách học viên

ArrayList hocVien = new ArrayList();

ArrayList hocVienMoi = new ArrayList();

Xử lý sự kiện Form Load:

private void frm01DSHV_Load(object sender, EventArgs e)

{

//Khởi tạo ArrayList chứa danh sách tên các học viên trong lớp

hocVien.Add("Nguyễn Bảo Anh");

hocVien.Add("Phạm Chi Bảo");

hocVien.Add("Phạm Lan Chi");

hocVien.Add("Trần Văn Hùng");

hocVien.Add("Nguyễn Dung");

hocVien.Add("Hoàng Ngọc Linh");

hocVien.Add("Trần Anh Tài");

// hiển thị danh sách học viên cũ

StringBuilder sb = new StringBuilder();

for (int i = 0; i < hocVien.Count; i++)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 70/106

sb.AppendLine(hocVien[i].ToString());

txtDSHVCu.Text = sb.ToString();

// Khởi tạo ArrayList chứa danh sách tên của các học viên mới

hocVienMoi.Add("Đỗ Thiên Nga");

hocVienMoi.Add("Phạm Quỳnh Anh");

hocVienMoi.Add("Lê Quỳnh Hoa");

hocVienMoi.Add("Lý Thiên Thanh");

hocVienMoi.Add("Nguyễn Dung");

// hiển thị danh sách học viên mới

sb = new StringBuilder();

for (int i = 0; i < hocVienMoi.Count; i++)

sb.AppendLine(hocVienMoi[i].ToString());

txtDSHVMoi.Text = sb.ToString();

}

Nút Thêm HV mới:

private void btnThemMoi_Click(object sender, EventArgs e)

{

//thêm mới và sắp xếp

for (int i = 0; i < hocVienMoi.Count; i++)

hocVien.Add(hocVienMoi[i]);

hocVien.Sort();

//xuất ra màn hình

StringBuilder sb = new StringBuilder();

for (int i = 0; i < hocVien.Count; i++)

sb.AppendLine(hocVien[i].ToString());

txtDSHVCu.Text = sb.ToString();

}

10.2. Quản lý danh sách học viên

Yêu cầu: Tạo form để thêm danh sách học viên mới vào danh sách học viên cũ. Thông tin học viên có Mã học viên và Họ tên học viên sử dụng đối tượng SortedList để quản lý danh sách.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 71/106

Hình 3: Màn hình lúc mới mở

Hƣớng dẫn sử dụng:

Click Thêm HV mới để thêm danh sách học viên mới vào danh sách học viên cũ

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thDanhSachHocVien: form (name="frm02DSHV.cs")

Text: Danh sách học viên

* (Các thể hiện phía dưới đều nằm trong form)

thDSHVCu: TextBox (xuất thông tin)

thDSHVMoi: TextBox (xuất thông tin)

thThemHVMoi: Button (xử lý)

Nhập:

Không có

Xuất:

Danh sách học viên cũ như sau

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 72/106

Hình 4: màn hình sau khi thêm HV mới

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

- Khai báo 2 biến SortedList toàn cục lưu 2 danh sách học viên

SortedList hocVien = new SortedList();

SortedList hocVienMoi = new SortedList();

- Xử lý sự kiện Form Load:

private void frm02DSHV_Load(object sender, EventArgs e)

{ //Tạo danh sách học viên cũ hocVien.Add("001", "Nguyễn Bảo Anh"); hocVien.Add("003", "Phạm Chi Bảo");

… //Tạo danh sách học viên mới hocVienMoi.Add("002", "Đỗ Thiên Nga");

hocVienMoi.Add("005", "Phạm Quỳnh Anh"); …

// Xuất danh sách học viên ra màn hình StringBuilder sb = new StringBuilder();

for (int i = 0; i < hocVien.Count; i++)

sb.AppendLine(hocVien.GetKey(i).ToString() + " " + hocVien.GetByIndex(i).ToString()); txtDSHVCu.Text = sb.ToString();

//Tương tự xuất danh sách học viên mới ra màn hình …. }

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 73/106

- Xử lý nút Thêm HV mới:

private void btnThemMoi_Click(object sender, EventArgs e)

{

for (int i = 0; i < hocVienMoi.Count; i++) hocVien.Add(hocVienMoi.GetKey(i).ToString(), hocVienMoi.GetByIndex(i).ToString());

StringBuilder sb = new StringBuilder();

for (int i = 0; i < hocVien.Count; i++)

sb.AppendLine(hocVien.GetKey(i).ToString() + " " + hocVien.GetByIndex(i).ToString());

txtDSHVCu.Text = sb.ToString();

}

10.3. Chuyển số thành chữ

Yêu cầu: Tạo form chuyển số thành chữ ứng dụng kiểu HashTable

Hình 3: Màn hình chuyển số thành chữ

Hƣớng dẫn sử dụng:

Nhập chuỗi số rồi Click nút Đồng ý để xem kết quả các số bằng chữ

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thChuyenSoThanhChu: form (name="frm03SoChu.cs")

* (Các thể hiện phía dưới đều nằm trong form)

thChuoiKySo: TextBox (nhập liệu)

thKetQua: TextBox (nhập liệu)

thDongY: Button (xử lý)

Nhập:

Chuỗi ký số

Xuất:

Chữ của các số

Qui tắc xử lý:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 74/106

Không có

Thuật giải

Không có

Hƣớng dẫn

Xử lý nút Đồng ý

//Khai báo mảng chuỗi các ký số:

string[] kySo ={"0","1","2","3","4","5","6","7","8","9" };

//Khai báo mảng chuỗi các chuỗi ký tự tương ứng với các ký số

string[] kyTu = { "Không", "Một", "Hai", "Ba", "Bốn", "Năm", "Sáu", "Bảy", "Tám", "Chín" };

//Tạo HashTable với mảng chuỗi ký số là key và chuỗi ký tự là value

Hashtable h = new Hashtable();

for (int i = 0; i < kySo.Length; i++)

h.Add(kySo[i], kyTu[i]);

string chuoiSo = txtso.Text;

string chuoi = "";

for (int i = 0; i < chuoiSo.Length; i++)

chuoi += h[chuoiSo[i].ToString()]+" ";

txtChuoi.Text = chuoi;

10.4. Đọc 3 số (Bài về nhà)

Yêu cầu: Tạo form chuyển 3 số thành chữ có sử đối tượng HashTable

Hình 4: Màn hình đọc 3 số

Hƣớng dẫn sử dụng:

Nhập chuỗi ký số rồi Click nút Đồng ý để xem kết quả số được đọc

Tóm tắt yêu cầu

Thiết kế giao diện ngƣời dùng:

thDoc3So: form (name="frm03Doc3So.cs")

* (Các thể hiện phía dưới đều nằm trong form)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 75/106

thChuoiKySo: TextBox (nhập liệu)

thKetQua: TextBox (xuất thông tin)

thDongY: Button (xử lý)

Nhập:

Chuỗi ký số

Xuất:

Số được đọc là…

Qui tắc xử lý:

Không có

Thuật giải

Không có

Hƣớng dẫn

Không có

10.5. Bài về nhà

Mục tiêu: Sử dụng đối tượng kiểu Generic Colections

Yêu cầu: Thực hiện lại các bài tập trên, sử dụng Generic Collections.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 76/106

BÀI 11: Các kiến thức cơ bản về SQL Server

Mục tiêu chính:

Kiến thức cơ bản về môi trường SQL Server và tiện ích SQL Server Management Studio (SSMS)

Viết các câu lệnh truy vấn dữ liệu trên các bảng

Viết các câu lệnh cập nhật dữ liệu trên các bảng

11.1. Sử dụng cơ sở dữ liệu QLPHIM

Yêu cầu: Sử dụng tiện ích SQL Server Management Studio (SSMS), Attach cơ sở dữ liệu được

cung cấp lên server

Mô tả

Cơ sở dữ liệu Quản lý phim cho phép lưu trữ thông tin các phim và quản lý lập lịch

chiếu phim của rạp chiếu phim xyz.

Cấu trúc các bảng

Các cột được gạch dưới và in đậm là khóa chính của bảng

PHONG – Danh mục phòng chiếu phim

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID phòng

Ten nvarchar 200 False Tên phòng

PHIM – Danh mục phim

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID phim

Ten nvarchar 50 False Tên phim

Dao_dien nvarchar 30 True Đạo diễn

Dien_vien nvarchar 100 True Diễn viên

The_loai nvarchar 30 True Thể loại

Phien_ban nvarchar 30 True Phiên bản

Hang_phim nvarchar 50 True Hãng phim

Nuoc_san_xuat nvarchar 30 True Nước sản xuất

Do_dai int True Độ dài phim

Poster varchar 30 True Poster quảng cáo

Gioi_thieu nvarchar max True Giới thiệu

LICH_CHIEU – Lịch chiếu

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID lịch chiếu

Ngay_bat_dau datetime False Ngày bắt đầu

Ngay_ket_thuc datetime False Ngày kết thúc

BAO_GOM – Bao gồm

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 77/106

Column Name Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID bao gồm

ID_LICH_CHIEU int False ID lịch chiếu

ID_PHIM int False ID phim

XUAT_CHIEU – Xuất chiếu

Column Name Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID xuất chiếu

Ngay datetime False Ngày chiếu

ID_LICH_CHIEU int False ID lịch chiếu

ID_PHIM int False ID phim

ID_PHONG int False ID phòng

ID_CA_CHIEU int False ID ca chiếu

CA_CHIEU – Ca chiếu

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID ca chiếu

Gio_bat_dau int False Giờ bắt đầu

Phut_bat_dau int False Phút bắt đầu

So_phut int False Số phút

GHE – Ghế

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID ghế

x int False Hàng

y int False Dãy

ID_PHONG int False ID phòng

VE – Vé

Column Name Data Type

Length Is Identity Allow Nulls

Description

ID int Yes False ID vé

Trang_thai bit False Trạng thái

ID_XUAT_CHIEU int False ID xuất chiếu

ID_GHE int False ID ghế

CONG_TY – Danh sách công ty

Column Name Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID công ty

Ten nvarchar 200 False Tên công ty

Dien_thoai nvarchar 20 True Điện thoại

Dia_chi nvarchar 200 True Địa chỉ

So_tuan_lap_lich int False Số tuần lập lịch

NHOM_NGUOI_DUNG – Nhóm ngƣời dùng

Column Name

Data Type Length Is Identity Allow Nulls

Description

ID int Yes False ID nhóm người

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 78/106

dùng

Ten nvarchar 200 False Tên nhóm người dùng

Ma_so nvarchar 200 Mã số nhóm người dùng

NGUOI_DUNG – Ngƣời dùng

Column Name Data Type

Length Is Identity

Allow Nulls

Description

ID int Yes False ID người dùng

Ten nvarchar 250 False Tên người dùng

Ma_khau nvarchar 250 False Mật khẩu

ID_NHOM_NGUOI_DUNG int False ID nhóm người dùng

Database Diagram

Hình 1: QLPHIM Database Diagram

11.2. Truy vấn dữ liệu – đơn giản trên một bảng

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn trên dữ liệu lưu trữ trong

database QLPHIM.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 79/106

a. Liệt kê thông tin của tất cả phim hiện có trong danh mục phim.

b. Liệt kê thông tin của 5 phim đầu tiên trong danh mục gồm: Tên phim, đạo diễn, diễn

viên, nước sản xuất.

c. Liệt kê thông tin của phim gồm: Tên phim, đạo diễn, diễn viên, nước sản xuất. Sắp

xếp theo tên phim tăng dần

d. Liệt kê thông tin của phim gồm: tên phim, đạo diễn, diễn viên, độ dài. Sắp xếp theo

độ dài giảm dần, tên phim tăng dần.

e. Liệt kê tên phim của các phim do “Việt Nam” sản xuất

f. Liệt kê tên phim, diễn viên của các phim thuộc thể loại “Hài hước” có diễn viên “Hoài

Linh” tham gia.

g. Liệt kê thông tin các phim có thời lượng (độ dài) từ 95 đến 120 phút.

11.3. Truy vấn dữ liệu – trên nhiều bảng

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn trên dữ liệu lưu trữ trong

database QLPHIM.

a. Liệt kê thông tin gồm: tên phim, ngày chiếu, ID_CA_CHIEU , ID_PHONG của phim

“Qúy tử bất đắc dĩ ”. (Ngày chiếu thể hiện theo dạng dd/MM/yyyy)

b. Liệt kê tên của các phim chiếu trong ngày 14/2/2015. ( không thể hiện nội dung trùng

lắp nếu có).

c. Liệt kê tên của các phim đã được sắp lịch chiếu.

d. Liệt kê tên của các phim chưa được sắp lịch chiếu.

e. Liệt kê thông tin lịch chiếu phim gồm: PHIM.ID,Tên phim , Ngày bắt dầu, Ngày kết

thúc. (Ngày thể hiện theo dạng dd/MM/yyyy)

f. Liệt kê tên phim, tên phòng, ID_CA_CHIEU, giờ bắt đầu chiếu của các phim được

chiếu trong tháng 2 năm 2015.

11.4. Truy vấn thống kê

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn trên dữ liệu lưu trữ trong

database QLPHIM.

a. Hãy cho biết tổng số phim hiện có trong danh mục.

b. Hãy cho biết tổng số phim Việt Nam hiện có trong danh mục.

c. Hãy cho biết Tổng số vé bán được trong xuất chiếu 2.

d. Hãy cho biết Tổng số vé, Tổng số vé đã bán, Tổng số vé chưa bán trong xuất chiếu 2.

e. Thống kê tổng số phim theo từng nước sản xuất.

11.5. Truy vấn cập nhật dữ liệu – Thêm mẫu tin

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 80/106

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn cập nhật thêm mẫu tin vào

bảng lưu trữ trong database QLPHIM.

a. Trong bảng PHONG, thêm một phòng mới với tên là Phòng C.

b. Trong bảng PHIM thêm thông tin của một phim mới.

c. Trong bảng LICH_CHIEU thêm thông tin về lịch chiếu cho phim vừa mới thêm ở câu b.

Với thông tin lịch chiếu là phim sẽ được chiếu trong tuần lễ từ ngày 6/3/2015 đến

12/3/2015.

d. Phát sinh vé cho ID_XUAT_CHIEU số 4 với trạng thái vé là False.

11.6. Truy vấn cập nhật dữ liệu – Sửa mẫu tin

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn cập nhật sửa thông tin mẫu

tin lưu trữ trong database QLPHIM.

a. Cập nhật trạng thái là true cho vé có ID là 500 bảng VE.

b. Cập nhật lại ID_PHIM số 15 thành 2 cho tất cả các xuất chiếu trong tháng 2 năm 2015

c. Cập nhật lại thông tin cho các vé có ID_GHE từ 100 đến 200 của ID_XUAT_CHIEU số

4 với trạng thái là true (đã bán).

11.7. Truy vấn cập nhật dữ liệu – Hủy mẫu tin

Yêu cầu: Sử dụng câu lệnh truy vấn SQL thực hiện các truy vấn cập nhật hủy thông tin mẫu

tin lưu trữ trong database QLPHIM.

a. Hủy thông tin Phòng C.

b. Hủy thông tin của phim có ID_PHIM là 13.

c. Hủy thông tin các phim có tên bắt đầu với từ “PHIM” và chưa được sắp lịch chiếu.

d. Hủy tất cả vé của ID_XUAT_CHIEU số 4.

11.8. Tạo cơ sở dữ liệu QLSV (bằng tiện ích SSMS) (Bài tập về nhà)

Mô tả

Cơ sở dữ liệu Quản lý Sinh viên cho phép lưu trữ thông tin các sinh viên trong các khoa và kết quả học tập của các sinh viên theo môn học

Tạo cấu trúc các bảng

Các Field được gạch dưới và in đậm là khóa chính của bảng

Khoa – Danh mục khoa

Field Name Field Type Field Size Format Description KhoaID Char 2 Mã khoa

TenKhoa NVarchar 50 Tên khoa

MonHoc – Danh mục môn học

Field Name Field Type Field Size Format Description

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 81/106

MonHocID Char 2 Mã môn

TenMonHoc NVarchar 50 Tên môn

SinhVien – Danh mục sinh viên

Field Name Field Type Field Size Format Description SinhVienID Char 3 Mã sinh viên

HoSinhVien NVarchar 30 Họ

TenSinhVien NVarchar 20 Tên

NgaySinh DateTime Ngày sinh

GioiTinh Bit True: Nam; False: Nữ

DiaChi NVarchar 50 Địa chỉ

HocBong Int Học bổng

KhoaID Char 2 Mã khoa

KetQua – Kết quả học tập

Field Name Field Type Field Size Format Description SinhVienID Char 3 Mã sinh viên

MonHocID Char 2 Mã môn

Diem Real Điểm

Tạo Database Diagram với các quan hệ theo mô tả sau:

Bảng cha Khoa và bảng con SinhVien quan hệ theo cột KhoaID

Bảng cha SinhVien và bảng con KetQua quan hệ theo cột SinhVienID

Bảng cha MonHoc và bảng con KetQua quan hệ theo cột MonHocID

Nhập dữ liệu mẫu

Khoa

Mã khoa Tên khoa CN Khoa Công nghệ thông tin

TO Khoa Toán

VL Khoa Lý

MonHoc

Mã môn Tên môn

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 82/106

CO Cơ lý thuyết

CS Cơ sở dữ liệu

CT Cấu trúc dữ liệu

LT Lượng tử

RR Toán rời rạc

TC Toán cao cấp

TT Trí tuệ nhân tạo

SinhVien

Mã Họ Tên Ngày sinh Giới tính Học bổng Mã khoa C00 Nguyễn Thị Trang 13/8/1991 False 100000 CN

C01 Hà Tuấn 24/2/1991 True 0 CN

C02 Trần Ngọc Hoà 11/6/1990 False 120000 CN

C03 Bùi Thị Thảo 26/2/1990 False 100000 CN

C04 Nguyễn Hoàng Hưng 19/3/1990 True 150000 CN

T00 Lê Tuấn 15/2/1991 True 0 TO

T01 Bùi Minh Khánh 9/4/1990 True 120000 TO

T02 Trần Thị Lan 4/3/1990 False 100000 TO

T03 Lê Thiện 18/5/1990 True 0 TO

T04 Lê Thị Thảo 27/3/1990 False 120000 TO

KetQua

Mã sinh viên Mã môn học Điểm C00 CS 10

C00 CT 9

C00 TT 7

C00 RR 8.5

C01 CS 7

C01 CT 6

C01 TT 7

C01 RR 9

C02 CS 7.5

C02 CT 4

C02 TT 5

C02 RR 3

C03 CS 9

C03 CT 1

C03 TT 8.5

C03 RR 9

C04 CS 2

C04 CT 1

11.9. Truy vấn dữ liệu (bằng câu lệnh) (Bài tập về nhà)

Ghi chú: các bài có đánh dấu (*) là bài về nhà

Truy vấn đơn giản

a. Liệt kê danh sách sinh viên gồm các cột Mã, Họ và Tên, Ngày sinh, Giới tính, Học bổng.

Có sắp tăng theo cột học bổng

Mẫu:

Mã Họ tên Ngày sinh Phái Học bổng

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 83/106

C00 Nguyễn Thị Trang 8/13/1991 Nữ 100000

C04 Nguyễn Hoàng Hưng 3/19/1990 Nam 150000

Hƣớng dẫn: thể hiện cột Phái là Nam/Nữ

CASE WHEN GioiTinh='true' THEN 'Nam' ELSE N'Nữ' END

b. Liệt kê danh sách sinh viên gồm các cột Mã, Họ, Tên, Ngày sinh, Giới tính, Học bổng. Chỉ

liệt kê các sinh viên học khoa “Công nghệ thông tin” và có học bổng >3,000,000

c. Liệt kê danh sách sinh viên gồm các cột Mã, Họ, Tên, Ngày sinh, Giới tính, Học bổng. Chỉ

liệt kê các sinh viên có tên bắt đầu là „T‟

d. Liệt kê danh sách sinh viên gồm các cột Mã, Họ, Tên, Ngày sinh, Giới tính, Học bổng. Chỉ

liệt kê các sinh viên có học bổng từ 100000 đến 120000

e. Liệt kê danh sách sinh viên gồm các cột Mã, Họ, Tên, Ngày sinh, Học bổng. Chỉ liệt kê các

sinh viên có học bổng và ngày sinh nằm trong khoảng [1/6/1990, 30/6/1991]

f. Hiển thị danh sách 10 sinh viên đầu tiên có học bổng từ cao đến thấp (Hướng dẫn: dùng

TOP 10 và ORDER BY … DESC)

Truy vấn trên nhiều bảng

a. Liệt kê danh sách sinh viên gồm các cột mã, họ, tên, ngày sinh, giới tính, mã khoa, tên

khoa

b. Liệt kê kết quả học tập gồm các cột mã sinh viên, họ và tên, mã môn học, điểm

c. Liệt kê danh sách các sinh viên (gồm các cột mã, họ tên, ngày sinh) có học môn „Cơ sở

dữ liệu‟

d. Liệt kê danh sách các sinh viên (gồm các cột mã, họ tên, ngày sinh) đạt điểm 10 trong

bài thi

e. Liệt kê danh sách các sinh viên (gồm các cột mã, họ tên, ngày sinh) có điểm thi môn

„Toán cao cấp‟ nhỏ hơn 5 (*)

f. Cho biết danh sách các môn học chưa có sinh viên đăng ký (*)

g. Cho biết danh sách các sinh viên (gồm các cột mã, họ tên, ngày sinh) chưa đăng ký học

môn học nào (*)

Truy vấn có nhóm

a. Thống kê tổng số sinh viên theo khoa. Có sắp tăng theo tổng số sinh viên

Mẫu:

Mã khoa Tổng số sinh viên

TO 30

CN 40

b. Thống kê tổng học bổng theo khoa. Chỉ hiển thị những khoa có tổng học bổng >=3,000,000

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 84/106

Mẫu:

Mã khoa Tên khoa Tổng học bổng

CN Khoa Công nghệ thông tin 3,500,000

c. Hiển thị danh sách sinh viên gồm mã, họ tên và điểm trung bình các môn học mà sinh

viên có đăng ký học

d. Hiển thị danh sách khoa gồm mã khoa, tên khoa và điểm trung bình của tất cả các sinh

viên trong khoa

e. Hiển thị danh sách sinh viên gồm mã, họ tên, điểm trung bình và kết quả xếp loại học tập

của sinh viên, trong đó kết quả xếp loại học tập được xét dựa trên điểm trung bình theo

quy tắc sau: (*)

Điều kiện Xếp loại

Điểm trung bình < 5 Yếu

5 <= Điểm trung bình < 6.5 Trung bình

6.5 <= Điểm trung bình < 8 Khá

Điểm trung bình >= 8 Giỏi

f. Hiển thị danh sách các môn học cùng với điểm thi cao nhất mà sinh viên đã đạt được

trong môn học đó, kết quả trả về gồm mã môn, tên môn, điểm thi cao nhất của sinh viên

(*)

g. Hiển thị danh sách các môn học cùng với số lượng sinh viên đã đăng ký học các môn học

đó, kết quả trả về gồm mã môn, tên môn, số lượng sinh viên đã đăng ký (*)

h. Hiển thị danh sách các môn học có số lượng sinh viên đăng ký học đông nhất, kết quả trả

về gồm mã môn, tên môn và số lượng sinh viên đăng ký (*)

i. Thống kê số lượng sinh viên đậu và rớt của từng môn, biết rằng sinh viên rớt khi điểm thi

nhỏ hơn 5, kết quả trả về gồm mã môn, tên môn, số sinh viên đậu, số sinh viên rớt (*)

11.10. Truy vấn cập nhật dữ liệu (Bài tập về nhà)

Thêm mẩu tin

a. Thêm một khoa mới vào bảng Khoa với các thông tin sau:

Mã khoa: HO

Tên khoa: Khoa Hoá

b. Thêm một sinh viên mới vào bảng SinhVien với các thông tin sau:

Mã sinh viên: H01

Họ và tên: Lê Thanh Tùng

Ngày sinh: 23/1/1992

Giới tính: Nam

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 85/106

Địa chỉ: 122 Lý Chính Thắng

Học bổng: 100,000

Mã khoa: HO

c. Thêm các điểm thi của sinh viên có mã „H01‟ vào bảng KetQua với các thông tin sau:

Mỗi điểm thi sẽ tương ứng với một mã môn học trong bảng MonHoc

Mặc định điểm thi là 6

Sửa mẩu tin

a. Cập nhật ngày sinh của sinh viên „Hà Tuấn‟ thành 05/07/1980

b. Tăng học bổng lên 5% cho các sinh viên học khoa „Công nghệ thông tin‟ và có học bổng

>0

c. Cập nhật học bổng là 50,000 cho các sinh viên nữ học khoa „Công nghệ thông tin‟ và chưa

có học bổng

d. Cộng thêm 5 điểm môn „Trí Tuệ Nhân Tạo‟ cho các sinh viên thuộc khoa „Anh văn‟. Điểm

tối đa của môn là 10

Xóa mẩu tin

a. Xoá các kết quả học tập của sinh viên có mã „H01‟

b. Xoá sinh viên có mã „H01‟

c. Xóa tất cả nam sinh viên của khoa Tin học trong bảng SinhVien (nhận xét: có xóa được không?)

d. Xóa các kết quả học tập của những sinh viên nào có điểm các môn <5.

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 86/106

BÀI 12: LINQ cơ bản

Sử dụng LINQ viết một truy vấn đơn giản có nguồn là một Collection

Sử dụng LINQ viết một truy vấn phức tạp: giới hạn dữ liệu, nối kết các tập dữ liệu, …

Tạo ra các đối tượng có kiểu vô danh (Anonymous Type)

12.1. Viết các câu truy vấn từ một mảng

Mục tiêu:

Viết các câu truy vấn có nguồn là mảng

Sử dụng các toán tử: where, orderby, select

Yêu cầu: Sau khi truy vấn các mảng, hãy xuất kết quả ra TextBox

a. Cho mảng nguyên sau:

int[] Mangso = { 50, 42, 16, 3, 9, 8, 12, 7, 24, 0 };

1. Hãy liệt kê các phần tử chia hết cho 4 và 3

2. Hãy liệt kê các phần tử nhỏ hơn hoặc bằng 3

3. Hãy liệt kê các phần tử thành một mảng mới với điều kiện là: nếu phần tử là số chẵn

thì chia đôi, ngược lại thì giữ nguyên giá trị. Kết quả in ra như sau:

25, 21, 8, 3, 9, 4, 6, 7, 12, 0

b. Cho mảng chuỗi sau: (Bài về nhà)

string[] Mangchuoi = {"đầu", "lòng", "hai", "ả", "tố", “nga", "Thúy", "Kiều", "là", "chị",

"em","là", "Thúy", "Vân"};

1. Hãy liệt kê các phần tử có 4 ký tự và sắp xếp tăng dần theo ký tự đầu tiên

2. Hãy liệt kê các phần tử và thể hiện thông tin có dạng: <chữ thừơng> - <CHỮ

HOA>

đầu - ĐẦU

lòng - LÒNG

hai - HAI

ả - Ả

tố - TỐ

nga - NGA

thúy - THÚY

kiều - KIỀU

là - LÀ

chị - CHỊ

em - EM

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 87/106

là - LÀ

thúy - THÚY

vân - VÂN

3. Hãy liệt kê các phần tử có chứa chữ “u”

4. Hãy liệt kê các phần tử “Thúy Kiều Thúy Vân” trong mảng trên (gợi ý: Ký tự đầu tiên

bắt đầu bằng chữ in)

12.2. Viết các câu truy vấn thống kê từ một mảng

Mục tiêu:

Viết các câu truy vấn thống kê có nguồn là mảng

Sử dụng các phương thức mở rộng: Count, Sum, Average, Min, Max và GroupBy

Yêu cầu: Sau khi truy vấn các mảng, hãy xuất kết quả ra TextBox

a. Cho mảng nguyên sau:

int[] Mangso = { 50, 42, 12, 3, 9, 8, 1, 50, 3, 42, 85 };

1. Hãy cho biết: Tổng số phần tử, số phần tử chẵn, số phần tử lẻ

2. Hãy cho biết: Tổng trị giá của mảng, phần tử có giá trị lớn nhất, nhỏ nhất

(Lưu ý: 2 câu trên được làm bằng 3 câu truy vấn riêng biệt nhưng xuất kết quả cùng lúc)

3. Hãy cho biết có bao nhiêu phần tử khác nhau, không tính số phần tử bị trùng giá trị

4. Hãy liệt các phần tử trong một nhóm có số dư bằng nhau sau khi chia hết cho 5. Kết

quả thể hiện như sau:

0

50

50

85

2

42

12

42

3

3

8

3

4

9

1

1

b. Cho mảng chuỗi sau: (Bài về nhà)

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 88/106

string[] Mangchuoi = {"Bún bò Huế", "Hủ tiếu heo","Bánh canh", "Bánh mì",

"Nƣớc Cà phê", “Mì quảng", "Cơm tấm", "Nƣớc Chanh dây", "Mì xào", "Bún

riêu", "Bánh cuốn", "Mì gói", "Bún chả","Hủ tiếu Nam vang"};

1. Hãy cho biết các phần tử có chiều dài ngắn nhất, dài nhất. Kết quả thể hiện như sau:

Các phần tử có chiều dài NGẮN nhất:

CÀ PHÊ

MÌ XÀO

MÌ GÓI

Các phần tử có chiều dài DÀI nhất:

HỦ TIẾU NAM VANG

2. Hãy liệt kê các phần tử trong nhóm có từ đầu tiên giống nhau. Kết quả thể hiện như

sau:

Bún

Bún bò Huế

Bún riêu

Bún chả

Hủ

Hủ tiếu heo

Hủ tiếu Nam vang

Bánh

Bánh canh

Bánh mì

Bánh cuốn

Nước

Nước Cà phê

Nước Chanh dây

Mì quảng

Mì xào

Mì gói

Cơm

Cơm tấm

3. Hãy cho biết có bao nhiêu phần tử có từ bắt đầu bằng “Bánh”.

Lƣu ý: Sau khi học viên đã học xong các toán tử nhóm và thống kê thì mới làm bài 5.3 này

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 89/106

12.3. Tạo class hỗ trợ cung cấp nguồn dữ liệu

Mục tiêu:

Sử dụng các tính năng mới của C# hỗ trợ LINQ

Yêu cầu:

Tạo class có tên MonHoc với các thuộc tính sau:

Mamon: kiểu chuỗi

TenMon: kiểu chuỗi

He: kiểu chuỗi

Sotiet: kiểu byte

Tạo phương thức tĩnh sau, nằm trong class Dulieu:

DS_Mon() : trả về kiểu List<MonHoc>, dùng truy xuất dữ liệu

Dữ liệu mẫu như sau:

Mã môn Tên môn Hệ Số tiết

HP2_1 Nền tảng C# KTV 64

HP2_2 Công nghệ ADo.NET KTV 64

HP3_1 Lập trình Windows Forms KTV 64

HP3_2 Xây dựng ứng dụng Windows Forms KTV 64

HP4_1 Lập trình Web với HTML, CSS và javascript KTV 64

HP4_2 Xây dựng ứng dụng Web với ASP.Net KTV 64

HP5_1 Lập trình CSDL SQL Server căn bản KTV 64

HP5_2 Lập trình CSDL SQL Server nâng cao KTV 64

JLCB Joomla cơ bản CD 72

LINQ Language-Integrated Query CD 64

DAWEB Đồ án thực tế Web với ASP.Net CD 40

DAWIN Đồ án thực tế Windows Forms CD 40

CC++ Lập trình hướng đối tượng với C/C++ CD 128

JQUE Jquery CD 22

XML Công nghệ XML CD 32

CRYS Crystal Report trong Visual Studio 2010 CD 32

BWEB HTML, CSS và javaScript CD 32

XYZ Chưa đặt tên môn 0

12.4. Viết các câu truy vấn có nguồn dữ liệu kiểu List<MonHoc> Mục tiêu:

Viết các câu truy vấn có nguồn là List<>

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 90/106

Sử dụng các phương thức mở rộng của .Net: Where, OrderBy, Select, …

Yêu cầu: Sau khi truy vấn, hãy xuất kết quả ra TextBox

a. Hãy liệt kê tên các môn học bắt đầu bằng “Lập trình”

b. Hãy liệt kê các môn học thuộc hệ “CD”, sắp xếp số tiết giảm dần và mã môn tăng dần

c. Hãy liệt kê các môn học có tên môn chứa từ “web”, gồm: Tên môn , Hệ

d. Hãy liệt kê các môn 1 của hệ Kỹ thuật viên (“KTV”), sắp xếp tăng dần theo mã môn

12.5. Viết các câu truy vấn thống kê có nguồn dữ liệu kiểu List<MonHoc> Mục tiêu:

Viết các câu truy vấn có nguồn là List<>

Sử dụng các phương thức mở rộng của .Net: GroupBy, Sum, Count, …

Yêu cầu: Sau khi truy vấn, hãy xuất kết quả ra TextBox

a. Hãy cho biết tổng số môn hiện có. Dùng hộp thoại xuất kết quả

b. Hãy cho biết tổng số môn có tên bắt đầu bằng “lập trình”. Dùng hộp thoại xuất kết quả

c. Hãy cho biết tổng số tiết của hệ Kỹ thuật viên. Dùng hộp thoại xuất kết quả

d. Hãy cho biết tổng số môn của mỗi hệ, thông tin gồm: Hệ, tổng số môn

e. Hãy cho biết tổng số môn của mỗi số tiết, thông tin gồm: Số tiết, tổng số môn. Sắp giảm

dần theo Số tiết, kết quả như sau:

128 tiết - 1 môn

72 tiết - 1 môn

64 tiết - 10 môn

40 tiết - 2 môn

32 tiết - 2 môn

22 tiết - 1 môn

Từ câu f trở về sau là Bài về nhà

f. Hãy cho biết thông tin của môn học có số tiết cao nhất

g. Hãy cho biết thông tin của mỗi hệ, gồm: Hệ, tổng số môn, tổng số tiết, số tiết cao nhất,

số tiết thấp nhất

h. Hãy liệt kê các môn học được phân nhóm theo hệ. Kết quả thể hiện như sau:

1/ KTV

HP2_1 - Nền tảng C#

HP2_2 - Công nghệ ADo.NET

HP3_1 - Lập trình Windows Forms

HP3_2 - Xây dựng ứng dụng Windows Forms

HP4_1 - Lập trình Web với HTML, CSS và javascript

HP4_2 - Xây dựng ứng dụng Web với ASP.Net

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 91/106

HP5_1 - Lập trình CSDL SQL Server căn bản

HP5_2 - Lập trình CSDL SQL Server nâng cao

2/ CD

JLCB - Joomla cơ bản

LINQ - Language-Integrated Query

CC++ - Lập trình hướng đối tượng với C/C++

DAWEB - Đồ án thực tế Web với ASP.Net

DAWIN - Đồ án thực tế Windows Forms

C++ - Lập trình hướng đối tượng với C/C++

JQUE - JQuery

XML - Công nghê XML

CRYS - Crystal Report trong Visual Studio 2010

i. Hãy liệt kê các môn học được phân nhóm theo số tiết và tăng dần theo Số tiết. Kết quả

thể hiện như sau:

1/ 22 tiết

JQUE - JQuery

2/ 32 tiết

XML - Công nghê XML

CRYS - Crystal Report trong Visual Studio 2010

3/ 40 tiết

DAWEB - Đồ án thực tế Web với ASP.Net

DAWIN - Đồ án thực tế Windows Forms

4/ 64 tiết

HP2_1 - Nền tảng C#

HP2_2 - Công nghệ ADo.NET

HP3_1 - Lập trình Windows Forms

HP3_2 - Xây dựng ứng dụng Windows Forms

HP4_1 - Lập trình Web với HTML, CSS và javascript

HP4_2 - Xây dựng ứng dụng Web với ASP.Net

HP5_1 - Lập trình CSDL SQL Server căn bản

HP5_2 - Lập trình CSDL SQL Server nâng cao

LINQ - Language-Integrated Query

CC++ - Lập trình hướng đối tượng với C/C++

5/ 72 tiết

JLCB - Joomla cơ bản

6/ 128 tiết

C++ - Lập trình hướng đối tượng với C/C++

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 92/106

j. Hãy liệt kê các môn học được phân nhóm theo học phần, sắp xếp theo mã môn, chỉ thể

hiện các môn thuộc hệ Kỹ thuật viên. Kết quả thể hiện như sau:

1/ HP2

HP2_1 - Nền tảng C#

HP2_2 - Công nghệ ADo.NET

2/ HP3

HP3_1 - Lập trình Windows Forms

HP3_2 - Xây dựng ứng dụng Windows Forms

3/ HP4

HP4_1 - Lập trình Web với HTML, CSS và javascript

HP4_2 - Xây dựng ứng dụng Web với ASP.Net

4/ HP5

HP5_1 - Lập trình CSDL SQL Server căn bản

HP5_2 - Lập trình CSDL SQL Server nâng cao

k. Hãy liệt kê các môn học được phân nhóm theo hệ, sắp xếp theo mã môn, chỉ liệt kê các

môn có số tiết >40. Kết quả thể hiện như sau:

1/ CD

C++ - Lập trình hướng đối tượng với C/C++

JLCB - Joomla cơ bản

LINQ - Language-Integrated Query

2/ KTV

HP2_1 - Nền tảng C#

HP2_2 - Công nghệ ADo.NET

HP3_1 - Lập trình Windows Forms

HP3_2 - Xây dựng ứng dụng Windows Forms

HP4_1 - Lập trình Web với HTML, CSS và javascript

HP4_2 - Xây dựng ứng dụng Web với ASP.Net

HP5_1 - Lập trình CSDL SQL Server căn bản

HP5_2 - Lập trình CSDL SQL Server nâng cao

12.6. Tạo class hỗ trợ cung cấp nguồn dữ liệu

Mục tiêu:

Tạo thêm class dùng để làm nguồn cho bài kế tiếp

Yêu cầu:

a. Tạo class có tên cHe với các thuộc tính sau:

Mahe: kiểu chuỗi

TenHe: kiểu chuỗi

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 93/106

b. Tạo phương thức tĩnh sau, nằm trong class Dulieu:

DS_He() : trả về kiểu List<cHe>, dùng truy xuất dữ liệu

Dữ liệu mẫu như sau:

Mã hệ Tên hệ

KTV Kỹ thuật viên

CD Chuyên đề

QT Chứng chỉ quốc tế

12.7. Viết các câu truy vấn có 2 nguồn dữ liệu kiểu List< >

Mục tiêu:

Viết các câu truy vấn có 2 nguồn là: List<MonHoc> và List<cHe>

Sử dụng các toán tử hoặc phương thức mở rộng của .Net: join, GroupJoin, Union,

Concat, Intersect, Except, Any, First, DefaultIfEmpty, Take …

Yêu cầu: Sau khi truy vấn, hãy xuất kết quả ra TextBox

a. Hãy liệt kê thông tin môn học như sau: Tên hệ, Mã môn, Tên môn

b. Hãy liệt kê thông tin môn học như sau: Tên hệ, Mã môn, Tên môn. Liệt kê cả những hệ

chưa có môn học

c. Hãy liệt kê thông tin môn học như sau: Tên hệ, Mã môn, Tên môn. Liệt kê cả những hệ

chưa có môn học và những môn học chưa khai báo hệ

d. Hãy liệt kê thông tin môn học như sau: Tên hệ, Mã môn, Tên môn. Chỉ liệt kê những hệ

chưa có môn học và những môn học chưa khai báo hệ

e. Hãy liệt kê 5 môn học đầu tiên có số tiết giảm dần, thông tin như sau: Tên hệ, Mã môn,

Tên môn, số tiết

Chuyên đề : C++ : Lập trình hướng đối tượng với C/C++ : 128

Chuyên đề : JLCB : Joomla cơ bản : 72

Kỹ thuật viên : HP2_1 : Nền tảng C# : 64

Kỹ thuật viên : HP2_2 : Công nghệ ADo.NET : 64

Kỹ thuật viên : HP3_1 : Lập trình Windows Forms : 64

Từ câu f trở về sau là Bài về nhà

f. Hãy cho biết tổng số môn học của mỗi hệ, thông tin gồm: Mã hệ, Tên hệ, Tổng số môn

g. Cho biết có bao nhiêu loại số tiết trong danh sách môn học. Dùng hộp thoại xuất kết quả

h. Cho biết thông tin môn học đầu tiên có tên bắt đầu là “Lập trình”

i. Hãy liệt kê các môn học theo nhóm như sau:

KỸ THUẬT VIÊN

1/ Nền tảng C# : 64 tiết

2/ Công nghệ ADo.NET : 64 tiết

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 94/106

3/ Lập trình Windows Forms : 64 tiết

4/ Xây dựng ứng dụng Windows Forms : 64 tiết

5/ Lập trình Web với HTML, CSS và javascript : 64 tiết

6/ Xây dựng ứng dụng Web với ASP.Net : 64 tiết

7/ Lập trình CSDL SQL Server căn bản : 64 tiết

8/ Lập trình CSDL SQL Server nâng cao : 64 tiết

CHUYÊN ĐỀ

1/ Joomla cơ bản : 72 tiết

2/ Language-Integrated Query : 64 tiết

3/ Đồ án thực tế Web với ASP.Net : 40 tiết

4/ Đồ án thực tế Windows Forms : 40 tiết

5/ Lập trình hướng đối tượng với C/C++ : 128 tiết

6/ JQuery : 22 tiết

7/ Công nghệ XML : 32 tiết

8/ Crystal Report trong Visual Studio 2010 : 32 tiết

9/ HTML, CSS và javaScript : 32 tiết

CHỨNG CHỈ QUỐC TẾ

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 95/106

Phụ lục

Bài làm thêm

1. Bài 2: Kiểu dữ liệu và biến

1. Mã hóa và giải mã

Mục tiêu: Ứng dụng vào bài toán thực tế

Mô tả:

Một công ty muốn truyền dữ liệu qua đường mạng tuy nhiên họ sợ rằng dữ liệu sẽ bị

đánh cắp. Công ty thuê một lập trình viên để giải quyết vấn đề này. Sau khi xem xét lập

trình viên quyết định lựa chọn chiến lược sẽ mã hóa (encrypt) dữ liệu trước khi truyền

trên mạng bởi vì nếu dữ liệu đã được mã hóa thì nếu có bị đánh cắp thì cũng không biết

nó có ý nghĩa gì. Dữ liệu được gởi đi được chia thành nhóm gồm 4 chữ số.

Ứng dụng của lập trình viên sẽ đọc một số nguyên có 4 chữ số. Sau đó số này được

mã hóa theo các bước như sau:

(1) thay thế mỗi ký số bởi tổng của nó với 7 và lấy phần dư cho 10

(2) Đảo vị trí của ký số thứ 1 với kí số thứ 3, kí số thứ 2 và kí số thứ 4.

Ví dụ: số ban đầu là 1093 sẽ được mã hóa thành 6087. Kết quả mã hóa sau đó được in ra

màn hình

Yêu cầu: Xây dựng chương trình mã hóa và giải mã một số nguyên, gồm 2 chức năng:

- Chức năng 1: mã hóa một số được nhập vào chương trình

- Chức năng 2: giải mã (decryption) số đã được mã hóa để xuất ra giá trị ban đầu

2. Bài 3: Cấu trúc điều khiển

1. Tính thuế thu nhập cá nhân

Mục tiêu: Sử dụng cấu trúc if … else

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 96/106

Yêu cầu:

- Nhập vào mức lương và số người phụ thuộc

- Tính và xuất ra mức thuế thu nhập cá nhân cần phải đóng theo các bước:

o Bước 1: tính thu nhập chịu thuế, biết rằng:

Thu nhập chịu thuế = Mức lương – 4,000,000 - Số người phụ thuộc *

1,600,000

o Bước 2: tính thuế thu nhập cá nhân theo quy tắc sau:

Thu nhập chịu thuế (TNCT) Thuế thu nhập cá

nhân

TNCT<5 triệu TNCT*5%

5 triệu<=TNCT<10 triệu TNCT*10%

10 triệu <=TNCT<18 triệu TNCT*15%

18 triệu <=TNCT<32 triệu TNCT*20%

32 triệu <=TNCT<50 triệu TNCT*25%

TNCT>50 triệu TNCT*30%

- Màn hình gợi ý:

2. Kiểm tra số nguyên tố

Mục tiêu: Sử dụng cấu trúc for

Mô tả: số nguyên tố là số tự nhiên chỉ chia hết cho 1 và chính nó, 0 và 1 không được

xem là số nguyên tố. (Số 2 là số nguyên tố nhỏ nhất, và 2 cũng là số nguyên tố chẵn duy

nhất)

Yêu cầu:

- Nhập vào số nguyên n cần kiểm tra

- Kiểm tra xem số nguyên n có phải là số nguyên tố hay không và xuất thông báo ra

màn hình

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 97/106

- Sau đó tìm và xuất ra danh sách các số nguyên tố nhỏ hơn số cần kiểm tra

3. Craps Game

Mục tiêu: Sử dụng kết hợp các cấu trúc điều khiển và const

Mô tả:

- Craps Game là một trò chơi phổ biến liên quan đến các con súc sắc được chơi tại các

Casino. Craps được chơi chỉ với hai viên súc sắc. Một cách trùng hợp là người thua

trong trò chơi được gọi là Craps

- Quy tắc chơi: Người chơi có hai con súc sắc, mỗi con súc sắc có 6 mặt, mỗi mặt mang

số chấm tương ứng là 1, 2, 3, 4, 5, 6. Người chơi sẽ gieo hai con súc sắc, sau đó tổng

số điểm của hai mặt ngửa được tính:

o Trong lần gieo đầu tiên, nếu tổng là 7 hoặc 11 thì người chơi thắng

o Trong lần gieo đầu tiên, nếu tổng là 2, 3 hoặc 12 (gọi là "Craps") thì người chơi

thua

o Trong lần gieo đầu tiên, nếu tổng là 4, 5, 6, 8, 9 hoặc 10 thì số điểm này được lưu

lại và gọi là "Point", để giành chiến thắng, người chơi phải gieo lại hai con súc sắc

cho đến khi đạt được giá trị point lần nữa. Tuy nhiên, từ lần gieo thứ hai trở đi,

nếu tổng điểm đạt được 7 thì người chơi bị thua

- Các thuật ngữ của trò chơi này như sau:

o Point: các giá trị đạt được trong lần đầu tiên mà không thắng hay thua gồm

có: 4, 5, 6, 8, 9 hoặc 10

o Snake Eyes: số 2

o Trey: số 3

o Box Cars: số 12

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 98/106

o Seven: số 7

o Yo Leven: số 11

Yêu cầu: Viết chương trình thực hiện trò chơi Craps được mô tả như trên

Hƣớng dẫn:

- Sử dụng const để khai báo các giá trị lưu trữ các thuật ngữ trên

- Giao diện Form gợi ý như sau:

3. Bài 5: Tổng quan về lập trình hƣớng đối tƣợng

1. Xếp loại học tập học sinh

Mục tiêu: Áp dụng class vào bài toán thực tế

Yêu cầu: Trường trung học ANZ muốn ghi nhận thông tin kết quả học tập của học sinh

vào cuối mỗi học kỳ. Bạn hãy xây dựng ứng dụng nhập thông tin học sinh và kết quả các

điểm kiểm tra trong kỳ và điểm thi cuối học kỳ. Sau đó xuất thông tin kết quả học tập

- Thông tin kết quả học tập của học sinh cần ghi nhận gồm có: Họ tên học sinh,

Lớp, Học kỳ và năm học

- Kết quả học tập các môn học gồm: Tên môn, điểm 15 phút, điểm 1 tiết, điểm thi

cuối học kỳ

- Điểm trung bình học kỳ với điểm trung bình được tính theo công thức sau:

Điểm trung bình học kỳ=Tổng điểm trung bình các môn / số môn học

Trung bình môn học=(điểm 15 phút + điểm 1 tiết x 2 + điểm học kỳ x 2)/5

- Xếp loại học lực của học sinh theo quy tắc sau:

o Điểm trung bình học kỳ <5: yếu

o 5 <= Điểm trung bình học kỳ < 6.5: trung bình

o 6.5<= Điểm trung bình học kỳ < 8: khá

o Điểm trung bình học kỳ >=8: giỏi

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 99/106

Hƣớng dẫn:

- Màn hình gợi ý

2. Trò chơi đấu giá sản phẩm

Mục tiêu: Áp dụng class vào bài toán thực tế

Yêu cầu: Xây dựng chương trình Trò chơi đấu giá sản phẩm với luật đấu giá sau:

- Người thắng cuộc sẽ là người có “Giá đấu” nhỏ nhất

- Nếu có nhiều người chơi đấu cùng giá: người thắng cuộc là người có “Số dự đoán

cùng giá” thấp nhất trong số những người chơi đấu cùng giá.

- Nếu có nhiều người chơi đấu cùng giá và cùng số dự đoán: kết quả là “Không có

người thắng cuộc”

- Lưu ý: Mỗi số điện thoại có thể thực hiện nhắn tin đấu giá nhiều lần

Hƣớng dẫn:

- Màn hình gợi ý:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 100/106

- Các xử lý:

o Form load:

Tạo Danh sách người chơi mặc định và hiển thị lên TextBox

Hiển thị thông tin của người chơi đầu tiên lên Thông tin người đấu giá

o Button <: hiển thị thông tin người chơi phía trước người chơi hiện tại trong

danh sách

o Button >: hiển thị thông tin người chơi phía sau người chơi hiện tại trong danh

sách

o Ngƣời chơi mới: xóa rỗng các TextBox để chuẩn bị nhập thông tin người chơi

mới

o Thêm vào danh sách: thêm người chơi mới vào Danh sách người chơi

o Tìm ngƣời thắng cuộc: tìm người thắng cuộc dựa vào luật của trò chơi đấu

giá sản phẩm và xuất thông tin người thắng cuộc lên màn hình

3. Thi trắc nghiệm

Mục tiêu: xây dựng và sử dụng class, phối hợp các class, kết hợp kiến thức mảng, …

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 101/106

Yêu cầu: xây dựng ứng dụng hỗ trợ thi trắc nghiệm theo mô tả sau

- Trước khi bắt đầu thi, thí sinh nhập Họ tên, Ngày sinh và Nơi sinh

- Sau đó bắt đầu làm bài. Thí sinh đọc nội dung câu hỏi và chọn 1 trong 4 câu trả lời

bên dưới

- Nhấn nút di chuyển để sang một câu hỏi mới hoặc lùi về câu trước đó

- Sau khi làm bài xong, thí sinh nhấn nút Nộp bài và sẽ nhận được kết quả (Hình 4.5b)

Hình 1: Màn hình đang thi

Hình 2: Màn hình kết quả

Hƣớng dẫn:

- Tạo lớp Cauhoi, gồm các thông tin: Nội dung câu hỏi, chọn lựa 1, chọn lựa 2, chọn lựa

3, chọn lựa 4, đáp án, chọn đáp án. Có một phương thức Chấm điểm

- Tạo lớp Thisinh, gồm các thông tin: Họ tên, ngày sinh, nơi sinh và một phương thức

Xuất thông tin

- Tạo lớp Baithi, gồm các thông tin: Thông tin của thí sinh và mảng các câu hỏi.

Phương thức Chấm bài và Xuất thông tin

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 102/106

- Khai báo các biến dùng chung trên Form: 1 biến mảng kiểu Cauhoi, 1 biến kiểu int

(dùng lưu trữ số thứ tự câu hỏi)

- Sự kiện load form: Khởi tạo các câu hỏi (số câu tùy vào người lập trình)

4. Bài 8: Lớp trừu tƣợng, lớp giao tiếp

1. Xử lý phân số

Mục tiêu: Xây dựng và sử dụng lớp giao tiếp tự định nghĩa

Yêu cầu: Xây dựng chương trình nhập các phân số và xuất ra danh sách các phân số, có

sắp xếp

Hƣớng dẫn:

- Tạo interface IXuat, khai báo hàm hàm xuất phân số trả về 1 chuỗi

interface IXuat

{ string Xuat(); }

- Xây dựng lớp PhanSo (tương tự bài 5.2) và cài đặt Interface Ixuat và IComparable cho

lớp này như sau:

public class PhanSo: Ixuat, IComparable

{

public int TUSO { get; set; }

public int MAUSO { get; set; }

public PhanSo() { }

public PhanSo(int tu, int mau) { TUSO = tu; MAUSO = mau; }

public string Xuat()

{

return string.Format("{0}/{1}", TUSO, MAUSO);

}

public int CompareTo(object obj)

{

PhanSo p = (PhanSo)obj;

double giatri1 = 1.0 * TUSO / MAUSO;

double giatri2 = 1.0 * p.TUSO / p.MAUSO;

if (giatri1 > giatri2)

return 1;

else if (giatri1 < giatri2)

return -1;

else

return 0;

}

}

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 103/106

- Xây dựng màn hình có dạng sau:

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 104/106

MỤC LỤC

BÀI 1: Tổng quan ...................................................................................................... 2

1.1. Làm quen môi trường phát triển ứng dụng ............................................................................. 2

1.2. Màn hình chào 1 ................................................................................................................... 3

1.3. Màn hình chào 2 ................................................................................................................... 4

1.4. Thông tin cá nhân ................................................................................................................ 5

BÀI 2: Giao diện Windows Forms Application .......................................................... 7

2.1. Thông tin học viên ................................................................................................................ 7

2.2. Thông tin hàng hóa .............................................................................................................. 8

BÀI 3: Kiểu dữ liệu và biến ..................................................................................... 11

3.1. Tính chu vi và diện tích hình tròn ......................................................................................... 11

3.2. Tính chu vi và diện tích hình chữ nhật (Bài về nhà) ............................................................... 12

3.3. Tính chu vi và diện tích tam giác .......................................................................................... 14

3.4. Tính số nút của 1 số nguyên (Bài về nhà) ............................................................................. 15

3.5. Tách chuỗi họ tên ............................................................................................................... 16

3.6. Sử dụng kiểu tham chiếu ..................................................................................................... 17

BÀI 4: Cấu trúc điều khiển ...................................................................................... 20

4.1. Xếp loại học tập ................................................................................................................. 20

4.2. Tìm ngày trước, ngày sau của một ngày ............................................................................... 21

4.3. Tính tiền điện (bài về nhà) .................................................................................................. 22

4.4. Tính năm âm lịnh ............................................................................................................... 23

4.5. Tính số ngày trong tháng .................................................................................................... 25

4.6. Tính ngày của mẹ, ngày của cha (Bài về nhà) ....................................................................... 26

4.7. In bảng cửu chương của một số .......................................................................................... 27

4.8. In bảng cửu chương từ số đến số ........................................................................................ 28

4.9. Tính lãi suất ngân hàng (Bài về nhà) .................................................................................... 29

4.10. Thực hiện lại các bài 3.8, 3.9 và 3.10 bằng cách dùng vòng lặp while, do..while (Bài về nhà) .. 31

BÀI 5: Kiểu Array và kiểu Struct ............................................................................. 32

5.1. Làm việc với mảng .............................................................................................................. 32

5.2. Tạo và sử dụng kiểu NhanVien ............................................................................................ 33

5.3. Nhập hàng hóa (Bài về nhà) ................................................................................................ 36

BÀI 6: Tổng quan Lập trình hƣớng đối tƣợng ........................................................ 39

6.1. Giải phương trình bậc nhất Ax + B = 0 ................................................................................ 39

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 105/106

6.2. Phép toán trên phân số ....................................................................................................... 42

6.3. Xử lý phân số nâng cao ....................................................................................................... 46

6.4. Nhập xuất thông tin hóa đơn (Bài về nhà) ............................................................................ 48

BÀI 7: Delegate và Event ........................................................................................ 50

7.1. Quản lý thông tin nhân viên ................................................................................................ 50

..................... 50

7.2. Xử lý Phân số mở rộng (Bài làm thêm) ................................................................................. 54

BÀI 8: Tính Thừa kế và Đa hình .............................................................................. 55

8.1. Quản lý thông tin nhân viên ................................................................................................ 55

8.2. Quản lý danh sách máy tính (Bài về nhà) ............................................................................. 59

BÀI 9: Lớp trừu tƣợng, lớp giao tiếp ...................................................................... 61

9.1. Quản lý các lớp hình học ..................................................................................................... 61

9.2. Quản lý đối tượng hình học ................................................................................................. 64

BÀI 10: Collections và Generic ............................................................................... 68

10.1. Quản lý danh sách học viên ............................................................................................... 68

10.2. Quản lý danh sách học viên ............................................................................................... 70

10.3. Chuyển số thành chữ ........................................................................................................ 73

10.4. Đọc 3 số (Bài về nhà) ........................................................................................................ 74

10.5. Bài về nhà ........................................................................................................................ 75

BÀI 11: Các kiến thức cơ bản về SQL Server .......................................................... 76

11.1. Tạo cơ sở dữ liệu QLSV (bằng tiện ích SSMS) ...................................................................... 80

11.2. Truy vấn dữ liệu (bằng câu lệnh)........................................................................................ 82

Bài tập

Nền tảng và Lập Trình Hướng Đối Tượng với C# Trang 106/106

Truy vấn trên nhiều bảng ............................................................................................... 83

Truy vấn có nhóm ........................................................................................................... 83

11.3. Truy vấn cập nhật dữ liệu .................................................................................................. 84

Thêm mẩu tin .................................................................................................................. 84

Sửa mẩu tin ..................................................................................................................... 85

Xóa mẩu tin ..................................................................................................................... 85

BÀI 12: LINQ cơ bản ............................................................................................... 86

12.1. Viết các câu truy vấn từ một mảng ..................................................................................... 86

12.2. Viết các câu truy vấn thống kê từ một mảng ....................................................................... 87

12.3. Tạo class hỗ trợ cung cấp nguồn dữ liệu ............................................................................. 89

12.4. Viết các câu truy vấn có nguồn dữ liệu kiểu List<MonHoc> .................................................. 89

12.5. Viết các câu truy vấn thống kê có nguồn dữ liệu kiểu List<MonHoc> .................................... 90

12.6. Tạo class hỗ trợ cung cấp nguồn dữ liệu ............................................................................. 92

12.7. Viết các câu truy vấn có 2 nguồn dữ liệu kiểu List< > .......................................................... 93

Phụ lục .................................................................................................................... 95

Bài làm thêm ........................................................................................................... 95

1. Bài 2: Kiểu dữ liệu và biến ............................................................................ 95

1. Mã hóa và giải mã ........................................................................................................... 95

2. Bài 3: Cấu trúc điều khiển ............................................................................. 95

1. Tính thuế thu nhập cá nhân ........................................................................................... 95

2. Kiểm tra số nguyên tố .................................................................................................... 96

3. Craps Game ..................................................................................................................... 97

3. Bài 5: Tổng quan về lập trình hƣớng đối tƣợng ............................................ 98

1. Xếp loại học tập học sinh ................................................................................................ 98

2. Trò chơi đấu giá sản phẩm ............................................................................................. 99

3. Thi trắc nghiệm ............................................................................................................. 100

4. Bài 8: Lớp trừu tƣợng, lớp giao tiếp............................................................ 102

1. Xử lý phân số ................................................................................................................ 102

MỤC LỤC ............................................................................................................... 104