TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
public override double Dien_tich()
{
return mBan_kinh * mBan_kinh * PI;
}
public override double Chu_vi()
{
return 2 * mBan_kinh * PI;
}
4. Thực hiện các bước tương tự để xây dựng lớp HINH_CHU_NHAT được dẫn xuất từ lớp HINH_HOC
5. Khai báo trong phương thức Main:
Console.WriteLine("CHON LOAI HINH HOC");
Console.WriteLine("1. Hinh tron");
Console.WriteLine("2. Hinh chu nhat");
Console.Write("Ban chon loai nao: ");
int loai = int.Parse(Console.ReadLine());
Console.WriteLine("");
if (loai == 1)
{
Console.Write("Nhap ban kinh cho hinh tron: ");
double bankinh = double.Parse(Console.ReadLine());
HINH_TRON HT = new HINH_TRON(bankinh);
Console.WriteLine("");
Console.WriteLine("Dien tich hinh tron: {0}", HT.Dien_tich());
Console.WriteLine("Chu vi hinh tron: {0}", HT.Chu_vi());
}
else
{
Console.Write("Nhap chieu dai hinh chu nhat: ");
double chieudai = double.Parse(Console.ReadLine());
Console.Write("Nhap chieu rong hinh chu nhat: ");
double chieurong = double.Parse(Console.ReadLine());
HINH_CHU_NHAT HCN = new HINH_CHU_NHAT(chieudai, chieurong);
Console.WriteLine("");
Console.WriteLine("Dien tich hinh chu nhat: {0}",
HCN.Dien_tich());
Console.WriteLine("Chu vi hinh chu nhat: {0}", HCN.Chu_vi());
}
Console.ReadLine();
6. Thực thi chương trình và ghi nhận kết quả:
(hình 5.2)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
26/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
5.3.
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 niêm phong (Sealed) 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à Lop_niem_phong
2. Xây dựng class niêm phong (Sealed) NHAN_VIEN với các yêu cầu (có thể sử dụng lại lớp
NHAN_VIEN trong bài 4.4):
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
{
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ởi
tạ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
3. Xây dựng lớp NHAN_VIEN_VAN_PHONG kế thừa từ lớp NHAN_VIEN với khai báo như sau:
class NHAN_VIEN_VAN_PHONG: NHAN_VIEN
{
protected int mSo_ngay_vang;
protected static int mDinh_muc_vang = 3;
protected static double mDon_gia_phat = 100000;
public 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; }
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
27/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
set { mDon_gia_phat = value; }
}
}
4. Biên dịch ứng dụng và ghi nhận lỗi xảy ra
(hình 5.3)
5.4.
Quản lý danh sách máy tính
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# Yêu
cầu thực hiện:
1. Xây dựng chương trình quản lý danh sách các đối tượng máy tính để bàn và máy tính xách tay:
2. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Quan_ly_may_tinh
3. Xây dựng class MAY_TINH với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về Số hiệu, Đơn giá, Hãng sản xuất
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 3 tham số: Số hiệu, Đơn giá và Hãng sản xuất để khởi tạo giá
trị ban đầu cho biến thành viên tương ứng trong class MAY_TINH
Phương thức tính toán: cài đặt phương thức tính Hiển thị thông tin của máy tính
(Hien_thi_thong_tin) cho phép ghi đè (virtual) trả về chuỗi gồm các thông tin: Số hiệu, Đơn
giá và
Hãng sản xuất.
4. Xây dựng class MAY_TINH_DE_BAN được dẫn xuất từ lớp MAY_TINH với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về CPU, RAM
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 5 tham số: Số hiệu, Đơn giá, Hãng sản xuất để khởi tạo giá
trị ban đầu cho biến thành viên tương ứng trong class MAY_TINH và CPU, RAM để khởi tạo giá trị ban
đầu cho biến thành viên tương ứng trong class MAY_TINH_DE_BAN.
Phương thức tính toán: cài đặt lại phương thức tính Hiển thị thông tin của máy tính
(Hien_thi_thong_tin) trả về chuỗi gồm các thông tin: Số hiệu, Đơn giá, Hãng sản xuất, CPU và
RAM.
5. Xây dựng class MAY_TINH_XACH_TAY được dẫn xuất từ lớp MAY_TINH với các yêu cầu:
Biến thành viên (Field): lưu trữ thông tin về Trọng lượng, Thời gian PIN, Kích thước màn hì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 (Constructor): với 6 tham số: Số hiệu, Đơn giá, Hãng sản xuất để khởi tạo giá trị
ban đầu cho biến thành viên tương ứng trong class MAY_TINH và Trọng lượng, Thời gian PIN, Kích
thước màn hình để khởi tạo giá trị ban đầu cho biến thành viên tương ứng trong class
MAY_TINH_XACH_TAY.
Phương thức tính toán: cài đặt lại phương thức tính Hiển thị thông tin của máy tính
(Hien_thi_thong_tin) trả về chuỗi 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 và Kích thước màn hình.
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
28/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
6. Khai báo trong phương thức Main:
Khai báo mảng MAY_TINH để chứa danh sách máy tính
MAY_TINH[] dsmaytinh = new MAY_TINH[3];
Khởi tạo danh sách các máy tính
MAY_TINH_DE_BAN mt1 = new MAY_TINH_DE_BAN("D2122", "Dell",
5600000,"Pentium 4","1024MB");
MAY_TINH_XACH_TAY mt2 = new MAY_TINH_XACH_TAY("T43-100", "IBM",
22000000, 2.03, 4, 14);
MAY_TINH_XACH_TAY mt3 = new MAY_TINH_XACH_TAY("HP7200", "HP",
20000000, 2.05, 4, 15);
dsmaytinh[0] = mt1;
dsmaytinh[1] = mt2;
dsmaytinh[2] = mt3;
Duyệt qua tập hợp các máy tính và hiển thị thông tin
foreach (MAY_TINH obj in dsmaytinh)
{
Console.WriteLine("========================================="); if
(obj is MAY_TINH_DE_BAN)
{
Console.WriteLine(((MAY_TINH_DE_BAN)obj).Ten_goi());
Console.WriteLine(((MAY_TINH_DE_BAN)obj).Hien_thi_thong_tin());
}
else
{
Console.WriteLine(((MAY_TINH_XACH_TAY)obj).Ten_goi());
Console.WriteLine(((MAY_TINH_XACH_TAY)obj).
Hien_thi_thong_tin());
}
Console.WriteLine("=========================================");
}
(hình 5.4)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
29/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 6:
Lớp giao tiếp (Interface)
Giúp học viên thành thạo trong việc xây dựng các lớp giao tiếp trong C#.
6.1.
Quản lý đối tượng hình học
Mục tiêu: Giúp học viên nắm rõ cách cài đặt lớp giao tiếp 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à So_sanh_hinh_hoc. Cài đặt
interface IComparable để gọi phương thức Sort cho phép sắp xếp mảng hình học theo chu vi (diện
tích) tăng đần (giảm dần).
2. Xây dựng lớp hình học với các phương thức cho phép kế thừa như sau:
class HINH_HOC
{
public virtual float ChuVi(){
return 0;
}
public virtual float DienTich(){
return 0;
}
public virtual void Ten(){
}
}
3. Xây dựng lớp HINH_TRON kế thừa từ lớp HINH_HOC với các thuộc tính và phương thức sau:
class HINH_TRON : HINH_HOC
{
float mBan_kinh;
public HinhTron(float pBan_kinh)
{
mBan_kinh = pBan_kinh;
}
public override float ChuVi()
{
return 2 * r;
}
public override float DienTich()
{
return (float)Math.PI * r * r;
}
public override void Ten()
{
Console.WriteLine("Hinh Tron");
}
}
4. Xây dựng lớp HINH_CHU_NHAT kết thừa từ lớp HINH_HOC với các thuộc tính và phương thức như
sau:
class HINH_CHU_NHAT : HINH_HOC
{
public float mChieu_dai, mChieu_rong;
public ChuNhat(float pChieu_dai, float pChieu_rong)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
30/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
{
mChieu_dai = mChieu_dai;
mChieu_rong = pChieu_rong;
}
public override float ChuVi()
{
return (mChieu_dai + mChieu_rong) * 2;
}
public override float DienTich()
{
return mChieu_dai * mChieu_rong;
}
public override void Ten()
{
Console.WriteLine("Hinh Chu nhat");
}
}
5. Cài đặt cho interface IComparable trong lớp HINH_HOC
Khai báo ICompare trong khai báo lớp
class HINH_HOC : Icomparable
{
…
}
Cài đặt cho phương thức CompareTo, có thể so sánh theo Chu vi hay Diện tích
class HINH_HOC : Icomparable
{
…
public int CompareTo(object obj)
{
HinhHoc hh = (HinhHoc)obj;
//if (ChuVi() > hh.ChuVi())
// return 1;
So sánh theo chu vi
//else if (ChuVi() < hh.ChuVi())
// return -1;
if (DienTich() > hh.DienTich())
return 1;
So sánh theo diện tích
else if (DienTich() < hh.DienTich())
return -1;
return 0;
}
}
6. Khai báo và khởi tạo trong phương thức Main:
Tạo mảng hinhhoc kiểu HINH_HOC gồm4 phần tử
HinhHoc[] hinhhoc = new HinhHoc[4];
Khởi tạo các phần tử:
hinhhoc[0] = new HINH_TRON(3);
hinhhoc[1] = new HINH_TRON(5);
hinhhoc[2] = new HINH_CHU_NHAT(3, 5);
hinhhoc[3] = new HINH_CHU_NHAT(7, 9);
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
31/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Gọi phương thức Array.Sort để sắp xếp mảng
Array.Sort(hinhhoc);
Duyệt mảng, in tên, chu vi, diện tích của các đối tượng hình học có trong mảng hinhhoc.
for (int i = 0; i < hinhhoc.Length; i++)
{
hinhhoc[i].Ten();
Console.WriteLine("Chu vi: {0}", hinhhoc[i].Chu_vi());
Console.WriteLine("Dien tich: {0}", hinhhoc[i].Dien_tich());
Console.WriteLine("");
}
Console.ReadLine();
(hình 6.1)
6.2.
Xử lý phân số
Mục tiêu: Giúp học viên nắm rõ cách cài đặt lớp giao tiếp 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_phan_so.
2. Tạo interface IMyNhapXuat, khai báo hàm nhập, hàm xuất phân số ra màn hình Console.
interface INhapXuat
{
void Nhap();
void Xuat();
}
3. Xây dựng lớp PHAN_SO với các thành phần như sau:
class PHAN_SO
{
int mTu_so;
int mMau_so;
public PHAN_SO(){
}
public PHAN_SO(int pTuso, int pMauso)
{
mTu_so = pTuso;
mMau_so = pMauso;
}
}
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
32/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
4. Cài đặt Interface INhapXuat cho lớp PHAN_SO:
class PHAN_SO: INhapXuat
{
public void Nhap()
{
Console.Write("Nhap tu so:");
mTu_so = int.Parse(Console.ReadLine());
Console.Write("Nhap mau so:");
mMau_so = int.Parse(Console.ReadLine());
}
public void Xuat()
{
Console.WriteLine("{0}/{1}", mTu_so, mMau_so);
}
}
5. Cài đặt thêm Interface IComparable cho lớp PHAN_SO:
class PHAN_SO: INhapXuat, IComparable
{
public int CompareTo(object obj)
{
PHAN_SO p = (PHAN_SO)obj;
double giatri1 = 1.0 * mTu_so / mMau_so;
double giatri2 = 1.0 * p.mTu_so / p.mMau_so; if
(giatri1 > giatri2)
return 1;
else if (giatri1 < giatri2)
return -1;
else
return 0;
}
}
6. Khai báo và khởi tạo đối tượng trong phương thức Main:
Khai báo mảng p kiểu PHAN_SO có 2 phần tử:
PHAN_SO[] p = new PHAN_SO[2];
Duyệt mảng và nhập giá trị ch otừng phần tử:
for (int i = 0; i < p.Length; i++)
{
Console.WriteLine("\nPhan so thu {0}", i + 1);
p[i] = new PHAN_SO();
p[i].Nhap();
}
Gọi phương thức Array.Sort để sắp xếp mảng phân số tăng dần và xuất mảng phần số:
Array.Sort(p);
Console.WriteLine("\nCac phan so sau khi da sap xep"); for
(int i = 0; i < p.Length; i++)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
33/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
{
p[i].Xuat();
}
Console.ReadLine();
7. Biên dịch và thực thi chương trình:
(hình 6.2)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
34/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 7:
Xử lý nhập/xuất dữ liệu
(Input/Output)
Giúp học viên thành thạo trong việc sử dụng các lớp đối tượng để truy xuất hệ thống tập
tin, thư mục trong C#.
7.1.
Thao tác tập tin và thư mục
Mục tiêu: Giúp học viên nắm rõ cách duyệt thư mục 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à Thao_tac_tap_tin_thu_muc.
2. Tham chiếu đến Namespace System.IO để sử dụng các lớp thao tác với hệ thống tập tin, thư mục
using System.IO;
3. Xây dựng phương thức Đọc nôi dung của thư mục như sau:
public void Doc_thu_muc(string duongdan)
{
Console.WriteLine("\n Ten tap tin/thu muc Loai Ngay tao");
string[] thu_muc = Directory.GetDirectories(duongdan);
foreach (string tm in thu_muc)
{
Console.WriteLine("{0,26} <Thu muc> {1,24} ",
Path.GetFileName(tm),
Directory.GetCreationTime(tm).ToString("dd/MM/yyyy
HH:mm:ss"));
}
string[] tap_tin = Directory.GetFiles(duongdan);
foreach (string tt in tap_tin)
{
Console.WriteLine("{0,26} {1,24} ",
Path.GetFileName(tt),
Directory.GetCreationTime(tt).ToString("dd/MM/yyyy
HH:mm:ss"));
}
}
4. Khai báo trong phương thức Main
Console.Write("\nNhap duong dan thu muc can doc: ");
string duongdan = Console.ReadLine();
Program p = new Program();
p.Doc_thu_muc(duongdan);
Console.ReadLine();
5. Biên dịch và thực thi chương trình.
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
35/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 7.1)
7.2.
Thao tác tập tin và thư mục
Mục tiêu: Giúp học viên nắm rõ cách truy xuất thông tin của tập tin và thư mục 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à Thong_tin_tap_tin_thu_muc.
2. Xử lý nhập vào đường dẫn của thư mục cần truy xuất (ví dụ: C:\)
3. Duyệt qua từng thư mục và tập tin trong đường dẫn được chỉ định sau đó xuất ra thông tin về các
thuộc tính.
(hình 7.2)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
36/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
7.3.
Truy xuất nội dung tập tin
Mục tiêu: Giúp học viên nắm rõ cách truy xuất nội dung của tập tin trong C# Yêu
cầu 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à Doc_tap_tin. 2. Xử
lý nhập vào đường dẫn của tập tin cần truy xuất (ví dụ: C:\boot.ini)
3. Kiểm tra xem tập tin đó có tồn tại hay không? Nếu không tồn tại thì xuất thông báo lỗi, ngược lại
xuất ra màn hình các thông tin:
Kích thước của tập tin
Ngày giờ tạo tập tin
Ngày giờ truy xuất cuối cùng
Các thuộc tính được thiết lập cho tập tin Nội
dung của tập tin
(hình 7.3)
7.4.
Tạo tập tin
Mục tiêu: Giúp học viên nắm rõ cách tạo và truy xuất tập tin trong C# Yêu
cầu 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à Tao_tap_tin.
2. Xử lý nhập vào đường dẫn của tập tin cần truy xuất (ví dụ: C:\boot.ini)
3. Kiểm tra xem tập tin đó có tồn tại hay không? Nếu tồn tại thì xuất thông báo hỏi người dùng có
đồng ý ghi đè lên nội dung đã có hay không (hình 7.4a)
(hình 7.4a)
4. Nếu không đồng ý ghi đè thì thoát khỏi chương trình. Nếu tập tin chưa tồn tại hoặc người dùng xác
nhận đồng ý (Y) thì xuất thông báo nhập nội dung cho tập tin như (hình 7.4b)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
37/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 7.4b)
5. Thực hiện nhập vào nội dung cho tập tin (cho đến khi nhấn phím ECS)
(hình 7.4c)
6. Khi người dùng nhấn phím ESC sẽ ghi nhận nội dung vừa nhập vào tập tin được chỉ định và xuất
thông báo nếu cập nhật thành công (hình 7.4d)
(hình 7.4c)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
38/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 8:
Collections và Generic
Giúp học viên thành thạo trong việc sử dụng các đối tượng Collection cũng như xây
dựng
kiểu Generic trong C#.
8.1.
Quản lý danh sách học viên
Mục tiêu: Giúp học viên nắm rõ cách sử dụng đối tượng ArrayList 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à Quan_ly_hoc_vien.
2. Khai báo Namespace System.Collections.
3. Khởi tạo ArrayList chứa danh sách tên các học viên trong lớp
ArrayList hocvien = new ArrayList();
hocvien.Add("Anh");
hocvien.Add("Bao");
hocvien.Add("Chi");
hocvien.Add("Dung");
hocvien.Add("Hung");
hocvien.Add("Linh");
hocvien.Add("Tai");
4. Khởi tạo ArrayList chứa danh sách tên của các học viên mới
ArrayList hocvienmoi = new ArrayList();
hocvienmoi.Add("An");
hocvienmoi.Add("Anh");
hocvienmoi.Add("Hoa");
hocvienmoi.Add("Yen");
5.
Thêm các học viên mới vào danh sách học viên trong lớp mà vẫn đảm bảo danh sách học viên
được sắp sếp theo thứ tự ABC (chỉ thêm nếu tên học viên đó chưa có trong danh sách).
Cách 1: dùng phương thức Add để thêm vào cuối danh sách sau đó sắp xếp lại
for (int i = 0; i < hocvienmoi.Count; i++)
{
if (!hocvien.Contains(hocvienmoi[i]))
{
hocvien.Add(hocvienmoi[i]);
}
}
hocvien.Sort();
Cách 2: dùng phương thức Insert để chèn vào đúng vị trí trong danh sách
for (int i = 0; i < hocvienmoi.Count; i++){
if (hocvien.Contains(hocvienmoi[i])){
Console.WriteLine("Co " + hocvienmoi[i]);
}
else{
for (int j = 0; j < hocvien.Count; j++){
int kq =
hocvien[j].ToString().CompareTo(hocvienmoi[i].ToString()); if
(j == hocvien.Count - 1 && kq == -1){
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
39/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
hocvien.Insert(hocvien.Count, hocvienmoi[i]);
break;
}
if (kq > 0){
hocvien.Insert(j, hocvienmoi[i]);
break;
}
}
}
}
6. Duyệt danh sách các học viên và xuất ra màn hình
for (int i = 0; i < hocvien.Count; i++)
Console.WriteLine(hocvien[i]);
(hình 8.1)
8.2.
Quản lý danh sách học viên
Mục tiêu: Giúp học viên nắm rõ cách sử dụng đối tượng SortedList 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à Quan_ly_hoc_vien_sortedlist.
2. Khai báo Namespace System.Collections.
3. Tạo mảng chuỗi danh sách học viên trong lớp
string[] hocvien ={"Anh", "Bao", "Chi", "Dung", "Linh", "Tai"};
4. Tạo mảng chuỗi danh sách học viên mới
string[] hocvienmoi ={"An", "Hoa", "Yen"};
5. Khởi tạo SortedList chứa danh sách các học viên trong lớp
SortedList s = new SortedList();
6. Thêm danh sách học viên trong lớp vào SortedList
for (int i = 0; i < hocvien.Length; i++)
s.Add(hocvien[i], hocvien[i]);
7. Thêm danh sách học viên mới vào SortedList
for (int i = 0; i < hocvienmoi.Length; i++)
s.Add(hocvienmoi[i], hocvienmoi[i]);
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
40/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
8. Xuất danh sách học viên ra màn hình
foreach (DictionaryEntry d in s)
Console.WriteLine(d.Value);
8.3.
Chuyển số thành chữ
Mục tiêu: Giúp học viên nắm rõ cách sử dụng đối tượng HashTable 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à Chuyen_doi_so.
2. Khai báo Namespace System.Collections.
3. Khai báo mảng chuỗi các ký số
string[] kyso ={"0","1","2","3","4","5","6","7","8","9" };
4. Khai báo mảng chuỗi các chuỗi ký tự tương ứng với các ký số
string[] kytu = {"Khong ", "Mot ", "Hai ", "Ba ", "Bon ", "Nam ", "Sau ",
"Bay ", "Tam ", "Chin "};
5. Tạo HashTable với mảng chuỗi ký số là key và chuỗi ký tự là value
Hashtable has = new Hashtable();
for (int i = 0; i < kyso.Length; i++){
has.Add(kyso[i], kytu[i]);
}
6. Xử lý đọc chuỗi số từ bàn phím
Console.Write("Nhap chuoi ky so: ");
string chuoikyso = Console.ReadLine();
7. Xử lý chuyển đổi chuỗi ký số sang chuỗi ký tự và hiển thị kết quả lên màn hình
string chuoikytu = "";
if (chuoikyso.Length != 0)
{
for (int i = 0; i < chuoikyso.Length; i++)
{
chuoikytu+=has[chuoikyso[i].ToString()];
}
}
Console.WriteLine("Chuoi ky tu ket qua: {0}", chuoikytu");
Console.ReadLine();
(hình 8.3)
8.4.
Đọc số
Mục tiêu: Giúp học viên nắm rõ cách sử dụng đối tượng HashTable kết hợp với cấu trúc điều khiển
trong C#
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
41/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Yêu cầu 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à Doc_so.
2. Khai báo Namespace System.Collections.
3. Xử lý nhập vào chuỗi số (tối đa là 3 ký số).
4. Xử lý đọc chuỗi số và xuất ra màn hình theo dạng sau:
(hình 8.4)
8.5.
Từ điển Anh - Việt
Mục tiêu: Giúp học viên nắm rõ cách sử dụng đối tượng HashTable trong C# Yêu
cầu thực hiện:
1. Tạo tập tin văn bản Tu_dien.txt với cấu trúc <Từ tiếng Anh>: <Nghĩa tiếng Việt> theo dạng như
sau:
(hình 8.5a)
2. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Tu_dien_anh_viet.
3. Khai báo Namespace System.Collections và System.IO.
4. Xử lý đọc nội dung tập tin Tu_dien.txt và đưa vào HashTable với key là từ tiếng Anh và value là
nghĩa tiếng Việt của từ.
5. Xử lý cho phép người dùng nhập vào từ tiếng Anh và xuất ra nghĩa tiếng Việt của từ đó
Nếu từ đó chưa có trong từ điển, xuất thông báo ra màn hình cho người dùng biết (hình 8.5b)
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
42/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
(hình 8.5b)
Nếu từ đó đã có trong từ điển, xuất nghĩa tiếng Việt của từ đó ra màn hình (hình 8.5c)
(hình 8.5c)
8.6.
Sử dụng Stack
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách sử dụng đối tượng Stack trong C# Các
bướ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à Su_dung_stack.
2. Khai báo Namespace System.Collections.
3. Khai báo mảng chuỗi cần hiển thị
string[] chuoi ={ "N", "N", "E", " ", "T", "A", " ", "N", "G", "A", "L",
"P", " ", "I", "R", "T", "H", "N" };
4. Khai báo mảng các thao tác xử lý với Stack
int[] thaotac ={ 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,
0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0 };
5. Thực thi các thao tác và in kết quả ra màn hình:
int nchuoinhap = 0, i = 0;
while (i < thaotac.Length)
{
if (thaotac[i] == 1)
{
s.Push(chuoi[nchuoinhap++]);
}
else
{
Console.Write(s.Pop());
}
i++;
}
Console.ReadLine();
(hình 8.6)
8.7.
Danh sách học viên
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách sử dụng đối tượng NameValueColleciton trong C#
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
43/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
Các bước thực hiện:
1. Tạo tập tin Danhsach.txt lưu danh sách các học viên (mỗi học viên là một dòng), cấu trúc của tập
tin Danhsach.txt theo dạng: <Mã học viên>|<Họ học viên>|<Tên học viên>|<Ngày sinh>|<Địa
chỉ>
(hình 8.7a)
2. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Danh_sach_hoc_vien.
3. Khai báo Namespace System.Collections, System.Collections.Specialized và System.IO.
4. Xây dựng lớp HOC_VIEN để quản lý các thông tin của học viên với các thành phần như sau:
class HOC_VIEN
{
public string MaHV;
public string HoHV;
public string TenHV;
public DateTime NgaySinhHV;
public string DiaChi;
public HOC_VIEN(){
}
public HOC_VIEN(string pmahv, string phohv, string ptenhv,
DateTime pngaysinhhv, string pdiachi){
MaHV = pmahv;
HoHV = phohv;
TenHV = ptenhv;
NgaySinhHV = pngaysinhhv;
DiaChi = pdiachi;
}
public void Nhap(){
Console.WriteLine("Nhap thong tin hoc vien moi");
Console.Write("Ma hoc vien:");
MaHV = Console.ReadLine();
Console.Write("Ho hoc vien:");
HoHV = Console.ReadLine();
Console.Write("Ten hoc vien:");
TenHV = Console.ReadLine();
Console.Write("Ngay sinh hoc vien (dd/mm/yyyy):");
NgaySinhHV =DateTime.Parse(Console.ReadLine());
Console.Write("Dia chi hoc vien:");
DiaChi = Console.ReadLine();
}
}
5. Khai báo biến tĩnh toàn cục dshv kiểu NameValueCollection lưu danh sách học viên
static NameValueCollection dshv = new NameValueCollection();
6. Xử lý đọc danh sách học viên từ tập tin Danhsach.txt và thêm vào dshv
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
44/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
public static void DocDanhSach()
{
dshv.Clear();
StreamReader sr = File.OpenText("DanhSach.txt");
while (!sr.EndOfStream)
{
string hvinfo = sr.ReadLine();
string[] hvarr = hvinfo.Split('|');
string mahv = hvarr[0];
string hohv = hvarr[1];
string tenhv = hvarr[2];
DateTime ngaysinh = DateTime.Parse(hvarr[3]);
string diachi = hvarr[4];
dshv.Add(mahv, hohv + " " + tenhv);
dshv.Add(mahv, ngaysinh.ToString("dd/MM/yyyy"));
dshv.Add(mahv, diachi);
}
}
7. Xử lý xuất danh sách học viên
public static void XuatDanhSach()
{
for (int i = 0; i < dshv.Count; i++)
{
Console.WriteLine(dshv[i]);
}
}
8. Xử lý thêm học viên mới vào danh sách
public static void ThemHocVien()
{
Console.WriteLine("Nhap thong tin hoc vien");
HOC_VIEN hv = new HOC_VIEN();
hv.Nhap();
dshv.Add(hv.MaHV, hv.HoHV + " " + hv.TenHV);
dshv.Add(hv.MaHV, hv.NgaySinhHV.ToString("dd/MM/yyyy"));
dshv.Add(hv.MaHV, hv.DiaChi);
}
9. Xử lý xóa học viên khỏi danh sách
public static void XoaHocVien()
{
Console.WriteLine("Ma hoc vien can xoa:");
string mahv = Console.ReadLine();
dshv.Remove(mahv);
}
10. Xử lý tìm kiếm thông tin học viên theo mã số
public static void TimHocVien()
{
Console.Write("Ma hoc vien can tim:");
string mahv = Console.ReadLine();
if (dshv[mahv] == null)
Console.WriteLine("\nKHONG TIM THAY HOC VIEN {0} !", mahv);
else
Console.WriteLine("\nThong tin hoc vien:{0}", dshv[mahv]);
}
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
45/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
11. Cài đặt xử lý trong phương thức Main:
DocDanhSach();
bool thoat = true;
string xuly = "";
while (thoat)
{
Console.Clear();
Console.WriteLine("Cac xu ly");
Console.WriteLine("1: Xem danh sach hoc vien");
Console.WriteLine("2: Tim hoc vien");
Console.WriteLine("3: Them hoc vien");
Console.WriteLine("4: Xoa hoc vien");
Console.WriteLine("0: Thoat");
Console.Write("Chon xu ly: ");
xuly = Console.ReadLine();
switch (xuly)
{
case "1":
XuatDanhSach();
break;
case "2":
TimHocVien();
break;
case "3":
ThemHocVien();
break;
case "4":
XoaHocVien();
break;
case "0":
thoat = false;
break;
}
Console.WriteLine("Nhan phim bat ky de tiep tuc ");
Console.ReadLine();
}
8.8.
Bài tập làm thêm
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách sử dụng đối tượng Generic Colections trong C# Yêu
cầu thực hiện: Thực hiện lại các bài tập trên sử dụng Generic Collections.
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
46/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
BÀI 9:
Serialization
Giúp học viên thành thạo trong các thao tác Serialize và Deserialize dữ liệu trong C#.
9.1.
Quản lý giỏ hàng
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách Serialize dữ liệu trong C# thông qua đối tượng
BinaryFormatter.
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à Quan_ly_gio_hang.
2. Khai báo các Namespace:
System.IO,
System.Runtime.Serialization
System.Runtime.Serialization.Formatters.Binary.
3. Tạo lớp GIO_HANG có phạm vi public với khai báo [Serializable] và có các thành phần như sau:
[Serializable]
class GIO_HANG
{
string Ten_hang;
string Mo_ta;
double Don_gia;
int So_luong;
double Thanh_tien;
public GIO_HANG(string pTenhang, string pMota, double pDongia, int
pSoluong)
{
Ten_hang = pTenhang;
Mo_ta = pMota;
Don_gia = pDongia;
So_luong = pSoluong;
Thanh_tien = Don_gia * So_luong;
}
public void Xuat(){
Console.WriteLine("{0}\t{1}\t\t{2} \t{3}\t\t{4}", Ten_hang,
Mo_ta, Don_gia, So_luong, Thanh_tien);
}
}
4. Khai báo trong phương thức Main:
Tạo thông tin giỏ hàng
List<GIO_HANG> giohang = new List<GIO_HANG>();
giohang.Add(new GIO_HANG("Tivi Sony", "21 inch", 7000000, 10));
giohang.Add(new GIO_HANG("Tu lanh LG", "20 lit", 5500000, 8));
giohang.Add(new GIO_HANG("May lanh LG", "2 cuc", 5300000, 10));
giohang.Add(new GIO_HANG("DVD Samsung", "Dau DVD", 2000000, 20));
Thực hiện Serialize thông tin giỏ hàng và lưu vào tập tin C:\GioHang.txt
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
47/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
FileStream fs = new FileStream("C:/GioHang.txt", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, giohang);
fs.Close();
Thực hiện Deserialize thông tin giỏ hàng từ tập tin C:\GioHang.txt và hiển thị lên màn hình
List<GIO_HANG> giohang1 = new List<GIO_HANG>();
FileStream fs1 = new FileStream("C:/GioHang.txt", FileMode.Open);
BinaryFormatter bf1 = new BinaryFormatter();
giohang1 = (List<GIO_HANG>)bf1.Deserialize(fs1);
fs1.Close();
Console.WriteLine("{0}\t{1}\t\t{2} \t{3}\t{4}", "Ten hang hoa", "Mo
ta", "Don gia", "So luong", "Thanh tien");
Console.WriteLine("{0}\t{1}\t\t{2} \t{3}\t{4}", "============",
"=====", "=======", "========", "==========");
for (int i = 0; i < giohang1.Count; i++)
{
giohang1[i].Xuat();
}
Console.ReadLine();
(hình 9.1)
9.2.
Quản lý giỏ hàng XML
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách Serialize dữ liệu trong C# thông qua đối tượng
XmlSerializer.
Yêu cầu 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à Quan_ly_gio_hang_xml.
2. Khai báo Namespace System.Xml.Serialization và System.IO.
3. Thực hiện lại bài 9.1 nhưng dùng đối tượng XmlSerializer thay cho BinaryFormatter.
4. Khi sử dụng đối tượng XmlSerializer cần lưu ý:
Lớp giỏ hàng và các thành phần bên trong phải được khai báo với phạm vi là public. Phải
khai báo hàm khởi tạo không có tham số.
public class GIO_HANG
{
public string TenHangHoa;
public string MoTa;
public double DonGia;
public int SoLuong;
public double ThanhTien;
public GIO_HANG()
{
}
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
48/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
public GIO_HANG(string _tenhanghoa, string _mota, double _dongia, int
_soluong)
{
TenHangHoa = _tenhanghoa;
MoTa = _mota;
DonGia = _dongia;
SoLuong = _soluong;
ThanhTien = DonGia * SoLuong;
}
public void Xuat()
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", TenHangHoa, MoTa,
DonGia, SoLuong, ThanhTien);
}
}
(hình 9.2)
9.3.
Quản lý giỏ hàng Soap
Mục tiêu: Giúp học viên nắm rõ ý nghĩa và cách Serialize dữ liệu trong C# thông qua đối tượng
SoapFormatter.
Yêu cầu 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à Quan_ly_gio_hang_soap.
2. Tham chiếu (Reference) đến thư viện System.RunTime.Serialization.Formatters.Soap
3. Khai báo các Namespace:
System.Runtime.Serialization;
System.Runtime.Serialization.Formatters.Soap;
System.IO;
System.Collections;
4. Tạo lớp giỏ hàng như bài 9.1 với các khai báo bổ sung:
Khai báo [Serialization] trong khai báo lớp giỏ hàng
Cài đặt interface IDeserializationCallback trong khai báo lớp giỏ hàng Khai
báo từ khóa [NonSerialized] cho thuộc tính thành tiền
Cài đặt phương thức IderserializationCallback.OnDeserialization của interface
IDeserializationCallback để tính lại giá trị thuộc tính thành tiền sau khi Deserialize
[Serializable]
class GIO_HANG: IDeserializationCallback
{
string Ten_hang;
string Mo_ta;
double Don_gia;
int So_luong;
[NonSerialized]double Thanh_tien;
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
49/54
TRUNG TÂM TIN HỌC – AN QUỐC VIỆT
void IDeserializationCallback.OnDeserialization(object sender)
{
Thanh_tien = Don_gia * So_luong;
}
public GIO_HANG(string pTen_hang, string pMo_ta, double pDon_gia, int
pSo_luong)
{
Ten_hang = pTen_hang;
Mo_ta = pMo_ta;
Don_gia = pDon_gia;
So_luong = pSo_luong;
Thanh_tien = Don_gia * So_luong;
}
public void Xuat()
{
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", Ten_hang, Mo_ta,
Don_gia, So_luong, Thanh_tien);
}
}
5. Cài đặt xử lý trong phương thức Main
Tạo giỏ hàng: dùng ArrayList vì kỹ thuật SOAP không hỗ trợ dữ liệu kiểu Generic
ArrayList giohang = new ArrayList();
giohang.Add(new GIO_HANG("Tivi Sony", "21 inch", 7000000, 10));
giohang.Add(new GIO_HANG("Tu lanh LG", "20 lit", 5500000, 8));
giohang.Add(new GIO_HANG("May lanh LG", "2 cuc", 5300000, 10));
giohang.Add(new GIO_HANG("DVD Samsung", "Dau DVD", 2000000, 20));
Thực hiện Serialize thông tin giỏ hàng và lưu vào tập tin C:\GioHang.txt
FileStream fs = new FileStream("C:/GioHang.txt", FileMode.Create);
SoapFormatter sf = new SoapFormatter();
sf.Serialize(fs, giohang);
fs.Close();
Thực hiện Deserialize thông tin giỏ hàng từ tập tin C:\GioHang.txt và hiển thị lên màn hình
ArrayList giohang1 = new ArrayList();
FileStream fs1 = new FileStream("C:/GioHang1.txt", FileMode.Open);
SoapFormatter sf1 = new SoapFormatter();
giohang1 = (ArrayList)sf1.Deserialize(fs1);
fs1.Close();
Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", "Ten hang hoa", "Mo ta", "Don
gia", "So luong", "Thanh tien");
for (int i = 0; i < giohang1.Count; i++)
{
((GIO_HANG)giohang1[i]).Xuat();
}
Console.ReadLine();
GV
:
PHẠ
M
Á
NH THI
Ề
U
Trang
50/54