Cài đặt lớp  ThueBaoDT (thuê bao điện thoại) gồm các thông tin sau :

–  Số điện thoại:                                   kiểu  char[11] 

–  Họ và tên người thuê bao:               kiểu  char*

–  Địa chỉ của nơi đặt điện thoại:         kiểu  char*

–  Số phút gọi nội hạt trong 1 tháng:   kiểu  int.

        Viết các hàm :

            + Hàm xây dựng, hàm hủy, phép gán (=).

            + Hàm nhập và hiển thị thông tin của người thuê bao.

            + Hàm lấy ra giá trị dữ liệu thành viên. Chẳng hạn:               char*  LayHoTen();

            + Hàm tính cước điện thoại nội hạt trong tháng.

   Biết rằng :

      – Thuê bao mỗi tháng là:   20.000 đ.

      – Cước gọi mỗi phút:         200 đ.

      Viết hàm main thực hiện các công việc sau :

       +  Nhập vào danh sách gồm n người thuê bao điện thoại.

       +  Tính cước cho tất cả số thuê bao trên .

       +  In danh sách trên và tính tổng số tiền thu được .

 +  Nhập 1 họ tên, tìm số điện thoại của người có họ tên vừa nhập trong danh sách.

 +  In danh sách thuê bao theo thứ tự Alphabe của tên người thuê bao.

     Gợi ý: Cần định nghĩa 1 hàm độc lập dùng để tách tên của 1 họ tên tổng quát.

#include <iostream.h>

#include <conio.h>

#include <string.h>

#include <stdio.h>

char *tachten(char*);  //ham tach ten

//Khai bao lop

class Thuebao {

char *hoten;

char *diachi;

char dienthoai[15];

int  sophut;

public:

Thuebao();

Thuebao(char *, char *, char *, int);

Thuebao(const Thuebao &);

~Thuebao(){

delete  []hoten;

delete  []diachi;

}

void nhap();

void xuat();

float cuoc();

float cuocthue();

char *layhoten()     { return hoten; }

char *laydienthoai() { return dienthoai; }

Thuebao operator = (const Thuebao &); //Tái định nghĩa phép gán

int operator > (const Thuebao &); //So sách theo họ tên

friend ostream& operator << (ostream&, Thuebao); //Định nghĩa toán tử xuất

friend istream& operator >> (istream&, Thuebao &);

};

// Ham xay dung mac nhien khong doi so

Thuebao::Thuebao() {

hoten = new char[50];;

diachi = new char[100];

strcpy(dienthoai, “”);

sophut = 0;

}

// Ham xay dung co doi so

Thuebao::Thuebao(char *ht, char *dc, char *dt, int p) {

hoten = new char[50]; strcpy(hoten, ht);

diachi = new char[100]; strcpy(diachi, dc);

strcpy(dienthoai, dt);

sophut = p;

}

// Ham xay dung sao chep

Thuebao::Thuebao(const Thuebao &t){

hoten = new char[50]; strcpy(hoten, t.hoten);

diachi = new char[100]; strcpy(diachi, t.diachi);

strcpy(dienthoai, t.dienthoai);

sophut = t.sophut;

}

// Ham nhap

void Thuebao::nhap() {

cout << “Ho ten: “; gets(hoten);

cout << “Dia chi: “;  gets(diachi);

cout << “So dien thoai: “; gets(dienthoai);

cout << “So phut: “; cin >> sophut;

}

// Ham xuat

void Thuebao::xuat() {

cout << “Ho ten: ” << hoten << endl;

cout << “Dia chi: ” << diachi << endl;

cout << “Dien thoai: ” << dienthoai << endl;

cout << “So phut: ” << sophut << endl;

cout << “Cuoc: ” << cuoc() << ” (Co thue: ” << cuocthue() << “)\n”;

}

// Ham tinh cuoc khong thue

float Thuebao::cuoc() {

float kq;

if (sophut <= 200)

kq = sophut * 120;

else if (sophut <=1000)

kq = 200*120 + (sophut-200)*80;

else

kq = 200*120 + 800*80 + (sophut-1000)*40;

return kq;

}

// Ham tinh cuoc co thue

float Thuebao::cuocthue() {

return (cuoc() + cuoc()*0.1);

}

// Ham tai dinh nghia toan tu gan =

Thuebao Thuebao::operator = (const Thuebao &t) {

         delete []hoten;

                             delete []diachi;

strcpy(dienthoai, t.dienthoai);

hoten = new char[50]; strcpy(hoten, t.hoten);

diachi = new char[100]; strcpy(diachi, t.diachi);

sophut = t.sophut;

return *this;

}

// Ham so sanh hai thue bao dua tren ho ten

int Thuebao::operator > (const Thuebao &t) {

return strcmp(hoten, t.hoten);

}

// Ham dinh nghia tac tu xuat

ostream& operator << (ostream &os,Thuebao t) {

os << t.hoten << endl;

os << t.diachi << endl;

os << t.dienthoai << endl;

os << t.sophut << endl;

return os;

}

// Ham dinh nghia tac tu nhap

istream& operator >> (istream &is, Thuebao &t) {

is.getline(t.dienthoai, 10);

is.getline(t.hoten, 49);

is.getline(t.diachi, 99);

is >> t.sophut;

return is;

}

// Ham main() minh hoa cach su dung lop Thuebao

int main() {

Thuebao *ds;

int n, i, j;

cout << “Danh sach gom bao nhieu nguoi: “;

cin >> n;

    ds = new Thuebao[n];

     //nhap danh sach

for (i=0; i<n; i++) {

cout << “Nhap thong tin thue bao ” << i+1 << endl;

ds[i].nhap();

}

//in dsach va tong so tien

float tongcuoc = 0;

for (i=0; i<n; i++) {

cout << “Thue bao ” << i+1 << “:\n”;

cout << ds[i];

//tinh tong cuoc

tongcuoc += ds[i].cuocthue();

}

cout << “\nTong cuoc: ” << tongcuoc << endl;

//tim kiem

char hoten[50];

cout << “Nhap ho ten nguoi can tim: “;

gets(hoten);

cout << “Dien thoai cua nhung nguoi co ten ” << hoten;

cout << ” la: \n”;

for (i=0; i<n; i++) {

if (strcmp(ds[i].layhoten(), hoten) == 0)

cout << ds[i].laydienthoai() << endl;

}

  //sap xep danh sach theo ten

char t1[100], t2[100];

for (i=0; i<n-1; i++) {

for (j=i+1; j<n; j++) {

strcpy(t1, ds[i].layhoten());

strcpy(t2, ds[j].layhoten());

if (strcmp(t1, t2) > 0) {

Thuebao t;

t = ds[i];

ds[i] = ds[j];

ds[j] = t;

}

}

}

//in danh sach da sap xep

cout << “\nDanh sach da sap xep:” << endl;

for (i=0; i<n; i++) {

cout << “Thue bao ” << i+1 << “:\n”;

cout << ds[i];

}

getch();

}

//Hàm tách tên

char *tachten(char *hoten) {

char *ten;

int i;

//cat khoang trang phia sau ten

i = strlen(hoten) – 1;

while ((hoten[i] == ‘ ‘) && (i>=0))

i–;

//tach ten

while ((hoten[i] != ‘ ‘) && (i>=0))

i–;

ten = strdup(&hoten[i+1]);

return ten;

}