2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 c++ builder6 прога-справочник
Сообщение30.10.2009, 01:59 
Аватара пользователя


30/10/09
18
Всем доброго времени суток!

У меня такая задача: организовать файл-СПРАВОЧНИК СТУДЕНТОВ ГРУППЫ на локальном диске. Информация в нем: №группы, №курса, Ф.И.О., дата рождения, пол и успеваемость. Сама прога осуществляет поиск студентов по списку.
Я пока додумался до такого хода решения:
1) создаем связанный список,
2) сортируем фамилии по алфавиту ПУЗЫРЬКОВЫМ методом,
3) осуществляем бинарный поиск и получаем ответ.
Не слишком ли я намудрил?
Можно ли решить проще это дело и сталкивался кто-нибудь из Вас с чем-то подобным? Буду признателен за ответы.

P.S. Прогу нужно написать на С++ Builder 6.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение30.10.2009, 10:31 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Поскольку видимо речь идет о списках, объем которого - порядка десятков элементов, то фактически любые методы будут все равно работать быстро, так что можно реализовывать тот, который удобнее. При этом различные технические подзадачи типа сортировки, поиска и т.д. просто выносите в отдельные функции, чтобы в случае необходимости можно было один раз поменять в них алгоритм, а оставшаяся часть программы от этого бы никак не поменялась.

Связанный список - вполне адекватная и несложная форма работы с данными.

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

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение30.10.2009, 11:39 


06/04/09
156
Воронеж
loko в сообщении #256524 писал(а):
1) создаем связанный список,2) сортируем фамилии по алфавиту ПУЗЫРЬКОВЫМ методом,

Можно при создании списка новые элементы вставлять так, чтобы сохранялся порядок. Тогда последующая сортировка не нужна.

Если вдруг список разрастется и будет требоваться улучшение поиска можно посмотреть в сторону слоеных списков.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение30.10.2009, 14:44 
Заслуженный участник


26/07/09
1559
Алматы
2loko
Часто при проектировании физического слоя реальных баз данных разработчики не брезгуют использованием последовательно размещенных записей фиксированного размера.

При таком подходе придется ввести ограничения на максимальный объем данных, сохраняемых в полях вашей игрушечной БД, что не так уж и страшно, ибо вряд ли длина фамилии может превышать, ну допустим, 500 символов.

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

Возможно, стоит также завести список свободных записей, который будет необходимо пополнять при удалении записей и использовать для поиска свободного места при добавлении новых.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение30.10.2009, 23:05 
Аватара пользователя


30/10/09
18
p51x в сообщении #256570 писал(а):
loko в сообщении #256524 писал(а):
1) создаем связанный список,2) сортируем фамилии по алфавиту ПУЗЫРЬКОВЫМ методом,

Можно при создании списка новые элементы вставлять так, чтобы сохранялся порядок.


Circiter в сообщении #256649 писал(а):
2loko
Часто при проектировании физического слоя реальных баз данных разработчики не брезгуют использованием последовательно размещенных записей фиксированного размера.

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


Итак, значит шаг 2 не нужен: сортировка пузырьковым методом не нужна.
Теперь у меня возникает новый вопрос: в шаге 1 при создании списка можно ли использовать массивы - причем именно двумерные, так что первый элемент массива - это и есть индекс, различный для каждой фамилии, а второй элемент как раз и является этой самой фамилией (в буквенном виде)?

И вот еще вопрос: связанный список - это технология "дерево" в с++? Т.е. в окончательном виде мы вводим фамилию и получаем ВСЕ даннные по ней.

P.S. Благодарю всех отписавшихся.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение31.10.2009, 00:22 
Заслуженный участник


09/08/09
3438
С.Петербург
Пока не очень понятно, что Ваша программа должна делать.
Кто должен организовывать и наполнять справочник на диске, эта же программа?
Т.е., она должна выполнять две функции: формирование справочника и поиск по справочнику.
Так?

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение31.10.2009, 12:30 
Заслуженный участник


26/07/09
1559
Алматы
2loko
Попробуйте воспользоваться готовыми контейнерами из STL (map, list, etc).

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение31.10.2009, 15:57 
Аватара пользователя


30/10/09
18
Maslov в сообщении #256858 писал(а):
Т.е., она должна выполнять две функции: формирование справочника и поиск по справочнику.
Так?


Да, так.

Circiter в сообщении #256935 писал(а):
2loko
Попробуйте воспользоваться готовыми контейнерами из STL (map, list, etc).

А где их взять-то. Я новичок в этом деле и не понимаю зачем он вообще нужен?
Ведь STL — формат файла, используемый для хранения трехмерных моделей объектов. А зачем мне эти ТРЕХМЕРНЫЕ модели? У меня ведь прога-справочник, а не альбом с деревом из рисунков.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение31.10.2009, 16:12 
Заслуженный участник
Аватара пользователя


06/10/08
6422
loko в сообщении #256985 писал(а):
Ведь STL — формат файла, используемый для хранения трехмерных моделей объектов.

STL - это Standard Template Library, стандартная библиотека C++, которая содержит реализацию основных структур данных и алгоритмов на них.

 Профиль  
                  
 
 Re: c++ builder6 прога-справочник
Сообщение31.10.2009, 23:44 
Заслуженный участник


09/08/09
3438
С.Петербург
loko в сообщении #256985 писал(а):
Maslov в сообщении #256858 писал(а):
Т.е., она должна выполнять две функции: формирование справочника и поиск по справочнику.
Так?

Да, так.

Хорошо.
Еще два вопроса:
1. Поскольку программа должна быть разработана на C++ Builder, то речь, скорее всего, идет об оконном Windows-приложении. Это так?
2. Какое максимальное количество записей может содержать справочник.

После ответа на эти вопросы попробуйте спроектировать (нарисовать) пользовательский интерфейс (какие нужны формочки, какие поля должна содержать каждая форма).

После того, как такие краткие требования будут сформированы, можно думать о реализации.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group