База Данных
Имеется текстовый файл, в нем находится вся база данных.
Обеспечить вывод на экрат таблиц, вставку, удаление и обновление записей. Все изменения записывать в тот же файл.
База имеет такой вид: (ТУТ вид этого в файле)
ТАБЛИЦА НАКЛАДНАЯ
ТАБЛИЦА ТОВАР
ТАБЛИЦА ЗАКАЗЧИК
ТАБЛИЦА ЗАКАЗ ВЕЩИ
3aKa3_ID 3aka34uK Data KoJI-Bo
1 1 061404 4
2 6 151804 3
3 3 080505 6
4 4 122205 8
5 2 071603 5
6 5 111905 4
7 3 121905 5
8 5 012504 9
3aka34uK_ID 3aKa3_ID N_HaKJIaDHou
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
3 7 7
5 8 8
ToBap_ID ToBap_uM9 Color Pa3Mep UeHa
1 Rubashka Red 46 530
2 Rubashka White 47 580
3 Sviter Black 49 450
4 Sviter Black 48 527
5 Kurtka Green 52 680
6 Kurtka Brown 52 948
7 Bryuki Blue 52 379
8 Bryuki Brown 54 448
3aKa34uK_ID uM9 ropoD TeJIeFoH
1 Sergey Moscow 4621895
2 Andrey SP 5654896
3 Denis Pskov 2159464
4 Vladimir SP 6145982
5 Oleg Pskov 6498560
6 Aleksandr Kazan 1896354
3aKa3_ID ToBap_ID KoJI-Bo
1 1 2
2 5 5
3 4 3
4 3 2
5 2 4
6 6 5
Написание программы ПОЛНОСТЬЮ в принципе не требуется. Предложите варианты как это сделать (особенно вставку, удаление и обновление записей).
Если у кого есть похожие вещи, выкладывайте тут или на мыло (mcdos@list.ru).
Буду БЕЗУМНЕЙШЕ ПРИБЛАГОДАРЕН за любую помощь.
ИМХО куда проще будет тебе юзать Paradox 4 от Borland
А в том-то и проблема. ТОЛЬКО! с помощью Паскаля.
А в том-то и проблема. ТОЛЬКО! с помощью Паскаля
Мазохизм
Могу предложить такой алгоритм парсинга данных в таблицах(их названия читаешь отдельно):
читаешь по строке(readln и eof)
смотришь case'ом, если
это вторая строка с \r\n\r\n, тогда это - заголовок новой таблицы и следующую строку парсишь как заголовок
иначе это данные, и их записываешь в 3-х мерных массив Data[TableID, ColID, RowID]
Строчки данных разбиваешь на массивы, сверяешь с заголовком таблицы, если что - выводишь предупреждение, иначе - записываешь в массив
Для заголовков таблиц и их описаний отдельные массивы
Поиск, добавление, удаление и т.д делаешь обычным сверянием полей и колонок массива с нужными
Лучше тут юзать Асм, иначе скорость будет очень медленной
Можно привести хоть какой-нибудь кусочек кода применимо к моей базе?
И как должен будет тогда выглядеть текстовой файл?
(хотя бы на примере одной таблицы)
// Открытие файла, тест и т.д
while (eof(f))
begin
readln(f, str);
if (str = #10#13) {
if (not DoubleEOLN) {
DoubleEOLN := true;
} else {
// Заносим данные о заголовке таблицы
// Сверяемся с общим заголовком базы
DoubleEOLN := false
}} else {
// Это данные таблицы
// Действуешь как в моем алгоритме
}
end;
Нечто такое
З.Ы: опять съехал на Си )) Поменяй сам на begin и end
Файл с базой (как я ее начал делать) тут
http://mcline.narod.ru/trash/sql.txt
Просто код получается ОЧЕНЬ громоской... и не удобной
Я сразу сказал что это мазохизм
Базу надо писать либо на Си, либо на Асме
Всетаки с типизированным было б полегче, особенно при редактировании, удалении и т.п.
Еще неплохо б было создать несколько файлов, я имею ввиду для каждой таблицы отдельный файл.
Если согласиться с вышеприведенными условиями, то и на паскале нетрудно написать будет.
_
А что обязательно текстовый файл???
Всетаки с типизированным было б полегче, особенно при редактировании, удалении и т.п.
Еще неплохо б было создать несколько файлов, я имею ввиду для каждой таблицы отдельный файл.
Если согласиться с вышеприведенными условиями, то и на паскале нетрудно написать будет.
_
Именно вся база в ОДНОМ файле. Никаких других! (ну за исключением буферного - для операций, который потом будет удален (программно))
5 таблиц - 5 записей типа record со своими полями и так далее...
Меня от задачи просто колбасит. С алгоритмом траблы :)
если можно будет сделать с типизированным, то посижу помудрю ченить может получиться ;), а если в обяз текстовый файл нужен то слишком замудренно получается аж думать неохота... :D X)-
>
дык в обязательно ТЕКСТОВЫЙ???
если можно будет сделать с типизированным, то посижу помудрю ченить может получиться ;), а если в обяз текстовый файл нужен то слишком замудренно получается аж думать неохота... :D X)-
Тут главное что бы он был ОДИН (файл). Ну попробуй с типизированным... Был бы безумно благодарен :)
Кстати насчет record - ненужно делать 5 записей
иначе у тебя не получиться сделать 1 файл.
Если сравнить 5 таблиц, то видно максимальное количество столбцов = 5, делаем так:
www=record n1,n2,n3,n4,n5:String; End;
Например если заполняем таблицу №1, то n5 присваевам '', т.е. пустую строку, а при
последующем выводе на экран таблицы №1 пятый столбец (которого не должно быть в таб.№1) будет выводится пустыми строками...
Хотя можно сделать так:
если просмотр таб.№1 значит то
если просмотр таб.№2 значит это
Но как я привел пример выше, мне кажется будет лучше
P.S.: Советую писать с типизированным файлом т.к. при использовании текстового замучаешься при удалении и редактировании данных
>
Люди помогите с алгоритмом. Задача такова:
Имеется текстовый файл, в нем находится вся база данных.
Обеспечить вывод на экрат таблиц, вставку, удаление и обновление записей. Все изменения записывать в тот же файл.
Написание программы ПОЛНОСТЬЮ в принципе не требуется. Предложите варианты как это сделать (особенно вставку, удаление и обновление записей).
Вот Глянь. Почти похоже. Эт я на первом курсе писал.Может пригодиться.
У него там 2 типа данных - заголовок БД, таблиц и их данные
Чем тебе мой алгоритм не понравился?
Вот Глянь. Почти похоже. Эт я на первом курсе писал.Может пригодиться.
Спасибо, очень пригодилось к третьей :) лабе!