Пример готовой дипломной работы по предмету: Базы данных
Содержание
Оглавление
Задание на курсовую работу.1
Разработка базы данных.2
Разработка программы 9
Заключение 34
Литература 35
Задание на курсовую работу.
Магазин продает автомобили по каталогу, в котором имеются данные о ряде моделей (название модели, фирма-изготовитель, мощность двигателя, число мест в салоне, расход топлива на
10. км в литрах, объем багажника в куб. дм).
Клиент, просмотрев каталог, заказывает нужную ему модель. Магазин оформляет заказ и затем получает нужный ему автомобиль. Клиенту выписывается счет, в котором указывается модель автомобиля, его идентификационный номер (15 знаков), а также номера двигателя и кузова (14 знаков), цвет автомобиля и дата оплаты. После оплаты счета клиент получает автомобиль, о чем делается отметка в заказе (выполнен).
Кроме заказов и счетов, выпускается ежемесячно отчет с данными о продаже каждой модели (количество, сумма) и общей суммой продаж. Клиент может сделать несколько заказов. Сведения о продавце не нужны. Поиск в каталоге можно производить по названию фирмы-изготовителя. При этом пользователю должны быть предъявлены все модели данной фирмы, из которых клиент и сделает выбор.
Разработка базы данных.
Определим следующие классы отношений
1.Модели.
2.Клиенты.
3.Заказы (связаны с отношением Модели и Клиенты)
4.Счета (связаны с отношением Модели, Заказы).
Логическая модель базы данных (схема ERD) демонстрирует связи между сущностями.
Атрибуты сущностей
1.Модели (Код модели, название модели, фирма-изготовитель, мощность двигателя, число мест в салоне, расход топлива на
10. км в литрах, объем багажника в куб. дм)
2.Клиенты (Код клиента, фамилия, имя, отчество клиента, серия и номер паспорта)
3.Заказы (Код заказа, Код клиента, Код модели, Статус заказа)
4.Счета (Код счета, код модели, код заказа, номер двигателя, номер кузова (14 знаков), цвет автомобиля, дата выписки счета, дата оплаты).
Объектные отношения
Модели
имя атрибутаназначения атрибута для предметной областитип данных атрибутаограничения на значения атрибутов
Код_моделиУникальный номер моделиСимвольныйНе пустое,
15 символов
название Название модели автоСимвоьныйНе пустое,
15 символов
фирмафирма-изготовительСимвольныйНе пустое,
15 символов
мощностьмощность двигателяЧисло 2 десятичных знака
число местчисло мест в салонеЦелое число
расходрасход топлива на
10. км в литрахЧисло
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
15Primary Key
VTitleНазвание модели автоAlpha
15
RPowerмощность двигателяBCD2
ISitesчисло мест в салонеShort
RRashodрасход топлива на
10. км в литрахBCD2
RVolumeобъем багажника в куб. дмBCD2
Firmфирма-изготовительAlpha
10 Индекс XFirm
Clients.db
Названия полейназначения для предметной областиТип данныхДлинаОграничения
IDClientУникальный номер клиентаAuto-incrementPrimary Key
VFIOФамилия, имя, отчествоAlpha 100
ISeriaСерия паспортаShort
INomerНомер паспортаLong IntegerИндекс XFio
Custom.db
Названия полейназначения для предметной областиТип данныхДлинаОграничения
IDCustomУникальный номер заказаAuto-incrementPrimary Key
IDClientВнешний ключ, связанный с полем Код_клиента отношения КлиентыLong Integer
IDModelВнешний ключ, связанный с полем Код_модели отношения КлиентыAlpha 15
FlagПризнак оплаты заказаShort 0,1
Account.db
Названия полейназначения для предметной областиТип данныхДлинаОграничения
IDAccountУникальный номер заказаAuto-incrementPrimary Key
IDCustomВнешний ключ, связанный с полем Код_заказа отношения ЗаказыLong Integer
IDModelВнешний ключ, связанный с полем Код_модели отношения КлиентыAlpha 15
NDvigномер двигателяAlpha 14
NKuzov
Номер кузоваAlpha 14
VColorцвет автомобиля Alpha 30
MPriceMoney
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:dataspetersburg может быть имя Peterburg. Программа работы с базой данных для доступа к данным использует не реальное имя, а псевдоним.
Для доступа к информации программа, обеспечивающая работу с базой данных, подключает библиотеку Borland Database Engine (BDE), которая, в свою очередь, использует конфигурационный файл, содержащий информацию о всех зарегистрированных в системе псевдонимах.
Псевдоним базы данных может быть создан (зарегистрирован) при помощи утилиты BDE Administrator. Эта же утилита позволяет изменить каталог, связанный с псевдонимом.
В левой части окна, на вкладке Databases, перечислены псевдонимы, зарегистрированные на данном компьютере. Для того чтобы создать новый псевдоним, необходимо из меню Object выбрать команду New. Затем в открывшемся диалоговом окне New Database Alias (Новый псевдоним базы данных) из списка Database Driver Name, в котором перечислены зарегистрированные в системе драйверы доступа к базам данных, нужно выбрать драйвер для создаваемой базы данных (рис. 17.3), т. е. фактически выбрать тип создаваемой базы данных.
При создании псевдонима по умолчанию предлагается драйвер STANDARD (default driver), который обеспечивает доступ к таблицам в формате Paradox.
Выдержка из текста
Исходный текст программ.
unit Unit 1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;
type
TMainForm = class(TForm)
MainMenu 1: 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 Unit 3, Unit 4, Unit 5, Unit 7, Unit 10;
{$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 Unit 3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids;
type
TfmModel = class(TForm)
DBGrid 1: TDBGrid;
DBNavigator 1: TDBNavigator;
procedure FormActivate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
flag:integer;
end;
var
fmModel: TfmModel;
implementation
uses Unit 2, Unit 4, Unit 7;
{$R *.dfm}
procedure TfmModel.FormActivate(Sender: TObject);
begin
if flag 1 then
Datamodule 2.Model.Filtered:=false;
end;
procedure TfmModel.FormDeactivate(Sender: TObject);
var i:integer;
str:TStrings;
begin
if flag = 1
then
for i:=0 to Datamodule 2.Model.FieldCount-1 do
fmCustomAdd.StringGrid 1.Rows[fmCustomAdd.k].
Append(Datamodule 2.Model.Fields[i].
AsString);
end;
end.
unit Unit 4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, Mask, DBCtrls;
type
TfmCustomAdd = class(TForm)
GroupBox 1: TGroupBox;
Label 1: TLabel;
Label 2: TLabel;
Label 3: TLabel;
Label 4: TLabel;
GroupBox 2: TGroupBox;
Label 5: TLabel;
Edit 1: TEdit;
Label 6: TLabel;
Edit 2: TEdit;
Button 2: TButton;
Label 7: TLabel;
Button 1: TButton;
StringGrid 1: TStringGrid;
Button 3: TButton;
Edit 3: TEdit;
Edit 4: TEdit;
Edit 5: TEdit;
procedure Button 2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button 1Click(Sender: TObject);
procedure Button 3Click(Sender: TObject);
procedure Edit 3Change(Sender: TObject);
procedure init;
private
{ Private declarations }
public
k:integer;
end;
var
fmCustomAdd: TfmCustomAdd;
implementation
uses Unit 2, Unit 3;
{$R *.dfm}
procedure TfmCustomAdd.Button 2Click(Sender: TObject);
begin
fmModel.flag:=1;
inc(k);
Stringgrid 1.RowCount:= Stringgrid 1.RowCount+1;
caption:=inttostr(k);
if edit 1.Text»
then
Begin
Datamodule 2.Model.Filtered:=false;
Datamodule 2.Model.Filter:=’CIDavto = »’+edit 1.Text+»»;
Datamodule 2.Model.Filtered:=true;
End;
if edit 2.Text»
then
Begin
Datamodule 2.Model.Filtered:=false;
Datamodule 2.Model.Filter:=’Firm = »’+edit 2.Text+»»;
Datamodule 2.Model.Filtered:=true;
End;
if (edit 1.text=») and (edit 2.Text=») then Datamodule 2.Model.Filtered:=false;
caption:= Datamodule 2.Model.Filter;
fmModel.Show;
end;
procedure TfmCustomAdd.FormCreate(Sender: TObject);
begin
k:=-1;
StringGrid 1.RowCount:=0;
end;
procedure TfmCustomAdd.Button 1Click(Sender: TObject);
var c,i:integer;
begin
edit 6.text:=’Select IDclient from client where ISeria=’+edit 4.text+’ and INomer=’+edit 5.text;
Datamodule 2.Query 1.SQL.Add(‘Select IDclient from Client where ISeria=’+edit 4.text+’ and INomer=’+edit 5.text);
Datamodule 2.Query 1.Open;
if Datamodule 2.Query 1.Eof
then
Begin
Datamodule 2.Clients.Active:=true;
Datamodule 2.Clients.Append;
datamodule 2.Clients.fields[1].
AsString:=Edit 3.Text;
datamodule 2.Clients.fields[2].
AsString:=Edit 4.Text;
datamodule 2.Clients.fields[3].
AsString:=Edit 5.Text;
datamodule 2.Clients.Post;
c:= datamodule 2.Clients.fields[0].
AsInteger;
End
else
c:=Datamodule 2.Query 1.Fields[0].
AsInteger;
edit 1.Text:=inttostr(c);
Datamodule 2.Custom.Active:=true;
for i:=0 to k do
begin
Datamodule 2.Custom.Append;
Datamodule 2.Custom.fields[1].
asinteger:=c;
Datamodule 2.Custom.fields[2].
AsString:=StringGrid 1.Cells[0,i];
Datamodule 2.Custom.fields[3].
AsInteger:=0;
Datamodule 2.Custom.Post;
end;
Datamodule 2.QCustoms.Active:=false;
Datamodule 2.QCustoms.Active:=true;
init;
Datamodule 2.Query 1.SQL.Clear;
end;
procedure TfmCustomAdd.init;
var i:integer;
begin
for i:=0 to k do
StringGrid 1.Rows[i].
Clear;
k:=-1;
end;
procedure TfmCustomAdd.Button 3Click(Sender: TObject);
begin
init
end;
procedure TfmCustomAdd.Edit 3Change(Sender: TObject);
begin
init;
end;
end.
unit Unit 5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Mask, Grids, DBGrids, StdCtrls,DB, DBCtrls;
type
TfmAccount = class(TForm)
Label 1: TLabel;
Edit 1: TEdit;
Button 1: TButton;
Label 2: TLabel;
DBGrid 1: TDBGrid;
Label 5: TLabel;
Label 6: TLabel;
Label 7: TLabel;
Label 8: TLabel;
Label 9: TLabel;
Label 10: TLabel;
Label 11: TLabel;
Button 2: TButton;
Button 3: TButton;
DBEdit 3: TDBEdit;
DBEdit 4: TDBEdit;
DBEdit 5: TDBEdit;
DBEdit 6: TDBEdit;
DBEdit 7: TDBEdit;
DBEdit 8: TDBEdit;
Button 4: TButton;
Button 5: TButton;
DBEdit 1: TDBEdit;
DBEdit 2: TDBEdit;
procedure Button 1Click(Sender: TObject);
procedure Button 3Click(Sender: TObject);
procedure Button 2Click(Sender: TObject);
procedure Button 4Click(Sender: TObject);
procedure Button 5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmAccount: TfmAccount;
implementation
uses Unit 2, Unit 6, Unit 9;
{$R *.dfm}
procedure TfmAccount.Button 1Click(Sender: TObject);
begin
Datamodule 2.Clients.Filtered:=false;
Datamodule 2.Clients.Filter:=’VFIO=»’+edit 1.Text+’*»’;
Datamodule 2.Clients.Filtered:=true;
fmClient.show;
label 2.Show;
dbgrid 1.Show;
button 3.Show;
button 4.Show;
end;
procedure TfmAccount.Button 3Click(Sender: TObject);
begin
Список использованной литературы
1.Голицына О., Максимов Н., Попов И. Базы Данных Учебное пособие. М.: ФОРУМ: ИНФРА-М, 2005. 352 стр.
2.Крёнке Д., Теория и практика построения баз данных. 9-е изд. СПб: ПИТЕР, 2005, 859 стр.
3.Фаронов В. Delphi. Программирование на языке высокого уровня: Учебник для вузов СПб: ПИТЕР, 2005. 640 стр.
4.Фаронов В. Программирование баз данных в Delphi. Учебный курс. СПб: ПИТЕР, 2005. 459 стр.