Задание
Разработать приложение на языке 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, сменить путь к базе данных, запустить код на выполнение.
admin