Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <clocale>
- #include <windows.h>
- #include <vector>
- #include <conio.h>
- using namespace std;
- template <typename Type>
- Type MagicInput(Type input) // Ввод с проверкой
- {
- while (!(cin >> input) || (cin.peek() != '\n'))
- {
- cin.clear(); while (cin.get() != '\n');
- cout << "Ошибка ввода. Попробуйте еще раз.\n";
- }
- return input;
- }
- void SetLucidaFont()
- {
- HANDLE hCon = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
- if (hCon != INVALID_HANDLE_VALUE) {
- CONSOLE_FONT_INFOEX cfi;
- cfi.cbSize = sizeof(CONSOLE_FONT_INFOEX);
- cfi.nFont = 0;
- cfi.dwFontSize.X = 0;
- cfi.dwFontSize.Y = 12;
- cfi.FontFamily = FF_DONTCARE;
- cfi.FontWeight = 400;
- wcscpy_s(cfi.FaceName, L"Lucida Console");
- SetCurrentConsoleFontEx(hCon, FALSE, &cfi);
- }
- }
- class Item
- {
- protected:
- int invNumber;
- bool taken;
- public:
- Item(int invNumber, bool taken) : invNumber(invNumber), taken(taken) {};
- virtual void Show() = 0;
- bool isAvailable() { return !taken; }
- int GetInvNumber() { return invNumber; }
- void Take() { taken = true; }
- void Return() { taken = false; }
- };
- class Book : public Item
- {
- private:
- string author;
- string title;
- string publisher;
- int year;
- public:
- Book(int invNumber, bool taken, string author, string title, string publisher, int year)
- : Item(invNumber, taken), author(author), title(title), publisher(publisher), year(year) {};
- string Author() { return author; }
- string Title() { return title; }
- string Publisher() { return publisher; }
- int YearOfPublishing() { return year; }
- void Show()
- {
- cout << endl << (taken ? "[Нет в наличии] " : "[Есть в наличии] ") << "Книга №" << invNumber
- << " Название: " << title << "; Автор: " << author << "; Издатель: " << publisher << "; Год издания: " << year;
- }
- };
- void Clear()
- {
- system("cls");
- cin.clear();
- cin.sync();
- }
- void OutputAllBooks(vector <Book> &Books)
- {
- Clear();
- for (int i = 0; i < (int)Books.size(); i++)
- {
- Books[i].Show();
- }
- cout << endl;
- system("pause");
- }
- void OutputAvailableBooks(vector <Book> &Books, bool isAvaible)
- {
- for (int i = 0; i < (int)Books.size(); i++)
- {
- if (isAvaible == (bool)Books[i].isAvailable())
- {
- Books[i].Show();
- }
- }
- }
- void AddBook(vector <Book> &Books)
- {
- Clear();
- int number;
- bool error;
- do
- {
- cout << "Введите номер книги: ";
- number = MagicInput((int)0);
- error = false;
- for (int i = 0; i < (int)Books.size(); i++)
- {
- if (number == Books[i].GetInvNumber())
- {
- cout << "Этот индект уже занят! Введите другой." << endl;
- error = true;
- break;
- }
- }
- } while (error);
- cin.get();
- cout << "Введите название книги: ";
- string title; getline(cin, title);
- cout << "Введите автора книги: ";
- string author; getline(cin, author);
- cout << "Введите издателя книги: ";
- string publisher; getline(cin, publisher);
- cout << "Введите год издания: ";
- int year = MagicInput((int)0);
- Books.push_back(Book(number, false, author, title, publisher, year));
- system("pause");
- }
- void TakeBook(vector <Book> &Books)
- {
- Clear();
- cout << endl << "Книги, которые есть в библиотеке: ";
- OutputAvailableBooks(Books, true);
- cout << endl << "Введите номер книги, которую желаете взять: ";
- int number = MagicInput((int)0);
- for (int i = 0; i < (int)Books.size(); i++)
- {
- if (Books[i].isAvailable() && Books[i].GetInvNumber() == number)
- {
- Books[i].Take();
- return;
- }
- }
- cout << "Книги под номером " << number << " нет в списке." << endl;
- system("pause");
- }
- void ReturnBook(vector <Book> &Books)
- {
- Clear();
- cout << endl << "Книги, которые можно вернуть: ";
- OutputAvailableBooks(Books, false);
- cout << endl << "Введите номер книги, которую желаете вернуть: ";
- int number = MagicInput((int)0);
- for (int i = 0; i < (int)Books.size(); i++)
- {
- if (!Books[i].isAvailable() && Books[i].GetInvNumber() == number)
- {
- Books[i].Return();
- return;
- }
- }
- cout << "Книги под номером " << number << " нет в списке." << endl;
- system("pause");
- }
- void Menu()
- {
- system("cls");
- cout << "---Выберите опцию: ";
- cout << endl << "1. Добавить книу ";
- cout << endl << "2. Взять книгу";
- cout << endl << "3. Вернуть книгу";
- cout << endl << "4. Вывод всех книг";
- cout << endl << "5. Вывод книг в библиотеке";
- cout << endl << "6. Вывод книг у читаталей";
- cout << endl << "ESC. Выход";
- }
- int main()
- {
- system("mode con cols=120 lines=40");
- SetLucidaFont();
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- vector <Book> Books;
- // Starter pack
- Books.push_back(Book(1, false, "Бьерн Страуструп", "Язык программирования C++", "-", 2013));
- Books.push_back(Book(2, false, "Герберт Шилдт", "C# 4.0. Полное руководство", "-", 2011));
- Books.push_back(Book(3, true, "номер 3", "Книга #3", "Третьяков и Ко.", 2013));
- Books.push_back(Book(4, true, "Джордж Оруэлл", "1984", "-", 1948));
- while (true)
- {
- Menu();
- switch (_getch())
- {
- case 49: AddBook(Books); // 1
- break;
- case 50: TakeBook(Books); // 2
- break;
- case 51: ReturnBook(Books); // 3
- break;
- case 52: OutputAllBooks(Books); // 4
- break;
- case 53: OutputAvailableBooks(Books, true);
- cout << endl; system("pause"); // 5
- break;
- case 54: OutputAvailableBooks(Books, false);
- cout << endl; system("pause"); // 6
- break;
- case 27:
- return 0; //ESC
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment