HomoCivicus

TUSUR 21.05.2019

May 21st, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. using namespace std;
  4.  
  5. struct Book {
  6.     string udc = "";
  7.     string author = "";
  8.     string title = "";
  9.     int year = -1;
  10.     int copies = -1;
  11. };
  12.  
  13. class Library {
  14. private:
  15.     list <Book> shelves;
  16.  
  17. public:
  18.     // Начальное формирование данных о книгах
  19.     void generateData() {
  20.         cout << "Поля заполняются без пробелов!\n";
  21.  
  22.         int n;
  23.        
  24.         do {
  25.             cout << "\nЧисло книг в библиотеке: ";
  26.             cin >> n;
  27.         } while (n <= 0);
  28.  
  29.         for (int i = 0; i < n; i++) {
  30.             Book tmpBook;
  31.             cout << "\nКнига №" << i + 1 << ":\n";
  32.  
  33.             cout << "УДК: ";
  34.             do {
  35.                 cin >> tmpBook.udc;
  36.             } while (tmpBook.udc.empty());
  37.  
  38.             cout << "Автор: ";
  39.             do {
  40.                 cin >> tmpBook.author;
  41.             } while (tmpBook.author.empty());
  42.  
  43.             cout << "Название: ";
  44.             do {
  45.                 cin >> tmpBook.title;
  46.             } while (tmpBook.title.empty());
  47.  
  48.             cout << "Год издания: ";
  49.             do {
  50.                 cin >> tmpBook.year;
  51.             } while (tmpBook.year < 0);
  52.  
  53.             cout << "Количество экземпляров: ";
  54.             do {
  55.                 cin >> tmpBook.copies;
  56.             } while (tmpBook.copies < 0);
  57.  
  58.             shelves.push_back(tmpBook);
  59.         }
  60.     }
  61.  
  62.     // Добавление книги, отсортированной по автору
  63.     void addBookWithSorting() {
  64.         shelves.sort([](Book first, Book second) {
  65.             return first.author < second.author;
  66.         });
  67.  
  68.         bool bookAdded = false;
  69.         Book tmpBook;
  70.         cout << "\nНовая книга: ";
  71.  
  72.         cout << "\nУДК: ";
  73.         do {
  74.             cin >> tmpBook.udc;
  75.         } while (tmpBook.udc.empty());
  76.  
  77.         cout << "Автор: ";
  78.         do {
  79.             cin >> tmpBook.author;
  80.         } while (tmpBook.author.empty());
  81.  
  82.         cout << "Название: ";
  83.         do {
  84.             cin >> tmpBook.title;
  85.         } while (tmpBook.title.empty());
  86.  
  87.         cout << "Год издания: ";
  88.         do {
  89.             cin >> tmpBook.year;
  90.         } while (tmpBook.year < 0);
  91.  
  92.         cout << "Количество экземпляров: ";
  93.         do {
  94.             cin >> tmpBook.copies;
  95.         } while (tmpBook.copies < 0);
  96.  
  97.         for (list <Book>::iterator curBook = shelves.begin();
  98.             curBook != shelves.end(); curBook++) {
  99.  
  100.             if (curBook->author >= tmpBook.author) {
  101.                 shelves.insert(curBook, tmpBook);
  102.                 bookAdded = true;
  103.                 break;
  104.             }
  105.         }
  106.  
  107.         if (!bookAdded) {
  108.             shelves.push_back(tmpBook);
  109.         }
  110.     }
  111.  
  112.     // Добавление книги перед указанной
  113.     void addBookBefore() {
  114.         bool bookAdded = false;
  115.         Book tmpBook;
  116.         string udc;
  117.  
  118.         cout << "\n\nДобавить перед книгой с УДК: ";
  119.         cin >> udc;
  120.         cout << "\nНовая книга: ";
  121.  
  122.         cout << "\nУДК: ";
  123.         do {
  124.             cin >> tmpBook.udc;
  125.         } while (tmpBook.udc.empty());
  126.  
  127.         cout << "Автор: ";
  128.         do {
  129.             cin >> tmpBook.author;
  130.         } while (tmpBook.author.empty());
  131.  
  132.         cout << "Название: ";
  133.         do {
  134.             cin >> tmpBook.title;
  135.         } while (tmpBook.title.empty());
  136.  
  137.         cout << "Год издания: ";
  138.         do {
  139.             cin >> tmpBook.year;
  140.         } while (tmpBook.year < 0);
  141.  
  142.         cout << "Количество экземпляров: ";
  143.         do {
  144.             cin >> tmpBook.copies;
  145.         } while (tmpBook.copies < 0);
  146.  
  147.         for (list <Book>::iterator curBook = shelves.begin();
  148.             curBook != shelves.end(); curBook++) {
  149.  
  150.             if (curBook->udc == udc) {
  151.                 shelves.insert(curBook, tmpBook);
  152.                 bookAdded = true;
  153.                 break;
  154.             }
  155.         }
  156.  
  157.         if (!bookAdded) {
  158.             cout << "\nКнига с данным УДК отсутствует\n";
  159.         }
  160.     }
  161.  
  162.     // Добавление книги после указанной
  163.     void addBookAfter() {
  164.         bool bookAdded = false;
  165.         Book tmpBook;
  166.         string udc;
  167.  
  168.         cout << "\n\nДобавить после книги с УДК: ";
  169.         cin >> udc;
  170.         cout << "\nНовая книга: ";
  171.  
  172.         cout << "\nУДК: ";
  173.         do {
  174.             cin >> tmpBook.udc;
  175.         } while (tmpBook.udc.empty());
  176.  
  177.         cout << "Автор: ";
  178.         do {
  179.             cin >> tmpBook.author;
  180.         } while (tmpBook.author.empty());
  181.  
  182.         cout << "Название: ";
  183.         do {
  184.             cin >> tmpBook.title;
  185.         } while (tmpBook.title.empty());
  186.  
  187.         cout << "Год издания: ";
  188.         do {
  189.             cin >> tmpBook.year;
  190.         } while (tmpBook.year < 0);
  191.  
  192.         cout << "Количество экземпляров: ";
  193.         do {
  194.             cin >> tmpBook.copies;
  195.         } while (tmpBook.copies < 0);
  196.  
  197.         for (list <Book>::iterator curBook = shelves.begin();
  198.             curBook != shelves.end(); curBook++) {
  199.  
  200.             if (curBook->udc == udc) {
  201.                 list <Book>::iterator nextBook = curBook;
  202.                 nextBook++;
  203.                 shelves.insert(nextBook, tmpBook);
  204.                 bookAdded = true;
  205.                 break;
  206.             }
  207.         }
  208.  
  209.         if (!bookAdded) {
  210.             cout << "\nКнига с данным УДК отсутствует\n";
  211.         }
  212.     }
  213.  
  214.     // Удаление выбранной книги
  215.     void deleteBook() {
  216.         bool bookDeleted = false;
  217.         string udc;
  218.  
  219.         cout << "\n\nУдалить книгу с УДК: ";
  220.         cin >> udc;
  221.  
  222.         for (list <Book>::iterator curBook = shelves.begin();
  223.             curBook != shelves.end(); curBook++) {
  224.  
  225.             if (curBook->udc == udc) {
  226.                 shelves.erase(curBook);
  227.                 bookDeleted = true;
  228.                 break;
  229.             }
  230.         }
  231.  
  232.         if (!bookDeleted) {
  233.             cout << "\nКнига с данным УДК отсутствует\n";
  234.         }
  235.     }
  236.  
  237.     // Выдача книг
  238.     void takeBook() {
  239.         bool bookFound = false;
  240.         string udc;
  241.  
  242.         cout << "\n\nВзять книгу с УДК: ";
  243.         cin >> udc;
  244.  
  245.         for (list <Book>::iterator curBook = shelves.begin();
  246.             curBook != shelves.end(); curBook++) {
  247.  
  248.             if (curBook->udc == udc) {
  249.                 if (curBook->copies > 0) {
  250.                     curBook->copies--;
  251.                     cout << "\nКнига выдана";
  252.                 }
  253.                 else {
  254.                     cout << "\nВсе экземпляры на руках";
  255.                 }
  256.  
  257.                 bookFound = true;
  258.                 break;
  259.             }
  260.         }
  261.  
  262.         if (!bookFound) {
  263.             cout << "\nКнига с данным УДК отсутствует\n";
  264.         }
  265.     }
  266.  
  267.     // Возврат книг
  268.     void returnBook() {
  269.         bool bookFound = false;
  270.         string udc;
  271.  
  272.         cout << "\n\nВернуть книгу с УДК: ";
  273.         cin >> udc;
  274.  
  275.         for (list <Book>::iterator curBook = shelves.begin();
  276.             curBook != shelves.end(); curBook++) {
  277.  
  278.             if (curBook->udc == udc) {
  279.                 curBook->copies++;
  280.                 bookFound = true;
  281.                 break;
  282.             }
  283.         }
  284.  
  285.         if (!bookFound) {
  286.             cout << "\nКнига с данным УДК отсутствует\n";
  287.         }
  288.     }
  289.  
  290.     // Сведения о наличии книг в билиотеке
  291.     void infoProvision() {
  292.         cout << "\n\nЧисло книг в библиотеке: " << shelves.size();
  293.         int numOfBook = 0;
  294.  
  295.         for (list <Book>::iterator curBook = shelves.begin();
  296.             curBook != shelves.end(); curBook++) {
  297.             numOfBook++;
  298.  
  299.             cout << "\n\nКнига №" << numOfBook;
  300.             cout << "\nУДК: " << curBook->udc;
  301.             cout << "\nАвтор: " << curBook->author;
  302.             cout << "\nНазвание: " << curBook->title;
  303.             cout << "\nГод издания: " << curBook->year;
  304.             cout << "\nКоличество экземпляров: " << curBook->copies;
  305.         }
  306.     }
  307. };
  308.  
  309. int main() {
  310.     // Ниже - пример работы с классом Library
  311.  
  312.     Library myLibrary;
  313.     myLibrary.generateData();
  314.     myLibrary.addBookWithSorting();
  315.     myLibrary.infoProvision();
  316.     myLibrary.addBookBefore();
  317.     myLibrary.infoProvision();
  318.     myLibrary.addBookAfter();
  319.     myLibrary.infoProvision();
  320.     myLibrary.deleteBook();
  321.     myLibrary.infoProvision();
  322.     myLibrary.takeBook();
  323.     myLibrary.infoProvision();
  324.     myLibrary.returnBook();
  325.     myLibrary.infoProvision();
  326.  
  327.     return 0;
  328. }
Add Comment
Please, Sign In to add comment