Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45

Удалить структурную запись

02.03.2021, 01:24. Показов 855. Ответов 13
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include <iostream>
#include <math.h>
#include <iomanip>
#include <windows.h>
#include <string>
#include <conio.h>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
//Добавление книги
struct LIBRARY
{
    char number[20];
    char FIO[30];
    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 del_book()
{
    ITEM* head = NULL;
    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:
        {
 
 
 
            break;
        }
        }
        _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 (head)
                {
                    N++;
                    head = head->next;
                }
 
                LIBRARY* buf;
                LIBRARY** pLibrary = new LIBRARY * [N];
                head = phead;
 
                while (head)
                {
                    pLibrary[i] = head->Library;
                    head = head->next;
                    i++;
                }
 
                head = phead;
                for (i = 0; i < N; i++)
                {
                    int i1;
                    i1 = i + 1;
                    cout << "________________________\n";
                    cout << i1 << " -Number of Book\n";
                    printLIBRARY(pLibrary[i]);
                }
            }
            break;
        case 3:
            system("cls");  // очищаем экран
            cout << "Delete the book from the list..." << endl;
 
            del_book();
 
            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;
}
Не могу сделать удаление книги, нужно вводить название с клавиатуры, и еще прошу помочь с заданием: по запросу выводится информация о книгах, изданных после года, введенного с клавиатуры. Буду благодарен помощи, никак не могу решить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2021, 01:24
Ответы с готовыми решениями:

Четыре кнопки на форме: добавить запись, удалить запись, закрыть, найти запись
Private Sub КнопкаДобавитьЗапись_Click() On Error GoTo Err_КнопкаДобавитьЗапись_Click DoCmd.GoToRecord , , acNewRec ...

Поменять любую запись местами с последней и удалить последнюю запись.
Помогите пожалуйста! Мне для программы, которая использует records (записи), нужно написать процедуру, которая меняет любую запись...

Составить программу с помощью которой можно добавить запись, удалить запись и распечатать дешевое издание.
program _file_LB7_Zeleniuk; type zurnal=record name:string; tiraz:integer; vartist:integer; end; var f:file of zurnal; ...

13
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
02.03.2021, 12:46
Цитата Сообщение от ovsy1 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <math.h>
#include <iomanip>
#include <windows.h>
#include <string>
#include <conio.h>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
Зачем вам столько заголовочных файлов? Причем некоторые из них сишные и дублируют заголовочники C++.

Цитата Сообщение от ovsy1 Посмотреть сообщение
C++
16
17
18
char number[20];
    char FIO[30];
    char name[30];
Непонятно почему вы используете символьные массива, когда можно использовать строки.

Цитата Сообщение от ovsy1 Посмотреть сообщение
и еще прошу помочь с заданием: по запросу выводится информация о книгах, изданных после года, введенного с клавиатуры.
у вас есть вывод всех книг, что мешает скопировать полностью этот вывод и добавить туда еще проверку года? В случае срабатывания проверки выводите книгу, в противном случае - нет. Попробуйте сами это сделать, желательно оформить это в виде функции.

И еще, непонятно зачем вы не выводите данные непосредственно из списка (пункт меню 2), а сначала пробегаете список считая, в нем количество элементов, затем пробегаете список снова и переносите данные в массив какой-то. Не нужно никаких дополнительных телодвижений там.

Цитата Сообщение от ovsy1 Посмотреть сообщение
Не могу сделать удаление книги, нужно вводить название с клавиатуры
Скину код, внес в него кое-какие правки, кое-что закомментировал (то, что не компилировалось в онлайн-компиляторе), если что раскомментируете.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#include <iostream>
#include <cmath>
#include <iomanip>
//#include <windows.h>
#include <conio.h>
#include <cstdlib>
#include <cstring>
 
using namespace std;
 
//Добавление книги
struct LIBRARY
{
    char number[20];
    char FIO[30];
    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;
                }
 
                // ненужные действия
                /*LIBRARY* buf;
                LIBRARY** pLibrary = new LIBRARY * [N];
                head = phead;
 
                while (head)
                {
                    pLibrary[i] = head->Library;
                    head = head->next;
                    i++;
                }
 
                head = phead;
                for (i = 0; i < N; i++)
                {
                    int i1;
                    i1 = i + 1;
                    cout << "________________________\n";
                    cout << i1 << " -Number of Book\n";
                    printLIBRARY(pLibrary[i]);
                }*/
            }
            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;
}
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
02.03.2021, 14:57  [ТС]
Цитата Сообщение от long399 Посмотреть сообщение
Скину код, внес в него кое-какие правки
можете исправить код чтобы работал?
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
03.03.2021, 13:31
Цитата Сообщение от ovsy1 Посмотреть сообщение
можете исправить код чтобы работал?
а что в нем сейчас не работает? Удаление элемента я добавил, как сделать вывод книг изданных после года я написал. Если что-то не работает, приведите ошибки, которые компилятор выдает
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
03.03.2021, 13:34  [ТС]
У меня вообще не получается сделать, я не знаю как, помогите, пожалуйста
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
03.03.2021, 13:46
Цитата Сообщение от ovsy1 Посмотреть сообщение
У меня вообще не получается сделать, я не знаю как, помогите, пожалуйста
Так мы далеко не уедем. Давайте конкретику. У вас был код, в котором не было реализовано удаление элемента (книги) из односвязного списка а в остальном все работало. Я добавил удаление элемента из списка. Код перестал работать ?
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
03.03.2021, 14:00  [ТС]
Не удаляет, сначала нужно добавить книгу, потом выбрать пункт удаление, вписать название книги. Я делал всё так и программа не работает
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
03.03.2021, 15:24
Цитата Сообщение от ovsy1 Посмотреть сообщение
Не удаляет, сначала нужно добавить книгу, потом выбрать пункт удаление, вписать название книги. Я делал всё так и программа не работает
Я там не делал ввод названия книги, я же комментарий в коде оставил.
Цитата Сообщение от long399 Посмотреть сообщение
C++
130
131
// добавьте сюда ввод названия удаляемой книги
removeElement(head, "Book Name"); // сейчас будет удаляться книга с названием Book Name
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
03.03.2021, 15:26  [ТС]
Цитата Сообщение от long399 Посмотреть сообщение
Я там не делал ввод названия книги, я же комментарий в коде оставил
А как сделать ввод книги и ее проверку
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
03.03.2021, 15:35
Цитата Сообщение от ovsy1 Посмотреть сообщение
А как сделать ввод книги и ее проверку
Так же как это у вас сделано при добавлении книги (пункт меню 1)
C++
128
129
130
131
132
133
134
135
136
case 2:
{
    char bookname[30];
    cout << "Name of the Book: ";
    cin.ignore();
    cin.getline(bookname, 30);
    removeElement(head, bookname);
    break;
}
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
03.03.2021, 15:59  [ТС]
Цитата Сообщение от long399 Посмотреть сообщение
case 2:
{
    char bookname[3];
    cout << "Name of the Book: ";
    cin.ignore();
    cin.getline(bookname, 30);
    removeElement(head, bookname);
    break;
}
Выходят ошибки:
in function 'void del_book()'::
'removeElement' was not declared in this scope
[Build Error] [Objects/MingW/main.o] Error 1
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
04.03.2021, 04:49
Цитата Сообщение от ovsy1 Посмотреть сообщение
Выходят ошибки:
in function 'void del_book()'::
'removeElement' was not declared in this scope
[Build Error] [Objects/MingW/main.o] Error 1
Вы вообще код смотрели, который я скинул в посте №2?
0
0 / 0 / 0
Регистрация: 28.02.2019
Сообщений: 45
04.03.2021, 14:01  [ТС]
Цитата Сообщение от long399 Посмотреть сообщение
Вы вообще код смотрели, который я скинул в посте №2?
Да, но он не удаляет, пишет что значение книги не найдено
0
Модератор
 Аватар для long399
2882 / 1837 / 933
Регистрация: 16.10.2013
Сообщений: 5,242
Записей в блоге: 15
05.03.2021, 04:56
Цитата Сообщение от ovsy1 Посмотреть сообщение
пишет что значение книги не найдено
И какой из этого вывод делаем? Книги с введенным названием нет в списке. Я проверял код, у меня все нормально удаляется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.03.2021, 04:56
Помогаю со студенческими работами здесь

Не могу удалить свою учетную запись. Пункта "переключиться на локальную учетную запись" нет
Добрый день! На свое рабочем компьютере мне нужно было загрузить приложение из маркета, и для этого я зашел в свою учетную запись. После...

Удалить запись из БД
Удалить запись из БД, если дата в поле Da_te, меньше, чем текущая. Вот код для добавления записейPrivate Sub Command1_Click(ByVal...

Удалить запись из БД
Добрый день! Подскажите как мне сделать так что бы после занесении данных в БД они удалялись через 2 часа. Я слышал что cron это может...

Удалить запись
Доброго времени суток. Пишу блог (уже не раз писал об этом) и наткнулся на проблему. Вообщем, у меня в блоге, если у тебя стоит сессия root...

Удалить запись
Здравствуйте. Реализую удаление записей из таблицы.У меня есть две таблицы client и product. Сначала помечал на удаление и удалял по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru