2.2.4 Розробка фізичної схеми бази даних
Таким чином,остаточна схема бази даних „Кафедра” виглядає так, як це зображено на рис.10.
Рис.10.
Схема даних маєзв’язки типу „Один-до-багатьох”.
3. .Інтерфейс користувача інформаціїної системи
Інтерфейскористувача – це зручний засіб спілкування з даними який дозволяє швидкозробити певну дію не використовуя ніяких особових команд.
Схема алгоритмудоступу до БД і меню наведена на рис.11.
Рис.11. Схемаалгоритму.
Інтерфейс задопомогою технології MDI у Windows реалізується наступним чином (рис.12):
Рис.12.
Меню „Файл” маєпідменю „Знищити об’єкт” (деяку таблицю).
Меню„Редагування” має підменю „Додати новий запис”, „”Знищити запис”, „На останнійзапис”.
Меню „Сервіс” маєпідменю „Доступ до даних” (відкриття сторінки доступу до даних через Інтернет).
Меню „Вихід”здійснює вихід з інформаційної системи зі збереженням усіх даних.
4. Програмні додатки, які реалізують пункт меню
Модуль реалізаціїменю у вікнах MDI наведений у лістингу 1.
Лістинг 1
unit MainFrm;
interface
uses
WinTypes,WinProcs, Classes, Graphics, Forms, Controls, Menus,
StdCtrls,Messages, Dialogs, SysUtils, ComCtrls,
ToolWin, ExtCtrls, Buttons, ImgList;
type
TMainForm =class(TForm)
mmMain:TMainMenu;
OpenDialog:TOpenDialog;
mmiFile:TMenuItem;
mmiExit:TMenuItem;
N3: TMenuItem;
mmiOpen:TMenuItem;
mmiNew:TMenuItem;
mmiWindow:TMenuItem;
mmiArrangeIcons:TMenuItem;
mmiCascade:TMenuItem;
mmiTile:TMenuItem;
mmiCloseAll:TMenuItem;
tlbMain:TToolBar;
ilMain:TImageList;
tbFileOpen:TToolButton;
{ File EventHandlers }
proceduremmiNewClick(Sender: TObject);
proceduremmiOpenClick(Sender: TObject);
proceduremmiExitClick(Sender: TObject);
{ Window EventHandlers }
proceduremmiTileClick(Sender: TObject);
proceduremmiArrangeIconsClick(Sender: TObject);
proceduremmiCascadeClick(Sender: TObject);
proceduremmiCloseAllClick(Sender: TObject);
public
{ User definedmethods }
procedureOpenTextFile(EditForm: TForm; Filename: string);
procedureOpenBMPFile(FileName: String);
procedure Open MDBFile(RTFForm:TForm; FileName: string);
procedureSetToolBar(AToolBar: TToolBar);
end;
var
MainForm:TMainForm;
implementation
uses MDIBmpFrm,MdiEditFrm, MdiRtfFrm, FTypForm;
const
{ Defineconstants to represent file name extensions }
BMPExt ='.BMP'; // Bitmapped file
TextExt ='.TXT'; // Text file
RTFExt = '.MDB'; // File BD
{$R *.DFM}
procedureTMainForm.mmiNewClick(Sender: TObject);
begin
{ Determine thefile type the user wishes to open by calling the
GetFileTypefunction. Call the appropriate method based on the
retrieved filetype. }
case GetFileTypeof
mrTXT:OpenTextFile(nil, ''); // Open a text file.
mrMDB: OpenMDBFile(nil,''); // Open an MDB file.
mrBMP:
begin
{ Set thedefalt filter for OpenDialog1 for BMP files. }
OpenDialog.FilterIndex := 2;
mmiOpenClick(nil);
end;
end;
end;
procedureTMainForm.mmiOpenClick(Sender: TObject);
var
Ext: string[4];
begin
{ Call theappropriate method based on the file type of the file
selected fromOpenDialog1 }
ifOpenDialog.Execute then
begin
{ Get the file'sextension and compare it to determine the
file type theuser is opening. Call the appropriate method and
pass in the filename. }
Ext :=ExtractFileExt(OpenDialog.FileName);
ifCompareStr(UpperCase(Ext), TextExt) = 0 then
OpenTextFile(ActiveMDIChild,OpenDialog.FileName)
else ifCompareStr(UpperCase(Ext), BMPExt) = 0 then
OpenBMPFile(OpenDialog.FileName)
else ifCompareStr(UpperCase(Ext), MDBExt) = 0 then
Open MDBFile(ActiveMDIChild,OpenDialog.FileName);
end;
end;
procedureTMainForm.mmiExitClick(Sender: TObject);
begin
Close;
end;
{ Window EventHandlers }
procedureTMainForm.mmiTileClick(Sender: TObject);
begin
Tile;
end;
procedureTMainForm.mmiArrangeIconsClick(Sender: TObject);
begin
ArrangeIcons;
end;
procedureTMainForm.mmiCascadeClick(Sender: TObject);
begin
Cascade;
end;
procedureTMainForm.mmiCloseAllClick(Sender: TObject);
var
i: integer;
begin
{ Close all formsin revers order as they appear in the
MDIChildrenproperty. }
for i :=MdiChildCount - 1 downto 0 do
MDIChildren[i].Close;
end;
{ User DefinedMethods }
procedureTMainForm.OpenTextFile(EditForm: TForm; FileName: string);
begin
{ If EditForm isof a TEditForm type, then give the user the option
of loading thefile contents into this form. Otherwise, create a
new TEditForminstance and load the file into that instance }
if (EditForm<> nil) and (EditForm is TMdiEditForm) then
if MessageDlg('Loadfile into current form?', mtConfirmation,
[mbYes, mbNo], 0)= mrYes then
begin
TMdiEditForm(EditForm).OpenFile(FileName);
Exit;
end;
{ Create a newTEditForm and call its OpenFile() method }
withTMdiEditForm.Create(self) do
if FileName<> '' then
OpenFile(FileName)
end;
procedureTMainForm.OpenMDBFile(MDBForm: TForm; FileName: string);
begin
{ If MDBForm isof a TMDBForm type, then give the user the option
of loading thefile contents into this form. Otherwise, create a
new TMDBForminstance and load the file into that instance }
if (MDBForm<> nil) and (MDBForm is TMdiMDBForm) then
ifMessageDlg('Load file into current form?', mtConfirmation,
[mbYes, mbNo], 0)= mrYes then begin
(MDBForm asTMdiMDBForm).OpenFile(FileName);
Exit;
end;
{ Create a new TMDBFormand call its OpenFile() method }
with TMdiMDBForm.Create(self)do
if FileName<> '' then
OpenFile(FileName);
end;
procedureTMainForm.OpenBMPFile(FileName: String);
begin
{ Create a newTBMPForm instances and load a BMP file into it. }
withTMdiBmpForm.Create(self) do
OpenFile(FileName);
end;
procedureTMainForm.SetToolBar(AToolBar: TToolBar);
begin
if (MDIChildCount= 1) and (AToolBar = nil) then
tlbMain.Parent :=self
else begin
tlbMain.Parent :=nil;
if not (AToolBar= nil) then
AToolBar.Parent:= self;
end;
end;
end.
Контрольнийприклад роботи випливаючого меню наведено на рис.13.
Рис.13.
Для доступу до БДв локальній мережі та через інтернет розроблена сторінка доступу до даних, якаможе бути розміщена на сервері.
Поперше нижскористатися пунктами випливаючого меню, необхідно закрити форму (кнопка„Закрити форму”), яка зявляється автоматично при відкритті БД „Кафедра”, так якменю демонструє команди на прикладі цієї форми.
5. Запити на мові SQL. Структура бази даних
5.1 Структура БД„Кафедра” наведена на наступному рис.14.
Рис 14.
5.2 Запити до бази даних і відповіді на них
Запит на вибіркуз БД інформації, для заповнення таблиці за №групи1 та №групи5 мовою SQL:
SELECT [Base1].[№ кафедри], [Base 1].[№ групи 1], [Base 1].[№ групи 5]
FROM [Base 1]
WHERE ((([Base1].[№ групи 1]) Like "C*#") AND (([Base 1].[№ групи 5]) Like"C*#"));
Запит 1 у режимітаблиці (рис.15):
Рис.15.
Запит 2 з використаннямвнутрішнього підзапиту мовою SQL:
TRANSFORMFirst([Base 1].[№ групи 1]) AS [First-№ групи 1]
SELECT [Base1].[№ кафедри], First([Base 1].[№ групи 1]) AS [Итоговое значение № групи 1]
FROM [Base 1]
GROUP BY [Base1].[№ кафедри]
PIVOT [Base 1].[№групи 2];
Запит з використаннямвнутрішнього підзапиту у режимі таблиці (рис.16):