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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dnstarkov
3 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 7
#1

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

10.12.2012, 15:27. Просмотров 300. Ответов 0
Метки нет (Все метки)

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

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

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

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


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

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++
Доброго времени суток, столкнулся с данной проблемой в CLI, попробовал реализовать аналог для консольного приложения всё работает, почему...

Определить общее количество цифр в положительных элементах массива - C++
дан целочисленный массив А. определить общее количество цифр в числовых значениях всех положительных элементов массива. самый...

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

Помогите чайнику с инкрементом... - C++
Здравствуйте! Понимаю, конечно, что вопрос наверное дурацкий... но я только начал знакомство с С++, а этот вопрос не дает покоя... int...

функция с инкрементом объекта. ++ - C++
Доброго времени суток. Прошу помочь в реализации функций. static HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); static...

Скобки не работают с постфиксным инкрементом - C++
Почему скобки не работают с постфиксным инкрементом ? Программа должна вывести 1, а выводит 0. Без скобок приоритет постфиксного инкремента...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 15:27
Привет! Вот еще темы с ответами:

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

Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах - C++
Можете объяснить разницу между i++ и ++i на просто примере с цифрами?

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа - C++
При решении использовать масив в файле)

Подскажите простую реализацию динамического массива и его использование с возможностью изменения его размера - C++
Подскажите простую реализацию динамического масива и его использование с возможностью изменения его размера........спасибо))) ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru