Bài 4. Kỹ thuật đa hình thái (polymorphism)

Thứ hai - 21/03/2022 22:45
Một cơ cở kinh doanh có sơ đồ phân loại các mặt hàng như sau:

Lập trình thực hiện các công việc sau:
-  Thiết lập sự kế thừa của các lớp hàng theo sơ đồ đã cho.
-  Thiết lập các hàm tạo để nhập thông tin dữ liệu cho các đối tượng hàng bao gồm: mã hàng, tên hàng, năm sản xuất, đơn giá, cỡ màn hình của máy tính và tivi (inch), dung lượng bộ nhớ trong của máy tính (GB).
-  In ra các thông tin của các loại hàng theo kỹ thuật đa hình thái (polymorphism).
-  Có bao nhiêu mặt hàng Máy tính được sản xuất từ năm 2018 đến nay ?
-  Ghi các thông tin dữ liệu của loại hàng Máy tính vào tệp văn bản MT.TXT.
Họ và tên: Vàng Văn Quyn
Nhóm: 01 (Bảo Thắng + Si Ma Cai)
Lớp: Tin A20-PH Lào Cai.
Môi trường: Visual Studio 2019 (Console)
// Baikiemtra3Cau3.cpp : This file contains the 'main' function. Program execution begins and ends there.//#include <iostream>#include <string.h>#include <iomanip>#include <fstream>using namespace std;class HANG {public:	virtual void INRA() = 0;};class DIENTU :public HANG {public:	virtual char* Mahang() = 0;	virtual char* Tenhang() = 0;	virtual int Namsx() = 0;	virtual float Dongia() = 0;	virtual char* Size() = 0;	void INRA() {		cout << Mahang() << " " << Tenhang() << " " << Namsx() << " " << setprecision(2) << fixed << Dongia() << " " << Size();	}};class MAYMAC :public HANG {public:	virtual char* Mahang() = 0;	virtual char* Tenhang() = 0;	virtual int Namsx() = 0;	virtual float Dongia() = 0;	virtual char* Size() = 0;	void INRA() {		cout << Mahang() << " " << Tenhang() << " " << Namsx() << " " << setprecision(2) << fixed << Dongia() << " " << Size() << endl;	}};class MAYTINH :public DIENTU {private:	char mahang[10];	char tenhang[30];	int namsx;	float dongia;	char size[20];	char sizebonho[15];public:	MAYTINH() {		strcpy_s(this->mahang, "");		strcpy_s(this->tenhang, "");		this->namsx = 0;		this->dongia = 0;		strcpy_s(this->size, "");		strcpy_s(this->sizebonho, "");	}	MAYTINH(string mahang, string tenhang, int namsx, float dongia, string size, string sizebonho) {		strcpy_s(this->mahang, mahang.c_str());		strcpy_s(this->tenhang, tenhang.c_str());		this->namsx = namsx;		this->dongia = dongia;		strcpy_s(this->size, size.c_str());		strcpy_s(this->sizebonho, sizebonho.c_str());	}	char* Mahang() { return  this->mahang; }	char* Tenhang() { return this->tenhang; }	int Namsx() { return this->namsx; }	float Dongia() { return this->dongia; }	char* Size() { return this->size; }	void GHITEP() {//Ghi thong tin may tinh ra MT.TXT		MAYTINH mt;		ofstream fout;		fout.open("MT.TXT", ios::out);		char ok;		cout << "Nhap mat hang may tinh ghi vao tep:" << endl;		while (1) {			cout << "Ma hang:"; cin.getline(mt.mahang, 10);			cout << "Ten hang:"; cin.getline(mt.tenhang, 30);			cout << "Nam san xuat:"; cin >> mt.namsx; cin.ignore();			cout << "Don gia:"; cin >> mt.dongia; cin.ignore();			cout << "Size man hinh:"; cin.getline(mt.size, 20);			cout << "Size bo nho:"; cin.getline(mt.sizebonho, 15);			cout << "Co nhap tiep khong (C/K)?"; cin >> ok; cin.ignore();			fout.write((char*)&mt, sizeof(mt));			if ((ok == 'k') || (ok == 'K')) {				break;			}		}	}	void INRA() {		DIENTU::INRA();		cout << " " << this->sizebonho << endl;	}	int MAYTINH2018(); //San xuat tu 2018 den nay		};int MAYTINH::MAYTINH2018() { //San xuat tu 2018 den nay	ifstream fin;	fin.open("MT.TXT", ios::in);	if (fin.fail()) {		return 0;	}	MAYTINH mt;	int  tongs = 0;	while (fin.read((char*)&mt, sizeof(mt))) {		if (mt.namsx >= 2018) {			tongs++;		}	}	return tongs;}class TIVI :public DIENTU {private:	char mahang[10];	char tenhang[30];	int namsx;	float dongia;	char size[20];public:	TIVI() {		strcpy_s(this->mahang, "");		strcpy_s(this->tenhang, "");		this->namsx = 0;		this->dongia = 0;		strcpy_s(this->size, "");	}	TIVI(string mahang, string tenhang, int namsx, float dongia, string size) {		strcpy_s(this->mahang, mahang.c_str());		strcpy_s(this->tenhang, tenhang.c_str());		this->namsx = namsx;		this->dongia = dongia;		strcpy_s(this->size, size.c_str());	}	char* Mahang() { return this->mahang; }	char* Tenhang() { return this->tenhang; }	int Namsx() { return this->namsx; }	float Dongia() { return this->dongia; }	char* Size() { return this->size; }	void INRA() {		DIENTU::INRA();		cout << endl;	}};class AO :public MAYMAC {private:	char mahang[10];	char tenhang[30];	int namsx;	float dongia;	char size[20];public:	AO() {		strcpy_s(this->mahang, "");		strcpy_s(this->tenhang, "");		this->namsx = 0;		this->dongia = 0;		strcpy_s(this->size, "");	}	AO(string mahang, string tenhang, int namsx, float dongia, string size) {		strcpy_s(this->mahang, mahang.c_str());		strcpy_s(this->tenhang, tenhang.c_str());		this->namsx = namsx;		this->dongia = dongia;		strcpy_s(this->size, size.c_str());	}	char* Mahang() { return this->mahang; }	char* Tenhang() { return this->tenhang; }	int Namsx() { return this->namsx; }	float Dongia() { return this->dongia; }	char* Size() { return this->size; }};class VAY :public MAYMAC {private:	char mahang[10], tenhang[30];	int namsx;	float dongia;	char size[20];public:	VAY() {		strcpy_s(this->mahang, "");		strcpy_s(this->tenhang, "");		this->namsx = 0;		this->dongia = 0;		strcpy_s(this->size, "");	}	VAY(string  mahang, string tenhang, int namsx, float dongia, string size) {		strcpy_s(this->mahang, mahang.c_str());		strcpy_s(this->tenhang, tenhang.c_str());		this->namsx = namsx;		this->dongia = dongia;		strcpy_s(this->size, size.c_str());	}	char* Mahang() { return this->mahang; }	char* Tenhang() { return this->tenhang; }	int Namsx() { return this->namsx; }	float Dongia() { return this->dongia; }	char* Size() { return this->size; }};int main(){	/*In thong tin cac loai hang theo ki thuat da hinh thai*/	HANG* hang;	MAYTINH mt("MT01", "May tinh", 2019, 12000000, "14inh", "500Gb");	hang = &mt;	hang->INRA();	TIVI tv = TIVI("TV01", "Ti vi", 2020, 10000000, "50inh");	hang = &tv;	hang->INRA();	AO ao = AO("AO01", "Ao so mi nam", 2021, 235000, "M");	hang = &ao;	hang->INRA();	VAY vay = VAY("VO01", "Vay cong so", 2021, 40000, "L");	hang = &vay;	hang->INRA();	/*Ghi mat hang may tinh ra tep va thong ke may tinh san xuat tu nawm 2018 den nay*/	MAYTINH mt;	mt.GHITEP();	cout << "So luong mat hang may tinh san xuat tu nam 2018 den nay: " << mt.MAYTINH2018() << endl;	return 0;}

Tác giả: Vàng Văn Quyn

Chú ý: Việc đăng lại bài viết trên ở website hoặc các phương tiện truyền thông khác mà không ghi rõ nguồn https://365.io.vn là vi phạm bản quyền

Tổng số điểm của bài viết là: 1 trong 1 đánh giá

Xếp hạng: 1 - 1 phiếu bầu
Click để đánh giá bài viết
Thống kê
  • Đang truy cập37
  • Hôm nay1,655
  • Tháng hiện tại8,778
  • Tổng lượt truy cập9,200,261
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây