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

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

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

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

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

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

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

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

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

  • Процедура вывода всех документов пользователя AllRead

CREATE PROCEDURE [AllRead]

@User int

AS

SELECT [ID], (CONVERT(char (11),[RegNumber]) +' ' + CONVERT(char (11),[CreateDate])+' ' + [Name]) as IncDat

FROM [Doc]

WHERE [Aresat] =@User

GO

  • Процедура внесения данных о прочтении документа check:

CREATE PROCEDURE [check]

@in int

AS

UPDATE [Doc]

SET [Cheked]=1

WHERE [ID] =@in

GO GO

  • Прцедура внесения данных контрольной карточки:

CREATE PROCEDURE [ControlDataInsert]

@In int,

@inDate datetime,

@inText text

AS

INSERT INTO [StatusText] ([StatText])

VALUES(@inText)

Declare @a Int

set @a =(SELECT [id] FROM [StatusText] where [StatText] like (@inText) )

INSERT INTO [ControlData]

( [DocID], [ChangingData], [Srok], [StatusID])

VALUES( @In, getdate(),@InDate , @a)

GO

  • Процедура изменения данных контрольной карточки:

CREATE PROCEDURE [ControlDateChange]

@In int,

@In2 int,

@intext text,

@inDate datetime

AS

UPDATE [ControlData]

SET [ChangingData]=getdate(), [Srok]=@inDate

WHERE [id]=@In

UPDATE [StatusText]

SET [StatText]=@inText

WHERE [ID]=@In2

GO

  • Процедура поиска контрольных карточек:

CREATE PROCEDURE [dbo].[ControlSerch]

@in int

AS

SELECT dbo.ControlData.ChangingData, dbo.StatusText.StatText, dbo.ControlData.id, dbo.ControlData.Srok, dbo.ControlData.StatusID

FROM dbo.StatusText INNER JOIN

dbo.ControlData ON dbo.StatusText.ID = dbo.ControlData.StatusID RIGHT OUTER JOIN

dbo.Doc ON dbo.ControlData.DocID = dbo.Doc.ID

WHERE (dbo.Doc.ID = @in)

GO

  • Прцедура добавления нового документа:

CREATE PROCEDURE [dbo].[DocIns]

@adresatIn int,

@autorIn int,

@Type nvarchar(15),

@NameIn varchar(50),

@RegNum int,

@res nvarchar(15),

@t text

AS

DECLARE @A int

declare @B int

Declare @C int

If not EXISTS (Select [id] from dbo.DocTypes where (DocType = @Type) )

INSERT INTO [DocTypes] ([DocType]) VALUES(@Type)

If not EXISTS (Select [ID] from [Resolutions] where Res = @res )

INSERT INTO [Resolutions]([Res]) VALUES(@res)

INSERT INTO [DoksText]([Text])

VALUES(@t)

Set @A=(Select [id] from dbo.DocTypes where (DocType = @Type))

Set @B=(Select [ID] from [Resolutions] where Res = @res )

SET @C=(Select [Id] from dbo.DoksText where [Text] like (@t) )

INSERT INTO [Doc]

([AutrID], [CreateDate], [DocTypeID], [Name], [RegNumber], [Res], [Aresat], [text], [Cheked], [Arhiv])

VALUES(

@autorIn,

GETDATE(),@A , @NameIn, @RegNum, @B, @adresatIn, @C , 0, 0)

GO

  • Запрос на вывод входящих не прочитанных документов:

CREATE PROCEDURE [DBO].[IncomingRead]

@UserID int,

@DocId int

AS

SELECT dbo.[User].Name, dbo.Doc.CreateDate, dbo.Doc.RegNumber, dbo.Resolutions.Res, dbo.StatusText.StatText, dbo.DoksText.Text,

dbo.DocTypes.DocType

FROM dbo.Doc LEFT OUTER JOIN

dbo.DoksText ON dbo.Doc.text = dbo.DoksText.Id LEFT OUTER JOIN

dbo.DocTypes ON dbo.Doc.DocTypeID = dbo.DocTypes.id LEFT OUTER JOIN

dbo.[User] ON dbo.Doc.AutrID = dbo.[User].id LEFT OUTER JOIN

dbo.StatusText ON dbo.Doc.ID = dbo.StatusText.ID LEFT OUTER JOIN

dbo.Resolutions ON dbo.Doc.Res = dbo.Resolutions.ID

WHERE (dbo.Doc.Aresat = @UserID) AND (dbo.Doc.[ID] = @DocId)

GO

  • Запрос на выведение входящих:

CREATE PROCEDURE [IncomingSerch]

@User int

AS

SELECT [ID], (CONVERT(char (11),[RegNumber]) +' ' + CONVERT(char (11),[CreateDate])+' ' + [Name]) as IncDat

FROM [Doc]

WHERE [Aresat] =@User and ([Cheked] = 0 or [Cheked] = null)

GO

  • Процедура чтения исходящих документов:

CREATE PROCEDURE [OutGoingRead]

@User int

AS

SELECT [ID], (CONVERT(char (11),[RegNumber]) +' ' + CONVERT(char (11),[CreateDate])+' ' + [Name]) as IncDat

FROM [Doc]

WHERE [AutrID] =@User

GO

  • Процедура проверки пароля:

CREATE PROCEDURE [dbo].[PassCheck]

@Login nvarchar(10),

@Pass nvarchar(10)

AS

if exists(select [Id] from [PassData] where Login=@Login and Pass=@Pass )

begin

select [Id] from [PassData] where Login=@Login and Pass=@Pass

End

GO

  • Процедура изменения резолюции:

CREATE PROCEDURE [DBO].[ResChange]

@In nvarchar(15),

@In2 int

AS

If exists (Select [ID] from [Resolutions] where Res = @In )

begin

UPDATE [Doc] SET [Res]=(Select [ID] from [Resolutions] where Res = @In )WHERE [ID]= @In2

End

Else

begin

INSERT INTO [Resolutions]([Res]) VALUES(@In)

UPDATE [Doc] SET [Res]=(Select [ID] from [BogDip].[dbo].[Resolutions] where Res = @In )WHERE [ID]= @In2

End

GO

  • запрос для получения идентификатора пользователя:

CREATE PROCEDURE [dbo].[sel]

@In int

AS

SELECT [id], [Name] FROM [User] where DepID=@In

GO

  • процедура изменения текста:

CREATE PROCEDURE [DBO].[TextChange]

@In text,

@In2 int

AS

UPDATE DoksText SET [Text]=@In WHERE [Id] = (select [text] FROM [Doc] where [ID]=@In2 )

GO

  • Процедура изменения типа:

CREATE PROCEDURE [DBO].[TypeChange]

@In nvarchar(15),

@In2 int

AS

If exists (Select [ID] from [BogDip].[dbo].[DocTypes] where DocType = @In )

begin

UPDATE [Doc] SET [DocTypeID]=(Select [ID] from [DocTypes] where DocType = @In ) WHERE [ID]= @In2

End

Else

begin

INSERT INTO [DocTypes] ([DocType]) VALUES(@In)

UPDATE [Doc] SET [DocTypeID]=(Select [ID] from [DocTypes] where Res = @In )WHERE [ID]= @In2

End

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 – посылает запросы к базе данных.