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

Работа с БД. Файл с самой БД - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Cоздать программу, записывающую ошибку в stderr c помощью exit() http://www.cyberforum.ru/cpp-beginners/thread1076525.html
создать программу, записывающую ошибку в stderr c помощью exit(). Спасибо std::cerr << "траля ля"; //не подойдёт //причина: такой способ и в std::cout пишет сообщение
C++ Запись в динамически выделенную память Во общем, в dll выделяется память под char *, через new. Требуется в другой программе в которой я подключаю эту дллку переписать эти данные с помощью strcpy. Мне выдается ошибка: Нарушение прав доступа при записи... Можно ли записать данные в динамическую память, выделенную в длл? http://www.cyberforum.ru/cpp-beginners/thread1076513.html
C++ Потоки, сериализация
Подскажите хороший источник где можно найти нормальную информацию по данным темам. Гугл предлогать не стоит) 1) Приоритет потока. Изменение приоритета потока. 2) Методы сериализации
C++ В двухмерном целочисленном массиве найти указанное значение и вычислить результаты указанных действий
Народ помогите решить хоть какие нибудь задания а то у меня совсем не получается. В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи...
C++ Получить размер консольного окна http://www.cyberforum.ru/cpp-beginners/thread1076490.html
Есть код:#include "stdafx.h" #include <iostream> #include "Lib.h" #include <conio.h> #include <cstdlib> #include <Windows.h> using namespace std; int main() {
C++ Массивы. Поменять все элементы над главной диагональю на 1 поменять все элементы над главной диагональю на 1 подробнее

Показать сообщение отдельно
Student789
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 2

Работа с БД. Файл с самой БД - C++

20.01.2014, 16:45. Просмотров 230. Ответов 6
Метки (Все метки)

Всем здравствуйте!

Есть прога для работы с БД, делал не я, пытаюсь в ней разобраться. Встал вопрос- прога требует файл, в котором хранится сама БД. Что должно быть в файле ( по идее файл текстовый) ясно и понятно.

Вопрос: а где должен лежать сам файл и какого он должен быть формата? и вообще прога требует название файла или путь к нему? формат файла нужно указывать?

Сам пробовал создавать текстовый файл и пихал его во все папки проги. Безрезультатно- при введении имени/пути к файлу в окне консоли выдает Error. В части кода где я предполагаю открытие файла разобраться вообще не получается.

Заранее благодарю за помощь!

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
//БД - данные кинолога. Поля записей: идентификационный номер собаки, кличка, порода, ФИО хозяина, идентификационный номер отца, идентификационный номер матери.
//Пункты меню:
//- данные по всем собакам;
//- все собаки выбранного хозяина;
//- родословная выбранной собаки (2 поколения)
 
#include <fstream>
#include <string>
#include <iostream>
#include "class.h"
using namespace std;
 
int main()
{
    databaseDogs dog;
    int id;
    char name[100];
    char way[100];
    char flName[100];
    int selection;
    do
    {
// так полагаю тут идет кусок кода связанного с файлом с самой БД
        strcpy_s(way, ".txt");
        cout << "Name file: ";
        cin >> flName;
        strcat_s(way, flName);
        if(!dog.openDatabase(way))
        {
            cout << "Error" << endl;
            continue;
        }
        else
            break;
    }while(1);
    do
    {
        cout << "1 - to output all list\n" 
             << "2 - to bring dogs on cynologist \n" 
             << "3 - the family tree of chosen dog\n"
             << "4 - to remove record\n"
             << "5 - to add record\n"
             << "0 - Exit\n" << endl;
 
        cin >> selection;
        cin.clear();
        cin.sync();
        switch (selection)
        {
        case 1:
            dog.showAll();
            break;
        case 2:
             cout << "Enter a surname of the cynologist:";
            cin.ignore(cin.rdbuf()->in_avail(), '\n');
            cin.get(name, MAX_STRING_SIZE);
            dog.showOwner(name);; 
            break;
        case 3:
           cout << "Enter a nickname of a dog:";
            cin.ignore(cin.rdbuf()->in_avail(), '\n');
            cin.get(name, MAX_STRING_SIZE);
            dog.showfamilytree(name);
            break;
        case 4:
            cout << "Enter id of dog: ";
            cin >> id;
            dog.removeDog(id);
            break;
        case 5:
            dog.addDog();
            break;
        default:
            if(selection)
            cout << "is not right \n\n";
            break;
        }
    }while(selection);
    return 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
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
#include "class.h"
databaseDogs::~databaseDogs()
{
    if(openFile)
    {
        writeFile();
        database.close();
    }
    dogs *current;
    current = first;
    while(first)
    {
        first = first->next;
        delete current;
        current = first;
    }
}
databaseDogs::dogs* databaseDogs::findDog(int id)       
{
    dogs *current = first;
    while (current)
    {
        if(id == current->idDog)
            return current;
        current = current->next;
    }
}
 
// вот тут тоже вроде кусок кода с открытием файла с БД
bool databaseDogs::openDatabase(char* way)
{
    if(openFile)
    {
        return 0;
    }
 
    database.open(way, ios::in);
    if (!database)
        return false;
    openFile = true;
    strcpy_s(fileName, way);
 
    while(!database.eof())
    {
        
        dogs *newDog = new dogs;
        database >> newDog->idDog;
        database >> newDog->nicknameDog;
        database >> newDog->breedDog;
        database >> newDog->FamC;
        database >> newDog->NameC;
        database >> newDog->OtchC;
        database >> newDog->idFather;
        database >> newDog->idMother;
        if(!last)
        {
            first = newDog;
            last = newDog;
            newDog->next = 0;
        }
        else
        {
            last->next = newDog;
            last = newDog;
            last->next = 0;
        }
        dogCount ++;
    }
    return true;
}
void databaseDogs::showAll()
{
    dogs *current = first;
    while(current)
    {
        cout << "id" << current->idDog << ' ' 
        << "Breed: " << current->breedDog << ' '
        << "Nickname:" << current->nicknameDog << ' ' 
        << "Owner:" << current->FamC <<' '
        << "" << current->NameC <<' '
        << "" << current->OtchC << endl;
        current = current->next;
    }
    cout << endl;
}
void databaseDogs::showOwner (char* name)
{
    bool check = false;     //есть ли вообще хозяин
    dogs *current = first;
    while (current)
    {
        if(((string)(current->FamC)).find(name) != -1)
        {
            cout << current->FamC << " - " << current->nicknameDog << endl;
            check = true;
        }
        else
            if(((string)(current->NameC)).find(name) != -1)
        {
            cout << current->NameC << " - " << current->nicknameDog << endl;
            check = true;
        }
        else
            if(((string)(current->OtchC)).find(name) != -1)
        {
            cout << current->OtchC << " - " << current->nicknameDog << endl;
            check = true;
        }
 
        current = current->next;
    }
    if (!check)
        cout << "It isn't found any cynologist with such name" << endl;//Не найдено ни одного кинолога с таким именем
    cout << endl;
}
 
 
 
bool databaseDogs::showfamilytree(char* name)
{
    dogs *current = first;
    dogs *parent;
 
    while (current)
    {
        if(((string)(current->nicknameDog)).find(name) != -1)
        {
            cout << "Dog: " << current->nicknameDog << endl;
            if(current->idFather == 0 && current->idMother == 0)
            {
                cout << "The father and mother aren't found in a database" << endl;
                return 1;
            }
            else
            {
                parent = findDog(current->idFather);
                cout << "Father: " << parent->nicknameDog << endl;
                if(parent->idFather == 0 && parent->idMother == 0 )
                {
                    cout << "Parents of the father aren't found in the database" << endl;
                }
                else
                    cout << "The grandfather on the father: " << (findDog(parent->idFather))->nicknameDog << endl << "The grandmother on the father: " << (findDog(parent->idMother))->nicknameDog << endl;
                parent = findDog(current->idMother);
                cout << "Mother: " << parent->nicknameDog << endl;
                if(parent->idFather == 0 && parent->idMother == 0)
                {
                    cout << "Parents of the mother aren't found in the database" << endl;
                    return 1;
                }
                else
                    cout << "The grandfather on the mother: " << (findDog(parent->idFather))->nicknameDog << endl << "The grandmother on the mother: " << (findDog(parent->idMother))->nicknameDog << endl;
            }
        }
        current = current->next;
    }
}
void databaseDogs::removeDog(int id)
{
    
    dogs* current = first;
    dogs* temp;
 
 
 
    while(current->next)
    {
        if((current->next->idDog) == id)
        {
            temp = current->next;
            if(current->next == last)
            {
                last = current;
                current->next = temp->next;
                delete(temp);
                dogCount--;
                break;
            }
            current->next = temp->next;
            delete(temp);
            dogCount--;
        }
    current = current->next;
    }
    if(first->idDog == id)
        {
            temp = first;
            first = first->next;
            delete(temp);
            dogCount--;
        }
}
void databaseDogs::addDog()
{
    dogs* current = first;
    int maxId = 0;
    while(current)
    {
        if(current->idDog > maxId)
            maxId = current->idDog;
        current = current->next;
    }
    maxId++;
    dogs* newDog = new dogs;
    newDog->idDog = maxId;
    cout << "Enter nickname: ";
    cin >> newDog->nicknameDog;
    cout << endl << "Enter breed: ";
    cin >> newDog->breedDog;
    cout << endl << "Enter a surname of the owner: ";
    cin.ignore(cin.rdbuf()->in_avail(), '\n');
    cin.get(newDog->FamC, MAX_STRING_SIZE);
    cout << endl << "Enter a name of the owner: ";
    cin.ignore(cin.rdbuf()->in_avail(), '\n');
    cin.get(newDog->NameC, MAX_STRING_SIZE);
    cout << endl << "Enter a otchestvo of the owner: ";
    cin.ignore(cin.rdbuf()->in_avail(), '\n');
    cin.get(newDog->OtchC, MAX_STRING_SIZE);
    cout << endl << "Enter id of father: ";
    cin >> newDog->idFather;
    cout << endl << "Enter id of mother: ";
    cin >> newDog->idMother;
    if(!last)
        {
            first = newDog;
            last = newDog;
            newDog->next = NULL;
        }
        else
        {
            last->next = newDog;
            last = newDog;
            last->next = NULL;
        }
    dogCount ++;
    cout << "Record is successfully added" << endl;//Запись успешно добавлена
}
 
 
void databaseDogs::writeFile()
{
    if(openFile)
    {
        database.close();
 
        database.open(fileName, ios::out);
        dogs *current = first->next;
        database << first->idDog << ' '
            << first->nicknameDog << ' '
            << first->breedDog << ' '
            << first->FamC << ' '
            << first->NameC << ' '
            << first->OtchC << ' '
            << first->idFather << ' '
            << first->idMother;
        while(current)
        {
            database << '\n' << current->idDog << ' '
            << current->nicknameDog << ' '
            << current->breedDog << ' '
            << current->FamC << ' '
            << current->NameC << ' '
            << current->OtchC << ' '
            << current->idFather << ' '
            << current->idMother;
 
            current = current->next;
        }
        database.close();
        database.open(fileName, ios::in);
    }
}
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
#include <fstream>
#include <string>
#include <iostream>
const int MAX_STRING_SIZE = 100;
using namespace std;
class databaseDogs
{
    private:
    struct dogs
    {
        int idDog;                  
        char nicknameDog[100];           
        char breedDog[100];         
        char FamC[100]; 
        char NameC[100];
        char OtchC[100];    
        int idFather;
        int idMother;
        dogs *next;
    };
    fstream database;
    char fileName[100];
    dogs *first;
    dogs *last;
    int dogCount;
    bool openFile;
 
    public:
    databaseDogs() : first(NULL), last(NULL), dogCount(0), openFile(false) {}
    ~databaseDogs(); 
    bool openDatabase(char* way); 
    void showAll();         
    void showOwner(char* name);
    bool showfamilytree(char* name); 
    void removeDog(int id); 
    void addDog();          
    void writeFile();       
    dogs* findDog(int id);      
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru