Untitled
unknown
plain_text
a year ago
5.6 kB
7
Indexable
#include <iostream>
#include <string>
using namespace std;
class CBook {
private:
string invNumber, author, title;
float price;
public:
CBook();
CBook(string invNumber, string author, string title, float price) {
this->invNumber = invNumber;
this->author = author;
this->title = title;
this->price = price;
};
void getData();
void display();
CBook GetBook() {
CBook book = CBook(invNumber, author, title, price);
return book;
}
};
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 << " - 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 readerNotReturned(Register givenBook[], int gbNum);
int bookNotReturned(Register givenBook[], int gbNum, CBook unreturnedBook[], int ubNum);
};
void Register::getData() {
cin.ignore();
cout << "Registration number: "; getline(cin, rNumber); cout << endl;
cout << "Date of returning:\n "; 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::readerNotReturned(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 Register::bookNotReturned(Register givenBook[], int gbNum, CBook unreturnedBook[], int ubNum) {;
DMY controlDate;
cout << "Input today's date:\n"; controlDate.getData();
for (int i = 0; i < gbNum; i++) {
if (DMY::datCmp(givenBook[i].DateOfReturning, controlDate) < 0) {
unreturnedBook[ubNum++] = givenBook[i].GetBook();
}
};
return ubNum;
}
int main()
{
int codeOp = 0;
Register givenBook[10]; int gbNum = 0;
CBook unreturnedBook[10]; int ubNum = 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].readerNotReturned( givenBook, gbNum);
}
break;
case 5:
givenBook[0].bookNotReturned(givenBook, gbNum, unreturnedBook, ubNum);
break;
default: cout << "Invalid operation code.\n";
}
} while (codeOp != 0);
}
Editor is loading...
Leave a Comment