Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диплом востановленный.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
6.47 Mб
Скачать

3.4. Организация бизнес логики на стороне сервера

Все механизмы по изменению данных в базе решено организовать на стороне сервера. Все механизмы выполнены с помощью хранимых процедур.

Хранимые процедуры - программы, находящиеся в базе данных и выполняемые по требованию клиента. Хранимая процедура представляет собой набор совместно откомпилированных команд SQL.

Одним из преимуществ хранимых процедур является то, что они выполняются непосредственно на сервере.

Хранимые процедуры обладают и другими преимуществами, среди которых модульность программирования и тестирования, а также ограниченный доступ к таблицам, построенный на базе функций. Это помогает изолировать пользователей от базовых табличных структур, сокращает ошибки в операторах, обеспечивает согласованность программирования и автоматизирует выполнение сложных или неустойчивых транзакций.

3.5. Реализация выявленных механизмов.

На рисунке 58 представлены механизмы используемые для каждой таблицы БД, более подробно они рассмотрены ниже.

Рис 58 Реализация механизмов

Для ввода новой информации используются процедуры:

  • запрос «Ввод новой организации» реализуется хранимой процедурой DobavlenieBlokaOrg:

CREATE PROCEDURE DobavlenieBlokaOrg

@gorod varchar(50),

@org varchar(50),

@INN varchar(50),

@KPP varchar(50),

@OKPO varchar(50),

@OGRN varchar(50),

@index int,

@ulica varchar(50),

@dom varchar(50),

@office varchar(50),

@dol varchar(50),

@f varchar(50),

@i varchar(50),

@o varchar(50),

@kon varchar(50),

@nomer varchar(50)

AS

declare @IDGorod int

declare @IDOrg int

declare @IDAdres int

declare @IDDol int

declare @IDSotrud int

declare @IDKon int

declare @IDTel int

set @IDGorod=(Select id_gorod from Город where город=@gorod)

if @IDGorod is null begin

insert into Город (город)

values (@gorod)

set @IDGorod=IDENT_CURRENT('Город')

end

set @IDOrg=(Select id_nazv_org from Название_орг where название=@org and ИНН=@INN and КПП=@KPP and ОКПО=@OKPO and ОГРН=@OGRN)

if @IDOrg is null begin

insert into Название_орг (название,ИНН,КПП,ОКПО,ОГРН)

values (@org,@INN,@KPP,@OKPO,@OGRN)

set @IDOrg=IDENT_CURRENT('Название_орг')

end

set @IDAdres=(Select id_adres from Адрес where индекс=@index and улица=@ulica and дом=@dom and офис=@office and id_gorod=@IDGorod and id_nazv_org=@IDOrg)

if @IDAdres is null begin

insert into Адрес (индекс,улица,дом,офис,id_gorod,id_nazv_org)

values (@index,@ulica,@dom,@office,@IDGorod,@IDOrg)

set @IDAdres=IDENT_CURRENT('Адрес')

end

set @IDDol=(Select id_dolgnost from Должность where должность=@dol)

if @IDDol is null begin

insert into Должность (должность)

values (@dol)

set @IDDol=IDENT_CURRENT('Должность')

end

set @IDSotrud=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o and id_dolgnost=@IDDol and id_nazv_org=@IDOrg)

if @IDSotrud is null begin

insert into Сотрудники (фамилия,имя,отчество,id_dolgnost,id_nazv_org)

values (@f,@i,@o,@IDDol,@IDOrg)

set @IDSotrud=IDENT_CURRENT('Сотрудники')

end

set @IDKon=(Select id_kontact from Контакт where контакт=@kon)

if @IDKon is null begin

insert into Контакт (контакт)

values (@kon)

set @IDKon=IDENT_CURRENT('Контакт')

end

set @IDTel =(Select id_telefon from Телефон where номер=@nomer and id_kontact=@IDKon and id_sotrud=@IDSotrud)

if @IDTel is null begin

insert into Телефон (номер,id_kontact,id_sotrud)

values (@nomer,@IDKon,@IDSotrud)

set @IDTel =IDENT_CURRENT('Телефон')

end

GO

  • запрос «Сделка» реализуется хранимой процедурой DobavlenieBlokaDogovor:

CREATE PROCEDURE DobavlenieBlokaDogovor

@vid varchar(50),

@ist varchar(50),

@dog varchar(50),

@naimen varchar(50),

@usl varchar(50),

@dataZakl datetime,

@dataNach datetime,

@dataZav datetime,

@sum varchar(50),

@org varchar(50)

AS

declare @IDOrg int

declare @IDVid int

declare @IDDog int

declare @IDUsl int

declare @IDSdel int

set @IDOrg=(Select id_nazv_org from Название_орг where название=@org)

set @IDVid=(Select id_vid_rabot from Вид_работ where вид_работ=@vid and источник_на_поставку=@ist)

if @IDVid is null begin

insert into Вид_работ (вид_работ,источник_на_поставку)

values (@vid,@ist)

set @IDVid=IDENT_CURRENT('Вид_работ')

end

set @IDDog=(Select id_dog from Договор where договор=@dog and наименование=@naimen and id_vid_rabot=@IDVid)

if @IDDog is null begin

insert into Договор (договор,наименование,id_vid_rabot)

values (@dog,@naimen,@IDVid)

set @IDDog =IDENT_CURRENT('Договор')

end

set @IDUsl=(Select id_uslov from Условие where условие=@usl)

if @IDUsl is null begin

insert into Условие (условие)

values (@usl)

set @IDUsl=IDENT_CURRENT('Условие')

end

set @IDSdel =(Select id_sdelka from Сделка where id_dog=@IDDog and id_nazv_org=@IDOrg and дата_заключения=@dataZakl and дата_начала=@dataNach and дата_завершения=@dataZav and сумма=@sum and id_uslov=@IDUsl)

if @IDSdel is null begin

insert into Сделка (id_dog,id_nazv_org,дата_заключения,дата_начала,дата_завершения,сумма,id_uslov)

values (@IDDog,@IDOrg,@dataZakl,@dataNach,@dataZav,@sum,@IDUsl)

set @IDSdel =IDENT_CURRENT('Сделка')

end

GO

Для поиска уже существующей информации используются процедуры:

  • запрос «Поиск договора по названию орг. и наименованию работ» реализуется хранимой процедурой PoiskDogovora:

CREATE PROCEDURE PoiskDogovora

@naimen varchar (50),

@vid varchar (50),

@org varchar (50)

AS

SELECT *

FROM Dogovor

where наименование like @naimen+'%' and вид_работ like @vid+'%' and название like @org+'%'

GO

  • запрос «Поиск организации по №договора и наименованию работ» реализуется хранимой процедурой PoiskOrgan:

CREATE PROCEDURE PoiskOrgan

@naimen varchar (50),

@dog varchar (50)

AS

SELECT dbo.[Название_орг].id_nazv_org, dbo.[Название_орг].название, dbo.[Название_орг].ИНН, dbo.[Название_орг].КПП, dbo.[Название_орг].ОКПО,

dbo.[Название_орг].ОГРН, dbo.Адрес.индекс, dbo.Город.город, dbo.Адрес.улица, dbo.Адрес.дом, dbo.Адрес.офис, dbo.Должность.должность,

dbo.Сотрудники.фамилия, dbo.Сотрудники.имя, dbo.Сотрудники.отчество, dbo.Телефон.номер, dbo.Контакт.контакт

FROM dbo.Адрес INNER JOIN

dbo.Город ON dbo.Адрес.id_gorod = dbo.Город.id_gorod INNER JOIN

dbo.[Название_орг] ON dbo.Адрес.id_nazv_org = dbo.[Название_орг].id_nazv_org INNER JOIN

dbo.Сотрудники ON dbo.[Название_орг].id_nazv_org = dbo.Сотрудники.id_nazv_org INNER JOIN

dbo.Должность ON dbo.Сотрудники.id_dolgnost = dbo.Должность.id_dolgnost INNER JOIN

dbo.Телефон ON dbo.Сотрудники.id_sotrud = dbo.Телефон.id_sotrud INNER JOIN

dbo.Контакт ON dbo.Телефон.id_kontact = dbo.Контакт.id_kontact INNER JOIN

dbo.Сделка ON dbo.[Название_орг].id_nazv_org = dbo.Сделка.id_nazv_org INNER JOIN

dbo.Договор ON dbo.Сделка.id_dog = dbo.Договор.id_dog

WHERE наименование like @naimen+'%' and договор like @dog+'%'

GO

  • запрос «Поиск телефонов по названию орг. и ФИО сотрудника» реализуется хранимой процедурой PoiskTel:

CREATE PROCEDURE PoiskTel

@nazv varchar (50),

@f varchar (50),

@i varchar (50),

@o varchar (50)

AS

SELECT *

FROM Tel

where название like @nazv+'%' and фамилия like @f+'%' and имя like @i+'%' and отчество like @o+'%'

GO

Для изменений уже существующей информации используются процедуры:

  • запрос «Редактирование организации» реализуется хранимой процедурой RedacOrg:

CREATE PROCEDURE RedacOrg

@id int,

@gorod varchar(50),

@org varchar(50),

@INN varchar(50),

@KPP varchar(50),

@OKPO varchar(50),

@OGRN varchar(50),

@index int,

@ulica varchar(50),

@dom varchar(50),

@office varchar(50),

@f varchar(50),

@i varchar(50),

@o varchar(50),

@dol varchar(50)

AS

declare @IDGorod int

declare @IDDol int

set @IDGorod=(Select id_gorod from Город where город=@gorod)

if @IDGorod is null begin

insert into Город (город)

values (@gorod)

set @IDGorod=(Select id_gorod from Город where город=@gorod)

end

set @IDDol=(Select id_dolgnost from Должность where должность=@dol)

if @IDDol is null begin

insert into Должность (должность)

values (@dol)

set @IDDol=(Select id_dolgnost from Должность where должность=@dol)

end

update Адрес set индекс=@index,улица=@ulica,дом=@dom,офис=@office,id_gorod=@IDGorod where id_nazv_org=@id

update Название_орг set название=@org,ИНН=@INN,КПП=@KPP,ОКПО=@OKPO,ОГРН=@OGRN where id_nazv_org=@id

update Сотрудники set фамилия=@f,имя=@i,отчество=@o,id_dolgnost=@IDDol where id_nazv_org=@id

GO

  • запрос «Редактирование телефона» реализуется хранимой процедурой RedactTelefon:

CREATE PROCEDURE RedactTelefon

@id int,

@nomer varchar(50),

@kon varchar(50)

AS

declare @IDKon int

set @IDKon=(Select id_kontact from Контакт where контакт=@kon)

if @IDKon is null begin

insert into Контакт (контакт)

values (@kon)

set @IDKon=(Select id_kontact from Контакт where контакт=@kon)

end

update Телефон set номер=@nomer,id_kontact=@IDKon where id_telefon=@id

GO

  • запрос «Редактирование данных по сделке» реализуется хранимой процедурой RedactSdelka:

CREATE PROCEDURE RedactSdelka

@id int,

@dataZakl datetime,

@dataNach datetime,

@dataZav datetime,

@usl varchar(50),

@sum varchar(50)

AS

declare @IDUsl int

set @IDUsl=(Select id_uslov from Условие where условие=@usl)

if @IDUsl is null begin

insert into Условие (условие)

values (@usl)

set @IDUsl=(Select id_uslov from Условие where условие=@usl)

end

update Сделка set дата_заключения=@dataZakl where id_sdelka=@id

update Сделка set дата_начала=@dataNach where id_sdelka=@id

update Сделка set дата_завершения=@dataZav where id_sdelka=@id

update Сделка set id_uslov=@IDUsl where id_sdelka=@id

update Сделка set сумма=@sum where id_sdelka=@id

GO

Для удаления ставшей ненужной информации используются процедуры:

  • запрос «Удаление завершенного договора» реализуется хранимой процедурой UdalenDogovor:

CREATE PROCEDURE UdalenDogovor

@dataZakl datetime,

@dataNach datetime,

@dataZav datetime,

@dog varchar(50),

@naimen varchar(50)

AS

DELETE FROM Сделка WHERE дата_заключения=@dataZakl and дата_начала=@dataNach and дата_завершения=@dataZav

DELETE FROM Договор WHERE договор=@dog and наименование=@naimen

GO

  • запрос «Удаление организации» реализуется хранимой процедурой UdalenOrg:

CREATE PROCEDURE UdalenOrg

@f varchar(50),

@i varchar(50),

@o varchar(50),

@org varchar(50)

AS

declare @id int

declare @id1 int

set @id=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o)

set @id1=(Select id_nazv_org from Название_орг where название=@org)

DELETE FROM Договор WHERE id_dog in (select id_dog from Сделка where id_nazv_org=@id1)

DELETE FROM Телефон WHERE id_sotrud=@id

DELETE FROM Сделка WHERE id_nazv_org=@id1

DELETE FROM Сотрудники WHERE id_nazv_org=@id1

DELETE FROM Адрес WHERE id_nazv_org=@id1

DELETE FROM Название_орг WHERE название=@org

GO

  • запрос «Удаление телефона» реализуется хранимой процедурой UdalenTelefon:

CREATE PROCEDURE UdalenTelefon

@nomer varchar(50),

@f varchar(50),

@i varchar(50),

@o varchar(50)

AS

declare @IDSotrud int

set @IDSotrud=(Select id_sotrud from Сотрудники where фамилия=@f and имя=@i and отчество=@o)

DELETE FROM Телефон WHERE номер=@nomer and id_sotrud=@IDSotrud

GO

  • запрос «Удаление завершенных договоров» реализуется хранимой процедурой UdalenDogovorPoDate:

CREATE PROCEDURE UdalenDogovorPoDate

AS

DELETE FROM Договор WHERE id_dog in (select id_dog from Сделка where (DATEDIFF(Day, dbo.Сделка.дата_завершения, GETDATE()) > 14))

DELETE FROM Сделка WHERE (DATEDIFF(Day, dbo.Сделка.дата_завершения, GETDATE()) > 14)

GO

Также для удобного использования пользователем информационной системы созданы следующие процедуры:

  • запрос «Вывод договоров по ремонту» реализуется хранимой процедурой ZaprosRemont:

CREATE PROCEDURE ZaprosRemont

AS

select *

from Remont

GO

  • запрос «Вывод договоров по тех. перевооружению» реализуется хранимой процедурой ZaprosTexper:

CREATE PROCEDURE ZaprosTexper

AS

select *

from Texper

GO

  • запрос «Вывод договоров по эксплуатации» реализуется хранимой процедурой ZaprosPostavka:

CREATE PROCEDURE ZaprosPostavka

AS

select *

from Postavka

GO

  • запрос «Вывод договоров по поставкам» реализуется хранимой процедурой ZaprosEksplotaciya:

CREATE PROCEDURE ZaprosEksplotaciya

AS

select *

from Eksplotaciya

GO

  • запрос «Вывод адреса организации» реализуется хранимой процедурой ZaprosOrgan:

CREATE PROCEDURE ZaprosOrgan

AS

select *

from Organ

GO

  • запрос «Выбор всей информации по каждому договору» реализуется хранимой процедурой ZaprosVsy:

CREATE PROCEDURE ZaprosVsy

AS

select *

from Vsy

GO

4. Физическое проектирование.

Клиентское приложение создано на основе Windows технологии. В качестве программного обеспечения был выбран Borland C++Builder 6.

4.1. Выбор технологии.

4.1.1. Выбор операционной системы.

В качестве операционной системы для разработки и развертывания информационной системы была выбрана Microsoft Windows, поскольку она является наиболее распространенной, обладает достаточно высоким уровнем надежности и безопасности, а так же является удобной в использовании.

4.1.2. Выбор технологии взаимодействия пользователя с системой, технологии пользовательского интерфейса.

Информационная система будет разработана на основе технологии «родных приложений». Это позволяет использовать в полной мере все возможности операционной системы, в том числе «родные» функции, поскольку операционные системы располагают мощными средствами поддержки дополнительных технологий, которые можно применять в приложениях.

4.1.3. Выбор технологии взаимодействия компонент с данными.

В качестве технологии взаимодействия компонент с данными выбрана технология ADO(ActiveX Data Objects) – технология обеспечивает универсальный доступ к источникам данных из приложений БД. Такую возможность предоставляют функции набора интерфейсов, созданные на основе общей модели объектов СОМ и описанные в спецификации OLE DB. Технология ADO и интерфейсы OLE DB обеспечивают для приложений единый способ доступа к источникам данных различных типов

Основные компоненты этой технологии используемые в моем проекте:

  • ADOConnection – создает соединение с базой данных;

  • ADOQuery – посылает запросы к базе данных.