Лабораторная работа №9. Динамические структуры данных. Лабораторная работа 9. Динамические структуры данных
Скачать 21.59 Kb.
|
Лабораторная работа №9. Динамические структуры данных. Вариант 16. Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат: - номер УДК; - фамилию и инициалы автора; - название; - год издания; - количество экземпляров данной книги в библиотеке. Программа должна обеспечивать: - начальное формирование данных о всех книгах в библиотеке в виде списка; - добавление данных о книгах, вновь поступающих в библиотеку; - удаление данных о списываемых книгах; - по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания. Код программы #include #include #include #include using namespace std; typedef struct { // Структура, содержащая в себе сведения о книге char UDK[10]; char name[50]; char title[70]; int year; int quantity; } BOOK; list list void Create_List (){ // Создание первоначальной базы данных myList.push_front({"82-311.6", "А.С.Пушкин", "Капитанская дочка", 2005, 20}); myList.push_back({"82-311.1", "М.Ю.Лермонтов", "Герой нашего времени", 2005, 38}); it = myList.begin(); myList.insert(++it, {"681.3.07", "Джон Пол Мюллер", "С# для чайников", 2019, 10}); myList.insert(++it, { "510", "Б.П.Демидович", "Задачи у упражнения по математическому анализу для втузов", 1978, 31 }); } void List_Display() { // Отображение базы данных cout << setw(20) << "Номер УДК" << setw(60) << "Автор" << setw(70) << "Название книги" << setw(15) << "Год издания" << setw(13) << "В наличии" << endl; it = myList.begin(); for (it = myList.begin(); it != myList.end(); ++it) { BOOK book = *it; cout << setw(20) << book.UDK << setw(60) << book.name << setw(70) << book.title << setw(15) << book.year << setw(13) << book.quantity << endl; }; } int Action() { // Панель выбора дествий cout << "Доступные действия" << endl; cout << "1) Добавить запись о книге." << endl; cout << "2) Удалить запись о книге." << endl; cout << "3) Найти книгу" << endl; cout << "0) Выход" << endl; cout << "Выберите действие (введите число от 1 до 3) или введите 0 для выхода: "; int choice; cin >> choice; return choice; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); setlocale(LC_ALL, "rus"); Create_List(); // Создаём базу данных List_Display(); // Выводим начальное состояние базы на экран int choice; do { // Выполняем действие до тех пор, пока не будет выбран пункт выхода (не введён 0) choice = Action(); if (choice == 1) { // Если выбран пункт 1 - добовляем запись BOOK book; cout << "ПОСЛЕДОВАТЕЛЬНО введите следующие данные:" << endl; cout << "Номер УДК: "; cin >> book.UDK; cout << "Автор: "; cin.getline(book.name, 100); cin.getline(book.name, 100); cout << "Название книги: "; cin.getline(book.title, 100); cout << "Год издания (без буквы 'г'): "; cin >> book.year; cout << "Сколько в наличии (есть нету, ввести значение 0): "; cin >> book.quantity; it = myList.end(); myList.insert(it, book); cout << "База данных после добавления записи" << endl; List_Display(); }; if (choice == 2) { // Удаляю все книги с данным названием BOOK book; cout << "Введите название книги, запись о которой вы хотите удалить: "; char search[70]; cin.getline(search, 70); cin.getline(search, 70); int equil; it = myList.begin(); for (it = myList.begin(); it != myList.end(); ++it) { book = *it; equil = strcmp(search, book.title); if (equil == 0) { it = myList.erase(it); } }; cout << "База данных после удаления записи" << endl; List_Display(); } if (choice == 3) { // По названию книги ищу все возможные записи и вывожу на экран, сколько есть в наличии BOOK book; cout << "Введите название книги, которую хотите найти: "; char search[70]; cin.getline(search, 70); cin.getline(search, 70); it = myList.begin(); int i = 1; cout << "Были найдены следующие книги:" << endl; for (it = myList.begin(); it != myList.end(); ++it) { book = *it; if ((string)book.title == (string)search) { if (book.quantity != 0) { cout << i++ << ") " << "Год издания: " << book.year << endl << "В наличии: " << book.quantity << endl; } } }; List_Display(); } } while (choice != 0); return 0; } |