Автоматизированное рабочее место инженера по гарантии СТО "Континент"

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего

профессионального образования

«Национальный исследовательский ядерный университет «МИФИ»

Димитровградский инженерно-технологический институт - филиал НИЯУ МИФИ

Факультет информационно-технолигический

Кафедра информационных технологий




ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К ДИПЛОМНОМУ ПРОЕКТУ НА ТЕМУ:

«Автоматизированное рабочее место инженера по гарантии СТО «Континент»


Студент-дипломник

Группы ПОуз-61Гайсин В.Ф.

Руководитель

ст. преподавательКолбасов П.А.

Рецензент

ст. преподаватель Шаповалов А.Ю.

Заведующий кафедрой

доцент, к.п.н. Ракова О.А.




Димитровград, 2012 г.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего профессионального образования

«Национальный исследовательский ядерный университет «МИФИ»

Димитровградский инженерно-технологический институт - филиал НИЯУ МИФИ

ФАКУЛЬТЕТ информационно-технологический

КАФЕДРА ИТ


СПЕЦИАЛЬНОСТЬ 230105.65

ГРУППА ПОуз-61

«УТВЕРЖДАЮ»

Заведующий кафедрой

/Ракова О.А./

«_____»___________2012г.


ЗАДАНИЕ НА ДИПЛОМНЫЙ ПРОЕКТ


.Фамилия, имя, отчество дипломанта Гайсин Вадим Факилевич

.Тема проекта Автоматизированное рабочее место инженера по гарантии СТО «Континент»

. Срок сдачи студентом готовой работы__________________________

. Руководитель дипломного проектирования Колбасов П.А

. Консультанты Кузнецова Т.А., Ильмушкин А.Г.

Дата выдачи задания «____»__________20 г.

Руководитель дипломного проекта______________________________

(подпись руководителя)

Задание принял к исполнению __________________________________

(дата и подпись студента)

.Исходные данные к работе:

требования к уровню разработки программного продукта:

а) удобный пользовательский интерфейс;

б) среда разработки Visual Studio 2010 Express;

в) язык программирования C#;

г) СУБД MS SQL 2008 Express;

д) ОС: Windows 2000/2003/XP/Vista/7;

е) тип ЭВМ: IBM PC - совместимый ПК.

.Содержание работы:

а) обзорная часть:

описание предметной области;

описание структуры станции технического обслуживания;

б) теоретическая часть:

обоснование средств разработки;

теория реляционных баз данных;

описание возможностей MS Visual Studio 2010 Express;

- обзор функций MS SQL 2008 Express;

в) экспериментальная часть:

- подробное описание реализации, тестирования и отладки программного средства;

г) экономико-организационная часть:

расчёт стоимости программного продукта и анализ стоимости использования;

обоснование экономического эффекта продукта;

д) раздел безопасности жизнедеятельности:

гигиеническое нормирование условий труда программистов, операторов ЭВМ;

виды ответственности за нарушение законодательных и нормативно-правовых актов по безопасности труда;

защита персонала предприятий ИВО от опасных и вредных излучений.

. Основная литература по теме работы:

а) Нильсен П. Microsoft SQL Server 2008. Библия пользователя [Текст] / Нильсен П. - М.: ООО «И.Д. Вильямс», 2008. - 1232 с.

б) Сахил М. Microsoft ADO.NET 2.0 для профессионалов [Текст] / Сахил М. - М.: ООО «И.Д. Вильямс», 2006. - 560с.

в) Раттц Дж. LINQ: интегрированный язык запросов в C# 2008 для профессионалов [Текст] / Раттц Дж. - М.: ООО «И.Д. Вильямс», 2008. - 560с.

. Отчетный материал работы:

а) пояснительная записка;

б) макетно-экспериментальная часть: каркас базы данных MS SQL 2008, программные модули;

в) презентация в формате Power Point;

5. Консультанты по работе, с указанием относящихся к ним разделов проекта:


РазделКонсультантПодпись, датаЗадание выдалЗадание принялБЖДКузнецова Т.А.ЭкономикаИльмушкин А.Г.

КАЛЕНДАРНЫЙ ГРАФИК ВЫПОЛНЕНИЯ ДИПЛОМНОГО ПРОЕКТА

№ п/пНазвание этаповОбъем этапа в %Сроки выполненияПримечаниеначалоконец1.Анализ исходных данных, выбор схемы и основных параметров514.11.201120.11.20112.Разработка основной части4020.11.201120.12.20113.Разработка графической части1020.12.201131.12.20114.Разработка экономико-организационной части510.01.201215.01.20125.Разработка раздела по безопасности жизнедеятельности515.01.201220.01.20126.Оформление пояснительной записки писки2520.01.20125.02.20127.Представление работы на проверку и отзыв руководителя дипломной работы квалификационной работы205.02.201210.02.20128.Представление работы заведующему кафедрой210.02.201212.02.20129.Представление на рецензию412.02.201217.02.201210.Защита на заседании ГАК218.02.201218.02.2012

Руководитель: /Колбасов П.А /


РЕФЕРАТ


Гайсин В.Ф. АВТОМАТИЗИРОВАННОЕ РАБОЧЕЕ МЕСТО ИНЖЕНЕРА ПО ГАРАНТИИ СТО КОНТИНЕНТ: Дипломный проект/ДИТИ НИЯУ МИФИ, №230105.65-003-12. - Димитровград, 2012. - 72 стр., рис. 31, табл. 24, библ. назв. 19, приложений 3.

Ключевые слова: БАза данных, автоматизированное рабочее место, отчет, клиент-сервер, ms sql, ЗАПРОС, станция технического обслуживания, инженер по гарантии, субд, интерфейс.

Объект исследования - деятельность инженера по гарантии станции технического обслуживания «Континент»

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

Основные конструкторские и экономические показатели: приложение реализовано на языке программирования С# в среде разработки MS Visual Studio 2010 Express, внедрение данного программного комплекса позволит сократить время составления выходной документации инженера по гарантии.

Срок окупаемости - 8 месяцев.

Выводы: Создан и внедрён программный продукт, автоматизирующий деятельность инженера по гарантии. Внедрение повысило производительность и эффективность труда инженера по гарантии. В перспективе планируется расширение выходной документации и выгрузка данных в 1С.

Содержание


Введение

. Обзорная часть

.1 Общая характеристика СТО

.2 СТО как сервис

.3 Организационная модель СТО

Вывод по разделу 1

. Выбор средств разработки

.1 Базы данных и СУБД

.1.1 Первые модели данных и СУБД

.1.2 Реляционная модель данных

.2 Выбор СУБД

.2.1 MS SQL Server 2008 Express

.2.2 Интерфейсы для доступа к данным LINQ и ADO.NET

.2.3 Модель удаленного управления данными

.2.4 Модель удаленного доступа к данным

.2.5 Преимущества архитектуры клиент-сервер

.2.6 Компоненты архитектуры клиент-сервер

.3 Выбор средств разработки

.4 Выбор языка программирования

Вывод по разделу 2

. Разработка программы и создание базы данных

.1 Проектирование базы данных

.2 Разработка концептуальной модели базы данных

.3 Запросы

.4 Структура программного комплекса

.5 Разработка пользовательского интерфейса

.4 Тестирование программного обеспечения

Вывод по разделу 3

. Экономический раздел

.1 Расчёт затрат на разработку программного комплекса

.2 Оценка экономической эффективности эксплуатации комплекса

Вывод по разделу 4

. Безопасность жизнедеятельности

.1 Гигиеническое нормирование условий труда программистов, операторов электронно-вычислительных машин

.2 Ответственность за нарушение законодательных и нормативно-правовых актов по безопасности труда

.3 Защита персонала предприятий ИВО от опасных и вредных излучений

Вывод по разделу 5

Заключение

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

Приложение А - Акт выполненных работ

Приложение Б - Ведомость установленных запчастей

Приложение В - Исходные коды программы


Введение


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

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

Одним из первых примеров подобного системного применения ЭВМ в мировой практике были так называемые административные системы обработки данных: автоматизация банковских операций, бухгалтерского учета, резервирования и оформления билетов и т.п. Решающее значение для эффективности систем подобного рода имеет то обстоятельство, что они опираются на автоматизированные информационные базы. При решении очередной задачи система нуждается во вводе только небольшой порции дополнительной информации, остальное берется из информационной базы. Каждая порция вновь вводимой информации изменяет информационную базу системы. Эта база (информационная, или база данных) находится, таким образом, в состоянии непрерывного обновления, отражая все изменения, происходящие в реальном объекте, с которым имеет дело система.

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

По мере своего дальнейшего развития административные системы обработки данных переросли в автоматизированные системы управления соответствующими объектами, в которых, как правило, не ограничиваются одной ЭВМ, а в составе двух и более ЭВМ объединяют в вычислительный комплекс.

Интеллектуальные АРМ в свою очередь также содержат в своем составе ЭВМ, тем или иным способом подсоединенную к центральной ЭВМ (ВК) АСУ. Устройства ввода также должны обеспечивать широкий спектр вводимой информации: текстовой, координатной, факсимильной и т.д. Поэтому АРМ оснащаются при необходимости универсальной или специальной клавиатурой, устройствами ввода координатной информации, различного рода сканерами и т.д.

С целью повысить спектр форм представления информации, выводимой из ЭВМ, АРМ оснастили цветными мониторами, средствами создания и управления звуковыми сигналами вплоть до возможности создания и воспроизведения речевых сигналов.

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

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

Все обращающиеся в СТО клиенты, желающие оформить заказ на оказание услуг, должны заполнить форму регистрации, в которой необходимо указать свои ФИО, марку автомобиля, номерной знак и ФИО владельца машины, контактный телефон.

Таким образом, в функционирование СТО входит:

·Регистрация клиентов.

·Справочная информация о доступных услугах.

·Прием заказа на оказание услуг.

·Справочная информация о сделанном заказе.

·Отчет о проделанных работах и расчет стоимости предоставленных услуг, а так же установленных запчастях.

Данные функции на СТО выполняет инженер по гарантии. Это очень трудоемкая бумажная работа, затрачивающая большое количество времени, поэтому необходимо было разработать АРМ инженера по гарантии.

Данный проект разрабатывался по заказу ООО «Континент», он предназначен для автоматизации работы инженера. К программному комплексу были предъявлены такие требования как: все компоненты должны обладать удобным графическим пользовательским интерфейсом и работать под операционной системой Windows.

1. Обзорная часть


.1 Общая характеристика СТО


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

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


.2 СТО как сервис


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

Срочная организация сервисных инфраструктур для обеспечения подъема экономики исправной техникой - задача стратегическая. Темпы подъема экономики зависят и от сроков ремонта эксплуатируемой предприятиями техники. Более того, развитие сервисной инфраструктуры - это подъем одной из отраслей экономики, которая будет приносить налоговые отчисления.

Приоритетные задачи современного сервиса формулируются следующим образом:

·неукоснительное выполнение персоналом обязанностей и функций, зафиксированных в должностных инструкциях;

·постоянная забота об улучшении внешнего вида и интерьеров предприятия;

·использование ПО для минимизации времени выполнения задач;

·периодическая модернизация всех зданий, сооружений и оборудования с целью максимального удовлетворения потребностей клиентов и сотрудников предприятия;

·приведение количества рабочих мест и кадровых возможностей в соответствие с фактическим наличием заказов;

·увеличение прибыли посредством рационального управления предприятием и непрерывного контроля за показателями его эффективности.

·учет и контроль рабочего времени по организационно-экономическим критериям;

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

·организация технической помощи на дороге и эвакуации неисправных автомобилей силами предприятия;

·применение рекомендованных изготовителем машин нестандартных инструментов и приспособлений, аппаратуры и оборудования;

·проверка, пополнение и эффективное использование всех имеющихся информационных материалов;

·целенаправленное повышение квалификации работников в курсовых и семинарских и других учебных мероприятиях.


.3 Организационная модель СТО


Организационная структура СТО направлена на установление четких взаимосвязей между всеми ее отделениями, их тесного взаимодействия в выполнении поставленных задач.

Организационная структура СТО представлена на рисунке 1.1.


Рисунок 1.1 - Организационная модель деятельности СТО


На станции технического обслуживания работают:

·инженер по гарантии - 1 человек;

·начальник отдела маркетинга - 1 человек;

·главный бухгалтер - 1 человек;

·жестянщик - 1 человек;

·автомаляр - 2 человека;

·автослесарь - 2 человека;

·диагност-электрик - 3 человека

·генеральный директор, являющийся единственным владельцем СТО.

Вывод по разделу 1


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


2. Выбор средств разработки


.1 Базы данных и СУБД


Базы данных - это совокупность структурированных взаимосвязанных данных, относящихся к определенной предметной области и организованных таким образом, что эти данные могут быть использованы для решения многих задач многими пользователями[2].

Системы управления базами данные (СУБД) - это набор программных модулей, необходимый и достаточный для создания и поддержания базы данных, т.е. универсальная часть, решающая стандартные задачи по информационному обслуживанию пользователя.

СУБД выполняет роль посредника между пользователями приложений и данными. Также СУБД должна обеспечивать гарантии безопасности и целостности базы данных. Пользователи компьютера должны иметь возможность защитить свои данные от несанкционированного доступа, а также восстановить их в случае неких системных сбоев. Централизованное обеспечение безопасности данных - важная особенность СУБД. Наиболее значительное преимущество систем с базами данных - это централизованное обеспечение целостности данных [3].


.1.1 Первые модели данных и СУБД

Одной из наиболее важных сфер применения первых СУБД было планирование производства для компаний, занимающихся выпуском продукции. Например, если автомобильная компания хотела выпустить 10000 машин одной модели и 5000 машин другой модели, ей необходимо было знать, сколько деталей следует заказать у своих поставщиков. Чтобы ответить на этот вопрос, необходимо определить, из каких деталей состоят эти части и т.д. Например, машина состоит из двигателя, корпуса и ходовой части; двигатель состоит из клапанов, цилиндров, свеч и т.д. Работа со списками составных частей была, как будто специально предназначена для компьютеров [4].

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


Рисунок 2.1 - Иерархическая база данных


В этой модели каждая запись базы данных представляла конкретную деталь. Между записями существовали отношения предок/потомок, связывающие каждую часть с деталями, входящими в неё.

Чтобы получить доступ к данным, содержащимся в базе данных, программа могла:

·найти конкретную деталь (правую дверь) по её номеру;

·перейти «вниз» к первому потомку (ручка двери);

·перейти «вверх» к предку (корпус);

·перейти «в сторону» к другому потомку (правая дверь).

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

Одной из наиболее популярных иерархических СУБД была Information Management System (IMS) компании IBM, появившаяся в 1968 году. Ниже перечислены преимущества IMS и реализованной в ней иерархической модели:

·Простота модели. Принцип построения IMS был легок для понимания. Иерархия базы данных напоминала структуру компании или генеалогическое дерево.

·Использование отношений предок/потомок. СУБД IMS позволяла легко представлять отношения предок/потомок, например: «А является частью В» или «А владеет В».

·Быстродействие. В СУБД IMS отношения предок/потомок были реализованы в виде физических указателей из одной записи на другую, вследствие чего перемещение по базе данных происходило быстро. Поскольку структура данных в этой СУБД отличалась простотой, IMS могла размещать записи предков и потомков на диске рядом друг с другом, что позволяло свести к минимуму количество операций записи-чтения.

Если структура данных оказывалась сложнее, чем обычная иерархия, простота структуры иерархической базы данных становилась её недостатком. Например, в базе данных для хранения заказов один заказ мог участвовать в трёх различных отношениях предок/потомок, связывающих заказ с клиентом, разместившим его, со служащим, принявшим его, и с заказанным товаром, что иллюстрирует рисунок 2.2. Такие структуры данных не соответствовали строгой иерархии IMS [5].


Рисунок 2.2 - Множественные отношения предок/потомок

В связи с этим для таких приложений, как обработка заказов, была разработана новая сетевая модель данных. Она являлась улучшенной иерархической моделью, в которой одна запись могла участвовать в нескольких отношениях предок/потомок, как показано на рисунке 2.3.


Рисунок 2.3 - Сетевая база данных


В сетевой модели такие отношения назывались множествами. В 1971 году на конференции по языкам систем данных был опубликован официальный стандарт сетевых баз данных, который известен как модель CODASYL. Компания IBM не стала разрабатывать собственную сетевую СУБД и вместо этого продолжала наращивать возможность IMS. Но в последующих годах независимые производители программного обеспечения реализовали сетевую модель в таких продуктах, как IDMS компании Cullinet, Total компании Cincom и СУБД Adabas, которые приобрели большую популярность.

Сетевые базы данных обладали рядом преимуществ:

·Гибкость. Множественные отношения предок/потомок позволяли сетевой базе данных хранить данные, структура которых была сложнее простой иерархии.

·Стандартизация. Появление стандарта CODASYL популярность сетевой модели, а такие поставщики мини-компьютеров, как Digital Equipment Corporation и Data General, реализовали сетевые СУБД.

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

Конечно, у сетевых баз данных были недостатки. Как и иерархические базы данных, сетевые базы данных были очень жесткими. Наборы отношений и структуру записей приходилось задавать наперёд. Изменение структуры базы данных обычно означало перестройку всей базы данных.

Как иерархическая, так и сетевая базы данных были инструментами программистов. Чтобы получить ответ на вопрос типа «Какой товар наиболее часто заказывает компания Acme Manufacturing?», программисту приходилось писать программу для навигации по базе данных. Реализация пользовательских запросов часто затягивалась на недели и месяцы, и к моменту появления программы информация, которую она предоставляла, часто оказывалась бесполезной.


.1.2 Реляционная модель данных

Недостатки иерархической и сетевой моделей привели к появлению новой, реляционной модели данных, созданной Коддом в 1970 году и вызвавшей всеобщий интерес. Реляционная модель была попыткой упростить структуру базы данных. В ней отсутствовали явные указатели на предков и потомков, а все данные были представлены в виде простых таблиц, разбитых на строки и столбцы. На рисунке 2.4. показана реляционная версия сетевой базы данных.

Рисунок 2.4 - Реляционная база данных


К сожалению, практическое определение понятия «реляционная база данных» оказалось гораздо более расплывчатым, чем точное математическое определение, данное этому термину Коддом в 1970 году. В первых реляционных СУБД не были реализованы некоторые из ключевых частей модели Кодда, и этот пробел был восполнен только впоследствии. По мере роста популярности реляционной концепции реляционными стали называться многие базы данных, которые на деле таковыми не являлись [6].

В ответ на неправильное использование термина «реляционный» Кодд в 1985 году написал статью, где сформулировал 12 правил, которым должна удовлетворять любая база данных, претендующая на звание реляционной. С тех пор двенадцать правил Кодда считаются определением реляционной СУБД. Однако можно сформулировать и более простое определение: реляционной называется база данных, в которой все данные, доступные пользователю, организованны в виде таблиц, а все операции над данными сводятся к операциям над этими таблицами.

Приведенное определение не оставляет места встроенным указателям, имеющимся в иерархических и сетевых СУБД. Несмотря на это, реляционная СУБД также способна реализовать отношения предок/потомок, однако эти отношения представлены исключительно значениями данных, содержащихся в таблицах.

2.2 Выбор СУБД


.2.1 MS SQL Server 2008 Express

Microsoft SQL Server 2008 Express - это реляционная СУБД, работающая в клиент-серверной архитектуре.

Взаимодействие клиента и сервера может осуществляться по сети, в широком понимании этого слова. Для обмена между клиентом и сервером используется фирменная спецификация языка SQL - TransactSQL (соответствует ANSI SQL-92).Server работает на всех существующих платформах Windows. Клиентские компоненты поддерживают и их, а, кроме того, работают на UNIX и Apple. Для обеспечения безопасности данных SQL Server может использовать, как систему безопасности Windows (с которой он плотно интегрирован), так и с помощью собственных, встроенных средств. Система безопасности охватывает сетевой трафик, доступ к серверу и его объектам, безопасность сетевых клиентов, как на платформе Microsoft, так и других производителей. SQL Server может использовать любое количество из имеющихся у сервера процессоров. SQL Server работает как сервис (служба), поэтому его события фиксируются в журнале Windows (Application log, System log, Security log), возможно удаленное управление (запуск, остановка и т.д.).

Основным сервисом SQL Server является MS SQL Server. Именно ему адресуются все запросы, и именно он управляет объектами SQL Server. Разделение ресурсов SQL Server в многопользовательской среде и механизм блокировок, обработка транзакций, обеспечение целостности и согласованности данных - вот его основные функции. Обслуживание локальных и адресованных группе SQL серверов заданий, а также управление и информирование операторов SQL Server обеспечивает сервис SQL Server Agent[7].

Задачи организации обслуживания запросов к данным, размещенным на разных SQL-серверах, корректного исполнения распределенных транзакций и их отката, выполняет сервис MS DTC (Distributed Transaction Coordinator). Возможность полнотекстового и лингвистического поиска, обслуживание индексов по текстовым данным обеспечивает сервис Microsoft Search.

В SQL Server БД содержится всего в одном файле, а не в нескольких, как это было в локальных БД. Чтобы добавить в SQL Server уже существующие форматы необходимо воспользоваться программой импортирования данных, входящей в состав сервера.


.2.2 Интерфейсы для доступа к данным LINQ и ADO.NET

Очень часто базы данных проектируются отдельно от приложения, к тому же вполне возможно, что разработчики базы данных и самого приложения не общаются на данном этапе работы. В книге Нильсена Пола, известного разработчика баз данных, специализирующего на архитектуре баз данных и технологиях MS SQL Server, приводятся следующие этапы проектировки базы данных:

·Исследование и сбор требований.

·Логическое представление реальности.

·Идентификация и проектирование видимых сущностей.

·Разработка схем.

Математический подход к моделированию реляционных баз данных включает в себя некоторые правила нормализации - правила, которые проверяют правильность модели базы данных . Таким образом, мы видим, структура приложения, может быть спроектирована, уже после того, как будет спроектирована, а зачастую и реализована, база данных. Это означает, что не всегда разработчик приложения точно знает структуру базы данных и СУБД, на которой она реализована.

Приложение должно взаимодействовать с базой данных, такое взаимодействие, как правило, происходит при помощи языка SQL. Однако, запросы к базе данных пишутся не на чистом SQL, а с использованием специальных интерфейсов для доступа к данным. Одними из таких интерфейсов являются LINQ и ADO.NET. Эти программные средства были разработаны компанией Microsoft и являются частью платформы .NET Framework, предназначенной для написания обычных программ и веб-приложений.

Если приложение будет написано на языках .NET (C#, Visual Basic, F# и др.), то удобнее всего будет использовать эти программные интерфейсы.

В книге Сахила Малика, крупного специалиста в области технологий .NET, приводится диаграмма показанная на рисунке 2.5, из которой видно, что большим плюсом ADO.NET является то, что разработчику приложения необязательно знать структуру и СУБД (система управления базами данных) базы данных. Здесь база данных представляет собой просто источник данных, который обычно содержит информацию в таблицах и работает с помощью языка наподобие SQL.


Рисунок 2.5 - Диаграмма ADO.NET


Из этой диаграммы, опубликованной в книге этого же автора, мы видим, как реализована технология доступа к данным ADO.NET рисунок 2.6:

Рисунок 2.6 - Принцип работы ADO .NET

.NET предоставляет набор классов, в которых реализовано взаимодействие с поставщиками данных для разных СУБД. Классы ADO.NET делятся на автономные и подключенные. Подключенные классы требуют соединения с источником данных (Connection, Transaction, Command, Parameter). Автономные классы (DataSet, DataTable, DataRow, DataColumn) соединения с источником данных не требуют, они работают с данными, размещенными на носителях клиентской машины. Важным классом ADO.NET является DataAdapter, который предназначен для взаимодействия классов, требующих соединения и автономных. Большинство авторов научной литературы по ADO.NET относят этот класс к подключенным классам[8].

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

LINQ (Language-Integrated Query) - это набор появившихся в Visual Studio 2008 функций, который значительно расширяет возможности синтаксиса языков C# и Visual Basic. LINQ предоставляет стандартные, простые в изучении шаблоны для запроса и изменения данных и технологии, которые могут быть расширены для поддержки практически любого типа источника данных. В состав Visual Studio входят сборки поставщиков LINQ для использования LINQ с коллекциями .NET Framework, базами данных SQL Server, наборами данных ADO.NET и XML-документами.

Семейство технологий LINQ позволяет писать запросы не только к реляционным источникам данных (LINQ to SQL), но и объектам (LINQ to Objects), XML-документам (LINQ to XML) и др.

Наиболее важным классом LINQ to SQL является класс DataContext, который предоставляет широкий доступ к базе данных. В своей книге «LINQ язык интегрированных запросов в C# 2008 для профессионалов» Джозеф Раттц, эксперт в области технологий .NET, пишет «Класс DataContext транслирует ваши запросы сущностных классов в операторы SQL, которые выполняются на подключенной базе данных. Производный от DataContext класс [Your]DataContext предоставляет доступ у целой группе методов базы данных, таких как ExecuteQuery, ExecuteCommand и SubmitChanges. В дополнение к этим унаследованным методам класс [Your]DataContext будет содержать свойства типа System.Data.Linq.Table<T> для каждой таблицыи представления в базе данных, с которой вы намеренны использовать LINQ to SQL».

Таким образом, вся база данных представляет собой объект, пользовательского класса, унаследованного от класса DataContext. Где таблицы базы данных будут являться свойствами этого объекта. Такое отображение базы данных в объектную модель называется технологией программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования. Такая технология базы данных, позволяет очень глубоко интегрировать базу данных в платформу, на которой пишется приложение. Что имеет свои плюсы: уменьшает время, затраченное на написание приложения, уменьшает количество ошибок в коде и т.д. Однако, работа с LINQ to SQL, возможена только в том случае, если мы заранее знаем СУБД, которым будет управляться база данных. Причем, на данный момент, поддерживается только СУБД Microsoft SQL Server (в том числе и бесплатные версии Microsoft SQL Server Express). Разработчик приложения не всегда обладает исчерпывающей информацией о базе данных, с которой будет работать разрабатываемое приложение. В таком случае, целесообразно использовать две технологии для доступа к данным: ADO.NET и LINQ (в частности LINQ to DataSet). Как уже говорилось выше, DataSet автономный класс ADO.NET, предназначенный для хранения данных в модели отсоединенного от базы данных программирования. LINQ to DataSet позволяет конструировать запросы для DataSet[9].

Главные достоинства ADO.NET:

·Позволяет работать с разными источниками данных. Разработчик приложения может и не знать, какое СУБД будет у базы данных, с которым будет работать его приложение, ему достаточно будет поменять поставщика данных.

·Наличие автономных объектов позволяют повысить производительность и снизить нагрузку на СУБД.

К недостаткам ADO.NET можно отнести ограниченные возможности для работы с запросами одного из наиболее широко используемого компонента - DataSet.

Главные достоинства LINQ:

·при определенных условиях позволяет произвести глубокую интеграцию базы данных и приложения;

·значительно ускоряет процесс написания запросов к базе данных, за счет, расширения синтаксиса языков C# и Visual Basic;

·предоставляет компоненты для удобной работы не только с базами данных, но и объектами, XML-документами и т.д.

К недостаткам LINQ можно отнести - многие функциональные возможности ограниченны только СУБД SQL Server.

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

Таким образом, когда приложение будет работать только с СУБД MS SQL Server и в дальнейшем не планируется мигрировать на другую СУБД, то целесообразно будет использовать LINQ to SQL, с полным применением технологии программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных». Существуют как коммерческие, так и свободные реализации этой технологии. Это при не больших временных затратах позволит использовать не реляционную, а объектную модель данных, которая привычнее для программистов. А так же, если приложение разрабатывается в среде Microsoft Visual Studio, то еще и воспользоваться в полной мере преимуществами написания кода с технологией IntelliSense , которая дописывает название функции при вводе начальных букв, используется для доступа к документации и для устранения неоднозначности в именах переменных, функций и методов, использую рефлексию. В совокупности это позволит значительно ускорить процесс написания приложения.

Если разработчику не известно заранее, какая СУБД будет использоваться или в дальнейшем возможна смена СУБД, то лучшим вариантом будет использование технологии ADO.NET для доступа к источнику данных, и хранение данных в DataSet. Манипуляции с данными производить с помощью технологии LINQ to DataSet.


.2.3 Модель удаленного управления данными

Модель удаленного управления данными также называется моделью файлового сервера. В этой модели презентационная логика и бизнес логика располагаются на клиенте.

На сервере располагаются файлы с данными, и поддерживается доступ к файлам. Но функции управления информационными ресурсами в этой модели находятся в клиенте.

В этой модели БД хранятся на сервере, клиент обращается к серверу с файловыми командами, а механизм управления всеми информационными ресурсами, собственно база метаданных, находится на клиенте.

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

Запрос клиента формулируется в командах языка манипуляции данными. СУБД переводит этот запрос в последовательность файловых команд. Каждая последовательность файловых команд вызывает перемещение блока информации на клиента, далее на клиенте СУБД анализирует полученную информацию, и если в полученном блоке не содержит ответ на запрос, то принимается решение о перекачке следующего блока информации и т.д. Передача информации с сервера на программу клиента производится до тех пор, пока не будет получен ответ на запрос клиента.

Недостатки:

·высокий сетевой трафик, который связан с передачей по сети множества блоков и файлов, необходимых приложению;

·узкий спектр операций манипулирования с данными, который определяется только файловыми командами;

·отсутствие адекватных средств безопасности доступа к данным (защита только на уровне файловой системы).


.2.4 Модель удаленного доступа к данным

В модели удаленного доступа БД хранится на сервере. На сервере же находится ядро СУБД. На клиенте располагается презентационная логика и бизнес-логика приложения. Клиент обращается к серверу с запросами на языке SQL. Структура модели удаленного доступа представлена на рисунке 2.7.

Рисунок 2.7 - Модель удаленного доступа


Преимущества:

·перенос компонента представления и прикладного компонента на клиентский компьютер существенно разгрузил сервер БД, сводя к минимуму общее число процессов в ОС;

·сервер БД освобождается от несвойственных ему функций; процессор целиком загружен операциями обработки данных, запросов и транзакций;

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

Основное достоинство модели удаленного доступа - унификация интерфейса «клиент-сервер», стандартом при общении приложения клиента и сервера становится язык SQL.

Недостатки:

·запросы SQL при интенсивной работе клиентских приложений могут существенно загрузить сеть;

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

·сервер в этой модели играет пассивную роль, поэтому функции управления информационными ресурсами должны выполняться на клиенте.


.2.5 Преимущества архитектуры клиент-сервер

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

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

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

·Приложения упрощаются из-за отсутствия кода, связанного с управлением БД.

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

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

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

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

Быстродействие - основной фактор целесообразности разработки систем для архитектуры клиент-сервер. Применение средств быстрой разработки программ, таких, как Visual studio компании Microsoft позволяет разработчикам штамповать прикладные системы для архитектуры клиент-сервер в рекордно короткие сроки.


.2.6 Компоненты архитектуры клиент-сервер

Существуют три основных программных компонента архитектуры клиент-сервер:

·ПО конечного пользователя.

·Промежуточное обеспечение.

·ПО сервера.

К ПО конечного пользователя относятся средства разработки программ и генераторы отчетов, в том числе электронные таблицы и текстовые процессоры. С помощью этого ПО пользователи устанавливают связь с серверами, отправляют на рассмотрение серверу запросы и получают ответную информацию.

При работе в архитектуре клиент-сервер приложение должно:

·выполнять соединение с сервером и отключение от него;

·формировать и отсылать запрос серверу, получая от него результаты выполнения запроса;

·выполнять обработку полученных данных.

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

Под программным обеспечением сервера подразумевается операционная система и конкретный сервер БД, используемый для обработки запросов клиентской части информационной системы.

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

Для управления БД сервер использует:

·триггеры;

·хранимые процедуры;

·функции, определяемые пользователем;

·механизм транзакций;

·механизм кэшированных изменений;

·механизм событий.

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


.3 Выбор средств разработки


Одним из важных этапов разработки любой серьезной программы является оптимальный выбор средств и методов разработки. Самыми распространенными сейчас являются среды быстрой разработки программ - RAD, такие, как Delphi и C++ Builder, а так же Visual Studio .NET 2010 корпорации Microsoft. Действительно, в их составе есть множество компонент, которые сводят написание простых программ к нескольким щелчкам мышью. Интерфейс любой сложности может быть сделан за пару часов даже новичком. Уровень абстракции программиста от «реального» кода в таких системах очень высок. Нет необходимости создавать цикл обработки сообщений, реализовывать оконную процедуру, обрабатывать события окна. На создание объемного проекта, без использования RAD, может уйти очень много времени [10]..NET позволяет разработчикам в гораздо большей степени задействовать готовые технологии, чем предыдущие платформы разработки от Microsoft. В частности, .NET предоставляет реальные возможности повторного использования кода, управления ресурсами, многоязыковой разработки, защиты, развертывания и администрирования. При проектировании этой новой платформы Microsoft учла недостатки существующих Windows-платформ. Вот далеко не полный список преимуществ .NET:

·единая программная модель;

·упрощенная модель программирования;

·отсутствие проблем с версиями;

·упрощенная разработка;

·работа на нескольких платформах;

·интеграция языков программирования;

·упрощенное повторное использование кода;

·автоматическое управление памятью (сбор мусора);

·проверка безопасности типов;

·развитая поддержка отладки;

·единый принцип обработки сбоев;

·безопасность;

·взаимодействие с существующим кодом.

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


.4 Выбор языка программирования


В среде разработки Visual Studio .NET доступны следующие языки программирования:

·Visual Basic .NET - наиболее простое из входящих в состав Visual Studio .NET средств для создания Windows- и Web-приложений. Новая версия языка пополнилась такими возможностями, как полная поддержка объектно-ориентированного программирования (включая наследование), визуальное наследование для форм, упрощенный доступ к функциям Windows, поддержка многопоточной обработки данных, создание сервисов Windows NT и консольных приложений.

·Visual C# .NET - реализация спецификации языка С#, разработанной в корпорации Microsoft и одобренной комиссией по стандартизации ЕСМА (European Computer Manufacturers Association - Европейская ассоциация производителей компьютеров). Современный, компонентно-ориентированный язык программирования С# разработан фирмой Microsoft специально для платформы .NET. C# вобрал в себя все лучшее из таких языков, как C, C++, Java и Delphi. Как и Visual Basic .NET, язык С# может использоваться для создания Web-сервисов и приложений на платформе .NET.

·Visual C++ .NET - это язык программирования, необходимый разработчикам, которым требуются средства управления приложениями низкого уровня. Версия Visual C++ для платформы .NET имеет множество нововведений, позволяющих разработчикам создавать и использовать Web-приложения и Web-сервисы. От других языков программирования для платформы .NET язык Visual C++ .NET отличается тем, что поддерживает как кодовую модель платформы .NET (managed code model), так и кодовую модель Windows (unmanaged native code model). В состав Visual C++ .NET входит мощное расширение библиотеки Active Template Library (ATL), называемое ATL Server. Это расширение позволяет разработчикам создавать компактные, высокопроизводительные Web-приложения и сервисы.

·Visual J# .NET - язык, позволяющий Java-разработчикам создавать Web-сервисы и приложения для платформы Microsoft .NET, используя имеющиеся навыки программирования. Visual J# .NET предоставляет пользователям Microsoft Visual J++ и другим Java-программистам возможность применить полученные навыки и сохранить существующие инвестиции в созданный ранее код.

Язык программирования C#, являясь последним из широко распространенных языков программирования, впитал в себя весь имеющийся опыт и вобрал лучшие стороны существующих языков программирования, при этом являясь специально созданным для работы в .NET. Сама архитектура .NET продиктовала ему (как и многим другим языкам, на которых можно писать под .NET) объектно-ориентированную направленность [11].

Свой синтаксис C# во многом унаследовал от C++ и Java. Разработчики, имеющие опыт написания приложений на этих языках, найдут в C# много знакомых черт. Но вместе с тем он является во многом новаторским - атрибуты, делегаты и события, прекрасно вписанные в общую идеологию языка. Их введение позволило применять принципиально новые приемы программирования.

Сходство с C++:

·«перегруженные» операторы;

·арифметические операции с плавающей точкой относятся к небезопасному коду;

·некоторые особенности синтаксиса.

Сходство с Java:

·объектно-ориентированный (единственное наследование);

·интерфейсы;

·исключения;

·нити (threads);

·пространства имен;

·сильная (строгая) типизация;

·сборка мусора;

·отражение (reflection);

·динамическая загрузка кода.

Несмотря на то, что целый ряд конструктивных синтаксических механизмов и особенностей реализации унаследован языком программирования C# от прародителей (C++, Visual Basic и Java), возможности этого нового языка программирования не ограничиваются суммой возможностей его исторических предшественников. К числу принципиально важных решений, которые реализованы корпорацией Microsoft в языке программирования C#, можно отнести следующие:

·компонентно-ориентированный подход к программированию (который характерен и для идеологии Microsoft .NET в целом);

·свойства как средство инкапсуляции данных (характерно также в целом для ООП);

·обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try);

·унифицированная система типизации (соответствует идеологии Microsoft .NET в целом);

·делегаты (delegate - развитие указателя на функцию в языках C и C++);

·атрибуты (средство оперирования метаданными в COM-модели);

·прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).

Проанализировав основные особенности языка программирования C#, а также исследовав структуру и принципы построения программ на этом языке, сформулируем наиболее заметные преимущества изучаемого языка программирования. Прежде всего, необходимо отметить то обстоятельство, что язык программирования C# претендует на подлинную объектную ориентированность. Кроме того, язык программирования C# призван практически реализовать компонентно-ориентированный подход к программированию, который способствует меньшей машинно-архитектурной зависимости результирующего программного кода, большей гибкости, переносимости и легкости повторного использования (фрагментов) программ [12].

Принципиально важным отличием от предшественников является изначальная ориентация на безопасность кода (что особенно заметно в сравнении с языками C и C++). Унифицированная, максимально близкая по масштабу и гибкости к Common Type System, принятой в Microsoft .NET, система типизации является важным преимуществом языка C#.

Расширенная поддержка событийно-ориентированного программирования выгодно отличает язык программирования C# от целого ряда предшественников. Объединение лучших идей современных языков программирования (Java, C++, Visual Basic и др.) делает язык C# не просто суммой их достоинств, а языком программирования нового поколения.


Вывод по разделу 2


В данном разделе были выбраны и описаны средства разработки и даны основные понятия реляционным базам данных. В качестве средства разработки пользовательского интерфейса была выбрана среда быстрой разработки программ MS Visual Studio 2010 и язык программирования C#. Для разработки базы данных по желанию заказчика была выбрана система управления базой данных MS SQL 2008 express.


3. Разработка программы и создание базы данных


.1 Проектирование базы данных


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

Представленная информационная система основана на БД реляционного типа.

Основная цель проектирования БД - это сокращение избыточности хранимых данных, а следовательно, экономия объема используемой памяти, уменьшение затрат на многократные операции обновления избыточных копий, и устранение возможности возникновения противоречий, из-за хранения в разных местах сведении об одном и том же объекте. Так называемый, «чистый» проект БД можно создать, используя методологию нормализации отношений.

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

Наиболее распространенными методами проектирования БД в настоящий момент являются метод ER-диаграмм и метод функциональных зависимостей.

Для проектирования базы данных воспользуемся методом ER-диаграмм. Суть этого метода заключается в установлении сущностей и связей между ними.

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

Различают концептуальные и физические ER-диаграммы. Концептуальные диаграммы не учитывают особенностей конкретных СУБД. Физические диаграммы строятся по концептуальным диаграммам и представляют собой прообраз конкретной базы данных. Сущности, определенные в концептуальной диаграмме становятся таблицами, атрибуты становятся колонками таблиц (при этом учитываются допустимые для данной СУБД типы данных и наименования столбцов), связи реализуются путем миграции ключевых атрибутов родительских сущностей и создания внешних ключей[13].

При правильном определении сущностей, полученные таблицы будут сразу находиться в 3НФ. Основное достоинство метода состоит в том, модель строится методом последовательных уточнений первоначальных диаграмм.


.2 Разработка концептуальной модели базы данных


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

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

Примером такого подхода можно назвать структуру таблиц для хранения машин клиентов и сведений о них показанной на рисунке 3.1


Рисунок 3.1 - Структуру таблиц для хранения машин клиентов


В основной таблице «car» храниться только основные параметры автомобиля:


Таблица 3.1 - Типы полей в таблице «car»

Имя поляТип поляОписаниеcar_idСчётчикУникальный кодbrand_idЧисловойСсылка на таблицу ценовых группclient_idЧисловойСсылка на таблицу клиентовnumberТекстовыйГосударственный номер автотранспортного средстваmodelТекстовыймодель машины

Для хранения других параметров используется таблицы «car_param» и «car_param_text». В таблице «car_param_Text» хранятся названия параметров, так как они будут часто повторяться. Таблица «car_param_Text» содержит записи описывающие параметры. Один параметр описывают идентификатор, текстовое значение параметра, идентификатор машины, к которой соотносится параметр и ссылка на таблицу с названиями параметров машин.


Таблица 3.2 - Типы полей в таблице «car_param»

Имя поляТип поляОписаниеcar_parm_idСчётчикУникальный кодcar_parm_nameЧисловойСсылка на таблицу названий параметровcar_parm_valueТекстовыйСтроковое значение параметраcar_idЧисловойСсылка на таблицу машин

В таблица «car_param_text» хранятся названия параметров машин, она содержит следующий набор полей:


Таблица 3.3 - Типы полей в таблице «car_param_text»

Имя поляТип поляОписаниеcar_param_text_idСчётчикУникальный кодcar_param_textТекстовыйНазвание параметра

Таблица «brand_machine» хранит информацию о группах машин, она содержит следующий набор полей:


Таблица 3.4 - Типы полей в таблице «brand_machine»

Имя поляТип поляОписаниеbrand_machine_idСчётчикУникальный кодbrand_machine_nameТекстовыйНазвание группы машинbrand_machine_coefЧисловойЦеновой коэффициент группы машин

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

Структура таблиц для описания клиентов, предназначена для хранения информации о клиентах автосервиса и их параметров, показана ниже на рисунке 3.2.


Рисунок 3.2 - Структуру таблиц для информации о клиентах автосервиса и их параметров


Параметры клиентов также хранятся в унифицированном виде. У одного клиента может быть несколько параметров описывающих его. Для хранения клиентов используется две таблицы.

Таблица «сlient» - основная таблица для хранения клиентов содержит следующий набор полей.


Таблица 3.5 - Типы полей в таблице «сlient»

Имя поляТип поляОписаниеclient_idСчётчикУникальный кодclient_nameТекстовыйИмя клиента может содержат фамилию и инициалы клиента

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


Таблица 3.6 - Типы полей в таблице «client_param»

Имя поляТип поляОписаниеclient_parm_idСчётчикУникальный кодclient_parm_nameТекстовыйНазвание параметра, здесь возможно применение как строкового идентификатора так и русского названия параметраclient_parm_valueТекстовыйСтроковое значение параметраclient_idЧисловойСсылка на таблицу клиентов определяющая с каким клиентом соотносится параметр

Структура таблиц для описания сотрудников. В этих таблицах хранятся сведения о сотрудниках и выполняемых ими работах, структура показана ниже на рисунке 3.3.


Рисунок 3.3 - Структура таблиц для хранения сотрудников


Таблица «workman» - основная таблица для хранения записей о сотрудниках, которая содержит следующий набор полей:


Таблица 3.7 - Типы полей в таблице «WorkMan»

Имя поляТип поляОписаниеworkman_idСчётчикУникальный кодpost_idЧисловойСсылка на таблицу должностейworkman_nameТекстовыйФамилия имя и отчество сотрудникаadressТекстовыйАдрес сотрудникаТаблица «post» - таблица должностей сотрудников содержит следующий набор полей:


Таблица 3.8 - Типы полей в таблице «Post»

Имя поляТип поляОписаниеpost _idСчётчикУникальный кодpost _nameЧисловойНазвание должности

Таблица «workmanwork» - таблица связывающая сотрудников и работы содержит следующий набор полей:


Таблица 3.9 - Типы полей в таблице «workmanwork»

Имя поляТип поляОписаниеworkmanwork _idСчётчикУникальный кодworkman_idЧисловойСсылка на таблицу сотрудниковwork_idЧисловойСсылка на таблицу работ

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

Структура таблиц для описания работ, для хранения работ используется две таблицы.


Рисунок 3.4 - Структура таблиц для хранения работ


Таблица «work» - таблица работы содержит следующий набор полей:

Таблица 3.10 - Типы полей в таблице «work»

Имя поляТип поляОписаниеwork _idСчётчикУникальный кодwork_nameТекстовыйНазвание работыcost_basisЧисловойОсновная стоимостьgroup_idЧисловойСсылка на таблицу групп работ определяет к какой группе относится работа.warrentytimeТекстовыйВремя предоставляемой гарантииcost_timeТекстовыйВремя выполнения

Таблица «workgroup» - Таблица групп работ содержит следующий набор полей:


Таблица 3.11 - Типы полей в таблице «workgroup»

Имя поляТип поляОписаниеworkgroup_idСчётчикУникальный кодworkgroup_nameТекстовыйНазвание группы работы

Структура таблиц для описания ремонтов, этих таблицах хранятся сведения о заявках на ремонтах, структура показана ниже на рисунке 3.5.


Рисунок 3.5 - Структура таблиц для хранения ремонтов


Таблица «repair» - таблица ремонтов содержит следующий набор полей:

Таблица 3.12 - Типы полей в таблице «repair»

Имя поляТип поляОписаниеrepair_idСчётчикУникальный кодrepair_nameТекстовыйОписание ремонтаintimeТекстовыйВремя принятие на ремонтouttimeТекстовыйВремя окончания ремонтаcostЧисловойСтоимостьiswarentyЛогическийВремя выполненияcaridЧисловойСсылка на таблицу машин, определяет к какой машине относится ремонт.

Таблица «repairwork» - таблица работ выполняемых во время ремонта содержит следующий набор полей:


Таблица 3.13 - Типы полей в таблице «repairwork»

Имя поляТип поляОписаниеrepairwork_idСчётчикУникальный кодrepair_idТекстовыйСсылка на таблицу ремонтов, определяет к какому ремонту относятся работыwork_idЧисловойСсылка на таблицу работ

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

·spare_par;

·distributor;

·warehouse;

·units;

·refund_details.

Рисунок 3.6 - Структура таблиц для хранения запчастей и ведения складского учета


Таблица «spare_part» - таблица деталей (запчастей) содержит следующий набор полей:


Таблица 3.14 - Типы полей в таблице «spare_part»

Имя поляТип поляОписаниеspare_part_idСчётчикУникальный кодspare_part_nameТекстовыйНаименование деталиdistributor_idЧисловойСсылка на таблицу поставщиковunit_idЧисловойСсылка на таблицу единиц измерений

Таблица «distributor» предназначена для хранения информации о поставщиках деталей. Таблица поставщиков содержит следующий набор полей:


Таблица 3.15 - Типы полей в таблице «distributor»

Имя поляТип поляОписаниеdistributor _idСчётчикУникальный кодdistributornameТекстовыйНаименование деталиТаблица «units» предназначена для хранения единиц измерений, она содержит следующий набор полей:


Таблица 3.16 - Типы полей в таблице «units»

Имя поляТип поляОписаниеunits_idСчётчикУникальный кодunits_nameТекстовыйНазвание единиц измеренийunits_countЧисловойКоличество единиц

Таблица «wareshouse» предназначена для хранения сведений о деталях на складе, она содержит следующий набор полей:


Таблица 3.17 - Типы полей в таблице «wareshouse»

Имя поляТип поляОписаниеwareshouse _idСчётчикУникальный кодspare_part_idЧисловойСсылка на таблицу деталейcountЧисловойКоличество единицunits_idЧисловойСсылка на таблицу единиц измерений

Таблица «refund_details» предназначена для хранения сведений о возвращенных поставщику деталей, она содержит следующий набор полей:


Таблица 3.18 - Типы полей в таблице «refund_details»

Имя поляТип поляОписаниеrefund_details_idСчётчикУникальный кодspare_part_idЧисловойСсылка на таблицу деталейcountЧисловойКоличество единицunits_idЧисловойСсылка на таблицу единиц измеренийotherОписание причины возврата

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

Рисунок 3.7 - Схема данных


.3 Запросы


При разработке автоматизированной системы использовался современный инструмент предлагаемый Microsoft - Linq to SQL, предназначенная для решения проблемы объектно-реляционного отображения, потому при разработке не было необходимости создавать классические SQL запросы. Для облегчения взаимодействия клиентского приложения с базой данных был разработан проект (библиотека) реализующая механизм сокрытия деталей доступа к данным реализующий паттерн программирования репозиторий.

Репозиторий - это фасад для доступа к базе данных. Весь код приложения за пределами репозитория работает с базой данных через него и только через него. Таким образом, репозиторий инкасулирует в себе логику работы с базой данных, это слой объектно-реляционного отображения в нашем приложении. Более точно, репозиторий, или хранилище, это интерфейс для доступа к данным одного типа - один класс модели, одна таблица базы данных в простейшем случае. Доступ к данным организуется через совокупность всех репозиторией. Интерфейс репозитория задается в терминах модели приложения: Entity - базовый класс для всех классов модели приложения. Атрибут Id необходим только на уровне базы данных. На уровне модели приложения уникальность объектов может разрешаться без использования явного идентификатора. Таким образом, предлагаемое решение не совсем честное решение проблемы объектно-реляционного отображения с теоретической точки зрения. Однако на практике использование атрибута первичного ключа в модели приложения часто приводит к получению даже более гибких схем. Предлагаемое решение - компромисс между уровнем абстракции слоя базы данных и гибкостью архитектуры.

Методы интерфейса IRepository обеспечивают полный набор CRUD-операций.- возвращает всю совокупность объектов данного типа, хранимых в БД. Фильтрация, сортировка и другие операции над выборкой объектов осуществляются на более высоком уровне, благодаря использованию интерфейса IQueryable<T>.- сохраняет объект модели в базе данных. В случае, если он новый, выполняется операция INSERT, иначе - UPDATE.- удаляет объект из базы данных. Предусмотрены два варианта вызова функции: с параметром id удаляемой записи и с параметром объектом класса модели приложения.

Для получения данных в этом случае используется шаблонная функция.

public IQueryable<T> GetAll<T>() where T : class

{

{_datacontext.GetTable<T>();

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}Queryable.AsQueryable<T>(new List<T>());

}

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

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

public bool Del<T>(T obj) where T:class

{

{

_datacontext.GetTable<T>().DeleteOnSubmit(GetById<T>(GetID(obj)));();

}(Exception ex)

{false;

}

return true;

}

Для удаления объектов требующих дополнительных действий используются переопределенные методы параметры с жестко определенными параметрами например public bool Del(Car Obj) при выполнении система сама определит какой метод исполнять.

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

public bool Save<T>(T obj) where T: class

{

{

//Получает идентификаторID = GetID(obj);

//если объект присутствует в базе данных

if (ID > 0)

{

//Получаем объект по идентификатору это необходимо если объект создан не при помощи Linq

var oldobj = GetById<T>(ID);(oldobj != null)

{(PropertyInfo propertyitem in obj.GetType().GetProperties())

{oldproperty =.GetType().GetProperty(propertyitem.Name);.SetValue(oldobj, propertyitem.GetValue(obj, null), null);

}

}

{

_appcontext.SysMsg.ReportMsg("Ошибка при попытке добавить данные" + obj.GetType().ToString() , avto.SysMsg.Interfaces.MsgType.Error); false;

}

}

else

{

//Инициируем добавление объекта в таблицу

_datacontext.GetTable<T>().InsertOnSubmit(obj);

}

Инициируем принятие изминений();

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error); false;

}

return true;

}

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

GetByFilter<Client_Param>(it=> it.Client_Param_name==textBox2.Text && it.Client_Param_Value==textBox3.Text && it.Client.Client_id ==client.Client_id )

Этот механизм реализован функцией построенной вокруг стандартной для linq функции Where()

public IQueryable<T> GetByFilter<T>(Expression<Func<T, bool>> filter) where T:class

{

{_datacontext.GetTable<T>().Where(filter);

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message,
avto.SysMsg.Interfaces.MsgType.Error);
}Queryable.AsQueryable<T>(new List<T>());

}


.4 Структура программного комплекса


Так как комплекс состоит из нескольких модулей, необходимо пояснить, как происходит их взаимодействие. Общая схема приведена на рисунке 3.8


Рисунок 3.8 - Структур системы программного комплекса

В основе системы лежит база данных с ней напрямую взаимодействует библиотека AVTO.DATA - библиотека взаимодействия с базой данных.

Узловым проектом системы является библиотека Avto.Interfeise - в которой сосредоточены все применяемые в проекте интерфейсы. Через которые и осуществляется взаимодействие между модулями системы.

На рисунке 3.7 проектом AVTO обозначен исполняемый модуль системы содержащий также и базовые графические элементы управления.

Одним из условий предъявляемым к системе является возможность расширения её функциональности. Для решения этой задачи предлагается архитектура плагинов.

Для всех плагинов, определяется базовые интерфейсы. По этим интерфейсам программа сможет идентифицировать свои плагины. Далее выделяются отдельные задачи, реализации решений которых в последствии могут или будут изменены или дополнены. Таким образом, выделяются типы плагинов, которые система будет использовать. Каждый тип плагина определяется своим интерфейсом. Разработчик, который хочет написать плагин к программе, выбирает один из этих типов плагинов, и создаёт класс, который наследуется от класса выбранного типа плагина.

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

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

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

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

Процедуры инициализации и завершения работы необходимо ввести в интерфейс плагинов.

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


3.5 Разработка пользовательского интерфейса


Для разработки пользовательского интерфейса разработочного программного средства используется WPF. Это система нового поколения для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений. В основе WPF лежит векторная система визуализации, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF расширяет базовую систему полным набором функций разработки приложений, в том числе языком XAML (Extensible Application Markup Language), элементами управления, привязкой данных, макетом, двух- и трехмерной графикой, анимацией, стилями, шаблонами, документами, мультимедиа, текстом и оформлением. WPF входит в состав Microsoft .NET Framework и позволяет создавать приложения, включающие другие элементы библиотеки классов .NET Framework.

В основе WPF лежит векторная система визуализации, не зависящая от разрешения устройства вывода и созданная с учётом возможностей современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая Язык XAML <#"justify">

Рисунок 3.9 - Стартовое окно программы


В верхней части окна расположено главное меню программы. Затем идет набор элементов получаемых из загруженных плагинов построителей отчетов.

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

В каждой строке результата содержится индивидуальный номер ремонта, государственный номер автотранспортного средства, дата поступления на ремонт, дата окончания ремонта, если ремонт закончен, и имя клиента (см. рисунок 3.10).


Рисунок 3.10 - Строка результата поиска


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

В этом режиме возможно добавление или удаление работ, а так же редактирование.

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


Рисунок 3.11 - Окно редактирования


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

Рисунок 3.12 - Окно редактирования


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

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

На рисунке 3.12 выше изображена вкладка управления должностями сотрудников. Таблица должностей содержит один изменяемый параметр, что отображает единственное поле ввода. Более специфичным является справочник клиентов показанный ниже на рисунке 3.13.

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

Рисунок 3.13 - Окно справочника клиентов


Справочник деталей позволяет управлять деталями для их описания используются: наименование, единицы измерения и поставщик детали. Справочник деталей показан ниже на рисунке 3.14


Рисунок 3.14 - Окно справочника деталей

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


Рисунок 3.15 - Окно справочника машин клиентов


Еще одним основным справочником является справочник работ показанный ниже на рисуноке 3.16


Рисунок 3.16 - Окно справочник работ

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


Рисунок 3.17 - Блок расширения отчетов


Система подключает имеющиеся плагины отчетов. Которые предоставляют функции:

·предварительного просмотра - кнопка «просмотр»;

·сохранения отчета во внешних форматах «rtf», «doc», «xls», «pdf», «html» - кнопка «сохранить»;

·отправка отчета сразу на принтер - кнопка «печать»

В качестве генератора отчетов используется Crystal Report - фактически стандартного генератора отчетов для платформы «.NET».


.4 Тестирование программного обеспечения


Любое программное средство должно обрабатывать ошибки пользователя. Разработанное программное обеспечение способно генерировать несколько видов сообщений и диалогов с пользователем.

Если пользователь нажимает на кнопку удаления записи программа потребует у пользователя, подтверждения его решения диалоговым окном показанном ниже на рисунке 3.18

Рисунок 3.18 - Запрос на удаление


Также система генерирует сообщения предупреждений и сообщения об ошибках. Так если пользователь попытается добавить запись не заполнив какой либо обязательный параметр, то будет выдано сообщение (см. рисунок 3.19)


Рисунок 3.19 - Окно предупреждения.


Если же пользователь попытается добавить существующую запись или внести исправления приводящие к дублированию, будет также выдано предупреждение (см. рисунок 3.20) и изменения не произойдет.


Рисунок 3.20 - Окно предупреждения

В случае ошибочно введенных данных будет выдано окно сообщения об ошибке показанное на рисунке 3.21.


Рисунок 3.21 - Окно сообщения об ошибке


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


Рисунок 3.22 - Окно сообщения об ошибке


Существует вероятность ошибки в процессе загрузки плагина расширения, в этом случае будет выдано сообщение с описанием возникшей проблемы (см. рисунок 3.23) плагин вызвавший ошибку не будет загружен. При этом работоспособность приложения в целом не пострадает.

Рисунок 3.23 - Сообщение об ошибке загрузки плагина


Вывод по разделу 3


В данном разделе была спроектирована и разработана база данных, для хранения информации о клиентах, автомобилях клиентов, запасных частях, сделанных работ. Разработано программное обеспечение, автоматизированное рабочее место инженера по гарантии.

Было проведено тестирование программного продукта, которое показало, что ПО способно обрабатывать все возможные ошибки. Критических ошибок, которые приводили бы программу в неработоспособное состояние не обнаружено.


4. Экономический раздел


.1 Расчёт затрат на разработку программного комплекса


Стоимостная оценка затрат определяется с учётом степени затрат на всех этапах инновационного процесса: проектирование, производство, эксплуатация.

В состав затрат на разработку и реализацию проекта включается стоимость всех расходов, необходимых для реализации комплекса работ, составляющих содержание данной разработки [15]. Смета затрат включает в себя следующие статьи расходов:

·заработная плата исполнителям;

·дополнительная заработная плата;

·отчисления во внебюджетные фонды;

·накладные расходы;

·расходы на оборудование;

·затраты на расходные материалы.

Необходимо рассчитать заработную плату исполнителям. Месячные оклады исполнителей:

Научный руководитель - старший преподаватель каф. ИТ.

Зр = 10000 р.

Исполнитель - инженер-программист.

Зи = 5500 р.

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

Таблица 4.1 - Основная заработная плата исполнителей

ИсполнительОклад, руб.Трудоемкость, дней.Дневная ставка, руб.Основная з/п, руб.Руководитель10000103403400Инженер550010019019000

Полную заработную плату всех исполнителей рассчитаем по формуле:


(4.1)


где Зо - основная зарплата всех исполнителей;

Зi - заработная плата i-го исполнителя;

N - количество исполнителей.

Используя данные таблицы 5.1, находим по формуле Зо:

Зо = 3400+ 19000= 22400 руб.

Рассчитаем дополнительную зарплату. Подсчитаем величину районного коэффициента (Рк), с учётом поясного коэффициента (Кп = 30%).


Рк = Зо × Кп (4.2)


Рк = 22400 × 0.3 = 6720 руб.

Подсчитаем величину отпускных и премиальных отчислений (О), которые составляют 10% от основной заработной платы:

О = 22400 × 0.1 = 2240 руб.

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


Здоп = Рк + О(4.3)

Здоп = 6720 + 2240 = 8960 руб.

Зная основную и дополнительную зарплату, найдём фонд заработной платы (ФЗП):


ФЗП = Здоп + Зо (4.4)


ФЗП = 8960 + 22400 = 31360 руб.

Страховые взносы во внебюджетные фонды составляют 34% от фонда заработной платы.

Овф = 31360 × 0.34 = 9153,6 руб.

Накладные расходы составляют 20% от основной заработной платы:

НР = 22400 × 0.2 = 4480 руб.

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


Зам = (Сбал × Кам × Траб × Н)/Фг,(4.5)


где Сбал - балансовая стоимость вычислительной техники (26000 руб);

Кам - коэффициент годовой амортизации оборудования;

Траб - время работы вычислительной техники (100 дней);

Н - количество единиц техники (1);

Фг - эффективный фонд времени оборудования (220 дней).

Коэффициент годовой амортизации определяется по формуле:


Kам = 1/Тс,(4.6)


где Тс - срок службы оборудования (8 лет).

Кам = 1/8 = 0.125

Зам = (26000 × 0.125 × 100 × 1)/220 = 1477 руб.

Подсчитаем затраты на расходные материалы:

·вспомогательная литература - 1500 рублей;

·канцтовары - 400 рублей.

Итого - 1900 рублей.

На основе вышеприведённых расчётов составим полную смету затрат на дипломный проект (см. таблицу 4.2).


Таблица 4.2 - Смета затрат на выполнение дипломного проекта

Статья расходовСумма, руб.Заработная плата исполнителям22400Дополнительная заработная плата8960Страховые взносы во внебюджетные фонды9153Накладные расходы4480Амортизационные расходы1477Затраты на расходные материалы1900Итого47370

До внедрения каждый месяц 2 пользователя с зарплатой 7000 рублей в месяц выполняли данную работу. Ее годовая себестоимость в таком случае равна 12 * 2 * 7000 = 168000 рублей.

После внедрения эту же работу может выполнять 1 пользователь. Ее годовая себестоимость стала равной 12 * 1 * 7000 = 84000 рублей.


.2 Оценка экономической эффективности эксплуатации комплекса


Расчет годового экономического эффекта в случае экономии при выполнении одной и той же работы производится по формуле (4.7):


Э=[(С1-С2)-Е*К] (4.7)


где С2, С1 - себестоимость работ, выполняемых инженером без использования и с использованием данного программного продукта;

Е - нормативный коэффициент экономической эффективности (Е=0,33);

К - капитальные вложения на проектирование и внедрение проекта, руб.

С1 = 168000 руб.

С2 = 84000 руб.

К = 47370 руб.

Подставив значения в формулу (4.7) рассчитаем годовой экономический эффект

Э = (168000 - 84000) - 0,33*47370 = 68988 рублей

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


,(4.8)

= 68988/45489 = 1,51

Так как Е>0,33, то проектирование и внедрение разрабатываемой системы эффективно.

Расчетный условный срок окупаемости капитальных вложений определяется как величина, обратная расчетному коэффициенту экономической эффективности и вычисляется по формуле (4.9):


,(4.9)

ок = 45489 /68988= 0.66 года или примерно 8 месяцев.

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

Тк > Ток - условие выполняется.

Вывод по разделу 4


По результатам экономического расчёта можно сделать вывод о высокой экономической эффективности данного программного комплекса.

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


5. Безопасность жизнедеятельности


.1 Гигиеническое нормирование условий труда программистов, операторов электронно-вычислительных машин

данные программирование оператор сервер

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

В производственных помещениях, в которых работа на видеодисплейных терминалах (ВДТ) и персональных электронно-вычислительных машинах (ПЭВМ) является основной, должны обеспечиваться параметры в соответствии с СанПиН 2.2.2/2.4.1340-03 «Гигиенические требования к персональным электронно-вычислительным машинам и организации работы».

ПЭВМ должны соответствовать требованиям настоящих санитарных правил и каждый их тип подлежит санитарно-эпидемиологической экспертизе с оценкой в испытательных лабораториях, аккредитованных в установленном порядке.

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

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

В соответствии с требованиями СанПиН 2.2.2/2.4.1340-03 к уровням шума и вибрации на рабочих местах, оборудованных ПЭВМ:

·уровень шума на рабочем месте операторов видеоматериалов не должен превышать 50дБА;

·в залах обработки информации на вычислительных машинах - 65дБА;

·уровень шума на рабочем месте программистов должен составлять 45 дБА на частоте - 1000 Гц. Для снижения уровня шума стены и потолок помещений, где установлены компьютеры, могут быть облицованы звукопоглощающими материалами [16].

Кратковременное, так и длительное воздействие всех видов излучения от экрана монитора не опасно для здоровья персонала, обслуживающего компьютеры. Однако исчерпывающих данных относительно опасности воздействия излучения от мониторов на работающих с компьютерами не существует и исследования в этом направлении продолжаются. Более подробно о временных допустимых уровнях электромагнитных полей (ЭМП) написано в разделе 5.3.

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

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

Требования к помещениям для работы с ПЭВМ:

·площадь на одно рабочее место пользователей ПЭВМ с ВДТ на базе электроннолучевой трубки (ЭЛТ) должна составлять не менее 6 м², а на базе плоских дискретных экранов (жидкокристаллические, плазменные) - 4,5 м2;

·для внутренней отделки интерьера помещений, где расположены ПЭВМ, должны использоваться диффузно-отражающие материалы с коэффициентом отражения для потолка - 0,7-0,8; для стен - 0,5-0,6; для пола - 0,3-0,5;

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

Вычислительная техника является в том числеи источником тепловыделений, что может привести к повышению температуры и снижению относительной влажности в помещении. Согласно ГОСТ 12.1.005-88 (2001) Системы стандартов безопасности труда (ССБТ) в помещениях, где установлены компьютеры, должны соблюдаться определенные параметры микроклимата, приведенные в таблице 5.1.


Таблица 5.1 - Оптимальные параметры микроклимата во всех помещениях с использованием ПЭВМ

Период годаКатегория работТемпература воздуха, СООтносительная влажность воздуха, %Скорость движения воздуха, м/сХолодный1 а22-2440-600,11 б21-2340-600,1Теплый1 а23-2540-600,11 б22-2440-600,2

Требования к микроклимату, содержанию аэроионов и вредных химических веществ в воздухе на рабочих местах, оборудованных ПЭВМ:

·в помещениях, оборудованных ПЭВМ, проводится ежедневная влажная уборка и систематическое проветривание после каждого часа работы на ПЭВМ;

·уровни положительных и отрицательных аэроионов в воздухе помещений, где расположены ПЭВМ, должны соответствовать действующим санитарно-эпидемиологическим нормативам приведены в таблице 5.2.

Таблица 5.2 - Уровни ионизации воздуха помещений при работе на ВДТ и ПЭВМ

УровниЧисло ионов в 1 см куб. воздухаn+n-минимально необходимые400600оптимальные1500-30003000-5000максимально допустимые5000050000

Правильно спроектированное и выполненное производственное освещение улучшает условия зрительной работы, снижает утомляемость, способствует повышению производительности труда, благотворно влияет на производственную среду, оказывая положительное психологическое воздействие на работающего, повышает безопасность труда и снижает травматизм[17].

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

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

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


Таблица 5.3 - Параметры оптимального рабочего места пользователя ПК

Элемент рабочего местаПараметрыВеличина (мм)Диапазон регулирования (мм)Рабочий столВысота рабочей поверхности Ширина Глубина Пространство для ног: - высота - глубина на уровне колен - глубина на уровне вытянутых ног725 800, 1000, 1200,1400 800, 1000 600 450 650680…800 - - - - - -Рабочий стулШирина сиденья Глубина сиденья Высота поверхности сиденья Угол наклона сиденья: - вперед - назад Высота опорной поверхности спинки Ширина спинки Радиус кривизны спинки в горизонтальной плоскости Угол наклона спинки в вертикальной плоскости Расстояние от переднего края сиденья до спинки400 400 475 00 00 300 380 400 00 330- - 400…550 00…150 00…150 280…320 - - -300…+300 260…400ПодлокотникиДлина Ширина Высота над сиденьем Расстояние между подлокотниками250 50…70 230 425- - 200…260 350…500Подставка для ногШирина Глубина Высота Наклон опорной поверхности300 400 150 00- - - 00…200

Общие требования к организации рабочих мест пользователей ПЭВМ:

·при размещении рабочих мест с ПЭВМ расстояние между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов - не менее 1,2 м;

·экран видеомонитора должен находиться от глаз пользователя на расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов;

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

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


.2 Ответственность за нарушение законодательных и нормативно-правовых актов по безопасности труда


Нарушение законодательных и нормативно-правовых актов по безопасности труда влечет за собой определенную ответственность в соответствии со статьями трудового кодекса РФ (ТК РФ) от 30.12.2001.

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

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

·замечание;

·выговор;

·увольнение по соответствующим основаниям.

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

Дисциплинарное взыскание не может быть применено позднее шести месяцев со дня совершения проступка, а по результатам ревизии, проверки финансово-хозяйственной деятельности или аудиторской проверки - позднее двух лет со дня его совершения. В указанные сроки не включается время производства по уголовному делу[18].

За каждый дисциплинарный проступок может быть применено только одно дисциплинарное взыскание.

Юридические лица, должностные лица и граждане за противоправное, виновное действие (бездействие), установленное трудовым законодательством и иными нормативными правовыми актами, содержащими нормы трудового права, привлекаются к административной ответственности в порядке, установленном Кодексом об административных правонарушениях РФ (Федеральный закон от 31 января 2012 года № 2 - ФЗ) и законами субъектов РФ.

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

·предупреждение;

·административный штраф;

·возмездное изъятие орудия совершения или предмета административного правонарушения;

·конфискация орудия совершения или предмета административного правонарушения;

·лишение специального права, предоставленного физическому
лицу;
·административный арест;

·дисквалификации.

Нарушение законодательства о труде и об охране труда - влечёт наложение административного штрафа на должностных лиц в размере от пяти до пятидесяти минимальных размеров оплаты труда.

Нарушение законодательства о труде и об охране труда лицом, ранее подвергнутым административному наказанию за аналогичное административное правонарушение, - влечёт дисквалификацию на срок от одного года до трёх лет.

Уголовная ответственность налагается в соответствии с Уголовным кодексом РФ:

·нарушение правил охраны труда;

·преступления против жизни и здоровья;

·преступления против интересов службы, суда, органов дознания, надзора и контроля.


.3 Защита персонала предприятий ИВО от опасных и вредных излучений


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

·мягкого рентгеновского;

·ультрафиолетового 200-400 нм;

·видимого 400-700 нм;

·ближнего инфракрасного 700-1050 нм;

·радиочастотного 3 кГц-30 МГц;

·электростатических полей.

Ультрафиолетовое излучение полезно в небольших количествах, но в больших дозах приводит к дерматиту кожи, головной боли, рези в глазах. Инфракрасное излучение приводит к перегреву тканей человека (особенно хрусталика глаза), повышению температуры тела. Уровни напряженности электростатических полей должны составлять не более 20 кВ/м. Поверхностный электростатический потенциал не должен превышать 500 В [19].

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

Защитные экранные фильтры являются доступным и эффективным средством защиты от вредных излучений от мониторов на базе электронно-лучевой трубки и жидкокристаллических. Экранные фильтры, обладая достаточной оптической прозрачностью, улучшают оптические параметры дисплеев и, в большей или меньшей степени, снижают уровни электрических полей. Защитный экран, изготовляемый из мелкой сетки или стекла, собирает на себе электростатический заряд. Для снятия заряда экран монитора заземляют. Например, защитный экран «ERGON» способен защитить организм человека от электромагнитных полей, благодаря внедрению новых идей, связанных с поляризованными покрытиями.

Временные допустимые уровни электромагнитных полей (ЭМП), создаваемых ПЭВМ указаны в таблице 1.1;


Таблица 5.4 - Временные допустимые уровни ЭМП, создаваемых ПЭВМ

Наименование параметровВременные допустимые уровни ЭМПНапряженность электрического поляв диапазоне частот 5 Гц - 2 кГц25 В/мв диапазоне частот 2 кГц - 400 кГц2,5 В/мПлотность магнитного поляв диапазоне частот 5 Гц - 2 кГц250 нТлв диапазоне частот 2 кГц - 400 кГц25 нТлЭлектростатический потенциал экрана видеомонитора500 В

Может возникнуть опасность по уровням напряженности электромагнитного поля. На расстоянии 5-10 см от экрана и корпуса монитора уровни напряженности могут достигать 140 В/м по электрической составляющей, что значительно превышает допустимые значения СанПиН 2.2.2/2.4.1340-03.

В Российской Федерации создана Система сертификации электрооборудования на соответствие стандартам безопасности (ССЭСБ). По требованиям ССЭСБ обязательная сертификация ПЭВМ проводится на соответствие условиям, установленным в следующих стандартах:

·ГОСТ Р МЭК 60950-2002. Безопасность оборудования информационных технологий.

·ГОСТ Р 50948-01. Средства отображения информации индивидуального пользования. Общие эргономические требования и требования безопасности.

·ГОСТ Р 50949-01. Средства отображения информации индивидуального пользования. Методы измерений и оценки эргономических параметров и параметров безопасности.

·ГОСТ Р 50923-96. Рабочее место оператора. Общие эргономические требования и требования к производственной среде. Методы измерения.

·СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организация работы.

Существуют также международные стандарты:

·Energy Star, TCO-92, VESA DPMS - по энергосбережению.

·EN 55022, Nordic Swan, ISO 9241, MPR-II, TCO - 99,03 - защита от излучения.

·FCC класс B, CIPSPR 22 - электромагнитная совместимость.

·ISO9241-3, ARAG, ARAS, AGRAS - антибликовая защита.


Вывод по разделу 5


В разделе безопасности жизнедеятельности рассмотрены вопросы, связанные с тем, что работники предприятий ИВО: операторы ЭВМ, операторы по подготовке данных, программисты подвергаются воздействию опасных и вредных факторов, таких как повышенный уровень шумов, повышенная температура внешней среды, отсутствие или недостаток естественного света, недостаточная освещенность рабочей зоны, электрический ток, статическое электричество и другие. Приведены нормируемые показатели условий труда на рабочем месте.

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

Заключение


В результате проделанной работы была разработана автоматизированная система инженера по гарантии. Разработанный программный продукт позволяет добавлять, удалять, изменять данные в БД. Имеет защиту от неопытного пользователя, то есть предотвращает ввод некорректных данных. Имеет возможность создавать отчеты, что облегчает работу сотрудников и заметно ускоряет процесс выполнения задач с предоставлением информации.

Разработанная программа полностью удовлетворяет требованиям заказчика, принята в эксплуатацию в СТО Континент и проходит тестирование пользователями. Имеется также акт приема в эксплуатацию данного программного продукта, что свидетельствует о значимости продукта и необходимости его внедрения.


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


1.Титоренко, Г.А. Автоматизированные информационные технологии в экономике [Текст] / Под ред. проф. Г. А. Титоренко. - М.: Компьютер, ЮНИТИ, 2003 - 289с.

2.Базы данных [Электронный ресурс]. - Режим доступа: #"justify">.СУБД [Электронный ресурс]. - Режим доступа: #"justify">4.Нагао, М. Структуры и базы данных [Текст] / М. Нагао, С. Уэмура. - М.: Мир, 1986. - 197 с..

5.Сетевая СУБД [Электронный ресурс]. - Режим доступа: #"justify">6.Райордан Р. Основы реляционных баз данных [Текст] / Р. Райордан. - М.: Издательско-торговый дом «Русская Редакция», 2001. - 384 с.

.Нильсен П. Microsoft SQL Server 2008. Библия пользователя [Текст] / Нильсен П. - М.: ООО «И.Д. Вильямс», 2008. - 1232 с.

.Сахил М. Microsoft ADO.NET 2.0 для профессионалов [Текст] / Сахил М. - М.: ООО «И.Д. Вильямс», 2006. - 560с.

.Раттц Дж. LINQ: интегрированный язык запросов в C# 2008 для профессионалов [Текст] / Раттц Дж. - М.: ООО «И.Д. Вильямс», 2008. - 560с.

.Просиз Дж. Программирование для Microsoft .NET. [Текст] / Дж. Просиз. - М.: Издательско-торговый дом «Русская Редакция», 2003. - 704 с.

.Культин, Н. Б. Основы программирования в С# [Текст] / Н.Б. Культин. - СПб.:БХВ-Петербург, 2005. - 608 с.

.Троелсен, Э. С# и платформа .NET 4.0 [Текст] / Э. Троелсен, 4-е изд. - М.: Вильямс, 2009. - 1368 с.

.Пушников А.Ю. Введение в системы управления базами данных. Часть 2. Нормальные формы отношений и транзакции: Учебное пособие [Текст] / Пушников А.Ю, - Уфа: Изд-е Башкирского ун-та., 1999. - 138 с.

.Мак-Дональд М. WPF: Windows Presentation Foundation в .NET 4.0 с примерами на C# 2010 для профессионалов [Текст] / Мак-Дональд М. - М: издательство «Вильямс», 2011. - 648 с.

.Булатов, А.С. Экономика. Учебник [Текст] /А.С. Булатов - Издание ретье, переработанное и дополненное, 2002. - 894 с.

.СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы [Текст].

.ГОСТ 12.1.005-88 (2001) ССБТ. Общие санитарно-гигиенические требования к воздуху санитарной зоны [Текст].

.Трудовой кодекс РФ ст. 353 [Текст].

.Безопасность жизнедеятельности: Учеб. Для вузов [Текст] / Н.А. Белова [и др.]; под общ. ред. Н.А. Белова. - М.: Высш. школа, 1999. - 448 с.


Приложение А


Акт выполненных работ

ООО «Континент»

Адрес: 433504, г Димитровград, ул. Гоголя, д. 54

Телефон: 8(84235)20889


Акт выполненных работ

КлиентИванов И.И.МанинаВаз 2110 Р123АА73Дата принятия на ремонт29.01.2012Дата окончания ремонта5.02.2012

Группа работНазвание работыСтоимостьКузовные Кузовные Кузовные Кузовные КузовныеПодготовительная Рихтовка Разборка Сборка Покраска1000,00 1500,00 300,00 300,00 1000,00

Итого: 4100 рублей

Гарантия на работу: 2 месяца

Инженер по гарантии:

С условиями гарантии ознакомлен Иванов И.И.


Приложение Б


Ведомость установленных запчастей

ООО «Континент»

Адрес: 433504, г Димитровград, ул. Гоголя 56

Телефон: 8(84235)20889


Запчасти используемые при ремонте

КлиентИванов И.И.МанинаВаз 2110 Р123АА73Дата принятия на ремонт29.01.2012Дата окончания ремонта5.02.2012

Наименование запчастиКоличествоФара ВАЗ 2110 передняя левая Крыло ВАЗ 2110 переднее левое Бампер передний ВАЗ 2110 Бампер задний ВАЗ 21101 шт. 1 шт. 1 шт. 1 шт.

Гарантия на установленные запчасти: 2 месяца

Инженер по гарантии:

С условиями гарантии ознакомлен Иванов И.И.


Приложение В


Исходные коды программы

{Модуль интерфейсов avto.Interfaces}

namespace avto.Interfaces

{interface IAppContext

{Container { get; }SysMsg { get; }Settings { get; set; }

}

}avto.Interfaces

{interface IHandbookPlugins

{Name { get; }HumanName { get; }CreateControl(IAppContext Appcontext);Appcontext { get; set; }

}

}avto.Interfaces

{interface IPlugin

{Name { get;}HumanName { get; }CreateReport(IAppContext __appContext,int _id);Print();Preview();Save();Appcontext { get; set; }DOit(string[] argv);

}

}avto.Interfaces

{interface IReport

{Name { get; }HumanName { get; }Appcontext { get; set; }.Windows.Controls.Button CreateMenu(IAppContext _appcontext);.Windows.Controls.UserControl CreateControl(IAppContext _appcontext);

}

}

{Модуль работы с настройками}avto.Interfaces

{class ProfileINI

{

[DllImport("kernel32.dll")]static extern int GetPrivateProfileInt(string section, string entry, int nDefault, string path);

[DllImport("kernel32.dll")]static extern int GetPrivateProfileString(string section, string entry, string sDefault,buf, int nSize, string path);

[DllImport("kernel32.dll", SetLastError=true)]static extern bool WritePrivateProfileString(string section, string entry,sValue, string path);ProfileINI()

{

}ProfileINI(string moduleName)

{= moduleName;

}string _moduleName;string ModuleName

{

{(_moduleName == null)

{parentAssembly = Assembly.GetEntryAssembly() ?? Assembly.GetCallingAssembly();

_moduleName = System.IO.Path.GetFileNameWithoutExtension(parentAssembly.Location);

}_moduleName;

}{_moduleName = value;}

}int GetInt(string section, string entry, int nDefault)

{(section == null)new ArgumentException("section");(entry == null)new ArgumentException("entry");GetPrivateProfileInt(section, entry, nDefault, ModuleName);

}bool WriteInt(string section, string entry, int nValue)

{(section == null)new ArgumentException("section");(entry == null)new ArgumentException("entry");WritePrivateProfileString(section, entry, Convert.ToString(nValue), ModuleName);

}string GetString(string section, string entry, string sDefault)

{(section == null)new ArgumentException("section");(entry == null)new ArgumentException("entry");(sDefault == null)= string.Empty;buf = new StringBuilder(4095);(section, entry, sDefault, buf, buf.Capacity, ModuleName);buf.ToString();

}bool WriteString(string section, string entry,string sValue)

{(section == null)new ArgumentException("section");(entry == null)new ArgumentException("entry");WritePrivateProfileString(section, entry, sValue, ModuleName);

}

}

}avto.SysMsg.Interfaces

{

Интерфейс описывающий сигнатуры методов системных сообщенийinterface IsysMsg

{ReportMsg(string text, string header, MsgType type);ReportMsg(string text, MsgType type);

}

}avto.Settings.Interfaces

{interface ISettings

{load();save();

}interface IUniversalSettings : ISettings

{<string, string> GetBase();IsNull();SetNull();Clear();<string, string> Load(List<ISectionKey> _keys);<string, string> Load();

Параметр "_key">ключ поискаGetbykey(string _key);Setbykey(string _key, string value);Setbykey(string _section,string _key, string value);Count();ModuleName{get;set;}<ISectionKey> SectionKeys { get; set; }

}interface ISectionKey

{Section { get; set; }Entry { get; set; }CompareTo(object obj);

}

}

{Модуль работы с базой данных}

namespace avto.Data

{class BaseRepository : IBaseRepository

{IDbDataSource _db;IAppContext _appcontext;DataContext _datacontext;BaseRepository()

{

_datacontext = null;

}BaseRepository(IDbDataSource dbDataSource, IAppContext appContext)

{.Assert(null != dbDataSource);

_db = dbDataSource;

_datacontext = _db.Datacontext;

_appcontext = appContext;

}void SubmitChangesinDC()

{

{

_datacontext.SubmitChanges();

}(Exception ex)

{();ex;

}

}void RefreshDataContext()

{

_datacontext = _db.GetNewDataContext();

}IQueryable<T> GetAll<T>() where T : class

{

{_datacontext.GetTable<T>();

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}Queryable.AsQueryable<T>(new List<T>());

}int GetAttributeOf(PropertyInfo propertyInfo)

{

{[] attributes = propertyInfo.GetCustomAttributes(typeof(ColumnAttribute), true);(attributes.Length == 0)-1;(((ColumnAttribute)attributes[0]).IsPrimaryKey)1;0;

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}-1;

}bool IsPrimaryKey(PropertyInfo propertyInfo)

{

{(GetAttributeOf(propertyInfo) < 1) return false;true;

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}false;

}PropertyInfo GetPrimaryKey(Type entityType)

{

{(PropertyInfo property in entityType.GetProperties())

{(IsPrimaryKey(property))

{(property.PropertyType != typeof(int))

{new ApplicationException(string.Format("Primary key, '{0}', of type '{1}' is not int", property.Name, entityType));

}property;

}

}new ApplicationException(string.Format("No primary key defined for type {0}", entityType.Name));

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}

_appcontext.SysMsg.ReportMsg(string.Format("No primary key defined for type {0}", entityType.Name), avto.SysMsg.Interfaces.MsgType.Error);null;

}T GetById<T>(int _Id) where T:class

{

{itemParameter = Expression.Parameter(typeof(T), "item");whereExpression = Expression.Lambda<Func<T, bool>>

(.Equal(.Property(,(typeof(T)).Name

),.Constant(_Id)

),[] { itemParameter }

);rez = _datacontext.GetTable<T>().Where(whereExpression);(rez.Count() > 0)rez.First();

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}null;

}bool Del<T>(T obj) where T:class

{

{

_datacontext.GetTable<T>().DeleteOnSubmit(GetById<T>(GetID(obj)));();

}(Exception ex)

{false;

}true;

}bool DelByid<T>(int id) where T : class

{

{

_datacontext.GetTable<T>().DeleteOnSubmit(GetById<T>(id));();

}(Exception ex)

{false;

}true;

}bool Save<T>(T obj) where T: class

{

{ID = GetID(obj);(ID > 0)

{oldobj = GetById<T>(ID);(oldobj != null)

{(PropertyInfo propertyitem in obj.GetType().GetProperties())

{oldproperty = oldobj.GetType().GetProperty(propertyitem.Name);.SetValue(oldobj, propertyitem.GetValue(obj, null), null);

}

}

{

_appcontext.SysMsg.ReportMsg("Ошибка припопытке добавить данные" + obj.GetType().ToString() , avto.SysMsg.Interfaces.MsgType.Error);false;

}

}

{

_datacontext.GetTable<T>().InsertOnSubmit(obj);

}();

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);false;

}true;

}IQueryable<T> GetByFilter<T>(Expression<Func<T, bool>> filter) where T:class

{

{_datacontext.GetTable<T>().Where(filter);

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}Queryable.AsQueryable<T>(new List<T>());

}IQueryable<T> GetByUserFilter<T, VT>(string _parametr_name, VT _value) where T : class

{

{itemParameter = Expression.Parameter(typeof(T), "item");whereExpression = Expression.Lambda<Func<T, bool>>

(.Equal(.Property(, _parametr_name

),.Constant(_value)

),[] { itemParameter }

);_datacontext.GetTable<T>().Where(whereExpression);

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}Queryable.AsQueryable<T>(new List<T>());

}string DoubleToPointString(Double d)

{s = d.ToString();s.Replace(",", ".");

}string DoubleToPointString(string d)

{d.Replace(",", ".");

}List<string> GetProperyName<T> () where T : class

{<string> returnlist = new List<string>();

{entityType = typeof(T);(PropertyInfo property in entityType.GetProperties())

{(GetAttributeOf(property) == 0).Add(property.Name);

}returnlist;

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}returnlist;

}List<Type> GetProperyType<T>() where T : class

{<Type> returnlist = new List<Type>();

{entityType = typeof(T);(PropertyInfo property in entityType.GetProperties())

{(GetAttributeOf(property) == 0).Add(property.PropertyType);

}returnlist;

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, avto.SysMsg.Interfaces.MsgType.Error);

}returnlist;

}int GetID<T>(T obj) where T : class

{values = null ;

{entityType = typeof(T);(PropertyInfo property in entityType.GetProperties())

{(GetAttributeOf(property) == 1)=property.GetValue(obj,new object[]{});

}(values!=null)(int)values;

}(Exception ex)

{-1;

}-1;

}

}

}avto.Data

{class Repository : BaseRepository

{Repository() { }Repository(IDbDataSource dbDataSource, IAppContext appContext)

{.Assert(null != dbDataSource);

_db = dbDataSource;

_datacontext = _db.Datacontext;

_appcontext = appContext;

}bool Del<T>(T obj) where T : class

{base.Del<T>(obj);

}IQueryable<WorkSparepart> GetWorksDetails(int _ID)

{GetAll<WorkSparepart>().Where(it => it.Work_id==_ID);

}IQueryable<Spare_part> GetNotWorkDetails(int _ID)

{result = from Spare_part item in GetAll<Spare_part>() запрос по всем деталям !(from WorkSparepart it in GetAll<WorkSparepart>() //вложенный запрос получение списка всех деталей используемых в работе

where it.Work_id == _IDit.Sparepart_id

).Contains(item.Spare_part_ID)item;result;

}bool Del(Car Obj)

{(Obj != null)

{isok = true;info = GetByFilter<Car_Parm>(it=> it.Car_ID== Obj.CAR_id).ToList();(info.Count > 0)

{(Car_Parm item in info)

{&= Del(item);

}

}repair = GetByFilter<Repair>(it => it.CarID == Obj.CAR_id).ToList();(repair.Count > 0)

{(Repair item in repair)

{&= Del(item);

}

}(isok)

{(base.Del<Car>(Obj))true;

}

}false;

}bool Del(Client Obj)

{(Obj != null)

{isok = true;info = GetByFilter<Car>(it => it.Client_ID == Obj.Client_id).ToList();(info.Count > 0)

{(Car item in info)

{&= Del(item);

}

}param = GetByFilter<Client_Param>(it => it.Client_id == Obj.Client_id).ToList();(param.Count > 0)

{(Client_Param item in param)

{&= Del(item);

}

}(isok)

{(base.Del<Client>(Obj))true;

}

}false;

}bool Del(Repair Obj)

{(Obj != null)

{isok = true;info = GetByFilter<RepairWork>(it => it.repair_id == Obj.Repair_id).ToList();(info.Count > 0)

{(RepairWork item in info)

{&= Del(item);

}

}(isok)

{(base.Del<Repair>(Obj))true;

}

}false;

}

}

}avto.Data.Interfaces

{interface IBaseRepository

{SubmitChangesinDC();RefreshDataContext();<T> GetAll<T>() where T : class;

Параметр "_id" ИдентификаторGetById<T>(int _Id) where T : class;Del<T>(T obj) where T : class;Save<T>(T obj) where T : class;

Параметр "filter">linq фильтр<T> GetByFilter<T>(Expression<Func<T, bool>> filter) where T : class;<T> GetByUserFilter<T, VT>(string _parametr_name, VT _value) where T : class;DoubleToPointString(Double d);DoubleToPointString(string d);<string> GetProperyName<T>() where T : class;

}

}

{Модуль основной программы}

namespace avto

{

public class AppContext : IAppContext, IDisposable

{

#region Fieldsreadonly IUnityContainer _container;

настройки системыreadonly UniversalSettingsINI settings;DataService _dataservice;int _usermod;int _accaunt;

#endregionAppContext()

{<ISectionKey> SectionsKeylist = new List<ISectionKey>();.Add(new SectionKey("Connection", "Main"));.Add(new SectionKey("Connection", "Reserv"));= new UniversalSettingsINI();.SectionKeys = SectionsKeylist;.ModuleName = System.IO.Path.GetFullPath("conf.ini");

//получаем базовые настройки

{.Load();

}

{

}

_dataservice = new DataService();

_container = new UnityContainer();(_container);

_dataservice.MainConnectionString = settings.Getbykey("Main");

_dataservice.BackConnectionString = settings.Getbykey("Reserv");

}void InitAll()

{

}void ConfigureContainer(IUnityContainer container)

{

{

_dataservice.ConfigureContainer(container);.RegisterInstance<IUniversalSettings>(settings);.RegisterInstance<IAppContext>(this, new ExternallyControlledLifetimeManager());.RegisterType<IsysMsg, ReportSysMsg>(new ContainerControlledLifetimeManager());

}(Exception ex)

{

}

}

#region IAppContext MembersIUnityContainer Container

{{ return _container; }

}IsysMsg SysMsg

{{ return _container.Resolve<ReportSysMsg>(); }

}DataService DataService

{{ return _container.Resolve<DataService>(); }

}IUniversalSettings Settings

{{ return _container.Resolve<IUniversalSettings>(); }

{.Clear();

_container.RegisterInstance<IUniversalSettings>(value);

}

}int UserMode

{{ return _usermod; }{ _usermod = value; }

}int AccountID

{{ return _accaunt; }{ _accaunt = value; }

}

#endregion

#region IDisposable Membersvoid Dispose()

{new NotImplementedException();

}

#endregion

}

}

{Модуль плагина групп машин}Avto.PluginHandbook

{class Brand_machineControlPlugin : IHandbookPlugins

{IAppContext _Appcontext;string Name

{{ return "Brand_machineControl"; }

}System.Windows.Controls.UserControl CreateControl(IAppContext Appcontext)

{

_Appcontext = Appcontext;new Brand_machineControl(_Appcontext);

}IAppContext Appcontext

{

{_Appcontext;

}

{

_Appcontext = value;

}

}string HumanName

{{ return "Группы машин"; }

}

}

}Avto.PluginHandbook

{

Логика взаимодействия для Brand_machineControl.xamlpartial class Brand_machineControl : UserControl

{IAppContext _appcontext;Brand_machineControl(IAppContext __Appcontext)

{

_appcontext = __Appcontext;();();

}void refresh()

{repo = _appcontext.Container.Resolve<Repository>();.ItemsSource = repo.GetAll<Brand_machine>().ToList();(dataGrid1.Items.Count > 0)

{.SelectedIndex = 0;

}

}void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)

{(e.Key == Key.Delete).CanUserDeleteRows = false;

}void deleteWorkGroup()

{repo = _appcontext.Container.Resolve<Repository>();row = dataGrid1.SelectedItem as Brand_machine;(row != null)(_appcontext.SysMsg.ReportMsg("Вы действидельно желаете удалить текущую запись?", "Удаление", avto.SysMsg.Interfaces.MsgType.Question))

{.CanUserDeleteRows = true;(repo.Del(row))

{iitem = dataGrid1.SelectedIndex;<Brand_machine> items = (List<Brand_machine>)dataGrid1.ItemsSource;.RemoveAt(iitem);.Items.Refresh();(items.Count > 0) { dataGrid1.SelectedIndex = 0; }

}

_appcontext.SysMsg.ReportMsg("Ошибка при удалении", "Ошибка", avto.SysMsg.Interfaces.MsgType.Error);

}.CanUserDeleteRows = false;

}void delbutton_Click(object sender, RoutedEventArgs e)

{();

}void SaveOnlyButton_Click(object sender, RoutedEventArgs e)

{(dataGrid1.Items.Count > 0)(!string.IsNullOrEmpty(textBox1.Text))

{repo = _appcontext.Container.Resolve<Repository>();find = repo.GetByUserFilter<Brand_machine, string>("brand_machine_name", textBox1.Text).ToList();(find.Count() == 0)

{utelemnt = new Utility();_machine utelemnt = dataGrid1.SelectedItem as Brand_machine;.brand_machine_name = textBox1.Text;.brand_machine_coef= float.Parse(textBox2.Text.Replace(".",","));(!repo.Save(utelemnt))

_appcontext.SysMsg.ReportMsg("Ошибка изминения записи", "Ошибка", avto.SysMsg.Interfaces.MsgType.Error);

}

_appcontext.SysMsg.ReportMsg("Нельзя изменить такая запись уже присутствует", "Предупреждение", avto.SysMsg.Interfaces.MsgType.Warning);

}

_appcontext.SysMsg.ReportMsg("Параметр не может быть пустым", "Прежупреждение", avto.SysMsg.Interfaces.MsgType.Warning);

}void AddOnlyButton_Click(object sender, RoutedEventArgs e)

{(!string.IsNullOrEmpty(textBox1.Text))

{repo = _appcontext.Container.Resolve<Repository>();find = repo.GetByUserFilter<Brand_machine, string>("brand_machine_name", textBox1.Text).ToList();(find.Count() == 0)

{_machine utelemnt = new Brand_machine();.brand_machine_name = textBox1.Text;

{.brand_machine_coef = float.Parse(textBox2.Text);

}

{

_appcontext.SysMsg.ReportMsg("Неверно задан коэффициент", "Ошибка", avto.SysMsg.Interfaces.MsgType.Error);;

}<Brand_machine> items = (List<Brand_machine>)dataGrid1.ItemsSource;(!repo.Save(utelemnt))

_appcontext.SysMsg.ReportMsg("Ошибка добавления записи", "Ошибка", avto.SysMsg.Interfaces.MsgType.Error);.Add(utelemnt);.Items.Refresh();

}

_appcontext.SysMsg.ReportMsg("Нельзя добавить уже имеющуюся запись", "Предупреждение", avto.SysMsg.Interfaces.MsgType.Warning);

}

_appcontext.SysMsg.ReportMsg("Параметр не может быть пустым", "Прежупреждение", avto.SysMsg.Interfaces.MsgType.Warning);

}

}

}

{Модуль плагина генерации отчетов деталей}

namespace avto.PluginReport.detail

{partial class detail : UserControl

{IAppContext _appcontext;detail(IAppContext __appcontext)

{

_appcontext = __appcontext;();

}void print_Click(object sender, RoutedEventArgs e)

{report = new DetailReportPlugin(_appcontext);.Print();;

}void save_Click(object sender, RoutedEventArgs e)

{report = new DetailReportPlugin(_appcontext);.SaveTo();;

}void Prev_Click(object sender, RoutedEventArgs e)

{report = new DetailReportPlugin(_appcontext);.Preview();;

}Button Getelement()

{Prev;

}

}

}avto.PluginReport.detail

{DetailReportPlugin : Form

{IAppContext _appcontext;Dictionary<string, string> _fields;DataSet _ds;_PROXY nproxy;string _Templatefilename;string Templatefilename

{{ return _Templatefilename; }{ _Templatefilename = value;}

}DetailReportPlugin(IAppContext __appcontext)

{();

_ds = new DataSet();

_appcontext = __appcontext;

_Templatefilename = "detail.rpt";

}

#region Windows Form Designer generated codeSystem.ComponentModel.IContainer components;method for Designer support - do not modifycontents of this method with the code editor.void InitializeComponent()

{.crViewer = new CrystalDecisions.Windows.Forms.CrystalReportViewer();.crDoc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();.SuspendLayout();

//

// crViewer

//.crViewer.ActiveViewIndex = -1;.crViewer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;.crViewer.Dock = System.Windows.Forms.DockStyle.Fill;.crViewer.Location = new System.Drawing.Point(0, 0);.crViewer.Name = "crViewer";.crViewer.SelectionFormula = "";.crViewer.ShowExportButton = false;.crViewer.Size = new System.Drawing.Size(546, 502);.crViewer.TabIndex = 0;.crViewer.ViewTimeSelectionFormula = "";

//

// PramerReport

//.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;.ClientSize = new System.Drawing.Size(546, 502);.Controls.Add(this.crViewer);.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;.Name = "WorkOrder";.ShowInTaskbar = false;.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;.Text = "Заказ наряд";.WindowState = System.Windows.Forms.FormWindowState.Maximized;.ResumeLayout(false);

}

#endregionCrystalDecisions.Windows.Forms.CrystalReportViewer crViewer;CrystalDecisions.CrystalReports.Engine.ReportDocument crDoc;

метод создания датасетаbool CreateDataSet()

{repo = _appcontext.Container.Resolve<Repository>();=new Protocol_PROXY(_appcontext, repo.GetById<Repair>(_appcontext.id));.DetailDataTable chkDetail = new DataSetDetailOrder.DetailDataTable();

_ds.Tables.Clear();(detailProxy item in nproxy.detproxy)

{

{.AddDetailRow(item.WorkName,item.DetailName,item.Unit,item.Count,item.distr);

}

{

}

}

_ds.Tables.Add(chkDetail);true;

}bool docCreate()

{

{fname = System.IO.Path.GetFullPath(_Templatefilename);.Load(fname);();(_ds == null)false;

///////////////.SetDataSource(_ds);

///////////////.ParameterFields["Client"].CurrentValues.AddValue(nproxy.Client);.ParameterFields["car"].CurrentValues.AddValue(nproxy.CAr);.ParameterFields["carnum"].CurrentValues.AddValue(nproxy.CarNum);.ParameterFields["indata"].CurrentValues.AddValue(nproxy.InData);.ParameterFields["outdata"].CurrentValues.AddValue(nproxy.OutData);.PrintOptions.PaperSize = PaperSize.PaperA4;

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, "Ошибка загрузки отчета",SysMsg.Interfaces.MsgType.Error);false;

}true;

}system SAve file dialog

результат диологоаSaveFileDialog FileSave(string Fullfilter, string Name)

{saveFileDialog1 = new SaveFileDialog();.Filter = Fullfilter;.Title = Name;result = saveFileDialog1.ShowDialog();saveFileDialog1;

}bool Preview()

{

{();true;

}(Exception ex)

{false;

}true;

}bool SaveTo()

{

{(docCreate())

{saveFileDialog1 = FileSave("Rich Text (*.rtf)|*.rtf|Portable Doc Format (*.pdf)|*.pdf|Word For Windows (*.doc)|*.doc|Excel (*.xls)|*.xls|HTML (*.htm)|*.htm"

, "Сохранение протокола");(saveFileDialog1.FileName != "")

{finfo = new FileInfo(saveFileDialog1.FileName);(saveFileDialog1.FilterIndex)

{1: if (!ExportReport(crDoc, "rtf", finfo.DirectoryName + "\, finfo.Name))

_appcontext.SysMsg.ReportMsg("Ошибка сохранениея", "Сохранение",SysMsg.Interfaces.MsgType.Error);;2: if (!ExportReport(crDoc, "pdf", finfo.DirectoryName + "\, finfo.Name))

_appcontext.SysMsg.ReportMsg("Ошибка сохранениея", "Сохранение",SysMsg.Interfaces.MsgType.Error); break;3: if (!ExportReport(crDoc, "doc", finfo.DirectoryName + "\, finfo.Name))

_appcontext.SysMsg.ReportMsg("Ошибка сохранениея", "Сохранение",SysMsg.Interfaces.MsgType.Error); break;4: if (!ExportReport(crDoc, "xls", finfo.DirectoryName + "\, finfo.Name))

_appcontext.SysMsg.ReportMsg("Ошибка сохранениея", "Сохранение",SysMsg.Interfaces.MsgType.Error); break;5: if (!ExportReport(crDoc, "htm", finfo.DirectoryName + "\, finfo.Name))

_appcontext.SysMsg.ReportMsg("Ошибка сохранениея", "Сохранение",SysMsg.Interfaces.MsgType.Error); break;

}

}

}

{

_appcontext.SysMsg.ReportMsg("Ошибка данных", "Ошибка Сохранения отчета", SysMsg.Interfaces.MsgType.Error);false;

}

}(Exception ex)

{false;

}true;

}bool LoadBase()

{(docCreate())

{.AutoSize = false;.ShowGroupTreeButton = false;.Controls[2].Visible = false;.ShowExportButton = true;

//A4;.ReportSource = crDoc;

}true;

}override void OnLoad(EventArgs e)

{();

}report to file

Параметр "crReportDocument">ReportDocument< /param >

Параметр "ExpType" Export Type (pdf, xls, doc, rpt, htm

Параметр "ExportPath" Export Path (physical path on the disk were exported document will be stored on

Параметр "filename" File name (file name without extension f.e. "MyReport1")

< returns>returns true if export was succesfull< /returns >static bool ExportReport(CrystalDecisions.CrystalReports.Engine.ReportDocument crReportDocument,ExpType, string ExportPath, string filename)

{full report file name for example if the filename was "MyReport1" and ExpType was "pdf", full file name will be "MyReport1.pdf" filename = filename + "." + ExpType; creating storage directory if not exists(!Directory.Exists(ExportPath)).CreateDirectory(ExportPath);new instance representing disk file destinationsuch as filename, export type etc.strtmp = filename.Replace("/", "_");= strtmp;crDiskFileDestinationOptions = new DiskFileDestinationOptions();crExportOptions = crReportDocument.ExportOptions;(ExpType)

{"rtf":

{disk file name.DiskFileName = ExportPath + filename;destination type in our case disk file.ExportDestinationType = ExportDestinationType.DiskFile;export format type.ExportFormatType = ExportFormatType.RichText;previously defined destinationto our input report document.DestinationOptions = crDiskFileDestinationOptions;;

}following code is similar to previous, so I want comment it again"pdf":

{.DiskFileName = ExportPath + filename;.DestinationOptions = crDiskFileDestinationOptions;.ExportDestinationType = ExportDestinationType.DiskFile;.ExportFormatType = ExportFormatType.PortableDocFormat;;

}"doc":

{.DiskFileName = ExportPath + filename;.ExportDestinationType = ExportDestinationType.DiskFile;.ExportFormatType = ExportFormatType.WordForWindows;.DestinationOptions = crDiskFileDestinationOptions;;

}"xls":

{.DiskFileName = ExportPath + filename;.ExportDestinationType = ExportDestinationType.DiskFile;.ExportFormatType = ExportFormatType.Excel;.DestinationOptions = crDiskFileDestinationOptions;;

}"rpt":

{.DiskFileName = ExportPath + filename;.ExportDestinationType =.DiskFile;.ExportFormatType = ExportFormatType.CrystalReport;.DestinationOptions = crDiskFileDestinationOptions;;

}"htm":

{HTML40Formatopts = new HTMLFormatOptions();.ExportDestinationType = ExportDestinationType.DiskFile;.ExportFormatType = ExportFormatType.HTML40;Formatopts.HTMLBaseFolderName = ExportPath + filename;Formatopts.HTMLFileName = "HTML40.html";Formatopts.HTMLEnableSeparatedPages = true;Formatopts.HTMLHasPageNavigator = true;Formatopts.FirstPageNumber = 1;Formatopts.LastPageNumber = 3;.FormatOptions = HTML40Formatopts;;

}

}

{

//trying to export input report document,

//and if success returns true.Export();true;

}(Exception err)

{false;

}

}bool Print()

{

{(docCreate())

{printDialog1 = new PrintDialog();dr = printDialog1.ShowDialog();(dr == DialogResult.OK)

{nCopy = printDialog1.PrinterSettings.Copies;

//Get the number of Start PagesPage = printDialog1.PrinterSettings.FromPage;

//Get the number of End PageePage = printDialog1.PrinterSettings.ToPage;

//Get the printer namePrinterName = printDialog1.PrinterSettings.PrinterName;.PrintOptions.PrinterName = PrinterName;.PrintToPrinter(nCopy, false, sPage, ePage);

}

}

{

_appcontext.SysMsg.ReportMsg("Ошибка данных", "Ошибка Печати отчета", SysMsg.Interfaces.MsgType.Error);false;

}

}(Exception ex)

{

_appcontext.SysMsg.ReportMsg(ex.Message, "Ошибка Печати отчета", SysMsg.Interfaces.MsgType.Error);false;

}true;

}

}

}avto.PluginReport.detail

{class DetailPlugin : IReport

{IAppContext _Appcontext;Form _PrintDetailPlugin;System.Windows.Controls.Button _main;System.Windows.Controls.Button CreateMenu(IAppContext _appcontext)

{

_Appcontext = _appcontext;element = new detail(_appcontext);

_main = element.Getelement();_main;

}System.Windows.Controls.UserControl CreateControl(IAppContext _appcontext)

{

_Appcontext = _appcontext;element = new detail(_appcontext);element;

}string Name

{{ return "DetailPlugin"; }

}IAppContext Appcontext

{

{_Appcontext;

}

{

_Appcontext = value;

}

}string HumanName

{{ return "детали"; }

}

}

}avto.PluginReport.detail.reports

{class Protocol_PROXY

{

//private DataSet dat;int __id;IAppContext _appContext;Protocol_PROXY(IAppContext _appcontext, Repair _Repair)

{

_appContext = _appcontext;= new List<detailProxy>();rrw=_Repair.RepairWork.ToList();(RepairWork item in rrw)

{iwws= item.Work.WorkSparepart.ToList();(WorkSparepart element in iwws)

{WP = new detailProxy(element);.Add(WP);

}

}

_Client = _Repair.Car.Client.Client_Name;

_car = _Repair.Car.Brand_machine.brand_machine_name;

_carnum = _Repair.Car.number; //.Car_Parm.Where<Car_Parm>(it => it.Car_Parm_Text.Car_Parm_Text1.ToLower() == "Гос номер".ToLower()).FirstOrDefault().Car_Param_Value;

_indata = _Repair.inTime.ToLongDateString();

_outdata = _Repair.OutTime.ToString();

}string _Client ;string Client

{{ return _Client; }{ _Client = value; }

}string _car;string CAr

{{ return _car; }{ _car = value; }

}string _carnum;string CarNum

{{ return _carnum; }{ _carnum = value; }

}string _indata;string InData

{{ return _indata; }{ _indata = value; }

}string _outdata;string OutData

{{ return _outdata; }{ _outdata = value; }

}List<detailProxy> detproxy;

}class detailProxy

{string _WorkName;string WorkName

{{ return _WorkName; }{ _WorkName = value; }

}string _DetailName;string DetailName

{{ return _DetailName; }{ _DetailName = value; }

}string _Unit;string Unit

{{ return _Unit; }{ _Unit = value; }

}string _distr;string distr

{{ return _distr; }{ _distr = value; }

}string _Count;string Count

{{ return _Count; }{ _Count = value; }

}detailProxy(WorkSparepart _detail)

{

_WorkName = _detail.Work.Work_name;

_DetailName = _detail.Spare_part.Spare_part_Name;

_distr=_detail.Spare_part.Distributor.DistributorName;

_Unit=_detail.Spare_part.units.units_name;

_Count=_detail.count.ToString();

}

}

}


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образова

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ