База данных "Учет переселенцев"

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

«Уральский государственный экономический университет»

ЦЕНТР ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КУРСОВАЯ РАБОТА

по дисциплине: Высокоуровневые методы информатики и программирования

Тема: База данных «Учет переселенцев»

Выполнена: студентом

Байчурин Евгений Валерьевич

Екатеринбург

2010

Постановка задачи

Создать базу данных «учет переселенцев».

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

Справочники: населенные пункты (код, наименование, код области), национальности (код, наименование), области (код, наименование).

Отчет по областям, населенным пунктам с итогами (число переселенцев) по областям и населенным пунктам.

Создать не менее трёх запросов и оформить их в виде табличных форм.

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

Создать меню из пунктов: формы, запросы, отчёты и выход.

Входная информация

База данных состоит из четырёх таблиц: основной и трёх справочников. Опишем все таблицы базы данных.

Справочники: населенные пункты, национальности, области.

Таблица «Населенные пункты».

Поле

Наименование

Тип данных

Ограничения

Код

Cod

Целочисленное

Ключевое поле

Наименование

Name_punct

Строка в 30 символов

Обязательное

Код области

Cod_region

Целочисленное

Таблица «Национальности».

Поле

Наименование

Тип данных

Ограничения

Код

Cod

Целочисленное

Ключевое поле

Наименование

Name_nac

Строка в 20 символов

Обязательное

Таблица «Области».

Поле

Наименование

Тип данных

Ограничения

Код

Cod

Целочисленное

Ключевое поле

Наименование

Name_region

Строка в 20 символов

Обязательное

Основная таблица «Переселенцы».

Поле

Наименование

Тип данных

Ограничения

Код населенного пункта

Cod_punct

Целочисленное

Обязательное

Код национальности

Cod_nac

Целочисленное

Обязательное

Фамилия

Surname

Строка в 20 символов

Обязательное

Дата рождения

Birth

Дата

Обязательное

Логическая модель базы

/

В реляционных базах данных основной вид связи таблиц — «один ко многим». Поля родительских таблиц справочников, на которые ссылаются из дочерних таблиц, чаще всего являются ключевыми, поэтому значения в них не должны повторяться. Но значения полей в дочерних таблицах, в которых указываются ссылки на значения из других таблиц, могут повторяться. Например, если в данной базе в справочнике «Населённые пункты» имеются много разных записей населённых пунктов из одной какой-либо области, то не нужно вводить название области для каждой из этих записей, можно указать код нужной записи в таблице «Области». При этом уменьшается вероятность опечатки при вводе, к тому же можно реализовать удобный способ ввода в виде выбора из раскрывающегося списка областей.

База данных находится в третьей нормальной форме, так как нет полей, функционально зависящих от неключевых. Поле функционально зависит от другого поля тогда, когда для каждого значения того поля, от которого оно зависти имеется только одно значение в зависящем поле. Например, в таблице «Области» для каждого значения поля «Код» имеется только одно значение поля «Наименование».

Выходная информация

Создание базы данных

Создадим базу данных при помощи приложения Database Desktop. Запустим это приложение и создадим все четыре таблицы. Выберем тип СУБД Paradox 7, и в окне конструктора таблиц создадим требуемые поля и укажем их типы и зададим ограничения.

Создадим таблицу «Населенные пункты». Эта таблица имеет следующие поля: Cod (Код, тип Short — целое число), Name_punct (Наименование пункта, тип Alpha — строка из 30 символов), Cod_region (Код области, тип Short — целое число).

Рис. 1. Создание таблицы «Населенные пункты».

Создадим внешний ключ по полю Cod_region и назовём его Ind_region.

Рис. 2. Создание внешнего индекса.

Создадим таблицу «Национальности». Эта таблица имеет следующие поля: Cod (Код, тип Short — целое число), Name_nac (Наименование национальности, тип Alpha — строка из 20 символов).

Рис. 2. Создание таблицы «Национальности».

Создадим таблицу «Области». Эта таблица имеет следующие поля: Cod (Код, тип Short — целое число), Name_region (Наименование области, тип Alpha — строка из 20 символов).

Рис. 3. Создание таблицы «Области».

Создадим таблицу «Переселенцы». Эта таблица имеет следующие поля: Cod_punct (Код населенного пункта, тип Short — целое число), Cod_nac (Код национальности, тип Short — целое число), Surname (Фамилия, тип Alpha — строка из 20 символов), Birth (Дата рождение, тип Date — дата).

Создадим два внешних ключа по полям Cod_punct и Cod_nac и назовём их Ind_punct и Ind_nac.

Рис. 4. Создание таблицы «Переселенцы».

Сохраним таблицы базы данных в папку «C: БД».

Создание приложения баз данных

Создадим приложение баз данных при помощи ИСР Delphi 7.

Перейдём к Delphi и создадим модуль данных и назовём его DataModuleMigrants. Разместим на этом модуле следующие компоненты:

Четыре компонента Table с вкладки BDE для связи с таблицами. Изменим соответственно названиям таблиц их имена и для всех укажем в свойстве DatabaseName «C: БД» и укажем для каждого компонента соответствующую ему таблице в свойстве TableName, выбрав её из выпадающего списка.

Четыре компонента Data Source с вкладки Data Access для связи таблиц с физическими наборами данных. Изменим соответственно названиям таблиц их имена и укажем в свойстве DataSet имя соответствующего компонента Table.

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

Установим связи между таблицами базы данных. Выберем таблицу TableAreas (Области) и присвоим его свойству MasterSours значение SourcePuncts (главной таблицей является таблица «Населённые пункты»), а свойству MasterFields значение поля, по которому связываются таблицы Cod_region (Код области), а свойству IndexFieldNames присвоим значение Cod. Перейдём к таблице TablePuncts (Населённые пункты) и присвоим его свойству MasterSours значение SourceMigrants (главной таблицей является таблица «Переселенцы»), а свойству MasterFields значение поля, по которому связываются таблицы Cod_punct (Код пункта), свойству IndexFieldNames присвоим значение Cod. Перейдём к таблице TableNationalities (Национальности) и аналогично свяжем с таблицей SourceMigrants по полю Cod_nac (Код национальности). Перейдём на страницу Diagram окна редактора кода на вкладке модуля данных и перенесём из окна просмотра объектов Object TreeView все четыре таблицы. Созданные связи отобразятся в виде диаграммы.

база данные запрос таблица

Рис. 5. Связи между таблицами.

Создадим в таблице TablePuncts (Населённые пункты) поле соответствия, отображающее значение поля «Название» таблицы «Области», соответствующее введённому значению кода области.

Перейдём к таблице TablePuncts и из контекстного меню выберем Fields Editor (редактор полей). В появившемся окне вызовем контекстное меню нажатием правой кнопки мыши и выберем пункт New Field (новое поле). Переключатель Field type (тип поля) поставим в Lookup (соответствия), введём название Name_region, тип String, размер 20, Key Fields (куда подставляются значения) — Cod_region, Dataset — TableAreas, Lookup Keys (какое значение подставляем) — Cod (таблицы Области), Result Fields (Отображаемое в списке поле) — Name_region (таблицы Области).

Рис. 6. Создание поля соответствия.

Аналогично создадим поля соответствия в таблице Переселенцы, выводящие значения названий соответствующих кодов, указанных в полях «Код населенного пункта» и «Код национальности».

Создадим формы для заполнения таблиц.

Выберем File/New/Form. Появится макет формы. Выберем пункт меню File/Use Unit и выберем модуль данных Unit2. Поместим на форму компонент DBGrid с палитры Data Controls для редактирования таблицы базы. Присвоим его свойству Align (расположение) значение alTop (сверху), свойству DataSourse присвоим DataModuleMigrants. SourcePuncts (Отображение таблицы «Населенные пункты»). Щёлкнем правой кнопкой мыши на компоненте DBGrid и выберем из контекстного меню пункт Columns Editor (редактор колонок). В появившемся окне редактора колонок выберем из контекстного меню Add All Fields (добавить все поля). Появится список всех полей таблицы. Здесь можно удалить поля, которые не нужно отображать, а также настроить их внешний вид.

Затем поместим на форму компонент DBNavigator для перемещения по записям таблицы. Присвоим его свойству Align (расположение) значение alTop (сверху), свойству DataSourse присвоим DataModuleMigrants. SourcePuncts.

Создадим форму для отображения и редактирования таблицы справочника «Национальности». Эта таблица содержит два поля, поэтому удобнее данные отображать не в табличном виде. Создадим новую форму и поместим на неё компонент DBNavigator. Присвоим его свойству Align (расположение) значение alBottom (внизу), свойству DataSourse присвоим DataModuleMigrants. SourseNationalities. Разместим на форме два компонента DBEdit. Для компонентов DBEdit1 и DBEdit2 укажем в свойстве DataSourse значение DataModuleMigrants. SourseNationalities. Для DBEdit1 свойству DataField присвоим Cod, а для DBEdit2 — Name_nac.

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

procedure TForm4. Status;

begin

StatusBar1. SimpleText:='Количество записей: '+ IntToStr (DataModuleMigrants. TableNationalities. RecordCount) +'. Текущая запись: '+IntToStr (DataModuleMigrants. TableNationalities. RecNo);

end;

Добавим заголовок этой процедуры в описание типа TForm4 и организуем вызов этой процедуры при наступлении события OnClick компонента DBNavigator. Внешний вид формы показан на рисунке 7.

Рис. 7. Форма для редактирования таблицы Национальности.

Аналогично создадим форму для отображения и редактирования таблицы «Области».

Создадим форму для таблицы «Переселенцы». Форма будет аналогична форме таблицы «Населённые пункты» с компонентами DBGrid и DBNavigator.

Перейдём на главную форму и, выбрав пункт меню File/Use Unit, подключим к модулю формы модули всех созданных форм для редактирования данных таблиц.

Создание запросов

Создадим базовый запрос. Для создания запроса поместим с вкладки BDE на форму модуля данных компонент Query, переименуем его в QueryBasic и присвоим его свойству DatabaseName путь к папке с базой данных «C: БД» (В приложении будет реализовано программное присвоение значения выбранного при подключении расположения базы данных). Также поместим компонент DataSourse, назовём его SourceQueryBasic и присвоим его свойству DataSet значение QueryBasic. Командой контекстного меню SQL Builder вызовем построитель запросов. В окне построителя в поле Database введём путь к базе данных «C: БД» и выберем все четыре таблицы из списка Table.

Перейдём на вкладку Joins и установим связи между таблицами базы. В первом выпадающем списке выберем Areas. Cod в поле Operator оставим значение «=» из третьего списка выберем Puncts. Cod_region. Аналогично создадим две другие связи «Puncts. Cod = Migrants. Cod_punct» и «Nationalities. Cod = Migrants. Cod_nac». Теперь укажем галочками поля, включаемые в запрос. Укажем поля:

· Таблица Migrants (Переселенцы): Surname, Birth.

· Таблица Nationalities (Национальности): Name_nec.

· Таблица Puncts (Пункты): Name_punct.

· Таблица Areas (Области): Name_region.

Перейдём на страницу Sorting и зададим сортировку по полю Migrants. Surname.

Закроем окно построителя запросов, выделим компонент QueryBasic и перейдём к его свойству SQL. Так как мы указали путь к базе в свойстве DatabaseName, то удалим из текста запроса прямые ссылки к таблицам базы, и заменим их относительными путями («Puncts. db» вместо «C: БДPuncts. db»).

Рис. 8. Создание базового запроса.

Текст базового запроса получится следующий

SELECT Areas. Name_region, Migrants. Surname, Migrants. Birth, Nationalities. Name_nac, Puncts. Name_punct

FROM «Areas. db» Areas

INNER JOIN «Puncts. db» Puncts

ON (Areas. Cod = Puncts. Cod_region)

INNER JOIN «Migrants. db» Migrants

ON (Puncts. Cod = Migrants. Cod_punct)

INNER JOIN «Nationalities. db» Nationalities

ON (Nationalities. Cod = Migrants. Cod_nac)

ORDER BY Migrants. Surname

Выберем компонент QueryBasic и из контекстного меню выберем пункт Fields Editor, добавим все поля и укажем надписи заголовков при отображении.

Создадим форму под базовый запрос. Поместим на неё компоненты DBGrid и DBNavigator. Выберем File/Use Unit и выберем модуль данных Unit2. Присвоим этим компонентам свойству DataSourse значение DataModuleMigrants. SourceQueryBasic.

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

Поместим на модуль данных компонент Query, переименуем его в QueryDateR и присвоим его свойству DatabaseName путь к папке с базой данных «C: БД». Также поместим компонент DataSourse, назовём его SourceQueryDateR и присвоим его свойству DataSet значение QueryDateR. Перейдём к свойству SQL компонента QueryDateR и вызовем редактор текста запроса нажатием на кнопку с троеточием. Введём следующий текст:

SELECT Surname

FROM «Migrants. db» Migrants

WHERE Birth =: DataRosd

ORDER BY Migrants. Surname

Здесь: DataRosd является параметром. Чтобы указать тип его значения перейдём к свойству Params компонента QueryDateR и вызовем его редактор. В появившемся окне выберем параметр DataRosd и присвоим его свойству DataType значение ftDateTime.

Создадим форму под запрос QueryDateR.

На главной форме создадим кнопку вывода запроса QueryDateR. Сначала подключим к главной форме модуль формы запроса FormQueryDateR, выбрав File/Use Unit, где укажем нужный модуль. В процедуре обработчике события нажатия на эту кнопку введём:

procedure TForm1. Button7Click (Sender: TObject);

var DateRosd: String;

begin

// вывод параметрического запроса

DataModuleMigrants. QueryDateR. Close;

DateRosd: =InputBox ('Дата рождения','Введите дату', DateToStr (Date));

DataModuleMigrants. QueryDateR. Params[0]. Value:=StrToDate (DateRosd);

FormQueryDateR. Caption:='Вывод переселенцев с датой рождения: ' + DateRosd;

DataModuleMigrants. QueryDateR. Open;

FormQueryDateR. Show;

end;

Здесь параметру под нулевым номером присваивается значение, введённое в диалоговом окне ввода сообщения InputBox, после чего открывается запрос и вызывается соответствующая форма.

Создадим запрос, выводящий список переселенцев, фамилия которых начинается с буквы «И».

Поместим на модуль данных компонент Query, переименуем его в QuerySurn и присвоим его свойству DatabaseName путь к папке с базой данных «C: БД». Также поместим компонент DataSourse, назовём его SourceQuerySurn и присвоим его свойству DataSet значение QuerySurn. Перейдём к свойству SQL компонента QuerySurn и вызовем редактор текста запроса нажатием на кнопку с троеточием. Введём следующий текст:

SELECT Surname, Birth

FROM «Migrants. db» Migrants

WHERE Surname Like ('И%')

ORDER BY Migrants. Surname

Здесь используется SQL оператор Like, позволяющий сравнивать значения полей по шаблону.

Создадим форму под запрос QuerySurn.

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

Текст запроса будет следующий:

SELECT Nationalities. Name_nac

FROM «Areas. db» Areas

INNER JOIN «Puncts. db» Puncts

ON (Areas. Cod = Puncts. Cod_region)

INNER JOIN «Migrants. db» Migrants

ON (Puncts. Cod = Migrants. Cod_punct)

INNER JOIN «Nationalities. db» Nationalities

ON (Nationalities. Cod = Migrants. Cod_nac)

WHERE Areas. Name_region=: Region

ORDER BY Nationalities. Name_nac

В процедуре вывода запроса укажем:

procedure TForm1. Button9Click (Sender: TObject);

var Region: String;

begin

// вывод параметрического запроса

DataModuleMigrants. QueryNational. Close;

Region: =InputBox ('Область','Введите название области','');

DataModuleMigrants. QueryNational. Params[0]. Value:=Region;

FormQueryNational. Caption:='Все национальности переселенцев из области: ' + Region;

DataModuleMigrants. QueryNational. Open;

FormQueryNational. Show;

end;

Создание отчётов

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

Создание отчёта по областям

Подключим компоненты для работы с отчётами. Для этого выберем пункт меню Components/Install Packades/ Add. Затем перейдём к папке Delphi7Bin и в поле Имя файла введём DCLQRT70. BPL.

Создадим простой отчёт по таблице «Области». Создадим форму под отчёт и разместим на ней компонент QuickRep с палитры QReport. Укажем отображение всех полос отчёта в свойстве Bands. В свойстве DataSet укажем DataModuleMigrants. TableAreas. Разместим компоненты QRLabel, QRDBText, QRExpr QRSysData. Вид окна конструктора отчёта представлен на рисунке 9.

Рис. 9. Вид конструктора отчёта по таблице «Области».

Создадим отчеты по населенным пунктам с итогами

Создадим отчёт средствами Rave Reports

Компоненты для работы с отчётами Rave Reports расположены на палитре компонентов Rave. Поместим на модуль данных компоненты RvProject и RvSystem. Также поместим компонент RvQueryConnection.

Создадим запрос на основе базового запроса для отчёта. Сначала сохраним текст базового запроса QueryBasic в файл C: БД BasicQ. SQL. Создадим новый запрос и присвоим его свойствам: Name — QueryRvPr, DatabaseName — «C: БД». Свойству SQL присвоим значение

SELECT Name_punct, COUNT (Surname)

FROM «BasicQ. SQL» BasicQ

GROUP BY Name_punct

Теперь присвоим свойству Query компонента RvQueryConnection значение QueryRvPr, то есть свяжем его с созданным нами запросом. Для компонента RvProject1 присвоим свойству Engine значение RvSystem1.

Вызовем конструктор отчётов двойным щелчком по компоненту RvProject1. В окне конструктора отчётов выберем команду меню File/New Data Object. В появившемся окне Data Connections выберем Direct Data View и нажмём кнопку Next. Затем выберем RvQueryConnection1 и нажмём кнопку Finish. Перейдём на страницу Report и выберем компонент Region. Затем разместим на нём компонент Band и компонент DataBand, и присвоим для компонента DataBand свойству DataView значение DataView1. Выберем компонент Band1 и переёдём к его свойству BandStyle, нажмём на кнопку с изображением троеточия и вызовем окно редактора стиля полосы. В этом окне поставим флажок напротив BodyHeader. Для полосы DataBand1 в свойстве BandStyle укажем Detail.

На компонент Band1 поместим два компонента Text со страницы Standard. В свойстве Text каждого из них укажем надписи столбцов отчёта.

На компонент DataBand1 поместим два компонента DataText и свойству DataView обоих этих компонентов присвоим значение DataView1, свойству DataField для первого компонента присвоим значение Name_ punct, для второго — < COUNT OF Surname>.

Рис. 10. Вид конструктора отчёта по населенным пунктам

Создадим отчет по областям и населенным пунктам

Аналогично создадим запрос на основе базового запроса QueryBasic и назовём его QueryRvPr2. В его свойстве SQL укажем:

SELECT Name_punct, Name_region

FROM «BasicQ. SQL» BasicQ

Поместим на модуль данных ещё один компонент RvQueryConnection и укажем в его свойстве Query значение QueryRvPr2.

Теперь перейдём к окну конструктора отчётов и добавим ещё один объект просмотра данных. Выберем File/New Data Object, укажем Direct Data View и выберем RvQueryConnection2 и нажмём кнопку Finish.

Выберем пункт меню File/New Report. В дереве проекта отчётов раскроем Report Library и выполним двойной щелчок на элементе Report2 для выбора второго отчёта. Появится чистый бланк конструктора отчётов, где мы создадим отчёт.

Аналогично, как и в предыдущем случае поместим компоненты Region Band и DataBand. Компоненту DataBand1 свойству DataView присвоим значение DataView2. В полосе Band1 создадим два заголовка, а в полосе DataBand1 выведем значения двух полей из объекта DataView2.

Создадим детальный отчёт

Перейдём к Delphi и поместим на модуль данных ещё один компонент RvQueryConnection и укажем в его свойстве Query значение QueryBasic, то есть базовый запрос.

Аналогично введём объект просмотра данных DataView3 в окне визуального конструктора отчётов и создадим ещё один отчёт Report3, в котором организуем вывод всех полей базового запроса.

Сохраним созданные отчёты в файл, для чего выберем пункт меню File/Save, оставим название Project1. rav и сохраним файл отчёта в папку с базой данных. Закроем редактор отчётов.

Перейдём к компоненту RvProject1 и укажем в его свойстве ProjectFile путь к файлу отчётов Project1. rav.

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

procedure TForm1. Button12Click (Sender: TObject);

begin

DataModuleMigrants. RvProject1. SelectReport ('Report1', False);

DataModuleMigrants. RvProject1. Execute;

end;

procedure TForm1. Button13Click (Sender: TObject);

begin

DataModuleMigrants. RvProject1. SelectReport ('Report2', False);

DataModuleMigrants. RvProject1. Execute;

end;

procedure TForm1. Button14Click (Sender: TObject);

begin

DataModuleMigrants. RvProject1. SelectReport ('Report3', False);

DataModuleMigrants. RvProject1. Execute;

end;

procedure TForm1. Button15Click (Sender: TObject);

begin

Form12. QuickRep1. Preview;

end;

Кнопки Button12−14 вызывают отчёты, созданные средствами Rave Reports, а кнопка Button15 вызывает отчёты, созданные средствами Quick Reports. Для вызова отчёта, созданного средствами Rave Reports, служит метод Execute. Так как компонент RvProject1 содержит ссылку на файл с несколькими отчётами, то перед тем как вызвать отчёт, следует указать его имя. Для этого служит метод:

function SelectReport (ReportName: string; FullName: boolean): boolean;

В параметре ReportName передается имя нужного отчета. Если параметр FullName имеет значение True, то это полное имя отчета, иначе -- имя отчета.

Создание меню

Поместим на главную форму компонент MainMenu с вкладки Standard. Двойным щелчком на этом компоненте вызовем редактор меню. В окне редакторы выберем из контекстного меню пункт Insert для добавления очередного пункта меню. Создадим четыре пункта меню первого уровня: «Формы», «Запросы», «Отчёты» и «Выход». Названия введём в свойство Caption соответствующего пункта. Перейдём к пункту «Формы» и выделим выпадающий подпункт, перейдём к свойству Caption и введём «Справочники». Выделим этот пункт и вызовем контекстное меню, где выберем команду Create Submenu (Создать подменю). Справа появится новый пункт, куда введём «Населённые пункты».

Создадим меню следующей структуры:

· Формы

§ Справочники

· Населённые пункты

· Области

§ -----------------

§ Переселенцы (основная)

· Запросы

§ Параметрические

· Запрос по дате рождения

· Вывод национальностей

§ Запрос по фамилии

§ ------------------

§ Базовый запрос

· Отчёты

§ Quick Reports

· Отчёт по областям

§ Rave Reports

· По населённым пунктам с группировкой

· По населённым пунктам и областям

§ Детальный отчёт

· Выход

· Подключиться

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

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

Например:

procedure TForm1. N6Click (Sender: TObject);

begin

Form1. Button2Click (Form1);

end;

Внешний вид конструктора меню показан на рисунке 11.

Рис. 11. Вид конструктора меню

Список литературы

1. Бобровский С. И. Delphi 5: Начальный курс. — М.: «ДЕСС», 1999.

2. Дарахвелидзе П., Маркова Е. «Программирование в Delphi 7».

3. Гофман В. Э., Хомоненко А. Д. Delphi: экспресс-курс. — СПб.: БХВ-Петербург, 2005. — 288 с.: ил.

4. Плещёв В. В. Высокоуровневые методы программирования. Учебное пособие. Тюмень: Издательство Тюменского государственного университета, 2008. 240 с.

5. Фаронов В. В. Delphi. Программирование на языке высокого уровня: Учебник для вузов — СПб.: Питер, 2008. — 640 с.: ил.

6. http: //www. realcoding. net/teach/Delphi7_prof/Glava23/Index4. html

ПоказатьСвернуть
Заполнить форму текущей работой