Скриншот архива с проектом
Задание
Написать мини-приложение (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. Запускаем приложение и работаем.
-