Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <list>
- using namespace std;
- struct Book {
- string udc = "";
- string author = "";
- string title = "";
- int year = -1;
- int copies = -1;
- };
- class Library {
- private:
- list <Book> shelves;
- public:
- // Начальное формирование данных о книгах
- void generateData() {
- cout << "Поля заполняются без пробелов!\n";
- int n;
- do {
- cout << "\nЧисло книг в библиотеке: ";
- cin >> n;
- } while (n <= 0);
- for (int i = 0; i < n; i++) {
- Book tmpBook;
- cout << "\nКнига №" << i + 1 << ":\n";
- cout << "УДК: ";
- do {
- cin >> tmpBook.udc;
- } while (tmpBook.udc.empty());
- cout << "Автор: ";
- do {
- cin >> tmpBook.author;
- } while (tmpBook.author.empty());
- cout << "Название: ";
- do {
- cin >> tmpBook.title;
- } while (tmpBook.title.empty());
- cout << "Год издания: ";
- do {
- cin >> tmpBook.year;
- } while (tmpBook.year < 0);
- cout << "Количество экземпляров: ";
- do {
- cin >> tmpBook.copies;
- } while (tmpBook.copies < 0);
- shelves.push_back(tmpBook);
- }
- }
- // Добавление книги, отсортированной по автору
- void addBookWithSorting() {
- shelves.sort([](Book first, Book second) {
- return first.author < second.author;
- });
- bool bookAdded = false;
- Book tmpBook;
- cout << "\nНовая книга: ";
- cout << "\nУДК: ";
- do {
- cin >> tmpBook.udc;
- } while (tmpBook.udc.empty());
- cout << "Автор: ";
- do {
- cin >> tmpBook.author;
- } while (tmpBook.author.empty());
- cout << "Название: ";
- do {
- cin >> tmpBook.title;
- } while (tmpBook.title.empty());
- cout << "Год издания: ";
- do {
- cin >> tmpBook.year;
- } while (tmpBook.year < 0);
- cout << "Количество экземпляров: ";
- do {
- cin >> tmpBook.copies;
- } while (tmpBook.copies < 0);
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->author >= tmpBook.author) {
- shelves.insert(curBook, tmpBook);
- bookAdded = true;
- break;
- }
- }
- if (!bookAdded) {
- shelves.push_back(tmpBook);
- }
- }
- // Добавление книги перед указанной
- void addBookBefore() {
- bool bookAdded = false;
- Book tmpBook;
- string udc;
- cout << "\n\nДобавить перед книгой с УДК: ";
- cin >> udc;
- cout << "\nНовая книга: ";
- cout << "\nУДК: ";
- do {
- cin >> tmpBook.udc;
- } while (tmpBook.udc.empty());
- cout << "Автор: ";
- do {
- cin >> tmpBook.author;
- } while (tmpBook.author.empty());
- cout << "Название: ";
- do {
- cin >> tmpBook.title;
- } while (tmpBook.title.empty());
- cout << "Год издания: ";
- do {
- cin >> tmpBook.year;
- } while (tmpBook.year < 0);
- cout << "Количество экземпляров: ";
- do {
- cin >> tmpBook.copies;
- } while (tmpBook.copies < 0);
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->udc == udc) {
- shelves.insert(curBook, tmpBook);
- bookAdded = true;
- break;
- }
- }
- if (!bookAdded) {
- cout << "\nКнига с данным УДК отсутствует\n";
- }
- }
- // Добавление книги после указанной
- void addBookAfter() {
- bool bookAdded = false;
- Book tmpBook;
- string udc;
- cout << "\n\nДобавить после книги с УДК: ";
- cin >> udc;
- cout << "\nНовая книга: ";
- cout << "\nУДК: ";
- do {
- cin >> tmpBook.udc;
- } while (tmpBook.udc.empty());
- cout << "Автор: ";
- do {
- cin >> tmpBook.author;
- } while (tmpBook.author.empty());
- cout << "Название: ";
- do {
- cin >> tmpBook.title;
- } while (tmpBook.title.empty());
- cout << "Год издания: ";
- do {
- cin >> tmpBook.year;
- } while (tmpBook.year < 0);
- cout << "Количество экземпляров: ";
- do {
- cin >> tmpBook.copies;
- } while (tmpBook.copies < 0);
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->udc == udc) {
- list <Book>::iterator nextBook = curBook;
- nextBook++;
- shelves.insert(nextBook, tmpBook);
- bookAdded = true;
- break;
- }
- }
- if (!bookAdded) {
- cout << "\nКнига с данным УДК отсутствует\n";
- }
- }
- // Удаление выбранной книги
- void deleteBook() {
- bool bookDeleted = false;
- string udc;
- cout << "\n\nУдалить книгу с УДК: ";
- cin >> udc;
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->udc == udc) {
- shelves.erase(curBook);
- bookDeleted = true;
- break;
- }
- }
- if (!bookDeleted) {
- cout << "\nКнига с данным УДК отсутствует\n";
- }
- }
- // Выдача книг
- void takeBook() {
- bool bookFound = false;
- string udc;
- cout << "\n\nВзять книгу с УДК: ";
- cin >> udc;
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->udc == udc) {
- if (curBook->copies > 0) {
- curBook->copies--;
- cout << "\nКнига выдана";
- }
- else {
- cout << "\nВсе экземпляры на руках";
- }
- bookFound = true;
- break;
- }
- }
- if (!bookFound) {
- cout << "\nКнига с данным УДК отсутствует\n";
- }
- }
- // Возврат книг
- void returnBook() {
- bool bookFound = false;
- string udc;
- cout << "\n\nВернуть книгу с УДК: ";
- cin >> udc;
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- if (curBook->udc == udc) {
- curBook->copies++;
- bookFound = true;
- break;
- }
- }
- if (!bookFound) {
- cout << "\nКнига с данным УДК отсутствует\n";
- }
- }
- // Сведения о наличии книг в билиотеке
- void infoProvision() {
- cout << "\n\nЧисло книг в библиотеке: " << shelves.size();
- int numOfBook = 0;
- for (list <Book>::iterator curBook = shelves.begin();
- curBook != shelves.end(); curBook++) {
- numOfBook++;
- cout << "\n\nКнига №" << numOfBook;
- cout << "\nУДК: " << curBook->udc;
- cout << "\nАвтор: " << curBook->author;
- cout << "\nНазвание: " << curBook->title;
- cout << "\nГод издания: " << curBook->year;
- cout << "\nКоличество экземпляров: " << curBook->copies;
- }
- }
- };
- int main() {
- // Ниже - пример работы с классом Library
- Library myLibrary;
- myLibrary.generateData();
- myLibrary.addBookWithSorting();
- myLibrary.infoProvision();
- myLibrary.addBookBefore();
- myLibrary.infoProvision();
- myLibrary.addBookAfter();
- myLibrary.infoProvision();
- myLibrary.deleteBook();
- myLibrary.infoProvision();
- myLibrary.takeBook();
- myLibrary.infoProvision();
- myLibrary.returnBook();
- myLibrary.infoProvision();
- return 0;
- }
Add Comment
Please, Sign In to add comment