[C++] Chương trình quản lý bộ phim | Ghi vào tệp “PHIM.DAT”

Đề bài yêu cầu chúng ta tổ chức dữ liệu chương trình quản lý bộ phim, lưu trữ các thông tin về mỗi bộ phim như tên phim, đạo diễn, hãng sản xuất, năm sản xuất và thể loại vào tệp “PHIM.DAT”.

Xem thêm:

1. Bài toán quản lý bộ phim c++

Bài 42 (TH-CSLT-06): Tổ chức dữ liệu để quản lý danh mục các bộ phim, các thông tin liên quan đến bộ phim gồm: Tên phim, Đạo diễn, Hãng sản xuất, Năm sản xuất, Thể loại. Viết hàm thực hiện các công việc sau:

  1. Nhập dữ liệu cho n bộ phim, và ghi vào tệp “PHIM.DAT”.
  2. Đọc dữ liệu từ tệp “PHIM.DAT” và in ra màn hình.
  3. Nhập năm sản xuất, tìm và in ra danh sách các bộ phim có năm sản xuất thỏa mãn.
  4. Sắp các bộ phim theo năm sản xuất giảm dần và ghi vào tệp “SAPTHEONAM.DAT”
  5. Cho biết có bao nhiêu bộ phim do Hãng phim Giải phóng thực hiện.

2. Nhập dữ liệu cho n bộ phim, và ghi vào tệp “PHIM.DAT”

– Yêu cầu người dùng nhập số lượng bộ phim n.
– Sử dụng cin.ignore() để loại bỏ ký tự thừa.
– Sử dụng vòng lặp for để nhập thông tin về từng bộ phim.
– Mở file “PHIM.DAT” để ghi thông tin.
– Kiểm tra xem file có được mở thành công hay không. Nếu không, thông báo lỗi và kết thúc hàm.
– Ghi số lượng bộ phim n vào file.
– Sử dụng vòng lặp for để ghi thông tin về từng bộ phim vào file:
– Đóng file sau khi ghi xong.
– Thông báo lưu file thành công.

3. Đọc dữ liệu từ tệp “PHIM.DAT”

– Mở file “PHIM.DAT” để đọc thông tin.
– Kiểm tra xem file có được mở thành công hay không. Nếu không, thông báo lỗi và kết thúc hàm.
– Đọc số lượng bộ phim n từ file.
– Sử dụng output.ignore() để loại bỏ ký tự thừa.
– Sử dụng vòng lặp for để đọc thông tin về từng bộ phim từ file:
– Đóng file sau khi đọc xong.
– Gọi hàm docFile_phim(ds, n) để đọc thông tin từ file vào mảng ds[].
– Sử dụng vòng lặp for để in thông tin về từng bộ phim từ mảng ds[] ra màn hình

4. In ra danh sách các bộ phim có năm sản xuất thỏa mãn

– Gọi hàm docFile_phim(ds, n) để đọc thông tin từ file vào mảng ds[].
– Yêu cầu người dùng nhập năm sản xuất (namsx).
– Khởi tạo biến redflag với giá trị ban đầu là 0.
– Sử dụng vòng lặp for để kiểm tra năm sản xuất của từng bộ phim trong mảng ds[]:
– Nếu tìm thấy bộ phim có năm sản xuất trùng khớp với namsx, gán redflag bằng 1.
– Kiểm tra giá trị của redflag:
– Nếu redflag bằng 1 (có bộ phim có năm sản xuất trùng khớp). Sử dụng vòng lặp for để in thông tin về các bộ phim có năm sản xuất trùng khớp với namsx từ mảng ds[] ra màn hình.
– Nếu redflag khác 1 (không có bộ phim nào có năm sản xuất trùng khớp). In thông báo không tìm thấy năm sản xuất namsx và kết thúc hàm.

5. Sắp các bộ phim theo năm sản xuất giảm dần

– Gọi hàm docFile_phim(ds, n) để đọc thông tin từ file vào mảng ds[].
– Sử dụng hai vòng lặp for lồng nhau để thực hiện sắp xếp giảm dần các bộ phim theo năm sản xuất:
– So sánh ds[i].namSX với ds[j].namSX, nếu ds[i].namSX nhỏ hơn ds[j].namSX, thực hiện hoán đổi vị trí của ds[i]ds[j] bằng cách sử dụng một biến tạm tg.
– Gọi hàm luuFile(ds, n) để lưu lại thay đổi đã được sắp xếp vào file “PHIM.DAT”.
– Gọi hàm xuatmang(ds, n) để in ra màn hình danh sách các bộ phim đã được sắp xếp theo năm sản xuất giảm dần.

6. Cho biết có bao nhiêu bộ phim do Hãng phim Giải phóng thực hiện

– Gọi hàm docFile_phim(ds, n) để đọc thông tin từ file vào mảng ds[].
– Yêu cầu người dùng nhập hãng phim cần tìm và lưu giá trị vào biến hangphim bằng cin.getline(hangphim, 255).
– Sử dụng vòng lặp for để kiểm tra từng bộ phim trong mảng ds[]:
– So sánh hãng sản xuất của bộ phim tại vị trí i với giá trị hangphim bằng cách sử dụng strcmp(ds[i].hangSX, hangphim).
– Nếu hai chuỗi bằng nhau (trả về giá trị 0), tăng biến dem lên 1.
– Trả về giá trị của biến dem là số lượng bộ phim có hãng sản xuất trùng khớp với giá trị nhập vào.

7. Code chương trình quản lý bộ phim c++

#include<iostream>
#include<fstream>
#include<iomanip>
#include<string.h>
using namespace std;

struct phim{
    char tenPhim[255];
    char daoDien[255];
    char hangSX[255];
    int namSX;
    char theLoai[255];
};
//1. Nhap du lieu mang
void nhap_phim(phim ds[], int &n){

    cout<<"Nhap so luong bo phim n: "; cin>>n;
    cin.ignore(); //loai bo ky tu thua

    for(int i=0;i<n;i++){
        cout<<"Nhap ten phim: "; cin.getline(ds[i].tenPhim, 255);
        cout<<"Nhap dao dien: "; cin.getline(ds[i].daoDien, 255);
        cout<<"Nhap hang san xuat: "; cin.getline(ds[i].hangSX, 255);
        cout<<"Nhap nam san xuat: ";cin>>ds[i].namSX;
        cin.ignore();
        cout<<"Nhap the loai: "; cin.getline(ds[i].theLoai, 255);
        cout<<endl;
    }
}
//2. Luu file
void luuFile_phim(phim ds[], int n){

    //mo file
    ofstream input("PHIM.DAT");

    if(!input.is_open()){
        cout<<"Loi khi mo file!"<<endl;
        return;
    }else{
        input<<n<<endl; //ghi so luong bo phim

        for(int i=0;i<n;i++){
            input<<ds[i].tenPhim<<endl;
            input<<ds[i].daoDien<<endl;
            input<<ds[i].hangSX<<endl;
            input<<ds[i].namSX<<endl;
            input<<ds[i].theLoai<<endl;
        }

        input.close();
        cout<<"Luu file thanh cong!"<<endl;
    }
}

//Doc file

void docFile_phim(phim ds[], int &n){

    //mo file
    ifstream output("PHIM.DAT");

    if(!output.is_open()){
        cout<<"Loi khi mo tep!"<<endl;
        return;
    }else{
        output>>n;

        output.ignore(); //loai bo ky tu thua

        for(int i=0;i<n;i++){
            output.getline(ds[i].tenPhim, 255);
            output.getline(ds[i].daoDien, 255);
            output.getline(ds[i].hangSX, 255);
            output>>ds[i].namSX;
            output.ignore();
            output.getline(ds[i].theLoai, 255);
        }
        output.close();
    }
}

//xuat mang ra man hinh
void xuatmang(phim ds[], int n){

    docFile_phim(ds,n);
    cout<<"Danh sach phim: "<<endl;
    cout<<setw(15)<<left<<"Ten phim";
    cout<<setw(15)<<left<<"Dao dien";
    cout<<setw(15)<<left<<"Hang san xuat";
    cout<<setw(15)<<left<<"Nam san xuat";
    cout<<setw(15)<<left<<"The loai";
    cout<<endl;

    for(int i=0;i<n;i++){
        cout<<setw(15)<<left<<ds[i].tenPhim;
        cout<<setw(15)<<left<<ds[i].daoDien;
        cout<<setw(15)<<left<<ds[i].hangSX;
        cout<<setw(15)<<left<<ds[i].namSX;
        cout<<setw(15)<<left<<ds[i].theLoai;
        cout<<endl;
    }
}

void inDS_theo_namSX(phim ds[], int n){

    docFile_phim(ds,n);
    //nhap nam san xuat
    int namsx;
    cout<<"Nhap nam san xuat: "; cin>>namsx;

    int redflag=0;

    for(int i=0;i<n;i++){
        if(ds[i].namSX==namsx){
            redflag=1;
        }
    }

    if(redflag==1){
        //in sanh sach phim theo nam san xuat
        cout<<"Danh sach phim theo nam san xuat: "<<endl;
        cout<<setw(15)<<left<<"Ten phim";
        cout<<setw(15)<<left<<"Dao dien";
        cout<<setw(15)<<left<<"Hang san xuat";
        cout<<setw(15)<<left<<"Nam san xuat";
        cout<<setw(15)<<left<<"The loai";
        cout<<endl;
        for(int i=0;i<n;i++){
            if(ds[i].namSX==namsx){
                cout<<setw(15)<<left<<ds[i].tenPhim;
                cout<<setw(15)<<left<<ds[i].daoDien;
                cout<<setw(15)<<left<<ds[i].hangSX;
                cout<<setw(15)<<left<<ds[i].namSX;
                cout<<setw(15)<<left<<ds[i].theLoai;
                cout<<endl;
            }
        }
    }else{
        cout<<"Khong ton tai nam san xuat "<<namsx<<endl;
        return;
    }
}

void sapXep_giam_dan_theo_nam(phim ds[], int n){

    docFile_phim(ds,n);

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(ds[i].namSX<ds[j].namSX){
                phim tg= ds[i];
                ds[i]=ds[j];
                ds[j]=tg;
            }
        }
    }

    luuFile_phim(ds,n);
    xuatmang(ds,n);
}

int dem_hangSX(phim ds[], int n){

    docFile_phim(ds,n);
    char hangphim[255];
    int dem=0;

    cin.ignore();
    cout<<"Nhap hang phim: "; cin.getline(hangphim, 255);

    for(int i=0;i<n;i++){
        if(strcmp(ds[i].hangSX,hangphim)==0){
            dem++;
        }
    }

    return dem;
}

int main(){

    phim ds[50];
    int n, chon;

    do{
        cout<<"|1. Nhap du lieu bo phim"<<endl;
        cout<<"|2. Luu file du lieu bo phim"<<endl;
        cout<<"|3. Doc file du lieu bo phim"<<endl;
        cout<<"|4. In danh sach bo phim theo nam san xuat"<<endl;
        cout<<"|5. Sap xep bo phim theo nam san xuat giam dan"<<endl;
        cout<<"|6. Dem so bo phim do hang san xuat giai phong thuc hien"<<endl;
        cout<<"Lua chon: "; cin>>chon;
        switch(chon){
            case 1: {
                nhap_phim(ds,n);
                break;
            }
            case 2: {
                luuFile_phim(ds,n);
                break;
            }
            case 3: {
                xuatmang(ds,n);
                break;
            }
            case 4: {
                inDS_theo_namSX(ds,n);
                break;
            }
            case 5: {
                sapXep_giam_dan_theo_nam(ds,n);
                break;
            }
            case 6: {
                int dem=dem_hangSX(ds,n);

                if(dem>0){
                    cout<<" So bo phim so hang san xuat la: "<<dem<<endl;
                }else{
                    cout<<"Khong co bo phim nao!"<<endl;
                }
                break;
            }
            default: break;
        }
    }while(chon!=0);
    return 0;
}

8. Kết quả

Nhập dữ liệu cho n bộ phim, và ghi vào tệp "PHIM.DAT"

Tệp PHIM.DAT

Sắp các bộ phim theo năm sản xuất giảm dần và ghi vào tệp "SAPTHEONAM.DAT"

Đọc dữ liệu từ tệp "PHIM.DAT" và in ra màn hình

Cho biết có bao nhiêu bộ phim do Hãng phim Giải phóng thực hiện Nhập năm sản xuất, tìm và in ra danh sách các bộ phim có năm sản xuất thỏa mãn

Đọc dữ liệu từ tệp "PHIM.DAT" và in ra màn hình

Trên đây là đoạn mã tổ chức dữ liệu quản lý danh mục các bộ phim c++. 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