coursework


Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра “Інформаційні системи та мережі”



Курсова робота
з дисципліни “Програмування та алгоритмічні мови”
на тему:
“Побудова сервісно-орієнтованого додатку, windows сервіси”


Виконав студент групи СА-21Бекеш Д.І.
1308674 (№ залікової книжки)

Оцінка Балів Дата


Керівник роботи Ришковець Ю.В.



Львів-2015
Завдання
на курсову роботу з дисципліни
"Програмування та алгоритмічні мови"
студента групи СА-21
Бекеша Дем’яна Ігоровича
Тема: "Побудова сервісно-орієнтованого додатку, windows сервіси".
Завдання:Написати windows сервіс , який буде виконувати логіку числового калькулятора(Calculator_by_SA). Дати можливість використовувати йога на
Windows 7/Windows 8

ЗМІСТ ЗАВДАННЯ ТА КАЛЕНДАРНИЙ ПЛАН ЙОГО ВИКОНАННЯ
1. Провести аналітичний огляд літератури по заданій темі. 27.09
2. Розробити алгоритм та графічну схему програми розв'язування задачі. 27.10
3. Написати програму на мовах С/С++.
Вимоги до програми:
1) програма повинна працювати у вікні MSDOS операційної системи Windows;
2) програма повинна мат інтерфейс у вигляді вікон та меню для вибору режимів її роботи;
3) передбачити введення даних з клавіатури та з файлу, а також виведення результатів на екран та у файл;
4) керування режимами роботи програми виконати за допомогою клавіатури та миші. 25.11
4. Підготувати вхідні дані для контрольного прикладу. 10.12
5. Реалізувати та відлагодити програми на відповідних мовах програмування. 20.12
6. Оформити записку до курсової роботи згідно з вимогами Міжнародних стандартів, дотримуючись такого змісту:
вступ;
формулювання задачі;
алгоритми розв'язування задачі;
методи та засоби розв'язування задачі;
опис програми на мові С/С++;
технологія програмування, виконання та відлагодження програми;
інструкція користувачу;
контрольний приклад та аналіз результатів комп'ютерної реалізації програми;
висновки;
література;
додатки. 26.12

Завдання прийнято до виконання: 13.09.2014
Керівник роботи: Ришковець Ю.В.
Зміст
TOC \o Вступ PAGEREF _Toc411101895 \h \* Arabic 31 Формулювання задачі PAGEREF _Toc411101896 \h \* Arabic 42 Методи та засоби розв’язування задачі PAGEREF _Toc411101897 \h \* Arabic 53 Алгоритми розв’язування задачі PAGEREF _Toc411101898 \h \* Arabic 94 Опис програми мовою С/С++ PAGEREF _Toc411101899 \h \* Arabic 145 Технологія програмування, виконання та відлагодження програми PAGEREF _Toc411101900 \h \* Arabic 166 Інструкція користувачу PAGEREF _Toc411101901 \h \* Arabic 187 Контрольний приклад та аналіз результатів реалізації програмиВисновки22Список використаних джерел23Додаток 1. Текст програми мовою С++ PAGEREF _Toc411101905 \h \* Arabic 26

ВступПроблемою навчальння в Україні є її відірваність від виробництва. Вирішення цієї проблеми значною мірою позитивно вплине на рівень знань випускників навчальних закладів. Тому нам було представлена можливість від компанії Global logic прийняти участь в проекті «ІТ-Експерт» . Мета проекту у сфері освіти – забезпечити якісне зростання рівня підготовки випускників ІТ спеціальностей вищих закладів освіти , що здійснюють підготовку фахівців для потреб ІТ галузі.Будучи учасником проекту «ІТ-Експерт», мені була надана можливість набрати команду зі своїх одногрупників, кодова назва якої «Team-Orange» . Перед нами була поставлена задача побудови Об'єктно-орієнтованого додатку, на прикладі числового калькулятора ,котрий би мав функції конвертера. Метою виконання курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивчені дисциплін “Основи програмування”.

1 Формулювання задачі

1.1 Інформаційне формулювання
Для реалізації програми необхідно розділити завдання на декілька підзавдань, а саме:
Зчитування даних.
Опрацювання даних.
Виведення результату.
1.2 Вхідні/вихідні дані
На вхід програми ви записуєте вираз , який обчислюється за тим який оператор був записаний.
Функція equal повертає значеня в lebel1 . Значення виразу буде зберігатись в result до того моменту поки не буде використана функція clean.

1.3 Вимоги до програмної системи
Спеціального програмного забезпечення для функціонування програми не потрібно. Достатньо лише мати операційну систему Windows.
2 Методи та засоби розв’язування задачі
Для створення зовнішнього вигляду калькулятора я використовував Windows Forms.
Windows Forms - інтерфейс програмування додатків (API), що відповідає за графічний інтерфейс користувача і є частиною Microsoft .NET Framework. Даний інтерфейс спрощує доступ до елементів інтерфейсу Microsoft Windows за рахунок створення обгортки для існуючого Win32 API в керованому коді. Причому керований код - класи, що реалізують API для Windows Forms, не залежать від мови розробки. Тобто програміст однаково може використовувати Windows Forms як при написанні програмне забезпечення на C #, С ++, так і на VB.Net, J # та ін.
Усередині .NET Framework, Windows Forms реалізується в рамках простору назв System.Windows.Forms.
Для розв’язання поставленої задачі я Oператор switch.
Oператор switch - це оператор управління, що вибирає зі списку можливих варіантів розділ перемикання, для виконання міститься в ньому коду.
Оператор switch включає один або кілька розділів перемикання. Кожен розділ перемикання містить одну або декілька міток case, за якими слід один або кілька операторів.У кожній мітці case вказується значення-константа. Оператор switch передає управління того розділу, мітка case якого співпадає зі значенням вираз switch. Якщо жодна з міток case не містить збігається значення, управління передається в розділ default (значення за замовчуванням), якщо такий є. Якщо ж розділу default немає, ніякі дії не робляться, і управління передається за межі оператора switch.
Оператор switch може містити будь-яку кількість розділів switch, а кожен розділ може мати одну або декілька міток case. Однак дві мітки case не можуть містити одне і те ж постійне значення.
Виконання списку операторів в вибраному розділі switch починається з першого оператора і триває по списку, зазвичай до досягнення оператора переходу, такого як break, goto case, return або throw. У цій точці управління передається за межі оператора switch або до іншої мітці case.
На відміну від C ++, C # не допускає, щоб виконання, почавшись в одному розділі.
Також Windows forms створює закритий тип функцій private void , щоб не нагромаджувати в оператій пам’яті лишні фунції , які не використоються.
Щоб доступитись до данних , котрі записав користувач, я використовував оператор field з атрибутом Text.
field змінної будь-якого типу, який оголошений прямо в класі або структурі. Поля члени їх містить типу.
Клас або структура може мати поля екземпляра або статичні поля або те й інше. field примірника є специфічними для екземпляра типу. Якщо у вас є клас T, з полем примірника F, можна створити два об'єкти типу T і змінити значення F в кожному об'єкті, не зачіпаючи значення в іншому об'єкті. На відміну від статичного поля, належить самому класу, і є загальним для всіх екземплярів цього класу. Зміни, зроблені з примірника буде помітно відразу до екземплярів В і С, якщо вони мають доступ на полі.
Як правило, ви повинні використовувати field тільки для змінних, які мають приватні або захищені доступності. Дані, які ваш клас виставляє на клієнтському коді повинні бути передбачені за допомогою методів, властивостей і індексаторів. За допомогою цих конструкцій для непрямого доступу до внутрішніх полях, ви можете захиститися від неприпустимих значень введення. Приватний поле, яке зберігає даними, наданими в державній власності називається резервне сховище або основою поле.
Поля зазвичай зберігають дані, які повинні бути доступні для більш ніж одного методу класу і повинен бути збережений для більш, ніж час життя якого-небудь одного методу. Наприклад, клас, який представляє календарну дату доведеться три цілочисельних поля: одне для місяця, одне для числа, і один за рік. Змінні, які не використовуються за рамки одного методу повинні бути оголошені як локальні змінні всередині самої тіла методу.
В свою чергу атрибут Text дає мені можливість доступитись до самого змісту поля.
Атрибутом оператора field lenght я перевіряв кількість символів в полі, де записана операція.
Атрибут оператора field який також використовувався в калькуляторі був Contains. Використання Contains давало змогу перевіряти зміст нашого поля без лишніх перевірок. В свою чергу це оптимізувало процес швидкодії програми.
Для того щоб описувати числові змінні я використовував тип float.
Ключове слово float позначає простий тип, використовуваний для зберігання 32-розрядних значень з плаваючою комою.
Діапозон float: з -2 147 483 648.0 по 2 147 483 647.0
По замовчуванню фактичний чисельний літерал в правій частині оператора призначення обробляється як тип double. Отже, для ініціалізації змінної типу з плаваючою комою потрібно використовувати суфікс f або F.
Також я використовував тип bool.Він потрбний для того щоб зберігати в собі місця де закінчується число1 і починається операнд і тд.
Ключове слово bool є псевдонімом властивості System.Boolean. Воно використовується для оголошення змінних для зберігання логічних значень, true і false.
Діапазон допустимих значень типу даних bool від 0 до 255
В програмі використоється оператор if.
В обох формах оператора if обчислюється параметр вираз (який може мати будь-яке значення, за винятком структури), включаючи всі побічні ефекти. Управління від оператора if передається наступному оператору в програмі, крім випадків, коли в параметрі вираз міститься оператор break, continue або goto.
Умова else в операторі if ... else зв'язується з найближчим попереднім if в тій же області видимості, для якого немає відповідної умови else.
Для того щоб наступний приклад не містив протиріч щодо пар if ... else, необхідно прибрати коментарі перед фігурними дужками.
Всі оператори простого і складеного привласнення мають рівний пріоритет.
Вираз може містити декілька операторів з рівним пріоритетом. Якщо кілька таких операторів знаходяться у вираженні на одному рівні, обчислення виконується згідно їх асоціативності (чи справа наліво, або зліва направо). Напрямок обчислення не впливає на результати висловів, в яких на одному і тому ж рівні знаходиться більше одного оператора множення (*) або складання (+) або бінарного побітового оператора (& | ^). Порядок операцій невизначений язиком. Якщо компілятор може гарантувати узгоджений результат, то він може обчислювати такі вирази в будь-якому порядку.
Тільки оператори послідовного обчислення (,), логічного І (&&), логічного АБО (||), умовного виразу (? :) І виклику функції створюють точки слідування і тим самим гарантують певний порядок обчислення своїх операндів. Оператор виклику функції являє собою пару дужок, наступних за ідентифікатором функції. Оператор послідовного обчислення (,) гарантує, що його операнди будуть обчислюватися зліва направо. (Зверніть увагу, що оператор-кома у виклику функції не є оператором послідовного обчислення і не надає таких гарантій.) .
Логічні оператори також гарантують обчислення своїх операндів зліва направо. Однак вони обчислюють найменшу кількість операндів, необхідне для визначення результату виразу. Це називається "скороченим обчисленням". Таким чином, дехто операнди у виразі можуть не обчислюватися.
Оголошення включає в програму одне або декілька імен. Оголошення можуть виникати в програмі кілька разів. Отже, класи, структури, що перераховуються типи і інші користувальницькі типи можна оголосити для кожного блоку компіляції. Відносно цього множинного оголошення діє таке обмеження: всі оголошення повинні бути ідентичними. Оголошення також служать як визначення. Виняток становлять ситуації, коли оголошення є прототипом функції (оголошенням функції без тіла функції).містить описувач extern, але не містить ініціалізатор (об'єкти та змінні) або основну частину функції (функції). Це означає, що визначення в поточному записі перетворення не є обов'язковим, і надає імені зовнішню компоновку.
217170012071353 Алгоритми розв’язування задачі

























Рис.1
На рисунку 1 ми бачимо реалізацію функції private void plus_Click.
Вона працює так : якщо ми нажимає на кнопку операндів +,-,*,/(в данному випадку це +)вона запускає цей алгоритм.
1. Перевіряє чи наше вікно не є пустим.
2.Перевіряє чи наше вікно вже не містить операндів.
3.Перевіряє чи це не ’ -’ якщо це так записує (записує відповідний операнд)
3.1. Перевіряє чи це не решта операндів і записує (записує відповідний операнд)
4. Обнуляє всі змінні перевірок
Цей алгоритм також був використаний в :
private void minus_Click(object sender, EventArgs e);
private void division_Click(object sender, EventArgs e);
private void multiply_Click(object sender, EventArgs e);


22885404780280



Рис.2
На рисунку 2 ми бачимо реалізацію функції private void one_Clic
Вона працює так : якщо ми нажимає на кнопку
цифр(1,2,3,4,5,6,7,8,9,0) вона запускає цей алгоритм.
1.Записує в поле цифру яка відповідає кнопці на яку ми нажали.
2.Якщо число було першим записує цифру його в змінну number1, якщо ж ні то записує цифру в змінну number2;
Цей алгоритм також був використаний в :
private void two_Click(object sender, EventArgs e)

private void three_Click(object sender, EventArgs e)

private void four_Click(object sender, EventArgs e)

private void five_Click(object sender, EventArgs e)

private void six_Click(object sender, EventArgs e)

private void seven_Click(object sender, EventArgs e)

private void eight_Click(object sender, EventArgs e)

private void nine_Click(object sender, EventArgs e)

private void zero_Click(object sender, EventArgs e)(тут при входженні в алгоритм ми перевіряєм чи наше поле не є пустим)

Ця фунція повертає змінні до початкових значень;
private void clean_Click(object sender, EventArgs e)

Ця функція реалізова так щоб добавляти кому в наше поле і ящко наше чисдо пусте то ми добавляєм ’0’ і ставимо ’,’ .
private void point_Click(object sender, EventArgs e)

916305871855Рис.3
На рисунку 3 ми бачимо реалізацію функції private void equal_Click
Вона працює так : якщо ми нажимає на кнопку ’ =’
вона запускає цей алгоритм.
1. Перевіряє чи в полі є операнди.
2.Робить обрахунки над змінним number1 i number2 і записує їх в змінну result.
16084551151890Рис.4
На рисунку 4 ми бачимо реалізацію функції private void cosinus_Click
Вона працює так : якщо ми нажимає на кнопку(Тригонометричних функцій)
вона запускає цей алгоритм.
Якщо заповненна тальки змінна number1 то обрахунок проходить над змінною number1 і записує результат обрахунку в змінну result , якщо ж ні то обрахунок проходить над змінною result і записує результат обрахунку в змінну result ;
Цей алгоритм також був використаний в всіх інших фунція обрахунку тригонометричних функцій.
4 Опис програми мовою С/С++
4.1 Назва програми
Програма має назву calculator_by_SA.
4.2 Призначення програми
Програма використовується для обрахунку чисел і тригонометричних функцій
4.3 Мови програмування
C# (Сі-шарп) — об'єктно-орієнтована мова програмування з безпечною системою типізації для платформи .NET. Розроблена Андерсом Гейлсбергом, Скотом Вілтамутом та Пітером Гольде під егідою Microsoft Research (при фірмі Microsoft).
Синтаксис C# близький до С++ і Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато що від своїх попередників — мов С++, Delphi, Модула і Smalltalk — С#, спираючись на практику їхнього використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем, наприклад множинне спадкування класів (на відміну від C++).
4.4 Логічна структура програми
Програма виконана в Windows forms представлена набором кнопок і полів для запису.
Кожна кнопка має надпис в ній. Тому програмає дові інтуєтивною в користуванні.
4.5 Вхідні та вихідні дані
Вхідні дані вводить сам користувач .
Вихідні дані обрахунку ми бачимо в нижній стороній програми.
4.6 Програмні та технічні засоби
Спеціального програмного забезпечення для функціонування програми не потрібно. Достатньо лише мати операційну систему Windows 7/Windows 8.
5 Технологія програмування, виконання та відлагодження програми
Під час розроблення програми використовувалися наступні технології програмування, виконання та відлагодження програми: інтегроване середовище розроблення Visual Studio.
Також для створення програми були використана така програма як TortoiseSVN.Про TortoiseSVN
TortoiseSVN є дуже простий у використанні програмне забезпечення управління Контроль версій / контролю версій / джерела для Windows. Він заснований на Apache ™ Subversion (SVN) ®; TortoiseSVN надає зручний і простий користувальницький інтерфейс для Subversion.

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

Так як це не інтеграція для конкретної IDE, як Visual Studio, Eclipse або інших, ви можете використовувати його з тим, що засоби розробки вам подобається, і з будь-яким типом файлу.

Особливості TortoiseSVN
Простота у використанні
всі команди доступні безпосередньо з провідника Windows.
тільки команди, які мають сенс для вибраного файлу / папки відображаються. Ви не побачите всі команди, які ви не можете використовувати у вашій ситуації.
Перегляд статусу ваших файлів безпосередньо в провіднику Windows,
описові діалоги, постійно підвищено за рахунок зворотного зв'язку з користувачами
дозволяє переміщати файли праве перетягування їх у провіднику Windows
Всі протоколи Subversion підтримуються
HTTP: //
HTTPS: //
SVN: //
SVN + SSH: //
Файл: ///
SVN + XXX: //
Потужний Діалог фіксації
інтегровані перевірки орфографії для повідомлень журналу
автоматичного завершення шляхів і ключових слів модифікованих файлів
форматування тексту за допомогою спеціальних символів
Велика фотографія
Може створювати граф всіх ревізій / вчиняє. Ви можете легко побачити, де ви створили тег / філії або зміни файлу / папки
Графіки здійснити статистику проекту
Легко порівняння двох гілок або тегів
За налаштуваннях проекту
Мінімальна довжина повідомлення журналу, щоб уникнути випадкового фіксації з порожніми повідомленнями журналу
мову використовувати для перевірки орфографії
Інтеграція з системами відслідковування помилок
TortoiseSVN надає гнучкий механізм для інтеграції будь-який веб-системи спостереження помилка.

Окремий вхід вікно для введення номера проблеми, призначений здійснюють або забарвлення номер випуску безпосередньо в самому повідомленні журналу
При показі всі повідомлення журналу, додатковий стовпець додається з номером випуску. Ви можете відразу побачити, до якої проблема вчинення належить.
Номери проблем перетворюються у посилання, які відкриваються веб-браузера безпосередньо на відповідному питанні
Додаткове попередження, якщо робить не призначений на номер випуску
Корисні інструменти
TortoiseMerge
Показує зміни, внесені у файли
Допомагає вирішення конфліктів
Може застосовуватися PATCHFILES ви отримали від користувачів без можливості фіксувати до вашого репозиторию
TortoiseBlame: показати звинувачує файлів. Також показує повідомлення журналу для кожного рядка у файлі.
TortoiseIDiff: щоб побачити зміни, внесені у файли зображень
SubWCRev: включити номера ревізій / дати / ... в вихідні файли
Доступний на багатьох мовах
TortoiseSVN стабільна
Перед кожним випуском ми створити один або декілька «кандидатів Звільнення" для любителів пригод, щоб перевірити в першу чергу.
Під час циклу розробки, багато людей відчувають проміжний будує. Вони побудовані щоночі автоматично і доступні для всіх наших користувачів. Це допомагає знайти помилки дуже рано, так вони не будуть навіть потрапити в офіційному релізі.
Велика громада користувач допомагає з тестування кожну збірку, перш ніж ми відпустіть її.
Спеціального інструменту звіт про помилку включено в кожному випуску TortoiseSVN, яка допомагає нам виправити помилки набагато швидше, навіть якщо ви не можете згадати, що саме ви зробили, щоб викликати його.

Microsoft Visual Studio — серія продуктів фірми Майкрософт, які включають інтегроване середовище розробки програмного забезпечення та ряд інших інструментальних засобів. Ці продукти дозволяють розробляти як консольні програми, так і програми з графічним інтерфейсом, в тому числі з підтримкою технології Windows Forms, а також веб-сайти, веб-застосунки, веб-служби як в рідному, так і в керованому кодах для всіх платформ, що підтримуються Microsoft Windows, Windows Mobile, Windows Phone, Windows CE, .NET Framework, .NET Compact Framework та Microsoft Silverlight.
Visual Studio включає в себе редактор вихідного коду з підтримкою технології IntelliSense і можливістю найпростішого рефакторингу коду. Вбудований відладчик може працювати як відладчик рівня вихідного коду, так і як відладчик машинного рівня. Решта вбудовуються інструменти включають в себе редактор форм для спрощення створення графічного інтерфейсу додатку, веб-редактор, дизайнер класів і дизайнер схеми бази даних. Visual Studio дозволяє створювати і підключати сторонні додатки (плаґіни) для розширення функціональності практично на кожному рівні, включаючи додавання підтримки систем контролю версій вихідного коду (як наприклад, Subversion і Visual SourceSafe), додавання нових наборів інструментів (наприклад, для редагування і візуального проектування коду на предметно-орієнтованих мовах програмування або інструментів для інших аспектів процесу розробки програмного забезпечення (наприклад, клієнт Team Explorer для роботи з Team Foundation Server).
6 Інструкція користувачу
Отже, перш за все – нам необхідно відкрити exe.fail – Team orange. Для цього я використаю операційну систему – Windows 8.Це видно на рисунку 5.

Рис.5

Калькулятор складається з 27 кнопок , одного поля для введня і одного поля для виведеня.(Рис.6)


Рис.6 Початкова панель програми

Для обрахунку нам необхідно ввести данні. Спробуємо ввести два числа і операнд . Після цього потрібно нажати кнопку ’=’.Рис.7
Рис.7. Обрахунок








7 Контрольний приклад та аналіз результатів реалізації програми
На цей раз попробуєм взяти косинус з числа -1,06.Працює!Рис.8
Рис.8. Робота з від’ємними дробовими числами при обрахунку тригонометричних функцій
Отже, калькулятор працює справно. Всі функції були реалізовані коректно.
Висновки
Відповідно до умови завдання, було написано програму, яка виконує такі важливі і актуальні функції. Цей файл можна легко сконвертувати на мобільний пристрій і користуватись калькутором справно.
використаних джерел
Ахо А. Структуры данных и алгоритмы : уч. пос. / А. Ахо, Д. Хопкрофт, Дж.Ульман ; пер. с англ. – М. : Издательський дом “Вильяме”, 2000. – 384 с.
Ковалюк Т.В. Алгоритмізація та програмування : підручник / T.В. Ковалюк. – Львів : “Магнолія 2006”, 2013. – 400 с.
Кнут Д. E. Искусство программирования. / Д.Е. Кнут ; 3-e издание. Том 1. – М.: Вильямс, 2001
Кнут Д. E. Искусство программирования. / Д.Е. Кнут ; 3-e издание. Том 2. – М.: Вильямс, 2001
Кнут Д. E. Искусство программирования. / Д.Е. Кнут ; 3-e издание. Том 3. – М.: Вильямс, 2001
Додаток 1. Текст програми мовою С++
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 Team_orange
{
public partial class Form1 : Form
{
private bool comaEntered = false;
private int operatorIndex = 0;
private float result = 0;
private string number1 = "", number2 = "";
private char operation = ' ';

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void label1_Click(object sender, EventArgs e)
{

}

private void plus_Click(object sender, EventArgs e)
{
if(field.Text.Length > 0)
switch(field.Text[field.Text.Length - 1])
{
case '+':
case '-':
case '*':
case '/':
break;
default:
if(field.Text[0] == '-')
{
if(!(field.Text.Contains('+') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '+';
}
}
else if(!(field.Text.Contains('+') || field.Text.Contains('-') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '+';
}
break;
}
operation = field.Text[field.Text.Length - 1];
operatorIndex = field.Text.Length;
comaEntered = false;
}

private void minus_Click(object sender, EventArgs e)
{
if(field.Text.Length <= 0)
{
field.Text += '-';
}
else
switch(field.Text[field.Text.Length - 1])
{
case '+':
case '-':
case '*':
case '/':
break;
default:
if(field.Text[0] == '-')
{
if(!(field.Text.Contains('+') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '-';
}
}
else if(!(field.Text.Contains('+') || field.Text.Contains('-') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '-';
}
break;
}
operation = field.Text[field.Text.Length - 1];
operatorIndex = field.Text.Length;
comaEntered = false;
}

private void division_Click(object sender, EventArgs e)
{
if(field.Text.Length > 0)
switch(field.Text[field.Text.Length - 1])
{
case '+':
case '-':
case '*':
case '/':
break;
default:
if(field.Text[0] == '-')
{
if(!(field.Text.Contains('+') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '/';
}
}
else if(!(field.Text.Contains('+') || field.Text.Contains('-') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '/';
}
break;
}
operation = field.Text[field.Text.Length - 1];
operatorIndex = field.Text.Length;
comaEntered = false;
}

private void multiply_Click(object sender, EventArgs e)
{
if(field.Text.Length > 0)
switch(field.Text[field.Text.Length - 1])
{
case '+':
case '-':
case '*':
case '/':
break;
default:
if(field.Text[0] == '-')
{
if(!(field.Text.Contains('+') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '*';
}
}
else if(!(field.Text.Contains('+') || field.Text.Contains('-') || field.Text.Contains('*') || field.Text.Contains('/')))
{
field.Text += '*';
}
break;
}
operation = field.Text[field.Text.Length - 1];
operatorIndex = field.Text.Length;
comaEntered = false;
}

private void one_Click(object sender, EventArgs e)
{
field.Text += '1';
if(operation == ' ')
number1 += '1';
else
number2 += '1';
}

private void two_Click(object sender, EventArgs e)
{
field.Text += '2';
if(operation == ' ')
number1 += '2';
else
number2 += '2';
}

private void three_Click(object sender, EventArgs e)
{
field.Text += '3';
if(operation == ' ')
number1 += '3';
else
number2 += '3';
}

private void four_Click(object sender, EventArgs e)
{
field.Text += '4';
if(operation == ' ')
number1 += '4';
else
number2 += '4';
}

private void five_Click(object sender, EventArgs e)
{
field.Text += '5';
if(operation == ' ')
number1 += '5';
else
number2 += '5';
}

private void six_Click(object sender, EventArgs e)
{
field.Text += '6';
if(operation == ' ')
number1 += '6';
else
number2 += '6';
}

private void seven_Click(object sender, EventArgs e)
{
field.Text += '7';
if(operation == ' ')
number1 += '7';
else
number2 += '7';
}

private void eight_Click(object sender, EventArgs e)
{
field.Text += '8';
if(operation == ' ')
number1 += '8';
else
number2 += '8';
}

private void nine_Click(object sender, EventArgs e)
{
field.Text += '9';
if(operation == ' ')
number1 += '9';
else
number2 += '9';
}

private void zero_Click(object sender, EventArgs e)
{
if(field.Text.Length > 0)
if(field.Text[field.Text.Length - 1] != 0)
{
field.Text += '0';
if (operation == ' ')
number1 += '0';
else
number2 += '0';
}
}

private void clean_Click(object sender, EventArgs e)
{
field.Text = "";
comaEntered = false;
operatorIndex = 0;
result = 0;
label1.Text = "";
number1 = "";
number2 = "";
}

private void point_Click(object sender, EventArgs e)
{
if(!comaEntered)
{
if(field.Text.Length == operatorIndex)
field.Text += '0';

field.Text += ',';
comaEntered = true;
}
}

private void equal_Click(object sender, EventArgs e)
{
if (!(field.Text.Contains('+') || field.Text.Contains('-') || field.Text.Contains('*') || field.Text.Contains('/')))
return;

bool operatorFinded = false;


switch(operation)
{
case '+':
result = float.Parse(number1) + float.Parse(number2);
break;
case '-':
result = float.Parse(number1) - float.Parse(number2);
break;
case '*':
result = float.Parse(number1) * float.Parse(number2);
break;
case '/':
result = float.Parse(number1) / float.Parse(number2);
break;
}
label1.Text = result + "";
}

private void cosinus_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Cos(float.Parse(number1));
else
result = (float)Math.Cos(result);

label1.Text = result + "";
}

private void tangens_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Tan(float.Parse(number1));
else
result = (float)Math.Tan(result);

label1.Text = result + "";
}

private void sinus_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Sin(float.Parse(number1));
else
result = (float)Math.Sin(result);

label1.Text = result + "";

}

private void cotangens_Click(object sender, EventArgs e)
{
if (result == 0)
result = 1 / (float)Math.Tan(float.Parse(number1));
else
result = 1 / (float)Math.Tan(result);

label1.Text = result + "";
}

private void arcsinus_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Asin(float.Parse(number1));
else
result = (float)Math.Asin(result);

label1.Text = result + "";
}

private void arccosinus_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Acos(float.Parse(number1));
else
result = (float)Math.Acos(result);

label1.Text = result + "";
}

private void arctangens_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Atan(float.Parse(number1));
else
result = (float)Math.Atan(result);

label1.Text = result + "";
}

private void arccotangens_Click(object sender, EventArgs e)
{
if (result == 0)
result = 1/(float)Math.Atan(float.Parse(number1));
else
result = 1/(float)Math.Atan(result);

label1.Text = result + "";
}

private void sqrt_Click(object sender, EventArgs e)
{
if (result == 0)
result = (float)Math.Sqrt(float.Parse(number1));
else
if(result>0)
result = (float)Math.Sqrt(result);

label1.Text = result + "";
}

private void procent_Click(object sender, EventArgs e)
{
if(result == 0)
result = float.Parse(number1) * 0.01f;
else
result *= 0.01f;

label1.Text = result + "";
}



}
}

Приложенные файлы

  • docx 24122558
    Размер файла: 386 kB Загрузок: 0

Добавить комментарий