Система управления проектами территориально-распределенной IT-компании

Стандарты, определяющие требования к квалификации участников управления проектами. Разработка программного средства, представляющего собой Web-приложение, организующее совместную работу над проектом сотрудников, территориально удалённых друг от друга.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 22.11.2015
Размер файла 4,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

При определении трудоемкости программного средства учитываются объем программного средства (в тысячах строк условного кода), объем документации (тысяч строк), новизна и сложность программного средства, язык программирования, степень использования типовых (стандартных программ).

На основании общего объема программного средства определяется нормативная трудоемкость (Тн) по таблицам. Нормативная трудоемкость устанавливается с учетом сложности программного средства. Выделяется три группы сложности, в которых учтены следующие составляющие программного средства; языковой интерфейса, ввод-вывод, организация данных, режим работы, операционная и техническая среда. Кроме того, устанавливаются дополнительные коэффициенты сложности программного средства.

С учетом дополнительного коэффициента сложности Ксл рассчитывается общая трудоемкость программного средства

(6.3)

гдеТн - нормативная трудоемкость, человеко-дней;

Ксл - дополнительный коэффициент сложности, ед.

Тн = 464 человеко-дня - по данным, приведенным в приложении 3 методического пособия [41];

Ксл = 0,12 - по данным, приведенным в методическом пособии приложении 4 таблице 8.2.

То = 464 · (0,12+1) = 519,68 (человеко-дней).

Расчет основной заработной платы

В соответствии с «Рекомендациями по применению «Единой тарифной сетки» рабочих и служащих народного хозяйства» и тарифными разрядами и коэффициентами должностей каждому исполнителю устанавливается разряд и тарифный коэффициент.

Месячная тарифная ставка каждого исполнителя определяется путем умножения действующей месячной тарифной ставки 1-го разряда на тарифный коэффициент, соответствующий установленному тарифному разряду

(6.4)

где Сзм - тарифная ставка за месяц, руб.;

Сзм1 - тарифная ставка 1-го разряда за месяц, руб.;

Кт - тарифный коэффициент, ед.

Сзм1 = 400 000 руб. - по исходным данным;

Кт = 3,25 - по исходным данным, приведенным в таблице 5.1.

Сзм = 400 000 · 3,25 = 1 340 000 (руб.).

Основная заработная плата исполнителей на конкретное ПС рассчитывается по формуле

(6.5)

где Соз - основная заработная плата, руб.;

Сзд - тарифная ставка за день, руб.;

То - общая трудоемкость программного средства, человеко-дней;

Кп - коэффициент естественных потерь рабочего времени, ед.;

Кпр - коэффициент премирования, ед.

То = 519,69 человеко-дней - подсчитано по формуле (6.3);

Кп = 1,2 - по исходным данным;

Кпр=1,2 - по исходным данным.

Cоз=(руб.).

Расчет дополнительной заработной платы

Дополнительная заработная плата на конкретное программное средство включает выплаты, предусмотренные законодательством о труде (оплата отпусков, льготных часов, времени выполнения государственных обязанностей и других выплат, не связанных с основной деятельностью исполнителей), и определяется по нормативу в процентах к основной заработной плате по следующей формуле

(6.6)

где Соз - основная заработная плата, млн. руб.;

Ндз - норматив дополнительной заработной платы, %.

Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);

Ндз = 15% - по исходным данным, приведенным в таблице 6.1.

(руб.).

Расчет отчислений в Фонд социальной защиты населения

Отчисления в Фонд социальной защиты населения (ФСЗН) определяются в соответствии с действующими законодательными актами по нормативу в процентном отношении к фонду основной и дополнительной зарплаты исполнителей

(6.7)

гдеСоз - основная заработная плата, руб.;

Сдз - дополнительная заработная плата на конкретное ПС, млн. руб.;

Нфсзн - норматив отчислений в Фонд социальной защиты населения, %;

Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);

Сдз = 7,352 руб. - подсчитано по формуле (6.6);

Нфсзн = 34% - по исходным данным, приведенным в таблице 5.1.

(руб.).

Расчет отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний

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

(6.8)

гдеСоз - основная заработная плата, млн. руб.;

Сдз - дополнительная заработная плата на конкретное ПС, руб.;

Нбгс - норматив отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, %;

Соз = 49,019 млн. руб. - подсчитано по формуле (6.5);

Сдз = 7,352 млн.руб. - подсчитано по формуле (6.6);

Нбгс = 0,5% - по исходным данным, приведенным в таблице 5.1.

(руб.).

Расчет расходов на материалы

Расходы на материалы определяются с учетом действующих нормативов. По данной статье отражаются расходы на магнитную носители, перфокарты, бумагу, красящие ленты и другие материалы, необходимые для разработки программного средства. Нормы расхода материалов в суммарном выражении определяются в расчете на 100 строк исходного код. Сумма затрат материалов рассчитывается по формуле

(6.9)

гдеVo' - скорректированный объем ПС, условных машино-команд;

Нм - норма расхода материалов в расчете на 100 строк исходного кода ПС, руб.;

Vo' = 20 052 условных машино-команд - подсчитано по формуле (6.2);

Нм = 380 руб. - по данным, приведенным в приложении 5 методического пособия [15].

(руб.).

Расчет расходов на оплату машинного времени

Расходы включают оплату машинного времени, необходимого для разработки и отладки программного средства, которое определяется по нормативам (в машино-часах) на 100 строк исходного кода машинного времени в зависимости от характера решаемых задач и типа ПЭВМ

(6.10)

гдеСмв - сумма расходов на оплату машинного времени, млн. руб.;

Цм - цена одного машино-часа, руб.;

Vo' - скорректированный объем ПС, условных машино-команд;

Нмв - норматив расхода машинного времени на отладку 100 строк исходного кода, машино-часов;

Цм = 506,42 руб. - по исходным данным, приведенным в таблице 6.1;

Vo' = 20 052 условных машино-команд - подсчитано по формуле (6.2).

Так как информационная система выполняет общесистемные задачи, то Нмв = 12 машино-часов - по данным, приведенным в приложении 6 методического пособия [41].

Смв= (руб).

Расчет прочих прямых затрат

Расходы на конкретное программное средство включают затраты на приобретение и подготовку специальной научно-технической информации и специальной литературы. Определяются по нормативу в процентах к основной заработной плате

(6.11)

гдеСпз - сумма прочих затрат, млн. руб.;

Соз - основная заработная плата, млн. руб.;

Нпз - норматив прочих затрат в целом по организации, %.

Соз = 49 019 118 руб. - подсчитано по формуле (6.5);

Нпз = 15% - по исходным данным, приведенным в таблице 6.1.

руб.

Расчет накладных расходов

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

(6.12)

гдеСоз - основная заработная плата, млн. руб.;

Ннр - норматив накладных расходов в целом по организации, %;

Соз = 49 019 118 руб. - подсчитано по формуле (6.5);

Ннр = 120% - по исходным данным, приведенным в таблице 6.1.

руб.

Расчет суммы расходов на разработку программного средства

Общая сумма расходов на программное средство рассчитывается по формуле

(6.13)

гдеСоз - основная заработная плата, млн. руб.;

Сдз - дополнительная заработная плата на конкретное ПС, руб.;

Сфсзн - сумма отчислений в Фонд социальной защиты населения, млн. руб.;

Сбгс - сумма отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, млн. руб.;

См - сумма расходов на материалы, млн. руб.;

Ссо - сумма расходов на спецоборудование, млн. руб.;

Смв - сумма расходов на оплату машинного времени, млн. руб.;

Спз - сумма прочих затрат, млн. руб.;

Снр - сумма накладных расходов, млн. руб.;

Соз = 49 019 118 руб. - подсчитано по формуле (6.5);

Сдз = 7 352 867 руб. - подсчитано по формуле (6.6);

Сфсзн = 19 166 475 руб. - подсчитано по формуле (6.7);

Сбгс =281 859 руб. - подсчитано по формуле (6.8);

См = 76 197 руб. - подсчитано по формуле (6.9);

Смв = 1 218 568 руб. - подсчитано по формуле (6.10);

Спз = 7 352 867 руб. - подсчитано по формуле (6.11);

Снр = 58 822 941,77руб. - подсчитано по формуле (6.12) .

Ср= руб.

Расчет расходов на сопровождение и адаптацию

Кроме того, организация-разработчик осуществляет затраты на сопровождение и адаптацию программного средства, которые определяются по нормативу

(6.14)

гдеСр - сумма расходов на разработку ПС, млн. руб.;

Нрса - норматив расходов на сопровождение и адаптацию, %;

Ср = 143,290 млн. руб. - подсчитано по формуле (6.13);

Нрса = 10% - по исходным данным.

руб.

Расчет полной себестоимости разработки программного средства

Общая сумма расходов на разработку (с затратами на сопровождение и адаптацию) - полная себестоимость программного средства определяется по формуле

(6.15)

гдеСр - сумма расходов на разработку ПС, млн. руб.;

Срса - сумма расходов на сопровождение и адаптацию ПС, млн. руб.;

Ср = 143,290 млн. руб. - подсчитано по формуле (6.13);

Срса =14,329 млн. руб. - подсчитано по формуле (6.14).

(руб.)

Определение отпускной цены на программное средство

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

Прибыль рассчитывается по формуле

(6.16)

гдеСп - полная себестоимость программного средства, млн. руб.;

Урн - уровень рентабельности ПС, %;

Сп = 157,620 млн. руб. - подсчитано по формуле (6.15);

Урн = 35% - по исходным данным, приведенным в таблице 6.1.

Прогнозируемая цена разработчика программного средства без налогов

(6.17)

гдеСп - полная себестоимость ПС, млн. руб.;

Ппс - прибыль от реализации, млн. руб.;

Сп = 157,620 млн. руб. - подсчитано по формуле (6.15);

Ппс= 55,167 млн. руб. - подсчитано по формуле (6.16).

(руб.)

Сумма налога на добавленную стоимость

(6.18)

где Цп - прогнозируемая цена разработчика ПС, млн. руб.;

Нндс - ставка НДС, %;

Цп = 212, 787 млн. руб. - подсчитано по формуле (6.17);

Нндс = 20% - по исходным данным, приведенным в таблице 6.1.

(руб.)

Прогнозируемая отпускная цена

(6.19)

гдеЦп - прогнозируемая цена разработчика ПС, млн. руб.;

НДС - сумма налога на добавленную стоимость, млн. руб.

руб.

Результаты и выводы по расчетам

Таблица 6.3 содержит результаты расчетов экономических показателей проведенных в данном разделе. Так же данные по расчётам затрат представлены в приложении К.

Таблица 6.3 - Расчёт затрат на создание ПС и отпускной цены

Наименование показателей

Обозначения

Рассчитанные значения показателей, руб.

1

2

3

Основная заработная плата

Соз

49 019 118

Дополнительная заработная плата

Сдз

7 352 867

Отчисления в ФСЗН

Сфсзн

19 166 475

Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний

Сбгс

281 859

Расходы на материалы

См

76 197

Расходы на оплату машинного времени

Смв

1 218 568

Прочие прямые затраты

Спз

7 352 867

Расчет накладных расходов

Снр

58 822 941

Общая сумма расходов на ПС

Ср

143 290 896

Расходы на сопровождение и адаптацию

Срса

14 329 089

Полная себестоимость разработки ПС

Сп

157 619 985

Прибыль

Ппс

55 166 995

Планируемая цена без НДС

Цп

212 786 980

Сумма налога на добавленную

стоимость

НДС

42 557 396

Прогнозируемая отпускная цена с НДС

Цо

255 344 376

Как видно из проведённых расчётов большую часть прогнозируемой цены разрабатываемого программного средства составляют основная заработная плата - 49 019 118 рублей и накладные расходы 58 822 941 рублей.

Прибыль от реализации программного средства составляет 55 166 995 руб., прогнозируемая цена разработчика программного средства 212 786 980 руб., прогнозируемая отпускная цена 255 344 376 руб.

Автоматизированные системы управления проектами позволяют руководителю легко и быстро отслеживать протекание всех процессов и направлять деятельность сотрудников в нужное русло. Прозрачность операций дает возможность всегда быть в курсе дел и на каждом этапе корректировать направление хода процесса.

При работе с проектами ИТ использование специализированных методов управления проектами будет очень полезным для непрерывного прогресса, приводящего к большей успешности в результате.

Заключение

Во время выполнения дипломного проекта была проанализирована краткая история теории управления проектами, рассмотрены основные термины и определения в данной области. Выявлены достоинства и недостатки существующих систем управления проектами, на основе которых и было принято решение о разработке новой системы. Также были рассмотрены основные стандарты в области управления процессом разработки программных средств. Проведён анализ наиболее популярных методов (методологий) разработки программного обеспечения. Для разработки дипломного проекта была выбрана итеративная модель, так как осуществлялось выполнение работ параллельно с непрерывным анализом полученных результатов и корректировкой предыдущих этапов работы. Это позволило на ранних стадиях выявить ошибки предыдущего этапа жизненного цикла проекта. Были описаны технологии и средства разработки, использовавшиеся в процессе создания приложения.

В рамках дипломного проекта было разработано программное средство, представляющее собой систему управления проектами территориально-распределенной IT-компании. Основными функциями системы являются организация совместной работы сотрудников, территориально удалённых друг от друга, работа с клиентами, работа над проектом, отслеживание хода выполнения проекта, подсчет затраченного на работу времени и средств, подбор сотрудника для выполнения каждой задачи в зависимости от его знаний, умений и загруженности.

Был подробно описан процесс разработки программного средства, процесс настройки хранилища данных. Описаны функции ролей и на их основе представлена UML диаграмма вариантов использования системы. Также были представлены структура приложения, описание использовавшихся элементов управления, диаграмма классов и функционал, который реализуют данные классы. Подробно рассмотрен процесс использования разработанного приложения разными типами пользователей, показан функционал системы. Приложение содержит административную, клиентскую часть и часть для персонала компании (сотрудники и менеджер).

По результатам дипломного проектирования сделаны доклады на 63 и 64 научно-техническую конференцию студентов и магистрантов, проводимые в УО «Белорусский государственный технологический университет» в 2012 и 2013 году, а также на VI республиканской научной конференции студентов и аспирантов «Новые математические методы и компьютерные технологии в проектировании, производстве и научных исследованиях», проводимой УО «Гомельский государственный университет имени Франциска Скорины» в 2013 году.

Список использованных источников

Управление проектами. PM Live [Электронный ресурс] / История управления проектами. - Режим доступа: http://pmlive.ru/articles/77. - Дата доступа: 20.03.2013.

Официальный сайт Microsoft Office [Электронный ресурс] / Краткая история управления проектами - Project. - Режим доступа: http://office.microsoft. com/ru-ru/project-help/HA001135342.aspx. - Дата доступа: 20.03.2013.

Управление проектами в соответствии с ISO 21500 [Электронный ресурс] / Концепция управления проектами. - Режим доступа: http://iso21500.ru/. - Дата доступа: 20.03.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Программное обеспечение для управления проектами - Режим доступа: http://ru.wikipedia.org/wiki/Программное_обеспечение_для_управления_проектами. - Дата доступа: 25.02.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Управление проектами. - Режим доступа: http://ru.wikipedia.org/wiki/ Управление_проектами. - Дата доступа: 25.02.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Microsoft Project. - Режим доступа: http://ru.wikipedia.org/wiki/Microsoft_Project. - Дата доступа: 25.03.2013.

SoftKey.info - Онлайн журнал о мире программирования [Электронный ресурс] / Open Workbench - управляем проектами. - Режим доступа: http://www.softkey.info/reviews/review3060.php. - Дата доступа: 25.03.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Atlassian_JIRA. - Режим доступа: http://ru.wikipedia.org/wiki/Atlassian_JIRA. - Дата доступа: 25.02.2013.

Software Development and Collaboration Tools|Atlassian [Electronic resource] / Products, JIRA. - 2013. - Mode of access: http://www.atlassian.com/ software/jira/overview. - Date of access: 15.02.2013.

Overview - Redmine [Electronic resource]. - Jean-Philippe Lang, 2006-2013. - Mode of access: http://www.redmine.org. - Date of access: 15.03.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Redmine. - Режим доступа: http://ru.wikipedia.org/wiki/Redmine. - Дата доступа: 25.02.2013.

Википедия - свободная энциклопедия [Электронный ресурс] / Trac. - режим доступа: http://ru.wikipedia.org/wiki/Trac. - Дата доступа: 25.03.2013.

Приложение А

Исходный код и схемы основных элементов базы данных

Листинг создания таблиц базы данных

CREATE TABLE [dbo].[ClientData]

(

[UserId] [uniqueidentifier] NOT NULL,

[ClientName] [nvarchar](256) NOT NULL,

[ClientDescription] [nvarchar](256) NULL,

CONSTRAINT [PK_ClientData] PRIMARY KEY CLUSTERED

(

[UserId] ASC

)

WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

)

ON [PRIMARY]

ALTER TABLE [dbo].[ClientData] WITH CHECK ADD CONSTRAINT [FK_ClientData_aspnet_Users] FOREIGN KEY([UserId])

REFERENCES [dbo].[aspnet_Users] ([UserId])

ALTER TABLE [dbo].[ClientData] CHECK CONSTRAINT [FK_ClientData_aspnet_Users]

CREATE TABLE [dbo].[Employee](

[UserId] [uniqueidentifier] NOT NULL,

[LastName] [nvarchar](256) NOT NULL,

[FirstName] [nvarchar](256) NOT NULL,

[Patronumic] [nvarchar](256) NOT NULL,

[Salary] [money] NULL,

[Status] [bit] NULL,

[Experience] [float] NULL,

CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED

(

[UserId] ASC

)

WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [FK_Employee_aspnet_Users] FOREIGN KEY([UserId])

REFERENCES [dbo].[aspnet_Users] ([UserId])

ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [FK_Employee_aspnet_Users]

CREATE TABLE [dbo].[Jobs](

[JobId] [uniqueidentifier] NOT NULL,

[JobName] [nvarchar](max) NOT NULL,

[Start] [date] NOT NULL,

[Stop] [date] NOT NULL,

[Post] [nvarchar](50) NOT NULL,

CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED

([JobId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[UserInJobs](

[UserId] [uniqueidentifier] NOT NULL,

[JobId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_UserInJobs] PRIMARY KEY CLUSTERED

(

[UserId] ASC,

[JobId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[UserInJobs] WITH CHECK ADD CONSTRAINT [FK_UserInJobs_Employee] FOREIGN KEY([UserId])

REFERENCES [dbo].[Employee] ([UserId])

ALTER TABLE [dbo].[UserInJobs] CHECK CONSTRAINT [FK_UserInJobs_Employee]

ALTER TABLE [dbo].[UserInJobs] WITH CHECK ADD CONSTRAINT [FK_UserInJobs_Jobs] FOREIGN KEY([JobId])

REFERENCES [dbo].[Jobs] ([JobId])

ALTER TABLE [dbo].[UserInJobs] CHECK CONSTRAINT [FK_UserInJobs_Jobs]

CREATE TABLE [dbo].[Language](

[LanguageId] [uniqueidentifier] NOT NULL,

[LanguageName] [nvarchar](50) NOT NULL,

CONSTRAINT [PK_Language] PRIMARY KEY CLUSTERED

(

[LanguageId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[LanguageInEmployee](

[LanguageId] [uniqueidentifier] NOT NULL,

[UserId] [uniqueidentifier] NOT NULL,

[StartDate] [int] NULL,

[StopDate] [int] NULL,

[Experience] [int] NULL,

CONSTRAINT [PK_LanguageInEmployee] PRIMARY KEY CLUSTERED

(

[LanguageId] ASC,

[UserId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[LanguageInEmployee] WITH CHECK ADD CONSTRAINT [FK_LanguageInEmployee_Employee] FOREIGN KEY([UserId])

REFERENCES [dbo].[Employee] ([UserId])

ALTER TABLE [dbo].[LanguageInEmployee] CHECK CONSTRAINT [FK_LanguageInEmployee_Employee]

ALTER TABLE [dbo].[LanguageInEmployee] WITH CHECK ADD CONSTRAINT [FK_LanguageInEmployee_Language] FOREIGN KEY([LanguageId])

REFERENCES [dbo].[Language] ([LanguageId])

ALTER TABLE [dbo].[LanguageInEmployee] CHECK CONSTRAINT [FK_LanguageInEmployee_Language]

CREATE TABLE [dbo].[ProjectsData](

[ProjectId] [uniqueidentifier] NOT NULL,

[Status] [bit] NULL,

[ProjectName] [nvarchar](256) NOT NULL,

[startData] [date] NOT NULL,

[stopData] [date] NOT NULL,

[budget] [money] NOT NULL,

[ProjectDescription] [nvarchar](max) NULL,

[UserId] [uniqueidentifier] NULL,

[Result] [float] NULL,

CONSTRAINT [PK_ProjectsData] PRIMARY KEY CLUSTERED

(

[ProjectId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[ProjectInClient](

[ProjectId] [uniqueidentifier] NOT NULL,

[ClientId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_ProjectInClient] PRIMARY KEY CLUSTERED

(

[ProjectId] ASC,

[ClientId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[ProjectInClient] WITH CHECK ADD CONSTRAINT [FK_ProjectInClient_ClientData] FOREIGN KEY([ClientId])

REFERENCES [dbo].[ClientData] ([UserId])

ALTER TABLE [dbo].[ProjectInClient] CHECK CONSTRAINT [FK_ProjectInClient_ClientData]

ALTER TABLE [dbo].[ProjectInClient] WITH CHECK ADD CONSTRAINT [FK_ProjectInClient_ProjectsData] FOREIGN KEY([ProjectId])

REFERENCES [dbo].[ProjectsData] ([ProjectId])

ALTER TABLE [dbo].[ProjectInClient] CHECK CONSTRAINT [FK_ProjectInClient_ProjectsData]

CREATE TABLE [dbo].[LanguageInProject](

[LanguageId] [uniqueidentifier] NOT NULL,

[ProjectId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_LanguageInProject] PRIMARY KEY CLUSTERED

(

[LanguageId] ASC,

[ProjectId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[LanguageInProject] WITH CHECK ADD CONSTRAINT [FK_LanguageInProject_Language] FOREIGN KEY([LanguageId])

REFERENCES [dbo].[Language] ([LanguageId])

ALTER TABLE [dbo].[LanguageInProject] CHECK CONSTRAINT [FK_LanguageInProject_Language]

ALTER TABLE [dbo].[LanguageInProject] WITH CHECK ADD CONSTRAINT [FK_LanguageInProject_ProjectsData] FOREIGN KEY([ProjectId])

REFERENCES [dbo].[ProjectsData] ([ProjectId])

ALTER TABLE [dbo].[LanguageInProject] CHECK CONSTRAINT [FK_LanguageInProject_ProjectsData]

CREATE TABLE [dbo].[Phase](

[PhaseId] [uniqueidentifier] NOT NULL,

[PhaseName] [nvarchar](max) NOT NULL,

[StartDate] [date] NOT NULL,

[StopDate] [date] NOT NULL,

[Description] [nvarchar](max) NULL,

CONSTRAINT [PK_Phase] PRIMARY KEY CLUSTERED

(

[PhaseId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[PhaseInProject](

[ProjectId] [uniqueidentifier] NOT NULL,

[PhaseId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_PhaseInProject] PRIMARY KEY CLUSTERED

(

[ProjectId] ASC,

[PhaseId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[PhaseInProject] WITH CHECK ADD CONSTRAINT [FK_PhaseInProject_Phase] FOREIGN KEY([PhaseId])

REFERENCES [dbo].[Phase] ([PhaseId])

ALTER TABLE [dbo].[PhaseInProject] CHECK CONSTRAINT [FK_PhaseInProject_Phase]

ALTER TABLE [dbo].[PhaseInProject] WITH CHECK ADD CONSTRAINT [FK_PhaseInProject_ProjectsData] FOREIGN KEY([ProjectId])

REFERENCES [dbo].[ProjectsData] ([ProjectId])

ALTER TABLE [dbo].[PhaseInProject] CHECK CONSTRAINT [FK_PhaseInProject_ProjectsData]

CREATE TABLE [dbo].[Post](

[PostId] [uniqueidentifier] NOT NULL,

[Description] [nvarchar](max) NULL,

[PostName] [nvarchar](256) NOT NULL,

CONSTRAINT [PK_Post] PRIMARY KEY CLUSTERED

(

[PostId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[PostInEmployee](

[PostId] [uniqueidentifier] NOT NULL,

[UserId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_PostInEmployee] PRIMARY KEY CLUSTERED

([PostId] ASC,

[UserId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[PostInEmployee] WITH CHECK ADD CONSTRAINT [FK_PostInEmployee_Employee] FOREIGN KEY([UserId])

REFERENCES [dbo].[Employee] ([UserId])

ALTER TABLE [dbo].[PostInEmployee] CHECK CONSTRAINT [FK_PostInEmployee_Employee]

ALTER TABLE [dbo].[PostInEmployee] WITH CHECK ADD CONSTRAINT [FK_PostInEmployee_Post] FOREIGN KEY([PostId])

REFERENCES [dbo].[Post] ([PostId])

ALTER TABLE [dbo].[PostInEmployee] CHECK CONSTRAINT [FK_PostInEmployee_Post]

CREATE TABLE [dbo].[Tasks](

[TaskId] [uniqueidentifier] NOT NULL,

[TaskName] [nvarchar](256) NOT NULL,

[taskDescription] [nvarchar](256) NULL,

[startData] [date] NOT NULL,

[stopData] [date] NOT NULL,

[spentTime] [real] NULL,

[comment] [nvarchar](256) NULL,

CONSTRAINT [PK_Tasks] PRIMARY KEY CLUSTERED

(

[TaskId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[TaskInPhase](

[PhaseId] [uniqueidentifier] NOT NULL,

[TaskId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_TaskInPhase] PRIMARY KEY CLUSTERED

(

[PhaseId] ASC,

[TaskId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[TaskInPhase] WITH CHECK ADD CONSTRAINT [FK_TaskInPhase_Phase] FOREIGN KEY([PhaseId])

REFERENCES [dbo].[Phase] ([PhaseId])

ALTER TABLE [dbo].[TaskInPhase] CHECK CONSTRAINT [FK_TaskInPhase_Phase]

ALTER TABLE [dbo].[TaskInPhase] WITH CHECK ADD CONSTRAINT [FK_TaskInPhase_Tasks] FOREIGN KEY([TaskId])

REFERENCES [dbo].[Tasks] ([TaskId])

ALTER TABLE [dbo].[TaskInPhase] CHECK CONSTRAINT [FK_TaskInPhase_Tasks]

CREATE TABLE [dbo].[TasksInProject](

[TaskId] [uniqueidentifier] NOT NULL,

[ProjectId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_TasksInProject] PRIMARY KEY CLUSTERED

(

[TaskId] ASC,

[ProjectId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[TasksInProject] WITH CHECK ADD CONSTRAINT [FK_TasksInProject_Tasks] FOREIGN KEY([TaskId])

REFERENCES [dbo].[Tasks] ([TaskId])

ALTER TABLE [dbo].[TasksInProject] CHECK CONSTRAINT [FK_TasksInProject_Tasks]

CREATE TABLE [dbo].[Technology](

[TechnologyId] [uniqueidentifier] NOT NULL,

[TechnologyName] [nvarchar](50) NOT NULL,

CONSTRAINT [PK_Technology] PRIMARY KEY CLUSTERED

(

[TechnologyId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

CREATE TABLE [dbo].[TechnologyInEmployee](

[TechnologyId] [uniqueidentifier] NOT NULL,

[UserId] [uniqueidentifier] NOT NULL,

[StartDate] [int] NULL,

[StopDate] [int] NULL,

[Experience] [int] NULL,

CONSTRAINT [PK_TechnologyInEmployee] PRIMARY KEY CLUSTERED

(

[TechnologyId] ASC,

[UserId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[TechnologyInEmployee] WITH CHECK ADD CONSTRAINT [FK_TechnologyInEmployee_Employee] FOREIGN KEY([UserId])

REFERENCES [dbo].[Employee] ([UserId])

ALTER TABLE [dbo].[TechnologyInEmployee] CHECK CONSTRAINT [FK_TechnologyInEmployee_Employee]

ALTER TABLE [dbo].[TechnologyInEmployee] WITH CHECK ADD CONSTRAINT [FK_TechnologyInEmployee_Technology] FOREIGN KEY([TechnologyId])

REFERENCES [dbo].[Technology] ([TechnologyId])

ALTER TABLE [dbo].[TechnologyInEmployee] CHECK CONSTRAINT [FK_TechnologyInEmployee_Technology]

CREATE TABLE [dbo].[TexnologyInProject](

[TechnologyId] [uniqueidentifier] NOT NULL,

[ProjectId] [uniqueidentifier] NOT NULL,

CONSTRAINT [PK_TexnologyInProject] PRIMARY KEY CLUSTERED

(

[TechnologyId] ASC,

[ProjectId] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

ALTER TABLE [dbo].[TexnologyInProject] WITH CHECK ADD CONSTRAINT [FK_TexnologyInProject_ProjectsData] FOREIGN KEY([ProjectId])

REFERENCES [dbo].[ProjectsData] ([ProjectId])

ALTER TABLE [dbo].[TexnologyInProject] CHECK CONSTRAINT [FK_TexnologyInProject_ProjectsData]

ALTER TABLE [dbo].[TexnologyInProject] WITH CHECK ADD CONSTRAINT [FK_TexnologyInProject_Technology] FOREIGN KEY([TechnologyId])

REFERENCES [dbo].[Technology] ([TechnologyId])

ALTER TABLE [dbo].[TexnologyInProject] CHECK CONSTRAINT [FK_TexnologyInProject_Technology]

Приложение А.2

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

CREATE VIEW [dbo].[vw_Client]

WITH SCHEMABINDING

AS

SELECT dbo.aspnet_Users.UserName, dbo.aspnet_Users.UserId, dbo.ClientData.ClientName, dbo.ClientData.ClientDescription, dbo.aspnet_Membership.Email,

dbo.aspnet_Membership.CreateDate, dbo.aspnet_Membership.LastLoginDate, dbo.aspnet_Membership.LastPasswordChangedDate,

dbo.aspnet_Membership.Comment

FROM dbo.aspnet_Users INNER JOIN

dbo.ClientData ON dbo.aspnet_Users.UserId = dbo.ClientData.UserId INNER JOIN

dbo.aspnet_Membership ON dbo.aspnet_Users.UserId = dbo.aspnet_Membership.UserId

CREATE VIEW [dbo].[vw_Employee]

AS

SELECT dbo.Employee.UserId, dbo.Employee.LastName, dbo.Employee.FirstName, dbo.Employee.Patronumic, dbo.PostInEmployee.PostId, dbo.aspnet_Membership.Email,

dbo.aspnet_Users.UserName, dbo.aspnet_Membership.CreateDate, dbo.aspnet_Membership.LastLoginDate, dbo.aspnet_Membership.LastPasswordChangedDate,

dbo.aspnet_Membership.Comment, dbo.Employee.Salary, dbo.Employee.Status, dbo.Employee.Experience

FROM dbo.aspnet_Membership INNER JOIN

dbo.aspnet_Users ON dbo.aspnet_Membership.UserId = dbo.aspnet_Users.UserId INNER JOIN

dbo.Employee ON dbo.aspnet_Users.UserId = dbo.Employee.UserId INNER JOIN

dbo.PostInEmployee ON dbo.Employee.UserId = dbo.PostInEmployee.UserId

CREATE VIEW [dbo].[vw_Project]

AS

SELECT dbo.ProjectInClient.ClientId, dbo.ProjectsData.ProjectId, dbo.ProjectsData.Status, dbo.ProjectsData.ProjectName, dbo.ProjectsData.startData,

dbo.ProjectsData.stopData, dbo.ProjectsData.budget, dbo.ProjectsData.ProjectDescription, dbo.ProjectsData.UserId, dbo.ProjectsData.Result

FROM dbo.ProjectsData INNER JOIN

dbo.ProjectInClient ON dbo.ProjectsData.ProjectId = dbo.ProjectInClient.ProjectId

CREATE VIEW [dbo].[v_tasks]

AS

SELECT dbo.TaskInPhase.PhaseId, dbo.TasksInProject.ProjectId, dbo.EmployeeInTasks.UserId, dbo.Tasks.*

FROM dbo.Tasks INNER JOIN

dbo.TaskInPhase ON dbo.Tasks.TaskId = dbo.TaskInPhase.TaskId INNER JOIN

dbo.TasksInProject ON dbo.Tasks.TaskId = dbo.TasksInProject.TaskId INNER JOIN

dbo.EmployeeInTasks ON dbo.Tasks.TaskId = dbo.EmployeeInTasks.TaskId

Листинги создания хранимых процедур

CREATE PROCEDURE [dbo].[SaveClient]

-- Add the parameters for the stored procedure here

@UserId uniqueidentifier,

@ClientName nvarchar(256),

@ClientDescription nvarchar(256)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM ClientData WHERE UserId=@UserId)>0

BEGIN

UPDATE ClientData SET ClientName = @ClientName,ClientDescription=@ClientDescription WHERE UserId=@UserId;

END

ELSE

BEGIN

INSERT INTO ClientData(UserId,ClientName,ClientDescription) VALUES(@UserId,@ClientName,@ClientDescription);

END

END

CREATE PROCEDURE [dbo].[SaveEmployee]

-- Add the parameters for the stored procedure here

@UserId uniqueidentifier,

@LastName nvarchar(256),

@FirstName nvarchar(256),

@Patronumic nvarchar(256),

@PostId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Employee WHERE UserId=@UserId)>0

BEGIN

UPDATE Employee SET FirstName = @FirstName,LastName=@LastName,Patronumic = @Patronumic WHERE UserId=@UserId;

UPDATE PostInEmployee SET PostId = @PostId WHERE UserId = @UserId;

END

ELSE

BEGIN

INSERT INTO Employee(UserId,FirstName,LastName,Patronumic) VALUES(@UserId,@FirstName,@LastName,@Patronumic);

INSERT INTO PostInEmployee(PostId,UserId) VALUES(@PostId,@UserId);

END

END

CREATE PROCEDURE [dbo].[SaveJobs]

-- Add the parameters for the stored procedure here

@JobId uniqueidentifier,

@JobName nvarchar(256),

@Start date,

@Stop date,

@Post nvarchar(50)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Jobs WHERE JobId = @JobId)>0

BEGIN

UPDATE Jobs SET JobName = @JobName, Start=@Start, Stop=@Stop, Post=@Post WHERE JobId =@JobId;

END

ELSE

BEGIN

INSERT INTO Jobs(JobId,JobName,Start,Stop,Post) VALUES(@JobId,@JobName,@Start,@Stop,@Post);

END

END

CREATE PROCEDURE [dbo].[SaveJobsInEmployee]

-- Add the parameters for the stored procedure here

@JobId uniqueidentifier,

@UserId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO UserInJobs(UserId,JobId) VALUES(@UserId, @JobId);

END

CREATE PROCEDURE [dbo].[SaveLangInEmployee]

-- Add the parameters for the stored procedure here

@LanguageId uniqueidentifier,

@UserId uniqueidentifier,

@StartDate int,

@StopDate int,

@Experience int

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO LanguageInEmployee(LanguageId,UserId,StartDate,StopDate,Experience) VALUES(@LanguageId,@UserId,@StartDate,@StopDate, @Experience);

END

CREATE PROCEDURE [dbo].[SaveLangInProject]

-- Add the parameters for the stored procedure here

@LanguageId uniqueidentifier,

@ProjectId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO LanguageInProject(LanguageId,ProjectId) VALUES(@LanguageId,@ProjectId);

END

CREATE PROCEDURE [dbo].[SaveLanguage]

-- Add the parameters for the stored procedure here

@LanguageId uniqueidentifier,

@LanguageName nvarchar(256)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Language WHERE LanguageId = @LanguageId)>0

BEGIN

UPDATE Language SET LanguageName = @LanguageName WHERE LanguageId =@LanguageId;

END

ELSE

BEGIN

INSERT INTO Language(LanguageId,LanguageName) VALUES(@LanguageId,@LanguageName);

END

END

CREATE PROCEDURE [dbo].[SavePhase]

-- Add the parameters for the stored procedure here

@PhaseId uniqueidentifier,

@PhaseName nvarchar(256),

@StartDate date,

@StopDate date,

@Description nvarchar(256)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Phase WHERE PhaseId = @PhaseId)>0

BEGIN

UPDATE Phase SET PhaseName = @PhaseName,StartDate = @StartDate,StopDate = @StopDate,Description = @Description WHERE PhaseId =@PhaseId;

END

ELSE

BEGIN

INSERT INTO Phase(PhaseId,PhaseName,StartDate,StopDate,Description) VALUES(@PhaseId,@PhaseName,@StartDate,@StopDate,@Description);

END

END

CREATE PROCEDURE [dbo].[SavePhaseInProject]

-- Add the parameters for the stored procedure here

@ProjectId uniqueidentifier,

@PhaseId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO PhaseInProject(ProjectId, PhaseId) VALUES(@ProjectId, @PhaseId);

END

CREATE PROCEDURE [dbo].[SavePost]

-- Add the parameters for the stored procedure here

@PostId uniqueidentifier,

@PostName nvarchar(256),

@Description nvarchar(MAX)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Post WHERE PostId = @PostId)>0

BEGIN

UPDATE Post SET PostName = @PostName,[Description]=@Description WHERE PostId =@PostId;

END

ELSE

BEGIN

INSERT INTO Post(PostId,PostName,[Description]) VALUES(@PostId,@PostName,@Description);

END

END

CREATE PROCEDURE [dbo].[SaveProject]

-- Add the parameters for the stored procedure here

@ProjectId uniqueidentifier,

@ClientId uniqueidentifier,

@ProjectName nvarchar(256),

@ProjectDescription nvarchar(256),

@startData date,

@stopData date,

@budget money,

@Status bit,

@UserId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM ProjectsData WHERE ProjectId=@ProjectId)>0

BEGIN

UPDATE ProjectsData SET ProjectName = @ProjectName,startData = @startData, stopData = @stopData, ProjectDescription=@ProjectDescription, Status=@Status,UserId=@UserId WHERE ProjectId=@ProjectId;

UPDATE ProjectInClient SET ClientId=@ClientId WHERE ProjectId=@ProjectId;

END

ELSE

BEGIN

INSERT INTO ProjectsData(ProjectId,Status,ProjectName,startData,stopData,budget,ProjectDescription) VALUES(@ProjectId,@Status,@ProjectName,@startData,@stopData,@budget,@ProjectDescription);

INSERT INTO ProjectInClient(ProjectId,ClientId) VALUES (@ProjectId,@ClientId);

END

END

CREATE PROCEDURE [dbo].[SaveTask]

-- Add the parameters for the stored procedure here

@TaskId uniqueidentifier,

@ProjectId uniqueidentifier,

@TaskName nvarchar(256),

@taskDescription nvarchar(256),

@start_data date,

@stop_data date,

@spentTime real,

@comment nvarchar(256),

@UserId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Tasks WHERE TaskId=@TaskId)>0

BEGIN

UPDATE Tasks SET TaskName = @TaskName,startData = @start_data, stopData = @stop_data, taskDescription=@taskDescription, spentTime = @spentTime, comment = @comment WHERE TaskId=@TaskId;

UPDATE EmployeeInTasks SET UserId=@UserId WHERE TaskId=@TaskId;

END

ELSE

BEGIN

INSERT INTO Tasks(TaskId,TaskName,startData,stopData,taskDescription,spentTime,comment ) VALUES(@TaskId,@TaskName,@start_data,@stop_data,@taskDescription,@spentTime,@comment);

INSERT INTO EmployeeInTasks(TaskId,UserId) VALUES (@TaskId,@UserId);

INSERT INTO TasksInProject(ProjectId,TaskId) VALUES (@ProjectId,@TaskId);

END

END

CREATE PROCEDURE [dbo].[SaveTaskInPhase]

-- Add the parameters for the stored procedure here

@PhaseId uniqueidentifier,

@TaskId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO TaskInPhase(PhaseId,TaskId) VALUES(@PhaseId,@TaskId);

END

CREATE PROCEDURE [dbo].[SaveTechInEmployee]

-- Add the parameters for the stored procedure here

@TechnologyId uniqueidentifier,

@UserId uniqueidentifier,

@StartDate int,

@StopDate int,

@Experience int

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO TechnologyInEmployee(TechnologyId,UserId,StartDate,StopDate,Experience) VALUES(@TechnologyId,@UserId,@StartDate,@StopDate, @Experience);

END

CREATE PROCEDURE [dbo].[SaveTechInProject]

-- Add the parameters for the stored procedure here

@TechnologyId uniqueidentifier,

@ProjectId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO TexnologyInProject(TechnologyId,ProjectId) VALUES(@TechnologyId,@ProjectId);

END

CREATE PROCEDURE [dbo].[SaveTechInProject]

-- Add the parameters for the stored procedure here

@TechnologyId uniqueidentifier,

@ProjectId uniqueidentifier

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

INSERT INTO TexnologyInProject(TechnologyId,ProjectId) VALUES(@TechnologyId,@ProjectId);

END

CREATE PROCEDURE [dbo].[SaveTechnology]

-- Add the parameters for the stored procedure here

@TechnologyId uniqueidentifier,

@TechnologyName nvarchar(256)

AS

BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from

-- interfering with SELECT statements.

SET NOCOUNT ON;

-- Insert statements for procedure here

IF (SELECT COUNT(*) FROM Technology WHERE TechnologyId = @TechnologyId)>0

BEGIN

UPDATE Technology SET TechnologyName = @TechnologyName WHERE TechnologyId =@TechnologyId;

END

ELSE

BEGIN

INSERT INTO Technology(TechnologyId,TechnologyName) VALUES(@TechnologyId,@TechnologyName);

END

END

Листинги создания функций

CREATE FUNCTION [dbo].[V_JobsInEmployee] (@UserId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.Jobs.JobId, dbo.Employee.UserId, dbo.Jobs.JobName

FROM dbo.UserInJobs INNER JOIN

dbo.Jobs ON dbo.UserInJobs.JobId = dbo.Jobs.JobId INNER JOIN

dbo.Employee ON dbo.UserInJobs.UserId = dbo.Employee.UserId

WHERE (dbo.Employee.UserId = @UserId)

CREATE FUNCTION [dbo].[V_LanguagesInEmployee] (@UserId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.Language.LanguageId, dbo.Employee.UserId, dbo.Language.LanguageName, dbo.LanguageInEmployee.Experience

FROM dbo.LanguageInEmployee INNER JOIN

dbo.Language ON dbo.LanguageInEmployee.LanguageId = dbo.Language.LanguageId INNER JOIN

dbo.Employee ON dbo.LanguageInEmployee.UserId = dbo.Employee.UserId

WHERE (dbo.Employee.UserId = @UserId)

CREATE FUNCTION [dbo].[V_LanguagesInProject] (@ProjectId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.Language.LanguageId, dbo.ProjectsData.ProjectId, dbo.Language.LanguageName

FROM dbo.LanguageInProject INNER JOIN

dbo.Language ON dbo.LanguageInProject.LanguageId = dbo.Language.LanguageId INNER JOIN

dbo.ProjectsData ON dbo.LanguageInProject.ProjectId = dbo.ProjectsData.ProjectId

WHERE (dbo.ProjectsData.ProjectId = @ProjectId)

CREATE FUNCTION [dbo].[V_PhaseInProject] (@ProjectId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.Phase.*, dbo.ProjectsData.ProjectId

FROM dbo.PhaseInProject INNER JOIN

dbo.Phase ON dbo.PhaseInProject.PhaseId = dbo.Phase.PhaseId INNER JOIN

dbo.ProjectsData ON dbo.PhaseInProject.ProjectId = dbo.ProjectsData.ProjectId

WHERE (dbo.ProjectsData.ProjectId = @ProjectId)

CREATE FUNCTION [dbo].[V_ProjectInPhase] (@PhaseId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.vw_Project.*

FROM dbo.PhaseInProject INNER JOIN

dbo.vw_Project ON dbo.PhaseInProject.ProjectId = dbo.vw_Project.ProjectId

WHERE (dbo.PhaseInProject.PhaseId = @PhaseId)

CREATE FUNCTION [dbo].[V_TasksInPhase] (@PhaseId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT *

FROM v_tasks

WHERE v_tasks.PhaseId = @PhaseId

CREATE FUNCTION [dbo].[V_TechnologysInEmployee] (@UserId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.Employee.UserId, dbo.Technology.TechnologyName, dbo.Technology.TechnologyId,dbo.TechnologyInEmployee.Experience

FROM dbo.Technology INNER JOIN

dbo.TechnologyInEmployee ON dbo.Technology.TechnologyId = dbo.TechnologyInEmployee.TechnologyId INNER JOIN

dbo.Employee ON dbo.TechnologyInEmployee.UserId=dbo.Employee.UserId

WHERE dbo.Employee.UserId = @UserId;

CREATE FUNCTION [dbo].[V_TechnologysInProject] (@ProjectId uniqueidentifier)

RETURNS TABLE

AS

RETURN

SELECT dbo.ProjectsData.ProjectId, dbo.Technology.TechnologyName, dbo.Technology.TechnologyId

FROM dbo.Technology INNER JOIN

dbo.TexnologyInProject ON dbo.Technology.TechnologyId = dbo.TexnologyInProject.TechnologyId INNER JOIN

dbo.ProjectsData ON dbo.TexnologyInProject.ProjectId = dbo.ProjectsData.ProjectId

WHERE dbo.ProjectsData.ProjectId = @ProjectId;

Приложение В

Листинги классов приложения

Класс DBUtils

using System;

using System.Collections.Generic;

using System.Configuration;

using System.Data.SqlClient;

using System.Text.RegularExpressions;

namespace Model.Helpers

{

class DBUtils

{

public delegate void TGenerateListFromReader<T>(SqlDataReader returnData, ref List<T> tempList);

/// <summary>

/// get connection string from web.config

/// </summary>

public static string ConnectionString

{

get

{

var conStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

if (string.IsNullOrEmpty(conStr))

throw (new NullReferenceException("ConnectionString configuration is in web.config. It should contain <connectionStrings> </connectionStrings>"));

return conStr;

}

}

protected static void TExecuteReaderCmd<T>(SqlCommand sqlCmd, TGenerateListFromReader<T> gcfr, ref List<T> List)

{

if (ConnectionString == string.Empty)

throw (new ArgumentOutOfRangeException("ConnectionString"));

if (sqlCmd == null)

throw (new ArgumentNullException("sqlCmd"));

using (SqlConnection cn = new SqlConnection(ConnectionString))

{

sqlCmd.Connection = cn;

cn.Open();

SqlDataReader sqlDataReader = sqlCmd.ExecuteReader();

gcfr(sqlDataReader, ref List);

cn.Close();

}

}

protected static bool TExecuteModifyCmd(SqlCommand sqlCmd )

{

if (string.IsNullOrEmpty(ConnectionString))

throw (new ArgumentOutOfRangeException("ConnectionString"));

if (sqlCmd == null)

throw (new ArgumentNullException("sqlCmd"));

int result;

using (SqlConnection cn = new SqlConnection(ConnectionString))

{

sqlCmd.Connection = cn;

try

{

sqlCmd.Connection.Open();

}

catch (Exception)

{

throw (new ArgumentOutOfRangeException("ConnectionError"));

}

try

{

result = sqlCmd.ExecuteNonQuery();

}

catch (Exception e)

{

result = 0;

}

}

return result != -1 }

public static void AddParameterToSql(SqlCommand sqlCmd, string parameterName, object value)

{

sqlCmd.Parameters.AddWithValue(parameterName, value ?? DBNull.Value);

}

public static string GetStringFromSql(SqlDataReader returnData, string parameterName)

{

if (!returnData[parameterName].Equals(DBNull.Value))

return returnData[parameterName].ToString();

return string.Empty;

}

public static int? GetInt32FromSql(SqlDataReader returnData, string parameterName)

{

if (!returnData[parameterName].Equals(DBNull.Value))

return Convert.ToInt32(returnData[parameterName]);

return null;

}

public static Guid? GetGuidFromSql(SqlDataReader returnData, string parameterName)

{

try

{

if (!returnData[parameterName].Equals(DBNull.Value) && IsGUID(returnData[parameterName].ToString()))

return new Guid(returnData[parameterName].ToString());

return null;

}

catch (Exception e)

{

var ex = e; }

return null;

}

private static bool IsGUID(string expression)

{

if (expression != null)

{

var guidRegEx = new Regex(@"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");

return guidRegEx.IsMatch(expression);

}

return false;

}

public static bool? GetBooleanFromSql(SqlDataReader returnData, string ParameterName)

{

if (!returnData[ParameterName].Equals(DBNull.Value))

return Convert.ToBoolean(returnData[ParameterName].ToString());

return null;

}

public static DateTime? GetDateTimeFromSql(SqlDataReader returnData, string ParameterName)

{

if (!returnData[ParameterName].Equals(DBNull.Value))

try

{

return Convert.ToDateTime(returnData[ParameterName].ToString());

}

catch (FormatException)

{

return null;

}

return null;

}

public static Decimal? GetDecimalFromSql(SqlDataReader returnData, string ParameterName)

{

if (!returnData[ParameterName].Equals(DBNull.Value))

return Convert.ToDecimal(returnData[ParameterName]);

return null;

} }}

Класс ClientDB

namespace Model.Helpers

{

class ClientDB:DBUtils

{

private static void GenerateClientList(SqlDataReader returnData, ref List<Client> list)

{

while (returnData.Read())

{

var client = new Client();

var guidFromSql = GetGuidFromSql(returnData, "UserId");

if (guidFromSql != null) client.Id = guidFromSql.Value;

client.Name = GetStringFromSql(returnData, "ClientName");

client.Mail = GetStringFromSql(returnData, "Email");

client.Login = GetStringFromSql(returnData, "UserName");

client.Description = GetStringFromSql(returnData, "ClientDescription");

var dateTimeFromSql = GetDateTimeFromSql(returnData, "CreateDate");

if (dateTimeFromSql != null)

client.CreateDt = dateTimeFromSql.Value;

dateTimeFromSql = GetDateTimeFromSql(returnData, "LastLoginDate");

if (dateTimeFromSql.HasValue)

client.LastLoginDt = dateTimeFromSql.Value;

dateTimeFromSql = GetDateTimeFromSql(returnData, "LastPasswordChangedDate");

if (dateTimeFromSql.HasValue)

client.LastPasswordChangedDt = dateTimeFromSql.Value;

client.Comment = GetStringFromSql(returnData, "Comment");

list.Add(client);

}

}

public static Client GetClientById(Guid Id)

{

var sqlCmd = new SqlCommand("select * from vw_Client where UserId=@UserId ");

AddParameterToSql(sqlCmd, "@UserId", Id);

var clList = new List<Client>();

TExecuteReaderCmd(sqlCmd, GenerateClientList, ref clList);

return clList.Count > 0 ? clList[0] : null;

}

public static List<Client> GetClients()

{

var sqlCmd = new SqlCommand("select * from vw_Client");

var clList = new List<Client>();

TExecuteReaderCmd(sqlCmd, GenerateClientList, ref clList);

return clList;

}

/// <summary>

/// Сохранение данных о клиенте. Выполнение хранимой процедуры на сервере.

/// </summary>

/// <param name="client"></param>

public static void SaveClient(Client client)

{

var sqlCmd = new SqlCommand("SaveClient");


Подобные документы

  • Сущность управления проектами, этапы его реализации и необходимые для этого знания, порядок составления и назначение Плана управления проектом. Концепция тройственной ограниченности. Использование программы MS Oficce Project в управлении проектами.

    реферат [24,9 K], добавлен 16.11.2009

  • Разработка системы управления проектами для компании ЗАО "Диакон". Экономические параметры разработки и внедрения электронной информационной системы. Технология разработки программного обеспечения. Выбор типа графического интерфейса, его составляющие.

    дипломная работа [1,4 M], добавлен 10.06.2014

  • Проект программного продукта, представляющего собой веб-приложение в виде системы управления веб-контентом и предназначенного для быстрого создания простых сайтов. Функциональные требования в рамках языка UML. Разработка визуальных интерфейсов системы.

    дипломная работа [5,0 M], добавлен 11.07.2012

  • Необходимая терминология и основные программные продукты для управления проектами. Краткое ознакомление с системами: Project, Primavera, Spider Protect и Open Plan. Корпоративное управление проектами. Отличительные черты программного обеспечения СКПК.

    контрольная работа [1,3 M], добавлен 13.09.2010

  • Обзор рынка Информационных технологий. Современные автоматизированные системы управления проектами и их классификация. Open Plan (Welcom Software) - система, предлагающая решение по управлению проектами масштаба корпорации. Основные модули Open Plan.

    курсовая работа [630,9 K], добавлен 24.02.2010

  • Разработка методов сетевого планирования как способа управления проектами. Характеристика компьютерных программ Microsoft Project Server, Time Line and Sure Trak Project Manager, Open Plan, Primavera и Spider Project для автоматизации работы предприятий.

    реферат [152,4 K], добавлен 10.02.2012

  • Сущность логистического бизнес-процесса. Функциональная, инфологическая и даталогическая модели предметной области. Выбор языка и средства программирования. Разработка и описание программного обеспечения для автоматизации закупок на предприятии.

    дипломная работа [4,8 M], добавлен 29.06.2012

  • Использование офисного пакета Microsoft Project для управления проектами. Связь задач с помощью зависимостей, определяющих порядок выполнения задач относительно друг друга. Разбиение проекта на фазы. Представление плана работ с помощью диаграммы Ганта.

    контрольная работа [40,4 K], добавлен 22.03.2012

  • Общие принципы управления проектами как процесс планирования, организации и контроля за состоянием его задач и ресурсов. Инструменты управления проектами от Microsoft. Описание ресурсов и затрат. Контроль хода выполнения, технология подготовки отчетов.

    лекция [1,6 M], добавлен 15.03.2014

  • Принцип работы и задачи информационных систем управления проектами. Методы критического пути, анализа и оценки планов. Сетевые модель и график, виды путей. Информационный обмен между предприятиями, классификация информационных систем и их рынки сбыта.

    контрольная работа [17,0 K], добавлен 18.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.