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

Задание
Написать мини-приложение (MDI) для горнолыжного комплекса для ведения учета билетов. Рекомендации: главная форма MainForm должна быть родительской, а TicketsForm - дочерней. Также реализовать - добавление / редактирование через одну форму, экспорт в Эксель, HTML, XML, чтение из XML.
Функционал программы
- добавление / редактирование данных
- удаление данных
- перезагрузка формы и ДатаГрид
- поиск по статусу заказа с очисткой фильтра
- экспорт в Эксель
- экспорт в HTML и XML
- чтение данных из XML
- печать данных
Фрагмент программного кода
using SkiResort.BL.Interfaces;
using SkiResort.BL.Models;
using System;
using System.Windows.Forms;
namespace SkiResort.UI
{
public partial class AddTicketsForm : Form
{
private int _ticketId;
public AddTicketsForm()
{
InitializeComponent();
}
private void BtnSave_Click(object sender, EventArgs e)
{
DateTime? payment = null;
if (string.IsNullOrEmpty(txtCustomer.Text))
{
MessageBox.Show("Поле клиент не может быть пустым", "Проверка");
return;
}
if (string.IsNullOrEmpty(txtTicketType.Text))
{
MessageBox.Show("Поле тип билета не может быть пустым", "Проверка");
return;
}
if (!DateTime.TryParse(dtpOrderDate.Value.ToString(), out DateTime order))
{
MessageBox.Show("Дата заказа должна быть целым числом", "Проверка");
return;
}
if (!string.IsNullOrEmpty(dtpPaymentDate.Text))
{
DateTime datePayment;
if (!DateTime.TryParse(dtpPaymentDate.Value.ToString(), out datePayment))
{
MessageBox.Show("Дата оплаты должна быть в формате даты", "Проверка");
return;
}
if (datePayment < order)
{
MessageBox.Show("Дата оплаты должны быть больше даты заказа", "Проверка");
return;
}
payment = datePayment;
}
// Создаем объект для передачи данных
TicketDto ticket = new TicketDto()
{
Customer = txtCustomer.Text,
TicketType = txtTicketType.Text,
OrderDate = order,
PaymentDate = chkPaymentDate.Checked ? dtpPaymentDate.Value : (payment),
Price = numericPrice.Value,
Status = chkStatus.Checked
};
// Именно тут запрашиваем реализованную раннее задачу по работе с билетами
ITicketProcess ticketProcess = ProcessFactory.GetTicketProcess();
// если это новый объект - сохраняем его
if (_ticketId == 0)
{
// Сохраняем билет
ticketProcess.Add(ticket);
}
else // иначе обновляем
{
// копируем обратно идентификатор объекта
ticket.Id = _ticketId;
// обновляем
ticketProcess.Update(ticket);
}
// и закрываем форму
Close();
}
private void BtnCancel_Click(object sender, EventArgs e)
{
Close();
}
public void LoadTicket(TicketDto ticket)
{
if (ticket == null) return;
_ticketId = ticket.Id;
txtCustomer.Text = ticket.Customer;
txtTicketType.Text = ticket.TicketType;
dtpOrderDate.Value = ticket.OrderDate;
if (ticket.PaymentDate.HasValue)
{
chkPaymentDate.Checked = true;
dtpPaymentDate.Value = ticket.PaymentDate.Value;
}
else
{
chkPaymentDate.Checked = false;
dtpPaymentDate.Value = DateTime.UtcNow; // или минимальная дата
}
numericPrice.Value = ticket.Price;
chkStatus.Checked = true;
}
private void chkPaymentDate_CheckedChanged(object sender, EventArgs e)
{
dtpPaymentDate.Enabled = chkPaymentDate.Checked;
}
}
}
Пояснения по запуску программы
1. Установить SSMS 2. Присоединить БД 3. Поменять путь к БД в AppConfig 4. SkiResortData поместить строго на рабочий стол. 5. Поменять путь к данной папке в коде формы TicketsForm при необходимости. 6. Запускаем приложение и работаем.
Телеграм
-