Связь позволяет моделировать отношения между объектами предметной области. Наименование связи должно быть уникально во всей модели.
Существует 4 типа связей:
1. «Один-к-одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, и наоборот. (Рисунок 1.1)
Рисунок 1.1 – Один-к-одному.
2. «Один-ко-многим» - любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, но любому экземпляру сущности В соответствует только один экземпляр сущности А. (Рисунок 1.2)
Рисунок 1.2 – Один-ко-многим.
3. «Многие-к-одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, но любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А. (Рисунок 1.3)
Рисунок 1.3 – Многие-к-одному.
4. «Многие-ко-многим» - любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, и любому экземпляру сущности В соответствует 0, 1 или несколько экземпляров сущности А. (Рисунок 1.4)
Рисунок 1.4 – Многие-ко-многим.
Технология разработки приложения
Создание псевдонима
Алиас заменен на функцию которая принимает значение имени базы и привязывает к нужной таблице.
Структура таблиц
Таблица2.1 –Отраслевая деятельность.
Атрибут | Тип | Описание |
Наименование организации | Text | Наименование организации |
Отраслевая деятельность | Text | Отраслевая деятельность |
Вид продукта | Text | Вид продукта |
Оперативная информация | Text | Оперативная информация |
Преобретается | Text | Преобретается |
Продается | Text | Продается |
Таблица 2.2 –Расценки.
Атрибут | Тип | Описание |
Название организации | Text | Название организации |
Кол-во предприятий | Short | Кол-во предприятий |
Страна | Text | Страна |
Город | Text | Город |
Точный адрес | Text | Точный адрес |
Телефон | Text | Телефон |
Факс | Text | Факс |
Дата регистрации | date | Дата регистрации |
|
Таблица 2.3 –Рекламодатели.
Атрибут | Тип | Описание |
Наименование | Text | Наименование |
Дата | Date | Дата |
Описание экранных форм
В разработке форм ввода вывода данных использовались следующие компоненты Delphi:
1. Form – компонент-форма для отображения всех компонентов ввода вывода,
2. DBEdit – компонент-окно ввода информации,
3. DBComboBox – компонент выпадающий список для ввода информации,
4. DBGrid – компонент-таблица для вывода информации,
5. Label – компонент-метка для отображения названия окон ввода информации,
6. DateTimePicker – компонент-календарь для ввода даты,
7. Button – компонент-кнопка для вызова событий ввода информации.
Навигация по модулям приложения осуществляется посредством меню модуля Main. Интерфейс разработанных модулей можно отнести к стандартному интерфейсу Windows.
Для добавления, редактирования и удаления данных применяются формы с элементами управления модулей В каждой форме присутствуют таблицы базы данных, которые отображают информацию в виде сетки. На формах можно редактировать, добавлять и удалять записи с использованием навигационного интерфейса DBNavigator .
В таблице 2.4 Приведено описание каждой из кнопок данного элемента.
Таблица 2.4 - Кнопки компонента DBNavigator
Кнопка | Назначение | Действие |
К первой | Указатель текущей записи перемещается к первой записи файла данных | |
К предыдущей | Указатель текущей записи перемещается к предыдущей записи файла данных | |
К следующей | Указатель текущей записи перемещается к следующей записи файла данных | |
К последней | Указатель текущей записи перемещается к последней записи файла данных | |
Добавить | В файл данных добавляется новая запись | |
Удалить | Удаляется текущая запись файла данных | |
Редактирование | Устанавливает режим редактирования текущей записи | |
Сохранить | Изменения, внесенные в текущую запись, записываются в файл данных | |
Отменить | Отменяет внесенные в текущую запись изменения | |
Обновить | Записывает внесенные изменения в файл |
2.4 Интерфейс пользователя
|
Тип проекта - клиент-серверный. Клиентская часть разработана в среде быстрой разработки приложений Delphi 7. Серверная часть реализована в СУБД Paradox.
При разработке АИС учета документооборота предприятия использовался метод объектно-ориентированного программирования. Разработка программы велась с использованием в качестве объектов готовых компонент ввода вывода данных Delphi 7, связь и отображение данных сервера осуществляется посредством следующих компонентов вкладки BDE:
1. Компонент Database, с помощью этого компонента настраивается подключение к БД.
2. Table соединяется с компонентом базой с помощью настройки свойства DatabaseName. Компонент предназначен для получения набора записей из таблицы БД, которая записана в свойство TableName;
3. DataSource – компонент является промежуточным звеном между Table и DBGrid. Связан с Table свойством DataSet.
4. DBGrid – компонент отображает таблицу БД. Связан с DataSource свойством DataSource.
При запуске программы появляется главная форма программы. Данная форма является основной. На ней находится вся функциональная часть. Рис.2.1.
|
Рис. 2.1 – Начало программы.
Рис. 2.1 – Основная часть.
Тестовый пример США
Сортировка по стране- рис 2.3.
Рис. 2.3 – Сортировка по стране.
Найдем все записи где страна равна «СшА». Рис. 2.4.
Рис. 2.4–Фильтр.
Поиск успешно выполнен.
2.5Листингпрограммы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls, Grids, DBGrids, Menus, XPMan, ExtCtrls,
DBCtrls, ImgList, TeeProcs, TeEngine, Chart, DbChart, Series;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
DBGrid1: TDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
DBNavigator1: TDBNavigator;
Label1: TLabel;
ComboBox2: TComboBox;
Button1: TButton;
N10: TMenuItem;
N11: TMenuItem;
Edit1: TEdit;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button3: TButton;
N12: TMenuItem;
Label5: TLabel;
Label6: TLabel;
N13: TMenuItem;
DBChart1: TDBChart;
Series1: TBarSeries;
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedure N7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedureConnectToBase(var Table: TTable; NameBase: string; IndexBox: TComboBox;
NameBox: TComboBox; Grid: TDBGrid; DataSoure: TDataSource; DBNavigator: TDBNavigator);
var i: Byte;
ConnectPuth: string;
begin
ConnectPuth:='';
with Table do
begin
if Active then Active:=not Active;
ConnectPuth:=extractfilepath(application.exename)+'db\'+NameBase;
TableName:=ConnectPuth;
IndexDefs.Update;
IndexBox.Clear;
IndexBox.Text:= 'Индексы для сортировки';
NameBox.Clear;
NameBox.Text:= 'Выберите парметр Фильтра';
for i:=0 to IndexDefs.Count-1 do
IndexBox.Items.Add(IndexDefs[i].Name);
DataSoure.DataSet:=Table;
Active:=not Active;
end;
DBNavigator.DataSource:=DataSoure;
Grid.DataSource:=DataSoure;
for i:=0 to Grid.Columns.Count-1 do
NameBox.Items.Add(Grid.Fields[i].DisplayName);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
ConnectToBase(DataModule2.table1, 'Наименование.db', ComboBox1, ComboBox2, DBGrid1, DataModule2.DataSource1, DBNavigator1);
DBGrid1.Hint:='';
end;
procedure TForm1.N4Click(Sender: TObject);
begin
ConnectToBase(DataModule2.table2, 'Отраслеваядеятельность.db', ComboBox1, ComboBox2, DBGrid1, DataModule2.DataSource2, DBNavigator1);
DBGrid1.Hint:='';
end;
procedure TForm1.N5Click(Sender: TObject);
begin
ConnectToBase(DataModule2.table3, 'Квартальныйотчет.db', ComboBox1, ComboBox2, DBGrid1, DataModule2.DataSource3, DBNavigator1);
DBGrid1.Hint:='';
end;
procedure TForm1.N9Click(Sender: TObject);
begin
Label5.Visible:= not Label5.Visible;
ComboBox1.Visible:= not ComboBox1.Visible;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
ComboBox2.Visible:= not ComboBox2.Visible;
Edit1.Visible:= not Edit1.Visible;
Button1.Visible:= not Button1.Visible;
Button2.Visible:= not Button2.Visible;
Label6.Visible:= not Label6.Visible;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
DBGrid1.Visible:= not DBGrid1.Visible;
DBNavigator1.Visible:= not DBNavigator1.Visible;
Label1.Visible:= not Label1.Visible;
Label2.Visible:= not Label2.Visible;
Label3.Visible:= not Label3.Visible;
Label4.Visible:= not Label4.Visible;
Button3.Visible:= not Button3.Visible;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
N6Click(Sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if DBGrid1.DataSource=nil then DBGrid1.Hint:='Нужновыбратьтаблицу'
else DBGrid1.Hint:='';
Form1.Caption:='Информационоеагенство';
DBChart1.Width:=Form1.Width-8;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if DBGrid1.DataSource=DataModule2.DataSource1 then begin
if DataModule2.Table1.Active then
DataModule2.Table1.Active:= not DataModule2.Table1.Active;
DataModule2.Table1.IndexName:=ComboBox1.Text;
DataModule2.Table1.Active:= not DataModule2.Table1.Active;
end
else if DBGrid1.DataSource=DataModule2.DataSource2 then begin
if DataModule2.Table2.Active then
DataModule2.Table2.Active:= not DataModule2.Table2.Active;
DataModule2.Table2.IndexName:=ComboBox1.Text;
DataModule2.Table2.Active:= not DataModule2.Table2.Active;
end
else begin
if DataModule2.Table3.Active then
DataModule2.Table3.Active:= not DataModule2.Table3.Active;
DataModule2.Table3.IndexName:=ComboBox1.Text;
DataModule2.Table3.Active:= not DataModule2.Table3.Active;
end;
if ComboBox1.Text='' then ComboBox1.Text:='Индексыдлясортировки';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
name_kolonka: Integer;
seach_value: string;
begin
if DBGrid1.DataSource=DataModule2.DataSource1 then begin
name_kolonka:=ComboBox2.ItemIndex;
casename_kolonka of
{'id'}0: begin DataModule2.Table1.IndexName:=''; ComboBox2.Text:='Индексыдлясортировки'; ComboBox2.ItemIndex:=-1; end;
{'Названиеорганизации'}1: DataModule2.Table1.IndexName:='NameOrg';
{'Кол-во'}2: DataModule2.Table1.IndexName:='Count';
{'Страна'}3: DataModule2.Table1.IndexName:='Country';
{'Город'}4: DataModule2.Table1.IndexName:='City';
{'Точныйадрес'}5: DataModule2.Table1.IndexName:='Adress';
{'Телефон'}6: DataModule2.Table1.IndexName:='Phone';
{'Факс'}7: DataModule2.Table1.IndexName:='Fax';
{'Датарегистрации'}8: DataModule2.Table1.IndexName:='DateReg';
elseshowmessage('Не выбран параметр');
end;
seach_value:=edit1.text;
ifseach_value<>'' then begin
with DataModule2.Table1 do
begin
CancelRange;
SetRange([seach_value],[seach_value]);
end; end
elseshowmessage('Невыбранпараметр');
{отменаФильтрации}
end else
if DBGrid1.DataSource=DataModule2.DataSource2 then begin
name_kolonka:=ComboBox2.ItemIndex;
casename_kolonka of
{'id'}0: begin DataModule2.Table2.IndexName:=''; ComboBox2.Text:='Индексыдлясортировки'; ComboBox2.ItemIndex:=-1; end;
{'Наименованиеорганизации'}1: DataModule2.Table2.IndexName:='NameOrg';
{'Отраслеаядеятельность'}2: DataModule2.Table2.IndexName:='SectoralActivities';
{'Видпродукта'}3: DataModule2.Table2.IndexName:='TypeOfProduct';
{'Опер. инф.'}4: DataModule2.Table2.IndexName:='OperationalInformation';
{'Преобретается'}5: DataModule2.Table2.IndexName:='Purchased';
{'Продается'}6: DataModule2.Table2.IndexName:='Sale';
elseshowmessage('Не выбран параметр');
end;
seach_value:=edit1.text;
ifseach_value<>'' then begin
with DataModule2.Table2 do
begin
CancelRange;
SetRange([seach_value],[seach_value]);
end; end
elseshowmessage('Невыбранпараметр');
{отменаФильтрации}
end else
if DBGrid1.DataSource=DataModule2.DataSource3 then begin
name_kolonka:=ComboBox2.ItemIndex;
casename_kolonka of
{'id'}0: begin DataModule2.Table3.IndexName:=''; ComboBox2.Text:='Индексыдлясортировки'; ComboBox2.ItemIndex:=-1; end;
{'Наименование'}1: DataModule2.Table3.IndexName:='Name';
{'Дата'}2: DataModule2.Table3.IndexName:='Date';
elseshowmessage('Не выбран параметр');
end;
seach_value:=edit1.text;
ifseach_value<>'' then begin
with DataModule2.Table3 do
begin
CancelRange;
SetRange([seach_value],[seach_value]);
end; end
elseshowmessage('Невыбранпараметр');
{отменаФильтрации}
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Clear;
ComboBox2.ItemIndex:=-1;
ComboBox2.Text:='ВыберитепарметрФильтра';
if DBGrid1.DataSource=DataModule2.DataSource1 then
DataModule2.Table1.CancelRange
else if DBGrid1.DataSource=DataModule2.DataSource2 then
DataModule2.Table2.CancelRange
else if DBGrid1.DataSource=DataModule2.DataSource3 then
DataModule2.Table3.CancelRange
end;
procedure TForm1.N12Click(Sender: TObject);
begin
TransparentColorValue:=clCream;
Form1.TransparentColor:= not Form1.TransparentColor;
end;
procedure TForm1.N13Click(Sender: TObject);
begin
DBChart1.Visible:=not DBChart1.Visible;
DataModule2.Table1.First;
DBChart1.Series[0].Clear;
while not DataModule2.Table1.Eof do begin
DBChart1.Series[0].Add(DataModule2.Table1.FieldValues['Кол-вопредприятий'],DataModule2.Table1.FieldValues['Названиеорганизации']);
DataModule2.Table1.Next;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ifMessageDlg('Выдействительнохотитепокинутьпрограмму',mtConfirmation,[mbYes,mbNo],0)= mrYes then
ifMessageDlg('Выточноуверены',mtConfirmation,[mbYes,mbNo],0)= mrYes then
ifMessageDlg('Я не уверен, что вы уверены, а вы уверены что уверены',mtConfirmation,[mbYes,mbNo],0)= mrYesthen
begin
MessageBox(Handle, PChar('Ну ладно выпущу вас'), PChar('Добрая программа'), MB_ICONERROR+MB_OK);
end
else begin MessageBox(Handle, PChar('Я так и знал'), PChar('Добраяпрограмма'), MB_ICONINFORMATION+MB_OK); Action:= caNone end
else begin MessageBox(Handle, PChar('Нувотвидите, а выхотелиещевыйти'), PChar('Добраяпрограмма'), MB_ICONINFORMATION+MB_OK); Action:= caNone end
else begin MessageBox(Handle, PChar('Ну и правильноячем я хужедругих'), PChar('Добраяпрограмма'), MB_ICONWARNING+MB_OK); Action:= caNone end;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
end
Заключение
В результате выполнения курсового проектирования было разработано приложение по работе базами «Информационое агентство»
Приложение былоразработано в среде разработки Delphi 7.0, в качестве СУБД выбрана Paradox. При написании программы было уделено внимание удобству работы пользователя и построению дружественного интерфейса. Программа обладает развитым графическим интерфейсом. Также внимание уделялось на работу с псевдонимами.
Цель работы по созданию приложения «Информационое агентство» выполнена.
Список литературы
1. Кузнецов С.Д. Основы современных баз данных // Системы управления базами данных. — 1995. — №№ 1–5.
2. Чудинов И.Л. Организация баз данных: Учебное пособие. — Томск: ТУСУР, 2000. — 89 с.
3. Матрин Дж. Организация баз данных в вычислительных системах. — М.: Мир, 1980.
4. U. Dayal et al. Third Generation TP Monitors: A Database Challenge. — Proceeding of the 1993 ACM SIGMOD, 394.
5. J. Melton and A. Simon, Understanding the New SQL: A Complete Guide (San Francisco: Morgan Kaufmann Publishers, 1992), 39–40.
6. Саймон А.Р. Стратегические технологии баз данных: менеджмент на 2000 год. — М.: Финансы и статистика, 1999. — 479 с.
7. Атре Ш. Структурный подход к организации баз данных. — М.: Финансы и статистика, 1983.
8. E.F. Codd. «A Relational Model of Data for Large Shared Data Banks», Communications of the ACM (June 1970).
9. Кодд Э.Ф. Реляционная модель данных для больших, совместно используемых банков данных. // Системы управления базами данных. — 1995. — № 1. — С. 145–160.
10. Дейт, К. Дж. Введение в системы баз данных. — Киев, М.: Диалектика, 1998. — 784 с.
11. Мишель Пуле. Четыре грани целостности // https://www.osp.ru/ win2000/sql/2000/01/010.htm
12. Вендров А.М. CASE-технологии. Современные методы и средства проектирования информационных систем. — М.: Финансы и статистика, 1998.
13. CASE-Технологии // https://case-tech.h1.ru
14. Марк Ривкин, новые возможности oracle 9.2 // «Открытые системы». — 2002. — №11.
15. Попов А.А. Программирование в среде СУБД FoxPro 2.0. Построение систем обработки данных. — Киев: ТОО "ВЕК"; М.: Радио и связь, 1995. — 352 с.
16. В. Кирстен, М. Ирингер и др. СУБД Cache'. Объектно-ориентированная разработка приложений. — Питер, 2001.