Câu 1: Xây dựng lớp phân số: • Định nghĩa các properties cho phép đọc và ghi. • Xây dựng constructor rỗng (mặt định cho các properties bằng 0) • Xây dựng constructor với tham số là tử số (mẫu số mặt định =1) • Xây dựng constructor với tham số là tử số và mẫu số • Xây dựng constructor với tham số là một lớp phân số • Xây dựng phương thức xét đây có phải là một phân số không (phân số thì mẫu phải khác 0) • Xây dựng phương thức nhập, xuất phân số • Xây dựng các toán tử o Cộng phân số với số nguyên o Cộng phân số với một phân số o Nhân phân số với số nguyên o Nhân phân số với phân số Một điểm dịch vụ cần quản lý các thông tin cho thuê xe đạp và xe máy. Với xe đạp cần lưu họ tên người thuê, số giờ thuê. Tiền thuê xe đạp được tính như sau: 10000 (đồng) cho giờ đầu tiên, 80000 cho mỗi giờ tiếp theo. Với mỗi xe máy cần lưu họ tên người thuê, số giờ thuê, loại xe (100 phân khối, 250 phân khối), biển số. Tiền thuê xe máy được tính như sau: Đối với giờ đầu tiên, loại xe 100 phân khối tính 15000; loại xe 250 phân khối tính 20000. Đối với những giờ tiếp theo tính 10000 cho cả hai loại xe máy. Viết chương trình xây dựng các lớp cần thiết sau đó nhập danh sách các thông tin thuê xe đạp và xe máy, sau đó xuất ra các thông tin sau: • Xuất tất cả các thông tin thuê xe (tên từng khách hàng,cả số tiền thuê tương ứng). • Tính tổng số tiền cho thuê xe đạp và xe máy. • Xuất tất cả các thông tin liên quan đến việc thuê xe đạp. • Tính tổng số tiền cho thuê xe máy loại 250 phân khối. Xây dựng lớp HinhHoc với phương thức tính chu vi, diện tích là phương thức trừu tượng hoặc phương thức ảo. Sau đó định nghĩa các lớp HinhChuNhat (hình chữ nhật), HinhTron (hình tròn) kế thừa từ lớp HinhHọc với các thành phần dữ liệu và phương thức tính chu vi, diện tích cụ thể của từng loại đối tượng. Hãy xây dựng cây phân cấp các lớp đối tượng sau: Xe_Toyota, Xe_Dream, Xe_Spacy, Xe_BMW, Xe_Fiat, Xe_DuLich, Xe_May, Xe? Hãy xây dựng các lớp đối tượng, thiết lập các quan hệ kế thừa dựa trên cây kế thừa mà bạn xây dựng. Mỗi đối tượng chỉ cần một thuộc tính là myNane để cho biết tên của nó (như Xe_Toyota thì myName là “Toi la Toyota”...). Các đối tượng có phương thức Who() cho biết giá trị myName của nó. Hãy thực thi sự đa hình trên các lớp đó. Cuối cùng tạo một lớp Tester với hàm Main() để tạo một mảng các đối tượng Xe, đưa từng đối tượng cụ thể vào mảng đối tượng Xe, sau đó cho lặp từng đối tượng trong mảng để nó tự giới thiệu tên (bằng cách gọi hàm Who() của từng đối tượng). Vào dịp cuối năm, cán bộ trong một cơ quan được xét khen thưởng theo mức độ hoàn thành công việc của cán bộ. Cán bộ có hai dạng là biên chế và hợp đồng. Điều kiện khen thưởng của dạng biên chế là mức xếp loại A hoặc B. Thông tin cần quản lý đối với cán bộ biên chế là mã số, họ tên, ngày sinh, mức xếp loại (có 3 mức là A, B, C). Điều kiện khen thưởng của dạng hợp đồng là hoàn thành nhiệm vụ được giao ở mức tốt hoặc khá. Thông tin cần quản lý đối với cán bộ hợp đồng là mã số, họ tên, ngày sinh, mức độ hoàn thành nhiệm vụ (có 3 mức là tốt, khá, trung bình). Hãy viết chương trình nhập dữ liệu và in danh sách khen thưởng cho không quá 100 cán bộ biên chế và 30 cán bộ hợp đồng. Trong đó, hàm khen thưởng được viết dưới dạng hàm ảo. Xét chương trình cho phép quản lý sinh viên với ba hệ đào tạo khác nhau: hệ cử nhân tài năng, hệ chính quy và hệ chất lượng cao. Học bổng của sinh viên chính quy được tính như sau: • Nếu điểm trung bình >= 8.0 thì học bổng = 1000000 • Nếu điểm trung bình >= 9.0 thì học bổng = 1500000 Học bổng của sinh viên cử nhân tài năng được tính như sau: • Nếu điểm trung bình >= 8.0 thì học bổng = 1500000 • Nếu điểm trung bình >= 9.0 thì học bổng = 2000000 Học bổng của sinh viên chất lượng cao được tính như sau: • Nếu điểm trung bình >= 8.0 thì học bổng = 2000000 • Nếu điểm trung bình >= 9.0 thì học bổng = 2500000 Hãy viết chương trình cho phép nhận vào các sinh viên cần quản lý và tính tổng số tiền học bổng Trường sẽ phát cho sinh viên.
Trang 1LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
1, Câu 1: Xây dựng lớp phân số:
phải khác 0)
private int _Tu, _Mau; // private members (Định nghĩa các properties cho phép đọc và ghi)
public int Tu
{
get { return _Tu; }
set { _Tu = value; }
}
public int Mau
{
get { return _Mau; }
set { _Mau = value; }
}
public PhanSo(int Tu) // (Xây dựng constructor rỗng (mặt định cho các properties bằng 0))
{
this._Tu = Tu;
Trang 2if (_Mau != 0) return true;
else return false;
Trang 3public void XuatPhanSo()
int TuMoi = PS1.Mau * so + PS1.Tu;
int MauMoi = PS1.Mau;
return new PhanSo(TuMoi, MauMoi);
}
public static PhanSo operator +(PhanSo PS1, PhanSo PS2) // (Cộng phân số với một phânsố)
{
int MauMoi = PS1.Mau * PS2.Mau;
int TuMoi = PS2.Mau * PS1.Tu + PS1.Mau * PS2.Tu;
return new PhanSo(TuMoi, MauMoi);
}
public static PhanSo operator *(PhanSo PS1, int so) // (Nhân phân số với số nguyên)
{
int TuMoi = PS1.Tu * (int)so;
int MauMoi = PS1.Mau;
return new PhanSo(TuMoi, MauMoi);
}
public static PhanSo operator *(PhanSo PS1, PhanSo PS2) // (Nhân phân số với phân số)
{
int TuMoi = PS1.Tu * PS2.Tu;
int MauMoi = PS1.Mau*PS2.Mau;
return new PhanSo(TuMoi, MauMoi);
}
Trang 4Câu 2: Viết chương trình trong hàm main cho phép
PhanSo A = new PhanSo(T, M); //Tạo một phân số A từ 2 giá trị trên
PhanSo B = new PhanSo(); //Tạo một phân số B từ constructor rỗng
B.NhapPhanSo(); //Tạo một phân số B từ constructor rỗng
A = A * 2;
A.XuatPhanSo();
PhanSo tong = A + B; //Tính tổng A, B rồi xuất kết quả
tong.XuatPhanSo();
Trang 5Bài tập:
Viết class hinhtron có thuộc tính: R,dientich,chuvi
Viết class hinhcau kế thừa hinhtron, viết lại dientich, thêm mới thetich Trong hàm main viết :
Tạo một đối hinhcau, in dientich, thetich của hình cầu đó.
get { return _bankinh; }
set { _bankinh = value; }
Trang 6get { return R * R * Math.PI; }
Trang 7hinhcau hc = new hinhcau(5);
Console.WriteLine("DT={0},TT={1}", hc.dientich, hc.thetich); }
protected int top, left; //Toa do goc tren ben trai
public MyWindow(int t, int l)
Trang 8Console.WriteLine(" dang ve Window tai toa do {0}, {1}", top, left);
//public new void DrawWindow()
public override void DrawWindow( )
public MyButton(int top, int left) : base(top, left) { }
//public new void DrawWindow()
public override void DrawWindow( )
Trang 9{
MyWindow[] winArray = new MyWindow[3]; MyWindow MW = new MyWindow(1, 1); MyListBox ML = new MyListBox(2, 2, "LB"); MyButton MB = new MyButton(3, 3);
Trang 10Một điểm dịch vụ cần quản lý các thông tin cho thuê xe đạp và xe máy
Với xe đạp cần lưu họ tên người thuê, số giờ thuê Tiền thuê xe đạp được tính như sau:
10000 (đồng) cho giờ đầu tiên, 80000 cho mỗi giờ tiếp theo
Với mỗi xe máy cần lưu họ tên người thuê, số giờ thuê, loại xe (100 phân khối, 250 phân khối), biển số Tiền thuê xe máy được tính như sau: Đối với giờ đầu tiên, loại xe
100 phân khối tính 15000; loại xe 250 phân khối tính 20000 Đối với những giờ tiếp theo tính 10000 cho cả hai loại xe máy.
Viết chương trình xây dựng các lớp cần thiết sau đó nhập danh sách các thông tin thuê
xe đạp và xe máy, sau đó xuất ra các thông tin sau:
ứng).
protected string hoten;
protected int giothue;
public virtual int TienThue
Trang 13XE[] XT; //Xe cho thue
public CUAHANG(int size)
Trang 14{
Console.WriteLine("***** Ban chon nhap xe dap *******");
Console.WriteLine("Ho ten nguoi thue?");
Trang 15public long TongTienChoThue()
Trang 16Console.WriteLine("Tong tien thue xe " + ch.TongTienChoThue());
Console.WriteLine("Thong tin ve xe dap cho thue:");
Trang 17Xây dựng lớp HinhHoc với phương thức tính chu vi, diện tích là phương thức trừu tượng hoặc phương thức ảo Sau đó định nghĩa các lớp HinhChuNhat (hình chữ nhật), HinhTron (hình tròn) kế thừa từ lớp HinhHọc với các thành phần dữ liệu và phương thức tính chu vi, diện tích cụ thể của từng loại đối tượng.
abstract public double DienTich();
abstract public double ChuVi();
get { return _bankinh; }
set { _bankinh = value; }
Trang 18public override double ChuVi()
double _dai, _rong;
public double ChieuDai
{
get { return _dai; }
set { _dai = value; }
}
public double ChieuRong
{
get { return _rong; }
set { _rong = value; }
}
public override double DienTich() { return _dai * _rong; } public override double ChuVi() { return (_dai + _rong) * 2;} }
Trang 19Console.WriteLine("Chu vi hinh tron: {0} ",
Console.WriteLine("Dien tich hinh chu nhat:{0}", h.DienTich());
Console.ReadLine();
}
}
}
Trang 20Hãy xây dựng cây phân cấp các lớp đối tượng sau: Xe_Toyota, Xe_Dream, Xe_Spacy, Xe_BMW, Xe_Fiat, Xe_DuLich, Xe_May, Xe?
Hãy xây dựng các lớp đối tượng, thiết lập các quan hệ kế thừa dựa trên cây kế thừa
mà bạn xây dựng Mỗi đối tượng chỉ cần một thuộc tính là myNane để cho biết tên của
nó (như Xe_Toyota thì myName là “Toi la Toyota” ) Các đối tượng có phương thức Who() cho biết giá trị myName của nó Hãy thực thi sự đa hình trên các lớp đó Cuối cùng tạo một lớp Tester với hàm Main() để tạo một mảng các đối tượng Xe, đưa từng đối tượng cụ thể vào mảng đối tượng Xe, sau đó cho lặp từng đối tượng trong mảng để
nó tự giới thiệu tên (bằng cách gọi hàm Who() của từng đối tượng).
protected string myName;
public Xe(string name)
Trang 21public Xe_Toyota() : base("Toyota") { }}
Trang 23Vào dịp cuối năm, cán bộ trong một cơ quan được xét khen thưởng theo mức độ hoàn thành công việc của cán bộ Cán bộ có hai dạng là biên chế và hợp đồng.
Điều kiện khen thưởng của dạng biên chế là mức xếp loại A hoặc B Thông tin cần quản lý đối với cán bộ biên chế là mã số, họ tên, ngày sinh, mức xếp loại (có 3 mức là
A, B, C).
Điều kiện khen thưởng của dạng hợp đồng là hoàn thành nhiệm vụ được giao ở mức tốt hoặc khá Thông tin cần quản lý đối với cán bộ hợp đồng là mã số, họ tên, ngày sinh, mức độ hoàn thành nhiệm vụ (có 3 mức là tốt, khá, trung bình).
Hãy viết chương trình nhập dữ liệu và in danh sách khen thưởng cho không quá 100 cán bộ biên chế và 30 cán bộ hợp đồng Trong đó, hàm khen thưởng được viết dưới dạng hàm ảo.
public string MaSo { get; set; }
public string HoTen { get; set; }
public DateTime NgaySinh { get; set; }
public virtual void NhapThongTin()
Trang 24Console.WriteLine($"Ma so: {MaSo}");
Console.WriteLine($"Ho ten: {HoTen}");
Console.WriteLine($"Ngay sinh: {NgaySinh.ToString("yyyy-MM-dd")}"); }
public virtual bool KhenThuong()
{
return false; // Hàm ảo, được thực hiện ở các lớp con
}
}
// Lớp cán bộ biên chế kế thừa từ lớp cơ sở CanBo
class CanBoBienChe : CanBo
{
public char MucXepLoai { get; set; }
public override void NhapThongTin()
Trang 25public override void XuatThongTin()
// Lớp cán bộ hợp đồng kế thừa từ lớp cơ sở CanBo
class CanBoHopDong : CanBo
{
public string MucHoanThanh { get; set; }
public override void NhapThongTin()
Trang 26public override bool KhenThuong()
const int MAX_CAN_BO_BIEN_CHE = 100;
const int MAX_CAN_BO_HOP_DONG = 30;
CanBo[] danhSachCanBo = new CanBo[MAX_CAN_BO_BIEN_CHE +MAX_CAN_BO_HOP_DONG];
int soCanBoBienChe = 0, soCanBoHopDong = 0;
// Nhập thông tin cán bộ biên chế
Console.WriteLine("Nhap thong tin can bo bien che:");
while (soCanBoBienChe < MAX_CAN_BO_BIEN_CHE)
Trang 27// Nhập thông tin cán bộ hợp đồng
Console.WriteLine("\nNhap thong tin can bo hop dong:");
while (soCanBoHopDong < MAX_CAN_BO_HOP_DONG)
{
danhSachCanBo[MAX_CAN_BO_BIEN_CHE + soCanBoHopDong] = newCanBoHopDong();
danhSachCanBo[MAX_CAN_BO_BIEN_CHE +soCanBoHopDong].NhapThongTin();
// In danh sách khen thưởng
Console.WriteLine("\nDanh sach khen thuong:");
for (int i = 0; i < soCanBoBienChe + soCanBoHopDong; i++)
Trang 28Xét chương trình cho phép quản lý sinh viên với ba hệ đào tạo khác nhau: hệ cử nhân tài năng, hệ chính quy và hệ chất lượng cao.
Học bổng của sinh viên chính quy được tính như sau:
Học bổng của sinh viên cử nhân tài năng được tính như sau:
Học bổng của sinh viên chất lượng cao được tính như sau:
Hãy viết chương trình cho phép nhận vào các sinh viên cần quản lý và tính tổng số tiền học bổng Trường sẽ phát cho sinh viên.
public string MaSV { get; set; }
public string HoTen { get; set; }
public double DiemTrungBinh { get; set; }
public string HeDaoTao { get; set; }
public SinhVien(string maSV, string hoTen, double diemTrungBinh, string heDaoTao) {
MaSV = maSV;
Trang 30List<SinhVien> danhSachSinhVien = new List<SinhVien>();
// Nhập thông tin sinh viên
Console.WriteLine("Nhap thong tin sinh vien:");
while (true)
{
Console.Write("Ma sinh vien (nhap 'exit' de ket thuc): ");
string maSV = Console.ReadLine();
if (maSV.ToLower() == "exit")
break;
Console.Write("Ho ten: ");
string hoTen = Console.ReadLine();
Console.Write("Diem trung binh: ");
double diemTrungBinh = double.Parse(Console.ReadLine());
Console.Write("He dao tao (CaoDang/DaiHoc/ChatLuongCao): ");
string heDaoTao = Console.ReadLine();
SinhVien sv = new SinhVien(maSV, hoTen, diemTrungBinh, heDaoTao); danhSachSinhVien.Add(sv);
Trang 32Xét một mặt phẳng có 2 loại hình là: Hình chữ nhật và hình tròn Trong đó, mỗi hình
sẽ bao gồm những thông tin như sau:
Hãy viết chương trình thực hiện các yêu cầu sau:
// Lớp cơ sở cho các hình trên mặt phẳng
abstract class Hinh
{
public string Ten { get; set; }
public string MauSac { get; set; }
public abstract double TinhChuVi();
}
// Lớp đại diện cho hình chữ nhật
class HinhChuNhat : Hinh
{
public double Dai { get; set; }
public double Rong { get; set; }
Trang 33public HinhChuNhat(string ten, string mauSac, double dai, double rong) {
// Lớp đại diện cho hình tròn
class HinhTron : Hinh
{
public double BanKinh { get; set; }
public HinhTron(string ten, string mauSac, double banKinh)
Trang 34double rong = double.Parse(Console.ReadLine());
HinhChuNhat hinhChuNhat = new HinhChuNhat(tenCN, mauSacCN, dai, rong); danhSachHinh.Add(hinhChuNhat);
Trang 35HinhTron hinhTron = new HinhTron(tenHT, mauSacHT, banKinh); danhSachHinh.Add(hinhTron);
Trang 36Cài đặt lớp SINHVIEN gồm các thuộc tính miêu tả các sinh viên như: Mã Sinh Viên,
Họ và Tên, Tuổi, Điểm và các phương thức:
NHAP: nhập toàn bộ các thông tin cho sinh viên.
XUAT: xuất toàn bộ thông tin của sinh viên ra màn hình.
Cài đặt hàm main khai báo hai sinh viên a, b Sử dụng các phương thức của hai sinh viên để nhập vào thông tin của sinh viên a, b; xuất thông tin của hai sinh viên ra màn hình
public string Masv { get; set; }
public string Hoten { get; set; }
public int Tuoi { get; set; }
public double Diem { get; set; }
public void NHAP()
Trang 37Console.WriteLine("Thong tin Sinh Vien:");
Console.WriteLine($"Ma Sinh Vien: {Masv}"); Console.WriteLine($"Ho va Ten: {Hoten}");
SINHVIEN a = new SINHVIEN();
SINHVIEN b = new SINHVIEN();
Console.WriteLine("Nhap thong tin Sinh Vien A:"); a.NHAP();
Console.WriteLine("\nNhap thong tin Sinh Vien B:"); b.NHAP();
Console.WriteLine("\nThong tin Sinh Vien A:"); a.XUAT();
Console.WriteLine("\nThong tin Sinh Vien B:"); b.XUAT();
Trang 38Cài đặt lớp Hàng Hóa với các thuộc tính: Mã hàng, Tên hàng, Đơn giá, Số lượng và các phương thức:
NHAP: nhập thông tin của mặt hàng.
XUAT: xuất thông tin của mặt hàng lên màn hình (dữ liệu xuất trên 1 dòng) kèm theo Thành tiền.
Viết hàm main nhập vào một danh sách gồm n mặt hàng In danh sách các mặt hàng vừa nhập ra màn hình.
private string maHang;
private string tenHang;
private double donGia;
private int soLuong;
public string MaHang
{
get { return maHang; }
set { maHang = value; }
}
public string TenHang
{
Trang 39set { tenHang = value; }
}
public double DonGia
{
get { return donGia; }
set { donGia = value; }
}
public int SoLuong
{
get { return soLuong; }
set { soLuong = value; }
Trang 40public void XUAT()
List<HangHoa> danhSachHangHoa = new List<HangHoa>();
for (int i = 0; i < n; i++)
{
HangHoa hangHoa = new HangHoa();
Console.WriteLine($"\nNhap thong tin mat hang thu {i + 1}:");
hangHoa.NHAP();
danhSachHangHoa.Add(hangHoa);
}
Console.WriteLine("\nDanh sach mat hang:");
foreach (HangHoa hangHoa in danhSachHangHoa)
{
hangHoa.XUAT();
}
Trang 41Cài đặt lớp Sách bao gồm các thuộc tính: Mã sách, Tên sách, Nhà xuất bản, Số trang, Giá tiền và các phương thức:
NHAP: nhập vào các thông tin của sách.
XUAT: xuất thông tin của sách ra màn hình (trên 1 dòng)
Viết hàm main nhập vào một danh sách gồm n cuốn sách In danh sách đã sắp ra màn hình.
private string maSach;
private string tenSach;
private string nhaXuatBan;
private int soTrang;
private double giaTien;
public string MaSach
{
get { return maSach; }
set { maSach = value; }
}
public string TenSach
{
Trang 42get { return tenSach; }
set { tenSach = value; }
}
public string NhaXuatBan
{
get { return nhaXuatBan; }
set { nhaXuatBan = value; }
}
public int SoTrang
{
get { return soTrang; }
set { soTrang = value; }
}
public double GiaTien
{
get { return giaTien; }
set { giaTien = value; }
Trang 43Console.Write("Nhap Nha Xuat Ban: ");
Console.WriteLine($"Thong tin Sach: {MaSach}, {TenSach}, NXB: {NhaXuatBan},
So Trang: {SoTrang}, Gia Tien: {GiaTien}");
List<Sach> danhSachSach = new List<Sach>();
for (int i = 0; i < n; i++)
{
Sach sach = new Sach();
Console.WriteLine($"\nNhap thong tin sach thu {i + 1}:");
Trang 44sach.XUAT();
}
}
}
Trang 45Cài đặt lớp Sách bao gồm các thuộc tính: Mã sách, Tên sách, Nhà xuất bản, Số trang, Giá tiền và các phương thức:
NHAP: nhập vào các thông tin của sách.
XUAT: xuất thông tin của sách ra màn hình (trên 1 dòng).
Viết hàm main nhập vào một danh sách gồm n cuốn sách In danh sách đã sắp ra màn hình.
public string MaSach { get; set; }
public string TenSach { get; set; }
public string NhaXuatBan { get; set; }
public int SoTrang { get; set; }
public double GiaTien { get; set; }
public void NHAP()
Trang 46Console.Write("Nhap Nha Xuat Ban: ");
Console.WriteLine($"Thong tin Sach: {MaSach}, {TenSach}, NXB: {NhaXuatBan},
So Trang: {SoTrang}, Gia Tien: {GiaTien}");
List<Sach> danhSachSach = new List<Sach>();
for (int i = 0; i < n; i++)
{
Sach sach = new Sach();