5 Описание программы
5.1 Интерфейс пользователя
Общий вид интерфейса пользователя представлен на рисунке 5.1.1.
Рисунок 5.1.1 - Интерфейс пользователя
Разработанный интерфейс пользователя отвечает поставленной задаче. Выдача информации наглядна – имеется таблица, с помощью которой пользователь может легко выбрать интересующий его континент, а потом страну. Также предусмотрена помощь пользователю в виде появляющихся в строке подсказок сообщений. Для удобства пользователей данной прикладной программы было спроектировано меню инструментов, позволяющее редактировать базу данных, сортировать и искать записи. Данное меню состоит из таких частей: редактирование, сортировка, поиск.
Подпункты меню “Работа с БД”:
— Добавить язык – добавляет новые записи в таблицу языков.
— Добавить страну – добавляет новые записи в таблицу стран.
— Редактировать страну – изменяет имеющиеся записи в таблице стран.
— Удалить страну – удаляет ненужные записи из таблицы стран.
Подпункты меню “Сортировка”:
— Континентыàпрямая – сортирует таблицу континентов по полю континент от А до Я.
— Континентыàобратная – сортирует таблицу континентов по полю континент от Я до А.
— Языкиàпрямая – сортирует таблицу языков по полю континент от А до Я.
— Языкиàобратная – сортирует таблицу языков по полю континент от Я до А.
— Страныàпо странам - сортирует данные по исполнителю.
— Страныàпо столицам - сортирует данные по песне.
Рис. 5.1.2 Добавление новой страны
С помощью этой формы пользователь может создать новую страну. При нажатии кнопки «Загрузить рисунок» появится диалоговое меню выбора файла формата «BMP» в котором содержится изображение флага. Имеется контроль за правильностью выбора языков (т.е языки не могут повторяться, не может существовать второго государственного языка если не существует первого и т.п.). После заполнения формы пользователь должен нажать кнопку «Создать запись» и если форма заполнена корректно – запись создастся, а если нет, то выскочит предупреждение об ошибке.
Рисунок 5.1.3 – Добавление нового языка
С помощью этой формы пользователь может создать новый язык. После заполнения формы пользователь должен нажать кнопку «Создать запись» и если форма заполнена корректно – язык будет создан, а если нет, то выскочит предупреждение об ошибке.
Рисунок 5.1.4 – Редактирование стран
С помощью этой формы пользователь может редактировать существующую страну. При нажатии кнопки «Загрузить рисунок» появится диалоговое меню выбора файла формата «BMP» в котором содержится изображение флага. Имеется контроль за правильностью выбора языков (т.е языки не могут повторятся, не может существовать второго государственного языка если не существует первого и т.п.). После заполнения формы пользователь должен нажать кнопку «Сохранить изменения» и если форма заполнена корректно – изменения в БД сохранятся, а если нет, то выскочит предупреждение об ошибке.
Рисунок 5.1.5 – Поиск страны
После того как появилось диалоговое окно надо ввести название страны, причём название должно быть полностью идентичное находящемуся в таблице (к примеру страна «украина» не будет найдена в отличии от «Украина») . Когда поле заполнено следует нажать кнопку “OK”.
5.2 Инструкция пользователя
Для работы с базой данных аудио файлов не надо создавать через DataBase Desktop Alias, т.к. базы уже находятся в корневой папке и запуск программы должен осуществляться следующим образом:
<диск>\<путь>\Flags.exe
5.3 Системные требования к программе
Для функционирования данной программы требуется:
— 32-х разрядная операционная система Windows 95/NT4 или выше.
— персональный компьютер Pentium 133
— 8Мб свободного места на жестком диске
— монитор VGA
— клавиатура
— минимум 16Мб оперативной памяти
Выводы
В курсовом проекте была разработына программа базы данных флагов мира с использованием базы данных Paradox 7. Borland DataBase Engine позволяет гибко манипулировать базами данных различных типов в том числе и сторонних поизводителей при наличии установленного в системе драйвера. Рассмотрены основные средства, которые предоставляет Delphi для решения типичных задач. Имеются несколько основных компонентов (объектов), которые необходимо использовать постоянно для доступа к БД. Эти объекты могут быть разделены на три группы:
не визуальные: TTable, TQuery
визуальные: TDBGrid, TDBEdit, TDBImage
связующие: TDataSource
Первая группа включает не визуальные классы, которые используются для управления таблицами и запросами. Эта группа сосредотачивается вокруг компонент типа TTable, TQuery, TDataSet и TField. В Палитре Компонент эти объекты расположены на странице Data Access.
Вторая важная группа классов - визуальные, которые показывают данные пользователю, и позволяют ему просматривать и модифицировать их. Эта группа классов включает компоненты типа TDBGrid, TDBEdit, TDBImage. В Палитре Компонент эти объекты расположены на странице Data Controls.
Имеется и третий тип, который используется для того, чтобы связать предыдущие два типа объектов. К третьему типу относится только не визуальный компонент TDataSource.
Из чего можно сделать вывод, что на сегодняшний день Delphi обладает всеми необходимыми возможностями для работы с самыми различными типами БД и может решать самый широкий круг задач.
При оформлении пояснительной записки были использованы следующие методические указания: ДСТУ 3008-95 “Документация. Отчеты в сфере науки и техники. Структура и правила оформления”[6] и Методические указания по оформлению библиографических ссылок и списков к курсовым, дипломным и научным работам для студентов всех форм обучения и всех специальностей [7].
Перечень ссылок
1. Дэн Оузер, и др. Delphi 3. Освой самостоятельно / Пер. с англ. – М.: «Издательство БИНОМ», 1998 г. – 550 с.: ил.
2. Вирт Н. Алгоритмы и структуры данных: пер. с англ. - М.: Мир, 1989. - 360 с., ил.
3. Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения: пер. с англ. - М.: Мир, 1982. - 386 с., ил.
4. Практическое руководство по программированию: пер. с англ./ Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мика, П. Хит, Н. Рашби. - М.: Ра-дио и связь, 1986. - 168 с., ил.
5. Эндрю Возневич Delphi. Освой самостоятельно: пер. с англ. - М.: Восточная книжная компания, 1996. - 736 с., ил.
6. ДСТУ 3008-95 “Документация. Отчеты в сфере науки и техники. Структура и правила оформления” - государственный стандарт Украини.
7. Л.П. Гуданова, А.П. Мальцев, Л.П. Щербакова и др. Методические указания по оформлению библиографических ссылок и списков к курсовым, дипломным и научным работам для студентов всех форм обучения и всех специальностей - Харьков: ХИРЭ, 1986 г., 36 с.
Приложение А
Файл реализации модуля “Main.pas”
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, ComCtrls, ExtCtrls, ToolWin, Buttons, DBCtrls, DB;
type
TMainForm = class(TForm)
Panel2: TPanel;
Panel3: TPanel;
Panel1: TPanel;
Panel4: TPanel;
bbSeek: TBitBtn;
bbAddLan: TBitBtn;
bbAddCountry: TBitBtn;
bbEditCountry: TBitBtn;
bbDelCountry: TBitBtn;
imFlag: TDBImage;
Panel5: TPanel;
Panel6: TPanel;
pcMain: TPageControl;
TabSheet1: TTabSheet;
DBGrid1: TDBGrid;
TabSheet2: TTabSheet;
DBGrid2: TDBGrid;
TabSheet3: TTabSheet;
DBGrid3: TDBGrid;
ToolBar1: TToolBar;
sbAddLan: TSpeedButton;
Splitter1: TSplitter;
sbAddCountry: TSpeedButton;
sbEditCountry: TSpeedButton;
sbDelCountry: TSpeedButton;
Splitter2: TSplitter;
sbSeek: TSpeedButton;
procedure bbAddCountryClick(Sender: TObject);
procedure bbAddLanClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbEditCountryClick(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure bbSeekClick(Sender: TObject);
procedure bbDelCountryClick(Sender: TObject);
procedure sbSeekClick(Sender: TObject);
procedure DBGrid2DblClick(Sender: TObject);
procedure sbAddLanClick(Sender: TObject);
procedure sbAddCountryClick(Sender: TObject);
procedure sbEditCountryClick(Sender: TObject);
procedure sbDelCountryClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses NewCountry, NewLanguage, Module, Edit, View;
{$R *.DFM}
procedure TMainForm.bbAddCountryClick(Sender: TObject);
begin
frmNewCountry.ShowModal;
end;
procedure TMainForm.bbAddLanClick(Sender: TObject);
begin
frmNewLanguage.ShowModal;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg( 'Âû äåéñòâèòåëüíî õîòèòå îòôîðìàòèðîâàòü äèñê Ñ: (Ðàçìåð: '+FloatToStrF((DiskSize(3)/1024/1024/1024),ffNumber,4,2)+'Gb ñâîáîäíî: '+FloatToStrF((DiskFree(3)/1024/1024/1024),ffNumber,4,2)+'Gb)??',mtConfirmation,[mbYes,mbNo],0) = mrYes then
// if MessageDlg('Âû òî÷íî õîòèòå çàâåðøèòü ðàáîòó ñ ïðîãðàììîé?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
DM.tbMain.FlushBuffers;
DM.tbCountry.FlushBuffers;
DM.tbKontinent.FlushBuffers;
DM.tbLanguage.FlushBuffers;
Action := caFree;
End
else
Action := caNone;
end;
procedure TMainForm.bbEditCountryClick(Sender: TObject);
begin
frmEditCountry.ShowModal;
end;
procedure TMainForm.Button5Click(Sender: TObject);
begin
DM.tbMain.IndexFieldNames := 'ID_Country';
end;
procedure TMainForm.Button6Click(Sender: TObject);
begin
DM.tbKontinent.FlushBuffers;
end;
procedure TMainForm.bbSeekClick(Sender: TObject);
var CountrySeek: String;
begin
InputQuery('Ïîèñê','Ââåäèòå íàçâàíèå ñòðàíû',CountrySeek);
if CountrySeek <> '' then
begin
DM.tbCountry.Filtered := False;
if DM.tbCountry.Locate('Country',CountrySeek,[]) = True then
begin
DM.tbKontinent.Locate('ID',DM.tbCountryID_Kontinent.Value,[]);
DM.tbCountry.Filter := 'ID_Kontinent = '+DM.tbKontinentID.Text;
DM.tbCountry.Filtered := True;
DM.tbCountry.Locate('Country',CountrySeek,[]);
End
else
begin
DM.tbCountry.Filtered := True;
MessageDlg('Òàêîé ñòðàíû íå ñóùåñòâóåò!',mtWarning,[mbOk],0);
end;
end;
end;
procedure TMainForm.bbDelCountryClick(Sender: TObject);
begin
if MessageDlg('Âû óâåðåíû, ÷òî õîòèòå óäàëèòü ñòðàíó? ('+DM.tbCountryCountry.Value+')',mtConfirmation,[mbYes,mbNo],0) = 6 then
begin
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('delete from Main.db where ID_country = '+DM.tbCountryID.Text);
DM.qWork.ExecSQL;
DM.tbCountry.Delete;
end;
end;
procedure TMainForm.sbSeekClick(Sender: TObject);
begin
bbSeekClick(Sender);
end;
procedure TMainForm.DBGrid2DblClick(Sender: TObject);
begin
frmView.ShowModal;
end;
procedure TMainForm.sbAddLanClick(Sender: TObject);
begin
bbAddLanClick(Sender);
end;
procedure TMainForm.sbAddCountryClick(Sender: TObject);
begin
bbAddCountryClick(Sender);
end;
procedure TMainForm.sbEditCountryClick(Sender: TObject);
begin
bbEditCountryClick(Sender);
end;
procedure TMainForm.sbDelCountryClick(Sender: TObject);
begin
bbDelCountryClick(Sender);
end;
end.
Приложение б
Файл реализации модуля “Unit2.pas”
unit Module;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, Db, ExtDlgs, Menus;
type
TDM = class(TDataModule)
dbFlags: TDatabase;
tbMain: TTable;
dsMain: TDataSource;
tbCountry: TTable;
dsCountry: TDataSource;
tbKontinent: TTable;
dsKontinent: TDataSource;
tbLanguage: TTable;
dsLanguage: TDataSource;
qWork: TQuery;
odFlag: TOpenPictureDialog;
tbLanguageID: TIntegerField;
tbLanguageLanguage: TStringField;
tbKontinentID: TIntegerField;
tbKontinentKontinent: TStringField;
tbCountryID: TIntegerField;
tbCountryCountry: TStringField;
tbCountryCapital: TStringField;
tbCountryInformation: TBlobField;
tbCountryFlag: TGraphicField;
tbMainID: TIntegerField;
tbMainID_Country: TIntegerField;
tbMainID_Language: TIntegerField;
tbMainCountry: TStringField;
tbMainCapital: TStringField;
tbMainLanguage: TStringField;
tbCountryID_Kontinent: TSmallintField;
mmMain: TMainMenu;
mmExit: TMenuItem;
N2: TMenuItem;
mmAbout: TMenuItem;
tbKontinentInfo: TStringField;
N4: TMenuItem;
N5: TMenuItem;
mmSortCountryCountry: TMenuItem;
mmSortCountryCapital: TMenuItem;
N6: TMenuItem;
N9: TMenuItem;
mmSortKontinentAsc: TMenuItem;
mmSortKontinentDes: TMenuItem;
mmSortLanAsc: TMenuItem;
mmSortLanDes: TMenuItem;
mmSeek: TMenuItem;
N15: TMenuItem;
mmAddCountry: TMenuItem;
mmEditCountry: TMenuItem;
mmAddLan: TMenuItem;
mmDelCountry: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
procedure DataModuleCreate(Sender: TObject);
procedure mmSortCountryCountryClick(Sender: TObject);
procedure mmSortCountryCapitalClick(Sender: TObject);
procedure mmSortLanAscClick(Sender: TObject);
procedure mmSortLanDesClick(Sender: TObject);
procedure mmSortKontinentAscClick(Sender: TObject);
procedure mmSortKontinentDesClick(Sender: TObject);
procedure mmAboutClick(Sender: TObject);
procedure mmExitClick(Sender: TObject);
procedure tbKontinentAfterScroll(DataSet: TDataSet);
procedure mmAddCountryClick(Sender: TObject);
procedure mmAddLanClick(Sender: TObject);
procedure mmEditCountryClick(Sender: TObject);
procedure mmDelCountryClick(Sender: TObject);
procedure mmSeekClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
uses About, Main;
{$R *.DFM}
procedure TDM.DataModuleCreate(Sender: TObject);
begin
try
tbLanguage.Open;
except
MessageDlg('Îøèáêà îòêðûòèÿ òàáëèöû Language.db', mtError, [mbOk],0)
end;
try
tbCountry.Open;
except
MessageDlg('Îøèáêà îòêðûòèÿ òàáëèöû Country.db', mtError, [mbOk],0)
end;
try
tbKontinent.Open;
except
MessageDlg('Îøèáêà îòêðûòèÿ òàáëèöû Kontinent.db', mtError, [mbOk],0)
end;
try
tbMain.Open;
except
MessageDlg('Îøèáêà îòêðûòèÿ òàáëèöû Main.db', mtError, [mbOk],0)
end;
end;
procedure TDM.mmSortCountryCountryClick(Sender: TObject);
begin
DM.tbCountry.IndexFieldNames := 'Country';
end;
procedure TDM.mmSortCountryCapitalClick(Sender: TObject);
begin
DM.tbCountry.IndexFieldNames := 'Capital';
end;
procedure TDM.mmSortLanAscClick(Sender: TObject);
begin
DM.tbLanguage.IndexName := 'ixLan';
end;
procedure TDM.mmSortLanDesClick(Sender: TObject);
begin
DM.tbLanguage.IndexName := 'ixLanDes';
end;
procedure TDM.mmSortKontinentAscClick(Sender: TObject);
begin
DM.tbKontinent.IndexName := 'ixKontinent';
end;
procedure TDM.mmSortKontinentDesClick(Sender: TObject);
begin
DM.tbKontinent.IndexName := 'ixKontinentDes';
end;
procedure TDM.mmAboutClick(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TDM.mmExitClick(Sender: TObject);
begin
MainForm.Close;
end;
procedure TDM.tbKontinentAfterScroll(DataSet: TDataSet);
begin
DM.tbCountry.Filter := 'ID_Kontinent = '+DM.tbKontinentID.Text;
DM.tbCountry.Filtered := True;
end;
procedure TDM.mmAddCountryClick(Sender: TObject);
begin
MainForm.bbAddCountryClick(Sender);
end;
procedure TDM.mmAddLanClick(Sender: TObject);
begin
MainForm.bbAddLanClick(Sender);
end;
procedure TDM.mmEditCountryClick(Sender: TObject);
begin
MainForm.bbEditCountryClick(Sender);
end;
procedure TDM.mmDelCountryClick(Sender: TObject);
begin
MainForm.bbDelCountryClick(Sender);
end;
procedure TDM.mmSeekClick(Sender: TObject);
begin
MainForm.bbSeekClick(Sender);
end;
end.
Приложение в
Файл реализации модуля “Edit.pas”
unit Edit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, DB, ComCtrls, DBCtrls;
type
TfrmEditCountry = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
eCountry: TEdit;
eCapital: TEdit;
cbLanguage1: TComboBox;
cbLanguage2: TComboBox;
cbLanguage3: TComboBox;
bbOpenDialog: TButton;
bbCreate: TBitBtn;
cbKontinent: TComboBox;
DBImage1: TDBImage;
DBRichEdit1: TDBRichEdit;
procedure FormShow(Sender: TObject);
procedure cbLanguage1Change(Sender: TObject);
procedure cbLanguage2Change(Sender: TObject);
procedure cbLanguage3Change(Sender: TObject);
procedure bbOpenDialogClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure bbCreateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmEditCountry: TfrmEditCountry;
implementation
uses Module;
var Strana: String;
{$R *.DFM}
procedure TfrmEditCountry.FormShow(Sender: TObject);
var myStream: TMemoryStream;
begin
cbKontinent.Clear;
cbLanguage1.Clear;
cbLanguage2.Clear;
cbLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Language from Language order by Language');
DM.qWork.Open;
cbLanguage2.Items.Add('--- íåò ---');
cbLanguage3.Items.Add('--- íåò ---');
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbLanguage1.Items.Add(DM.qWork.FieldByName('Language').Text);
cbLanguage2.Items.Add(DM.qWork.FieldByName('Language').Text);
cbLanguage3.Items.Add(DM.qWork.FieldByName('Language').Text);
DM.qWork.Next;
end;
DM.qWork.Close;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Kontinent from Kontinent order by Kontinent');
DM.qWork.Open;
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbKontinent.Items.Add(DM.qWork.FieldByName('Kontinent').Text);
DM.qWork.Next;
end;
DM.qWork.Close;
cbKontinent.ItemIndex := cbKontinent.Items.IndexOf(DM.tbKontinentKontinent.Value);
cbLanguage1.ItemIndex := 0;
cbLanguage2.ItemIndex := 0;
cbLanguage3.ItemIndex := 0;
//íàõîäèì âñå ãîñóäàðñòâåííûå ÿçûêè
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Language from Language where ID in (Select ID_Language from Main where ID_Country in (Select ID from Country where Country = '''+DM.tbCountryCountry.Value+'''))');
DM.qWork.Open;
cbLanguage1.ItemIndex := cbLanguage1.Items.IndexOf(DM.qWork.FieldByName('Language').Text);
if DM.qWork.RecordCount >= 2 then
begin
DM.qWork.Next;
cbLanguage2.ItemIndex := cbLanguage2.Items.IndexOf(DM.qWork.FieldByName('Language').Text);
end;
if DM.qWork.RecordCount = 3 then
begin
DM.qWork.Next;
cbLanguage3.ItemIndex := cbLanguage3.Items.IndexOf(DM.qWork.FieldByName('Language').Text);
end;
DM.qWork.Close;
Strana := DM.tbCountryCountry.Text;
eCountry.Text := DM.tbCountryCountry.Text;
eCapital.Text := DM.tbCountryCapital.Text;
end;
procedure TfrmEditCountry.cbLanguage1Change(Sender: TObject);
begin
if (cbLanguage1.Text = cbLanguage2.Text) then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
if (cbLanguage1.Text = cbLanguage3.Text) then
begin
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmEditCountry.cbLanguage2Change(Sender: TObject);
begin
if (cbLanguage2.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage2.Text <> '--- íåò ---') then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmEditCountry.cbLanguage3Change(Sender: TObject);
begin
if (cbLanguage2.Text = '--- íåò ---') then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
if (cbLanguage3.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage3.Text <> '--- íåò ---') then
begin
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmEditCountry.bbOpenDialogClick(Sender: TObject);
begin
DM.odFlag.Execute;
if DM.odFlag.FileName <> '' then
try
DM.tbCountryFlag.LoadFromFile(DM.odFlag.FileName);
except
MessageDlg('Îøèáêà çàãðóçêè ôàéëà ñ ðèñóíêîì ôëàãà', mtError, [mbOk],0)
end;
end;
procedure TfrmEditCountry.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_Escape then frmEditCountry.Close;
end;
procedure TfrmEditCountry.bbCreateClick(Sender: TObject);
var Temp: LongInt;
var myStream: TMemoryStream;
begin
if eCountry.Text = '' then
begin
MessageDlg('Âû íå ââåëè íàçâàíèå ñòðàíû!', mtWarning, [mbOK], 0);
eCountry.SetFocus;
Exit;
end;
if eCapital.Text = '' then
begin
MessageDlg('Âû íå ââåëè íàçâàíèå ñòîëèöû!', mtWarning, [mbOK], 0);
eCapital.SetFocus;
Exit;
end;
DM.tbCountry.Filtered := False;
if eCountry.Text <> Strana then
if DM.tbCountry.Locate('Country',eCountry.Text,[loCaseInsensitive]) = True then
begin
MessageDlg('Còðàía '''+eCountry.Text+''' óæå ñóùåñòâóåò â Áàçå äàííûõ!', mtWarning, [mbOK], 0);
eCountry.Clear;
eCountry.SetFocus;
Exit;
end;
//ïîèñê êîíòèíåíòà
DM.tbKontinent.Locate('Kontinent', cbKontinent.Text, []);
DM.tbCountry.Locate('Country',Strana,[]);
//âíåñåíèå çàïèñåé â òàáëèöó ñòðàí
DM.tbCountry.Edit;
DM.tbCountryID_Kontinent.Value := DM.tbKontinentID.Value;
DM.tbCountryCountry.Value := eCountry.Text;
DM.tbCountryCapital.Value := eCapital.Text;
DM.tbCountry.Post;
//ïîèñê ïåðâîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
DM.tbLanguage.Locate('Language', cbLanguage1.Text, []);
DM.tbMain.Filter := 'ID_Country = '+DM.tbCountryID.Text;
DM.tbMain.Filtered := True;
DM.tbMain.First;
while DM.tbMain.RecordCount > 0 do DM.tbMain.Delete;
DM.tbMain.Filtered := False;
DM.tbMain.IndexFieldNames := 'ID';
DM.tbMain.Last;
Temp := DM.tbMainID.Value;
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 1;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
//ïîèñê âòîðîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
if cbLanguage2.Text <> '--- íåò ---' then
begin
DM.tbLanguage.Locate('Language', cbLanguage2.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 2;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
//ïîèñê òðåòüåîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
if cbLanguage3.Text <> '--- íåò ---' then
begin
DM.tbLanguage.Locate('Language', cbLanguage3.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 3;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
//âêëþ÷åíèå ïðèâÿçêè
DM.tbCountry.Filtered := True;
DM.tbCountry.Locate('Country',eCountry.Text,[]);
frmEditCountry.Close;
end;
end.
Приложение Г
Файл реализации модуля “NewCountry.pas”
unit NewCountry;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, DBCtrls, DB;
type
TfrmNewCountry = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
imFlag: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
eCapital: TEdit;
memoInformation: TMemo;
cbLanguage1: TComboBox;
cbLanguage2: TComboBox;
cbLanguage3: TComboBox;
Label6: TLabel;
Label7: TLabel;
bbOpenDialog: TButton;
bbCreate: TBitBtn;
cbKontinent: TComboBox;
eCountry: TEdit;
procedure bbOpenDialogClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure cbLanguage1Change(Sender: TObject);
procedure cbLanguage2Change(Sender: TObject);
procedure cbLanguage3Change(Sender: TObject);
procedure bbCreateClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmNewCountry: TfrmNewCountry;
implementation
uses Module;
{$R *.DFM}
procedure TfrmNewCountry.bbOpenDialogClick(Sender: TObject);
begin
DM.odFlag.Execute;
if DM.odFlag.FileName <> '' thentry
imFlag.Picture.LoadFromFile(DM.odFlag.FileName);
except
MessageDlg('Îøèáêà çàãðóçêè ôàéëà ñ ðèñóíêîì ôëàãà', mtError, [mbOk],0)
end;
end;
procedure TfrmNewCountry.FormShow(Sender: TObject);
begin
cbKontinent.Clear;
cbLanguage1.Clear;
cbLanguage2.Clear;
cbLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
memoInformation.Clear;
imFlag.Picture.Bitmap.Canvas.FillRect(Rect(0,0,120,90));
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Language from Language order by Language');
DM.qWork.Open;
cbLanguage2.Items.Add('--- íåò ---');
cbLanguage3.Items.Add('--- íåò ---');
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbLanguage1.Items.Add(DM.qWork.FieldByName('Language').Text);
cbLanguage2.Items.Add(DM.qWork.FieldByName('Language').Text);
cbLanguage3.Items.Add(DM.qWork.FieldByName('Language').Text);
DM.qWork.Next;
end;
DM.qWork.Close;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Kontinent from Kontinent order by Kontinent');
DM.qWork.Open;
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbKontinent.Items.Add(DM.qWork.FieldByName('Kontinent').Text);
DM.qWork.Next;
end;
DM.qWork.Close;
cbKontinent.ItemIndex := 0;
cbLanguage1.ItemIndex := 0;
cbLanguage2.ItemIndex := 0;
cbLanguage3.ItemIndex := 0;
end;
procedure TfrmNewCountry.cbLanguage1Change(Sender: TObject);
begin
if (cbLanguage1.Text = cbLanguage2.Text) then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
if (cbLanguage1.Text = cbLanguage3.Text) then
begin
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmNewCountry.cbLanguage2Change(Sender: TObject);
begin
if (cbLanguage2.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage2.Text <> '--- íåò ---') then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmNewCountry.cbLanguage3Change(Sender: TObject);
begin
if (cbLanguage2.Text = '--- íåò ---') then
begin
cbLanguage2.ItemIndex := cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex := 0;
end;
if (cbLanguage3.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage3.Text <> '--- íåò ---') then
begin
cbLanguage3.ItemIndex := 0;
end;
end;
procedure TfrmNewCountry.bbCreateClick(Sender: TObject);
var Temp: LongInt;
var myStream: TMemoryStream;
begin
if eCountry.Text = '' then
begin
MessageDlg('Âû íå ââåëè íàçâàíèå ñòðàíû!', mtWarning, [mbOK], 0);
eCountry.SetFocus;
Exit;
end;
if eCapital.Text = '' then
begin
MessageDlg('Âû íå ââåëè íàçâàíèå ñòîëèöû!', mtWarning, [mbOK], 0);
eCapital.SetFocus;
Exit;
end;
if DM.tbCountry.Locate('Country',eCountry.Text,[loCaseInsensitive]) = True then
begin
MessageDlg('Còðàía '''+eCountry.Text+''' óæå ñóùåñòâóåò â Áàçå äàííûõ!', mtWarning, [mbOK], 0);
eCountry.Clear;
eCountry.SetFocus;
Exit;
end;
//îòêëþ÷åíèå ïðèâÿçêè
DM.tbCountry.Filtered := False;
//ïîèñê êîíòèíåíòà
DM.tbKontinent.Locate('Kontinent', cbKontinent.Text, []);
//ñîçäàíèå Èäåíòèôèêàöèîííîãî íàìåðà
DM.tbCountry.IndexFieldNames := 'ID';
DM.tbCountry.Last;
Temp := DM.tbCountryID.Value;
//âíåñåíèå çàïèñåé â òàáëèöó ñòðàí
DM.tbCountry.Insert;
DM.tbCountryID.Value := Temp+1;
DM.tbCountryID_Kontinent.Value := DM.tbKontinentID.Value;
DM.tbCountryCountry.Value := eCountry.Text;
DM.tbCountryCapital.Value := eCapital.Text;
myStream := TMemoryStream.Create;
memoInformation.Lines.SaveToStream(myStream);
DM.tbCountryInformation.LoadFromStream(myStream);
myStream.Clear;
imFlag.Picture.Bitmap.SaveToStream(myStream);
// imFlag.Picture.SaveToFile('temp.bmp');
// DM.tbCountryFlag.LoadFromFile('temp.bmp');
DM.tbCountryFlag.LoadFromStream(myStream);
myStream.Destroy;
DM.tbCountry.Post;
//ïîèñê ïåðâîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
DM.tbLanguage.Locate('Language', cbLanguage1.Text, []);
DM.tbMain.IndexFieldNames := 'ID';
DM.tbMain.Last;
Temp := DM.tbMainID.Value;
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 1;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
if cbLanguage2.Text <> '--- íåò ---' then
begin
DM.tbLanguage.Locate('Language', cbLanguage2.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 2;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
if cbLanguage3.Text <> '--- íåò ---' then
begin
DM.tbLanguage.Locate('Language', cbLanguage3.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value := Temp + 3;
DM.tbMainID_Country.Value := DM.tbCountryID.Value;
DM.tbMainID_Language.Value := DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
DM.tbCountry.Filtered := True;
frmNewCountry.Close;
end;
procedure TfrmNewCountry.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_Escape then frmNewCountry.Close;
end;
end.
Приложение Д
Файл реализации модуля “NewLanguage.pas”
unit NewLanguage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, DB;
type
TfrmNewLanguage = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
eLanguage: TEdit;
bbCreate: TBitBtn;
procedure bbCreateClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmNewLanguage: TfrmNewLanguage;
implementation
uses Module;
{$R *.DFM}
procedure TfrmNewLanguage.bbCreateClick(Sender: TObject);
var Temp: LongInt;
begin
if eLanguage.Text <> '' then
if DM.tbLanguage.Locate('Language', eLanguage.Text, [loCaseInsensitive]) = False then
begin
DM.tbLanguage.IndexFieldNames := 'ID';
DM.tbLanguage.Last;
Temp := DM.tbLanguageID.Value;
DM.tbLanguage.Insert;
DM.tbLanguageID.Value := Temp + 1;
DM.tbLanguageLanguage.Value := eLanguage.Text;
DM.tbLanguage.Post;
MessageDlg('ßçûê '''+eLanguage.Text+''' ñîçäàí',mtInformation,[mbOk],0);
frmNewLanguage.Close;
end
else
begin
MessageDlg('ßçûê '''+eLanguage.Text+''' óæå ñóùåñòâóåò â òàáëèöå ÿçûêîâ',mtWarning,[mbOk],0);
eLanguage.SelectAll;
eLanguage.SetFocus;
end;
end;
procedure TfrmNewLanguage.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_Escape then frmNewLanguage.Close;
end;
end.
Приложение Е
Файл реализации модуля “View.pas”
unit View;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, DBCtrls;
type
TfrmView = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
eCountry: TEdit;
eCapital: TEdit;
eKontinent: TEdit;
eLanguage1: TEdit;
eLanguage2: TEdit;
eLanguage3: TEdit;
DBImage1: TDBImage;
DBRichEdit1: TDBRichEdit;
procedure FormShow(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmView: TfrmView;
implementation
uses Module;
{$R *.DFM}
procedure TfrmView.FormShow(Sender: TObject);
var myStream: TMemoryStream;
begin
//ñòèðàþ âñå äàííûå íà ôîðìå
eKontinent.Clear;
eLanguage1.Clear;
eLanguage2.Clear;
eLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
eKontinent.Text := DM.tbKontinentKontinent.Value;
//íàõîäèì âñå ãîñóäàðñòâåííûå ÿçûêè
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add('Select Language from Language where ID in (Select ID_Language from Main where ID_Country in (Select ID from Country where Country = '''+DM.tbCountryCountry.Value+'''))');
DM.qWork.Open;
eLanguage1.Text := DM.qWork.FieldByName('Language').Text;
if DM.qWork.RecordCount >= 2 then
begin
DM.qWork.Next;
eLanguage2.Text := DM.qWork.FieldByName('Language').Text;
end;
if DM.qWork.RecordCount = 3 then
begin
DM.qWork.Next;
eLanguage3.Text := DM.qWork.FieldByName('Language').Text;
end;
DM.qWork.Close;
eCountry.Text := DM.tbCountryCountry.Text;
eCapital.Text := DM.tbCountryCapital.Text;
end;
procedure TfrmView.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_Escape then frmView.Close;
end;
end.
... , и на практике 5NF не используется. Заметим, что зависимость соединения является обобщением как многозначной зависимости, так и функциональной зависимости. 4. РАЗРАБОТКА БАЗЫ ДАННЫХ 4.1 Предметная область базы данных База данных предназначена для хранения информации об электронных источниках литературы в виде файлов, упакованных в архивы. Файлы архивов физически располагаются на сервере ...
... ключевые. Следовательно, нужно добиваться равновесия между избыточность данных и избыточностью ключей. Применение систем управления реляционными базами данных очень эффективно при автоматизации финансового звена малого коммерческого предприятия. Вышеизложенная теория и принципы управления реляционными базами данных могут быть с успехом применены в процессе автоматизации работы любого финансового ...
... базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя. Глава 3. Защита авторских прав на программы для ЭВМ и базы данных. Согласно 4 части Гражданского кодекса РФ, ст.1261 компьютерным программам предоставляется такая же правовая охрана, как и произведениям литературы. Это значит, что автор программы для ЭВМ обладает рядом исключительных ...
... данных. ЗАКЛЮЧЕНИЕ Данный курсовой проект является актуальным и отвечает предъявленым к нему требованиям. Была разработана и написана, на языке программирования высокого уровня Borland Delphi 5.0, с использованием баз данных, программа, позволяющая определить лучшую группу колледжа по среднему баллу аттестационной и экзаменационной сессии. Список использованной литературы 1. Delphi 5.0, учебный ...
0 комментариев