Задание
Разработать приложение на языке C# для учета выполненных работ и расчета их стоимости исходя из затраченного времени и часовой ставки.
Функционал программы
-
- добавление / удаление / редактирование работ
- рассчет суммы за выполненную работу
- регистрация / авторизация пользователя
- кабинет пользователя
Фрагмент программного кода
using System;
using System.Linq;
using System.Windows;
using WMS.BL.Interfaces;
using WMS.BL.Models;
namespace WMS.UI.Windows
{
/// <summary>
/// Логика взаимодействия для AddWorksWindow.xaml
/// </summary>
public partial class AddWorksWindow : Window
{
/// <summary>
/// Список допустимых национальностей
/// </summary>
private static readonly string[] Statuses = { "Выполняется", "Завершена", "Заморожена" };
/// <summary>
/// Поле хранит идентификатор работы
/// </summary>
private int _id;
public AddWorksWindow()
{
InitializeComponent();
//Передаем допустимые значения
cbStatus.ItemsSource = Statuses;
//Задаем начальное значение
cbStatus.SelectedIndex = 0;
}
private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void BtnCalc_Click(object sender, RoutedEventArgs e)
{
double numberHours;
double hourlyRate;
numberHours = Convert.ToDouble(NumberHoursTb.Text);
hourlyRate = Convert.ToDouble(HourlyRateTb.Text);
switch (CbCalc.Text)
{
case "*":
AmountTb.Text = Convert.ToString(numberHours * hourlyRate);
break;
default:
break;
}
}
private void BtnClear_Click(object sender, RoutedEventArgs e)
{
WorkNameTb.Text = "";
StartDateTb.Text = "";
EndDateTb.Text = "";
EmployeeNameTb.Text = "";
NumberHoursTb.Text = "";
HourlyRateTb.Text = "";
AmountTb.Text = "";
CbCalc.Items.Clear();
}
private void BtnSave_Click(object sender, RoutedEventArgs e)
{
int? endDate = null;
if (string.IsNullOrEmpty(WorkNameTb.Text))
{
MessageBox.Show("Поле наименование работ не может быть пустым", "Проверка");
return;
}
if (string.IsNullOrEmpty(EmployeeNameTb.Text))
{
MessageBox.Show("Поле сотрудник не может быть пустым", "Проверка");
return;
}
if (string.IsNullOrEmpty(NumberHoursTb.Text))
{
MessageBox.Show("Поле часы не может быть пустым", "Проверка");
return;
}
if (string.IsNullOrEmpty(HourlyRateTb.Text))
{
MessageBox.Show("Поле ставка не может быть пустым", "Проверка");
return;
}
if (string.IsNullOrEmpty(AmountTb.Text))
{
MessageBox.Show("Поле сумма не может быть пустым", "Проверка");
return;
}
if (!int.TryParse(StartDateTb.Text, out int startDate))
{
MessageBox.Show("Дата начала должена быть целым числом", "Проверка");
return;
}
if (!string.IsNullOrEmpty(EndDateTb.Text))
{
if (!int.TryParse(EndDateTb.Text, out int intEnd))
{
MessageBox.Show("Дата завершения должена быть целым числом", "Проверка");
return;
}
if (intEnd < startDate)
{
MessageBox.Show("Дата завершения должна быть больше даты начала", "Проверка");
return;
}
endDate = intEnd;
}
//Создаем объект для передачи данных
WorkDto work = new WorkDto
{
//Заполняем объект данными
WorkName = WorkNameTb.Text,
StartDate = startDate,
EndDate = endDate,
EmployeeName = EmployeeNameTb.Text,
Status = cbStatus.SelectedItem.ToString(),
NumberHours = NumberHoursTb.Text,
HourlyRate = HourlyRateTb.Text,
Amount = AmountTb.Text
};
//Именно тут запрашиваем реализованную ранее задачу по работе с сотрудниками
IWorkProcess workProcess = ProcessFactory.GetWorkProcess();
//если это новый объект - сохраняем его
if (_id == 0)
{
// Сохраняем сотрудника
workProcess.Add(work);
}
else //иначе обновляем
{
//копируем обратно идентификатор объекта
work.Id = _id;
//обновляем
workProcess.Update(work);
}
//и закрываем форму
Close();
}
public void Load(WorkDto work)
{
//если объект не существует, или его статус не в списке допустимых, выходим
if (work == null || !Statuses.Contains(work.Status))
{
return;
}
//сохраняем id сотрудника
_id = work.Id;
//заполняем визуальные компоненты для отображения данных
WorkNameTb.Text = work.WorkName;
StartDateTb.Text = work.StartDate.ToString();
if (work.EndDate.HasValue)
{
EndDateTb.Text = work.EndDate.Value.ToString();
}
EmployeeNameTb.Text = work.EmployeeName;
cbStatus.SelectedItem = work.Status;
NumberHoursTb.Text = work.NumberHours;
HourlyRateTb.Text = work.HourlyRate;
AmountTb.Text = work.Amount;
}
}
}
Структура проекта

Скриншот архива с проектом

Пояснения по запуску программы
Запустить Visual Studio, сменить путь к базе данных, запустить код на выполнение.
Телеграм
-