bai tap hp2 mon 1
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ì
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 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