[C++]Chương trình quản lý khách hàng | Nhập, xuất, sắp xếp

Chương trình quản lý khách hàng c++ của khách sạn cho phép bạn nhập thông tin của n khách hàng từ bàn phím, bao gồm mã khách hàng, họ và tên, giới tính, năm sinh, số ngày ở và giá phòng. Thực hiện tìm khách hàng, tính trung bình cộng và sắp xếp khách hàng.

Xem thêm: Chương trình quản lý danh sách xe ô tô

1. Bài toán quản lý khách hàng c++

Bài 35 (TH-CSLT-07): Nhập danh sách n khách hàng từ bàn phím. Mỗi khách hàng có các thông tin sau: Mã khách hàng, Họ và tên, Giới tính, Năm sinh, Số ngày ở, Giá phòng.

Viết các hàm thực hiện các yêu cầu sau đây:

– Hiển thị danh sách khách hàng.

– Hiển thị thông tin khách hàng có thời gian lưu trú lâu nhất.

– Tìm khách hàng theo mã khách hàng.

– Tính trung bình cộng thành tiền mà khách hàng phải trả, với thành tiền= số ngày ở * giá phòng.

– Sắp xếp danh sách khách hàng theo thứ tự tăng dần về năm sinh.

2. Ý tưởng bài toán

2.1 Hiển thị thông tin khách hàng có thời gian lưu trú lâu nhất

  • Khởi tạo biến ngayo bằng số ngày ở của khách hàng đầu tiên (ds[0].soNgayO), sau đó duyệt qua từng khách hàng trong mảng ds để tìm số ngày ở lớn nhất, bằng cách so sánh ds[i].soNgayO với ngayo, nếu ds[i].soNgayO lớn hơn ngayo, thì gán ngayo=ds[i].soNgayO.
  • Duyệt qua từng khách hàng trong mảng ds, nếu ds[i].soNgayO bằng với ngayo, thì gọi hàm xuatDS(ds+i,1) để in ra thông tin của khách hàng đó.

Xem thêm: [C++]Viết chương trình nhập họ và tên một học sinh và in ra màn hình

2.2 Tìm khách hàng theo mã khách hàng

  • Nhập vào mã khách hàng cần tìm kiếm, sau đó dùng vòng lặp để so sánh mã khách hàng (ds[i].maKH) với mã khách hàng cần tìm kiếm (makh), nếu tìm thấy thì gán biến redflag=1.
  • Kiểm tra giá trị của biến redflag. Nếu redflag==1 thì duyệt qua từng khách hàng trong mảng ds, nếu ds[i].maKH bằng với makh, thì gọi hàm xuatDS(ds+i,1) để in ra thông tin của khách hàng đó. Nếu redflag==0, tức là không tìm thấy khách hàng cần tìm kiếm, thì thông báo không tìm thấy khách hàng.

2.3 Tính trung bình cộng thành tiền mà khách hàng phải trả

  • Khởi tạo biến avgsum với giá trị ban đầu là 0. Tiếp theo, vòng lặp được sử dụng để tính tổng số tiền thanh toán của tất cả khách hàng trong mảng ds, bằng cách nhân giá phòng (ds[i].giaPhong) với số ngày ở (ds[i].soNgayO) của từng khách hàng và cộng dồn vào biến sum.
  • Biến avg được tính bằng cách chia tổng số tiền thanh toán (sum) cho số lượng khách hàng trong mảng ds (n).

3. Code quản lý khách hàng c++

#include<iostream>
#include<iomanip>

using namespace std;

struct kh{
    int maKH, namSinh, soNgayO;
    string hoTen;
    char gioiTInh[3];
    float giaPhong;
};

void nhapDS(kh ds[], int &n){
    cout<<" Nhap so luong khach hang n: "; cin>>n;
    for(int i=0;i<n;i++){
        cout<<" Nhap khach hang thu "<<i+1<<endl;
        cout<<" Nhap ma khach hang: "; cin>>ds[i].maKH;
        cin.ignore();
        cout<<" Nhap ho ten khach hang: "; getline(cin, ds[i].hoTen);
        cout<<" Nhap gioi tinh: "; cin>>ds[i].gioiTInh;
        cin.ignore();
        cout<<" Nhap nam sinh: "; cin>>ds[i].namSinh;
        cout<<" Nhap so ngay o: "; cin>>ds[i].soNgayO;
        cout<<" Nhap gia phong: "; cin>>ds[i].giaPhong;
        cout<<endl;
    }
}

void xuatDS( kh ds[], int n){
    cout<<" Danh sach khach hang: "<<endl;
    cout<<setw(7)<<left<<"STT";
    cout<<setw(15)<<left<<"Ma KH";
    cout<<setw(25)<<left<<"Ho ten khach hang";
    cout<<setw(15)<<left<<"Gioi tinh";
    cout<<setw(15)<<left<<"Nam sinh";
    cout<<setw(15)<<left<<"So ngay o";
    cout<<setw(15)<<left<<"Gia phong";
    cout<<endl;
    for(int i=0;i<n;i++){
        cout<<setw(7)<<left<<i+1;
        cout<<setw(15)<<left<<ds[i].maKH;
        cout<<setw(25)<<left<<ds[i].hoTen;
        cout<<setw(15)<<left<<ds[i].gioiTInh;
        cout<<setw(15)<<left<<ds[i].namSinh;
        cout<<setw(15)<<left<<ds[i].soNgayO;
        cout<<setw(15)<<left<<ds[i].giaPhong;
        cout<<endl;
    }
}

void khachHangolaunhat(kh ds[], int n){
    int ngayo=ds[0].soNgayO;

    for(int i=1;i<n;i++){
        if(ds[i].soNgayO>ngayo){
            ngayo=ds[i].soNgayO;
        }
    }

    for(int i=0;i<n;i++){
        if(ds[i].soNgayO==ngayo){
            xuatDS(ds+i,1);
        }
    }
}

void timKH(kh ds[], int n){

    int makh, redflag=0;
    cout<<" Nhap ma khach hang: "; cin>>makh;
    for(int i=0;i<n;i++){
        if(ds[i].maKH==makh){
            redflag=1;
        }
    }
    if(redflag==1){
        for(int i=0;i<n;i++){
            if(ds[i].maKH==makh){
                xuatDS(ds+i,1);
            }
        }
    }else{
        cout<<"Khong tim thay khach hang"<<endl;
    }
}

void thanhtien(kh ds[], int n){

    float avg=0, sum=0;

    for(int i=0;i<n;i++){
        sum+= ds[i].giaPhong*ds[i].soNgayO;
    }
    avg= sum/n;

    cout<<"Thanh tien= "<<setprecision(3)<<fixed<<avg<<endl;
}

void sapxep(kh ds[], int n){

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(ds[i].namSinh>ds[j].namSinh){
                kh tg = ds[i];
                ds[i]=ds[j];
                ds[j]=tg;
            }
        }
    }
    xuatDS(ds,n);
}

int main(){

    kh ds[20];
    int n, chon;
    do{
        cout<<"-------------------"<<endl;
        cout<<"|1. Nhap danh sach khach hang"<<endl;
        cout<<"|2. Xuat danh sach khach hang"<<endl;
        cout<<"|3. Hien thi thong tin khach hang co thoi gian luu tru lau nhat"<<endl;
        cout<<"|4. Tim khach hang theo ma khach hang"<<endl;
        cout<<"|5. Tinh trung binh cong thanh tien ma khach hang phai tra"<<endl;
        cout<<"|6. Sap xep khach hang theo thu tu tang dan ve nam sinh"<<endl;
        cout<<"|0. Thoat"<<endl;
        cout<<"Moi lua chon: "; cin>>chon;
        switch(chon){
            case 1: {
                nhapDS(ds,n);
                break;
            }
            case 2: {
                xuatDS(ds,n);
                break;
            }
            case 3: {
                khachHangolaunhat(ds,n);
                break;
            }
            case 4: {
                timKH(ds, n);
                break;
            }
            case 5: {
                thanhtien(ds,n);
                break;
            }
            case 6: {
                sapxep(ds,n);
                break;
            }
        }
    }while(chon!=0);
    return 0;
}

4. Kết quả

Nhập danh sách n khách hàng từ bàn phím Hiển thị danh sách khách hàng Hiển thị thông tin khách hàng có thời gian lưu trú lâu nhất Tìm khách hàng theo mã khách hàng Sắp xếp danh sách khách hàng theo thứ tự tăng dần về năm sinh

Trong bài viết này, anh em ta đã triển khai thành công chương trình quản lý danh sách khách hàng cho một khách sạn. Chương trình cho phép nhập thông tin của n khách hàng từ bàn phím, bao gồm mã khách hàng, họ và tên, giới tính, năm sinh, số ngày ở và giá phòng.

Sau khi nhập danh sách khách hàng, chúng ta đã thực hiện một loạt các chức năng như hiển thị danh sách khách hàng, tìm khách hàng có thời gian lưu trú lâu nhất, tìm khách hàng theo mã khách hàng, tính trung bình cộng thành tiền mà khách hàng phải trả và sắp xếp danh sách khách hàng theo thứ tự tăng dần về năm sinh. Cảm ơn các bạn đã tham khảo trên ttnguyen.net

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em