code

 avatar
unknown
plain_text
a year ago
4.6 kB
3
Indexable
#include <iostream>
#include <string>
using namespace std;

class CBook {
private:
    string invNumber, author, title;
    float price;
public:
    void getData();
    void display();
};
void CBook::getData() {
    cin.ignore();
    cout << "iNumber: "; getline(cin, invNumber);
    cout << "Author: "; getline(cin, author);
    cout << "Title: "; getline(cin, title);
    cout << "Price: "; cin >> price;
}
void CBook::display() {
    cout << "iNumber: " << invNumber << endl;
    cout << "Author: " << author << endl;
    cout << "Title: " << title << endl;
    cout << "Price: " << price << endl;
}

class CReader {
private:
    string name, address, EGN;
public:
    void getData();
    void display();
};
void CReader::getData() {
    cin.ignore();
    cout << "Reader's name: "; getline(cin, name);
    cout << "Address: "; getline(cin, address);
    cout << "EGN: "; getline(cin, EGN);
}
void CReader::display() {
    cout << "Name: " << name << endl;
    cout << "Address: " << address << endl;
    cout << "EGN: " << EGN << endl;
}

class DMY {
private:
    int d, m, y;
public:
    void getData();
    void display();
    int datCmp(DMY d1,DMY d2);
};
void DMY::getData() {
    cout << "--- Date ---\n";
    cout << "   - day: "; cin >> d;
    cout << "   - month: "; cin >> m;
    cout << "   - year: "; cin >> y;

}
void DMY::display() {
    cout << d << "." << m << "." << y;
}
int DMY::datCmp(DMY d1, DMY d2) {
    if (d1.y != d2.y) return d1.y - d2.y;
    if (d1.m != d2.m) return d1.m - d2.m;
    return d1.d - d2.d;
}


class Register : public CBook, public CReader, public DMY {
private:
    string rNumber;
    DMY DateOfReturning;
public:
    void getData();
    void display();
    int returnBook(Register givenBook[], int gbNum, string rNumber);
    void notReturned(Register givenBook[], int gbNum);
};

void Register::getData() {
    cin.ignore();
    cout << "Registration number: "; getline(cin, rNumber); cout << endl;
    DateOfReturning.getData();
}
void Register::display() {
    cout << "Registration number: " << rNumber;
    DateOfReturning.display();
}
int Register::returnBook(Register givenBook[], int gbNum, string rNumber) {
    int count = 0;
    for (int i = 0; i < gbNum; i++) {
        if (givenBook[i].rNumber == rNumber) {
            for (int j = i; j <= gbNum - 1; j++)
            {
                givenBook[j] = givenBook[j + 1];
            }
            gbNum--;
            cout << "The book is deleted.";
        }
        else {
            cout << "No matching book..." << endl;
        }
        return gbNum;
    }
}
void Register::notReturned(Register givenBook[], int gbNum) {;
    DMY controlDate;
    cout << "Input today's date."; controlDate.getData();
    for (int i = 0; i < gbNum; i++) {
        if (DMY::datCmp(givenBook[i], controlDate) < 0) {
            givenBook[i].CReader::display();
        }
    };
}

int main()
{
    int codeOp = 0;
    Register givenBook[10]; int gbNum = 0;
    do {
        cout << "\nMENU OF EXECUTABLE OPERATIONS:\n";
        cout << " 1 -  add given book\n";
        cout << " 2 -  all lent books\n";
        cout << " 3 -  delete returned book\n";
        cout << " 4 -  list of readers who have not returned books\n";
        cout << " 5 -  create an array with data of unreturned books\n";
        cout << "Select an operation or 0 to end: "; cin >> codeOp;
        switch (codeOp) {
        case 0: cout << "Exiting..."; break;
        case 1:
            givenBook[gbNum].CBook::getData();
            givenBook[gbNum].CReader::getData();
            givenBook[gbNum++].getData();
            break;
        case 2:
            for (int i = 0; i < gbNum; i++) {
                if (gbNum = 0) {
                    cout << "No lent books";
                }
                givenBook[i].CBook::display();
                givenBook[i].CReader::display();
                givenBook[i].display();
            }
            break;
        case 3:
        {
            string rNumber;
            cin.ignore();
            cout << "Register number of the book you want to return: "; getline(cin, rNumber);
            gbNum = givenBook[gbNum].returnBook(givenBook, gbNum, rNumber);
        }
        break;
        case 4:
        {
            givenBook[0].notReturned( givenBook, gbNum);
        }
            break;
        case 5:
            break;
        default: cout << "Invalid operation code.\n";
        }
    } while (codeOp != 0);
Editor is loading...
Leave a Comment