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

Создать базу данных автобусного парка - C++

Восстановить пароль Регистрация
 
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
03.01.2013, 03:22     Создать базу данных автобусного парка #1
Доброго времени суток. Задание таково:

Создать базу данных автобусного парка. Структура информации:
номер автобуса, фамилия водителя, номер маршрута, количество автобусов на маршруте.

В программу необходимо включить меню работы с программой, которое должно содержать
следующие пункты:
а) создание файла исходных данных;
б) просмотр содержимого файла;
в) поиск заданной информации в файле;
г) корректировка информации в файле (дозапись информации в файл, удаление информации из
файла, изменение значения компонент файла);
д) выход из программы;
Собственно сам код полностью не требую, но есть несколько вопросов:

1) Возможна ли реализация через fstream? Если да, то:
а) Как через данную библиотеку реализовать удаление компоненты из файла?
б) Т.к. записываться будут структуры данных, то требуется ввод структуры как единого целого. Как это будет выглядеть?

2) Если ответ на первый вопрос отрицательный, то:
а) Как реализовать ввод структуры, как единого целого через библиотеку stdio.h?
б) Компилятор Visual Studio постоянно требует использование защищенного ввода (print_s и scan_s, к примеру). Почему он требует такой ввод и есть ли какое-либо решение этой проблемы? (Я пользовался процедурой fflush(stdin) (очистка буфера, если не ошибаюсь), чтобы избежать ошибок в scan_s).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2013, 03:22     Создать базу данных автобусного парка
Посмотрите здесь:

C++ Создать базу данных
Создать базу данных «Учет прибыли предприятия» C++
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
C++ Создать базу данных автомобилей
Создать базу данных (массив структур) в соответствии с заданной структуры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 03:35     Создать базу данных автобусного парка #2
1) Конечно возможна. Иначе зачем он нужен то тогда?
a) Считываете как всегда всё, удаляете что нужно и записываете всё заново.
б) Как и в других случаях - поэлементный ввод. Можно перегрузить оператор >>.
2) Можно и на stdio.h, но это уже Си'шные функции, оно Вам надо?
a) Так же как и через потоки - поэлементно!
б) Он это не требует, а рекомендует. Это мелсофтовские функции. Не используйте их, если у Вас студенческий проект. Можете вначале дописать
C++
1
#pragma warning (disable:4996)
это отключит данное предупреждение. Не знаю, работает ли fflush под линуксом.
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
03.01.2013, 03:41  [ТС]     Создать базу данных автобусного парка #3
Ну насчет _s как раз таки требует, ибо отчаянно брыкается уже на стадии дебага.

Про удаление можно чуточку подробнее? =) Именно алгоритм, я никак не могу додуматься до такой элементарщины попроще...

Реализовывал ранее так: создавал массив с типом записи как буфер, считывал все данные, кроме удаляемых, туда и перезаписывал файл.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
03.01.2013, 03:42     Создать базу данных автобусного парка #4
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Возможна ли реализация через fstream?
Да, создаешь поток для чтения и работатешь с ним, как с обычным cin. Удаление - загружаешь все содержимое файла, удаляешь требуемое, записываешь в файл обратно. Вообще это наверно не требуется. При запуске программы - загружаешь базу, при выходе выгружаешь.
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
требуется ввод структуры как единого целого.
Когда с клавы вводишь - все просто. По отдельности вводишь каждое поле. когда работаешь с файлом - открываешь его в бинарном виде. Есть вроде метод write - он записывает байты. Записываешь таким образом свою базу в файл по байтам. А когда считываешь - есть похожая функция для считывания байт.(Придется вспомнить преобразование типов).
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Компилятор Visual Studio постоянно требует использование защищенного ввода
Он требует, потому что на это есть причины. Например функция gets - вводит строку и пихает ее в массив. Предположим у тебя массив и 10 символов, а ввел 20. Оставшмеся 10 запишутся мимо массива - это серьезная проблема. Поэтому есть безопасный вариант gets_s, где передается еще и кол-во элементов в массиве - что безопаснее. Вообще советую использовать безопасные варианты, кроме тех случаев, когда код должен быть кроссплатформенный.
Советую в начале файла с кодом приписать #pragma warning(disable:4355 4996) Оно должно вырубить это предупреждение и еще какое-то - не помню уже...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 03:42     Создать базу данных автобусного парка #5
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Ну насчет _s как раз таки требует, ибо отчаянно брыкается уже на стадии дебага.
Может у Вас что еще не так? Потому что это должен быть варнинг и использование этих функций - Ваше личное дело.
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
03.01.2013, 03:47  [ТС]     Создать базу данных автобусного парка #6
Так, ну про бинарное считывание я в принципе предполагал правильно, просто хотел убедиться...

Ну напоследок, самый такой банальный и возможно, холиварный, вопрос: чем практичнее пользоваться то? =) Потоками или стандартным вводом/выводом?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 03:50     Создать базу данных автобусного парка #7
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Потоками или стандартным вводом/выводом?
Потоки работают медленнее, но, имхо, они удобнее и приятнее для восприятия. Так же есть возможность работать с STL.
Да и раз пишите на C++, то и ввод/вывод желательно делать на C++
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
03.01.2013, 03:53  [ТС]     Создать базу данных автобусного парка #8
Большое спасибо, дальше мозговать буду сам =)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 03:54     Создать базу данных автобусного парка #9
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
Большое спасибо, дальше мозговать буду сам =)
Можете использовать STL - это ускорит разработку(если, конечно разрешено пользоваться сие библиотекой и достаточно знаний)
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
03.01.2013, 04:00  [ТС]     Создать базу данных автобусного парка #10
На использование ресурсов ограничений нет, но знаний мало. За тем исключением, что использую vector и string.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 04:02     Создать базу данных автобусного парка
Еще ссылки по теме:

C++ Создать базу данных (БД) склада компьютерного магазина
C++ Создать базу данных
Генератор Парка и Миллера. Вывод данных из программы C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
03.01.2013, 04:02     Создать базу данных автобусного парка #11
Цитата Сообщение от DarkSkazochnik Посмотреть сообщение
За тем исключением, что использую vector и string.
они Вам пригодятся, чтобы не изобретать велосипед
Yandex
Объявления
03.01.2013, 04:02     Создать базу данных автобусного парка
Ответ Создать тему
Опции темы

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