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;
}
tao sao no nhay qua ten khong nhap duoc ten ban oi
LikeLike
Bạn SV K mấy trường nào? T học lâu rồi giờ ko có coi lại nữa…
LikeLike
ban can them fflush(stcdin) trc khi thuc hien ham gets
LikeLike