Главная страница

Лабораторная работа №9. Динамические структуры данных. Лабораторная работа 9. Динамические структуры данных


Скачать 21.59 Kb.
НазваниеЛабораторная работа 9. Динамические структуры данных
Дата13.09.2021
Размер21.59 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа №9. Динамические структуры данных.docx
ТипЛабораторная работа
#231778

Лабораторная работа №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 myList; // Создаём двусвязный список

list::iterator it;
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;

}


написать администратору сайта