Исходный текст программ.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;
type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    procedure N3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  MainForm: TMainForm;
implementation
uses Unit3, Unit4, Unit5, Unit7, Unit10;
{$R *.dfm}
procedure TMainForm.N3Click(Sender: TObject);
begin
fmModel.show
end;
procedure TMainForm.N5Click(Sender: TObject);
begin
fmCustom.show
end;
procedure TMainForm.N6Click(Sender: TObject);
begin
fmAccount.show
end;
procedure TMainForm.N9Click(Sender: TObject);
begin
close
end;
procedure TMainForm.N8Click(Sender: TObject);
begin
fmReport.show
end;
end.
unit Unit3;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids;
type
  TfmModel = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    procedure FormActivate(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    flag:integer;
  end;
var
  fmModel: TfmModel;
implementation
uses Unit2, Unit4, Unit7;
{$R *.dfm}
procedure TfmModel.FormActivate(Sender: TObject);
begin
if flag1 then
Datamodule2.Model.Filtered:=false;
end;
procedure TfmModel.FormDeactivate(Sender: TObject);
var i:integer;
str:TStrings;
begin
if flag = 1
            then
                 for i:=0 to Datamodule2.Model.FieldCount-1 do
                 fmCustomAdd.StringGrid1.Rows[fmCustomAdd.k].Append(Datamodule2.Model.Fields[i].AsString);
end;
end.
unit Unit4;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, Mask, DBCtrls;
type
  TfmCustomAdd = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    GroupBox2: TGroupBox;
    Label5: TLabel;
    Edit1: TEdit;
    Label6: TLabel;
    Edit2: TEdit;
    Button2: TButton;
    Label7: TLabel;
    Button1: TButton;
    StringGrid1: TStringGrid;
    Button3: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure init;
  private
    { Private declarations }
  public
    k:integer;
  end;
var
  fmCustomAdd: TfmCustomAdd;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TfmCustomAdd.Button2Click(Sender: TObject);
begin
fmModel.flag:=1;
inc(k);
Stringgrid1.RowCount:=  Stringgrid1.RowCount+1;
 caption:=inttostr(k);
if  edit1.Text''
                then
                Begin
                Datamodule2.Model.Filtered:=false;
                Datamodule2.Model.Filter:='CIDavto = '''+edit1.Text+'''';
                Datamodule2.Model.Filtered:=true;
                End;
if edit2.Text''
                  then
                  Begin
                Datamodule2.Model.Filtered:=false;
                Datamodule2.Model.Filter:='Firm = '''+edit2.Text+'''';
                Datamodule2.Model.Filtered:=true;
                  End;
if (edit1.text='') and (edit2.Text='')  then Datamodule2.Model.Filtered:=false;
       caption:=   Datamodule2.Model.Filter;
  fmModel.Show;
end;
procedure TfmCustomAdd.FormCreate(Sender: TObject);
begin
k:=-1;
StringGrid1.RowCount:=0;
end;
procedure TfmCustomAdd.Button1Click(Sender: TObject);
var c,i:integer;
begin
edit6.text:='Select IDclient from  client where ISeria='+edit4.text+' and INomer='+edit5.text;
Datamodule2.Query1.SQL.Add('Select IDclient from  Client where ISeria='+edit4.text+' and INomer='+edit5.text);
Datamodule2.Query1.Open;
if Datamodule2.Query1.Eof
                      then
                      Begin
                      Datamodule2.Clients.Active:=true;
                      Datamodule2.Clients.Append;
                      datamodule2.Clients.fields[1].AsString:=Edit3.Text;
                      datamodule2.Clients.fields[2].AsString:=Edit4.Text;
                      datamodule2.Clients.fields[3].AsString:=Edit5.Text;
                      datamodule2.Clients.Post;
                       c:= datamodule2.Clients.fields[0].AsInteger;
                    End
                    else
                    c:=Datamodule2.Query1.Fields[0].AsInteger;
                    edit1.Text:=inttostr(c);
  Datamodule2.Custom.Active:=true;
   for i:=0 to k do
   begin
     Datamodule2.Custom.Append;
     Datamodule2.Custom.fields[1].asinteger:=c;
     Datamodule2.Custom.fields[2].AsString:=StringGrid1.Cells[0,i];
     Datamodule2.Custom.fields[3].AsInteger:=0;
     Datamodule2.Custom.Post;
   end;
   Datamodule2.QCustoms.Active:=false;
   Datamodule2.QCustoms.Active:=true;
    init;
    Datamodule2.Query1.SQL.Clear;
 end;
procedure TfmCustomAdd.init;
var i:integer;
begin
for i:=0 to k do
StringGrid1.Rows[i].Clear;
k:=-1;
end;
procedure TfmCustomAdd.Button3Click(Sender: TObject);
begin
init
end;
procedure TfmCustomAdd.Edit3Change(Sender: TObject);
begin
init;
end;
end.
unit Unit5;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Mask, Grids, DBGrids, StdCtrls,DB, DBCtrls;
type
  TfmAccount = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    DBGrid1: TDBGrid;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Button2: TButton;
    Button3: TButton;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    Button4: TButton;
    Button5: TButton;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  fmAccount: TfmAccount;
implementation
uses Unit2, Unit6, Unit9;
{$R *.dfm}
procedure TfmAccount.Button1Click(Sender: TObject);
begin
Datamodule2.Clients.Filtered:=false;
Datamodule2.Clients.Filter:='VFIO='''+edit1.Text+'*''';
Datamodule2.Clients.Filtered:=true;
fmClient.show;
label2.Show;
dbgrid1.Show;
button3.Show;
button4.Show;
end;
procedure TfmAccount.Button3Click(Sender: TObject);
begin
									
1,200 руб.
								  
									Оглавление
Задание на курсовую работу.	1
Разработка базы данных.	2
Разработка программы	9
Заключение	34
Литература	35 
Задание на курсовую работу.
Магазин продает автомобили по каталогу, в котором имеются данные о ряде моделей (название модели, фирма-изготовитель, мощность двигателя, число мест в салоне, расход топлива на 100 км в литрах, объем багажника в куб. дм). Клиент, просмотрев каталог, заказывает нужную  ему модель.  Магазин оформляет заказ и затем получает нужный ему автомобиль. Клиенту выписывается счет, в котором указывается модель автомобиля, его идентификационный номер (15 знаков), а также номера двигателя и кузова (14 знаков),  цвет автомобиля  и дата оплаты.  После оплаты счета клиент получает автомобиль, о чем делается отметка в заказе (выполнен). Кроме заказов и счетов, выпускается ежемесячно отчет с данными о продаже каждой модели (количество, сумма)  и общей суммой продаж. Клиент может сделать несколько заказов. Сведения о продавце не нужны. Поиск в каталоге можно производить по названию фирмы-изготовителя. При этом пользователю должны быть предъявлены все модели данной фирмы, из которых клиент и сделает выбор. 
Разработка базы данных.
Определим следующие  классы отношений
1.	Модели.
2.	Клиенты.
3.	Заказы (связаны с  отношением Модели и Клиенты)
4.	Счета (связаны с  отношением Модели, Заказы).
Логическая модель базы данных (схема ERD) демонстрирует связи между сущностями. 
Атрибуты сущностей
1.	Модели (Код модели, название модели, фирма-изготовитель, мощность двигателя, число мест в салоне, расход топлива на 100 км в литрах, объем багажника в куб. дм)
2.	Клиенты (Код клиента, фамилия, имя, отчество клиента, серия и номер паспорта)
3.	Заказы (Код заказа, Код клиента, Код модели, Статус заказа)
4.	Счета (Код счета, код модели, код заказа, номер двигателя, номер кузова (14 знаков),  цвет автомобиля, дата выписки счета,   дата оплаты).
Объектные отношения
Модели
имя атрибута	назначения атрибута для предметной области	тип данных атрибута	ограничения на значения атрибутов
Код_модели	Уникальный номер модели	Символьный	Не пустое,
15 символов
название 	Название модели авто	Символьный	Не пустое,
15 символов
фирма	фирма-изготовитель	Символьный	Не пустое,
15 символов
мощность	мощность двигателя	Число	2 десятичных знака
число мест	число мест в салоне	Целое число	
расход	расход топлива на 100 км в литрах	Число	2  десятичных знака
объем	объем багажника в куб. дм	Число	2  десятичных знака
Клиенты
имя атрибута	назначения атрибута для предметной области	тип данных атрибута	ограничения на значения атрибутов
Код_клиента	Уникальный номер клиента	Счетчик	Не пустое
ФИО	Фамилия, имя, отчество	Символьный 	Не более 100 символов
Серия	Серия паспорта	Короткое целое 	
Номер	Номер паспорта	Целое число	
Заказы
имя атрибута	назначения атрибута для предметной области	тип данных атрибута	ограничения на значения атрибутов
Код_заказа	Уникальный номер заказа	Счетчик	Не пустое,
Код_клиента	Внешний ключ, связанный с полем Код_клиента отношения Клиенты	Целое число	Не пустое
Код_модели	Внешний ключ, связанный с полем Код_модели отношения Клиенты	Символьный	Не пустое,
15 символов
Флаг	Признак оплаты заказа	Короткое целое	1 – оплачен, 0 – не оплачен.
Счета
имя атрибута	назначения атрибута для предметной области	тип данных атрибута	ограничения на значения атрибутов
Код_счета	Уникальный номер счета	Счетчик	Не пустое,
Код_заказа	Внешний ключ, связанный с полем Код_заказа отношения Заказы	Целое число	Не пустое
Код_модели	Внешний ключ, связанный с полем Код_модели отношения Клиенты	Символьный	Не пустое,
15 символов
номер двигателя	номер двигателя	Символьный	14 символов
номер кузова	Номер кузова	Символьный	14 символов
цвет автомобиля  	цвет автомобиля  	Символьный	30 символов
стоимость	Цена автомобиля	Денежный	
Дата_выписки	Дата_выписки счета	Дата	
Дата_оплаты	Дата_оплаты счета	Дата	
Ключи отношений
1.	В качестве первичного ключа отношения Модели выбран уникальный Код_модели
2.	Несмотря на  то, что каждый клиент идентифицируется серией и номером паспорта,  качестве первичного ключа  отношения Клиенты выбран уникальный Код_клиента, так как составной ключ (Серия, Номер) замедлил бы работу с отношением Клиенты в виду сложности.
3.	В качестве первичного ключа отношения Заказы выбран уникальный Код_заказа.
4.	 В качестве первичного ключа отношения Счета  выбран уникальный Код_заказа 
Модель стандарта IDEF1X
Структура базы данных.
Каждая таблица базы данных физически хранится в отдельном файле. Таблица Модели – в файле .db, таблица Клиенты – в файле Client.db,  таблица Заказы – в файле Custom.db, таблица  Счета – в файле Accounts.db.
Структура таблиц.
Models.db
Названия полей	назначения для предметной области	Тип данных	Длина	Ограничения
CIDAvto	Уникальный номер модели	Alpha
	15	Primary Key
VTitle	Название модели авто	Alpha
	15	
RPower	мощность двигателя	BCD	2	
ISites	число мест в салоне	Short		
RRashod	расход топлива на 100 км в литрах	BCD	2	
RVolume	объем багажника в куб. дм	BCD	2	
Firm	фирма-изготовитель	Alpha	10	Индекс XFirm
Clients.db
Названия полей	назначения для предметной области	Тип данных	Длина	Ограничения
IDClient	Уникальный номер клиента	Auto-increment		Primary Key
VFIO	Фамилия, имя, отчество	Alpha	100	
ISeria	Серия паспорта	Short		
INomer	Номер паспорта	Long Integer		Индекс XFio
Custom.db
Названия полей	назначения для предметной области	Тип данных	Длина	Ограничения
IDCustom	Уникальный номер заказа	Auto-increment		Primary Key
IDClient	Внешний ключ, связанный с полем Код_клиента отношения Клиенты	Long Integer		
IDModel	Внешний ключ, связанный с полем Код_модели отношения Клиенты	Alpha	15	
Flag	Признак оплаты заказа	Short		0,1
Account.db
Названия полей	назначения для предметной области	Тип данных	Длина	Ограничения
IDAccount	Уникальный номер заказа	Auto-increment		Primary Key
IDCustom	Внешний ключ, связанный с полем Код_заказа отношения Заказы	Long Integer		
IDModel	Внешний ключ, связанный с полем Код_модели отношения Клиенты	Alpha	15	
NDvig	номер двигателя	Alpha	14	
NKuzov
	Номер кузова	Alpha	14	
VColor	цвет автомобиля  	Alpha	30	
MPrice		Money		
Date_custom	Дата_выписки счета			
Date_pay
	Дата_оплаты счета			 
Разработка программы
Данная программа позволяет автоматизировать сбор сведений по работе автосалона. Она может быть использована как для хранения, так и для их анализа.
Программа разработана с использованием системы программирования Borland Delphi 7.0  и СУБД Paradox. платформ MS SQL Server 2005 и BORLAND DELPHI 7.
Система Delphi давно пользуется репутацией самого эффективного средства разработки приложений баз данных, то есть программ, обслуживающих электронные хранилища информации.
Данные локальной базы данных  Paradox (файлы данных) находятся на одном (локальном) устройстве, в качестве которого может выступать диск компьютера или сетевой диск (диск другого компьютера, работающего в сети).
Для обеспечения разделения данных (доступа к данным) между несколькими пользователями, в качестве которых выступают программы, работающие на одном или нескольких компьютерах, в локальных базах данных применяется метод, получивший название блокировка файлов. Суть этого метода заключается в том, что пока данные используются одним пользователем, другой пользователь не может работать с этими данными, т. е. данные для него закрыты, заблокированы.
Одним из традиционных способов взаимодействия приложения, созданного в среде разработки Delphi, и базы данных является использование процессора баз данных Borland Database Engine 5. Он представляет собой набор динамических библиотек, функции которых позволяют не только обращаться к данным, но и эффективно управлять ими на стороне приложения. 
Для работы с источниками данных при посредстве BDE в Delphi имеется специальный набор компонентов, расположенных на странице BDE Палитры компонентов. Эти компоненты для работы с базами данных используют возможности BDE, обращаясь к его функциям и процедурам. Механизм доступа к BDE инкапсулирован в базовом классе TBDEDataSet. (Подробно базовые классы компонентов доступа к данным рассмотрены далее в этой части.) Поэтому в процессе программирования у вас не будет необходимости использовать функции BDE напрямую. Почти все, что можно сделать путем прямого обращения, можно сделать и через компоненты — это проще и надежнее. BDE представляет собой набор динамических библиотек, которые "умеют" передавать запросы на получение или модификацию данных из приложения в нужную базу данных и возвращать результат обработки. В процессе работы библиотеки используют вспомогательные файлы языковой поддержки и информацию о настройках среды. 
В составе BDE поставляются стандартные драйверы, обеспечивающие доступ к СУБД Paradox, dBASE, FoxPro и текстовым файлам. Локальные драйверы (рис. 16.1) устанавливаются автоматически совместно с ядром процессора. Один из них можно выбрать в качестве стандартного драйвера, который имеет дополнительные настройки, влияющие на функционирование процессора БД.  
Рис. 16.1. Структура процессора баз данных ВОЕ 
Для успешного доступа к данным приложение и BDE должны обладать информацией о местоположении файлов требуемой базы данных. Разрабатывая программу работы с базой данных, программист не может знать, на каком диске и в каком каталоге будут находиться файлы базы данных во время ее использования. Например, пользователь может поместить базу данных в один из каталогов дисков С:, D: или на сетевой диск. Поэтому возникает проблема передачи в программу информации о месте нахождения файлов базы данных.
В Delphi проблема передачи в программу информации о месте нахождения файлов базы данных решается путем использования псевдонима базы данных. Псевдоним (Alias) — это короткое имя, поставленное в соответствие реальному, полному имени каталога базы данных. Например, псевдонимом каталога C:\data\spetersburg может быть имя Peterburg. Программа работы с базой данных для доступа к данным использует не реальное имя, а псевдоним.
Для доступа к информации программа, обеспечивающая работу с базой данных, подключает библиотеку Borland Database Engine (BDE), которая, в свою очередь, использует конфигурационный файл, содержащий информацию о всех зарегистрированных в системе псевдонимах.
Псевдоним базы данных может быть создан (зарегистрирован) при помощи утилиты BDE Administrator. Эта же утилита позволяет изменить каталог, связанный с псевдонимом.   
В левой части окна, на вкладке Databases, перечислены псевдонимы, зарегистрированные на данном компьютере. Для того чтобы создать новый псевдоним, необходимо из меню Object выбрать команду New. Затем в открывшемся диалоговом окне New Database Alias (Новый псевдоним базы данных) из списка Database Driver Name, в котором перечислены зарегистрированные в системе драйверы доступа к базам данных, нужно выбрать драйвер для создаваемой базы данных (рис. 17.3), т. е. фактически выбрать тип создаваемой базы данных.
При создании псевдонима по умолчанию предлагается драйвер STANDARD (default driver), который обеспечивает доступ к таблицам в формате Paradox.
									
1,200 руб.