Исходный текст программ.
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 руб.