You are on page 1of 63

ЗМІСТ

Завдання на курсове проектування


Реферат
Анотація
Перелік скорочень та умовних позначень

Вступ
1. Постановка задачі
1.1 Опис предметної області
1.2 Огляд аналогів ІС
1.3 Формування вимог до системи
2. Проектування системи
2.1 Розробка архітектури системи
2.2 Проектування бази даних
2.3. Опис структури даних
3. Реалізація інформаційної системи
YВисновок

Список літератури
Додаток А – Програмний код
АНОТАЦІЯ

Об'єкт дослідження: діяльність автосервісу .


Мета роботи: створення інформаційної системи обліку та контролю
виконання послуг автосервісу.
Методи дослідження та технології розробки: аналіз проблеми
автоматизації обліку та контролю на автосервісах. Як система управління
базами даних було обрано СУБД MS SQL Server. Засобом розробки та
створення програм Visual Studio.
Результати роботи: у рамках проведеної роботи було розроблено
інформаційну систему для автосервісу.
Область застосування: будь-який типовий автосервіс.
ПЕРЕЛІК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ

ТО - Технічне обслуговування
ВСТУП

Підприємства, пов’язані зі сферою діагностики та ремонту автомобілів,


існують в умовах високої конкуренції. Щоб підвищити свою
конкурентоспроможність більшість підприємств використовують
інформаційні системи у процесі своєї роботи, оскільки обчислювальна
техніка здатна прискорити процес обробки інформації та отримання
результату. Але в наші дні залишаються і такі підприємства, керівники яких
не наважуються впроваджувати інформаційні системи через їхню дорожнечу
або свою непоінформованість у даній сфері.
Основною метою даної курсової роботи є розробка інформаційної
системи автосервісу, яка дозволить підвищити ефективність управління за
рахунок швидкого доступу до інформації про клієнтів, постачальників,
співробітників, запаси на складі.
Інформаційна система має здійснювати зберігання, обробку, зміну,
додавання, видалення даних, надавати зручний інтерфейс для введення
інформації.
1. Постановка задачі

1.1 Опис предметної області

Метою даної курсової роботи є розробка інформаційної системи


заданої предметної галузі, саме автосервісу. Для досягнення заданої мети
необхідно на першому етапі докладно дослідити предметну область,
використовуючи при цьому джерела та засоби отримання інформації. Далі з
отриманої інформації виявити основні функції та завдання, організаційну
структуру та типові сценарії роботи, у зручній та зрозумілій формі подати
документообіг автосервісу. Наступним кроком буде порівняльний аналіз
аналогів.
Об'єктом дослідження цього дипломного проекту є діяльність
автосервісу. Автосервіс у свою чергу займається безпосередньо технічним
обслуговуванням та ремонтом автомобілів.
Технічне обслуговування (ТО) - це комплекс операцій або операція
щодо підтримки справного стану колісного транспортного засобу (складових
частин, систем колісного транспортного засобу) відповідно до інструкцій
його виробника.
Ремонт - комплекс операцій із відновлення справного стану колісного
транспортного засобу (його складових частин, систем).
Ремонт автомобілів провадиться фахівцями з досвідом не менше 3
років. Майстри постійно вдосконалюють свої знання та вміння на курсах
підвищення кваліфікації.
Автосервіс надає послуги з ремонту автомобілів як для приватних
автовласників, так і для корпоративних клієнтів.
Принципи роботи автосервісу:
− багаторівневий контроль якості послуг;
− гарантія дотримання термінів ремонту автомобіля;
− індивідуальний підхід під час ремонту будь-якого авто.
Всі клієнти, що звертаються в автосервіс, бажають оформити
замовлення на надання послуг, повинні заповнити форму реєстрації, в якій
необхідно вказати свої ПІБ, марку автомобіля, номерний знак і ПІБ власника
машини, контактний телефон.
Таким чином, у функціонування автосервісу входить:
− реєстрація клієнтів;
− довідкова інформація про доступні послуги;
− прийом замовлення на надання послуг;
− довідкова інформація про зроблене замовлення;
− виконання замовлення;
− звіт про виконані роботи та розрахунок вартості наданих послуг.

На рис. 1.1 показана організаційна структура автосервісу, яка


спрямована на встановлення чітких взаємозв'язків між усіма її відділеннями,
їх тісної взаємодії у виконанні поставлених завдань.

Рисунок 1.1 – Організаційна модель у нотації Organization Chart


У таблиці 1.1 подано об'єкти, що використовуються в організаційній
моделі.

Таблиця 1.1 - Об'єкти, що використовуються


Тип об'єкта Символ за Цільове використання Правила
русявий. промовчанн іменування
(англ.) ям (рус. або
англ.)
Організаційна схема (Organizational Chart)

Співробітник Співробітник є окремим Співробітник


Person

(Person) службовцем компанії і зазначається


може бути пов'язаний з прізвищем та
організаційними ініціалами
одиницями (до яких він (додатково
входить), а також із може
функціями (які він вказуватися
виконує або за які персональний
відповідає). номер)
Посада Position Є елементарною Ім'я посади має
(Position) організаційною починатися з
одиницею. З посадою іменника
пов'язані співробітники і,
як правило, їхні права та
обов'язки, визначаються
саме профілем посади
Організаційн Organizational
Organizational
Позначення окремого Повна назва
unit
unit
а одиниця штатного підрозділу. підрозділу
(Organizationa
l unit)

У таблиці 1.2 представлені типи зв'язків, які у діаграмі організаційної


структури.

Таблиця 1.2 - Типи зв'язків


Тип об'єкта- Тип зв'язку Цільове Тип об'єкта-
джерела використання приймача
зв'язку зв'язку
Посада є безпосереднім призначена для Організаційна
(Position) керівником (is вказівки керівника одиниця
disciplinary організаційної (Organizational
superior) одиниці unit)
Організаційна Складається з (is призначена для Посада (Position)
одиниця composed of) опису складу
(Organizational організаційної
unit) одиниці
Організаційна Є технічним призначена для Організаційна
одиниця керівником (is опису одиниця
(Organizational technical superior) підпорядкування (Organizational
unit) організаційних unit)
одиниць
Співробітник Обіймає посаду Призначена для Посада (Position)
(internal (occupies) опису окремого
person) співробітника,
який обіймає цю
посаду

В автосервісі працюють: 1 адміністратор, 1 комірник, 1 майстер-


приймальник, 4 автослюсарі (2 професійні, 2 помічники), 1 діагност-електрик
і генеральний директор, що є єдиним власником. Так само автосервіс
щомісяця наймає бухгалтера, що приходить, оскільки це менш витратно для
малого бізнесу.
Майстер-приймальник вирішує такі завдання:
- спілкування з клієнтами;
- прийом замовлення від клієнтів;
- оформлення документів;
- прийняття рішення щодо гарантійних випадків;
- розподіл ремонту за пріоритетами, планування навантаження цеху;
- розподіл робіт по співробітникам (з огляду на кваліфікацію) після
приходу заявки;
- контроль повноти та своєчасності виконання робіт;
- контроль за виконанням вимог щодо організації автосервісу;
- ведення складу часток;
- участь у формуванні складу запчастин, замовлення нових
матеріалів;
- ведення документообігу;
- складання звітності.
Комірник вирішує такі завдання:
- здійснює прийом на склад, зважування, зберігання та видачу зі
складу різних матеріальних цінностей;
- перевіряє відповідність цінностей, що приймаються, супровідним
документам;
- переміщує матеріальні цінності до місць зберігання вручну або за
допомогою штабелерів та інших механізмів з розкладкою (сортуванням) їх за
видами, якістю, призначенням та іншими ознаками;
- керує роботою з навантаження, вивантаження вантажів та
розміщення їх усередині складу;
- забезпечує збереження складованих товарно-матеріальних
цінностей та дотримання режимів зберігання;
- складає дефектні відомості на несправні інструменти, прилади і т.д.,
актів на їх ремонт та списання, а також на недостачу та псування матеріалів;
- забезпечує дотримання правил оформлення та здачі прибутково-
видаткових документів, складання встановленої звітності;
- стежить за наявністю та справністю протипожежних засобів, станом
приміщень, обладнання та інвентарю на складі та забезпечує їх своєчасний
ремонт;
- бере участь у проведенні інвентаризації товарно-матеріальних
цінностей;
- веде облік складських операцій;
- контролює стан техніки безпеки та вживає заходів щодо усунення
виявлених недоліків, порушень правил виробничої санітарії, недотримання
робітниками інструкцій з охорони праці;
- виконує окремі службові доручення свого безпосереднього
керівника.
Автослюсар вирішує такі завдання:
- отримує інформацію про замовлення, прийняте на його виконання.
Дізнається, які запасні частини та витратні матеріали необхідно отримати на
складі, і які види ремонту та в який термін необхідно провести;
- ініціює попереднє доповнення до замовлення, за необхідності
додаткового ремонту;
- може ознайомитися з розрахунком своєї зарплати протягом місяця,
залежно від виконаних видів ремонту.
Автомаляр виконує таку роботу:
- отримує інформацію про замовлення, прийняте на його виконання.
Дізнається, які витратні матеріали необхідно отримати на складі, і в який
термін необхідно зробити фарбування автомобіля;
- підготовка автомобіля до фарбування;
- фарбування автомобіля.
Адміністратор вирішує такі завдання:
- здійснює роботу з ефективного та культурного обслуговування
відвідувачів, створення для них комфортних умов;
- консультує відвідувачів з питань, що стосуються послуг;
- приймає документи від клієнтів; перевіряє наявність сервісної
книжки;
- видає клієнтам бланк заявки, оформлює разову перепустку на
в'їзд/виїзд автомобіля на територію автосервісу;
- при закритті замовлення - наряду майстром-приймачем пробиває
касовий чек, анулює його та видає даний пакет документів клієнту;
- вживає заходів щодо запобігання та ліквідації конфліктних
ситуацій;
- списання матеріальних цінностей, що застосовуються при ремонті
та тех.обслуговуванні автомобілів;
- вивчати товар, що надходить (ціни, найменування).
- виконувати окремі службові доручення свого безпосереднього
керівника;
- негайно повідомляти безпосереднього керівника про будь-яку
ситуацію, що загрожує життю та здоров'ю людей, про кожен нещасний
випадок, що стався на виробництві або про погіршення стану свого здоров'я,
у тому числі ознак професійного захворювання (отруєння).
На час відсутності адміністратора його обов'язки виконує майстер –
приймальник.
1.2 Огляд аналогів ІС

1.2.1 Система LogicStar-Avto

LogicStar-Avto – це багатофункціональна система автоматизації


підприємств сфери автобізнесу, що спеціалізуються в галузі продажу та
обслуговування автотранспорту.
LogicStar-Avto автоматизує бізнес-процеси автоцентру в єдиному
інтегрованому рішенні та підтримує:
− роботу з багатьма брендами – для кожного з брендів можуть
налаштовуватись довідники, нормативи, шаблони первинних
документів, підтримується звітність;
− інтеграцію із зовнішніми системами підбору робіт та деталей,
Ewa Net, TIS (Opel), Suzuki EPC, Mitsubishi EPC, Iveco Power,
Chevrolet Parts Imager, AUDATEX;
− інтеграцію із системами автоматичного відпустки ПММ в цеху,
наприклад MDS2000 Fluid Management, що дозволяє проводити
списання ПММ на Замовлення-наряди у часі;
− зовнішній доступ до інформації через різні варіанти WEB-
інтерфейсів як для віддаленого перегляду менеджерами
результатів діяльності компанії, так і надання інформації для
клієнтів (про поточну наявність деталей, попередній запис,
ведення та історію ремонту, обов'язкові сервісні заходи).[10]

У таблиці 1.3 представлено порівняльну таблицю LogicStar Avto.


Таблиця 1.3 - Порівняльна таблиця
LSAvto LSAvto LSAvto
Lite DMS PRO
Для незалежних СТО + + -
Для офіційних дилерів + + -
Для дистриб'юторів (імпортерів) - - +
Зберігання інформації в "хмарі", оренда + + +
простору на сервері
Зберігання інформації на власному сервері - + +
Кількість ліцензій 8 15 на запит
Вартість установки, руб. 50.000 на запит на запит
Вартість технічного обслуговування, руб. 3.500 на запит на запит

1.2.2 Система "Альфа-Авто"

Програмний комплекс "Альфа-Авто", розроблений на платформі


"1С:Підприємство 8.0"
Програмний комплекс «Альфа-Авто», розроблений на платформі
«1С:Підприємство 8.0», забезпечує комплексну підтримку всіх бізнес-
процесів у тех-центрах, керівництво може оперативно отримувати та
використовувати дані про різні сторони діяльності компанії.
«Альфа-Авто» включає такі облікові модулі:
− запчастини;
− сервісний центр;
− фінансовий блок;
− обмін даними.
Конфігурація «АЛЬФА-АВТО» не є самостійною програмою та
призначена для спільного використання з платформою «1С:Підприємство 8».
У таблиці 1.4 подано вартість комплексу «Альфа-Авто».
Основні переваги:

− підвищення ефективності керування автосервісом: відображення всієї


діяльності автосервісу в єдиному інформаційному просторі - від запису
клієнта до аналізу рентабельності бізнесу;
− вбудовані функції керування взаємовідносинами з клієнтами (CRM);
− керування автосервісом: планування завантаження, облік виконаних
ремонтних робіт, аналіз ефективності роботи [11].

Таблиця 1.4 - Вартість комплексу "Альфа-Авто"


Найменування Ціна для
кінцевого
користувача
Альфа-Авто: Автосервіс + Автозапчастини, для одного 62 000 руб.
користувача
Додаткова ліцензія на 1 користувача Альфа-Авто: 44 000 руб
Автосервіс + Автозапчастини
Додаткова ліцензія на 5 користувачів для Альфа-Авто: 42 000 руб.
Автосервіс + Автозапчастини
Додаткова ліцензія на 10 користувачів Альфа-Авто: 430 000 руб
Автосервіс + Автозапчастини
Додаткова ліцензія на 25 користувачів для Альфа-Авто 470 000 руб
Додаткова ліцензія на 50 користувачів Альфа-Авто: 4 135 000 руб
Автосервіс + Автозапчастини

1.2.3 Система TurboService

TurboService – може відправляти з приймання в ремзону параметри


автомобіля на пости комп'ютерної діагностики (газоаналіз, гальмівні стенди,
системна діагностика, стенди вимірювання в кузовному цеху, апарати
витрати олії) та отримувати та зберігати результати проведених вимірювань.
TurboService - гнучка система, що чітко налаштовується під схему роботи
підприємства. Забезпечує єдиний інформаційний простір всім спеціалістів
автоцентру.
Система забезпечує проведення всіх необхідних комплексної
автоматизації виробництва операцій. Ось лише деякі з її можливостей:
− повноцінний складський облік;
− оформлення та виведення документів - замовлення-нарядів,
рахунків, накладних, актів приймання-здачі робіт тощо; 10
− облік виконання робіт та вироблення механіків;
− підтримка довідників робіт та автомобілів;
− багатоскладність, багатофірмовий, багатовалютність;
− різні методи списання у холдингу;
− перенесення даних у популярні бухгалтерські системи;
− формування та друк різнобічних звітів про діяльність
підприємства.
У таблиці 1.5 подано вартість системи TurboService

Таблиця 1.5 - Вартість системи TurboService


Ліцензії комплектації "Стандарт" Вартість, руб
Мінімальний пакет на 5 робочих місць 25000
Додаткове робоче місце 5000
Ліцензії комплектації «Все включено» Вартість, руб.
Мінімальний пакет на 5 робочих місць 150000
Додаткове робоче місце 30000
Впровадження та навчання Вартість, руб.
Передпроектне обстеження 60000
Конфігурування бази даних 15 000
Навчання в офісі розробника 3 дні по 4 години 18 000
Навчання в офісі замовника 3 дні по 4 години 36000
Проведення міні-аудиту. Аудит віддалено, виїзд та 36000
презентація у замовника
Навчання адміністратора або досвідченого користувача в 18000
офісі розробника 3 дні
Навчання програміста модифікаціям ТурбоСервіс + півроку 60000
підтримки програміста + набір інструментів та необхідних
вихідних текстів
Обов'язкова підтримка Вартість, руб.
Абонентська плата на місяць за 1 робоче місце (мінімум 5) 500
Вартість години додаткових робіт 3000

1.3 Формування вимог до системи

Система забезпечуватиме зберігання даних про клієнтів, замовлення,


автомобілі, запчастини, роботи та співробітників. Обробка інформації вручну
займає багато часу як при заповненні бланків, так і при пошуку та
виправленні некоректних записів. Забезпечуючи можливість управлінського
персоналу коригувати дані безпосередньо в режимі реального часу, багато
проблем можуть бути зменшені або вирішені.
1) Загальні відомості
Повна назва системи: Інформаційна система «Автосервіс»
Умовне позначення системи: ІС
Призначення та сфера застосування: програма призначена для
створення, управління вмістом бази даних:
− база клієнтів, працівників, постачальників;
− дані про запаси;
− дані про витрати та доходи;
− дані про роботи.
Програма надає інтерфейс для керування вмістом бази даних.
2) Вимоги до системи
Вимоги до функціональних характеристик
Система повинна забезпечувати можливість виконання наведених
нижче функцій:
− поділ користувачів, що підключаються через інтерфейс на групи
в залежності від посади, доступ до всіх даних повинен бути
тільки у генерального директора автосервісу;
− можливість введення та редагування інформації в базі даних;
− наявність зрозумілого інтерфейсу для оформлення замовлення;
− можливість розрахунку заробітної плати;
− можливість обліку запасів складі.
3) Вимоги до надійності
Час відновлення працездатності прикладного програмного
забезпечення за будь-яких збоїв і відмови не повинен перевищувати одного
робочого дня.
Повинне здійснюватись розмежування прав доступу до системи.
Повинен вестись журнал подій системи.
Відмовлення програми через некоректні дії користувача при взаємодії з
програмою через інтерфейс неприпустимі.
Для кожного співробітника повинен бути доступ тільки до тих даних,
які необхідні для роботи. Генеральний директор повинен мати доступ до всіх
даних інформаційної системи, але лише для читання.
Паролі та логіни зберігаються у довіднику співробітників, паролі у
зашифрованому вигляді.
4) Вимоги до інформаційної та програмної сумісності
Вимоги до програмних засобів, які використовуються програмою.
Системні програмні засоби, які використовуються програмою, мають
бути представлені ліцензійною локалізованою версією операційної системи
Windows 10. Наявність .NET Framework 4 та MS SQL Server CE Client.
2. Проектування системи
2.1 Розробка архітектури системи

Під час аналізу вимог до системи основна увага приділялася з'ясування


того, що має бути зроблено незалежно від того, як це зробити. На етапі
розробки системи вирішується питання, як реалізувати рішення, ухвалені на
етапі аналізу.
Спершу розробляється загальна структура (архітектура) системи.
Архітектура системи визначає її розбиття на модулі, задає контекст, у якого
приймаються проектні рішення наступних етапах розробки.
Для розробки архітектури потрібно вибрати систему управління базами
даних (СУБД). За способом доступу до баз даних (БД) розрізняють такі
СУБД:
− клієнт-серверні;
− файл-серверні;
− вбудовані.
Клієнт-серверна система характеризується наявністю двох
взаємодіючих самостійних процесів – клієнта та сервера, які можуть
виконуватися на різних комп'ютерах, обмінюючись даними по мережі. За
такою схемою можуть бути побудовані системи обробки даних на основі
СУБД, поштові та інші системи.
У файл-серверній системі дані зберігаються на файловому сервері
(наприклад, Novell NetWare або Windows NT Server), а їх обробка
здійснюється на робочих станціях, на яких, як правило, функціонує одна з
так званих "настільних СУБД" - Access, FoxPro , Paradox тощо.
Додаток на робочій станції "відповідає за все" - за формування
інтерфейсу користувача, логічну обробку даних і за безпосереднє
маніпулювання даними. Файловий сервер надає послуги лише найнижчого
рівня – відкриття, закриття та модифікацію файлів, підкреслю – файлів, а не
бази даних. База даних існує лише в "мозку" робочої станції.
Безпосереднім маніпулюванням даними займається кілька незалежних
та неузгоджених між собою процесів. Крім того, для здійснення будь-якої
обробки всі дані необхідно передати через мережу з сервера на робочу
станцію.
У клієнт-серверній системі функціонують (як мінімум) дві програми -
клієнт і сервер, що ділять між собою ті функції, які у файл-серверній
архітектурі повністю виконує додаток на робочій станції. Зберіганням і
безпосереднім маніпулюванням даними займається сервер баз даних, якою
може бути Microsoft SQL Server, Oracle, Sybase,Firebird,Interbase,IBM
DB2,Informix,PostgreSQL,MySQL,Caché,Лінтер.
Вибір системи управління баз даних (СУБД) є важке завдання і одна із
важливих етапів розробки додатків баз даних. Вибраний програмний продукт
має задовольняти як поточним, і майбутнім потребам підприємства, у своїй
слід враховувати фінансові витрати. Інформаційна система має відповідати
найбільш загальним технічним вимогам.

Таблиця 2.1 - Характеристики інформаційної системи


Характеристики Коментарі
Єдина база даних, що Рекомендується використання централізованої
забезпечує розраховану бази даних з урахуванням повноцінних
на багато користувачів промислових СУБД (MS SQL Server, Oracle,
роботу. Informix, DB2).
Відсутність обмежень за Будь-які обмеження щодо кількості об'єктів,
кількістю об'єктів якими оперує система, говорять про
(максимальна кількість недосконалість технічного рішення такого
вимірювань, записів, програмного продукту. Навіть якщо ці
звітів, кількість обмеження становлять десятки тисяч одиниць і
користувачів, що сьогодні здаються прийнятними, це означає, що
одночасно працюють, і в майбутньому виникне непереборний бар'єр при
т.д.). розвитку бюджетної моделі.
Інтеграція із суміжними Можливості системи повинні дозволяти
автоматизованими здійснювати повноцінний імпорт/експорт, за
системами. потреби попередню обробку даних із різних
облікових систем; бажана підтримка
двостороннього зв'язку з наявними 15
обліковими системами. Використання
стандартних СУБД також полегшує інтеграцію.
Можливості Необхідно з'ясувати, чи має постачальник
доопрацювання системи програмного забезпечення можливості його
на вимогу замовника. доопрацювання на рівні програмного коду.

Протягом багатьох років продукти MS SQL Server характеризуються


надійністю, безпекою, високою продуктивністю та зручністю у роботі.
Сучасна СУБД MS SQL Server це потужний програмний комплекс, що
дозволяє створювати програми будь-якої складності. Ядром цього комплексу
є база даних, що зберігає інформацію, кількість якої за рахунок коштів
масштабування, що надаються, практично безмежно. З високою
ефективністю працювати з цією інформацією одночасно може практично
будь-яка кількість користувачів, не виявляючи тенденції до зниження
продуктивності системи при різкому збільшенні їхньої кількості.
Механізми масштабування СУБД MS SQL Server останніх версій
дозволяють безмежно збільшувати потужність і швидкість роботи сервера
MS SQL Server і своїх додатків.
Ще однією складовою успіху СУБД MS SQL Server є те, що вона
поставляється практично для всіх операційних систем, що існують на
сьогодні. Таким чином, компаніям, що починають роботу з продуктами MS
SQL Server не доводиться змінювати мережеве оточення, що вже склалося.
Існує лише невелика кількість відмінностей під час роботи з СУБД,
зумовлених особливостями тієї чи іншої операційної системи. В цілому ж це
завжди та ж безпечна, надійна і зручна СУБД MS SQL Server.
Слід зазначити мудру міграційну політику MS SQL Server. Розуміючи,
що перехід із старішої версії СУБД на нову, досить трудомістка процедура.
Пов'язана вона із тестуванням роботи існуючих додатків у новому оточенні.
MS SQL Server при випуску нових продуктів приділяє особливу увагу
сумісності знизу-вгору, роблячи цей перехід практично безболісним. Останні
версії СУБД MS SQL Server значно простіше в установці та початковому
налаштуванні. Також зросли можливості зі спеціалізованого настроювання
роботи СУБД під конкретне завдання.
Як сервер СУБД було обрано MS SQL Server. На цей вибір мало кілька
факторів.
По-перше, технічні характеристики, які повністю задовольняють
висунутим вимогам, а по-друге, доступність даної СУБД. Серед усіх переваг
MS SQL Server слід виділити такі:
− простота та зручність адміністрування;
− невибагливість та мінімальні системні вимоги;
− ефективність та швидкодія;
− розпаралелювання операцій у запиті;
− високий ступінь інтеграції у середовищі розробки;
− висока надійність та відмовостійкість;
− можливість розширення бази даних;
− наявність універсальних засобів захисту;
− орієнтований Інтернет технології;
− порівняно низька ціна.
Виходячи з перерахованих вище переваг, MS SQL Server був обраний
як оптимальне рішення поставленої задачі, для реалізації СУБД [1].

2.2 Проектування бази даних


Метою бази даних, яка розробляється для користувачів, є облік
клієнтів, співробітників, постачальників, робіт, виконаних співробітниками, а
також суми їх винагороди. Користувачами бази даних автосервіс є
працівники автосервісу.
Реляційна БД – основний тип сучасних баз даних. Складається з
таблиць, між якими можуть існувати зв'язки за ключовими значеннями.
Таблиця бази даних (table) – регулярна структура, що складається з
однотипних рядків (записів, records), розбитих на стовпці (поля, fields).
Теоретично реляційних баз даних синонім таблиці - ставлення
(relation), у якому рядок називається кортежем, а стовпець називається
атрибутом.
У концептуальній моделі реляційної БД аналогом таблиці є сутність
(entity), з певним набором властивостей – атрибутів, здатних набувати певних
значень (набір допустимих значень – домен).
Ключовий елемент таблиці (ключ, regular key) - таке її полі (простий
ключ) чи рядкове вираз, утворене з значень кількох полів (складовий ключ),
яким можна визначити значення інших полів для однієї чи кількох записів
таблиці. Насправді для використання ключів створюються індекси -
службова інформація, що містить упорядковані відомості про ключові
значення. У реляційній теорії та концептуальній моделі поняття "ключ"
застосовується для атрибутів відношення або сутності.
Первинний ключ (primary key) - головний ключовий елемент, що
однозначно ідентифікує рядок у таблиці. Можуть також існувати
альтернативний (candidate key) та унікальний (unique key) ключі, що служать
також для ідентифікації рядків таблиці.
У реляційній теорії первинний ключ - мінімальний набір атрибутів, що
однозначно ідентифікує кортеж щодо.
У концептуальній моделі первинний ключ - мінімальний набір
атрибутів сутності, що однозначно ідентифікує екземпляр сутності.
Зв'язок (relation) – функціональна залежність між об'єктами. У
реляційних базах даних між таблицями встановлюються зв'язки за ключами,
один з яких у головній (parent, батьківській) таблиці - первинний, другий -
зовнішній ключ - у зовнішній (child, дочірній) таблиці, як правило,
первинним не є і утворює зв'язок "один до багатьох" (1: N). У разі
первинного зовнішнього ключа зв'язок між таблицями має тип один до
одного (1:1). Інформація про зв'язки зберігається у базі даних.
Зовнішній ключ (foreign key) - таке підмножина атрибутів дочірнього
відносини, що з будь-якого його непустого значення обов'язково знайдеться
рівне значення первинного ключа головного відносини.
Для зберігання інформації використовується MS SQL база даних
ServiceStation, що включає п'ять таблиць:
Перша таблиця Client призначена для зберігання інформації про
клієнтів автосервісу. Включає наступні стовпці:
- Fam (тип nvarchar(50), not null);
- Name (тип nvarchar(50), not null);
- Ochestvo (тип nvarchar(50), не null);
- Marka (тип nvarchar(50), not null);
- Number (тип nvarchar(50), not null, первинний ключ, ідентифікатор);
Друга таблиця Work призначена для зберігання інформації про
виконані роботи. Включає наступні стовпці:
- Work (тип nvarchar(50), not null);
- Detali (тип nvarchar(50), not null);
- Worker (тип nvarchar(50), not null);
- Number (тип nvarchar(50), not null, первинний ключ, ідентифікатор).
- Price (тип int, not null).
Третя таблиця Workers призначена для зберігання інформації про
логіну, пароль і рівень доступу. Включає наступні стовпці:
-ID (тип int, not null, первинний ключ, ідентифікатор);
-Login (nvarchar(100)), Allow null value);
-Password (nvarchar(100)), Allow null value);
-Access (тип int, not null, Allow null value);
Четверта таблиця pricelist призначена для зберігання інформації про
послуги, які виконує автосервіс, про деталі, час виконання робіт, прізвища
автослюсаря та ціну послуги. Включає наступні стовпці:
- Work (тип nvarchar(50), not null);
- Detali (тип nvarchar(50), not null, первинний ключ, ідентифікатор);
- TimeWork (тип time(7), not null);
- AvtoMechanic (тип nvarchar(50), not null);
- Price (тип int, not null);
П'ята таблиця warehouse призначена для зберігання інформації про
деталі, фірму-виробника детеалей, ціну на деталі для фірми виробляючої
роботи, а також про те, чи є в наявності деталі. Включає наступні стовпці:
- Detali (тип nvarchar(50), not null, первинний ключ, ідентифікатор);
- Manufacturer (тип nvarchar(50), not null);
- CompanyPrice (тип int, not null);
- ClientPrice (тип int, not null);
- AvailableInWarehouse (тип nvarchar(50), not null);
Сервер баз даних Microsoft SQL Server використовує версію мови SQL
як мову запитів.
У SQL Server вбудована підтримка .NET Framework. Завдяки цьому
процедури БД, що зберігаються, можуть бути написані будь-якою мовою
платформи .NET, використовуючи повний набір бібліотек, доступних для
.NET Framework, включаючи Common Type System (система поводження з
типами даних у Microsoft .NET Framework). Однак, на відміну від інших
процесів, .NET Framework, будучи базовою системою для SQL Server,
виділяє додаткову пам'ять і вибудовує засоби керування SQL Server замість
використання вбудованих засобів Windows. Це підвищує продуктивність
порівняно із загальними алгоритмами Windows, оскільки алгоритми
розподілу ресурсів спеціально налаштовані для використання у структурах
SQL Server.
У таблицях виберемо первинні ключі та індексовані поля. Так само для
поля визначимо його основні характеристики – чи це поле є зовнішнім або
первинним ключем, чи створено індекс цього поля, чи задано для поля
значення за замовчуванням, які обмеження задані для даного поля. Вся
інформація про поля представлена в таблиці 2.2 .Модель даних, зроблена в
MS SQL Server, представлена рис. 2.1.

Таблиця 2.2 — Опис даних


Назва Ім’я поля Тип Розмі Первинний ключ / вторинний ключ /
таблиці даних р індексоване поле
поля
Client Number Nvarchar 50 Первинний
ключ(AUTO_INCREMENT)
Fam Nvarchar 50 NOT NULL
Name Nvarchar 50 NOT NULL
Ochestvo Nvarchar 50 NOT NULL
Marka Nvarchar 50 NOT NULL
Work Number Nvarchar 50 Первинний
ключ(AUTO_INCREMENT)
Work Nvarchar 50 NOT NULL
Detali Nvarchar 50 NOT NULL
Worker Nvarchar 50 NOT NULL
Price Integer 50 NOT NULL
Workers ID Integer 50 Первинний
ключ(AUTO_INCREMENT)
Login Nvarchar 100 NOT NULL
Password Nvarchar 100 NOT NULL
Access Integer 50 NOT NULL
priceList Detali Nvarchar 50 Первинний
ключ(AUTO_INCREMENT)
Work Nvarchar 50 NOT NULL
TimeWork DateTim - NOT NULL
e
AvtoMechanic Nvarchar 50 NOT NULL
Price Integer 50 NOT NULL
warehous Detali Nvarchar 50 Первинний
e ключ(AUTO_INCREMENT)
Manufacturer Nvarchar 50 NOT NULL
CompanyPrice Integer 50 NOT NULL
ClientPrice Integer 50 NOT NULL
AvailableInWarehou Nvarchar 50 NOT NULL
se
Рисунок 2.1 – Зв’язки таблиць бази даних

2.3. Опис структури даних

Для написання програми було вибрано середовище програмування


Visual Studio 2017 C#, що базується на мові програмування C#. Це
середовище вигідно відрізняється ефективністю та надійністю.
Для стабільного функціонування програми необхідний комп'ютер
фірми IBM або сумісний із ним, з обсягом оперативної пам'яті щонайменше
128 Мб., процесор із частотою щонайменше 600мГц.
Для вирішення поставленого завдання необхідно використовувати
функціональну, ефективну та зручну платформу для розробки, що дозволяє
застосовувати принципи об'єктно-орієнтованого програмування. Як таку
платформу було обрано середовище .NET.
Середовище розробки Visual Studio, що постачається разом із .NET,
надає необхідний інструментарій для ефективного та швидкого створення
програм з графічним інтерфейсом.
Поява технології .NET спричинила масову реконструкцію деяких мов
програмування, які прагнуть використовувати ті чи інші можливості
платформи, такі як C++ і Visual Basic. Microsoft вирішили запропонувати
розробникам альтернативу - мова, спеціально орієнтована .NET і створили C
#. Самі розробники мови описують його як простий, сучасний, об'єктно-
орієнтований і безпечний мову програмування. Синтаксично C# нагадує C++
та Java, що дозволяє за досить короткий час вивчити тонкощі нової мови.
Незважаючи на те, що C# і .NET призначені в першу чергу для веб-
розробки, їх також активно застосовують для створення додатків, які повинні
встановлюватися на машині кінцевого користувача, де і виконуватиметься
вся обробка даних. Розробку таких програм забезпечує бібліотека Windows
Forms, що дозволяє проектувати графічний інтерфейс. Система, описана у
цій роботі, розроблено саме з допомогою бібліотеки Windows Forms.
Мова програмування C# претендує на справжню об'єктну
орієнтованість.
Мова програмування C# покликана реалізувати компонентно-
орієнтований підхід до програмування, який сприяє меншій машинно-
архітектурній залежності результуючого програмного коду, більшої
гнучкості, переносимості та легкості повторного використання програм.
Принципово важливою відмінністю попередників є початкова
орієнтація на безпеку коду.
Розширена підтримка подієво-орієнтованого програмування.
Мова програмування C# є «рідною» для створення додатків у
середовищі Microsoft .NET, оскільки найбільш тісно та ефективно
інтегрована з нею.
Microsoft Visual Studio – це версія Visual Studio та .NET Framework, яка
підтримує нові та покращені об'єкти, включає середовище розробки з
оновленим інтерфейсом та відрізняється інтегрованою підтримкою Microsoft
SQL Server, дозволяючи створювати та розгортати проекти із застосуванням
сервера баз даних. З інструменту програміста, що пише і налагоджує код,
Microsoft Visual Studio перетворилася на повноцінний інструментальний
засіб, що дозволяє автоматизувати діяльність усіх членів команди, які
працюють над проектом.
Інтерфейс Visual Studio традиційно виконаний в одному стилі із MS
Office. Є список завдань, куди поміщають інформацію про помилки і
необхідні доопрацювання. Кожному пункту можна призначити пріоритет, а
після виконання встановити прапорець, який повідомляє про завершення
зазначеної задачі. Task List підтримує сортування записів за текстом,
пріоритетом і статусом. Властивості проекту Visual Studio можна редагувати
за допомогою вбудованого інструменту, який дозволяє змінювати
налаштування та підписи складання, посилання на зовнішні модулі, набір
прав, необхідних для її функціонування. Крім того, розробник легко може
зберегти налаштування свого користувача IDE у файлі налаштувань і
застосовувати його у разі переходу на інший комп'ютер. Розробник баз даних
може використовувати об'єктно-орієнтовані мови програмування, такі як C#
та Visual Basic, спираючись на широкий спектр вбудованих можливостей
класів та методів .NET Framework. Крім того, програміст може скористатися
компонентами, написаними сторонніми компаніями. З появою SQL Server
було вдосконалено механізм доступу до даних.
Класи та структури є двома основними конструкціями системи
загальних типів CTS у платформі .NET Framework. Кожна по суті є
структурою даних, що інкапсулює набір даних та поведінку, пов'язані як
логічна одиниця. Дані та поведінка є членами класу чи структури, і до них
включені методи, властивості, події тощо.
Оголошення класу або структури подібне до креслення, який
використовується для створення екземплярів або об'єктів під час виконання.
При визначенні класу чи структури під назвою Person, Person є ім'ям типу.
При оголошенні або ініціалізації змінної типу p Person, p вважається об'єктом
або екземпляром Person. Можливе створення кількох екземплярів одного
типу Person, і кожен екземпляр може мати різні значення у своїх
властивостях та полях.
Клас є типом посилань. При створенні об'єкта класу змінна, до якої
призначається об'єкт, зберігає посилання на пам'ять. При призначенні
посилання на об'єкт до нової змінної нова змінна посилається на вихідний
об'єкт. Зміни, внесені через одну змінну, відображаються в іншій змінній,
оскільки вони посилаються на одні дані.
Структура є типом значення. При створенні структури змінна, до якої
призначається, зберігає фактичні дані структури. При призначенні структури
нової змінної виконується копіювання. Тому нова змінна та вихідна змінна
містять дві окремі копії одних даних. Зміни, внесені в одну копію, не
впливають на іншу копію.
Приклад класу Permission,використовується для визначення окремого
набору прав для окремого користувача:

Public class Permissions : List<Permission>


{
public Permission this[string name]
{
get
{
return this.FirstOrDefault(tTemp => tTemp.name == name);
}
}
}
public class Permission
{
public string name;
public bool canRead;
public bool canEdit;
public bool canDelete;
Public Permission(DataRow row)
{
name = row["Об'єкт Доступу"]. ToString ();
canRead = (row["Читання"].ToString() == "1");
canEdit = (row["Зміна"].ToString() == "1");
canDelete = (row["Видалення"].ToString() == "1");
}
}
}
3. Реалізація інформаційної системи

У процесі роботи над дипломною роботою було створено інформаційну


систему, яка забезпечує:
− підвищення ефективності управління;
− оптимізація процесів збору, обробки, обліку та контролю
інформації;
− підвищення якості обслуговування клієнтів; скорочення рутинної
роботи;
Програма матиме вигляд консольного вікна, через яке можна буде
взаємодіяти з пунктами, показаними в ньому. Структура вікна має такий
вигляд (рисунок 3.1):

Рисунок 3.1 - Інтерфейс користувача

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


інформації про послуги автосервісу та його клієнтів. Програма має
зрозумілий та простий для користувача інтерфейс. Для входу до програми
існує три рівні доступу: адмін (рисунок 3.2), користувач (рисунок 3.3) та
захисний (рисунок 3.4), що використовується для захисту від
несанкціонованого доступу до програми.

Рисунок 3.2 – Інтерфейс програми, реалізований на рівні доступу адмін

У цій програмі можливі такі види дій, наведених нижче з поясненням


кожного з них:
1. Переглянути всі записи бази даних автосервісу:
Тут можна подивитися ім'я, прізвище, по батькові клієнта, марку та
реєстраційний номер автомобіля, що надійшов у ремонт, поточні роботи, які
проводяться в автомобілі, список необхідних деталей для проведення
ремонтних робіт, прізвище майстра та вартість ремонту автомобіля (рисунок
3.5).
Рисунок 3.3 – Інтерфейс програми, реалізований на рівні доступу
користувач

Рисунок 3.4 – Інтерфейс програми, реалізований у разі неправильного


введення пароля

Рисунок 3.5 - Переглянути всі записи бази даних автосервісу


1. Переглянути всіх клієнтів:
Тут можна подивитися ім'я, прізвище, по батькові клієнта, марку та
реєстраційний номер автомобіля, що надійшов у ремонт (рисунок 3.6).

Рисунок 3.6 - Переглянути всіх клієнтів

3. Переглянути список поточних робіт:


Тут можна переглянути реєстраційний номер автомобіля, що надійшов
у ремонт, поточні роботи, які проводяться в автомобілі, список необхідних
деталей для проведення ремонтних робіт, прізвище майстра та вартість
ремонту автомобіля (рис. 3.7).
Рисунок 3.7 - Переглянути список поточних робіт

4. Переглянути список можливих робіт:


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

Рисунок 3.8 - Переглянути список можливих робіт

5. Переглянути наявність деталей на складі:


Тут можна переглянути деталі, які використовуються для проведення
ремонтних робіт, ціна закупівлі деталі для фірми та вартість продажу деталі
для клієнта, а також інформація про те, чи є деталь на складі в даний момент
(рисунок 3.9).

Рисунок 3.9 - Переглянути наявність деталей на складі

6. Додати клієнта:

Тут можна додати нового клієнта. Для цього необхідно


ввестипрізвище, ім'я, по батькові клієнта, марку та реєстраційний номер
автомобіля, що надійшов у ремонт (рисунок 3.10).

Рисунок 3.10 - Додати клієнта


7. Ввести виконані роботи:

Тут можна додати нову виконану роботу. Для цього необхідно


ввестивиконану роботу, у список необхідних деталей для проведення
ремонтних робіт, прізвище майстра та вартість ремонту автомобіля (рис.
3.11).

Рисунок 3.11 - Ввести виконані роботи

8. Змінити дані клієнта:

Для зміни інформації про клієнта потрібно ввести прізвище клієнта, за


яким буде знайдено інформацію про цього клієнта: ім'я, прізвище, по
батькові клієнта, марка та реєстраційний номер автомобіля, що надійшов у
ремонт. Після цього можна буде змінити ім'я, прізвище, по батькові клієнта,
марку та реєстраційний номер автомобіля, що надійшов у ремонт на нове.
(Рисунок 3.12).
Рисунок 3.12 - Змінити дані клієнта

9. Змінити вибраний тип роботи

Для Змінити тип роботи потрібно ввести реєстраційний номер


автомобіля, що надійшов у ремонт, за якою буде знайдена інформація про
виконану роботу: тип роботи, які проводяться в автомобілі, список
необхідних деталей для проведення ремонтних робіт, прізвище майстра,
реєстраційний номер автомобіля, що надійшов у ремонт, та вартість ремонту
автомобіля. Після цього можна буде змінити інформацію на нову (рисунок
3.13).
Рисунок 3.14 - Змінити вибраний тип роботи

10. Видалення клієнта:

Для видалення клієнта необхідно ввести прізвище клієнта та натиснути


enter після чого інформація про клієнта буде видалена. (Рисунок 3.15).

Рисунок 3.15 - Видалення клієнта


11. Видалення роботи:

Для видалення роботи необхідно ввести реєстраційний номер


автомобіля, що надійшов у ремонт, і натиснути enter після чого інформація
про роботу буде видалена (рисунок 3.16).

Рисунок 3.16 - Видалення роботи

12. Пошук за номером машини

Для пошуку за номером необхідно ввести реєстраційний номер


автомобіля, що надійшов у ремонт, і натиснути enter після чого буде
виведена інформація про клієнта (рисунок 3.17).

Рисунок 3.17 - Пошук за номером машини


Для виконання програми необхідний комп'ютер, підключений до
локальної мережі або має доступ до Enternet (конкретно MySQL). Мінімальні
вимоги до комп'ютера:
1) процесор Intel Pentium 2.16 GHz;
2) Оперативна пам'ять 1024 Мб;
3) Операційна система Windows 7/8/10.
Щоб відкрити програму, запустіть файл Autoservice.sln. При вході в
програму пропонується ввести логін та поролі для ідентифікації користувача.
Існують три рівні доступу до програми: адмін - розширений інтерфейс, що
дозволяє здійснювати всі закладені функції програми, такі як:

1. Переглянути всі записи бази даних автосервісу


2. Переглянути всіх клієнтів
3. Переглянути список поточних робіт
4. Переглянути список можливих робіт
5. Переглянути наявність деталей на складі
6. Додати клієнта
7. Ввести виконані роботи
8. Змінити дані клієнта
9. Змінити вибраний тип роботи
10. Видалення клієнта
11. Видалення роботи
12. Пошук за номером машини
13. Вихід;
Користувач спрощений інтерфейс, що дозволяє здійснювати лише
функції користувача програми, такі як:

1. Переглянути всі записи бази даних автосервісу


2. Переглянути всіх клієнтів
3. Переглянути список поточних робіт
4. Переглянути список можливих робіт
12. Пошук за номером машини
14. Вихід;
При неправильному введенні логіну та паролю програма вимагає
ввести логін і пароль заново, доки не буде введено правильний пароль.
У разі виняткової ситуації оператору буде повідомлено про помилку.
Приклади помилок:
1. «Не було запроваджено прізвище». Виникає, якщо користувач
залишив поле порожнім.
2. «Неправильно! Введіть відповідну дії цифру!». Виникає, якщо
користувач намагається скористатися функцією, якої у меню
немає.
3. "Не вдалося підключитися до сервера". Виникає за відсутності
з'єднання з сервером бази даних.
4. "Введіть правильні дані!". Виникає під час введення некоректних
даних.
ВИСНОВОК

При виконанні курсового проекту пройшли всі етапи розробки


спеціалізованого прикладного програмного забезпечення:
− Формалізація завдання;
− Збір необхідних вихідних даних;
− Розробка та налагодження програмного продукту.
Розроблено програму «Автосервіс», яка дозволяє автоматизувати
роботу користувача та полегшити доступ до інформації та її обробку.
Додаток забезпечує легку та швидку роботу з базою даних.
Розроблений додаток виконує такі операції:
− Висновок вмісту бази даних;
− Додавання записів до бази даних;
− Редагування записів у базі даних;
− Видалення записів з бази даних;
− Пошук записів у базі даних.
При розробці програмного додатку «Автосервіс» мною було глибше
вивчено мову С# та взаємодії з базою даних.
СПИСОК ЛІТЕРАТУРИ

1. Петров Ст Н., Інформаційні системи, Підручник 2 видавництва,


(Серія «Навчальний посібник») вид. ПІТЕР, 2006р., 656 стор.
2.Характеристики програмного забезпечення "LogicStar Avto"
Електронний ресурс - www.logicstars.ru
3.Характеристики програмного забезпечення "Альфа-Авто",
розроблений на платформі "1С:Підприємство 8.0" Електронний ресурс -
www.rarus.ru/products/soft/146
4.Характеристики програмного забезпечення "TurboService"
Електронний ресурс - www.turboservice.ru
5.Адміністрація Microsoft SQL Server 2000. Навчальний курс
MCSA/MCSE, MCDBA.- Москва: Російська Редакція 2010.
6. Сайт SQL і клієнт/серверної технології [Електронний ресурс]. -
Режим доступу: http://www.sql.ru/, вільний.
7. Проектування та реалізація БД MS SQL Server 2000. Навчальний
курс MCSA/MCSE, MCDBA.- Москва: Російська Редакція 2010 видання 2-ге,
виправлене.
8. Офіційний сайт LogicStars. http://www.logicstars.ru/
9. Офіційний сайт 1С-Рарус. https://rarus.ru/1c-auto/1c8-alfa-avto-4/
10. Павловская Т.А. C#. Программирование на языке высокого
уровня. Учебник для вузов. – СПб.: Питер, 2007. – 432 с.
11. Фролов А.В., Фролов Г.В. Язык C#. Самоучитель. – М.:
ДИАЛОГ-МИФИ, 2003. – 560 с.
12. Шилдт Г.Полный справочник по C#. – М.: Издательский дом
«Вильямс»,
Додаток А

Лістинг програми
CarForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autoservice.Classes.Drawing;

namespace Autoservice.Forms
{
public partial class CarForm : Form
{
private readonly CarFormDrawingManager carFormDrawingManager;

public CarForm(string name)


{
InitializeComponent();
this.Text = name;
carFormDrawingManager =
CarFormDrawingManager.GetInstance();
carFormDrawingManager.EventReDraw += OnPaint;
carFormDrawingManager.SetCanvas(ctrlCFPanel);
carFormDrawingManager.Draw();

CheckForIllegalCrossThreadCalls = false;
}

protected override void OnPaint(PaintEventArgs e) =>


carFormDrawingManager.Draw();

private void CarForm_FormClosed(object sender,


FormClosedEventArgs e)
{
carFormDrawingManager.EventReDraw -= OnPaint;
}
}
}
namespace Autoservice.Forms
{
partial class CarForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ctrlCFPanel = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// ctrlCFPanel
//
this.ctrlCFPanel.BackColor = System.Drawing.Color.White;
this.ctrlCFPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlCFPanel.Location = new System.Drawing.Point(0, 0);
this.ctrlCFPanel.Name = "ctrlCFPanel";
this.ctrlCFPanel.Size = new System.Drawing.Size(540, 390);
this.ctrlCFPanel.TabIndex = 0;
//
// CarForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(540, 390);
this.Controls.Add(this.ctrlCFPanel);
this.Name = "CarForm";
this.Text = "Автомобиль";
this.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(this.CarForm_FormClosed);
this.ResumeLayout(false);

#endregion

private System.Windows.Forms.Panel ctrlCFPanel;


}
}

ClientsForm.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autoservice.Classes;

namespace Autoservice.Forms
{
public partial class ClientsForm : Form
{
private static object locker = new object();
public ClientsForm()
{
InitializeComponent();
Manager.GetInstance().AddHandler(UpdateDgv);
CheckForIllegalCrossThreadCalls = false;
}
public void UpdateDgv(List<string> clients)
{
lock (locker)
{
if (ctrlDGVClients == null)
return;
ctrlDGVClients.RowCount = 0;
ctrlDGVClients.ColumnCount = 1;
ctrlDGVClients.RowCount = clients.Count;
ctrlDGVClients.Columns[0].Width = ctrlDGVClients.Width;
for (int i = 0; i < clients.Count; i++)
{
if (ctrlDGVClients.RowCount == clients.Count)
ctrlDGVClients.Rows[i].Cells[0].Value = clients[i];
}
}
}

private void ClientsForm_FormClosed(object sender,


FormClosedEventArgs e)
{
Manager.GetInstance().RemoveHandler(UpdateDgv);
Dispose();
}

private void ctrlDGVClients_CellClick(object sender,


DataGridViewCellEventArgs e)
{
string name =
ctrlDGVClients.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

Manager.GetInstance().ShowClient(name);
//Close();
}
}
}
namespace Autoservice.Forms
{
partial class ClientsForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ctrlDGVClients = new
System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)
(this.ctrlDGVClients)).BeginInit();
this.SuspendLayout();
//
// ctrlDGVClients
//
this.ctrlDGVClients.AllowUserToAddRows = false;
this.ctrlDGVClients.AllowUserToDeleteRows = false;
this.ctrlDGVClients.AllowUserToResizeColumns = false;
this.ctrlDGVClients.AllowUserToResizeRows = false;
this.ctrlDGVClients.ColumnHeadersHeightSizeMode =
System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
;
this.ctrlDGVClients.ColumnHeadersVisible = false;
this.ctrlDGVClients.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlDGVClients.Location = new System.Drawing.Point(0, 0);
this.ctrlDGVClients.MultiSelect = false;
this.ctrlDGVClients.Name = "ctrlDGVClients";
this.ctrlDGVClients.ReadOnly = true;
this.ctrlDGVClients.RowHeadersVisible = false;
this.ctrlDGVClients.Size = new System.Drawing.Size(387, 231);
this.ctrlDGVClients.TabIndex = 0;
this.ctrlDGVClients.CellClick += new
System.Windows.Forms.DataGridViewCellEventHandler(this.ctrlDGVClients_Ce
llClick);
//
// ClientsForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(387, 231);
this.Controls.Add(this.ctrlDGVClients);
this.FormBorderStyle =
System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "ClientsForm";
this.Text = "Клиенты";
this.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(this.ClientsForm_FormClosed)
;
((System.ComponentModel.ISupportInitialize)
(this.ctrlDGVClients)).EndInit();
this.ResumeLayout(false);

#endregion

private System.Windows.Forms.DataGridView ctrlDGVClients;


}
}

MainForm.cs

using System;
using System.Windows.Forms;
using Autoservice.Classes;
using Autoservice.Classes.Drawing;

namespace Autoservice.Forms
{
public partial class MainForm : Form
{
private readonly Manager manager;
private readonly MainFormDrawingManager drawManager;
public MainForm()
{
InitializeComponent();
drawManager = MainFormDrawingManager.GetInstance();
manager = Manager.GetInstance();
drawManager.SetCanvas(ctrlPanel);
drawManager.EventReDraw += OnPaint;
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
}

private void ctrlTSMIHelp_Click(object sender, EventArgs e)


{
MessageBox.Show(this, "Основные сущности: автомобили, виды
поломок, предоставляемые услуги и цены, клиенты.\n" +
"Смоделировать процесс обслуживания автомобилей
города в нескольких автосервисах, выполняющих различные типы работ.",
"13: Автосервис");
}

/// <inheritdoc />


/// <summary>
/// Переопределяет метода перерисовки для инвалидации.
/// </summary>
/// <param name="e">Объект отрисовки.</param>
protected override void OnPaint(PaintEventArgs e) =>
drawManager.Draw();

private void ctrlTSMIAddCLient_Click(object sender, EventArgs e)


{
if (ctrlTSMIClientBox.TextBox != null)
ctrlTSMIClientBox.TextBox.Text = $"Клиентов:
{manager.MakeClient()}";
}

private void ctrlPanel_MouseClick(object sender, MouseEventArgs e)


{
switch (e.Button)
{
case MouseButtons.Left:
manager.InvokeMaintenanceForm(drawManager.FindMaintena
nceByPointer(e.X, e.Y));
break;
case MouseButtons.Right when
drawManager.TryAddService(e.X, e.Y):
drawManager.AddDrawable(manager.AddService(), e.X, e.Y);
drawManager.Draw();
break;
}
}

private void MainForm_FormClosed(object sender,


FormClosedEventArgs e)
{
manager.Stop();
}

private void ctrlTSMIStart_Click(object sender, EventArgs e)


{
manager.ThreadWork();
if (ctrlTSMIStart.Text == "Старт" || ctrlTSMIStart.Text ==
"Продолжить")
ctrlTSMIStart.Text = "Пауза";
else
ctrlTSMIStart.Text = "Продолжить";
}

private void ctrlTSMIClientBox_Click(object sender, EventArgs e)


{
manager.ShowClients();
}
}
}
namespace Autoservice.Forms
{
partial class MainForm
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс
должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Код, автоматически созданный конструктором форм


Windows

/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources =
new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.ctrlTS = new System.Windows.Forms.ToolStrip();
this.ctrlTSMI_Menu = new
System.Windows.Forms.ToolStripDropDownButton();
this.ctrlTSMIHelp = new
System.Windows.Forms.ToolStripMenuItem();
this.ctrlPanel = new System.Windows.Forms.Panel();
this.ctrlTSMIStart = new
System.Windows.Forms.ToolStripMenuItem();
this.ctrlTSMIClientBox = new
System.Windows.Forms.ToolStripTextBox();
this.ctrlTSMIAddClient = new
System.Windows.Forms.ToolStripMenuItem();
this.ctrlTS.SuspendLayout();
this.SuspendLayout();
//
// ctrlTS
//
this.ctrlTS.Items.AddRange(new
System.Windows.Forms.ToolStripItem[] {
this.ctrlTSMI_Menu,
this.ctrlTSMIClientBox});
this.ctrlTS.Location = new System.Drawing.Point(0, 0);
this.ctrlTS.Name = "ctrlTS";
this.ctrlTS.Size = new System.Drawing.Size(800, 25);
this.ctrlTS.TabIndex = 0;
this.ctrlTS.Text = "toolStrip1";
//
// ctrlTSMI_Menu
//
this.ctrlTSMI_Menu.DisplayStyle =
System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.ctrlTSMI_Menu.DropDownItems.AddRange(new
System.Windows.Forms.ToolStripItem[] {
this.ctrlTSMIHelp,
this.ctrlTSMIAddClient,
this.ctrlTSMIStart});
this.ctrlTSMI_Menu.Image = ((System.Drawing.Image)
(resources.GetObject("ctrlTSMI_Menu.Image")));
this.ctrlTSMI_Menu.ImageTransparentColor =
System.Drawing.Color.Magenta;
this.ctrlTSMI_Menu.Name = "ctrlTSMI_Menu";
this.ctrlTSMI_Menu.Size = new System.Drawing.Size(54, 22);
this.ctrlTSMI_Menu.Text = "Меню";
//
// ctrlTSMIHelp
//
this.ctrlTSMIHelp.Name = "ctrlTSMIHelp";
this.ctrlTSMIHelp.Size = new System.Drawing.Size(180, 22);
this.ctrlTSMIHelp.Text = "Помощь";
this.ctrlTSMIHelp.Click += new
System.EventHandler(this.ctrlTSMIHelp_Click);
//
// ctrlPanel
//
this.ctrlPanel.BackColor =
System.Drawing.SystemColors.ControlLightLight;
this.ctrlPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ctrlPanel.Location = new System.Drawing.Point(0, 25);
this.ctrlPanel.Name = "ctrlPanel";
this.ctrlPanel.Size = new System.Drawing.Size(800, 425);
this.ctrlPanel.TabIndex = 1;
this.ctrlPanel.MouseClick += new
System.Windows.Forms.MouseEventHandler(this.ctrlPanel_MouseClick);
//
// ctrlTSMIStart
//
this.ctrlTSMIStart.Name = "ctrlTSMIStart";
this.ctrlTSMIStart.Size = new System.Drawing.Size(180, 22);
this.ctrlTSMIStart.Text = "Старт";
this.ctrlTSMIStart.Click += new
System.EventHandler(this.ctrlTSMIStart_Click);
//
// ctrlTSMIClientBox
//
this.ctrlTSMIClientBox.Name = "ctrlTSMIClientBox";
this.ctrlTSMIClientBox.ReadOnly = true;
this.ctrlTSMIClientBox.Size = new System.Drawing.Size(100, 25);
this.ctrlTSMIClientBox.Click += new
System.EventHandler(this.ctrlTSMIClientBox_Click);
//
// ctrlTSMIAddClient
//
this.ctrlTSMIAddClient.Name = "ctrlTSMIAddClient";
this.ctrlTSMIAddClient.Size = new System.Drawing.Size(180, 22);
this.ctrlTSMIAddClient.Text = "Добавить клиента";
this.ctrlTSMIAddClient.Click += new
System.EventHandler(this.ctrlTSMIAddCLient_Click);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.ctrlPanel);
this.Controls.Add(this.ctrlTS);
this.Name = "MainForm";
this.Text = "Автосервис";
this.FormClosed += new
System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed);
this.ctrlTS.ResumeLayout(false);
this.ctrlTS.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();

#endregion

private System.Windows.Forms.ToolStrip ctrlTS;


private System.Windows.Forms.ToolStripDropDownButton
ctrlTSMI_Menu;
private System.Windows.Forms.ToolStripMenuItem ctrlTSMIHelp;
private System.Windows.Forms.Panel ctrlPanel;
private System.Windows.Forms.ToolStripMenuItem ctrlTSMIStart;
private System.Windows.Forms.ToolStripTextBox ctrlTSMIClientBox;
private System.Windows.Forms.ToolStripMenuItem
ctrlTSMIAddClient;
}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Autoservice.Forms
{
public partial class ServiceCreateForm : Form
{
public string ServiceName { get; set; }

public int Workers { get; set; }

public int Offers { get; set; }

public ServiceCreateForm()
{
InitializeComponent();
ServiceName = null;
}

private void ctrlBtnClose_Click(object sender, EventArgs e)


{
Close();
}

private void ctrlBtnOK_Click(object sender, EventArgs e)


{
ServiceName = ctrlTBName.Text;
Close();
}

private void ctrlNUDWorkers_ValueChanged(object sender, EventArgs


e)
{
Workers = (int) ctrlNUDWorkers.Value;
}

private void ctrlNUDOffers_ValueChanged(object sender, EventArgs


e)
{
Offers = (int)ctrlNUDOffers.Value;
}
}
}
namespace Autoservice.Forms
{
partial class ServiceCreateForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ctrlTBName = new System.Windows.Forms.TextBox();
this.ctrlLblMiscName = new System.Windows.Forms.Label();
this.ctrlLblMiscWorkers = new System.Windows.Forms.Label();
this.ctrlLblMiscOffers = new System.Windows.Forms.Label();
this.ctrlNUDWorkers = new
System.Windows.Forms.NumericUpDown();
this.ctrlNUDOffers = new
System.Windows.Forms.NumericUpDown();
this.ctrlBtnOK = new System.Windows.Forms.Button();
this.ctrlBtnClose = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)
(this.ctrlNUDWorkers)).BeginInit();
((System.ComponentModel.ISupportInitialize)
(this.ctrlNUDOffers)).BeginInit();
this.SuspendLayout();
//
// ctrlTBName
//
this.ctrlTBName.Location = new System.Drawing.Point(87, 6);
this.ctrlTBName.Name = "ctrlTBName";
this.ctrlTBName.Size = new System.Drawing.Size(148, 20);
this.ctrlTBName.TabIndex = 0;
//
// ctrlLblMiscName
//
this.ctrlLblMiscName.AutoSize = true;
this.ctrlLblMiscName.Location = new System.Drawing.Point(12, 9);
this.ctrlLblMiscName.Name = "ctrlLblMiscName";
this.ctrlLblMiscName.Size = new System.Drawing.Size(60, 13);
this.ctrlLblMiscName.TabIndex = 1;
this.ctrlLblMiscName.Text = "Название:";
//
// ctrlLblMiscWorkers
//
this.ctrlLblMiscWorkers.AutoSize = true;
this.ctrlLblMiscWorkers.Location = new System.Drawing.Point(12,
43);
this.ctrlLblMiscWorkers.Name = "ctrlLblMiscWorkers";
this.ctrlLblMiscWorkers.Size = new System.Drawing.Size(64, 13);
this.ctrlLblMiscWorkers.TabIndex = 1;
this.ctrlLblMiscWorkers.Text = "Работники:";
//
// ctrlLblMiscOffers
//
this.ctrlLblMiscOffers.AutoSize = true;
this.ctrlLblMiscOffers.Location = new System.Drawing.Point(12,
77);
this.ctrlLblMiscOffers.Name = "ctrlLblMiscOffers";
this.ctrlLblMiscOffers.Size = new System.Drawing.Size(46, 13);
this.ctrlLblMiscOffers.TabIndex = 1;
this.ctrlLblMiscOffers.Text = "Услуги:";
//
// ctrlNUDWorkers
//
this.ctrlNUDWorkers.Location = new System.Drawing.Point(87,
41);
this.ctrlNUDWorkers.Name = "ctrlNUDWorkers";
this.ctrlNUDWorkers.Size = new System.Drawing.Size(148, 20);
this.ctrlNUDWorkers.TabIndex = 2;
this.ctrlNUDWorkers.ValueChanged += new
System.EventHandler(this.ctrlNUDWorkers_ValueChanged);
//
// ctrlNUDOffers
//
this.ctrlNUDOffers.Location = new System.Drawing.Point(87, 75);
this.ctrlNUDOffers.Name = "ctrlNUDOffers";
this.ctrlNUDOffers.Size = new System.Drawing.Size(148, 20);
this.ctrlNUDOffers.TabIndex = 2;
this.ctrlNUDOffers.ValueChanged += new
System.EventHandler(this.ctrlNUDOffers_ValueChanged);
//
// ctrlBtnOK
//
this.ctrlBtnOK.DialogResult =
System.Windows.Forms.DialogResult.OK;
this.ctrlBtnOK.Location = new System.Drawing.Point(160, 137);
this.ctrlBtnOK.Name = "ctrlBtnOK";
this.ctrlBtnOK.Size = new System.Drawing.Size(75, 23);
this.ctrlBtnOK.TabIndex = 3;
this.ctrlBtnOK.Text = "ОК";
this.ctrlBtnOK.UseVisualStyleBackColor = true;
this.ctrlBtnOK.Click += new
System.EventHandler(this.ctrlBtnOK_Click);
//
// ctrlBtnClose
//
this.ctrlBtnClose.DialogResult =
System.Windows.Forms.DialogResult.Cancel;
this.ctrlBtnClose.Location = new System.Drawing.Point(15, 137);
this.ctrlBtnClose.Name = "ctrlBtnClose";
this.ctrlBtnClose.Size = new System.Drawing.Size(75, 23);
this.ctrlBtnClose.TabIndex = 3;
this.ctrlBtnClose.Text = "Отмена";
this.ctrlBtnClose.UseVisualStyleBackColor = true;
this.ctrlBtnClose.Click += new
System.EventHandler(this.ctrlBtnClose_Click);
//
// ServiceCreateForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(247, 172);
this.Controls.Add(this.ctrlBtnClose);
this.Controls.Add(this.ctrlBtnOK);
this.Controls.Add(this.ctrlNUDOffers);
this.Controls.Add(this.ctrlNUDWorkers);
this.Controls.Add(this.ctrlLblMiscOffers);
this.Controls.Add(this.ctrlLblMiscWorkers);
this.Controls.Add(this.ctrlLblMiscName);
this.Controls.Add(this.ctrlTBName);
this.FormBorderStyle =
System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ServiceCreateForm";
this.Text = "Создание сервиса";
((System.ComponentModel.ISupportInitialize)
(this.ctrlNUDWorkers)).EndInit();
((System.ComponentModel.ISupportInitialize)
(this.ctrlNUDOffers)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();

#endregion

private System.Windows.Forms.TextBox ctrlTBName;


private System.Windows.Forms.Label ctrlLblMiscName;
private System.Windows.Forms.Label ctrlLblMiscWorkers;
private System.Windows.Forms.Label ctrlLblMiscOffers;
private System.Windows.Forms.NumericUpDown ctrlNUDWorkers;
private System.Windows.Forms.NumericUpDown ctrlNUDOffers;
private System.Windows.Forms.Button ctrlBtnOK;
private System.Windows.Forms.Button ctrlBtnClose;
}
}
ServiceForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Autoservice.Classes;
using Autoservice.Classes.Drawing;
using Autoservice.Classes.Service;

namespace Autoservice.Forms
{
public partial class ServiceForm : Form
{
private MaintenanceServiceWrapper service;

public ServiceForm(MaintenanceServiceWrapper service)


{
InitializeComponent();
this.service = service;
IList<string> maintenances = service.GetMaintenances();
ctrlSFDGV_offers.ColumnCount = 1;
ctrlSFDGV_offers.RowCount = maintenances.Count;
ctrlSFDGV_offers.Columns[0].Width = ctrlSFDGV_offers.Width;

for (int index = 0; index < maintenances.Count; index++)


{
ctrlSFDGV_offers.Rows[index].Cells[0].Value =
maintenances[index];
}

CheckForIllegalCrossThreadCalls = false;
}

private void ctrlBtnClients_Click(object sender, EventArgs e)


{
Manager.GetInstance().ShowClients();
}
}
}
namespace Autoservice.Forms
{
partial class ServiceForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be
disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.ctrlSFDGV_offers = new
System.Windows.Forms.DataGridView();
this.ctrlSFLblOffers = new System.Windows.Forms.Label();
this.ctrlBtnClients = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)
(this.ctrlSFDGV_offers)).BeginInit();
this.SuspendLayout();
//
// ctrlSFDGV_offers
//
this.ctrlSFDGV_offers.AllowUserToAddRows = false;
this.ctrlSFDGV_offers.AllowUserToDeleteRows = false;
this.ctrlSFDGV_offers.AllowUserToResizeRows = false;
this.ctrlSFDGV_offers.ColumnHeadersHeightSizeMode =
System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
;
this.ctrlSFDGV_offers.ColumnHeadersVisible = false;
this.ctrlSFDGV_offers.Location = new System.Drawing.Point(12,
25);
this.ctrlSFDGV_offers.MultiSelect = false;
this.ctrlSFDGV_offers.Name = "ctrlSFDGV_offers";
this.ctrlSFDGV_offers.ReadOnly = true;
this.ctrlSFDGV_offers.RowHeadersVisible = false;
this.ctrlSFDGV_offers.Size = new System.Drawing.Size(345, 150);
this.ctrlSFDGV_offers.TabIndex = 0;
//
// ctrlSFLblOffers
//
this.ctrlSFLblOffers.AutoSize = true;
this.ctrlSFLblOffers.Location = new System.Drawing.Point(9, 9);
this.ctrlSFLblOffers.Name = "ctrlSFLblOffers";
this.ctrlSFLblOffers.Size = new System.Drawing.Size(46, 13);
this.ctrlSFLblOffers.TabIndex = 1;
this.ctrlSFLblOffers.Text = "Услуги:";
//
// ctrlBtnClients
//
this.ctrlBtnClients.Location = new System.Drawing.Point(12, 193);
this.ctrlBtnClients.Name = "ctrlBtnClients";
this.ctrlBtnClients.Size = new System.Drawing.Size(167, 23);
this.ctrlBtnClients.TabIndex = 2;
this.ctrlBtnClients.Text = "Показать всех клиентов";
this.ctrlBtnClients.UseVisualStyleBackColor = true;
this.ctrlBtnClients.Click += new
System.EventHandler(this.ctrlBtnClients_Click);
//
// ServiceForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode =
System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(381, 228);
this.Controls.Add(this.ctrlBtnClients);
this.Controls.Add(this.ctrlSFLblOffers);
this.Controls.Add(this.ctrlSFDGV_offers);
this.FormBorderStyle =
System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ServiceForm";
this.Text = "Сервис";
((System.ComponentModel.ISupportInitialize)
(this.ctrlSFDGV_offers)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();

#endregion

private System.Windows.Forms.DataGridView ctrlSFDGV_offers;


private System.Windows.Forms.Label ctrlSFLblOffers;
private System.Windows.Forms.Button ctrlBtnClients;
}
}

You might also like