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

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Консоль, класс, методы класса: БД и файл? - C++

05.09.2013, 19:04. Просмотров 642. Ответов 13
Метки нет (Все метки)

Добрый вечер.

Не знаю как лучше сделать, подскажите пожалуйста!

Сейчас мы работаем с классами, пишем свои классы, подклассы (потомки), реализуем методы класса (то бишь функции).

У меня функции: чтения из файла, запись в файл. Какой именно файл -- не сказано.
В классе есть несколько полей, например, кол-во городов и название страны.

Теперь возникло несколько вопросов:

1) как несколько полей хранить в файле? Я знаю txt файл, тогда записывать туда строчками, что ли?
например:

Бумбум 123 (строчка)
пурумпум 230 (строчка)
...
или же делать отдельные txt файлы под своё поле?
Т.е., 10 полей, 10 файлов.
*при условии, что все поля будут заполнятся, а начальное значение (в классе) no_name и 0.

2) можно ли к exe файлу подключить БД? Как это осуществить? Ещё нужна будет "запись в файл". Сделаем условие, что БД обязательно есть. БД можно или MySQL, или Microsoft access, или ещё какую.

3) В данном случае что лучше использовать, БД или файл? На муторность подключения не смотрим, всё же знания есть важный фактор)))


4) в методах класса есть запись в файл и чтение из файла. В прошлый раз, когда я использовала "чтение из файла", я сначала проводила чтение в вектор, потом закрывала файл, а потом работала с вектором. Если надо было сделать "чтение из файла", то я выводила вектор.
Как поступить здесь? Если у нас ещё есть возможность добавления запись в файл, а значит:
а) записать в вектор, потом в файл
б) записать в файл, потом добавить в вектор
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 19:04     Консоль, класс, методы класса: БД и файл?
Посмотрите здесь:
Класс шаблон и методы класса C++
C++ Вынести класс и методы класса в отдельные файлы
C++ Перенести методы дружественного класса в подключаемый файл
C++ Методы класса внутри определения класса
C++ От класса "Файл" унаследовать класс "Зашифрованный файл"
Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и п C++
C++ методы класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
05.09.2013, 19:36     Консоль, класс, методы класса: БД и файл? #2
Если хотите записать данные класса в файл, то придется записывать каждое поле... что-то типа

C++
1
2
3
4
5
6
7
 fstream fout("Ваш файл", ios_out| ios_trunc);
  if (!fout)
   {
        cout << "Error. I can't open the file";
        return;
   }
  fout.write((char*)&size, sizeof(int));
...если size - поле класса целочисленного типа... В таком же духе и считывание производить из файла...
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
05.09.2013, 19:48  [ТС]     Консоль, класс, методы класса: БД и файл? #3
Цитата Сообщение от lesha1980 Посмотреть сообщение
Если хотите записать данные класса в файл, то придется записывать каждое поле... что-то типа
а сколько полей, столько и файлов или как в файл именно записывать?
В одну строчку несколько полей, или, например, у меня 4 поля, то чтобы записать 1 класс -- надо использовать 4 строки в файле.
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
05.09.2013, 20:05     Консоль, класс, методы класса: БД и файл? #4
Цитата Сообщение от Nullik Посмотреть сообщение
а сколько полей, столько и файлов или как в файл именно записывать?
В одну строчку несколько полей, или, например, у меня 4 поля, то чтобы записать 1 класс -- надо использовать 4 строки в файле.
В один бинарный или же текстовый файл вам потребуется записать каждое поле своего класса. Вы создаете поток для записи
C++
1
fstream fout("Ваш файл (Путь к файлу здесь прописываете)", ios::out);
Для считывания придется сделать так:
C++
1
fstream in("Ваш файл", ios::in);
Затем применить проверку на открытие файла, если файл открыт делаете запись

C++
1
fout.write((char)*&ваше_поле, sizeof(тип значения вашего поля));
...для двух полей
C++
1
2
fout.write((char)*&1ваше_поле, sizeof(тип значения вашего поля));
fout.write((char)*&2ваше_поле, sizeof(тип значения вашего поля));
...для трех аналогично и так далее...
А для считывания

C++
1
in.read((char)*& Ваше_поле, sizeof(тип значения вашего поля));
не забудьте закрыть открытый поток

Для считывания и записи придется открывать отдельные потоки...
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
05.09.2013, 20:16  [ТС]     Консоль, класс, методы класса: БД и файл? #5
lesha1980, ну и считывание аналогично записи. Оооооок. Большое спасибо!!!))
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 07:13     Консоль, класс, методы класса: БД и файл? #6
Для записи полей класса не обязательно использовать бинарные методы, можно и текстовые (а если работаете бинарными методами, то и файл открывайте в бинарном режиме). Бинарные, обычно, используются, когда записывается или читается объект класса целиком (память под объектом/объект в память). Но возможность чтения/записи объекта класса целиком зависит от ряда условий: какие у него поля, есть ли виртуальные методы и пр.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 08:05  [ТС]     Консоль, класс, методы класса: БД и файл? #7
поля такие:

(разумеется, тут не нужно писать правдивые данные, тут чисто "как работают...")
название страны
имя открывателя
кол-во городов
кол-во жителей


методы:
вывод на экран\чтение (хотя не очень поняла что именно надо выводить, если есть "чтение из файла)
запись в файл
чтение из файла
ввод данных (тоже не поняла, если есть "запись в файл)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 08:46     Консоль, класс, методы класса: БД и файл? #8
Цитата Сообщение от Nullik Посмотреть сообщение
поля такие:
Под тем какие поля, подразумевается не то, как они называются, а тип данных полей (простые типы, массивы, объекты классов, и т.д.)

Добавлено через 7 минут
Цитата Сообщение от Nullik Посмотреть сообщение
вывод на экран\чтение (хотя не очень поняла что именно надо выводить, если есть "чтение из файла)
Цитата Сообщение от Nullik Посмотреть сообщение
ввод данных (тоже не поняла, если есть "запись в файл)
Не понятно, что не понятно. Не путайте только ввод (он же чтение: из файла в код, с консоли(клавиатуры) в код) и вывод (он же запись: из кода в файл, из кода на консоль(на экран)).
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 09:55  [ТС]     Консоль, класс, методы класса: БД и файл? #9
Аааа, вот в чём разница)))

Поля можно любого типа, там были только названия.
Думаю, первые два строчкой, другие интом.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 09:58     Консоль, класс, методы класса: БД и файл? #10
Цитата Сообщение от Nullik Посмотреть сообщение
Думаю, первые два строчкой, другие интом.
Строчки бывают разные: массив char, с '\0' в конце (строка в стиле С), объект класса string (строка С++, с автоматическим управлением памятью).
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 13:58  [ТС]     Консоль, класс, методы класса: БД и файл? #11
объект класса string (строка С++, с автоматическим управлением памятью).
я думала "строчка" это и подразумевает. Ну оооок.))
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 21:28     Консоль, класс, методы класса: БД и файл? #12
Цитата Сообщение от Nullik Посмотреть сообщение
объект класса string (строка С++, с автоматическим управлением памятью).
я думала "строчка" это и подразумевает. Ну оооок.))
Совершенно нет. И записывать в файл, объекты string, предлагаемым способом:
Цитата Сообщение от lesha1980 Посмотреть сообщение
fout.write((char)*&1ваше_поле, sizeof(тип значения вашего поля));
не имеет смысла, потому что память под объектом string (запись которой делается в этом примере) и строка, с которой связан этот объект - далеко не одно и тоже.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 21:44  [ТС]     Консоль, класс, методы класса: БД и файл? #13
alsav22, и как тогда сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 22:02     Консоль, класс, методы класса: БД и файл?
Еще ссылки по теме:
Методы класса C++
C++ Методы и конструкторы класса
C++ Указатель на методы класса
C++ протестировать методы класса
Виртуальные методы класса C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 22:02     Консоль, класс, методы класса: БД и файл? #14
Текстовыми методами (функциями).
Чтобы конкретно что-то сказать, нужно видеть класс и это (если есть):
Цитата Сообщение от Nullik Посмотреть сообщение
в методах класса есть запись в файл и чтение из файла.
Yandex
Объявления
06.09.2013, 22:02     Консоль, класс, методы класса: БД и файл?
Ответ Создать тему
Опции темы

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