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

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

Восстановить пароль Регистрация
 
letoleto
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 7
16.01.2014, 17:44     книги в библиотеке #1
Задание:
Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах содержат:
-номер УДК;
-фамилию и инициалы автора;
-название;
-год издания;
-количество экземпляров данной книги в библиотеке.
Программа должна обеспечивать:
-начальное формирование данных о всех книгах в библиотеке в виде списка;
-при взятии каждой книги вводится номер УДК, и программа уменьшает значение количества книг на единицу или выдает сообщение о том, что требуемой книги в библиотеке нет, или требуемая книга находится на руках;
-добавление данных о книгах, вновь поступающих в библиотеку;
-при возвращении каждой книги вводится номер УДК, и программа увеличивает значение количества книг на единицу;
-по запросу выдаются сведения о наличии книг в библиотеке.

Проблема в цикле, т.к. не совсем понимаю, как нужно прописывать. Например, здесь
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
 Аватар для Ev_Hyper
1807 / 1628 / 435
Регистрация: 15.12.2013
Сообщений: 5,790
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
5282 / 4801 / 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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.01.2014, 19:34     книги в библиотеке #5
Цитата Сообщение от letoleto Посмотреть сообщение
Как быть?
Посмотрите, как сделан просмотр списка при выводе (spisok()).
Yandex
Объявления
16.01.2014, 19:34     книги в библиотеке
Ответ Создать тему
Опции темы

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