Розробка програмного забезпечення розрахунку прибутку перукарні

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    1,92 Мб
  • Опубликовано:
    2015-01-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка програмного забезпечення розрахунку прибутку перукарні

Міністерство освіти і науки України

Державний вищий навчальний заклад

"Криворізький національний університет"

Кафедра інформатики та прикладного програмного забезпечення









Курсова робота

Розробка програмного забезпечення розрахунку прибутку перукарні


Студента 4 курсу

ФІТ групи ПЗАС-10-3

Будніка Дмитра Васильовича

Керівник курсової роботи

к.е.н., доцент Лисенко В.С.




Кривий Ріг 2013

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

перукарня прибуток програма visual

Дисципліна "Програмування клієнт-серверних додатків"

Тема курсової роботи "Розробка програмного забезпечення розрахунку прибутку перукарні"

Мета роботи: створення програмного забезпечення розрахунку прибутку перукарні; табличний та графічний вигляд запитів та звітів; мова програмування Visual С++, Visual С#; СУБД ACCES.

Реферат

Буднік Дмитро Васильович

Розробка програмного забезпечення розрахунку прибутку перукарні

Курсова робота студента 4 курсу спеціальності "Програмна інженерія" з дисципліни "Програмування клієнт-серверних додатків". "Криворізький національний університет". Кривий Ріг, 2013.

Обсяг роботи 30 сторінок, 8 таблиць, 25 рисунків, 19 джерел, 12 додатків.

Предмет дослідження: інформаційна підтримка процесу управління перукарні.

Об’єкт дослідження: перукарня.

Мета роботи: Створення програмного забезпечення розрахунку прибутку перукарні.

Методи дослідження: методи об’єктоно-орієнтованого проектування, методика проектування баз даних, методи дослідження операцій.

Програмне забезпечення: мова програмування Visual С++, Visual С#, Microsoft Access.

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

Висновки: розроблено працездатне програмне забезпечення, яке автоматизує вибір користувачей, дає можливість отримати навички роботи з БД, розробки задач, наближених до реальних умов.

Ключові слова: перукарня, СУБД, програмне забезпечення, Visual С++, Visual С#.

Зміст

Вступ

Розділ І. Постановка задачі

.1 Характеристика задачі

.2 Вхідна інформація

.3 Вихідна інформація

Розділ ІІ. Розробка алгоритму розвязання задачі

.1 Розробка алгоритму розв’язання задачі на мові програмування Visual С++

.2 Розробка алгоритму розв’язання задачі на мові програмування Visual С#

Розділ ІІІ. Організація інформаційного забезпечення

.1 Загальна характеристика інформаційного забезпечення

.2 Структура баз даних та інформаційних масивів

Розділ IV. Розробка програмного забезпечення задачі

.1 Опис головного модулю програми (головного вікна) на мові Visual С++

.2 Опис головного модулю програми (головного вікна) на мові Visual С#

Висновки

Список використаних джерел

Додатки

Вступ

Інформація - явище незрівнянно більш древнє, ніж сама людина. Уже природа у процесі своєї еволюції передавала закодовану інформацію в рослинах і живих організмах.

З перших своїх кроків люди шукають і знаходять нові засоби передачі, збереження та обробки інформації.

Однак ніколи раніше людство не накопичувало інформацію й знання настільки стрімкими темпами.

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

На сучасному етапі можна без особливих труднощів навести приклади використання інформаційних технологій у всі галузях: від освіти і до менеджменту.

Сьогодні успіх буде мати та фірма, той заклад, який володіє найсучаснішими комп’ютерними технологіями. Значного прогресу можна досягти і в галузі освіти з впровадженням відповідних інформаційних комп’ютерних технологій, які зможуть зробити процес здобуття освіти більш гнучким, індивідуалізованим і одночасно нададуть змогу студентам використовувати глобальні ресурси для навчання, спілкуватись та обмінюватись досвідом із студентами інших міст, країн тощо.

Насправді, перспективи розвитку інформаційних комп’ютерних технологій безмежні.

Мета курсової роботи - створення програмного забезпечення розрахунку прибутку перукарні.

Головні завдання роботи: автоматизація розрахунку прибутку перукарні; вивід в окремій таблиці прибуток від окремого перукаря; вироблення основних вимог до програмного забезпечення в цій галузі. Як об’єкти досліджень в роботі виступають перукарі.

Предметом дослідження даної роботи є інформаційна підтримка перукарні.

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

Програмна система, що розроблятиметься, буде призначена для полегшення та покращення обліку.

Програмний продукт буде розроблено за допомогою інструментальних засобів розробки мови програмування Visual С++ та Visual C#.

Розділ І. Постановка задачі

.1 Характеристика задачі

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

На меті є програмний комплекс, який би мав такі характерні риси:

а) простий та зрозумілий інтерфейс;

б) робота з базою даних;

в) вивід діаграми;

г) пошук даних.

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

.2 Вхідна інформація

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

Для найбільшої ефективності, необхідна вся важлива первісна інформація.

Для проектування ефективної роботи перукарні вхідними даними виступають показники таких таблиць як "Услуги"(послуги)- таблиця 1.1, "Сотрудники"(співробітники)- таблиця 1.2, "Заказы"(замовлення) - таблиця 1.3.

В них зібрана вся довідкова інформація про працівників,пропозиції та замовлення.

Перелік і опис вхідних повідомлень

Таблиця 1.1

Таблиця "Услуги"(Послуги)

№ п/п

Назва Вхідного повідомлення

Ідентифікатор

Форма представлення

Частота Оновлення

Джерело

1

Код послуги

IDy

Таблична

При реєстрації нової послуги

Перукар

2

Назва послуги

Tip

Таблична

При реєстрації нової послуги

Перукар

3

Вартість послуги

Stoimost

Таблична

При реєстрації нової послуги

Перукар


Таблиця 1.2

Таблиця "Сотрудники" (Співробітники)

№ п/п

Назва Вхідного повідомлення

Ідентифікатор

Форма представлення

Частота оновлення

Джерело

1

Код співробітника

IDsotr

Таблична

При реєстрації нового співробітника

Перукар

2

Прізвище співробітника

Fam

Таблична

При реєстрації нового співробітника

Перукар

3

Ім’я співробітника

Name

Таблична

При реєстрації нового співробітника

Перукар

4

Дата народження

Datarog

Таблична

При реєстрації нового співробітника

Перукар

5

Мобільний номер

Mobnum

Таблична

При реєстрації нового співробітника

Перукар


Таблиця 1.3

Таблиця "Заказы"(замовлення)

№ п/п

Назва Вхідного повідомлення

Ідентифікатор

Форма представлення

Частота оновлення

Джерело

1

Код замовлення

IDzak

Таблична

При реєстрації нового замовлення

Перукар

2

Дата замовлення

Datazak

Таблична

При реєстрації нового замовлення

Перукар

3

Код співробітника

IDsotr

Таблична

При реєстрації нового замовлення

Перукар

4

Код послуги

IDy

Таблична

При реєстрації нового замовлення

Перукар



1.3 Вихідна інформація

Вихідна інформація представляє собою результати роботи з базою даних.

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

Характеристика вихідних повідомлень наведена у таблиці 1.4.

Таблиця 1.4

Перелік і опис вихідних повідомлень

№ п/п

Назва вхідного повідомлення

Ідентифікатор

Форма представлення

Термін і частота надходження

Джерело

1

Прибуток від послуг

SUM

Таблична

Генерується після виконання послуги

Перукар

2

Прибуток співробітників

SUM

Таблична

Генерується після виконання послуги

Перукар



Розділ ІІ. Розробка алгоритму розвязання задачі

.1 Розробка алгоритму розв’язання задачі на мові програмування Visual С++

Робота з програмою здійснюється на основі управління через об’єкти типу ListBox та Button, зображених на рис. 2.1 та рис. 2.2.

Рис. 2.1. Управління через об’єкт типу ListBox

Рис. 2.2. Управління через об’єкти типу Button

Редагування, додавання та видалення інформації можливе лише при виконанні SQL-запиту (дивись рис. 2.3). Треба спочатку вписати SQL-запит у текстове поле, потім натиснути відповідну кнопку.

Рис. 2.3. Редагування, додавання та видалення інформації з бази даних

Як видно з рисунку 2.3. у програмі є можливість пошуку та сортування даних обраної таблиці.

Алгоритм, за яким виконується програма, наведено на рис. 2.4.

Рис. 2.4

Опис алгоритму:

. Початок - це відкриття нашої програми.

. Створення головного вікна програми - малюється головне вікно програми.

-4. Підключення бази даних - підключається база даних, котру обере користувач.

-6. Якщо успішне підключення то ми продовжуємо роботу з програмою, в протилежному випадку є можливість обрати іншу базу даних.

. З’являється Форма-1, в котрій є можливість роботи за базою даних: відображення таблиць, запитів, створення запитів на видалення, додавання,редагування даних.

. При на тисненні кнопки "График", в нас з’явиться Форама-2.

. Форма 2 - в цій формі відображається діаграма.

. Діаграма з Форми-2 відображається на екрані.

. Кнопка завершення роботи з програмою.

. Кінець роботи з програмою.

.2 Розробка алгоритму розв’язання задачі на мові програмування Visual С#

Робота з програмою здійснюється на основі управління через об’єкти типу ListBox та Button, зображених на рис. 2.5 та рис. 2.6.

Рис. 2.5. Управління через об’єкт типу ListBox

Рис. 2.6. Управління через об’єкти типу Button

Редагування, додавання та видалення інформації можливе е при виконанні SQL-запиту (дивись рис. 2.7) або через об’єкт типу bindingNavigator(дивись рис. 2.8). Треба спочатку вписати SQL-запит у текстове поле, потім натиснути кнопку "Выполнить".

Рис. 2.7. Редагування, додавання та видалення інформації з бази даних

Рис. 2.8. Робота з даними бази даних за допомогою об’єкту bindingNavigator

Як видно з рисунку 2.8, дані можна додавати , видаляти та редагувати.

Щоб зберегти зміни треба клацнути на зображення дискети.

Нижче приведений програмний код збереження даних в базу даних:

.Open();(MessageBox.Show("Вы хотите сохранить изменения в базе данных?",

"Сохранение", MessageBoxButtons.YesNo,.Question) == DialogResult.Yes) dbAdapter1.Update(dataTable);.Close();

При натисканні на , в нас з’являється повідомлення, при натисненні "Да" - зміни зберігаються, але якщо натиснути на "Нет" зміни не будуть збережені в базі даних, й вона прийме вид, котрий був при початку роботи з базою.

Алгоритм, за яким виконується програма, наведено на рис. 2.9.

Рис. 2.9

Опис алгоритму:

. Початок - це відкриття нашої програми.

. Створення головного вікна програми - малюється головне вікно програми.

-4. Підключення бази даних - підключається база даних за замовчуванням.

-6. Якщо успішне підключення то ми продовжуємо роботу з програмою, в протилежному випадку є можливість обрати іншу базу даних.

. З’являється Форма-1, в котрій є можливість роботи за базою даних: відображення таблиць, запитів, створення запитів на видалення, додавання,редагування даних .

. При на тисненні кнопки "График", в нас з’явиться Форама-2.

. Форма 2 - в цій формі відображається діаграма.

. Діаграма з Форми-2 відображається на екрані.

. Кнопка завершення роботи з програмою.

. Кінець роботи з програмою.

Розділ ІІІ. Організація інформаційного забезпеченн

.1 Загальна характеристика інформаційного забезпечення

Вся необхідна інформація в базі даних розміщена у вигляді таблиці 3.1. База даних створена у форматі Microsoft Access (.mdb)

Таблиця 3.1

Перелік і опис таблиць бази даних

№ п/п

Назва таблиці

Ідентифікатор

Опис

1

Замовлення

Заказы

Інформація про замовлення послуг: номер,дата,співробітник та послуга.

2

Співробітники

Сотрудники

Інформація про робітників: код, прізвище, ім’я, дата народження,номер телефону.

3

Послуги

Услуги

Інформація про види послуг: код , назва, вартість.


Для контролю введення інформації використовується "унікальність полів", тобто в таблиці, наприклад, не може бути однакового коду робітника. Також таблиці реляційно зв’язані між собою.

.2 Структура баз даних та інформаційних масивів

База даних, використана для роботи програми, складається з трьох таблиць: Замовлення,Робітники, та Послуги.

Таблиця "Замовлення" має ідентифікатор "Заказы". Її структура наведена у таблиці 3.2.

Таблиця "Послуги" має ідентифікатор "Услуги". Її структура наведена у таблиці 3.3.

Таблиця "Робітники" має ідентифікатор "Сотрудники". Її структура наведена у таблиці 3.4.

Таблиця 3.2

Опис структури таблиці "Замовлення"

Найменування

Поле

Тип поля

Довжина

Кількість знаків після десятинної точки

Первинний ключ

Умова на значення

Обов'язкове поле

Індексне поле

1

2

3

4

5

6

7

8

9

Номер

IDzak

Лічильник



+

-

+

+

Дата

Datazak

Дата/Час



-

-

+

-

Код Робітника

IDsotr

Числове


0

-

-

+

-

Код Послуги

IDy

Числове


0

-

-

+

-


Таблиця 3.3

Опис структури таблиці "Послуги"

Найменування

Поле

Тип поля

Довжина

Кількість знаків після десятинної точки

Первинний ключ

Умова на значення

Обов'язкове поле

Індексне поле

1

2

3

4

5

6

7

8

9

IDy

Лічильник



+

-

+

+

Тип послуги

Tip

Текстове

50


-

-

+

+

Вартість

Stoimost

Грошове



-

-

+

-


Таблиця 3.4

Опис структури таблиці "Робітники"

Найменування

Поле

Тип поля

Довжина

Кількість знаків після десятинної точки

Первинний ключ

Умова на значення

Обов'язкове поле

Індексне поле

1

2

3

4

5

6

7

8

9

Код робітника

IDsotr

Лічильник



+

-

+

+

Прізвище

Fam

Текстове

50


-

-

+

+

Ім’я

Name

Текстове

50


-

-

+

-

Дата народження

Datarog

Дата/Час



-

-

+

-

Номер телефону

Mobnum

Текстове

20


-

-

+

-


Таблиці бази даних зв’язані між собою (рис 3.2).

Рис. 3.2.Реляційний зв'язок таблиць БД.

Розділ IV. Розробка програмного забезпечення задачі

.1 Опис головного модулю програми (головного вікна) на мові Visual С++

Рис 4.1. Головне вікно програми

Головне вікно програми - відправний пункт для проведення будь-яких операцій. Для вибору необхідних дій слід використовувати кнопки на цьому вікні.

При натисненні кнопки "Выбор БД" запускається функція OnOpenDb(), яка відкриває діалог, в котрому обирається база даних. Після того, як відкривається База Даних, стають активні елементи для роботи з базою даних (див. рис. 4.2):)     "Сортировка";)   "Запрос на выполнение";)     "Запрос на выборку";) "Поиск";)   "Доход от услуг";)       "Доход по дням";)       "Доход от сотрудников по дням";)         "Общий доход от сотрудников".

Рис. 4.2. DataGrid з даними після відкриття БД.

Як видно за малюнку що вище, в нас є можливість відсортувати дані по обраному стовбцю. Для цього необхідно ввести в текстове поле стовпця, по якому необхідно відсортувати дані та нажати на СheckBox.

При виконані заитів на виконання та вибірку діє перевірка. Наприклад якщо натиснути на запит вивконаня в нас діє такая перевірка:

(str.Mid(0,3).Compare("SEL")==0)

{MessageBox("Команда SELECT недопустима для этой кнопки");return;}(str.Mid(0,3).Compare("DEL")==0)

{ str1 = "DELETE FROM <таблица> [ where<условие> ]";= 1; }(str.Mid(0,3).Compare("UPD")==0)

{= "UPDATE <таблица> SET <поле>=<выражение>, [<поле>=<выражение>,]... [where<óñëîâèå>]";=2;

}(str.Mid(0,3).Compare("INS")==0)

{ str1 = "INSERT INTO <таблица> (<список имен полей>) VALUES (<список значений>)";=3;}(str.Mid(0,3).Compare("CRE")==0)

{ str1 = "CREATE TABLE <таблица> (<имя поля1> <тип>, < имя поля 2> < тип >... )";=4;

}(str.Mid(0,3).Compare("DRO")==0)

{str1 = "DROP TABLE <Таблица>";=5; }

Якщо ми ввели в поле запит не на виконання то нам висвітиться про не відповідність запиту (див. рис. 4.3.).

Рис. 4.3. Перевірка в запиті на виконання

Якщо в нас буде введена не вірна структура запиту, тоді з’явиться строка з синтаксисом запиту (див. рис. 4.4.).

Рис. 4.4. Підсказка синтаксису запиту

Як видно з малюнку вище в текстовому полі нам висвітився синтаксис запроса на додавання запису до БД, аналогічні синтаксиси будуть з’являтися якщо ми введемо не вірно запит на: видалення, редагування даних. Це дуже зручно адже не завжди пам’ятаєш синтаксис кожної операції.

Для того щоб підрахувати : прибуток від послуг, прибуток по дням, прибуток співробітників по дням та загальний прибуток співробітників, необхідно клацнути на відповідну кнопку в панелі "Робота с БД".

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

Рис. 4.5. Пошук даних в таблиці

При перегляді загального прибутку від співробітників в нас з’являється ще одна кнопка "График" (дивись рис. 4.6.).

Рис. 4.6. DataGrid з даними при перегляді загального прибутку.

При натисканні на кнопку "График", в нас з’являється нове вікно, в якому відображається діаграма по даним загального прибутку від співробітників (дивись рис. 4.7.)

Рис. 4.7. Графік по загальному прибутку від співробітників

Будування графіку виконується за допомогою наступного коду:

sum=0;( i=0;i<Doc->n;i++)sum+=Doc->mas[i];(i=0;i<Doc->n;i++)kof[i]=(100*Doc->mas[i])/sum;(i=0;i<Doc->n;i++)otr[i]=(360*kof[i])/100;data;(time(0));*quadObj;= gluNewQuadric();(quadObj, GLU_FILL);=90;r,g,b;(i=0;i<Doc->n;i++)

{r=colorArray[i];=(colorArray[i])>>8;=(colorArray[i])>>16;ub(r,g,b);(quadObj, 0, 0.5, 15, 1,data,otr[i]);+=otr[i];}

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

.2 Опис головного модулю програми (головного вікна) на мові Visual С#

При старті програми в нас з’являється головне вікно програми (див. рис. 4.8).

Рис. 4.8. Головне вікно програми

Головне вікно одразу заповнюється даними котрі знаходяться в базі даних. Для того щоб переключатись між таблицями, необхідно клікнути на необхідну таблицю в об’єкті ListBox "Таблицы", й записи цієї таблиці відобразяться в об’єкті DataGrid.

Також в є можливість підрахунку різних видів прибутку:)        від послуг;)         по дням;)         співробітників по дням;)       загальний прибуток співробітників.

Підрахунок прибутку від послуг здійснюється за допомогою SQL-запиту до бази даних та відображається на екрані (див. рис. 4.9). При натисненні на кнопку "Доход от услуг" викликається функція запиту до бази даних zapros(string str), в котру ми передаємо строку з запитом до бази даних.

Код підрахунку прибутку від послуг виглядає наступним чином:

("SELECT Услуги.Tip, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Услуги.Tip ORDER BY Услуги.Tip, Sum(Услуги.Stoimost)");

Рис. 4.9. Відображення прибутку від послуг

При натисканні на кнопку "Общий доход по сотрудникам" (див. рис. 4.10.) в нас виконуються майже ті самі дії, що і при натисканні кнопки "Доход от услуг".

Рис. 4.10. Відображення загального прибутку по перукарям

Змінюється лише запит до бази даних, котрий виглядає наступним чином:

("SELECT Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Услуги INNER JOIN (Сотрудники INNER JOIN Заказы ON Сотрудники.IDsotr = Заказы.IDsotr) ON Услуги.IDy = Заказы.IDy GROUP BY Сотрудники.Fam ORDER BY Sum(Услуги.Stoimost) DESC");

В цьому запиті ми з’єднуємо таблиці бази даних, та отримуємо виручку від перукарів за весь період.

Для того щоб отримати прибуток від перукарів по дням, необхідно клацнути на кнопку "Доход сотрудников по дням" (див. рис. 4.11.).

Рис. 4.11. Прибуток від перукарів по дням

Запит підрахунку прибутку від перукарів по дням виглядає так:

("SELECT Заказы.Datazak, Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak, Сотрудники.Fam ORDER BY Заказы.Datazak, Sum(Услуги.Stoimost) DESC");

Завдяки цьому запиту ми отримуємо дані про те скільки грошей та в який день кожен перукар заробив.

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

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

Рис. 4.12. Прибуток по дням

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

("SELECT Заказы.Datazak, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak ORDER BY Заказы.Datazak");

В цьому запиті ми об’єднуємо таблиці "Сотрудники", "Услуги" та "Заказі", та групую записи по полю дати, також здійснюється сортування даних від меншої до більшої дати.

Після підрахунку прибутку від послуг та загального прибутку від співробітників, є можливість відображення цих даних на діаграмі. Для цього необхідно клікнути на кнопку "График", яка появиться в нашому вікні (див. рис. 4.13.).

При натисканні на кнопку "Графік" виконуються наступний код:

= new string[dataGridView1.RowCount];= new float[dataGridView1.RowCount];= dataGridView1.RowCount+1;(int i = 0; i < dataGridView1.RowCount-1; i++)

{a[i] = dataGridView1[0, i].Value.ToString();[i] = float.Parse(dataGridView1[1, i].Value.ToString());}f2 = new Form2();.temp(a, b, n);.Show();

Завдяки цьому коду ми зчитуємо дані прибутку з нашого DataGridView та записуємо їх у змінні і передаємо у Форму-2 й викликаємо саму форму(див. рис. 4.14.).

Рис. 4.13. Вікно з кнопкою "График"

Рис. 4.14. Вікно з діаграмою по прибутку перукарів за весь час

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

В нас є можливість відобразити кругову діаграму по загальному прибутку від послуг (див. рис. 4.15), для цього необхідно клацнути кнопку "Доход от услуг" на Формі-1.

Рис. 4.15. Вікно з діаграмою по загальному прибутку від послуг

На рисунку , що вище також видно відповідність кольору сектору діаграми , задньому кольору тексту.

Висновки

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

Для реалізації задачі було створено базу даних з трьох таблиць, призначену для зберігання вхідної інформації. Відповідно до розробленої моделі, був визначений алгоритм побудови програми. Для його реалізації було обрано мови програмування Visual С++ та Visual С#. В якості СУБД для роботи зі створеною базою даних було використано Microsoft Access.

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

На основі виконаної роботи можна розвивати та вдосконалювати розроблену програмну систему, задля підвищення її функціональності.

Список використаних джерел

1.      Секунов Н.Ю. Самоучитель Visual C++ 6. - СПб.: БХВ - Санкт-Петербург, 1999. - 960 с.

2.      Абрамян М. Visual C# на примерах. - СПб.: БХВ-петербург, 2008. - 496с.

.        Агуров П. C#. Разработка компонентов в MS Visual Studio 2005/2008. - СПб.: БХВ-петербург, 2008. - 480с

.        Павловская Т.А. C#. Программирование на языке высокого уровня. Учебник для вузов. - СПб.: Питер, 2007. - 432 с.

.        Шкарина Л.Ш. Язык SQL: учебный курс. - СПб.: Питер, 2001. - 592 с.: ил.

.        Страуструп Б. Язык программирования C++. - СПб.: БИНОМ, 1999. - 991 с.

7.   Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб.: Питер, 2003. - 461 с.

8.      Джон Вейскас. Эфективная работа с Access 7.0. - Санкт-Петербург: Питер, 1997.-830с.

9.      Уэйт М. Язык С. Руководство для начинающих. / М. Уэйт, С. Прага, Д. Мартин. - М.: Мир, 1995. - 521 с.: ил.

.        Фридман А.Л. Язык программирования С++ / А.Л.Фридман. - М.: Бином, 2006. - 523 с.: ил.

.        OpenGL. Суперкнига, 3-е издание.: Пер. с англ - М.: Издательский домм "Вильямс", 2006. - 1040с. : ил. - Парал. тит. англ.

.        Программирование для Microsoft Windows на С#/ Петцольд Ч. - М.: Издательско-торговый дом "Русская Редакция", 2002 - В 2-х т. Т. 1. - 576 с.

.        Холзнер С. Visual C++ 6: учебный курс - СПб: ЗАО "Издательство "Питер"", 1999. - 576 с.

.        Грегори К. Использование Visual C++ 6. Учебное пособие - СПб: К.: Издательский дом "Вильямс", 1999. - 864 с.

.        Олафсен Ю., Скрайбнер К., Уайт К. MFC и Visual C++ 6. Энциклопедия программиста - СПб.: ООО "ДиаСофтЮП", 2003. - 992 с.

.        Секунов Н.Ю. Самоучитель Visual C++ 6. - СПб.: БХВ - Санкт-Петербург, 1999. - 960 с.

.        Зеленский А.С., Лысенко В.С., Баран С.В. Методические указания к выполнению лабораторных и индивидуальных работ на основе типовых примеров разработки программного обеспечения в Visual C++ 6.0 по дисциплине "Новые информационные технологии" для магистров специальности "Экономическая кибернетика" (программа "Информационный менеджмент") // ГВУЗ "КНЭУ имени Вадима Гетьмана" Криворожский экономический институт - Кривой Рог: КЭИ - 2007. - 63 с.

.        Зеленский А.С., Лысенко В.С., Баран С.В. Методические указания для самостоятельного изучения работы с базами данных на Visual C++ с использованием объектов ActiveX Data Object (ADO) по дисциплинам "Мониторинг информационных технологий", "Информационные системы в экономике", "Автоматизация проэктирования информационных систем" // ГВУЗ "КНЭУ имени Вадима Гетьмана" Криворожский экономический институт - Кривой Рог: КЭИ - 2008. - 54 с.

.        Зеленский А.С., Лысенко В.С. Методические указания использования объектов ADO при работе с базами данных на Visual C++ в примерах по дисциплинам: "Мониторинг информационных технологий", "Информационные системы в экономике", "Автоматизация проэктирования информационных систем" (практическая основа для выполнения лабораторних, индивидуальных, курсових и дипломних работ) // ГВУЗ "КНЭУ имени Вадима Гетьмана" Криворожский экономический институт - Кривой Рог: КЭИ - 2008. - 65 с.

Додатки

Додаток А

.h

#if !defined(AFX_STDAFX_H__1D726032_C1AA_4045_BFA7_E5A896B6D590__INCLUDED_)

#define AFX_STDAFX_H__1D726032_C1AA_4045_BFA7_E5A896B6D590__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#define VC_EXTRALEAN// Exclude rarely-used stuff from Windows headers

#include <afxwin.h> // MFC core and standard components

#include <afxext.h> // MFC extensions

#include <afxdisp.h> // MFC Automation classes

#include <afxdtctl.h>// MFC support for Internet Explorer 4 Common Controls

#ifndef _AFX_NO_AFXCMN_SUPPORT

#include <afxcmn.h>// MFC support for Windows Common Controls

#endif // _AFX_NO_AFXCMN_SUPPORT

#include "msado15.tlh"namespace ADODB;

#include <GL\gl.h>

#include <GL\glu.h>

#include <GL\glut.h>

#include <GL\glaux.h>

#pragma comment(lib, "opengl32.lib")

#pragma comment(lib, "glu32.lib")

#pragma comment(lib, "glaux.lib")

#pragma comment(lib, "glut32.lib")

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__1D726032_C1AA_4045_BFA7_E5A896B6D590__INCLUDED_)

Додаток В

.h

#include "Grafik.h"

#if !defined(AFX_MAINFRM_H__6646B85B_45EA_409F_8A2A_D5EB66EB65FC__INCLUDED_)

#define AFX_MAINFRM_H__6646B85B_45EA_409F_8A2A_D5EB66EB65FC__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000CMainFrame : public CFrameWnd

{protected: // create from serialization only();_DYNCREATE(CMainFrame)

// Attributes:*graf;pfd;

// Operations:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CMainFrame)BOOL PreCreateWindow(CREATESTRUCT& cs);

//}}AFX_VIRTUAL

// Implementation:~CMainFrame();

#ifdef _DEBUGvoid AssertValid() const;void Dump(CDumpContext& dc) const;

#endif: // control bar embedded membersm_wndStatusBar;m_wndToolBar;

// Generated message map functions:

//{{AFX_MSG(CMainFrame)_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

//}}AFX_MSG_MESSAGE_MAP()};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAINFRM_H__6646B85B_45EA_409F_8A2A_D5EB66EB65FC__INCLUDED_)

Додаток С

.h

#if !defined(AFX_KURSOVAYAVIEW_H__20E5AAB1_F20B_4B8B_A6CA_DECD3E8A975E__INCLUDED_)

#define AFX_KURSOVAYAVIEW_H__20E5AAB1_F20B_4B8B_A6CA_DECD3E8A975E__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000CKursovayaView : public CView

{protected: // create from serialization only();_DYNCREATE(CKursovayaView)

// Attributes:* GetDocument();

// Operations:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CKursovayaView):void OnDraw(CDC* pDC); // overridden to draw this viewBOOL PreCreateWindow(CREATESTRUCT& cs);:BOOL OnPreparePrinting(CPrintInfo* pInfo);void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

//}}AFX_VIRTUAL

// Implementation:~CKursovayaView();

#ifdef _DEBUGvoid AssertValid() const;void Dump(CDumpContext& dc) const;

#endif:

// Generated message map functions:

//{{AFX_MSG(CKursovayaView)

// NOTE - the ClassWizard will add and remove member functions here.

// DO NOT EDIT what you see in these blocks of generated code !

//}}AFX_MSG_MESSAGE_MAP()};

#ifndef _DEBUG // debug version in kursovayaView.cppCKursovayaDoc* CKursovayaView::GetDocument()

{ return (CKursovayaDoc*)m_pDocument; }

#endif

#endif

Додаток D

.h

#if !defined(AFX_KURSOVAYADOC_H__5EC4DE28_9A33_4AC5_B2C0_416A587C8496__INCLUDED_)

#define AFX_KURSOVAYADOC_H__5EC4DE28_9A33_4AC5_B2C0_416A587C8496__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000CKursovayaDoc : public CDocument

{: // create from serialization only();_DYNCREATE(CKursovayaDoc)

// Attributes:

_ConnectionPtr pConn;

_RecordsetPtr pRecordset;fields;

CString baza;

CString table;

int mas[200];

int n;ms[200];

// Operations:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CKursovayaDoc):BOOL OnNewDocument();void Serialize(CArchive& ar);

//}}AFX_VIRTUAL

// Implementation:~CKursovayaDoc();ErrMessage(_com_error &ce);

#ifdef _DEBUGvoid AssertValid() const;void Dump(CDumpContext& dc) const;

#endif:

// Generated message map functions:

//{{AFX_MSG(CKursovayaDoc)_msg void OnDdd();

//}}AFX_MSG_MESSAGE_MAP()};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif

Додаток E

.h

#if !defined(AFX_GRAFIK_H__E5B353C8_3870_4731_B7FE_0CA730C9A800__INCLUDED_)

#define AFX_GRAFIK_H__E5B353C8_3870_4731_B7FE_0CA730C9A800__INCLUDED_

#include "kursovayaDoc.h"

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "kursovayaDoc.h"Grafik : public CFrameWnd

{_DYNCREATE(Grafik):

// protected constructor used by dynamic creation

// Attributes:();* mf;colorArray[17];i;proc[200];kof[200];otr[200];*Doc;Init_3d();

// protected constructor used by dynamic creation~Grafik();

// Operations:

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(Grafik):BOOL PreCreateWindow(CREATESTRUCT& cs);

//}}AFX_VIRTUAL

// Implementation:

// Generated message map functions

//{{AFX_MSG(Grafik)_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);_msg void OnPaint();_msg void OnSize(UINT nType, int cx, int cy);

//}}AFX_MSG_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GRAFIK_H__E5B353C8_3870_4731_B7FE_0CA730C9A800__INCLUDED_)

Додаток F

.h

//{{AFX_INCLUDES()

#include "datagrid.h"

//}}AFX_INCLUDES

#if !defined(AFX_DLG_H__30EEC067_937F_4A1E_AF57_5C9ED66CE085__INCLUDED_)

#define AFX_DLG_H__30EEC067_937F_4A1E_AF57_5C9ED66CE085__INCLUDED_

#include "Grafik.h"

#include "MainFrm.h"

#include "kursovayaDoc.h"

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000Dlg : public CDialog

{

// Construction:(CWnd* pParent = NULL); // standard constructor*Doc;~Dlg();*graf;*mfr;

// Dialog Data

//{{AFX_DATA(Dlg){ IDD = IDD_DIALOG1 };_pol;_tab;_editquery;_datagrid;

_ConnectionPtr pConn;

_RecordsetPtr pRecordset;fields;baza;table;

//}}AFX_DATAStructura_BD();Connect_Baza(CString str);Recordset_Baza(CString str);

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(Dlg):void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation:

// Generated message map functions

//}}AFX_MSG_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DLG_H__30EEC067_937F_4A1E_AF57_5C9ED66CE085__INCLUDED_)

Додаток G

.cpp

#include "stdafx.h"

#include "kursovaya.h"

#include "MainFrm.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILEchar THIS_FILE[] = __FILE__;

#endif_DYNCREATE(CMainFrame, CFrameWnd)_MESSAGE_MAP(CMainFrame, CFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)_WM_CREATE()

//}}AFX_MSG_MAP_MESSAGE_MAP()UINT indicators[] =

{_SEPARATOR, // status line indicator_INDICATOR_CAPS,_INDICATOR_NUM,_INDICATOR_SCRL,

};::CMainFrame()

{=0;=

{(PIXELFORMATDESCRIPTOR), // size of this pfd

, // version number_DRAW_TO_WINDOW | // support window_SUPPORT_OPENGL | // support OpenGL_DOUBLEBUFFER, // double buffered_TYPE_RGBA, // RGBA type

, // 24-bit color depth

, 0, 0, 0, 0, 0, // color bits ignored

, // no alpha buffer

, // shift bit ignored

, // no accumulation buffer

, 0, 0, 0, // accum bits ignored

, // 32-bit z-buffer

, // no stencil buffer

, // no auxiliary buffer_MAIN_PLANE, // main layer

, // reserved

, 0, 0 // layer masks ignored

};= pfd1;// TODO: add member initialization code here

}::~CMainFrame()

{

}CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{(CFrameWnd::OnCreate(lpCreateStruct) == -1)-1;(!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{("Failed to create toolbar\n");-1; // fail to create

}(!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators,(indicators)/sizeof(UINT)))

{("Failed to create status bar\n");-1; // fail to create

}_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);(CBRS_ALIGN_ANY);(&m_wndToolBar);0;

}CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{( !CFrameWnd::PreCreateWindow(cs) )FALSE;

// TODO: Modify the Window class or styles here by modifying

// the CREATESTRUCT csTRUE;

}

// CMainFrame diagnostics

#ifdef _DEBUGCMainFrame::AssertValid() const

{::AssertValid();

}CMainFrame::Dump(CDumpContext& dc) const

{::Dump(dc);

}

#endif //_DEBUG

Додаток H

.cpp

#include "stdafx.h"

#include "kursovaya.h"

#include "dlg.h"

#include "kursovayaDoc.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILEchar THIS_FILE[] = __FILE__;

#endif_DYNCREATE(CKursovayaDoc, CDocument)_MESSAGE_MAP(CKursovayaDoc, CDocument)

//{{AFX_MSG_MAP(CKursovayaDoc)_COMMAND(ID_DDD, OnDdd)

//}}AFX_MSG_MAP_MESSAGE_MAP()::CKursovayaDoc()

{(NULL);= 0;= 0;(pConn.CreateInstance("ADODB.Connection"))

{= 0;

::MessageBox(0," Не выполнена инициализация Connection","Ошибка!!!",MB_ICONINFORMATION); ;

}>ConnectionTimeout = 15000;>CommandTimeout = 15000;>CursorLocation = adUseClient;>Mode = adModeReadWrite;(pRecordset.CreateInstance(L"ADODB.RecordSet"))

{

::MessageBox(0,"Не выполнена инициализация Recordset","!!!!Ошибка!!!",MB_ICONINFORMATION); .Release();= 0;= 0;

}= "";= "";(pConn==0)return;

}::~CKursovayaDoc()

{

}CKursovayaDoc::ErrMessage(_com_error &ce)

{err="";+="\n";+="Source: ";+="\n";

::MessageBox(0,err,"Îøèáêà!!!",MB_ICONINFORMATION);

}CKursovayaDoc::OnNewDocument()

{(!CDocument::OnNewDocument())FALSE;

// TODO: add reinitialization code here

// (SDI documents will reuse this document)TRUE;

}

// CKursovayaDoc serializationCKursovayaDoc::Serialize(CArchive& ar)

{(ar.IsStoring())

{

// TODO: add storing code here

}

{

// TODO: add loading code here

}

}

// CKursovayaDoc diagnostics

#ifdef _DEBUGCKursovayaDoc::AssertValid() const

{::AssertValid();

}CKursovayaDoc::Dump(CDumpContext& dc) const

{::Dump(dc);

}

#endif //_DEBUGCKursovayaDoc::OnDdd()

{dlg;.Doc = this;.pConn = pConn;.pRecordset = pRecordset;.DoModal();

}

Додаток J

.cpp

#include "stdafx.h"

#include "kursovaya.h"

#include "Grafik.h"

#include "MainFrm.h"

#include "Dlg.h"

#include "MainFrm.h"

#include <windows.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILEchar THIS_FILE[] = __FILE__;

#endif_DYNCREATE(Grafik, CFrameWnd)::Grafik()

{[0] = 0x0000000L; colorArray[1] = 0x0AFAFAFL;[2] = 0x0FF0000L; colorArray[3] = 0x000FF00L;[4] = 0x00000FFL; colorArray[5] = 0x0FFFF00L;[6] = 0x000FFFFL;

}::~Grafik()

{

//((CMainFrame*)AfxGetMainWnd())->graf = 0;

}_MESSAGE_MAP(Grafik, CFrameWnd)

//{{AFX_MSG_MAP(Grafik)_WM_CREATE()_WM_PAINT()_WM_SIZE()

//}}AFX_MSG_MAP_MESSAGE_MAP()

// Grafik message handlersGrafik::Init_3d()

{;pixelformat;* pp = (CMainFrame*)AfxGetMainWnd();

//if ((pixelformat = ChoosePixelFormat(GetDC()->GetSafeHdc(), &(pp->pfd))) == 0 ||

// SetPixelFormat(GetDC()->GetSafeHdc(), pixelformat, &pp->pfd) == FALSE)

//return false;((pixelformat = ChoosePixelFormat(GetDC()->GetSafeHdc(), &(pp->pfd))) == 0 ||(GetDC()->GetSafeHdc(), pixelformat, &pp->pfd) == FALSE)false;

::DescribePixelFormat(GetDC()->GetSafeHdc(), pixelformat, sizeof(pp->pfd), &(pp->pfd));(pp->pfd.cColorBits<16)return false;hrc = wglCreateContext(GetDC()->GetSafeHdc());(GetDC()->GetSafeHdc(), hrc);(GL_DEPTH_TEST);true;

}Grafik::PreCreateWindow(CREATESTRUCT& cs)

{(!CFrameWnd::PreCreateWindow(cs))FALSE;.dwExStyle |= WS_EX_CLIENTEDGE;.style &= ~WS_BORDER;.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,

::LoadCursor(NULL, IDC_ARROW), HBRUSH(0), NULL);TRUE;

}Grafik::OnCreate(LPCREATESTRUCT lpCreateStruct)

{(CFrameWnd::OnCreate(lpCreateStruct) == -1)-1;(!Init_3d())MessageBox("Error");0;

}Grafik::OnPaint()

{dc(this);

// device context for painting();(1,1,1,1);(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glPushAttrib(GL_ALL_ATTRIB_BITS);sum=0;( i=0;i<Doc->n;i++)sum+=Doc->mas[i];(i=0;i<Doc->n;i++)kof[i]=(100*Doc->mas[i])/sum;(i=0;i<Doc->n;i++)otr[i]=(360*kof[i])/100;data;(time(0));*quadObj;= gluNewQuadric();(quadObj, GLU_FILL);=90;r,g,b;(i=0;i<Doc->n;i++)

{=colorArray[i];=(colorArray[i])>>8;=(colorArray[i])>>16;ub(r,g,b);(quadObj, 0, 0.5, 15, 1,data,otr[i]);+=otr[i];

}();(wglGetCurrentDC());();();rect;font;(&rect);.CreatePointFont(140,"Arial");.SelectObject(&font);z=40;br;.CreateSolidBrush(colorArray[0]);.SelectObject(&br);k;(i=0;i<Doc->n;i++)

{.DeleteObject();.TextOut(rect.Width()-200,z,Doc->ms[i]);.CreateSolidBrush(colorArray[i]);.SelectObject(&br);.Rectangle(rect.Width()-230,z,rect.Width()-210,z+25);

//dc.FillRect(k,br);+=40;

}

// TODO: Add your message handler code here

// Do not call CFrameWnd::OnPaint() for painting messages

}Grafik::OnSize(UINT nType, int cx, int cy)

{::OnSize(nType, cx, cy);(cx>cy)

{(0,0,cy,cy);

}

{(0,(cy-cx)/2,cx,cx);

}(false);

}

Додаток K

.cpp

#include "stdafx.h"

#include "kursovaya.h"

#include "Dlg.h"

#include "time.h"

#include <sys/timeb.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILEchar THIS_FILE[] = __FILE__;

#endif::Dlg(CWnd* pParent /*=NULL*/)

: CDialog(Dlg::IDD, pParent)

{

//{{AFX_DATA_INIT(Dlg)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

}::~Dlg()

{

//exit(0);

}Dlg::DoDataExchange(CDataExchange* pDX)

{::DoDataExchange(pDX);

//{{AFX_DATA_MAP(Dlg)_Control(pDX, IDC_POLYA, m_pol);_Control(pDX, IDC_TABLE, m_tab);_Control(pDX, IDC_EDIT1, m_editquery);_Control(pDX, IDC_DATAGRID1, m_datagrid);(IDC_DOHOD_OT_USLUG)->ShowWindow(SW_HIDE);(IDC_DOHOD_PO_DNYAM)->ShowWindow(SW_HIDE);(IDC_DOHOD_SOTR_PODNYAM)->ShowWindow(SW_HIDE);(IDC_ALL_DOHOD_SOTR)->ShowWindow(SW_HIDE);(IDC_ZAPROS_MAKE)->ShowWindow(SW_HIDE);(IDC_ZAPROS_SELECT)->ShowWindow(SW_HIDE);(IDC_Find)->ShowWindow(SW_HIDE);(IDC_Sort)->ShowWindow(SW_HIDE);(IDC_GRAF)->ShowWindow(SW_HIDE);

//}}AFX_DATA_MAP

}_MESSAGE_MAP(Dlg, CDialog)

//{{AFX_MSG_MAP(Dlg)_BN_CLICKED(IDC_OPEN_DB, OnOpenDb)_BN_CLICKED(IDC_ZAPROS_MAKE, OnZaprosMake)_BN_CLICKED(IDC_ZAPROS_SELECT, OnZaprosSelect)_BN_CLICKED(IDC_Find, OnFind)_BN_CLICKED(IDC_GRAF, OnGraf)_BN_CLICKED(IDC_DOHOD_OT_USLUG, OnDohodOtUslug)_BN_CLICKED(IDC_DOHOD_PO_DNYAM, OnDohodPoDnyam)_BN_CLICKED(IDC_DOHOD_SOTR_PODNYAM, OnDohodSotrPodnyam)_BN_CLICKED(IDC_ALL_DOHOD_SOTR, OnAllDohodSotr)_LBN_SELCHANGE(IDC_TABLE, OnSelchangeTable)_LBN_SELCHANGE(IDC_POLYA, OnSelchangePolya)_BN_CLICKED(IDC_First, OnFirst)_BN_CLICKED(IDC_Left, OnLeft)_BN_CLICKED(IDC_Right, OnRight)_BN_CLICKED(IDC_Last, OnLast)_BN_CLICKED(IDC_Sort, OnSort)

//}}AFX_MSG_MAP_MESSAGE_MAP()Dlg::OnOpenDb()

{OpenDialog(true, "", "",_FILEMUSTEXIST |OFN_HIDEREADONLY,

"Microsoft Access Database (*.mdb)|*.mdb|");(OpenDialog.DoModal()!=IDOK) return;str_con = OpenDialog.GetPathName();_con.MakeLower ();_editquery.SetWindowText("");g;(1)

{= str_con.Find('\\',0);(g == -1)break;_con = str_con.Mid(g+1);

}= str_con;.MakeUpper();_con=("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");_con+=OpenDialog.GetPathName();_con+=";";_datagrid.SetRefDataSource(0);

{_Baza(str_con);

}(_com_error &ce)

{>ErrMessage(ce);;

}(IDC_DOHOD_OT_USLUG)->ShowWindow(SW_SHOW);(IDC_DOHOD_PO_DNYAM)->ShowWindow(SW_SHOW);(IDC_DOHOD_SOTR_PODNYAM)->ShowWindow(SW_SHOW);(IDC_ALL_DOHOD_SOTR)->ShowWindow(SW_SHOW);(IDC_ZAPROS_MAKE)->ShowWindow(SW_SHOW);(IDC_ZAPROS_SELECT)->ShowWindow(SW_SHOW);(IDC_Find)->ShowWindow(SW_SHOW);(IDC_Sort)->ShowWindow(SW_SHOW);_BD();// TODO: Add your control notification handler code here

}Dlg::OnZaprosMake()

{_timeb timebuffer;(IDC_GRAF)->ShowWindow(SW_HIDE);

_ftime( &timebuffer );nach = timebuffer.time+timebuffer.millitm/1000.0;str,str1;kod=0;_editquery.GetWindowText (str);.TrimLeft();.MakeUpper ();(str.Mid(0,3).Compare("SEL")==0)

{MessageBox("Команда SELECT недопустима для этой кнопки");return;}(str.Mid(0,3).Compare("DEL")==0)

{= "DELETE FROM <таблица> [ where<условие> ]";= 1;

}(str.Mid(0,3).Compare("UPD")==0)

{= "UPDATE <таблица> SET <поле>=<выражение>, [<поле>=<выражение>,]... [where<óñëîâèå>]";=2;

}(str.Mid(0,3).Compare("INS")==0)

{= "INSERT INTO <таблица> (<список имен полей>) VALUES (<список значений>)";=3;

}(str.Mid(0,3).Compare("CRE")==0)

{= "CREATE TABLE <таблица> (<имя поля1> <тип>, < имя поля 2> < тип >... )";=4;

}(str.Mid(0,3).Compare("DRO")==0)

{= "DROP TABLE <Таблица>";=5;

}

{>BeginTrans();>Execute((_bstr_t)str,0,adCmdText);>CommitTrans();

}(_com_error &ce)

{>RollbackTrans();>ErrMessage(ce);(kod && str.GetLength()< 15)m_editquery.SetWindowText (str1);_editquery.SetFocus();;

}(pRecordset->GetState())pRecordset->Requery (-1);

_ftime( &timebuffer );conec = timebuffer.time+timebuffer.millitm/1000.0;vr_zap;_zap.Format(" Запрос выполнен за %f сек ",conec - nach);(vr_zap);_editquery.SetWindowText ("");// TODO: Add your control notification handler code here

}Dlg::OnZaprosSelect()

{(IDC_GRAF)->ShowWindow(SW_HIDE);str_query;_editquery.GetWindowText(str_query);_query.MakeUpper ();(str_query.Mid(0,6).Compare("SELECT"))

{("В запросе на выборку отсутствует параметр SELECT","Ошибка!!!",MB_ICONINFORMATION ); _editquery.SetWindowText("SELECT <*>|<имя поля> FROM <таблица>");_editquery.SetFocus();;

}

{_Baza(str_query);_datagrid.SetRefDataSource(pRecordset);

}(_com_error &ce)

{("erorrchik");>ErrMessage(ce);

}_editquery.SetFocus ();// TODO: Add your control notification handler code here

}Dlg::OnFind()

{(pRecordset->GetState()==0)return;(IDC_GRAF)->ShowWindow(SW_HIDE);

_variant_t bb = 0L;str_query;_editquery.GetWindowText(str_query);_timeb timebuffer;

_ftime( &timebuffer );nach = timebuffer.time+timebuffer.millitm/1000.0;

{>Find((_bstr_t)str_query,0L,adSearchForward,bb);

_ftime( &timebuffer );conec = timebuffer.time+timebuffer.millitm/1000.0;vr_zap;_zap.Format(" Поиск выполнен за %f сек",conec - nach);(vr_zap);(pRecordset->ADO_EOF)("Значение не найдено! Уазатель за концом БД (EOF = true)");

}(_com_error &ce)

{>ErrMessage(ce);_editquery.SetFocus ();

}// TODO: Add your control notification handler code here

}Dlg::OnGraf()

{(pRecordset->GetState()==0)return;kol_zap = pRecordset->GetRecordCount ();(!kol_zap)

{("И что мы собрались считать?!!!","Ошибка!!!",MB_ICONINFORMATION);;

}i;j;

_bstr_t zn;

_variant_t pol,vr;= (long)0;str="";buf[100];{_datagrid.SetRefDataSource(0);sum = 0;kol = 0;=0;(i = 0; i < kol_zap;i++)

{= fields->GetItem(0L)->GetValue();= "NULL";(vr.vt!= VT_NULL) zn = vr;+=zn;>ms[j]=str;="";=fields->GetItem(1L)->GetValue();>mas[j]=atoi((_bstr_t)vr);>MoveNext();++;

}>n=j;rect;(&rect);.OffsetRect(20,80);= new Grafik;

//graf->mf = mfr;>Doc=this->Doc;>CreateEx(NULL,NULL,"Grafik",WS_VISIBLE|WS_OVERLAPPEDWINDOW,rect,AfxGetMainWnd(), 0);

}(_com_error &ce)

{>ErrMessage(ce);

} // TODO: Add your control notification handler code here

}Dlg::OnDohodOtUslug()

{str_query;_query="SELECT Услуги.Tip, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Услуги.Tip ORDER BY Услуги.Tip, Sum(Услуги.Stoimost)";_Baza(str_query);_datagrid.SetRefDataSource(pRecordset);// TODO: Add your control notification handler code here(IDC_GRAF)->ShowWindow(SW_HIDE);

}Dlg::OnDohodPoDnyam()

{str_query;_query="SELECT Заказы.Datazak, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak ORDER BY Заказы.Datazak";_Baza(str_query);_datagrid.SetRefDataSource(pRecordset);(IDC_GRAF)->ShowWindow(SW_HIDE);

}Dlg::OnDohodSotrPodnyam()

{str_query;_query="SELECT Заказы.Datazak, Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak, Сотрудники.Fam ORDER BY Заказы.Datazak, Sum(Услуги.Stoimost) DESC";_Baza(str_query);_datagrid.SetRefDataSource(pRecordset);(IDC_GRAF)->ShowWindow(SW_HIDE);

}Dlg::OnAllDohodSotr()

{str_query;_query="SELECT Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Услуги INNER JOIN (Сотрудники INNER JOIN Заказы ON Сотрудники.IDsotr = Заказы.IDsotr) ON Услуги.IDy = Заказы.IDy GROUP BY Сотрудники.Fam ORDER BY Sum(Услуги.Stoimost) DESC";_Baza(str_query);_datagrid.SetRefDataSource(pRecordset);(IDC_GRAF)->ShowWindow(SW_SHOW);

}Dlg::OnSelchangeTable()

{str;(IDC_GRAF)->ShowWindow(SW_HIDE);_pol.ResetContent ();(m_tab.GetCurSel ()<0)

{MessageBox("Ололо выбери таблицу");;

}_tab.GetText (m_tab.GetCurSel (),str);= str;.MakeUpper();= "`"+str+"`";

_RecordsetPtr pRec;

pRec = pConn->Execute((_bstr_t)str,0,adCmdTable);(long i=0;i<pRec->GetFields()->GetCount();i++)

{= (char*)(_bstr_t)pRec->GetFields ()->GetItem (i)->GetName ();_pol.AddString (str);

}>Close();= "SELECT * FROM ";= str+"`"+table+"`";_editquery.SetWindowText(str);();(IDC_STATIC2)->SetWindowText("Работа с таблицей "+table);// TODO: Add your control notification handler code here

}Dlg::OnSelchangePolya()

{

// TODO: Add your control notification handler code here

}Dlg::OnFirst()

{

if(pRecordset->GetState()==0)return;(!pRecordset->GetRecordCount())return;

{>MoveFirst();

}(_com_error &ce)

{>ErrMessage(ce);

}

}Dlg::OnLeft()

{(pRecordset->GetState()==0)return;(!pRecordset->GetRecordCount())return;

{(!pRecordset->BOF)

{>MovePrevious();(pRecordset->BOF)pRecordset->MoveFirst();

}pRecordset->MoveFirst();

}(_com_error &ce)

{>ErrMessage(ce);

}

}Dlg::OnRight()

{(pRecordset->GetState()==0)return;(!pRecordset->GetRecordCount())return;

{(!pRecordset->ADO_EOF)

{>MoveNext();(pRecordset->ADO_EOF)pRecordset->MoveLast();

}pRecordset->MoveLast();

}(_com_error &ce)

{>ErrMessage(ce);

}

}Dlg::OnLast()

{(pRecordset->GetState()==0)return;(!pRecordset->GetRecordCount())return;

{>MoveLast();

}(_com_error &ce)

{ Doc->ErrMessage(ce);

}}Dlg::Recordset_Baza(CString str)

{(pRecordset->GetState())pRecordset->Close();>CursorLocation = adUseClient;>Open ((_bstr_t)str,(IUnknown *)pConn,,adLockOptimistic,adCmdText);= pRecordset->GetFields();

}Dlg::Structura_BD()

{str;

_RecordsetPtr pTables("ADODB.Recordset");= pConn->OpenSchema (ADODB::adSchemaTables);_tab.ResetContent();_pol.ResetContent ();(!pTables->ADO_EOF)

{= (char*)(_bstr_t)pTables->GetFields ()->GetItem

((_bstr_t)"TABLE_TYPE")->GetValue ();(!str.Compare ("TABLE"))_tab.AddString ((_bstr_t)pTables->GetFields ()->GetItem ((_variant_t)"TABLE_NAME")->GetValue ());>MoveNext ();

}>Close();

}Dlg::Connect_Baza(CString str)

{(pRecordset->GetState()) pRecordset->Close();(pConn->GetState())pConn->Close();>Open((_bstr_t)str,"","",0);

}Dlg::OnSort()

{(pRecordset->GetState()==0)return;_datagrid.SetRefDataSource(0);str_query;_editquery.GetWindowText(str_query);_timeb timebuffer;

_ftime( &timebuffer );nach = timebuffer.time+timebuffer.millitm/1000.0;

{vr_zap;(((CButton*)GetDlgItem(IDC_Sort))->GetCheck ()==1)

{>PutSort ((_bstr_t)str_query);

_ftime( &timebuffer );conec = timebuffer.time+timebuffer.millitm/1000.0;_zap.Format("Сортировка выполнена за %f сек ",conec - nach);_datagrid.SetRefDataSource(pRecordset);(vr_zap);

}

{>Sort = "";_datagrid.SetRefDataSource(pRecordset);

_ftime( &timebuffer );conec = timebuffer.time+timebuffer.millitm/1000.0;_zap.Format(" Сортировка снята за %f секунд",conec - nach);(vr_zap);

}// TODO: Add your control notification handler code here

}(_com_error &ce)

{ m_datagrid.SetRefDataSource(pRecordset);>ErrMessage(ce);

((CButton*)GetDlgItem(IDC_Sort))->SetCheck (0);_editquery.SetFocus ();

}

}

Додаток  L

.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Data.OleDb;System.Windows.Forms;WindowsFormsApplication1

{partial class Form1 : Form

{dbCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dimabudnik.mdb");dataTable ;dbAdapter1;[] a;[] b;n;Form1()

{();.Visible = false;

}void Form1_Load(object sender, EventArgs e)

{.Items.Clear();

//подключаемся в БД.Open();

//получаем список таблицtbls = dbCon.GetSchema("Tables", new string[] { null, null, null, "TABLE" }); //список всех таблиц

//Пробегаем по списку и добавляем в ЛистБокс(DataRow row in tbls.Rows)

{TableName = row["TABLE_NAME"].ToString();.Items.Add(TableName);

}.Close();.SelectedIndex = 0;

// TODO: данная строка кода позволяет загрузить данные в таблицу "dimabudnikDataSet.Заказы". При необходимости она может быть перемещена или удалена.

}void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{.Visible = false;

//подключаемся в БД.Open();

//Делаем запрос к БД= new OleDbDataAdapter(@"SELECT * FROM " + listBox1.SelectedItem, dbCon);= new DataTable();

//Заполняем Грид значениями с таблиці.Fill(dataTable);bb = new OleDbCommandBuilder(dbAdapter1);

//Создаем новое подлючение для управленияbs1 = new BindingSource();

//заполняем дату значениеями с таблицы.DataSource = dataTable;

//даём навигатору наши значения.BindingSource = bs1;

//заполняем грид.DataSource = bs1;

//заполняем поля.Items.Clear();(var item in dataTable.Columns)

{.Items.Add(item.ToString());

}.Close();

}void toolStripButton1_Click(object sender, EventArgs e)

{.Open();(MessageBox.Show("Вы хотите сохранить изменения в базе данных?",

"Сохранение", MessageBoxButtons.YesNo,.Question) == DialogResult.Yes) dbAdapter1.Update(dataTable);.Close();

}void button1_Click(object sender, EventArgs e)

{("SELECT Услуги.Tip, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Услуги.Tip ORDER BY Услуги.Tip, Sum(Услуги.Stoimost)");.Visible = true;

}void button2_Click(object sender, EventArgs e)

{("SELECT Заказы.Datazak, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak ORDER BY Заказы.Datazak");.Visible = false;

}void button3_Click(object sender, EventArgs e)

{.Visible = false;("SELECT Заказы.Datazak, Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Сотрудники INNER JOIN (Услуги INNER JOIN Заказы ON Услуги.IDy = Заказы.IDy) ON Сотрудники.IDsotr = Заказы.IDsotr GROUP BY Заказы.Datazak, Сотрудники.Fam ORDER BY Заказы.Datazak, Sum(Услуги.Stoimost) DESC");

}void button4_Click(object sender, EventArgs e)

{.Visible = true;("SELECT Сотрудники.Fam, Sum(Услуги.Stoimost) AS [Sum-Stoimost] FROM Услуги INNER JOIN (Сотрудники INNER JOIN Заказы ON Сотрудники.IDsotr = Заказы.IDsotr) ON Услуги.IDy = Заказы.IDy GROUP BY Сотрудники.Fam ORDER BY Sum(Услуги.Stoimost) DESC");

}void zapros(string str)

{.Open();

//Делаем запрос к БД= new OleDbDataAdapter(@""+str+"", dbCon);= new DataTable();

//Заполняем Грид значениями с таблицы.Fill(dataTable);

//Создаем новое подлючение для управленияbs1 = new BindingSource();

//заполняем дату значениеями с таблицы.DataSource = dataTable;

//даём навигатору наши значения.BindingSource = bs1;

//заполняем грид.DataSource = bs1;.Close();

}void button5_Click(object sender, EventArgs e)

}void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

}void button6_Click(object sender, EventArgs e)

{.Visible = true;= new string[dataGridView1.RowCount];= new float[dataGridView1.RowCount];= dataGridView1.RowCount+1;(int i = 0; i < dataGridView1.RowCount-1; i++)

{[i] = dataGridView1[0, i].Value.ToString();[i] = float.Parse(dataGridView1[1, i].Value.ToString());

}f2 = new Form2();.temp(a, b, n);.Show();

}

}

}

Додаток M

.csSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;WindowsFormsApplication1

{partial class Form2 : Form

{[] a;[] b;x = SystemInformation.PrimaryMonitorSize.Width;y = SystemInformation.PrimaryMonitorSize.Height;k;[] brsh = { Brushes.Red, Brushes.Blue, Brushes.Aqua, Brushes.Green, Brushes.Yellow, Brushes.Gold, Brushes.AliceBlue, Brushes.AntiqueWhite, Brushes.Aquamarine, Brushes.Azure, Brushes.Beige, Brushes.Bisque, Brushes.BlanchedAlmond, Brushes.BlueViolet, Brushes.Brown, Brushes.BurlyWood, Brushes.CadetBlue, Brushes.Chartreuse, Brushes.Chocolate, Brushes.Coral, Brushes .CornflowerBlue};[] cl = { Color.Red, Color.Blue, Color.Aqua, Color.Green, Color.Yellow, Color.Gold, Color.AliceBlue,.AntiqueWhite, Color.Aquamarine, Color.Azure, Color.Beige, Color.Bisque,.BlanchedAlmond, Color.BlueViolet, Color.Brown, Color.BurlyWood, Color.CadetBlue,.Chartreuse, Color.Chocolate, Color.Coral, Color.CornflowerBlue };tol_lin = 1;Form2()

{= true;= true;();= new Size(x, y);

}void temp(string[] name, float[] val, int n)

{= name;= val;= n;

}void Form2_Paint(object sender, PaintEventArgs e)

{Total = 0.0F;f2, f1 = 0.0F;rd = new Random();pen = new Pen(Color.Black, tol_lin);rect = new Rectangle(tol_lin, tol_lin,.Width/2 * tol_lin, ClientSize.Height - 2 * tol_lin);(float lval in b)+= lval;i = 0;(float lval in b)

{= 360 * lval / Total;.Graphics.FillPie(brsh[i], rect, f1, f2);.Graphics.DrawPie(pen, rect, f1, f2);+= f2;l = new Label();.AutoSize = true;.Font= new Font("Arial", 14, FontStyle.Italic);.Location = new Point(5, (i + 1) * 30);(k-2 > i)

{.Text = a[i] + " = " + b[i].ToString();.BackColor = cl[i];

}.Controls.Add(l);++;

}.AutoSize = true;.Location = new Point(ClientSize.Width - groupBox1.Width, 0) ;

}

}

}

Похожие работы на - Розробка програмного забезпечення розрахунку прибутку перукарні

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!