Vstupné parametre sú počiatočný čas (napríklad čas príchodu) a časový interval - čas pracovnej doby, zmeny. Aplikáciou naprogramovanou v C# sa ľahko odsleduje nadčas, prípadne koľko času ešte ostáva do konca zmeny ;)
Zdrojový kód:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; namespace ShiftTimer { public partial class FormTimer : Form { public FormTimer() { InitializeComponent(); //set comboBox items for (int i = 0; i < 24; i++) { this.comboBoxHours.Items.Insert(i, i.ToString("D2")); } for (int j = 0; j < 60; j++) { this.comboBoxMins.Items.Insert(j, j.ToString("D2")); } } string errorMessage = String.Empty; bool status = false; TimeSpan shiftDuration = new TimeSpan(); DateTime startTime = new DateTime(); DateTime endTime = new DateTime(); DateTime actualTime = new DateTime(); TimeSpan remainTime = new TimeSpan(); bool endShift = false; private bool calculateEndTime() { try { shiftDuration = TimeSpan.Parse(this.comboBoxDuration.Text); startTime = DateTime.Parse(this.comboBoxHours.Text + ":" + this.comboBoxMins.Text); endTime = startTime + shiftDuration; this.textBoxEnd.Text = endTime.Hour.ToString("D2") + ":" + endTime.Minute.ToString("D2"); } catch (Exception ex) { errorMessage = ex.Message; return false; } return true; } private void buttonStart_Click(object sender, EventArgs e) { endShift = false; status = calculateEndTime(); if (status != true) { MessageBox.Show(errorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } this.timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { Application.DoEvents(); actualTime = DateTime.Now; remainTime = actualTime - endTime; if (actualTime < endTime) { this.textBoxTimer.ForeColor = Color.Red; this.textBoxTimer.Text = "- " + remainTime.Duration().Hours.ToString("D2") + ":" + remainTime.Duration().Minutes.ToString("D2") + ":" + remainTime.Duration().Seconds.ToString("D2"); } else { if (actualTime.Date == endTime.Date && actualTime.Hour == endTime.Hour && actualTime.Minute == endTime.Minute && actualTime.Second == endTime.Second && endShift == false) { endShift = true; MessageBox.Show("Your shift is over", "Shift Over", MessageBoxButtons.OK, MessageBoxIcon.Information); } this.textBoxTimer.ForeColor = Color.Green; this.textBoxTimer.Text = "+ " + remainTime.Duration().Hours.ToString("D2") + ":" + remainTime.Duration().Minutes.ToString("D2") + ":" + remainTime.Duration().Seconds.ToString("D2"); } } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Process.Start("http://www.projectik.eu"); } } }