Зміст
1.Вступ 3
2. Вживані терміни 4
3. Постановка задачі 5
4. Теоретичні відомості 6
4.1 Основи ООП 6
4.1.1Модифікатори доступу 7
5.Опис використаних елементів управління 13
6. Реалізація програми мовою С# з використанням ООП 14
7.Реалізація графічних елементів програми 15
Висновки. 19
Список використаних джерел 20
Додатки 21
1.Вступ
Об’єктно-орієнтоване програмування (ООП) – це еволюційний крок, який випливає із розвитку програмування. ООП дає нам можливість відчути себе не тільки програмістом, а й архітектором, проектуючи структуру програми, створюючи красиві форми. Створення класів за допомогою ООП можна порівняти з будуванням будинку. Спочатку ми створюємо план – описуємо клас, а пізніше будуємо будинок – створюємо об’єкт, тобто сутність класу.
Ціль моєї курсової роботи продемонструвати основи ООП на прикладівбудованого мікропроцесорабудильникаі події за допомогоютехнології Windows Forms.Без комп’ютерних технологій неможливе сьогодення.У сучасні електронні годинники убудовані , як правило, спеціалізовані мікроконтролери , і в годинників з'явилося багато сервісних функцій (будильники, мелодії, таймери ,радіо й т.д.), але мікроконтролер так само продовжує лічити періоди коливань усе того ж кристала кварцу. Сучасні годинники нагадують крихітний комп'ютер.Вони мають будильник і секундомір, а час відображають на електронному дисплеї. Електронні годинники стали складовою частиною ком'ютерів, мобільних телефонів та інших побутових приладів - таймерами оснащені мікрохвильві печі й пральні машини тощо. Будильник є практично у всіх електронних годинниках. Функцію будильника часто включають в програвач, телевізори, радіоприймачі, мобільні телефони і т. д. Існують комп'ютерні програми-будильники, що імітують роботу реального будильника.
В даній роботі потрібно було змоделювати програмне забезпечення вбудованого мікропроцесора будильника, з використанням об’єктно-орієнтованого підходу програмування та його основних принципів.
Програма має красивий і зручний інтерфейс, який забезпечує приємну роботу з нею
2. Вживані терміни
Електронний годинник - годинник, в яких для відліку часу використовуються періодичні коливання електронного генератора, перетворені в дискретні сигнали, що повторюються через 1 с , 1 хв. , 1 год., і т. д.; сигнали виводяться на цифрове табло, що показує поточний час . У сучасні електронні годинники убудований, як правило, спеціалізований мікроконтролер, і в годинників з'явилося багато сервісних функцій (будильники, мелодії, календарі,таймери й т.д.), але мікроконтролер так само продовжує лічити періоди коливань усе того ж кристала кварцу.
Будильник - годинник, в заданий момент часу подає звуковий і / або світловий сигнал.
Таймер - (англ. timer, від англ.time - відзначати час), контрольно-регулюючий пристрій або засіб, що відраховує інтервал часу , який після закінчення заданого проміжку часу автоматично включає ( виключає) технічну систему, машину або апарат виробничого або побутового призначення або сигналізує про настання моменту їх включення (виключення).Таймер можна також вважати одним з видів годинників. Таймер може бути використаний для контролю послідовності події чи процесу. У той час як секундомір відлічує від нуля для вимірювання витраченого часу, таймер відлічує з заданим інтервалом часу, як пісочний годинник. Таймери можуть бути механічні, електромеханічні, електронні (кварцеві), або з програмним забезпеченням.
Радіо - це (від латинського radio - випромінюю, radius - промінь), різновид бездротового зв'язку, при якій в якості носія сигналу використовуються радіохвилі, вільно поширювані в просторі.
Процесор -електронний блок або інтегральна схема (мікропроцесор), виконуюча машинні інструкції (код програм), головна частина апаратного забезпечення комп'ютера або програмованого логічного контролера.
3. Постановка задачі
Потрібно розробити модель програмного забезпечення годинника реального часу для будильника.
Будильник постійно відображає поточний час (години, хвилини). Управління будильником здійснюється наступними кнопками:
кнопкою режиму установки часу ;
кнопкою режиму установки часу спрацьовування ;
двома окремими кнопками для установки годин і хвилин ;
кнопкою скидання сигналу «СКИДАННЯ».
На будильнику є перемикач режиму роботи з наступними положеннями: «ВИМК», «ВКЛ», «РАДІО» і «ТАЙМЕР».
Для встановлення поточного часу потрібно натиснути на кнопку режиму установки і, при натиснутій кнопці, натискати на кнопки установки годин і хвилин. При кожному натисканні на кнопки, встановлюване значення збільшується на одну одиницю (1:00 або одну хвилину відповідно). При досягненні максимального значення провадиться скидання. Для установки часу спрацьовування будильника потрібно натиснути на кнопку режиму установки часу спрацьовування і, тримаючи кнопку натиснутою, натискати на кнопки установки годин і хвилин. Коли перемикач режиму роботи знаходиться в положенні «ВКЛ», при досягненні часу спрацьовування відбувається подача звукового сигналу протягом однієї хвилини.Сигнал можна перервати, натиснувши на кнопку «СБРОС». При цьому сигнал повинен бути відновлений через п'ять хвилин. При установці перемикача в положення «ВИМК» звуковий сигнал не подається.
Коли перемикач знаходиться в положенні «РАДІО» працює радіоприймач. При перекладі перемикача в положення «ТАЙМЕР» включається радіоприймач на тридцять хвилин, а потім години переходять у стан будильника (аналогічно положенню «ВКЛ»). При натисканні на кнопку режиму установки часу, будильник повинен відображати час спрацьовування.
4. Теоретичні відомості
4.1 Основи ООП
З розвитком програмування виникла ідея поєднати в межах однієї сутності дані і код, що безпосередньо опрацьовує ці дані. Така сутність отримала назву об’єкт, а відповідний підхід до створення програм називають об’єктно-орієнтованим програмуванням.
Об’єктно-орієнтоване програмування (ООП) – це парадигма програмування, яка розглядає програму як сукупність гнучко пов’язаних між собою об’єктів. Кожен об’єкт має суттєві характеристики, які відрізняють його від усіх інших об’єктів. Сукупність таких характеристик називається абстракцією. Розрізняють абстракції стану та поведінки об’єкта.Стан (дані об’єкта) характеризується переліком та значенням певних ознак. Поведінка (функціонал об’єкта) визначається набором операцій, які виконуються об’єктом, або над об’єктом.
Кожен об’єкт є екземпляром (представником) певного класу. Відповідно, клас – це відповідна абстракція об’єктів.
Основні переваги концепції ООП:
моделювання предметів та явищ реального світу;
можливість створювати користувацькі типи даних (класи);
приховування деталей реалізації (інкапсуляція);
можливість повторного використання коду (наслідування);
інтерпретація викликів процедур та функцій на етапі виконання (поліморфізм).
Інкапсулювання– це механізм в програмуванні, який пов’язує в одне ціле функції і дані, якими вони маніпулюють , а також захищає їх від зовнішнього доступу і неправильного застосування. В об’єктно-орієнтованій мові функції і всі необхідні дані можуть пов’язуватись таким способом, що створюється автономна структура – об’єкт. Іншими словами, об’єктом є структура, яка підтримує інкапсулювання.
В межах об’єкта функції, дані або і функції і дані можуть бути або закритими для інших об’єктів (private), або відкритими (public).
4.1.1Модифікатори доступу
Модифікатор private– забороняє доступ до полів і методів класу ззовні самого класу. Поля і методи, оголошені з модифікатором private, будуть доступні тільки в межах самого класу.
Якщо поле і метод класу визначені з модифікатором public, вони доступні ззовні оголошення базового класу чи похідних класів.Це в деякій мірі означає, що метод оголошений із зовнішнього класу може вільно звертатись до таких полів і методів. З допомогою модифікатора protected можна доступитись до полів і методів базового класу тільки для похідних класів, але не для зовнішніх по відношенню до класу методів. Модифікатор internal представляє комбінацію модифікаторів public і protected. Він обмежує доступ відмічених ним полів і методів межами одної збірки.
Успадкування – це властивість, з допомогою якої один об’єкт може набувати властивостей іншого. При цьому підтримується концепція ієрархічної класифікації. Без використання успадкування кожний об’єкт повинен явно визначати всі свої характеристики; використовуючи наслідування, об’єкт повинен визначати тільки ті якості, які роблять його унікальним в межах свого класу. Визначення нового класу (породжений клас,підклас,англ.derivedclass,англ.subclass) може базуватись на визначенні вже існуючого (базовий клас,англ.baseclass,англ.superclass). В такому випадку, новий клас отримає властивості та поведінку базового класу, та доповнить їх своїми власними. У випадку одиничного успадкування, у кожного класу може бути лише один безпосередній базовий клас. У випадку множинного успадкування, дозволяється існування декількох безпосередніх надкласів. Застосування методів успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів(поведінки) базових класів.
Разом з інкапсуляцією і успадкуванням поліморфізм також являє собою одну із важливих концепцій ООП. Застосування цієї концепції дозволяє значно полегшити розробку складних програм.
Термін поліморфізм має грецьке походження і означає «наявність багатьох форм». З поліморфізмом тісно пов’язані такі поняття,як абстрактні класи, віртуальні методи, перевантаження методів і властивостей.
Віртуальні методи– один із найважливіших прийомів реалізації поліморфізму. Вони дозволяють створювати загальний код, який може працювати разом з об’єктами базового класу, так і з об’єктами будь-якого його класу-нащадка. При цьому базовий клас визначає спосіб роботи з об’єктами і будь-які його нащадки можуть представляти конкретну реалізацію цього способу. Базовий клас може і не представляти реалізацію віртуального методу, а тільки оголошувати про його наявність. Такі методи без реалізації називаються абстрактними. Клас, який містить хоча б один такий метод називається абстрактним. Об’єкт такого класу створювати не можна. Нащадки абстрактного класу повинні обов’язково представити реалізацію для всіх його абстрактних методів, інакше, вони в свою чергу будуть абстрактними. Можливість присвоювати різну функціональність одному методу називається перевантаженням методу.
Створення класів. Методи, властивості, поля
Клас є основою для створення об’єктів. В класі визначаються дані і функціонал, який працює з цими даними. Об’єкти являються екземплярами класу. Ініціалізація змінних екземпляру відбувається в конструкторі. В класі можуть бути декілька конструкторів,тобто клас являється набором проектів, які визначають як будувати об’єкт. Дуже важливо розуміти різницю між класом і об’єктом: клас являється логічною абстракцією до тих пір,поки не буде створений об’єкт і не появиться фізична реалізація цього класу в пам’яті комп’ютера. Методи і змінні, які складають клас називаються членами класу. При визначенні класу об’являються дані, які він містить, і функціонал працюючий з цими даними. При створенні класу спочатку вказуємо ключове слово class. Найпростіші класи можуть мати тільки функціонал або тільки дані, але в реальних програмах класи включають в себе обидві складові. Дані містяться в змінних екземпляра, які визначені класом, а функціонал міститься в методах. Важливо відзначити, що в С# визначені декілька специфічних різновидів членів класу: змінні екземпляра, статичні змінні, константи, методи, конструктори, деструктори, індексатори, події, оператори і властивості.
Методи – це підпрограми, які управляють даними, визначені в класі, і в багатьох випадках забезпечують доступ до даних. За допомогою методів здійснюється взаємодія зовнішнього середовища з класом. Метод містить один і більше операторів. В професійно написаному С#-коді кожний метод виконує тільки одну задачу. Назвою метода може бути будь-який існуючий ідентифікатор.Ключові слова не можуть бути іменами методів. При оголошенні кожної змінної і методу можна встановлювати певний модифікатор доступу (за замовчуванням private). Поле – це член даних, який містить екземпляр значущого типу або посилання на вказівниковий тип. Загальномовне середовище (CLR) підтримує поля які належать як класу (статичні) так і екземпляру (нестатичні). Динамічна пам'ять для зберігання статичного поля виділяється в межах об’єкта класу, який створюється при його завантаженні в домен AppDomain, що відбувається при JIT- компілюванні будь-якого методу, який посилається на цей тип. Динамічна пам'ять для збереження екземплярних полів виділяється при створенні екземпляра даного типу.Одним із спеціальних типів членів класу, який має подібність з індексаторами, є властивість, яка зв’язує поле з методом, що забезпечує доступ до поля. В деяких попередніх програмах виникала необхідність створення поля, хоч і доступного із інших об’єктів, але такого, для якого виконувався б контроль над операціями з його значенням. Наприклад, може бути потрібно обмеження діапазону значень, які присвоюються цьому полю. Звичайно, для досягнення даної цілі можна використати закриту змінну в поєднанні з методом, який забезпечує доступ до її значення , але простіше і краще у всіх випадках використовувати властивість. Властивість складається із імені і методів доступу get і set. Методи доступу використовуються для отримання значення і присвоєння його змінній. Основною перевагою властивості є те, що ім’я може використовуватись у виразах і операціях присвоєння подібно звичайній змінній, хоча насправді при цьому автоматично викликаються методи доступу get і set. Таке використання властивості подібне на автоматичний виклик методів getі set в індексаторі.
Синтаксис властивостей виглядає наступним чином:
typename {
get {
//код методу доступу get.
}
set {
// код методу доступуset.
}
Тут параметр type вказує тип властивості, а параметр name-ім’я властивості. Після визначення властивості будь-яке використання ідентифікатора, замість вказаного name, приведе до виклику відповідного метода доступу. Метод доступу set автоматично отримує параметр value, який містить значення, що присвоюється властивості. Властивості вважають «розумними» методами, тобто методами з специфічною логікою. CLR (CommonLanguageRuntime) підтримує статичні, екземплярні, абстрактні і віртуальні властивості. Крім того, властивість може позначатись модифікатором доступу і визначатись в інтерфейсах.
/
4.2Windows Forms
Створення форми. Використання Multiple Document Interface (MDI). Події, властивості.
WindowsFormsстворює GraphicalUsesInterface (GUI) для різних програм.Форма-це графічний елемент, який появляється на робочому столі.
Форма може бути діалоговим вікном,просто вікном або вікном MDI. Компонент – це клас, який реалізує інтерфейс IComponent і визначає різні поведінки, які можуть реалізувати компоненти. Елементи управління видимі, на відміну від компонентів, яким не вистачає графічної частини. Елементи управління і компоненти WindowsForms містяться в панелі ToolboxVisualStudio .Net. Форма служить контейнером для компонентів і елементів управління. Елементи управління добавляються на форму за допомогою коду. При «перетягуванні» елемента управління із панелі Toolbox в форму VisualStudio .Net генерує цей код,який створює певний елемент управління і задає його основні властивості. Користувач може сам написати код, проте елементи управління набагато простіше створювати і модифікувати в панелі Toolbox і вікні Properties, даючи можливість VisualStudio .Net розібратись із деталями. При звертанні користувача до елементу управління з допомогою миші чи клавіатури генерується подія і обробляється спеціальними «обробниками подій». Як правило, результатом подій являється яка-небудь операція. Наприклад, натискання кнопки OK у вікні MessageBox генерує подію. У відповідь на цю подію обробник MessageBox закриває це вікно повідомлень. Клас Form - основне вікно, яке використовується програмними додатками в Windows, повністю кваліфіковані як System.Windows.Forms.Form. Точно так само клас Button фактично являється System.Windows.Forms.Button. Загальний процес проектування додатків Windows потребує створення WindowsForms із заданням її властивостей, з добавленням елементів управління зі своїми властивостями і реалізацією обробників подій. При створенні елементів управління і обробників подій VisualStudio .Net генерує велику частину коду, яка відноситься до GUI. Програмісти можуть використовувати VisualStudio .Net для виконання великої частини подібних задач графічно , шляхом «перетягування і скидання »(draganddrop) компонентів на форму і завдання властивостей у вікні Properties.
Програма з використанням багатодокументного інтерфейсу (multipledocumentinterface, MDI), представляють користувачу можливість одночасного редагування декількох документів. Вікно додатку багатодокументної програми (MDI) називається батьківським, а всі вікна в додатку – вікнами - наслідниками. Незважаючи на те, що багатодокументний додаток може мати багато вікон-наслідників, кожне із них має тільки одне батьківське вікно. Більше того, активним в кожний конкретний момент часу може бути тільки одне вікно-наслідник.
Останні не можуть бути «предками», і їх не можна перемістити за межі батьківського вікна.
5.Опис використаних елементів управління
В даній програмі використані такі елементи управління: TextBox, Label, Button,radioButton,Text, AlarmClock , Time , NewTime , TimeCall , Melody ,Timer.
Мітки представляють текстові інструкції чи інформацію до програми. Мітки визначаються класом Label , який є похідним від класу Control. Label відображає текст , який користувач не може редагувати. Після створення міток програми дуже рідко змінюється їх зміст.
Загальні властивості Label
Опис, делегат і аргументи події
Font
Гарнітура тексту
Text
Текст мітки
TextAlign
Вирівнювання тексту на елементі управління. Одне із трьох положень по горизонталі(left, center або right)і одне із трьох положень по вертикалі(top,middle або bottom)
Текстове поле(клас TextBox) - це область, в яку текст може вводитись користувачем з клавіатури, або просто відображатись. Текстове поле із паролем - це область, в яку всі введені користувачем дані приховані. По мірі вводу всі символи в такому текстовому полі відображаються у вигляді особливих символів(зазвичай *). Зміною властивості PasswordCharтекстового поля останньому задається пароль; при якому вказується символ, який буде відображати вміст. Видалення значення PasswordChar із вікна Properties повертає текстове поле у звичайний режим.Кнопка-це елемент управління, на якому користувач клацає кнопкою миші для запуску виконання тої чи іншої операції. В програмі можуть використовуватись декілька видів кнопок , таких як кнопки позиції списку(прапорці) і селективні кнопки(переключателі). Всі типи кнопок являються похідними від базового класу ButtonBase (простір імен System.Windows.Forms), який визначає загальні властивості кнопок. Будемо розглядати клас Button, який часто використовуємо для подачі команди. Текст на зовнішній поверхні Buttonназивається міткою кнопки. Компонент Timer – це невізуальний компонент, що володіє регулярно повторюються подією Tick і властивістю Interval, що дорівнює кількості мілісекунд, через які настає ця подію.
6. Реалізація програми мовою С# з використанням ООП
Дана робота була виконана у середовищі розробки Microsoft Visual Studio 2010 мовою C#. C # є об'єктно-орієнтованою мовою програмування і аналогічно іншим сучасним мовам групує пов'язані поля, методи, властивості і події в структури даних, які називаються класами.
Використання класів дуже корисне при створенні великих проектів . В даній програмі були використані класи :Time , NewTime , TimeCall , Melody , AlarmClock.
Time– клас який містить у собі поля, властивості, та методи, для відображення поточного часу, та його обробки .
NewTime– клас який містить у собі поля, властивості, та методи, для зміни внутрішнього часу.
TimeCall – клас який містить у собі поля, властивості, та методи, для зміни часу спрацювання сигналу.
Melody – клас для обробки звукових сигналів.
AlarmClock – клас-форма, це вікно даної програми, яке реалізує інтерфейс між програмою та користувачем, також містіть внутрішній годинник.
7.Реалізація графічних елементів програми
В даній програмі використовуються перелічені вище елементи управління.
Вони мають такий вигляд :
/
Стартове вікно знаходиться в положенні “Clock”.
/
ВікноAlarmClock постійно відображує поточний час, та має наступні перемикачі:
“Change of time” ;
“Time Call” ;
“Clock” ;
“Radio” ;
Положення перемикача “Changeoftime” призначене для встановлення часу :
/
Вікно «AlarmClock» містить у собі :
текстове поле для відображення годин та хвилин ;
кнопки для збільшення годин та хвилин на одну одиницю ;
кнопки для зменшення годин та хвилин на одну одиницю ;
кнопку “ok” для встановлення заданого часу ;
Положення перемикача “TimeCall ” призначене для встановлення часу спрацьовування сигналу .
/
Перемикач “TimeCall ”містить у собі :
текстове поле для відображення годин та хвилин ;
кнопки для збільшення годин та хвилин на одну одиницю ;
кнопки для зменшення годин та хвилин на одну одиницю ;
кнопку -перемикач“ON/OFF” для вмикання та вимикання будильника;
кнопку “ok” для встановлення заданого часу ;
Положення подачі сигналу.
/
Положення перемикача “Radio” для прослуховування радіо.
/
Перемикач “Radio ”містить у собі :
текстове поле для відображення стану радіо;
кнопку “ON” для ввімкнення радіо;
кнопку “OFF” для вимкнення радіо;
кнопку “TimerOn” для активації таймера, який вмикає радіо на тридцять хвилин;
кнопку “TimerOff” для вимкнення таймера;
текстове поле для відображення стану таймера;
Приклад роботи радіо :Вмикаємо або вимикаємо перемикач “Radio ” :
/
/
Висновки.
В ході виконання роботи мовою С# в середовищі VisualStudio2010 реалізовано програму забезпечення вбудованого мікропроцесора будильника.Також продемонстровано на прикладі можливості об’єктно-орієнтованого програмування.
Результати :
створено форму вікна з перемикачем для встановлення часу ;
здійснено спрацювання звукового сигналу для встановлення часу ;
здійснено відображення поточного часу ;
створено форму вікна з перемикачем для прослуховування радіо з кнопками для ввімкнення і вимкнення радіо;
здійснено спрацювання кнопок для активації таймера, який вмикає радіо ;
створено форму вікна для відображення стану таймера;
створено форму вікна для вимкнення сигналу і для повторного спрацювання сигналу;
Варто відзначити, що:
Технологія Windows Forms дає можливість створювати зручний інтерфейс користувача.
Об’єктно-орієнтоване програмування дозволяє створювати програму, як набір користувацьких типів даних (класів), приховувати деталі реалізації, використовувати повторний код, інтерпретувати виклики процедур та функцій на етапі виконання (втілюючи основи ООП – інкапсулювання, поліморфізм, успадкування).
Список використаних джерел
1.ДжеффриРихтер - CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке С#. Мастер-класс./Пер. с англ. — М.: Издательство «РусскаяРедакция»; СПб.: Питер, 2007. — 656 стр. : ил.
2.КристианНейгел, БиллИвьен, ДжейГлинн, Карли Уотсон, Морган Скиннер - С# 2008 и платформа .Net 3.5 для профессионалов.
3.Шилдт, Герберт. С# 3.0: Полноеруководство.: Пер. с англ. — М.: 000 "И.Д. Вильямс", 2010. — 992 с.
4.А.В. Фролов, Г.В. Фролов - Язык С#. Самоучитель. – М.: Диалог-Мифи, 2003.-560с.
5.В. А. Биллиг“Основыпрограммирования на C# “.
Додатки
Текст програми
мікропроцесор будильник програма
Клас AlarmClock
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Media;
namespaceBudilnik
{
publicpartialclassAlarmClock : Form
{
Timetime = newTime();
NewTimenTime = newNewTime();
TimeColltimeC = newTimeColl();
DateTimedatetime = newDateTime();
Melodymel = newMelody();
int _sec = 60;
int _min = 29;
int _sec_2 = 60;
int _min_2 = 9;
int _sec_3 = 60;
publicAlarmClock()
{
InitializeComponent();
radioButton2_Clock.Checked = true;
this.timer();
}
privatevoid Form1_Load(object sender, EventArgs e)
{
datetime = DateTime.Now;
time.hour = datetime.Hour;
time.minute = datetime.Minute;
time.second = datetime.Second;
radioButton_ShowTime.Visible = false;
}
privatevoid timer()
{
timer1.Enabled = true;
timer1.Interval = 1000;
timer2.Interval = 1000;
timer3.Interval = 1000;
timer4.Interval = 1000;
}
privatevoidMyNowTime()
{
textBoxH.Text = Convert.ToString(time.hour);
nTime.newHour = int.Parse(textBoxH.Text);
textBoxMin.Text = Convert.ToString(time.minute);
nTime.newMinute = int.Parse(textBoxMin.Text);
}
privatevoidradioButton_Change_of_time_CheckedChanged(object sender, EventArgs e)
{
checkBox_Alarm.Visible = false;
buttonStop.Visible = false;
buttonAgain.Visible = false;
labelTimerRadio.Visible = false;
buttonTimerOn.Visible = false;
buttonTimerOff.Visible = false;
buttonOK.Visible = true;
labelVremya.Visible = false;
buttonH_p_1.Visible = true;
buttonH_m_1.Visible = true;
buttonMin_p_1.Visible = true;
buttonMin_m_1.Visible = true;
textBoxH.Visible = true;
textBoxMin.Visible = true;
textBoxDvoitochie.Visible = true;
labelVr_zvonka.Visible = true;
labelRadio.Visible = false;
button_RadioON.Visible = false;
button_RadioOFF.Visible = false;
MyNowTime();
}
privatevoid radioButton3_Time_Call_CheckedChanged(object sender, EventArgs e)
{
checkBox_Alarm.Visible = true;
buttonStop.Visible = false;
buttonAgain.Visible = false;
labelTimerRadio.Visible = false;
buttonTimerOn.Visible = false;
buttonTimerOff.Visible = false;
buttonOK.Visible = true;
labelVremya.Visible = false;
buttonH_p_1.Visible = true;
buttonH_m_1.Visible = true;
buttonMin_p_1.Visible = true;
buttonMin_m_1.Visible = true;
textBoxH.Visible = true;
textBoxMin.Visible = true;
textBoxDvoitochie.Visible = true;
labelVr_zvonka.Visible = false;
labelRadio.Visible = false;
button_RadioON.Visible = false;
button_RadioOFF.Visible = false;
MyNowTime();
}
privatevoid radioButton2_Clock_CheckedChanged(object sender, EventArgs e)
{
checkBox_Alarm.Visible = false;
labelTimerRadio.Visible = false;
buttonTimerOn.Visible = false;
buttonTimerOff.Visible = false;
buttonOK.Visible = false;
labelVremya.Visible = true;
buttonH_p_1.Visible = false;
buttonH_m_1.Visible = false;
buttonMin_p_1.Visible = false;
buttonMin_m_1.Visible = false;
textBoxH.Visible = false;
textBoxMin.Visible = false;
textBoxDvoitochie.Visible = false;
labelVr_zvonka.Visible = true;
labelRadio.Visible = false;
button_RadioON.Visible = false;
button_RadioOFF.Visible = false;
buttonStop.Visible = false;
buttonAgain.Visible = false;
}
privatevoidradioButton_Radio_CheckedChanged(object sender, EventArgs e)
{
checkBox_Alarm.Visible = false;
labelTimerRadio.Visible = true;
buttonTimerOn.Visible = true;
buttonTimerOff.Visible = true;
labelTimerRadio.Visible = true;
labelVremya.Visible = false;
labelVr_zvonka.Visible = false;
labelRadio.Visible = true;
textBoxH.Visible = false;
textBoxDvoitochie.Visible = false;
textBoxMin.Visible = false;
buttonTimerOn.Visible = true;
buttonTimerOff.Visible = true;
buttonH_m_1.Visible = false;
buttonH_p_1.Visible = false;
buttonMin_m_1.Visible = false;
buttonMin_p_1.Visible = false;
buttonOK.Visible = false;
button_RadioOFF.Visible = true;
button_RadioON.Visible = true;
buttonStop.Visible = false;
buttonAgain.Visible = false;
}
privatevoidradioButtonshowTime_CheckedChanged(object sender, EventArgs e)
{
checkBox_Alarm.Visible = false;
labelTimerRadio.Visible = false;
buttonTimerOn.Visible = false;
buttonTimerOff.Visible = false;
buttonOK.Visible = false;
labelVremya.Visible = true;
buttonH_p_1.Visible = false;
buttonH_m_1.Visible = false;
buttonMin_p_1.Visible = false;
buttonMin_m_1.Visible = false;
buttonAgain.Visible = true;
buttonStop.Visible = true;
textBoxH.Visible = false;
textBoxMin.Visible = false;
textBoxDvoitochie.Visible = false;
labelVr_zvonka.Visible = true;
labelRadio.Visible = false;
button_RadioON.Visible = false;
button_RadioOFF.Visible = false;
}
privatevoid timer1_Tick(object sender, EventArgs e)
{
time.second++;
labelVremya.Text = time.hour + ":" + time.minute + ":" + time.second;
if (time.second == 59)
{
time.second = 0;
labelVremya.Text = time.hour + ":" + time.minute + ":" + time.second;
time.minute++;
if (time.minute>= 59)
{
time.minute = 0;
labelVremya.Text = time.hour + ":" + time.minute + ":" + time.second;
time.hour++;
if (time.hour>= 23)
{
time.hour = 0;
labelVremya.Text = time.hour + ":" + time.minute + ":" + time.second;
}
}
}
if ((time.hour == timeC.hourCall&&time.minute == timeC.minuteCall&&time.second == timeC.secondCall) &&checkBox_Alarm.Checked == true)
{
Melody._mel.PlayLooping();
radioButton_ShowTime.Checked = true;
timer4.Enabled = true;
timer4.Start();
}
}
privatevoid timer2_Tick(object sender, EventArgs e)
{
_sec--;
labelTimerRadio.Text = "0" + ":" + _min + ":" + _sec;
if (_sec == 0)
{
_sec = 60;
labelTimerRadio.Text = "0" + ":" + _min + ":" + _sec;
_min--;
if (_min == 0)
{
labelTimerRadio.Text = "Timer OFF";
labelRadio.Text = "Radio OFF";
Melody._sting.Stop();
timer2.Stop();
timer2.Enabled = false;
_sec = 60;
_min = 29;
radioButton2_Clock.Checked = true;
}
}
}
privatevoid timer3_Tick(object sender, EventArgs e)
{
_sec_2--;
if (_sec_2 == 0)
{
_min_2--;
_sec_2 = 60;
if (_min_2 == 0)
{
radioButton_ShowTime.Checked = true;
Melody._mel.PlayLooping();
timer4.Enabled = true;
timer4.Start();
_sec_2 = 60;
_min_2 = 9;
timer3.Enabled = false;
timer3.Stop();
}
}
}
privatevoid timer4_Tick(object sender, EventArgs e)
{
_sec_3--;
if (_sec_3 == 0)
{
_sec_3 = 60;
Melody._mel.Stop();
timer4.Enabled = false;
timer4.Stop();
radioButton_ShowTime.Checked = true;
labelVr_zvonka.Text = "";
}
}
privatevoidbutton_RadioON_Click(object sender, EventArgs e)
{
labelRadio.Text = "Radio ON";
Melody._sting.PlayLooping();
}
privatevoidbutton_RadioOFF_Click(object sender, EventArgs e)
{
Melody._sting.Stop();
labelRadio.Text = "RadioOFF";
timer2.Stop();
labelTimerRadio.Text = "Timer OFF";
_sec = 60;
_min = 29;
}
privatevoid buttonH_p_1_Click(object sender, EventArgs e)
{
nTime.NewHourP1();
textBoxH.Text = Convert.ToString(nTime.newHour);
}
privatevoid buttonH_m_1_Click(object sender, EventArgs e)
{
nTime.NewHourM1();
textBoxH.Text = Convert.ToString(nTime.newHour);
}
privatevoid buttonMin_p_1_Click(object sender, EventArgs e)
{
nTime.NewMinuteP1();
textBoxMin.Text = Convert.ToString(nTime.newMinute);
}
privatevoid buttonMin_m_1_Click(object sender, EventArgs e)
{
nTime.NewMinuteM1();
textBoxMin.Text = Convert.ToString(nTime.newMinute);
}
privatevoidbuttonOK_Click(object sender, EventArgs e)
{
datetime = DateTime.Now;
if (radioButton_Change_of_time.Checked == true)
{
time.hour = nTime.newHour;
time.minute = nTime.newMinute;
time.second = datetime.Second;
radioButton2_Clock.Checked = true;
}
else
{
timeC.hourCall = nTime.newHour;
timeC.minuteCall = nTime.newMinute;
timeC.secondCall = 0;
labelVr_zvonka.Text = timeC.hourCall + ":" + timeC.minuteCall;
radioButton2_