Форум программистов, компьютерный форум CyberForum.ru

Поиск в элементах массива с его последующим инкрементом - C++

Восстановить пароль Регистрация
 
dnstarkov
3 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 7
10.12.2012, 15:27     Поиск в элементах массива с его последующим инкрементом #1
Всем привет. Возможно я не правильно назвал тему, но надеюсь кто нибудь мне поможет. Код программы ниже, и условия. Я уже набросал часть(нашел подобную). Но в ней не выполняется вот это условие:
• вводится номер УДК, и программа уменьшает значение количества книг на единицу или выдает сообщение о том, что требуемой книги в библиотеке нет или требуемая книга находится на руках;
• при возвращении каждой книги вводится номер УДК, и программа увеличивает значение количества книг на единицу;

Я предполагаю что реализовывать это можно по поиску в элементах массива и последующим инкрементом и декрементом, но как это сделать не понимаю.

Извините если некорректный вопрос, только начинаю программировать, на первом курсе заочки, нам сразу такое задание выдали.

первоначальные условия задачи:
Кликните здесь для просмотра всего текста
• начальное формирование данных обо всех книгах в библиотеке в виде списка;
• при выдаче каждой книги на руки вводится номер УДК, и программа уменьшает значение количества книг на единицу или выдает сообщение о том, что требуемой книги в библиотеке нет или требуемая книга находится на руках;
• при возвращении каждой книги вводится номер УДК, и программа увеличивает значение количества книг на единицу;
• по запросу выдаются сведения о наличии книг в библиотеке.


код программы:

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
#include "stdafx.h" //включаемый файл для стандартных системных включаемых файлов.
#include <iostream> //заголовочный файл с классами, функциями и переменными для организации ввода-вывода.
#include <stdlib.h> //заголовочный файл, содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы.
#include <string.h> //работы с памятью.
 
using namespace std; //пространство имен
 
 
 
struct LIBRARY //структура: библиотека
{
    char nomer[30];
    char FIO[30];
    char nazvanie[40];
    int Year;
    int kolvo;
};
 
struct STR //структуру: список
{
    LIBRARY *Library;
    STR *next;
};
 
STR * create(LIBRARY * Library) //начальное формирование списка
{
   STR *root=new STR;
   root->Library=Library;
   root->next=NULL;
   return root;
}
 
 
 
void add(LIBRARY *Library, STR* root) //добавление нового элемента списка
{
    while(root->next)
      root=root->next;
    root->next=new STR;
    root->next->Library=Library;
    root->next->next=NULL;
}
 
void printLIBRARY(LIBRARY *Library) //вывод на экран книг в библиотеке  
{
     
    cout<<"Номер УДК => "<<Library->nomer<<endl;
    cout<<"ФИО => "<<Library->FIO<<endl;
    cout<<"Название => "<<Library->nazvanie<<endl;
    cout<<"Год => "<<Library->Year<<endl;
    cout<<"Количество => "<<Library->kolvo<<endl;    
    cout<<endl;
     
}
LIBRARY * makeLIBRARY() //добавление книги
{
   cout<<"Введите информацию о книги:"<<endl;
    LIBRARY *Library=new LIBRARY;
    fflush(stdin);
    cout<<"Введите номер УДК книги: => ";
    if(cin.getline(Library->nomer,30)==1)
       {
           cout<<endl;
           if(root==NULL)
             root=create(makeLIBRARY());
           else
             add(makeLIBRARY(),root);
       }
    cin.getline(Library->nomer,30);
 
    cout<<"Введите ФИО автора:  => ";
    cin.getline(Library->FIO,30);
 
    cout<<"Введите название книги: => ";
    cin.getline(Library->nazvanie,40);
 
    cout<<"Введите год книги:  => ";
    cin>>Library->Year;
 
    cout<<"Введите количество книг:  => ";
    cin>>Library->kolvo;
 
    return Library;
}
int choice()
{
    int answer;
    cout<<"Главное меню"<<endl;
    cout<<"1. Добавить новую книгу"<<endl;
    cout<<"2. Вывести на экран список книг"<<endl;
    cout<<"3. Найти книгу по номеру УДК и выдать"<<endl;
    cout<<"4. Выход"<<endl;
    cout<<"Введите число: ";
    cin>>answer;
    fflush(stdin);
    if(answer>=1 && answer<=4)
      return answer;
    else
      return 0;
}
 
STR* search_and_del(STR * str)
{
STR *last=str,*root = str;
char qwe[30];
           char qw[30], q[1];
           cout<<"Введите номер УДК книги => "<<endl;
           cin.getline(qwe,30);
           while (root)
           {
               if (!strcmp(qwe,root->Library->nomer))
               {  
                    {
                   printLIBRARY(root->Library);
 cout<<"Вы хотите выдать книгу? (y/n) "<<endl;// Удаление записи
                        char c;   
                        cin.get(c);
                        if (c=='y')
                                    {
                                root->Library=NULL;
                                if(last==root) str=root->next;
                                else last->next=root->next;
                                
                         }
                        if(cin.get(c) && c=='n');
                   last = root;
                   root=root->next;
                    }
                     }
               else if (strcmp(qwe,root->Library->nomer))
                   root=root->next;
           }   
return str;
}  
 
int main()
{
    setlocale( LC_ALL,"Russian" ); // поддержка русского шрифта
    STR *root=NULL;
    int ch;
    while(1)
    {
       ch=choice();
if(ch==1)
       {
           cout<<endl;
           if(root==NULL)
             root=create(makeLIBRARY());
           else
             add(makeLIBRARY(),root);
       }
 
else if(ch==2)
       {
           cout<<endl;
           int i=0;
           int N=0;
           
           STR *proot=root;
           while (root)
           {
               N++;
               root=root->next;
           }
 
           LIBRARY *buf;
           LIBRARY **pLibrary=new LIBRARY*[N];
           root=proot;
           
           while (root)
           {
                   pLibrary[i]=root->Library;
                   root=root->next;
                   i++;
               }
 
           root=proot;
 
         
               for (i=0;i<N;i++)
                   printLIBRARY(pLibrary[i]);
               
       }
 
else if(ch==3)
       {
           root=search_and_del(root);
       }
       
else if(ch==4)
       {
           break;
           cout<<endl;
       }
       
    }
    return 0;
}
Добавлено через 2 часа 3 минуты
Я думаю надо как то изменить функцию search_and_del, поиск там уже реализован, надо только добить чтобы +1 в количестве найденной книги стало:

STR* search_and_del(STR * str)
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
{
STR *last=str,*root = str;
char qwe[30];
           char qw[30], q[1];
           cout<<"Введите номер УДК книги => "<<endl;
           cin.getline(qwe,30);
           while (root)
           {
               if (!strcmp(qwe,root->Library->nomer))
               {  
                    {
                   printLIBRARY(root->Library);
 cout<<"Вы хотите выдать книгу? (y/n) "<<endl;// Удаление записи
                        char c;   
                        cin.get(c);
                        if (c=='y')
                                    {
                                root->Library=NULL;
                                if(last==root) str=root->next;
                                else last->next=root->next;
                                
                         }
                        if(cin.get(c) && c=='n');
                   last = root;
                   root=root->next;
                    }
                     }
               else if (strcmp(qwe,root->Library->nomer))
                   root=root->next;
           }   
return str;
}
Добавлено через 1 час 2 минуты
Нашел ответ сам.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 cout<<"Вы хотите добавить книгу в библиотеку? (y/n) "<<endl;// добовление книги по УДК к имеющейся
                        char c;   
                        cin.get(c);
                        if (c=='y')
                         {
                             root->Library->kolvo++; //инкремент в количстве найденной книги
                                
                                
                         }
                        if(cin.get(c) && c=='n');
                   last = root;
                   root=root->next;
                    }
                     }
               else if (strcmp(qwa,root->Library->nomer))
                   root=root->next;
           }  
return str;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 15:27     Поиск в элементах массива с его последующим инкрементом
Посмотрите здесь:

Помогите чайнику с инкрементом... C++
Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа C++
Скобки не работают с постфиксным инкрементом C++
функция с инкрементом объекта. ++ C++
C++ Подскажите простую реализацию динамического массива и его использование с возможностью изменения его размера
C++ подсчитайте, сколько раз встречается каждая цифра в элементах двумерного массива
C++ Мусор в элементах массива при передаче в функцию
Найти все цифры в элементах одномерного массива и подсчитать сколько раз встречается каждая C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru