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

Использование загруженной БД в разных пунктах меню - C++

Восстановить пароль Регистрация
 
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
16.01.2014, 19:00     Использование загруженной БД в разных пунктах меню #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
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
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
#include <conio.h>
#include <iomanip>
#include <string>   //для использования функций работы со строками
#include <iostream>
#include <Windows.h>
#include <locale.h>
#include <fstream>
using namespace std;
 
 
 
 
 
int main()
 
 
{ setlocale(LC_ALL, "Russian");
    int choice;
    do
    {
        cout << endl;
        cout << "1 - Данные по всем собакам" << endl;
        cout << "2 - Вывести родословную собаки" << endl;
        cout << "3 - Искать по хозяину" << endl;
        cout << "4 - Добавить животное" << endl;
        cout << "5 - Открыть БД" << endl;
        cout << "0 - Выйти" << endl;
        cout << endl;
                    
        cin>>choice;
        switch (choice) 
    {
 
            case 0:
                return (1);
                break;
            case 1:
        struct work5
{
    unsigned int idn;
    string kli4ka;
    string poroda;
    string hozeain;
    unsigned int idnotsa;
    string kli4kaotsa;
    unsigned int idnmamki;
    string kli4kamamki;
    unsigned int idndeda;
    string kli4kadeda;
    unsigned int idnbabki;
    string kli4kababki;
    
};
 
 
int main();
{   ifstream fin;
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
     
  ifstream fin("Bobiki.txt");
  if (!fin.is_open())
  {
      cerr << "Error!" << endl;
    system("pause");
     return 1;
  }
    
     
     work5 temp;
    string str;
    while (true)
     
    
     { 
         fin>> str;
         if (fin.eof() ) break;
        fin >> temp.kli4ka;
        fin >> str;
        fin >> temp.idn;
        fin >> str;
        fin >> temp.poroda;
        fin >> str;
        fin >> temp.hozeain;
        fin >> str;
        fin >> temp.idnotsa;
        fin >> str;
        fin >> temp.kli4kaotsa;
        fin >> str;
        fin >> temp.idnmamki;
        fin >> str;
        fin >> temp.kli4kamamki;
        fin >> str;
        fin >> temp.idndeda;
        fin >> str;
        fin >> temp.kli4kadeda;
        fin >> str;
        fin >> temp.idnbabki;
        fin >> str;
        fin >> temp.kli4kababki;
                        
      cout <<"Кличка:"<< temp.kli4ka << endl;
      cout <<"ИДН:"<< temp.idn << endl;
      cout <<"Порода:"<< temp.poroda << endl;
     // cout <<"Хозяин:"<< temp.hozeain << endl;
      cout <<"ИДН Отца:"<< temp.idnotsa << endl;
      cout <<"Кличка Отца:"<< temp.kli4kaotsa << endl;
      cout <<"ИДН Матери:"<< temp.idnmamki << endl;
      cout <<"Кличка Матери:"<< temp.kli4kamamki << endl;
      cout <<"ИДН Деда:"<< temp.idndeda << endl;
      cout <<"Кличка Деда:"<< temp.kli4kadeda << endl;
      cout <<"ИДН Бабушки:"<< temp.idnbabki<< endl;
      cout <<"Кличка Бабушки:"<< temp.kli4kababki << endl; 
            }
            }
        break;
                
            case 2:
                
                        struct work
{
    unsigned int idn;
    string kli4ka;
    string poroda;
    string hozeain;
    unsigned int idnotsa;
    string kli4kaotsa;
    unsigned int idnmamki;
    string kli4kamamki;
    unsigned int idndeda;
    string kli4kadeda;
    unsigned int idnbabki;
    string kli4kababki;
    
};
 
 
int main();
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    ifstream fin("Bobiki.txt");
    if (!fin.is_open())
    {
        cerr << "Error!" << endl;
        system("pause");
        return 1;
    }
    
    cout << "Введите кличку для поиска: ";
    string kli4ka;
    cin >> kli4ka;
 
     work temp;
    string str;
    while (true)
    // while (! fin.eof())
         //while (! myfile.eof() )
    {
        fin >> str;
        if (fin.eof()) break;
        fin >> temp.kli4ka;
        fin >> str;
        fin >> temp.idn;
        fin >> str;
        fin >> temp.poroda;
        fin >> str;
        fin >> temp.hozeain;
        fin >> str;
        fin >> temp.idnotsa;
        fin >> str;
        fin >> temp.kli4kaotsa;
        fin >> str;
        fin >> temp.idnmamki;
        fin >> str;
        fin >> temp.kli4kamamki;
        fin >> str;
        fin >> temp.idndeda;
        fin >> str;
        fin >> temp.kli4kadeda;
        fin >> str;
        fin >> temp.idnbabki;
        fin >> str;
        fin >> temp.kli4kababki;
        if (temp.kli4ka == kli4ka) break; }
        if (!fin.eof()) {
            
        
        cout <<"Кличка:"<< temp.kli4ka << endl;
      cout <<"ИДН:"<< temp.idn << endl;
      cout <<"Порода:"<< temp.poroda << endl;
     // cout <<"Хозяин:"<< temp.hozeain << endl;
      cout <<"ИДН Отца:"<< temp.idnotsa << endl;
      cout <<"Кличка Отца:"<< temp.kli4kaotsa << endl;
      cout <<"ИДН Матери:"<< temp.idnmamki << endl;
      cout <<"Кличка Матери:"<< temp.kli4kamamki << endl;
      cout <<"ИДН Деда:"<< temp.idndeda << endl;
      cout <<"Кличка Деда:"<< temp.kli4kadeda << endl;
      cout <<"ИДН Бабушки:"<< temp.idnbabki<< endl;
      cout <<"Кличка Бабушки:"<< temp.kli4kababki << endl;  }
       else cout << "Собака с таким погонялом не найдена!" << endl;  
       cout << endl; }
    break;
                  
                
            case 3:
    struct work2
{
    unsigned int idn;
    string kli4ka;
    string poroda;
    string hozeain;
    unsigned int idnotsa;
    string kli4kaotsa;
    unsigned int idnmamki;
    string kli4kamamki;
    unsigned int idndeda;
    string kli4kadeda;
    unsigned int idnbabki;
    string kli4kababki;
    
};
 
 
int main();
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    ifstream fin("Bobiki.txt");
    if (!fin.is_open())
    {
        cerr << "Error!" << endl;
        system("pause");
        return 1;
    }
    
    cout << "Введите имя псиновладельца для поиска: ";
    string kli4ka;
    cin >> kli4ka;
 
     work2 temp;
    string str;
    int k=0;
    while (true)
    // while (! fin.eof())
         //while (! myfile.eof() )
    {
        fin >> str;
        if (fin.eof()) break;
        fin >> temp.kli4ka;
        fin >> str;
        fin >> temp.idn;
        fin >> str;
        fin >> temp.poroda;
        fin >> str;
        fin >> temp.hozeain;
        fin >> str;
        fin >> temp.idnotsa;
        fin >> str;
        fin >> temp.kli4kaotsa;
        fin >> str;
        fin >> temp.idnmamki;
        fin >> str;
        fin >> temp.kli4kamamki;
        fin >> str;
        fin >> temp.idndeda;
        fin >> str;
        fin >> temp.kli4kadeda;
        fin >> str;
        fin >> temp.idnbabki;
        fin >> str;
        fin >> temp.kli4kababki;
        if (temp.hozeain == kli4ka) 
        {k=k+1;
      cout <<"Кличка:"<< temp.kli4ka << endl;
      cout <<"ИДН:"<< temp.idn << endl;
      cout <<"Порода:"<< temp.poroda << endl;
      cout <<"Хозяин:"<< temp.hozeain << endl;
      cout <<"ИДН Отца:"<< temp.idnotsa << endl;
      cout <<"Кличка Отца:"<< temp.kli4kaotsa << endl;
      cout <<"ИДН Матери:"<< temp.idnmamki << endl;
      cout <<"Кличка Матери:"<< temp.kli4kamamki << endl;
      cout <<"ИДН Деда:"<< temp.idndeda << endl;
      cout <<"Кличка Деда:"<< temp.kli4kadeda << endl;
      cout <<"ИДН Бабушки:"<< temp.idnbabki<< endl;
      cout <<"Кличка Бабушки:"<< temp.kli4kababki << endl; 
      cout << endl;}
 
    //else
        if (k=0) cout << "Псиновладелец и его псины не найдены!" << endl;  
       cout << endl;
    }
        
        
        
        
    break;}
                        case 4:
                            struct work3
{
    unsigned int idn;
    string kli4ka;
    string poroda;
    string hozeain;
    unsigned int idnotsa;
    string kli4kaotsa;
    unsigned int idnmamki;
    string kli4kamamki;
    unsigned int idndeda;
    string kli4kadeda;
    unsigned int idnbabki;
    string kli4kababki;
    
};
                            int main();
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
  ifstream fin("Bobiki.txt");
   if (!fin.is_open())
    {
        cerr << "Error!" << endl;
        system("pause");
        return 1;
    }
                work3 temp;
string a,c;
 
ofstream f;
f.open("Bobiki.txt", ios::app);
cout << "Введите кличку собаки: ";
cin >> temp.kli4ka;
cout << "Введите ИДН собаки :  ";
cin >> temp.idn;
cout << "Введите породу собаки: ";
cin >> temp.poroda;
cout << "Введите ФИО хозяина: ";
cin >> temp.hozeain;
cout << "Введите ИДН отца собаки: ";
cin >> temp.idnotsa;
cout << "Введите кличку отца собаки: ";
cin >> temp.kli4kaotsa;
cout << "Введите ИДН матери собаки: ";
cin >> temp.idnmamki;
cout << "Введите кличку матери собаки: ";
cin >> temp.kli4kamamki;
cout << "Введите ИДН деда собаки: ";
cin >> temp.idndeda;
cout << "Введите кличку деда собаки: ";
cin >> temp.kli4kadeda;
cout << "Введите ИДН бабки собаки: ";
cin >> temp.idnbabki;
 
cout << "Введите кличку бабки собаки: ";
cin >> temp.kli4kababki;
f <<"Кличка: "<< temp.kli4ka <<"\t" << "\n";
f <<"ИДН: "<< temp.idn <<"\t" << "\n";
f <<"Порода: "<< temp.poroda <<"\t" << "\n";
f <<"ФИОхозяина: "<< temp.hozeain <<"\t" << "\n";
f <<"ИДНОтца: "<< temp.idnotsa <<"\t" << "\n";
f <<"КличкаБати: "<< temp.kli4kaotsa <<"\t" << "\n";
f <<"ИДНМамки: "<< temp.idnmamki <<"\t" << "\n";
f <<"КличкаМаки: "<< temp.kli4kamamki <<"\t" << "\n";
f <<"ИДНДеда: "<< temp.idndeda<<"\t" << "\n";
f <<"КличкаДеда: "<< temp.kli4kadeda <<"\t" << "\n";
f <<"ИДНБабки: "<< temp.idnbabki<<"\t" << "\n";
f <<"КличкаБабки: "<< temp.kli4kababki <<"\t" << "\n";
f.close(); 
break;}
 
             case 5:
cout<<"Введите имя файла: ";
 
char dbname[100];
                cin.sync();
                cin>>dbname; 
                //если нет расширения, то добавляем ".txt"
                if(strchr(dbname,'.')==0)
                    strcat(dbname,".txt");
                //загружаем все данные
                //opened=journ.Load(dbname);
                //выводим результат
                fstream fin("dbname");
                if (!fin.is_open())
                    cout<<"База данных загружена."<<endl;
                else
                    cout<<"Ошибка при загрузке БД."<<endl;
                break;}
    
    }while(choice);
 
    _getch();
    return 0;
    }
Вложения
Тип файла: txt Bobiki.txt (955 байт, 8 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
skident
23 / 23 / 2
Регистрация: 11.12.2011
Сообщений: 300
16.01.2014, 22:19     Использование загруженной БД в разных пунктах меню #2
Это у вас просто куча кусков в одном месте ?!

Для начала я бы посоветовал использовать не трансит в именах переменных, а более-менее подходящие английские слова, например не kli4ka, а name.

Если я вас правильно понял, то сделал бы эту задачу как-то так:
1. Создал отдельную структуру данных DogInfo в которой бы хранил все данные о собаках.
2. Создал бы вектор таких структур (скорее всего статический, чтобы можно было к нему достучатся в любой функции)
C++
1
vector<DogInfo> DataBase;
3. Вынес бы загрузку из базы в вектор в отдельную функцию
4. во всех остальных функциях юзал бы этот статический вектор (то есть базу в которой уже лежат все данные).
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
17.01.2014, 11:35  [ТС]     Использование загруженной БД в разных пунктах меню #3
Цитата Сообщение от skident Посмотреть сообщение
Это у вас просто куча кусков в одном месте ?!

Для начала я бы посоветовал использовать не трансит в именах переменных, а более-менее подходящие английские слова, например не kli4ka, а name.

Если я вас правильно понял, то сделал бы эту задачу как-то так:
1. Создал отдельную структуру данных DogInfo в которой бы хранил все данные о собаках.
2. Создал бы вектор таких структур (скорее всего статический, чтобы можно было к нему достучатся в любой функции)
C++
1
vector<DogInfo> DataBase;
3. Вынес бы загрузку из базы в вектор в отдельную функцию
4. во всех остальных функциях юзал бы этот статический вектор (то есть базу в которой уже лежат все данные).

Спасибо за совет! Читаю про векторы, но пока не получается разобраться. Может совет попроще?)

Добавлено через 1 минуту
Так в принципе это куча адаптированных кусков в одном месте. В целом всё работает.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.01.2014, 16:46     Использование загруженной БД в разных пунктах меню #4
Можно сразу загружать базу (ведь она во всех пунктах меню используется?). Можно убрать пункт загрузить базу, определить флаг, показывающий загружена база или нет, в каждом пункте меню проверять этот флаг, если база не загружена - загружать, если загружена - работать с ней.
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
17.01.2014, 20:31  [ТС]     Использование загруженной БД в разных пунктах меню #5
Ну я почти так пытался делать- загружал базу, убирал в пунктах отдельное открытие базы и..... и открытую базу не получается использовать), а пункт меню "Загрузить базу" является требованием препода. Подскажи пожалуйста, если знаешь, как реализовать использование пункта "Загрузить базу" хотя бы в одно пункте- для тебя это может быть очевидно, но для меня это очевидным не является.=(
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.01.2014, 20:54     Использование загруженной БД в разных пунктах меню #6
Цитата Сообщение от qwerty11 Посмотреть сообщение
загружал базу
Куда?

Добавлено через 11 минут
Цитата Сообщение от qwerty11 Посмотреть сообщение
Вопрос: как связать реализовать использование пункта "Открытие БД" в других пунктах меню ( т. е. избавиться от необходимости в каждом из них отдельно открывать БД).
Сделать флаг загрузки базы. В пунктах меню проверять флаг, если база не загружена, то выводить сообщение и делать возврат к меню (break из case), и так до тех пор, пока не будет выбран пункт загрузки базы.
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
18.01.2014, 19:31  [ТС]     Использование загруженной БД в разных пунктах меню #7
При выполнении пункта 5 ""Загрузить БД" она же я так понимаю открывается и опять же по моему разумению должна быть доступна при выполнении других пунктов меню, но на практике она-таки недоступна для других пунктов меню. Т. е. я запустил прогу, загрузил БД, мне вышло сообщение БД загружена. Далее я выбираю допустим пункт вывести все данные (пункт меню №1) и нифига не работает ( при этом в тексте пункта 1 я убирал отдельное открытие БД).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 20:00     Использование загруженной БД в разных пунктах меню #8
На вопрос ответьте:
Цитата Сообщение от alsav22 Посмотреть сообщение
Куда?
Добавлено через 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
 
             case 5:
cout<<"Введите имя файла: ";
 
char dbname[100];
                cin.sync();
                cin>>dbname; 
                //если нет расширения, то добавляем ".txt"
                if(strchr(dbname,'.')==0)
                    strcat(dbname,".txt");
                //загружаем все данные
                //opened=journ.Load(dbname);
                //выводим результат
                fstream fin("dbname");
                if (!fin.is_open())
                    cout<<"База данных загружена."<<endl;
                else
                    cout<<"Ошибка при загрузке БД."<<endl;
                break;}
    
    }while(choice);
 
    _getch()
Добавлено через 1 минуту
Или что: файл отрыли и база загружена?
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
18.01.2014, 20:44  [ТС]     Использование загруженной БД в разных пунктах меню #9
Вообще и правда думал что раз открыт файл, то всё), на этом можно остановиться. Но по твоим правильным вопросам начинаю осознавать что всё не так просто. Раз настойчиво спрашиваешь куда я загружал БД, знач надо считать данные и присвоить их каким-то переменным или другой структуре, так?
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
18.01.2014, 20:54     Использование загруженной БД в разных пунктах меню #10
ага, именно так.
Кликните здесь для просмотра всего текста
И если у тебя программа действительно такая, как ты в первом после показал (в одном файле), то я вообще не понимаю, как она работает, и сочувствую твоему 'преподу') Это ж надо - куча main'ов с разным кодом... Первый раз такое вижу.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 21:07     Использование загруженной БД в разных пунктах меню #11
Цитата Сообщение от qwerty11 Посмотреть сообщение
знач надо считать данные и присвоить их каким-то переменным или другой структуре, так?
...
Цитата Сообщение от skident Посмотреть сообщение
1. Создал отдельную структуру данных DogInfo в которой бы хранил все данные о собаках.
2. Создал бы вектор таких структур (скорее всего статический, чтобы можно было к нему достучатся в любой функции) Код C++1
vector<DogInfo> DataBase;3. Вынес бы загрузку из базы в вектор в отдельную функцию
4. во всех остальных функциях юзал бы этот статический вектор (то есть базу в которой уже лежат все данные).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 21:20     Использование загруженной БД в разных пунктах меню
Еще ссылки по теме:

Разработать программу, в которой будет организовано меню, выбор функций меню C++
C++ В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной
Как узнать путь к загруженной DLL из самой DLL? C++

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

Или воспользуйтесь поиском по форуму:
qwerty11
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 13
18.01.2014, 21:20  [ТС]     Использование загруженной БД в разных пунктах меню #12
Ну что же, полегче не получилось, значит буду пытаться реализовать ваши советы. Спасибо)
Yandex
Объявления
18.01.2014, 21:20     Использование загруженной БД в разных пунктах меню
Ответ Создать тему
Опции темы

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