5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 1/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
318 Thống Nhất P.16 - Quận Gò Vấp - Tp.Hồ Chí Minh
Tel: 3996.1590 – 0913.681856
BÀI TẬP
NỀN TẢNG LẬP TR ÌNH ỨNGDỤNG VỚI C#
GV: PHẠM ÁNH THIỀU
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 2/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 1: Các khái niệm tổng quanGiúp học viên nắm r õ một số thao tác cơ bản trong môi trường C# và ứng dụng dạng ConsoleApplication.
1.1. Làm quen môi trường phát triển ứng dụng
Mục đích:
Tạo Project, tổ chức cây thư mục
Làm quen với các đối tượng trong ứng dụng Console Thực
hiện các thao tác: tạo, thêm, xoá các đối tượng Thực thi
một ứng dụng
Yêu cầu:
Tạo một ứng dụng dạng Console có tên NhapMon lưu tại thư mục làm việc Làm
quen với các thành phần trong môi trường C#
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ảitrê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)
Thực thi ứng dụng (nhấn phím F5 hoặc nhấn nút Start Debugging)
1.2. Xuất thông báo chào
Mục đích:
Làm quen với các lệnh nhập xuất thông tin trong C# Yêu
cầu:
Tạo một ứng dụng dạng Console có tên Chao_hoi lưu tại thư mục làm việc
Trong phương thức Main của tập tin Program.cs, sử dụng lệnh Console.Write hoặc Console.WriteLine để xuấtdữ liệu và Console.Read hoặc Console.ReadLine để đọc dữ liệu
Cho phép nhập vào họ tên sau đó xuất ra câu chào: Chào mừng bạn đến với ngôn ngữ lập tr ình C# Thực
thi ứng dụngg.
(hình 1.1)
GV: PHẠM ÁNH THIỀU Trang 2/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 3/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 2: Các khái niệm và nguyên tắc cơ bảncủa .NET Framework
Giúp học viên hiểu r õ về các kiểu dữ liệu trong C#, ứng dụng các kiểu dữ liệu để khai báobiến và cách sử dụng các toán tử trong C#
2.1. Using Value Types
Mục tiêu: Giúp học viên nắm bắt việc sử dụng kiểu dữ liệu dạng tham trị dựa tr ên kiểu cấu trúc Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là CreateStruct
2. Tạo cấu trúc NHAN_VIEN với các thành phần được khai báo Public
Họ tên nhân viên: string
Tuổi: int
Lương cơ bản: int
Số con: int (cho phép chứa giá trị NULL)
3. Xây dựng phương thức khởi tạo cho cấu trúc NHAN_VIEN, trong đó khởi tạo giá trị cho các thành
phần được khai báo ở tr ên.
4. Xây dựng phương thức tính tiền lương cho Nhân viên theo quy ước:
Tiền lương = Lương cơ bản + ( Số con * 100000)5. Xây dựng phương thức ToString để hiển thị thông tin của nhân viên theo dạng: Họ tên - Tuổi - Số
con - Tiền lương
Ví dụ: “Nguyễn Thanh Thúy - 32 tuổi - Số con: 2 - Tiền lương: 2500000
6. Trong thủ tục Main của ứng dụng dạng Console, định nghĩa và khởi tạo một thể hiện của cấu trúc
NHAN_VIEN sau đó xuất ra thông tin của thể hiện bằng lệnh Console.WriteLine
7. Thực thi chương tr ình và ghi nhận kết quả
8. Trong cấu trúc NHAN_VIEN, định nghĩa kiểu Enum với tên GIOI_TINH với hai giá trị “Nam” và
“Nữ”.
9. Bổ sung vào cấu trúc NHAN_VIEN thành phần Phái được khai báo với kiểu GIOI_TINH.
10. Chỉnh sửa lại các lệnh trong phương thức khởi tạo và phương thức ToString để hiển thị giá trị củathành phần Phái
Ví dụ: “Nguyễn Thanh Thúy (Nữ) - 32 tuổi - Số con: 2 - Tiền lương: 2500000
11. Thực thi chương tr ình và ghi nhận kết quả
2.2. Using Common Reference Types
Mục tiêu: Giúp học viên phân biệt các kiểu dữ liệu dạng tham chiếu Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là TestType
2. Khai báo các đối tượng từ các lớp: Sbyte, Byte, Int16, Int32, Int64, String, Exception.
SByte a = 0;
Byte b =0;
GV: PHẠM ÁNH THIỀU Trang 3/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 4/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Int16 c = 0;
Int32 d = 0;
Int64 e = 0;
string s = "";
Exception ex = new Exception();
3. Khai báo mảng có kiểu dữ object với các phần tử là các đối đượng được khai báo ở tr ên
object[] types = { a, b, c, d, e, s, ex };
4. Sử dụng vòng lặp foreach để duyệt qua từng phần tử trong mảng, ứng với từng phần tử, kiểm tra
xem kiểu dữ liệu tương ứng của phần tử đó là Value hay Reference
foreach ( object o in types )
{
string type;
if (o.GetType().IsValueType)
type = "Value type";
else
type = "Reference Type";
Console.WriteLine("{0}: {1}", o.GetType(), type);
}
(hình 2.1)
2.3. Chuyển đổi giữa các kiểu dữ liệu
Mục tiêu: Giúp cho học viên hiểu được cơ chế chuyển đổi giữa các kiểu dữ liệu. Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là ConvertType
2. Khai báo các biến với kiểu dữ liệu tương ứng là: Int16, Int32 và double
Int16 i16 = 1;
Int32 i32 = 1;
double db = 1;
3. Lần lượt gán giá trị giữa các biến, ví dụ:
i16 = i32;
i16 = db;
i32 = i16;
i32 = db;
db = i16;
db = i32;
GV: PHẠM ÁNH THIỀU Trang 4/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 5/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
4. Thực thi ứng dụng và ghi nhận các lỗi xảy ra (nếu có) và tìm cách khắc phục
2.4. Tính diện tích h ình chữ nhật
Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu
cầu thực hiện:
1. Nhập vào chiều dài vào chiều rộng của h ình chữ nhật
2. Xuất ra diện tích của h ình chữ nhật
(hình 2.2)
2.5. Tính diện tích và chu vi hình tròn
Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu
cầu thực hiện:
1. Nhập vào bán kính của h ình tròn
2. Xuất ra diện tích và chu vi của h ình tròn
(hình 2.3)
2.6. Tính chiều dài của cạnh huyền trong tam giác vuông
Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu
cầu thực hiện:
1. Nhập vào chiều dài của hai cạnh góc vuông của hình tam giác
2. Xuất ra chiều dài của cạnh huyền
(hình 2.4)
GV: PHẠM ÁNH THIỀU Trang 5/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 6/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 3: Các cấu trúc điều khiển cơ bản
Giúp học viên hiểu r õ về các cấu trúc điều khiển cơ bản, cách khai báo và sử dung mảngcũng như cách bẫy lỗi và xử lý lỗi trong C#.
3.1. Xếp loại học tập
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF
Công việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Xep_loai_hoc_tap
2. Khai báo các biến HK1 (điểm thi học kỳ 1) và HK2 (điểm thi học kỳ 2) để lưu thông tin về điểm thi của 2 học kỳ.
float HK1;
float HK2;
3. Xử lý để nhập vào điểm thi của học kỳ 1 và học kỳ 2
Console.Write(“Xin nhập vào điểm thi học kỳ 1: ”); HK1
= float.Parse(Console.ReadLine());
Console.Write(“Xin nhập vào điểm thi học kỳ 2: ”); HK2
= float.Parse(Console.ReadLine());
4. Xử lý tính điểm trung b ình (DTB) dựa vào điểm học kỳ 1 (HK1) và điểm học kỳ 2 (HK2) theo công
thức: DTB = (HK1 + HK2*2)/3 và làm tròn 2 số lẻ
float DTB = (HK1 + HK2*2)/3;
DTB = (float)Math.Round(DTB, 2);
5. Xử lý xếp loại học lực cho học sinh dựa vào điểm trung b ình với quy ước:
DTB < 5 : loại yếu
5 <= DTB < 6.5 : loại trung b ình
6.5 <= DTB < 8 : loại khá
DTB >=8 : loại giỏi
string xep_loai;
if (DTB < 5 )xep_loai = "Yếu";
else if (DTB < 6.5)
xep_loai = "Trung bình";
else if (DTB < 8)
xep_loai = "Khá";
else
xep_loai = "Giỏi";
6. Xuất thông tin điểm trung b ình và xếp loại ra màn hình
Console.WriteLine(“ Điểm trung bình: {0}“, DTB);Console.WriteLine(“Xếp loại học lực: {0}”, xep_loai);Console.ReadLine();
GV: PHẠM ÁNH THIỀU Trang 6/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 7/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 3.1)
3.2. Nhận dạng tam giác
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu tr úc IF Yêu
cầu thực hiện:
1. Nhập vào 3 cạnh bất kỳ (canh_1, canh_2, canh_3)
2. Kiểm tra xem 3 cạnh này có tạo thành được một tam giác hay không, nếu được th ì đó là tam giác
gì (tam giác thường, tam giác cân, tam giác đều, tam giác vuông, tam giác vuông cân). Sau đó
xuất kết quả ra màn hình theo dạng sau:
(hình 3.2)
3.3. Giải phương tr ình bậc nhất
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF Yêu
cầu thực hiện:
1. Nhập vào hệ số a (he_so_a) và hệ số b (he_so_b) của phương trình: Ax + B = 0
2. Giải phương tr ình Ax + B = 0 với hệ số A (he_so_a) và hệ số B (he_so_b) được nhập vào. Sau đó
xuất kết quả ra màn hình theo dạng sau:
GV: PHẠM ÁNH THIỀU Trang 7/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 8/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 3.3)
3.4. Giải phương tr ình bậc hai
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF Yêu
cầu thực hiện:
1. Nhập vào hệ số a (he_so_a), hệ số b (he_so_b) và hệ số b (he_so_b) của phương tr ình bậc hai:
Ax2 + Bx + C = 0
2. Giải phương tr ình Ax2 + Bx + C = 0 với hệ số A (he_so_a), hệ số B (he_so_b) và hệ số C
(he_so_c) được nhập vào. Sau đó xuất kết quả ra màn hình theo dạng sau:
(hình 3.4)
3.5. Tìm thứ trong tuần
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch
Công việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Tim_thu_trong_tuan
2. Khai báo biến ngay để lưu thông tin ngày tháng và năm được nhập vào.
DateTime ngay;
Console.Write(“Xin nhập giá trị ngày tháng năm (mm/dd/yyyy): ”); Ngay= DateTime.Parse(Console.ReadLine());
3. Xử lý t ìm thứ trong tuần ứng với ngày được nhập vào:
string thu_trong_tuan = “”;
switch (ngay.DayOfWeek)
{
case DayOfWeek.Monday:
thu_trong_tuan = "Thu hai";
break;
case DayOfWeek.Tuesday:
thu_trong_tuan = "Thu ba";
break;
case DayOfWeek.Wednesday:
thu_trong_tuan = "Thu tu";
break;
case DayOfWeek.Thursday:
thu_trong_tuan = "Thu nam";
break;
case DayOfWeek.Friday:
thu_trong_tuan = "Thu sau";break;
GV: PHẠM ÁNH THIỀU Trang 8/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 9/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
case DayOfWeek.Saturday:
thu_trong_tuan = "Thu bay";
break;
default:
thu_trong_tuan = "Chu nhat";break;
}
4. Xuất thông tin ra màn hình
Console.WriteLine("Ngày {0} là: {1}", ngay.ToString("dd/MM/yyyy"),
thu_trong_tuan);
Console.ReadLine();
(hình 3.5)
3.6. Tính năm âm lịnh
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch Yêu
cầu thực hiện:
1. Nhập vào năm dương lịch (nam_duong)
2. Tính và xuất ra năm âm lịch ứng với năm dương lịch được nhập v
ào với quy ước tính năm âm lịch:
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
(hình 3.6)
3.7. Tính số ngày trong tháng
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch Yêu
cầu thực hiện:
1. Nhập vào tháng (thang) và năm dương lịch (nam) cần t ìm số ngày2. Tính và xuất ra số ngày trong tháng (thang) và năm (nam) được nhập vào:
GV: PHẠM ÁNH THIỀU Trang 9/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 10/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 3.7)
3.8. In bảng cửu chương
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc lặp for Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là In_bang_cuu_chuong
2. Khai báo các biến cửu chương (cc) và kết quả (kq) để lưu thông tin về bảng cửu chương cần in.
string kq = “”;
int cc;
3. Xử lý nhập vào cửu chương cần in
Console.WriteLine("Nhap vao so cuu chuong can in: "); cc
= int.Parse(Console.ReadLine());
4. Xử lý in bảng cửu chương:
for(int i = 1; i<=10; i++)
{
kq += cc.ToString("00") + " x " + i.ToString("00") + " = " +
((int)(cc * i)).ToString("00") + "\n";}
5. Xuất thông tin ra màn hình
Console.WriteLine("Bang cuu chuong {0}:", cc);
Console.WriteLine(kq);
Console.ReadLine();
(hình 3.8)
GV: PHẠM ÁNH THIỀU Trang 10/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 11/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
3.9. In bảng cửu chương mở rộng
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc for lồng nhau Yêu
cầu thực hiện:1. Nhập vào cửu chương bắt đầu (cc_bd) và cửu chương kết thúc (cc_kt)
2. Tính và xuất ra bảng cửu chương từ cửu chương bắt đầu (cc_bd) đến cửu chương kết thúc
(cc_kt):
(hình 3.9)
3.10. Kiểm tra số nguyên tố
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc for Yêu
cầu thực hiện:1. Nhập vào số cần kiểm tra (sokt)
2. Kiểm tra xem số cần kiểm tra (sokt) có phải là số nguyên tố hay không và xuất thông báo ra màn
hình. 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:
(hình 3.10)
3.11. Tìm ước số chung lớn nhất
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc lặp while Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Tim_uoc_so_chung
2. Khai báo các biến số thứ 1 (so_1), số thứ 2 (so_2) và ước số chung lớn nhất (uscln) để lưu thông
tin về ước số chung lớn nhất của 2 số.
int so_1, so_2, uscln;
3. Xử lý nhập vào số thứ 1 (so_1) và số thứ 2 (so_2)
GV: PHẠM ÁNH THIỀU Trang 11/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 12/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Console.WriteLine("Nhap vao so thu 1: ");
so_1 = int.Parse(Console.ReadLine());
Console.WriteLine("Nhap vao so thu 2: ");
so_2 = int.Parse(Console.ReadLine());
4. Xử lý t ìm ước số chung lớn nhất:
int a = so_1, b = so_2;
while (a != b)
{
if (a > b)
a -= b;
else
b -= a;
}
uscln = a;
5. Xuất thông tin ra màn hìnhConsole.WriteLine("Uoc so chung lon nhat cua {0} va {1} la: {2}", so_1,
so_2, uscln);
Console.ReadLine();
(hình 3.11)
3.12. Tính tổng tr ên dãy số
Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc while Yêu
cầu thực hiện:
1. Nhập vào một dãy số bất kỳ, mỗi lần sẽ nhập giá trị cho một phần tử, muốn kết thúc việc nhập giá
trị cho các phần tử th ì để trống và nhấn enter.
2. Tính tổng của các phần tử trong dãy số và xuất ra màn hình theo dạng sau:
(hình 3.12)
3.13. 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
GV: PHẠM ÁNH THIỀU Trang 12/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 13/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
3.14. Xử lý mảng
Mục tiêu: Giúp học viên nắm r õ cách sử dụng mảng trong C#
Công việc thực hiện: 1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với t ên là Xu_ly_mang
2. Khai báo và khởi tạo số phần tử của mảng
Console.Write("Nhap so phan tu cua mang: "); int
sopt = int.Parse(Console.ReadLine()); int[]
mang_nguyen= new int[sopt];
3. Nhập giá trị cho từng phần tử trong mảng
for (int i = 0; i < sopt; i++)
{
Console.Write("Nhap gia tri cho phan tu thu {0} cua mang: ", i + 1);
mang_nguyen[i] = int.Parse(Console.ReadLine());
}
4. Tính tổng giá trị của các phần tử và Xuất giá trị của các phần tử trong mảng:
string chuoimang = "";
int tong = 0;
for (int i = 0; i < sopt; i++)
{
chuoimang += mang_nguyen[i] + " ";
tong += mang_nguyen[i];}
5. Xuất thông tin ra màn hình
Console.WriteLine("Mang cac phan tu: {0}", chuoimang);Console.WriteLine("Tong cac phan tu: {0}", tong);
Console.ReadLine();
(hình 3.14)
3.15. Xắp sếp tr ên mảng
Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu
cầu thực hiện:
1. Sử dụng lại bài 3.14, bổ sung thêm các yêu cầu sau.
Tính tổng các phần tử có giá trị chẵn
Tính tổng các phần tử có giá trị lẻ
Tìm phẩn tử nhỏ nhất trong mảng
GV: PHẠM ÁNH THIỀU Trang 13/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 14/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Tìm phần tử lớn nhất trong mảng
Tìm kiếm 1 giá trị xem có trong mảng hay không
2. Xử lý và xuất ra màn hình theo dạng sau:
(hình 3.15)
3.16. Phát sinh mảng
Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu
cầu thực hiện:
1. Nhập vào số phần tử (sopt) của mảng.
2. Ứng với số phần tử được nhập (sopt), phát sinh giá trị cho các phần tử một cách ngẫu nhiên. Gợi
ý: sử dụng lớp Random theo cú pháp sau:
Random ngau_nhien = new Random();
Gia_tri = ngau_nhien.Next(<giá trị nhỏ nhất>, <giá trị lớn nhất>);
3. Xuất danh sách các phần tử của mảng ra màn hình theo dạng sau:
(hình 3.16a)
4. Sau khi xuất mảng sẽ xuất thực đơn cho phép lựa chọn thao tác tr ên mảng:
GV: PHẠM ÁNH THIỀU Trang 14/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 15/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 3.16b)
5. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác sắp xếp mảng tăng dần),
thực hiện thao tác sắp xếp mảng tương ứng và xuất mảng ra màn hình theo dạng sau:
(hình 3.16c)
3.17. Thay đổi mảng
Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu
cầu thực hiện:
1. Nhập vào số phần tử (sopt) của mảng.
2. Ứng với số phần tử được nhập (sopt), phát sinh giá trị cho các phần tử một cách ngẫu nhiên.
3. Xuất danh sách các phần tử của mảng và thực đơn cho phép lựa chọn thao tác tr ên mảng ra mànhình theo dạng sau:
(hình 3.16a)
4. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác thêm phần tử sẽ yêu cầu
GV: PHẠM ÁNH THIỀU Trang 15/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 16/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
nhập giá trị và vị trí cần thêm), thực hiện thao tác thêm phần tử tương ứng vào mảng và xuất mảng
ra màn hình theo dạng sau:
(hình 3.16b)
(hình 3.16c)
GV: PHẠM ÁNH THIỀU Trang 16/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 17/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 4: Class, objects và namespacesGiúp học viên thành thạo trong việc xây dựng các class cũng như các thành phần trong classtrên môi trường C#.
4.1. Giải phương tr ình bậc nhất Ax + B = 0
Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C#
Công việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Giai_PT_bac_1_class
2. nhấn chuột phải lên project Giai_PT_bac_1_class và chọn Add Class.3. Trong cửa sổ Add New Item, nhập tên cho class là PHUONG_TRINH_BAC_I.CS
4. Khai báo các thành phần trong class:
Biến thành viên (Field): lưu trữ thông tin về hệ số A và hệ số B
private float mHe_so_a;
private float mHe_so_b;
Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class
public float He_so_a
{
get { return mHe_so_a; }
set { mHe_so_a = value; }}
public float He_so_b
{
get { return mHe_so_b; }
set { mHe_so_b = value; }
}
Phương thức khởi tạo (Constructor): Khởi tạo các giá trị ban đầu cho hệ số A và hệ số B
public PHUONG_TRINH_BAC_I(float pHe_so_a, float pHe_so_b)
{
mHe_so_a = pHe_so_a;
mHe_so_b = pHe_so_b;
}
Phương thức tính nghiệm của phương tr ình
public string Nghiem()
{
string kq; //lưu kết quả nghiệm của pt//Xét nghiệm của phương trình theo hệ số a
if (mHe_so_a == 0)
if (mHe_so_b == 0)
kq="PT có vô số nghiệm";else
kq = "PT vô nghiệm";else
kq = "x= " + ((float)(-mHe_so_b / mHe_so_a)).ToString();
//trả về giá trị cho hàm
GV: PHẠM ÁNH THIỀU Trang 17/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 18/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
return kq;
}
5. Khai báo đối tượng và gọi thực hiện trong phương thức Main()
//khai báo bi
ến
float a, b;
//gán giá trị cho biếnConsole.Write("Nhập hệ số A: ");
a = float.Parse(Console.ReadLine());
Console.Write("Nhập hệ số B: ");
b = float.Parse(Console.ReadLine());
PHUONG_TRINH_BAC_I pt_bac_1 = new PHUONG_TRINH_BAC_I(a, b);
string nghiem = pt_bac_1.Nghiem();
Console.WriteLine("Nghiệm của phương trình {0}x + {1} = 0 là: x ={2}", a, b, nghiem);
Console.ReadLine();
6. Biên dịch và thực thi chương tr ình
(hình 4.1)
4.2. Giải phương tr ình bậc hai Ax2 + Bx + C = 0
Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu
cầu thực hiện:
1. Xây dựng class PHUONG_TRINH_BAC_II với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về hệ số A, hệ số B và hệ số C của phương tr ình
Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class
Phương thức khởi tạo (Contructor) với 3 tham số: hệ số A, hệ số B và Hệ số C
Phương thức tính nghiệm của phương tr ình: Giải và biện luận phương tr ình bậc 2 theo Hệ số A, hệ
số B và hệ số C. Nếu hệ số A = 0, sử dụng lớp PHUONG_TRINH_BAC_I để giải phương trình Bx + C= 0.
2. Xử lý và xuất ra màn hình theo dạng sau:
(hình 4.2)
GV: PHẠM ÁNH THIỀU Trang 18/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 19/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
4.3. Xử lý phân số
Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu
cầu thực hiện:1. Xây dựng class PHAN_SO với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về Tử số và Mẫu số
Thuộc tính (Property): Truy xuất đến giá trị của các biến th ành viên trong class
Phương thức khởi tạo (Contructor):
Phương thức khởi tạo không có tham số: gán giá trị mặc định cho Tử số và mẫu số là 1
Phương thức khởi tạo có 2 tham số là Tử số và Mẫu số
Các phương thức tính toán:
Phương thức tối giản phân số: dùng để tối giản phân số (ví dụ: 2/4 tối giản thành 1/2)
Phương thức Cộng: tính tổng của 2 phân số và trả về phân số kết quả sau khi đã được tối
giản
Phương thức Trừ: tính hiệu của 2 phân số và trả về phân số kết quả sau khi đã được tối
giản
Phương thức Nhân: tính tích của 2 phân số và trả về phân số kết quả sau khi đã được tối
giản
Phương thức Chia: tính thương của 2 phân số và trả về phân số kết quả sau khi đã được
tối giản
Trong đó:
a c a * d b * c a c a * c
b
a
b
d b * d
c a * d b
*
d b * d
* b d b * d
c a c a * d :
b d b * c
2. Trong phương thức Main. Xuất thông báo nhập giá trị cho tử số và mẫu số của các phần số theo
dạng sau:
(hình 4.3a)
3. Sau khi nhập tử số và Mẩu số cho 2 phân số, xuất thực đơn cho phép lựa chọn thao tác tr ên phânsố ra màn hình theo dạng sau:
GV: PHẠM ÁNH THIỀU Trang 19/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 20/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 4.3b)
4. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác Hiệu của hai phân số), thực
hiện thao tác tương ứng và xuất kết quả ra màn hình theo dạng sau:
(hình 4.3c)
4.4. Quản lý thông tin nhân viên
Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu
cầu thực hiện:
1. Xây dựng class NHAN_VIEN với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về nhân viên bao gồm: Họ tên nhân viên, Ngày vào
làm, Hệ số lương và Lương cơ bản (Lương cơ bản được khai báo static và có giá trị mặc định là
450000)
static double mLuong_co_ban = 450000;
Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class bao gồm: Họ
tên, Hệ số lương và Ngày vào làm. Bổ sung thêm thuộc tính Thâm niên (chỉ cho phép đọc dữ
liệu)
public int Tham_nien
{
GV: PHẠM ÁNH THIỀU Trang 20/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 21/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
get { return DateTime.Today.Year - mNgay_vao_lam.Year; }
}
Phương thức khởi tạo (Contructor): với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởitạo giá trị cho các biến thành viên tương ứng.
Các phương thức tính toán:
Phương thức tính tiền thưởng (Tien_thuong): tính tiền thưởng cho nhân viên dựa vào
thâm niên theo công thức:
Tiền thưởng = Thâm niên * 500000
Phương thức tính tiền lương (Tien_luong): tính tiền lương cho nhân viên dựa vào lương cơ
bản và hệ số lương theo công thức:
Tiền lương = Lương cơ bản * Hệ số lương
2. Trong phương thức Main. Xuất thông báo và nhập giá trị cho các thông tin của nhân viên theodạng sau:
(hình 4.4a)
3. Sau khi nhập thông tin, khỏi tạo đối tượng nhân viên với các thông tin vừa nhập và xuất ra màn
hình thông tin tiền lương và tiền thưởng của nhân viên đó như sau:
(hình 4.4b)
GV: PHẠM ÁNH THIỀU Trang 21/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 22/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 5: Tính thừa kế (Inheritance) và tính đahình (Polymorphism)
Giúp học viên thành thạo trong việc xây dựng các class kế thừa từ class khác cũng như hiểurõ tính đa h ình của class.
5.1. Quản lý thông tin nhân viên
Mục tiêu: Giúp học viên nắm rõ cách xây dựng class kế thừa trong C# Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là QL_Nhan_vien
2. Sử dụng lại class NHAN_VIEN đã xây dựng trong bài 4.4
3. Xây dựng class NHAN_VIEN_VAN_PHONG kế thừa từ class NHAN_VIEN với các yêu cầu:
Biến thành viên (Field): lưu trữ thêm thông tin của nhân viên văn phòng bao gồm: Số ngày vắng,
Định mức vắng (mặc định là 3 ngày) và Đơn giá phạt (mặc định là 100000/1 ngày)
protected int mSo_ngay_vang;
protected static int mDinh_muc_vang = 3;
protected static double mDon_gia_phat = 100000;
Thuộc tính (Property): Truy xuất đến giá trị của các biến th ành viên trong class bao gồm: Số ngày
vắng, Định mức vắng và Đơn giá phạtpublic int So_ngay_vang{
get { return mSo_ngay_vang; }
set { mSo_ngay_vang = value; }
}
public static int Dinh_muc_vang
{
get { return mDinh_muc_vang; }
set { mDinh_muc_vang = value; }
}
public static double Don_gia_phat
{get { return mDon_gia_phat; }
set { mDon_gia_phat = value; }}
Phương thức khởi tạo (Contructor):
Phương thức khởi tạo với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởi tạo giá
trị cho các b iến thành viên tương ứng trong class cơ sở (NHAN_VIEN).
public NHAN_VIEN_VAN_PHONG(string pHo_ten, double pHe_so_luong,
DateTime pNgay_vao_lam): base(pHo_ten, pHe_so_luong, pNgay_vao_lam){
}
Phương thức khởi tạo với 4 tham số Họ tên, Hệ số lương, Ngày vào làm và Số ngày vắng
để khởi tạo giá trị cho các biến thành viên tương ứng trong class cơ sở (NHAN_VIEN) và
GV: PHẠM ÁNH THIỀU Trang 22/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 23/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Số ngày vắng trong class NHAN_VIEN_VAN_PHONG.
public NHAN_VIEN_VAN_PHONG(string pHo_ten, double pHe_so_luong,
DateTime pNgay_vao_lam, int pSo_ngay_vang)
: base(pHo_ten, pHe_so_luong, pNgay_vao_lam){
mSo_ngay_vang = pSo_ngay_vang;
}
Các phương thức tính toán:
Phương thức tính tiền phạt: tính tiền phạt khi nhân viên nghỉ quá số ngày quy định
public double Tien_phat()
{
double tien = 0;
if (mSo_ngay_vang > mDinh_muc_vang)
tien = (mSo_ngay_vang - mDinh_muc_vang) * mDon_gia_phat;
return tien;
}
Phương thức tính tiền lương: tính tiền lương cho nhân viên (ghi đè lên phương thức tính
tiền lương trong lớp cơ sở)
public override double Tien_luong(){
return base.Tien_luong() - Tien_phat();
}
4. Thực hiện các bước tương tự như trên để xây dựng class NHAN_VIEN_SAN_XUAT kế thừa từ class
NHAN_VIEN với các yêu cầu:
Biến thành viên (Field): lưu trữ thêm thông tin của nhân viên sản xuất bao gồm: Số sản phẩm, Định mức sản phẩm (mặc định là 100 sản phẩm) và Đơn giá sản phẩm (mặc định là 10000/1
sản phẩm)
Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class bao gồm: Số sản
phẩm, Định mức sản phẩm và Đơn giá sản phẩm
Phương thức khởi tạo (Contructor):
Phương thức khởi tạo với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởi tạo giá
trị cho các b iến thành viên tương ứng trong class cơ sở (NHAN_VIEN).
Phương thức khởi tạo với 4 tham số Họ tên, Hệ số lương, Ngày vào làm và Số sản phẩm
để khởi tạo giá trị cho các biến thành viên tương ứng trong class cơ sở (NHAN_VIEN) và
Số sản phẩm trong class NHAN_VIEN_SAN_XUAT.
Các phương thức tính toán:
Phương thức tính tiền thưởng theo sản phẩm (Thuong_SP): tính tiền thưởng cho nhân v iên
khi hoàn thành vượt định mức số sản phẩm quy định theo công thức:
Tiền thưởng = (Số sản phẩm - Định mức sản phẩm) * Đơn giá sản phẩm *0.05;
Phương thức tính tiền lương (Tien_luong): tính tiền lương cho nhân viên (ghi đè lên
phương thức tính tiền lương trong lớp cơ sở)
Tiền lương = Số sản phẩm * Đơn giá sản phẩm + Tiền thưởng theo sảnphẩm
GV: PHẠM ÁNH THIỀU Trang 23/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 24/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
5. Khai báo và xử lý trong phương thức Main:
Console.WriteLine("QUAN LY HO SO NHAN VIEN");
Console.WriteLine("");Console.WriteLine("========== Thong tin nhan vien ==========");
//Nhập thông tin cho nhân viênConsole.Write("Ho ten nhan vien: ");
string hoten = Console.ReadLine();
Console.Write("Ngay vao lam (mm/dd/yyyy): ");
DateTime ngayvao = DateTime.Parse(Console.ReadLine());
Console.Write("He so luong: ");
float hesoluong = float.Parse(Console.ReadLine());
Console.WriteLine("========================================="); //
Tạo ra nhân viên mới NHAN_VIEN nv;
//Xuất thực đơn chọn loại nhân viên
Console.WriteLine("");
Console.WriteLine("Xin chon loai nhan vien: ");
Console.WriteLine("1. Nhan vien van phong");
Console.WriteLine("2. Nhan vien san xuat");
Console.Write("Ban cho loai nhan vien nao: ");
int loai = int.Parse(Console.ReadLine());
Console.WriteLine("=========================================");
string loainv = "";
if (loai == 1)
{
loainv="Nhan vien van phong";
Console.Write("So ngay vang cua nhan vien: ");
int songayvang = int.Parse(Console.ReadLine());
//Khởi tạo nhân viên là nhân viên văn phòngnv = new NHAN_VIEN_VAN_PHONG(hoten, hesoluong, ngayvao, songayvang);
}
else{
loainv="Nhan vien san xuat";
Console.Write("So san pham cua nhan vien: ");
int sosanpham = int.Parse(Console.ReadLine());
//Khởi tạo nhân viên là nhân viên sản xuấtnv = new NHAN_VIEN_SAN_XUAT(hoten, hesoluong, ngayvao, sosanpham);
}
Console.WriteLine("=========================================");
Console.WriteLine("");
Console.WriteLine("Thong tin luong cua {0}", nv.Ho_ten_nhan_vien);Console.WriteLine("Loai nhan vien: {0}", loainv);
Console.WriteLine("Tien luong: {0,9}",
nv.Tien_luong().ToString("#,##0"));
Console.ReadLine();
6. Kết quả xuất ra màn hình:
GV: PHẠM ÁNH THIỀU Trang 24/54
5/13/2018 bai_tap_c_01_6449 - slidepdf.com
http://slidepdf.com/reader/full/baitapc016449 25/25
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 5.1)
5.2. Quản lý các lớp h ình học
Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trừu tượng (Abstract) trong C# Công
việc thực hiện:
1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Xu_ly_hinh_hoc
2. Xây dựng class trừu tượng HINH_HOC với hai phương thức trừu tượng tính diện tích và chu vi như
sau:
abstract class HINH_HOC{
public abstract double Dien_tich();
public abstract double Chu_vi();
}
3. Xây dựng lớp HINH_TRON được dẫn xuất từ lớp HINH_HOC với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về bán kính của h ình tròn
Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class
Phương thức khởi tạo (Constructor): với 1 tham số bán kính để khởi tạo giá trị ban đầu cho biến
thành viên tương ứng trong class HINH_TRON
Phương thức tính toán: cài đặt lại phương thức tính Diện tích và Chu vi được ghi đ è từ lớp
HINH_HOC.
class HINH_TRON: HINH_HOC
{
double mBan_kinh;
const double PI = 3.1415;
public HINH_TRON(double pBan_kinh)
{
mBan_kinh = pBan_kinh;
}
public double Ban_kinh
{
get { return mBan_kinh; }
set { mBan_kinh = value; }}
GV: PHẠM ÁNH THIỀU Trang 25/54
Recommended