Спасибо всем, кто все же написал, невзирая на запрет :) ! За все благодарности и предложения денег :)
Впрочем, мне всегда были непонятны ситуации, когда есть огромный спрос на программистов и с хорошими окладами, и все что надо - это вложить в собственное обучение 20-30 долларов (которые окупятся через несколько месяцев за один рабочий день!) и пожертвовать - одной! зимой, ежедневным часом перед телевизором на час за компьютером, и затем всю жизнь заниматься интересным и перспективным делом.
А зима уже прошла. И те, кто занимался эту зиму, убежден, сужу по вашим письмам, однозначно свидетельсвтуют, что их жизнь тоже изменилась к лучшему!
Это я к тому, что перед зимой казалось - ой, так долго заниматься надо, вроде сложно и все такое... Но зима ПРОШЛА ! Вот я о чем.
Время летит быстро, и те, кто только планировал, так и продолжают планировать. И весна пройдет, и лето, а они так и будут ныть - начальник козел, платят мало, ничего в жизни не изменить... А у того, кто занимался, зима-то ТОЖЕ прошла! И для них это время уже позади, но - зато - появилась - куча новых навыков и умений.
Масштаб личности этим и определяется - способен ли человек спланировать свою жизнь, свое развитие, хотя бы на полгода вперед. А сиюминутой живут только дураки :)
Можно возразить конечно - дескать, умные люди, просветленные всякие, советуют жить здесь и сейчас. Так то это так, но тогда решите для себя, что вы хотите - добиться успеха в социальном смысле (хорошая зарплата, карьера, интересная работа - а все социальные вещи обязательно подразумевают планирование, умение распоряжаться доступными ресурсами, личностный рост), или жить как растение, имитируя чужое просветление с чужих слов. Иначе "здесь и сейчас" получается только как позорное бегство от трудностей и предлог-оправдание
собственной трусости. Вот как пройдете через реальные трудности с победой, тогда уже и говорите о "духовном развитии". Иначе это все болтовня слабаков и неумех, не выросших из коротких штанишек.
Кстати, очень! рад! - уже несколько человек написали, что устроились программистами (и даже веб-дизайнерами :-)!
Школьники, студенты часто пишут, про бесплатные курсы. Ну возьмите у родителей - неужели не дадут 500 рублей на хорошее дело? Или заработайте сами. Поход в кино сколько стоит, или два батона колбасы? Впрочем, все мои курсы закрыты, поэтому не сочтите за рекламу :)
Кто занимался на бесплатных курсах (кстати, от некоторых, от кого я совсем не ожидал обратной связи, так как фактически бросил посередине :( - тем не менее получил замечательные письма с благодарностью, а вот от других, с кем переписывались очень даже по дружески, вообще не пришло ничего...) - в частности, по базам данных. Лучший выход - купите мою книжку "Delphi 7. Учебный курс", синенькая такая, изд. Питер. Должна быть, в магазинах, недавно третий раз переиздавалась, на Озоне и др. инет-магазинах также есть.
В ней все очень подробно разъясняется и по базам данных, курс на ее основе и построен. Кроме того, там ВСЕ компоненты Дельфи 7 рассмотрены, а также создание многоуровневых, веб-, интернет-систем, создание хелпов, локализация приложений и еще много всего другого.
Если интересуют другие основные компьютерные понятия (многие не знают, что такое байт например :) - обязательно купите "Информатику" под ред. Симоновича.
Если у вас есть какие-то вопросы по базовому курсу - почитайте следующие выпуски, где я давал ответы на часто возникавшие вопросы, с вероятностью 90% вы там найдете готовый ответ на свой вопрос.
Сайт Тани временно не работает, но это временноо - сейчас он переносится на новый хостинг. Если вы хотите, чтобы ваши решения были опубликованы - присылайте свои решения Тане! Кроме того, напоминаю, помощь по базовому курсу и Дельфи еще Лена оказывает - l.s70 собака mail.ru .
Кроме того, господин Иван Путеец (фамилия такая :) взялся за выполнение работ по программированию (школьные и институтские задания, курсовые итд). Берет дорого, но делает качественно (проверял лично!). Пишите ему на ivan777 собака bk.ru.
По последнему заданию.
Если не получается все сразу, с перекрестными ссылками, сначала сделайте только один список - сотрудников. В списке показываются фамилии, при выборе строки отображаете все характеристики конкретного человека (номер выбранной строки просто переводите в индекс массива записей - обычно просто единичку добавить к номеру строки :) , так как нумерация строк - с нуля).
Потом научитесь данные этого сотрудника корректировать, потом - удалять и добавлять. Потом второй список отделов добавляете, и уже пытаетесь состыковывать.
Постепенно :)
Но эта программа была бы бессмысленной, если бы не было возможности сохранять массив записей в файл и затем восстанавливать из него. Сделать это, однако, совсем просто.
Мы познакомились с текстовыми файлами, только для работы со строками. Для создания файла, хранящего данные любых типов, используется следующая запись:
var имя-переменной : File of тип-данных ;
Тип-данных - может быть любой тип, размер элемента данных которого известен. Integer, Real или TXomiak например.
var Fi: File of Integer;
А вот String в качестве этого типа данных файла применять нельзя, потому что текстовое данное может быть произвольной длины. А поддержка описываемых здесь файлов (они называются типизированные) в Дельфи создана только для данных фиксированного размера.
В типизированном файле должно находиться целое число блоков данных соответствующего типа. То есть если
var Fi: File of Integer;
то в файл, связанный с переменной Fi, можно записать 5, 123 или 100000 значений типа Integer. Но нельзя - три с половиной записи.
Ограничение на длину строк можно обойти, указав максимально возможную длину строки. Это так делается:
String[ 80 ]
80 - это максимальное число символов, которое может быть в нашей переменной этого типа. Если попробуете записать 81 - возникнет ошибка.
То есть мы можем описать такую запись:
type TXomiak = record
name: string;
ves: Integer; end;
но декларация
var Fi: File of TXomiak;
приведет к ошибке - мы не можем точно сказать, какой размер элемента данных типа TXomiak (потому что внутри него есть поле типа String, безразмерное). Эта особенность, фактически, проявляется, только если мы пытаемся создать файл записей, в которых есть String-поля.
Вот как можно записать:
type TXomiak = record
name: String[80];
ves: Integer; end;
Мы явно указываем максимальную длину строки, поэтому размер данных типа TXomiak становится сразу компилятору известен.
Лучше вот так записывать:
type String80 = String[80];
TXomiak = record
name: String80;
ves: Integer; end;
Выделить нашу 80-символьную строку в отдельный тип данных.
В остальном работа с типизированным файлом не отличается от работы с текстовым файлом.
var xm: array[1..100] of TXomiak; var Fi: File of TXomiak;
... for i := 1 to 100 do begin
xm[i].name := ' хомяк N ' + inttostr(i);
xm[i].ves := random(50)+1; end;
AssignFile(Fi, 'xomiaki.dat' ); // расширение вы можете придумать
любое, главное, чтобы не совпадало с уже существующим. Внутри
этот файл будет хранить двоичные данные, то есть в Блокноте уже не
просмотреть :) Один из относительно стандартных расширений для
таких файлов - .dat.
Rewrite(Fi); for i := 1 to 100 do
write(Fi, xm[i]);
// здесь важно - для записи в типизированный файл использовать
не writeln , а write !
CloseFile(Fi);
Считывание из файла:
AssignFile(Fi, 'xomiaki.dat' );
Reset(Fi); for i := 1 to 100 do
read(Fi, xm[i]);
CloseFile(Fi);
Записи располагаются в файле последовательно, в том порядке, в каком они в него записывались.
Части кода с записью и считыванием полезно оформить как отдельные процедуры, SaveToMyFile, LoadFromMyFile (только названия выбирайте пооригинальнее, у многих стандартных объектов Дельфи есть готовые методы типа SaveToFile). Переменную-файл в них можно декларировать как локальную, а массив сотрудников конечно глобален - в классе формы указываете и его, и процедуры-методы.
Загрузка из файла должна происходить, очевидно, в самом начале старта программы, в событии создания формы. А сохранение (процедуру сохранения) надо вызывать каждый раз, когда внесено какое-либо изменение в массив сотрудников - чтобы всегда сохранялась синхронность между массивом в памяти и файлом на диске, чтобы и там и там всегда были одинаковые данные.
Открытым файл долго держать тоже не надо - открыли, считали/записали и сразу закрыли. Потому что при любом сбое или просто закрытии программы без закрытия файла теоретически возможно, что файл испортится (не физически, а данные в нем потеряются).