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

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

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

книги в библиотеке - C++

16.01.2014, 17:44. Просмотров 489. Ответов 4
Метки нет (Все метки)

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

Проблема в цикле, т.к. не совсем понимаю, как нужно прописывать. Например, здесь
C++
1
2
3
4
5
6
7
8
9
10
11
case '3'://Взять книгу
                int num1;
                printf("Введите номер УДК: ");
                scanf("%d", &num1);
                while (ebeg) {
                    if(ebeg->num == num1){
                        ebeg->kol=kol--;
                        printf("Осталось %d книг\n", kol);}
                    else printf("Такой книги нет в библиотеке, либо она на руках\n");}
                _getch();
                break;
Получается бесконечный цикл.
Помогите пожалуйста.
Код всей программы
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
#include <cstdio>
#include <conio.h>
#include <clocale>
#include <windows.h>
#include <stdio.h>
 
struct book {
    int num;  // номер УДК
    char avtor[30];  // фамилия и инициалы
    char name[40];  //название книги
    int year;  //год издания
    int kol;  //количество книг
    book *next;
};
 
book* first(int, char*, char*, int, int);
void dobav(book**, int, char*, char*, int, int);
void spisok(book*);
void nachalo();
 
book* first(int num, char *avtor, char *name, int year, int kol){
    book *enew = new book;
    enew->num = num;
    strcpy(enew->avtor, avtor);
    strcpy(enew->name, name);
    enew->year = year;
    enew->kol = kol;
    enew->next = 0;
    return enew;
}
 
void dobav(book **eend, int num, char *avtor, char *name, int year, int kol) {
    book *enew = new book;
    enew->num = num;
    strcpy(enew->avtor, avtor);
    strcpy(enew->name, name);
    enew->year = year;
    enew->kol = kol;
    enew->next = 0;
    (*eend)->next = enew;
    *eend = enew;
    return;
}
 
void viewAvialableList(book *ebeg) {
  }
 
void spisok(book *ebeg) {
    book *enew = ebeg;
    while(enew) {
        printf(" Номер УДК: %d\n", enew->num);
        printf(" Фамилия и инициалы автора  %s\n", enew->avtor);
        printf(" Название книги: %s\n", enew->name);
        printf(" Год издания: %d\n",enew->year);
        printf(" Количество экземпляров: %d\n\n", enew->kol);
        if(enew->next) printf("\n");
        enew = enew->next;
    }
    return;
}
 
void nachalo() {
    system("cls");
    printf("1. Добавить книгу.\n");
    printf("2. Вывод всех книг.\n");
    printf("3. Взять книгу.\n");
    printf("4. Вернуть книгу.\n");
    printf("5. Проверить наличие книги.\n\n");
    
    printf("0. Выход.\n");
    return;
}
 
 
int main()  
{  
    setlocale(LC_ALL, "Russian");
 
   
    bool exit = false;
    char c=0;
    book *ebeg=0, *eend=0;
    int  year=0, num=0, kol=0;
    char avtor[30] = {0},
        name[40] = {0};
    while(!exit) {
        nachalo();
        c = _getch();
        system("cls");
        switch(c) {
            case '1': // Добавить заявку
                printf("Номер УДК: ");
                scanf("%d", &num);
                printf("Фамилия и инициалы автора: ");
                scanf("%s",avtor);
                printf("Название книги: ");
                scanf("%s", name);
                printf("Год издания: ");
                scanf("%d", &year);
                printf("Количество экземпляров: ");
                scanf("%d", &kol);
                if(!ebeg) {
                    ebeg = first(num, avtor, name, year, kol);
                    eend = ebeg;
                } else
                    dobav(&eend, num, avtor, name, year, kol);
                printf("Книга добавлена!");
                fflush(stdin);
                _getch();
                break;
 
            case '2': // Вывод всего списка заявок
                if(ebeg)
                    spisok(ebeg);
                else
                    printf("Заявок нет!.\n");
                _getch();
                break;
 
                case '3'://Взять книгу
                int num1;
                printf("Введите номер УДК: ");
                scanf("%d", &num1);
                while (ebeg) {
                    if(ebeg->num == num1){
                        ebeg->kol=kol--;
                        printf("Осталось %d книг\n", kol);}
                    else printf("Такой книги нет в библиотеке, либо она на руках\n");}
                _getch();
                break;
 
                case '4'://Вернуть книгу
                int num2;
                printf("Введите номер УДК: ");
                scanf("%d", &num2);
                while (ebeg) {                  
                    if(ebeg->num == num2){
                        ebeg->kol=kol++;
                        printf("Осталось %d книг\n", kol);}
                else printf("Такой книги нет в библиотеке, либо она на руках\n");
                }
                _getch();
                break;
 
                case '5'://Проверка
                int num3;
                printf("Введите номер УДК: ");
                scanf("%d", &num3);
                while (ebeg) {
                    if((ebeg->num == num3) && (ebeg->kol != 0)){
                        
                        printf("Книга в наличии\n");}
                    else{ printf("Книги нет в наличии\n");}
                    }
                _getch();
                break;
            
                case '0':
                exit = true;
                break;
            default:
                break;
        }
    }
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 17:44     книги в библиотеке
Посмотрите здесь:

C++ Массив структур: книги, хранящиеся в библиотеке
Описать информацию о книгах в библиотеке C++
C++ Бинарное дерево. книги в библиотеке
double функции в библиотеке math.h C++
C++ Ошибка в библиотеке std o_O
Ошибка в стандартной библиотеке шланга? C++
Какой аналог в С++ библиотеке dlfcn.h C++
C++ Осуществление поиска по библиотеке
C++ Изменение суперкласса в библиотеке
C++ Что не так в статической библиотеке
C++ шаблонный метод в статической библиотеке
Статический объект в статической библиотеке не создается C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
Заблокирован
16.01.2014, 17:59     книги в библиотеке #2
Цитата Сообщение от letoleto Посмотреть сообщение
Получается бесконечный цикл.
А вот так сделать нельзя?
C++
1
2
3
4
5
                while (ebeg) {
                    if(ebeg->num == num1){
                        ebeg->kol=kol--;
                        printf("Осталось %d книг\n", kol);}
                    else printf("Такой книги нет в библиотеке, либо она на руках\n");break;}
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 18:14     книги в библиотеке #3
Цитата Сообщение от letoleto Посмотреть сообщение
Получается бесконечный цикл.
Выход по ebeg, а он в цикле не меняется.
letoleto
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 7
16.01.2014, 18:52  [ТС]     книги в библиотеке #4
Пробовала с break, но тогда он сравнивает только номер первой книги и выходит из цикла.

Добавлено через 43 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
Выход по ebeg, а он в цикле не меняется.
Как быть?
alsav22
5411 / 4807 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 19:34     книги в библиотеке #5
Цитата Сообщение от letoleto Посмотреть сообщение
Как быть?
Посмотрите, как сделан просмотр списка при выводе (spisok()).
Yandex
Объявления
16.01.2014, 19:34     книги в библиотеке
Ответ Создать тему
Опции темы

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