Countdown timer & Stopwatch

Написана е на C# и представлява програма за обратно броене и секундомер. При изтичане на времето се чува бийпване. Прогресът може да се види и на таскбара, дори и програмата да е минимализирана. Перфектна програма, ако често варите яйца или готвите. ;)
Секундомера измерва с точност от милисекунда. Има възможност за отчитане на обиколка, пауза и записване на времената на обиколките като текстов файл.
Обратното броене и секундомера са напълно независими един от друг и могат да работят едновременно.

CT1 CT2

Реализация

Времето е изразено чрез масива timeArr, който е с размер от 3 реда и 2 колони. Колоните олицетворяват двете цифри от числата за време, а трите реда са за секунди, минути и часове.
При натискане на цифра, тя се въвежда на мястото на единиците на секундите. С всяко следващо въвеждане въведените стойности се изместват една позиция наляво. Числото намиращо се на мястото на единиците на секундите, се измества към десетиците, а нововъведеното число застава на мястото на единиците. По същия начин, с въвеждане на следващо число, се запълват минутите и часовете.
При натискане на Start, първото нещо което се случва е преобразуването на числата във време. За пример, ако е въведено числото 89 като секунди, то се преобразува на 29 секунди и се добавя една единица към минутите. Също така се декларира променливата time, която представлява цялото време в секунди. За пример, ако програмата показва 30 минути и 25 секунди, time ще бъде равно на 1825. Time се използва за прогрес-бара, намиращ се в долната част от прозореца на програмата и също така за прогрес-бара в таскбара. Тяхната минимална стойност е 0, максималната е time, а стъпката е 1.



Накрая се стартира и метода startCountdown(), който е основният метод на програмата и в него се извършва цялата дейност на обратното броене.

public async void startCountdown()
{
    do {
           seconds--;
           progressBar1.PerformStep();
           updateTime();
           addZero();
           timeToSeconds();
           taskbar.SetProgressValue(progressBar1.Value, time);
           checkMinutes();
           await Task.Delay(1000);
       } while (timeToSeconds());
}

Методът е асинхронен и се изпълнява веднъж на всяка секунда. Първото нещо което прави е да премахне една секунда. След това извършва една стъпка на прогрес-бара. updateTime() служи за изобразяване на новото време в програмата, като конвертира числата на секундите, минутите и часовете в стрингове и ги поставя в съответните лейбъли. addZero() метода добавя “0” към стринговете за изписване на времето, когато числото е съставено от една цифра. За пример, когато секундите са 5 на екрана се изобразява “05”. timeToSeconds() метода следи времето и връща true, когато има още оставащо време. Когато секундите станат 0 метода променя стойността им на 60 и в същото време премахва една единица от минутите. Когато секундите са 0 и минутите са 0, секундите се променят на 60, минутите на 59, а от часовете се взима една единица. Когато часовете са 0 и не може да се вземе единица от тях, програмата изсвирва аларма за приключване и връща стойност false, която приключва и асинхронния метод startCountdown() и обратното време спира. taskbar.SetProgressValue(progressBar1.Value, time); използва стойностите на прогрес-бара вътре в програмата, за да обнови прогрес-бара в таскбара. checkMinutes() метода се използва заедно с бутоните за добавяне и отнемане на време, като ги отключва за използване и съответно ги заключва. Когато времето е 15:25 можем да използваме бутоните “-1”, ”-5” и ”-10” за да отнемем време, но не можем да използваме “-30”, защото нямаме достатъчно налично време.
updateTime() служи за изобразяване на новото време в програмата, като конвертира числата на секундите, минутите и часовете в стрингове и ги поставя в съответните лейбъли.
addZero() метода добавя “0” към стринговете за изписване на времето, когато числото е съставено от една цифра. За пример, когато секундите са 5 на екрана се изобразява “05”.
timeToSeconds() метода следи времето и връща true, когато има още оставащо време. Когато секундите станат 0 метода променя стойността им на 60 и в същото време премахва една единица от минутите. Когато секундите са 0 и минутите са 0, секундите се променят на 60, минутите на 59, а от часовете се взима една единица. Когато часовете са 0 и не може да се вземе единица от тях, програмата изсвирва аларма за приключване и връща стойност false, която приключва и асинхронния метод startCountdown() и обратното време спира.
taskbar.SetProgressValue(progressBar1.Value, time); използва стойностите на прогрес-бара вътре в програмата, за да обнови прогрес-бара в таскбара.
checkMinutes() метода се използва заедно с бутоните за добавяне и отнемане на време, като ги отключва за използване и съответно ги заключва. Когато времето е 15:25 можем да използваме бутоните “-1”, ”-5” и ”-10” за да отнемем време, но не можем да използваме “-30”, защото нямаме достатъчно налично време.

Добавяне и отнемане на време

Това са бутони които се използват за добавяне на допълнително време или за отнемане на време, докато таймера работи. Когато таймера работи и се натисне бутона “+5”, се добавят още 5 минути към времето. Бутоните за добавяне на време могат да се използват и преди стартирането на обратното броене, като въведат първоначално време. За отнемане на време се използва Plus-minus бутона. Той превключва функционалността на бутоните с минутите, като ги променя в добавяне или отнемане. При всяко променяне на времето се променят и стойностите на двата прогрес-бара.



Beep

Когато времето изтече се чува силно бийпване. Бийпването може да се изключва чрез радио-бутона Beep, намиращ се в долната част на прозореца на програмата.


Source: Github Download: Link


← Обратно