Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен совет - как лучше реализовать небольшую базу 
:(
    Опции темы
suvolod
Дата 11.8.2010, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 20.8.2005

Репутация: нет
Всего: 1



Доброе время суток. Пишу прогу-запоминалку иностранных слов (VC++ 2005). И не знаю, как лучше (правильнее) организовать словарик. Точнее, взаимодействие его с моей прогой. В словаре будет порядка тысячи слов (хотя будут словари и на 5, и на 10 тысяч слов), сам словарь хотелось-бы реализовать в виде текстового UNICODE файла - для облегчения редактирования, чтобы юзеры могли редактировать словарь в том редакторе, который им привычнее, а при необходимости использовать (импортировать) в свои собственные программы. Одним словом, основных файлов будет 2. Один - словарь, другой - файл статистики, по которому будет накапливаться кол-во правильных ответов, штрафные баллы и другая информация. 
Вопрос - как лучше реализовать взаимодействие этих файлов, в каком формате реализовать файл статистики. Без БД приходит на ум только один вариант: слова из словаря подгружаются в мою программу + открывается файл статистики. Как только выбрано очередное слово - в цикле в файле статистики ищется совпадение. Если найдено - информация об этом слове (баллы, и т.д) дописывается в соответствующую строку статистики. Если нет - создается новая запись по этому слову в файле статистики. 

Этот вариант меня смущает по нескольким причинам - на каждое слово придется использовать многократный циклический перебор по всему файлу статистики. Если замутить это на БД и делать выборку через Select, то насколько это оправдано? Ведь записей в среднем будет от 1000 до 5000... может простой перебор будет работать быстрее. И потом, надо будет программно создавать новый файл статистики (новый файл БД), прописывать его в Администрирование -> Источники данных (ODBC) и т.д. Как я понимаю, у юзера должна быть поддержка БД, а вдруг ее нет (соответствуюещго софта не установлено)... получается моя программа вообще не заработает.

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

Это сообщение отредактировал(а) suvolod - 11.8.2010, 08:35
PM MAIL   Вверх
baldina
Дата 11.8.2010, 09:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата

на каждое слово придется использовать многократный циклический перебор по всему файлу статистики

необязательно.
допустим, в памяти хранится множество слов с атрибутами. слова - из словаря, атрибуты - из статистики.
Т.е. вообще всю информацию можно хранить в одном файле: одна строчка - одно слово плюс статистика.
Правда, пользователь эту статистику тоже сможет видеть и редактировать.
Т.е. в памяти получается структура типа std::map<слово,атрибуты>, в файле слово представлено строкой вида
<слово> <кол-во правильных ответов> <штрафные баллы>...
Если нужно статистику хранить раздельно по каждому случаю и иметь возможность обработки, можно иметь не один набор атрибутов, а их список. Хранение такое же, в одном файле. В этом случае в памяти что-то типа
std::map<слово,std::list<атрибуты>>, в файле
<слово> {<кол-во правильных ответов> <штрафные баллы>...},{<кол-во правильных ответов> <штрафные баллы>...}...

если обработка требуется серьезная, можно и легкую БД использовать, например SQLite.

Добавлено через 5 минут и 10 секунд
кстати, если однозначно нужно разделить словарь и статистику, а статистику очень хочется хранить в порядке поступления, можно сделать следующее: в памяти организуется по второму варианту. в файлах хранится раздельно. во время работы статистика дописывается в память, записи помечаются как новые. при выходе новые записи дописывается файл статистики.
PM MAIL   Вверх
djamshud
Дата 11.8.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



suvolod, не нужно перебирать все и вся. Используйте деревья или хеши. Хорошо подобранное и сбалансированное дерево подойдет лучше всего.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
suvolod
Дата 11.8.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 20.8.2005

Репутация: нет
Всего: 1



Спасибо за ответы. Для себя я понял главное - что реализовать такой проект можно и без привлечения БД. Во всяком случае, предостережений на этот счет от вас не было. Статистику я действительно хотел хранить отдельно. Во первых, чтобы не засорять словарь - он будет простого и понятного формата типа 

на русском|на китайском|транскрипция

А статистика будет создаваться на каждого пользователя отдельно. А чтобы для корректировки обычным юзером она была недоступна - создам байт-файл (а не текстовой), ну и плюс к этому небольшая шифровка - проXORю, например. Уменьшить количество переборов я хотел за счет того, что файл статистики буду создавать в виде заранее отсортированного списка. Поиск по нему быстрее.. Хотя покурю информацию и про хеши с деревьями - если алгоритмы будут не очень сложными в реализации, можно попробавать и что-то из этого.

Это сообщение отредактировал(а) suvolod - 11.8.2010, 11:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.