Как удалить запись из структуры?

Есть код:

#include <iostream>
#include <cmath>
#include <iomanip>
#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <cstring>
#include <string>

using namespace std;

//Добавление книги
struct LIBRARY
{
    char number[20];
    char FIO[50];
    char name[30];
    int year1;
    int year2;
    int year3;
    int kolvo;
};

struct ITEM
{
    LIBRARY* Library;
    ITEM* next;
};

ITEM* create(LIBRARY* Library)
{
    ITEM* head = new ITEM;
    head->Library = Library;
    head->next = NULL;
    return head;
}

void add(LIBRARY* Library, ITEM* head)
{
    while (head->next)
        head = head->next;
    head->next = new ITEM;
    head->next->Library = Library;
    head->next->next = NULL;
    cout << endl;
}

LIBRARY* make()
{
    LIBRARY* Library = new LIBRARY;

    cout << "Enter book data:------------------------------------------:\n";
    cin.ignore();

    cout << "Enter book number: ";
    cin.getline(Library->number, 30);

    cout << "F.I.O.: ";
    cin.getline(Library->FIO, 30);

    cout << "Name of the Book: ";
    cin.getline(Library->name, 40);

    cout << "Enter made year\n";
    cout << "  Day: "; cin >> Library->year1;
    cout << "Mouth: "; cin >> Library->year2;
    cout << " Year: "; cin >> Library->year3;

    cout << "Enter count of books: ";
    cin >> Library->kolvo;
    cout << "\n";
    return Library;
}

//Вывод на экран список книг
void printLIBRARY(LIBRARY* Library)
{
    cout << "\nNumber     => " << Library->number;
    cout << "\nF.I.O.     => " << Library->FIO;
    cout << "\nNazvanie   => " << Library->name;
    cout << "\nYear (DAY) => " << Library->year1;
    cout << "\n   (MOUTH) => " << Library->year2;
    cout << "\n    (YEAR) => " << Library->year3;
    cout << "\nKolvo      => " << Library->kolvo;
    cout << "\n\n";
}

// удаление элемента из списка
void removeElement(ITEM* head, const char* bookname) {
    ITEM* prev = head;
    ITEM* current = head->next;
    while (current != NULL) {
        if (strcmp(current->Library->name, bookname) == 0) {
            break;
        }
        else {
            prev = current;
            current = current->next;
        }
    }
    if (current == NULL) {
        cout << "Can't remove value: no match found.\n";
    }
    else {
        prev->next = current->next;
        delete current;
        cout << "Book was deleted.\n";
    }
}

//Удаление книги
void del_book(ITEM* head)
{
    while (true)
    {
        system("cls");
        cout << "1. Back.\n";
        cout << "2. Drop name of the book.\n\n";

        int action;
        cin >> action;

        system("CLS");
        switch (action)
        {
        case 1:
        {
            return;
        }
        case 2:
        {
            // добавьте сюда ввод названия удаляемой книги
            removeElement(head, "Book Name"); // сейчас будет удаляться книга с названием Book Name
            break;
        }
        }
        _getch(); // в онлайн компиляторе у меня на такой гетч ругался компилятор, если что верните обратно
        //getch();
    }
}
//

//МЕНЮ

// Вывести меню пользователю и вернуть номер варианта
int prompt_menu_item()
{
    setlocale(LC_ALL, "Rus");
    // Выбранный вариант меню
    int variant;
    cout << "Choose an option\n" << endl;
    cout << "1. Add book\n"
        << "2. View the list of Book\n"
        << "3. Delete the book from the list\n"
        << "4. Search for book by year \n"
        << "5. Exit\n" << endl;
    cout << ">>> ";
    cin >> variant;
    if (variant >= 1 && variant <= 5)
        return variant;
    else
        return 0;
}

int main(int argc, char* argv[])
{
    ITEM* head = NULL;
    do
    {
        int variant = prompt_menu_item();

        switch (variant) {
        case 1:
            system("cls");  // очищаем экран
            cout << "Add book..." << endl;
            if (head == NULL)
                head = create(make());
            else
                add(make(), head);
            break;
        case 2:
            system("cls");  // очищаем экран
            cout << "View the list of Book..." << endl;
            {
                //int i = 0;
                int N = 0;

                ITEM* phead = head;
                while (phead)
                {
                    N++;

                    // выводим сразу при проходе по списку
                    cout << "________________________\n";
                    cout << N << " -Number of Book\n";
                    printLIBRARY(phead->Library);

                    phead = phead->next;
                }
            }
            break;
        case 3:
            system("cls");  // очищаем экран
            cout << "Delete the book from the list..." << endl;

            del_book(head);

            break;
        case 4:
            system("cls");  // очищаем экран
            cout << "Search for book by year..." << endl;
            break;
        case 5:
            system("cls");  // очищаем экран
            cout << "Exit..." << endl;
            exit(EXIT_SUCCESS);
            break;
        default:
            cerr << "EeRorrRRooOr...\n" << endl;
        }
    } while (true);
    return 0;
}

Помогите сделать удаление книги по названию введенному с клавиатуры и чтобы по запросу выводилась информация о книгах, изданных после года, который вводится с клавиатуры

UPD: Пришел к выводу что в функции main не нужен PLibrary убрал его, и немного поменял код


Ответы (1 шт):

Автор решения: Onix

Попробуй прочитать эту статью https://www.geeksforgeeks.org/linked-list-set-3-deleting-node/ . Может прояснишь что-нибудь для себя

→ Ссылка