Bài 37, Để quản lý thuê bao điện thoại, với mỗi thuê bao người ta cần lưu số thuê bao, họ tên khách hàng, cước phí phải trả, ngày lập. Hãy viết chương trình con thực hiện các yêu cầu sau:

  • Nhập danh sách thuê bao điện thoại cho đến khi thuê bao là "0" và lưu vào mảng
  • Hiện danh sách đã nhập dưới dạng bảng
  • Sắp xếp danh sách giảm dần của tiền cước phí và hiện danh sách ra màn hình
  • Cho biết thuê bao nào có cước phí cao nhất
  • Thực hiện thêm mới một số thuê bao vào danh sách với vị trí thêm vào cuối danh sách, hiện danh sách sau khi thêm
  • Thực hiện xóa các thuê bao có số tiền cước dưới 10.000 và hiện danh sách sau khi xóa

Bài viết nằm trong: Series thực hành cơ sở lập trình

Code: 

[#include <iostream>
#include <iomanip>
#include <string.h>
//ndanh1.blogspot.com
using namespace std;

struct TB {
    int cuocPhi, soThueBao;
    char tenKH[30], ngayLap[20];
};
void nhapDS(int &n, TB ds[]);
void xuatDS(int n, TB ds[]);
void sapXepDS(int n, TB ds[]);
void thueBao(int n, TB ds[]);
void themThueBao(int &n, TB ds[]);
void xoaThueBao(int &n, TB ds[]);
int main()
{
    int n, dem;
    TB ds[100];

    cout<<"*********************************************\n";
    cout<<"**    CHUONG TRINH QUAN LY THUE BAO          **\n";
    cout<<"**      1. Nhap du lieu                      **\n";
    cout<<"**      2. In danh sach thue bao             **\n";
    cout<<"**      3. Thue bao cuoc phi cao nhat        **\n";
    cout<<"**      4. Sap xep thu tu theo cuoc phi      **\n";
    cout<<"**      5. Xoa cac thue bao phi duoi 10.000  **\n";
    cout<<"**      6. Them moi thue bao vao danh sach   **\n";
    cout<<"**      0. Thoat khoi chuong trinh           **\n";
    cout<<"**       Nhap lua chon cua ban          **\n";

    while(true) {
        cin>>dem;
        switch (dem) {
        case 1:
            cout<<"\nBan da chon nhap thong tin thue bao! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            nhapDS(n, ds);
            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 2:
            cout<<"Ban da chon xuat danh sach thue bao! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            xuatDS(n, ds);

            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 3:
            cout<<"\nBan da chon sap xep danh sach theo cuoc phi! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            sapXepDS (n, ds);
            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 4:
            cout<<"\nBan da chon tim thue bao cuoc phi cao nhat! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            thueBao(n, ds);
            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 5:
            cout<<"\nBan da chon them moi thue bao! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            themThueBao(n, ds);
            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 6:
            cout<<"\nBan da chon xoa thue bao cuoc duoi 10000! \n";
            cout<<setw(50)<<setfill('-')<<endl;
            xoaThueBao(n, ds);
            cout<<"\nNhap vao cac tuy chon khac!\n";
            break;
        case 0:
            cout<<"ban da chon thoat chuong trinh";
            exit(1);

            return 0;
        default:
            cout<<"Ban nhap so khong co trong danh sach!\n ";

            break;
        }
    }
}

//nhap vao danh sach thue bao

void nhapDS(int &n, TB ds[])
{
    int i =0;
    int stb, sdt;
    do {

        cout<<"\nNhap thong tin thue bao "<<i+1;
        cout<<"\nSo dien thoai thue bao: ";
        cin>>sdt;



        if(sdt == 0) {
            break;
        }
        else {
            ds[i].soThueBao = sdt;
            cout<<"Ho va ten thue bao: ";
            fflush(stdin);
            cin.getline(ds[i].tenKH, 30);
            cout<<"Cuoc Phi thue bao: ";
            cin>>ds[i].cuocPhi;
            cout<<"Ngay lap thue bao: ";
            fflush(stdin);
            cin>>ds[i].ngayLap;
            i++;

        }

    }
    while(stb != 0);
    n = i;
}

// in ra thong tin cua danh sach cac thue bao
void xuatDS(int n, TB ds[])
{
    cout<<setw(70)<<setfill('*');
    cout<<setw(20)<<setfill(' ')<<"STT";
    cout<<setw(20)<<setfill(' ')<<"So thue bao";
    cout<<setw(20)<<setfill(' ')<<"Ho Ten";
    cout<<setw(20)<<setfill(' ')<<"Cuoc Phi";
    cout<<setw(20)<<setfill(' ')<<"Ngay lap\n";
    for(int i = 0; i<n; i++ ) {
        cout<<setw(20)<<setfill(' ')<<i+1;
        cout<<setw(20)<<setfill(' ')<<ds[i].soThueBao;
        cout<<setw(20)<<setfill(' ')<<ds[i].tenKH;
        cout<<setw(20)<<setfill(' ')<<ds[i].cuocPhi;
        cout<<setw(20)<<setfill(' ')<<ds[i].ngayLap<<endl;
    }

}

// Sap xep thue bao theo thu tu giam dan cua tien phi cuoc
void sapXepDS ( int n, TB ds[])
{
    TB tg;
    for(int i = 0; i <n; i++) {
        for (int j =i+1; j< n; j++) {
            if(ds[i].cuocPhi < ds[j].cuocPhi ) {
                tg = ds[i];
                ds[i] = ds[j];
                ds[j] = tg;

            }
        }
    }
    cout<<"\nDanh sach sau khi sap xep giam dan cuoc phi "<<endl;
    xuatDS(n, ds);
}

void thueBao(int n, TB ds[])
{
    int MAX;
    MAX =0;
    for(int i = 0; i <n; i++) {
        if(MAX < ds[i].cuocPhi ) {
            MAX = ds[i].cuocPhi;
        }
    }
    cout<<"\nCuoc phi cao nhat la: "<<MAX<<endl;

}
void themThueBao (int &n, TB ds[])
{
    cout<<"Nhap vao thong tin thue bao muon them vao danh sach: "<<endl;



    cout<<"Ho va ten thue bao: ";
    fflush(stdin);
    cin.getline(ds[n].tenKH, 30);
    cout<<"So dien thoai thue bao: ";
    cin>>ds[n].soThueBao;
    cout<<"Cuoc Phi thue bao: ";
    cin>>ds[n].cuocPhi;
    cout<<"Ngay lap thue bao: ";
    cin>>ds[n].ngayLap;
    n++;

    xuatDS(n, ds);
}
void xoaThueBao(int &n, TB ds[])
{
    int dem =n;
    for (int i =0; i<n; i++) {

            if(ds[i].cuocPhi <10000) {
                ds[i] = ds[i+1];
                for(int j=i; j<n; j++) {
                    ds[j] = ds[j+1];
                }
                 i--;
                 n--;
            }
    }

    cout<<"\ndanh sach sau khi xoa  la: "<<endl;

    xuatDS(n, ds);
}]