| 
| Darkbasic | Дата: Воскресенье, 31 Октября 2021, 19:25 | Сообщение # 1 |  |   Revival Deiphi Сейчас нет на сайте | Всех приветствую. Зарегистрировался на данном форуме далеких 10 лет назад, было тогда 13 лет отроду, как увлекся программированием. Было всякое, что то пытался, что то делал, но все в итоге так и осталось где-то на полках пылиться, не достиг я в данной сфере ничего от слова совсем. Время как-то прошло, теперь я более менее взрослый человек и решил все таки идти за своей маленькой мечтой, ведь как сказал один из мною прослушиваемых исполнителей "Мечта - таблетка, если жизнь спазм", но не суть. Поступил я на курсы, время к диплому(за что будет корочка, но не так важно) и есть у меня небольшой набросок проекта. Это что-то вроде готовой БД на чистом С. Я понимаю, что есть sql, plpgsql, mysql и им подобные, но моя цель не в этом, в укреплении и углублении знаний по С, хотя как известно, язык угасает(нет, конечно на нем еще написана добрая половина всяких драйверов и устройства различные на нем еще работают), и все работают уже минимум на С++, ведь ООП, как известно, смогло вытеснить процедурное программирование. Ну-с, извиняюсь за тираду, перейдем к сути. Хотелось бы вас, всех гуру программирования(это сейчас не в обиду, не подкалываю, а действительно с уважением обращаюсь) попросить обратить внимание на мою небольшую программку(и действительно, она весит пока что 33 Кб), которая является чем-то вроде готовой БД.
 В "БД" есть следующие поля: Номер человека, его ФИО, его дата поступления и отчисления. Что то вроде универской БД в самом простом виде. Что на данный момент умеет программа:
 1)Соответственно запоминать данные, то есть можно их вводить(для простоты тестов даты генерируются случайным образом, вводятся только ФИО ). Для ФИО есть функция, что при любом регистре программа преобразует данные в нормальный вид. Пример иВАнов - преобразуется в Иванов и так далее.
 2)Читать эти данные.
 3)Сортировать эти данные по нужному выбранному полю(ФИО сортирует по отдельности, то есть либо по фамилии, либо по имени, либо по отчеству и по первой букве пока что, ну а числа соответственно в порядке возрастания).
 4)Поиск по нужному полю. Тут пока реализовано кривовато, по ФИО ищет только точные совпадения строка в строку, либо по первой букве следующей и предыдущей, с цифрами аналогично, либо точные данные, либо ближайшие +-1.
 5)Удалять элемент полностью.
 6)Изменять любые данные в выбранном элементе.
 7)Записывать все введенные данные в файл и при последующей открытии программы считывать их по новой.
 Пока что это все, что умеет. Программа соответственно построена на консольной основе, так как пока видимо мне не хватает какой-то программистской смекалки понять WINAPI, чтобы все это красиво в окошечке было.
 Ссылка на сам исполняющий файл Ссылка на скачивание. При запуске после введения данных создастся файл data.txt, при втором запуске создастся файл last_num.txt рядом, первый хранит всю "БД", во втором хранится номер последнего элемента.
 Хотелось бы услышать какой-то критики, напутствий и всего такого, так как мне нравится этим заниматься, хоть оно и не приносит мне доход, плюс по С очень мало тем в принципе, никто не занимается уже этим языком по крайней мере здесь. Всем заранее спасибо!
 
 
   
   |  |  |  |  | 
| 
| Storm54 | Дата: Воскресенье, 31 Октября 2021, 21:21 | Сообщение # 2 |  |   постоянный участник Сейчас нет на сайте | Если пишете диплом по этой теме, то очень странно видеть путаницу в терминах БД и СУБД. Ваша программа как раз-таки является неким подобием СУБД. Касаемо программы:
 Формат хранения выбран неудачный по нескольким причинам:
 1. В текстовом формате хранить избыточно. Особенно, если планируется добавлять различные типы данных.
 2. Столбцы разделены пробелами, что уже исключает возможность использования этих символов в качестве полезных данных.
 3. Строки таблицы разделены символами переноса строк, что также исключает возможность хранить многострочные документы в БД.
 Функционал СУБД очень скуден, по сути реализована только одна таблица с захардкоженным типом данных, подробнее:
 1. Отсутствие возможности создавать и настраивать базы данных, таблицы и т.п.
 2. Естественно, ни о каком ACID и речи даже не может идти.
 3. Догадываюсь, что какой либо встроенной оптимизации поиска также нет.
 
 Похвально, что пробуете писать на C - хоть немного разберетесь с основами работы с памятью, но проект очень слабый и даже рассматривать нечего. Если была задумка сделать СУБД, то можно было бы поставить конкретную задачу и попытаться ее реализовать - тот же журнал транзакций попытаться сделать и понять какую задачу он решает.
 
 Советую прочитать любую книгу по SQL, чтобы понять, какие вообще задачи решают SQL СУБД. Хорошая книга "Введение в SQL" Мартина Грабера.
 
 
 Сообщение отредактировал Storm54 - Вторник, 02 Ноября 2021, 15:43 |  |  |  |  | 
| 
| drcrack | Дата: Понедельник, 01 Ноября 2021, 00:30 | Сообщение # 3 |  | старожил Сейчас нет на сайте | Цитата  2. Столбцы разделены пробелами, что уже исключает возможность использования этих символов в качестве полезных данных.3. Строки таблицы разделены символами переноса строк, что также исключает возможность хранить многострочные документы в БД.
ну это решается экранированием
 хотя согласен что проект в целом странный
   |  |  |  |  |