This commit is contained in:
Dariaaaa6 2024-12-11 09:33:12 +04:00
parent eb6aaa25a6
commit 310a3a8117
72 changed files with 3846 additions and 2729 deletions

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Entities;
public class Airplane
{
public int Id { get; private set; }
public string Country { get; private set; } = string.Empty;
public string Model { get; private set; } = string.Empty;
public int Capacity { get; private set; }
public static Airplane CreateEntity(int id, string country, string model, int capacity)
{
return new Airplane
{
Id = id,
Country = country ?? string.Empty,
Model = model ?? string.Empty,
Capacity = capacity
};
}
}

View File

@ -1,19 +0,0 @@
namespace YourNamespace.Entities
{
public class Airport
{
public int Id { get; private set; }
public string Name { get; private set; }
public string Location { get; private set; }
public static Airport CreateEntity(int id, string name, string location)
{
return new Airport
{
Id = id,
Name = name ?? string.Empty,
Location = location ?? string.Empty
};
}
}
}

View File

@ -1,23 +1,29 @@
using YourNamespace.Entities.Enums;
using ProjectAirline.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YourNamespace.Entities
namespace ProjectAirline.Entities;
public class Employee
{
public class Employee
public int Id { get; private set; }
public string FirstName { get; private set; } = string.Empty;
public string LastName { get; private set; } = string.Empty;
public string ContactInformation { get; private set; } = string.Empty;
public EmployeePost EmployeePost { get; private set; }
public static Employee CreateEntity(int id, string first, string last, string contactInfo,
EmployeePost employeePost)
{
public int Id { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public EmployeePost EmployeePost { get; private set; }
public static Employee CreateEntity(int id, string firstName, string lastName, EmployeePost employeePost)
return new Employee
{
return new Employee
{
Id = id,
FirstName = firstName ?? string.Empty,
LastName = lastName ?? string.Empty,
EmployeePost = employeePost
};
}
Id = id,
FirstName = first ?? string.Empty,
LastName = last ?? string.Empty,
ContactInformation = contactInfo ?? string.Empty,
EmployeePost = employeePost
};
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Entities;
public class EmployeeFlight
{
public int Id { get; private set; }
public int EmployeeId { get; private set; }
public int FlightId { get; private set; }
public int HoursWorked { get; private set; }
public static EmployeeFlight CreateOperation(int id, int employeeId, int flightId, int hoursWorked)
{
return new EmployeeFlight
{
Id = id,
EmployeeId = employeeId,
FlightId = flightId,
HoursWorked = hoursWorked
};
}
}

View File

@ -1,10 +1,18 @@
namespace YourNamespace.Entities.Enums
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Entities.Enums;
public enum EmployeePost
{
public enum EmployeePost
{
None = 0,
Pilot = 1,
Stewardess = 2,
GroundStaff = 3
}
None = 0,
FlightAttendant = 1,
FlightEngineer = 2,
Pilot = 3
}

View File

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Entities.Enums;
[Flags]
public enum FoodPreferences
{
None = 0,
SpicyFood = 1,
Meat = 2,
Sweets = 4,
BitterFood = 8
}

View File

@ -1,25 +1,37 @@
namespace YourNamespace.Entities
{
public class Flight
{
public int Id { get; private set; }
public int FlightNumber { get; private set; }
public DateTime DepartureDateTime { get; private set; }
public DateTime ArrivalDateTime { get; private set; }
public int PlaneId { get; private set; }
public int AirportId { get; private set; }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public static Flight CreateEntity(int id, int flightNumber, DateTime departureDateTime, DateTime arrivalDateTime, int planeId, int airportId)
namespace ProjectAirline.Entities;
public class Flight
{
public int Id { get; private set; }
public int AirplaneID { get; private set; }
public DateTime DepartureTime { get; private set; }
public DateTime ArrivalTime { get; private set; }
public string Destination { get; private set; } = string.Empty;
public string DeparturePoint { get; private set; } = string.Empty;
public int TicketPrice { get; private set; }
public IEnumerable<EmployeeFlight> EmployeeFlights { get; private set; } = [];
public static Flight CreateOperation(int id, int airPlaneID, string destination, string departurePoint, int ticketPrice,
IEnumerable<EmployeeFlight> employeeFlights)
{
return new Flight
{
return new Flight
{
Id = id,
FlightNumber = flightNumber,
DepartureDateTime = departureDateTime,
ArrivalDateTime = arrivalDateTime,
PlaneId = planeId,
AirportId = airportId
};
}
Id = id,
AirplaneID = airPlaneID,
DepartureTime = DateTime.Now,
ArrivalTime = DateTime.Now,
Destination = destination ?? string.Empty,
DeparturePoint = departurePoint ?? string.Empty,
TicketPrice = ticketPrice,
EmployeeFlights = employeeFlights
};
}
}

View File

@ -1,21 +1,28 @@
namespace YourNamespace.Entities
{
public class Passenger
{
public int Id { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string PassportNumber { get; private set; }
using ProjectAirline.Entities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public static Passenger CreateEntity(int id, string firstName, string lastName, string passportNumber)
namespace ProjectAirline.Entities;
public class Passenger
{
public int Id { get; private set; }
public FoodPreferences FoodPreferences { get; private set; }
public string FirstName { get; private set; } = string.Empty;
public string LastName { get; private set; } = string.Empty;
public DateTime DateBirth { get; private set; }
public static Passenger CreateEntity(int id, FoodPreferences foodPreferences, string first, string last)
{
return new Passenger
{
return new Passenger
{
Id = id,
FirstName = firstName ?? string.Empty,
LastName = lastName ?? string.Empty,
PassportNumber = passportNumber ?? string.Empty
};
}
Id = id,
FoodPreferences = foodPreferences,
FirstName = first ?? string.Empty,
LastName = last ?? string.Empty,
DateBirth = DateTime.Now
};
}
}

View File

@ -1,19 +0,0 @@
namespace YourNamespace.Entities
{
public class Plane
{
public int Id { get; private set; }
public string Model { get; private set; }
public int Capacity { get; private set; }
public static Plane CreateEntity(int id, string model, int capacity)
{
return new Plane
{
Id = id,
Model = model ?? string.Empty,
Capacity = capacity
};
}
}
}

View File

@ -1,23 +1,30 @@
namespace YourNamespace.Entities
{
public class Ticket
{
public int Id { get; private set; }
public int PassengerId { get; private set; }
public int FlightId { get; private set; }
public DateTime DateBuy { get; private set; }
public int TicketPrice { get; private set; }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public static Ticket CreateEntity(int id, int passengerId, int flightId, DateTime dateBuy, int ticketPrice)
namespace ProjectAirline.Entities;
public class Ticket
{
public int Id { get; private set; }
public int FlightID { get; private set; }
public int PassengerID { get; private set; }
public int TicketPrice { get; private set; }
public DateTime DateBuy { get; private set; }
public static Ticket CreateTicket(int id, int flightID, int passengerID, int ticketPrice)
{
return new Ticket
{
return new Ticket
{
Id = id,
PassengerId = passengerId,
FlightId = flightId,
DateBuy = dateBuy,
TicketPrice = ticketPrice
};
}
Id = id,
FlightID = flightID,
PassengerID = passengerID,
TicketPrice = ticketPrice,
DateBuy = DateTime.Now
};
}
}

View File

@ -0,0 +1,138 @@
namespace ProjectAirline
{
partial class FormAirline
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
menuStrip = new MenuStrip();
справочникиToolStripMenuItem = new ToolStripMenuItem();
AirplaneToolStripMenuItem = new ToolStripMenuItem();
EmployeeToolStripMenuItem = new ToolStripMenuItem();
PassengerToolStripMenuItem = new ToolStripMenuItem();
операцииToolStripMenuItem = new ToolStripMenuItem();
FlightToolStripMenuItem = new ToolStripMenuItem();
TicketToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem();
menuStrip.SuspendLayout();
SuspendLayout();
//
// menuStrip
//
menuStrip.ImageScalingSize = new Size(20, 20);
menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Size = new Size(782, 28);
menuStrip.TabIndex = 0;
menuStrip.Text = "menuStrip1";
//
// справочникиToolStripMenuItem
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { AirplaneToolStripMenuItem, EmployeeToolStripMenuItem, PassengerToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(117, 24);
справочникиToolStripMenuItem.Text = "Справочники";
//
// AirplaneToolStripMenuItem
//
AirplaneToolStripMenuItem.Name = "AirplaneToolStripMenuItem";
AirplaneToolStripMenuItem.Size = new Size(173, 26);
AirplaneToolStripMenuItem.Text = "Самолёты";
AirplaneToolStripMenuItem.Click += AirplaneToolStripMenuItem_Click;
//
// EmployeeToolStripMenuItem
//
EmployeeToolStripMenuItem.Name = "EmployeeToolStripMenuItem";
EmployeeToolStripMenuItem.Size = new Size(173, 26);
EmployeeToolStripMenuItem.Text = "Работники";
EmployeeToolStripMenuItem.Click += EmployeeToolStripMenuItem_Click;
//
// PassengerToolStripMenuItem
//
PassengerToolStripMenuItem.Name = "PassengerToolStripMenuItem";
PassengerToolStripMenuItem.Size = new Size(173, 26);
PassengerToolStripMenuItem.Text = "Пассажиры";
PassengerToolStripMenuItem.Click += PassengerToolStripMenuItem_Click;
//
// операцииToolStripMenuItem
//
операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { FlightToolStripMenuItem, TicketToolStripMenuItem });
операцииToolStripMenuItem.Name = "операцииToolStripMenuItem";
операцииToolStripMenuItem.Size = new Size(95, 24);
операцииToolStripMenuItem.Text = "Операции";
//
// FlightToolStripMenuItem
//
FlightToolStripMenuItem.Name = "FlightToolStripMenuItem";
FlightToolStripMenuItem.Size = new Size(211, 26);
FlightToolStripMenuItem.Text = "Рейсы";
FlightToolStripMenuItem.Click += FlightToolStripMenuItem_Click;
//
// TicketToolStripMenuItem
//
TicketToolStripMenuItem.Name = "TicketToolStripMenuItem";
TicketToolStripMenuItem.Size = new Size(211, 26);
TicketToolStripMenuItem.Text = "Покупка билетов";
TicketToolStripMenuItem.Click += TicketToolStripMenuItem_Click;
//
// отчетыToolStripMenuItem
//
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
отчетыToolStripMenuItem.Size = new Size(73, 24);
отчетыToolStripMenuItem.Text = "Отчеты";
//
// FormAirline
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
BackgroundImage = Properties.Resources.samolet;
BackgroundImageLayout = ImageLayout.Stretch;
ClientSize = new Size(782, 453);
Controls.Add(menuStrip);
MainMenuStrip = menuStrip;
Name = "FormAirline";
StartPosition = FormStartPosition.CenterScreen;
Text = "Авиалинии";
menuStrip.ResumeLayout(false);
menuStrip.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private MenuStrip menuStrip;
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem операцииToolStripMenuItem;
private ToolStripMenuItem отчетыToolStripMenuItem;
private ToolStripMenuItem AirplaneToolStripMenuItem;
private ToolStripMenuItem EmployeeToolStripMenuItem;
private ToolStripMenuItem PassengerToolStripMenuItem;
private ToolStripMenuItem FlightToolStripMenuItem;
private ToolStripMenuItem TicketToolStripMenuItem;
}
}

View File

@ -1,24 +1,23 @@
using System;
using System.Windows.Forms;
using ProjectAirline.Forms;
using Unity;
namespace YourNamespace.Forms
namespace ProjectAirline
{
public partial class FormMain : Form
public partial class FormAirline : Form
{
private readonly IUnityContainer _container;
public FormMain(IUnityContainer container)
public FormAirline(IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
}
private void PassengersToolStripMenuItem_Click(object sender, EventArgs e)
private void AirplaneToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormPassengers>().ShowDialog();
_container.Resolve<FormAirplanes>().ShowDialog();
}
catch (Exception ex)
{
@ -26,7 +25,7 @@ namespace YourNamespace.Forms
}
}
private void EmployeesToolStripMenuItem_Click(object sender, EventArgs e)
private void EmployeeToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
@ -38,7 +37,19 @@ namespace YourNamespace.Forms
}
}
private void FlightsToolStripMenuItem_Click(object sender, EventArgs e)
private void PassengerToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormPassengers>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void FlightToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
@ -50,19 +61,7 @@ namespace YourNamespace.Forms
}
}
private void PlanesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormPlanes>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void TicketsToolStripMenuItem_Click(object sender, EventArgs e)
private void TicketToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
@ -73,17 +72,5 @@ namespace YourNamespace.Forms
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void AirportsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormAirports>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,142 @@
namespace ProjectAirline.Forms
{
partial class FormAirplane
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
label1 = new Label();
label2 = new Label();
label3 = new Label();
textBoxCountry = new TextBox();
textBoxModel = new TextBox();
numericUpDownCapacity = new NumericUpDown();
buttonAdd = new Button();
buttonCancel = new Button();
((System.ComponentModel.ISupportInitialize)numericUpDownCapacity).BeginInit();
SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(31, 41);
label1.Name = "label1";
label1.Size = new Size(61, 20);
label1.TabIndex = 0;
label1.Text = "Страна:";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(31, 106);
label2.Name = "label2";
label2.Size = new Size(66, 20);
label2.TabIndex = 1;
label2.Text = "Модель:";
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(31, 167);
label3.Name = "label3";
label3.Size = new Size(103, 20);
label3.TabIndex = 2;
label3.Text = "Вместимость:";
//
// textBoxCountry
//
textBoxCountry.Location = new Point(155, 41);
textBoxCountry.Name = "textBoxCountry";
textBoxCountry.Size = new Size(150, 27);
textBoxCountry.TabIndex = 3;
//
// textBoxModel
//
textBoxModel.Location = new Point(155, 99);
textBoxModel.Name = "textBoxModel";
textBoxModel.Size = new Size(150, 27);
textBoxModel.TabIndex = 4;
//
// numericUpDownCapacity
//
numericUpDownCapacity.Location = new Point(155, 165);
numericUpDownCapacity.Name = "numericUpDownCapacity";
numericUpDownCapacity.Size = new Size(150, 27);
numericUpDownCapacity.TabIndex = 5;
//
// buttonAdd
//
buttonAdd.Location = new Point(45, 244);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(101, 43);
buttonAdd.TabIndex = 6;
buttonAdd.Text = "Сохранить";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(177, 244);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(100, 43);
buttonCancel.TabIndex = 7;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// FormAirplane
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(403, 356);
Controls.Add(buttonCancel);
Controls.Add(buttonAdd);
Controls.Add(numericUpDownCapacity);
Controls.Add(textBoxModel);
Controls.Add(textBoxCountry);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Name = "FormAirplane";
StartPosition = FormStartPosition.CenterParent;
Text = "Самолёт";
((System.ComponentModel.ISupportInitialize)numericUpDownCapacity).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label label1;
private Label label2;
private Label label3;
private TextBox textBoxCountry;
private TextBox textBoxModel;
private NumericUpDown numericUpDownCapacity;
private Button buttonAdd;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,78 @@
using ProjectAirline.Entities;
using ProjectAirline.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProjectAirline.Forms
{
public partial class FormAirplane : Form
{
private readonly IAirplaneRepository _airplaneRepository;
private int? _airplaneId;
public int Id
{
set
{
try
{
var airplane = _airplaneRepository.ReadAirplaneById(value);
if (airplane == null)
{
throw new InvalidDataException(nameof(airplane));
}
textBoxCountry.Text = airplane.Country;
textBoxModel.Text = airplane.Model;
numericUpDownCapacity.Value = airplane.Capacity;
_airplaneId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormAirplane(IAirplaneRepository airplaneRepository)
{
InitializeComponent();
_airplaneRepository = airplaneRepository ?? throw new ArgumentNullException(nameof(airplaneRepository));
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxCountry.Text) || string.IsNullOrWhiteSpace(textBoxModel.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_airplaneId.HasValue)
{
_airplaneRepository.UpdateAirplane(CreateAirplane(_airplaneId.Value));
}
else
{
_airplaneRepository.CreateAirplane(CreateAirplane(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Airplane CreateAirplane(int id) => Airplane.CreateEntity(id, textBoxCountry.Text,
textBoxModel.Text, Convert.ToInt32(numericUpDownCapacity.Value));
}
}

View File

@ -0,0 +1,131 @@
namespace ProjectAirline.Forms
{
partial class FormAirplanes
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAirplanes));
panel1 = new Panel();
buttonUpd = new Button();
buttonDel = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(buttonUpd);
panel1.Controls.Add(buttonDel);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(612, 0);
panel1.Name = "panel1";
panel1.Size = new Size(187, 468);
panel1.TabIndex = 0;
//
// buttonUpd
//
buttonUpd.BackColor = SystemColors.ButtonHighlight;
buttonUpd.BackgroundImage = (Image)resources.GetObject("buttonUpd.BackgroundImage");
buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpd.Location = new Point(57, 203);
buttonUpd.Name = "buttonUpd";
buttonUpd.Size = new Size(88, 79);
buttonUpd.TabIndex = 2;
buttonUpd.UseVisualStyleBackColor = false;
buttonUpd.Click += ButtonUpd_Click;
//
// buttonDel
//
buttonDel.BackColor = SystemColors.ButtonHighlight;
buttonDel.BackgroundImage = (Image)resources.GetObject("buttonDel.BackgroundImage");
buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
buttonDel.Location = new Point(57, 120);
buttonDel.Name = "buttonDel";
buttonDel.Size = new Size(88, 77);
buttonDel.TabIndex = 1;
buttonDel.UseVisualStyleBackColor = false;
buttonDel.Click += ButtonDel_Click;
//
// buttonAdd
//
buttonAdd.BackColor = SystemColors.ButtonHighlight;
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(57, 40);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(88, 74);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = false;
buttonAdd.Click += ButtonAdd_Click;
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(612, 468);
dataGridView.TabIndex = 1;
//
// FormAirplanes
//
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(799, 468);
Controls.Add(dataGridView);
Controls.Add(panel1);
Name = "FormAirplanes";
StartPosition = FormStartPosition.CenterParent;
Text = "Самолёты";
Load += FormAirplanes_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private Panel panel1;
private Button buttonUpd;
private Button buttonDel;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -1,23 +1,30 @@
using System;
using ProjectAirline.Repositories;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using Unity;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormAirports : Form
public partial class FormAirplanes : Form
{
private readonly IUnityContainer _container;
private readonly IAirportRepository _airportRepository;
private readonly IAirplaneRepository _airplaneRepository;
public FormAirports(IUnityContainer container, IAirportRepository airportRepository)
public FormAirplanes(IUnityContainer container, IAirplaneRepository airplaneRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_airportRepository = airportRepository ?? throw new ArgumentNullException(nameof(airportRepository));
_airplaneRepository = airplaneRepository ?? throw new ArgumentNullException(nameof(airplaneRepository));
}
private void FormAirports_Load(object sender, EventArgs e)
private void FormAirplanes_Load(object sender, EventArgs e)
{
try
{
@ -25,7 +32,8 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при загрузке",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@ -33,7 +41,7 @@ namespace YourNamespace.Forms
{
try
{
_container.Resolve<FormAirport>().ShowDialog();
_container.Resolve<FormAirplane>().ShowDialog();
LoadList();
}
catch (Exception ex)
@ -42,25 +50,6 @@ namespace YourNamespace.Forms
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormAirport>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
@ -73,7 +62,7 @@ namespace YourNamespace.Forms
}
try
{
_airportRepository.DeleteAirport(findId);
_airplaneRepository.DeleteAirplane(findId);
LoadList();
}
catch (Exception ex)
@ -82,18 +71,36 @@ namespace YourNamespace.Forms
}
}
private void LoadList() => dataGridViewData.DataSource = _airportRepository.ReadAirports();
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormAirplane>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridView.DataSource = _airplaneRepository.ReadAirplanes();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
if (dataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
}
}

View File

@ -0,0 +1,470 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonUpd.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d
5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQVia
RIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
Xm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSM
fQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW
9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq9zwW9MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZ
FZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsj
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAsFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAFQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAUAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU4AEYAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADJ4E4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJ88AEAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAvOckggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp4EAkkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAEgAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkgEAkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAgAkkksoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEgdzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EEA5uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEk4JuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk/
PJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJ
uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuz
oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuz4AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAKkPJuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJryAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AKkvmJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkokeoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK
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
YsTyO4+SUvkJVWbq3j/xx//Z
</value>
</data>
<data name="buttonDel.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z
</value>
</data>
</root>

View File

@ -1,118 +0,0 @@
namespace YourNamespace.Forms
{
partial class FormAirport
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.labelName = new System.Windows.Forms.Label();
this.labelLocation = new System.Windows.Forms.Label();
this.textBoxName = new System.Windows.Forms.TextBox();
this.textBoxLocation = new System.Windows.Forms.TextBox();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// labelName
//
this.labelName.AutoSize = true;
this.labelName.Location = new System.Drawing.Point(12, 22);
this.labelName.Name = "labelName";
this.labelName.Size = new System.Drawing.Size(57, 13);
this.labelName.TabIndex = 0;
this.labelName.Text = "Название:";
//
// labelLocation
//
this.labelLocation.AutoSize = true;
this.labelLocation.Location = new System.Drawing.Point(12, 58);
this.labelLocation.Name = "labelLocation";
this.labelLocation.Size = new System.Drawing.Size(48, 13);
this.labelLocation.TabIndex = 1;
this.labelLocation.Text = "Место:";
//
// textBoxName
//
this.textBoxName.Location = new System.Drawing.Point(111, 19);
this.textBoxName.Name = "textBoxName";
this.textBoxName.Size = new System.Drawing.Size(200, 20);
this.textBoxName.TabIndex = 2;
//
// textBoxLocation
//
this.textBoxLocation.Location = new System.Drawing.Point(111, 55);
this.textBoxLocation.Name = "textBoxLocation";
this.textBoxLocation.Size = new System.Drawing.Size(200, 20);
this.textBoxLocation.TabIndex = 3;
//
// buttonSave
//
this.buttonSave.Location = new System.Drawing.Point(155, 91);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 4;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(236, 91);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 5;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// FormAirport
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 126);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.textBoxLocation);
this.Controls.Add(this.textBoxName);
this.Controls.Add(this.labelLocation);
this.Controls.Add(this.labelName);
this.Name = "FormAirport";
this.Text = "Редактирование аэропорта";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelName;
private System.Windows.Forms.Label labelLocation;
private System.Windows.Forms.TextBox textBoxName;
private System.Windows.Forms.TextBox textBoxLocation;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
}
}

View File

@ -1,70 +0,0 @@
using System;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
{
public partial class FormAirport : Form
{
private readonly IAirportRepository _airportRepository;
private int? _airportId;
public int Id
{
set
{
try
{
var airport = _airportRepository.ReadAirportById(value);
if (airport == null)
{
throw new InvalidDataException(nameof(airport));
}
textBoxName.Text = airport.Name;
textBoxLocation.Text = airport.Location;
_airportId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormAirport(IAirportRepository airportRepository)
{
InitializeComponent();
_airportRepository = airportRepository ?? throw new ArgumentNullException(nameof(airportRepository));
}
private void ButtonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxName.Text) || string.IsNullOrWhiteSpace(textBoxLocation.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_airportId.HasValue)
{
_airportRepository.UpdateAirport(CreateAirport(_airportId.Value));
}
else
{
_airportRepository.CreateAirport(CreateAirport(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Airport CreateAirport(int id) => Airport.CreateEntity(id, textBoxName.Text, textBoxLocation.Text);
}
}

View File

@ -1,106 +0,0 @@
namespace YourNamespace.Forms
{
partial class FormAirports
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout(); // Вызов SuspendLayout
//
// dataGridViewData
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
//
// buttonUpd
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
//
// FormAirports
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormAirports";
this.Text = "Аэропорты";
this.Load += new System.EventHandler(this.FormAirports_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false); // Вызов ResumeLayout
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
}
}

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormEmployee
{
@ -28,114 +28,136 @@
/// </summary>
private void InitializeComponent()
{
this.labelFirstName = new System.Windows.Forms.Label();
this.labelLastName = new System.Windows.Forms.Label();
this.labelPost = new System.Windows.Forms.Label();
this.textBoxFirstName = new System.Windows.Forms.TextBox();
this.textBoxLastName = new System.Windows.Forms.TextBox();
this.comboBoxPost = new System.Windows.Forms.ComboBox();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// labelFirstName
//
this.labelFirstName.AutoSize = true;
this.labelFirstName.Location = new System.Drawing.Point(12, 22);
this.labelFirstName.Name = "labelFirstName";
this.labelFirstName.Size = new System.Drawing.Size(32, 13);
this.labelFirstName.TabIndex = 0;
this.labelFirstName.Text = "Имя:";
//
// labelLastName
//
this.labelLastName.AutoSize = true;
this.labelLastName.Location = new System.Drawing.Point(12, 58);
this.labelLastName.Name = "labelLastName";
this.labelLastName.Size = new System.Drawing.Size(59, 13);
this.labelLastName.TabIndex = 1;
this.labelLastName.Text = "Фамилия:";
//
// labelPost
//
this.labelPost.AutoSize = true;
this.labelPost.Location = new System.Drawing.Point(12, 94);
this.labelPost.Name = "labelPost";
this.labelPost.Size = new System.Drawing.Size(65, 13);
this.labelPost.TabIndex = 2;
this.labelPost.Text = "Должность:";
//
// textBoxFirstName
//
this.textBoxFirstName.Location = new System.Drawing.Point(111, 19);
this.textBoxFirstName.Name = "textBoxFirstName";
this.textBoxFirstName.Size = new System.Drawing.Size(200, 20);
this.textBoxFirstName.TabIndex = 3;
//
// textBoxLastName
//
this.textBoxLastName.Location = new System.Drawing.Point(111, 55);
this.textBoxLastName.Name = "textBoxLastName";
this.textBoxLastName.Size = new System.Drawing.Size(200, 20);
this.textBoxLastName.TabIndex = 4;
comboBoxPost = new ComboBox();
label1 = new Label();
label2 = new Label();
label3 = new Label();
label4 = new Label();
textBoxContactInfo = new TextBox();
textBoxLastName = new TextBox();
textBoxFirstName = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// comboBoxPost
//
this.comboBoxPost.FormattingEnabled = true;
this.comboBoxPost.Location = new System.Drawing.Point(111, 91);
this.comboBoxPost.Name = "comboBoxPost";
this.comboBoxPost.Size = new System.Drawing.Size(200, 21);
this.comboBoxPost.TabIndex = 5;
comboBoxPost.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxPost.FormattingEnabled = true;
comboBoxPost.Location = new Point(249, 262);
comboBoxPost.Name = "comboBoxPost";
comboBoxPost.Size = new Size(202, 28);
comboBoxPost.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(31, 39);
label1.Name = "label1";
label1.Size = new Size(39, 20);
label1.TabIndex = 1;
label1.Text = "Имя";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(31, 96);
label2.Name = "label2";
label2.Size = new Size(73, 20);
label2.TabIndex = 2;
label2.Text = "Фамилия";
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(31, 170);
label3.Name = "label3";
label3.Size = new Size(183, 20);
label3.TabIndex = 3;
label3.Text = "Контактная информация";
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(31, 265);
label4.Name = "label4";
label4.Size = new Size(86, 20);
label4.TabIndex = 4;
label4.Text = "Должность";
//
// textBoxContactInfo
//
textBoxContactInfo.Location = new Point(249, 170);
textBoxContactInfo.Name = "textBoxContactInfo";
textBoxContactInfo.Size = new Size(202, 27);
textBoxContactInfo.TabIndex = 5;
//
// textBoxLastName
//
textBoxLastName.Location = new Point(249, 94);
textBoxLastName.Name = "textBoxLastName";
textBoxLastName.Size = new Size(202, 27);
textBoxLastName.TabIndex = 6;
//
// textBoxFirstName
//
textBoxFirstName.Location = new Point(249, 38);
textBoxFirstName.Name = "textBoxFirstName";
textBoxFirstName.Size = new Size(202, 27);
textBoxFirstName.TabIndex = 7;
//
// buttonSave
//
this.buttonSave.Location = new System.Drawing.Point(155, 128);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 6;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
buttonSave.Location = new Point(31, 335);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(115, 62);
buttonSave.TabIndex = 8;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(236, 128);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 7;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
buttonCancel.Location = new Point(230, 335);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(116, 62);
buttonCancel.TabIndex = 9;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// FormEmployee
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 166);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.comboBoxPost);
this.Controls.Add(this.textBoxLastName);
this.Controls.Add(this.textBoxFirstName);
this.Controls.Add(this.labelPost);
this.Controls.Add(this.labelLastName);
this.Controls.Add(this.labelFirstName);
this.Name = "FormEmployee";
this.Text = "Редактирование сотрудника";
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxFirstName);
Controls.Add(textBoxLastName);
Controls.Add(textBoxContactInfo);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(comboBoxPost);
Name = "FormEmployee";
Text = "Сотрудник";
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelFirstName;
private System.Windows.Forms.Label labelLastName;
private System.Windows.Forms.Label labelPost;
private System.Windows.Forms.TextBox textBoxFirstName;
private System.Windows.Forms.TextBox textBoxLastName;
private System.Windows.Forms.ComboBox comboBoxPost;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
private ComboBox comboBoxPost;
private Label label1;
private Label label2;
private Label label3;
private Label label4;
private TextBox textBoxContactInfo;
private TextBox textBoxLastName;
private TextBox textBoxFirstName;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -1,10 +1,18 @@
using System;
using ProjectAirline.Entities;
using ProjectAirline.Entities.Enums;
using ProjectAirline.Repositories;
using ProjectAirline.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Entities.Enums;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormEmployee : Form
{
@ -17,13 +25,15 @@ namespace YourNamespace.Forms
{
try
{
var employee = _employeeRepository.ReadEmployeeById(value);
var employee =
_employeeRepository.ReadEmployeeById(value);
if (employee == null)
{
throw new InvalidDataException(nameof(employee));
}
textBoxFirstName.Text = employee.FirstName;
textBoxLastName.Text = employee.LastName;
textBoxContactInfo.Text = employee.ContactInformation;
comboBoxPost.SelectedItem = employee.EmployeePost;
_employeeId = value;
}
@ -34,12 +44,11 @@ namespace YourNamespace.Forms
}
}
}
public FormEmployee(IEmployeeRepository employeeRepository)
{
InitializeComponent();
_employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository));
_employeeRepository = employeeRepository ??
throw new ArgumentNullException(nameof(employeeRepository));
comboBoxPost.DataSource = Enum.GetValues(typeof(EmployeePost));
}
@ -47,7 +56,11 @@ namespace YourNamespace.Forms
{
try
{
if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || string.IsNullOrWhiteSpace(textBoxLastName.Text) || comboBoxPost.SelectedIndex < 0)
if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) ||
string.IsNullOrWhiteSpace(textBoxLastName.Text) ||
string.IsNullOrWhiteSpace(textBoxContactInfo.Text)
||
comboBoxPost.SelectedIndex < 1)
{
throw new Exception("Имеются незаполненные поля");
}
@ -63,12 +76,14 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Employee CreateEmployee(int id) =>
Employee.CreateEntity(id, textBoxFirstName.Text, textBoxLastName.Text, textBoxContactInfo.Text, (EmployeePost)comboBoxPost.SelectedItem!);
private Employee CreateEmployee(int id) => Employee.CreateEntity(id, textBoxFirstName.Text, textBoxLastName.Text, (EmployeePost)comboBoxPost.SelectedItem);
}
}

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormEmployees
{
@ -28,79 +28,101 @@
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout(); // Вызов SuspendLayout
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormEmployees));
panel1 = new Panel();
buttonUpdate = new Button();
buttonRemove = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridViewData
// panel1
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonRemove);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(628, 0);
panel1.Name = "panel1";
panel1.Size = new Size(153, 455);
panel1.TabIndex = 0;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = (Image)resources.GetObject("buttonUpdate.BackgroundImage");
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(33, 271);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(94, 82);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += ButtonUpdate_Click;
//
// buttonRemove
//
buttonRemove.BackgroundImage = (Image)resources.GetObject("buttonRemove.BackgroundImage");
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(33, 166);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(94, 82);
buttonRemove.TabIndex = 1;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += ButtonRemove_Click;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(33, 50);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(94, 82);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonUpd
// dataGridView
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(628, 455);
dataGridView.TabIndex = 1;
//
// FormEmployees
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormEmployees";
this.Text = "Сотрудники";
this.Load += new System.EventHandler(this.FormEmployees_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false); // Вызов ResumeLayout
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(781, 455);
Controls.Add(dataGridView);
Controls.Add(panel1);
Name = "FormEmployees";
StartPosition = FormStartPosition.CenterParent;
Text = "Сотрудники";
Load += FormEmployees_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
private Panel panel1;
private Button buttonUpdate;
private Button buttonRemove;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -1,22 +1,33 @@
using System;
using ProjectAirline.Repositories;
using ProjectAirline.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using Unity;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormEmployees : Form
{
private readonly IUnityContainer _container;
private readonly IEmployeeRepository _employeeRepository;
public FormEmployees(IUnityContainer container, IEmployeeRepository employeeRepository)
public FormEmployees(IUnityContainer container, IEmployeeRepository
employeeRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(employeeRepository));
_container = container ??
throw new ArgumentNullException(nameof(container));
_employeeRepository = employeeRepository ??
throw new
ArgumentNullException(nameof(employeeRepository));
}
private void FormEmployees_Load(object sender, EventArgs e)
{
try
@ -25,7 +36,8 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при загрузке",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@ -38,11 +50,35 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при добавлении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
private void ButtonRemove_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление",
MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_employeeRepository.DeleteEmployee(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
@ -57,43 +93,26 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при изменении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_employeeRepository.DeleteEmployee(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees();
private void LoadList() => dataGridView.DataSource =
_employeeRepository.ReadEmployees();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
if (dataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("Нет выбранной записи", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
id =
Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
}
}

View File

@ -117,4 +117,354 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonUpdate.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d
5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQVia
RIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
Xm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSM
fQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW
9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq9zwW9MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZ
FZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsj
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAsFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAFQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAUAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU4AEYAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADJ4E4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJ88AEAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAvOckggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp4EAkkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAEgAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkgEAkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAgAkkksoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEgdzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EEA5uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEk4JuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk/
PJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJ
uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuz
oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuz4AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAKkPJuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJryAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AKkvmJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkokeoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK
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
YsTyO4+SUvkJVWbq3j/xx//Z
</value>
</data>
<data name="buttonRemove.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z
</value>
</data>
</root>

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormFlight
{
@ -28,161 +28,246 @@
/// </summary>
private void InitializeComponent()
{
this.labelFlightNumber = new System.Windows.Forms.Label();
this.labelDepartureDateTime = new System.Windows.Forms.Label();
this.labelArrivalDateTime = new System.Windows.Forms.Label();
this.labelPlane = new System.Windows.Forms.Label();
this.labelAirport = new System.Windows.Forms.Label();
this.numericUpDownFlightNumber = new System.Windows.Forms.NumericUpDown();
this.dateTimePickerDeparture = new System.Windows.Forms.DateTimePicker();
this.dateTimePickerArrival = new System.Windows.Forms.DateTimePicker();
this.comboBoxPlane = new System.Windows.Forms.ComboBox();
this.comboBoxAirport = new System.Windows.Forms.ComboBox();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFlightNumber)).BeginInit();
this.SuspendLayout(); // Вызов SuspendLayout
label1 = new Label();
label2 = new Label();
label3 = new Label();
label4 = new Label();
label5 = new Label();
label6 = new Label();
comboBoxAirplane = new ComboBox();
dateTimePickerDeparture = new DateTimePicker();
dateTimePickerArrival = new DateTimePicker();
numericUpDownPrice = new NumericUpDown();
textBoxDestination = new TextBox();
textBoxDeparture = new TextBox();
groupBox1 = new GroupBox();
dataGridView = new DataGridView();
ColumnEmployee = new DataGridViewComboBoxColumn();
ColumnFlight = new DataGridViewTextBoxColumn();
ColumnHoursWork = new DataGridViewTextBoxColumn();
buttonAdd = new Button();
buttonCancel = new Button();
((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// labelFlightNumber
// label1
//
this.labelFlightNumber.AutoSize = true;
this.labelFlightNumber.Location = new System.Drawing.Point(12, 22);
this.labelFlightNumber.Name = "labelFlightNumber";
this.labelFlightNumber.Size = new System.Drawing.Size(80, 13);
this.labelFlightNumber.TabIndex = 0;
this.labelFlightNumber.Text = "Номер рейса:";
label1.AutoSize = true;
label1.Location = new Point(12, 76);
label1.Name = "label1";
label1.Size = new Size(149, 20);
label1.TabIndex = 0;
label1.Text = "Время отправления";
//
// labelDepartureDateTime
// label2
//
this.labelDepartureDateTime.AutoSize = true;
this.labelDepartureDateTime.Location = new System.Drawing.Point(12, 58);
this.labelDepartureDateTime.Name = "labelDepartureDateTime";
this.labelDepartureDateTime.Size = new System.Drawing.Size(115, 13);
this.labelDepartureDateTime.TabIndex = 1;
this.labelDepartureDateTime.Text = "Дата и время вылета:";
label2.AutoSize = true;
label2.Location = new Point(12, 125);
label2.Name = "label2";
label2.Size = new Size(128, 20);
label2.TabIndex = 1;
label2.Text = "Время прибытия";
//
// labelArrivalDateTime
// label3
//
this.labelArrivalDateTime.AutoSize = true;
this.labelArrivalDateTime.Location = new System.Drawing.Point(12, 94);
this.labelArrivalDateTime.Name = "labelArrivalDateTime";
this.labelArrivalDateTime.Size = new System.Drawing.Size(119, 13);
this.labelArrivalDateTime.TabIndex = 2;
this.labelArrivalDateTime.Text = "Дата и время прибытия:";
label3.AutoSize = true;
label3.Location = new Point(12, 172);
label3.Name = "label3";
label3.Size = new Size(136, 20);
label3.TabIndex = 2;
label3.Text = "Пункт назначения";
//
// labelPlane
// label4
//
this.labelPlane.AutoSize = true;
this.labelPlane.Location = new System.Drawing.Point(12, 130);
this.labelPlane.Name = "labelPlane";
this.labelPlane.Size = new System.Drawing.Size(54, 13);
this.labelPlane.TabIndex = 3;
this.labelPlane.Text = "Самолет:";
label4.AutoSize = true;
label4.Location = new Point(12, 218);
label4.Name = "label4";
label4.Size = new Size(144, 20);
label4.TabIndex = 3;
label4.Text = "Пункт отправления";
//
// labelAirport
// label5
//
this.labelAirport.AutoSize = true;
this.labelAirport.Location = new System.Drawing.Point(12, 166);
this.labelAirport.Name = "labelAirport";
this.labelAirport.Size = new System.Drawing.Size(59, 13);
this.labelAirport.TabIndex = 4;
this.labelAirport.Text = "Аэропорт:";
label5.AutoSize = true;
label5.Location = new Point(12, 274);
label5.Name = "label5";
label5.Size = new Size(97, 20);
label5.TabIndex = 4;
label5.Text = "Цена билета";
//
// numericUpDownFlightNumber
// label6
//
this.numericUpDownFlightNumber.Location = new System.Drawing.Point(133, 20);
this.numericUpDownFlightNumber.Name = "numericUpDownFlightNumber";
this.numericUpDownFlightNumber.Size = new System.Drawing.Size(150, 20);
this.numericUpDownFlightNumber.TabIndex = 5;
label6.AutoSize = true;
label6.Location = new Point(41, 16);
label6.Name = "label6";
label6.Size = new Size(68, 20);
label6.TabIndex = 5;
label6.Text = "Самолёт";
//
// comboBoxAirplane
//
comboBoxAirplane.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxAirplane.FormattingEnabled = true;
comboBoxAirplane.Location = new Point(183, 16);
comboBoxAirplane.Name = "comboBoxAirplane";
comboBoxAirplane.Size = new Size(231, 28);
comboBoxAirplane.TabIndex = 6;
//
// dateTimePickerDeparture
//
this.dateTimePickerDeparture.Location = new System.Drawing.Point(133, 56);
this.dateTimePickerDeparture.Name = "dateTimePickerDeparture";
this.dateTimePickerDeparture.Size = new System.Drawing.Size(150, 20);
this.dateTimePickerDeparture.TabIndex = 6;
dateTimePickerDeparture.Location = new Point(183, 76);
dateTimePickerDeparture.Name = "dateTimePickerDeparture";
dateTimePickerDeparture.Size = new Size(250, 27);
dateTimePickerDeparture.TabIndex = 7;
//
// dateTimePickerArrival
//
this.dateTimePickerArrival.Location = new System.Drawing.Point(133, 92);
this.dateTimePickerArrival.Name = "dateTimePickerArrival";
this.dateTimePickerArrival.Size = new System.Drawing.Size(150, 20);
this.dateTimePickerArrival.TabIndex = 7;
dateTimePickerArrival.Location = new Point(183, 125);
dateTimePickerArrival.Name = "dateTimePickerArrival";
dateTimePickerArrival.Size = new Size(250, 27);
dateTimePickerArrival.TabIndex = 8;
//
// comboBoxPlane
// numericUpDownPrice
//
this.comboBoxPlane.FormattingEnabled = true;
this.comboBoxPlane.Location = new System.Drawing.Point(133, 128);
this.comboBoxPlane.Name = "comboBoxPlane";
this.comboBoxPlane.Size = new System.Drawing.Size(150, 21);
this.comboBoxPlane.TabIndex = 8;
numericUpDownPrice.Location = new Point(183, 274);
numericUpDownPrice.Name = "numericUpDownPrice";
numericUpDownPrice.Size = new Size(250, 27);
numericUpDownPrice.TabIndex = 9;
//
// comboBoxAirport
// textBoxDestination
//
this.comboBoxAirport.FormattingEnabled = true;
this.comboBoxAirport.Location = new System.Drawing.Point(133, 164);
this.comboBoxAirport.Name = "comboBoxAirport";
this.comboBoxAirport.Size = new System.Drawing.Size(150, 21);
this.comboBoxAirport.TabIndex = 9;
textBoxDestination.Location = new Point(183, 171);
textBoxDestination.Name = "textBoxDestination";
textBoxDestination.Size = new Size(250, 27);
textBoxDestination.TabIndex = 10;
//
// buttonSave
// textBoxDeparture
//
this.buttonSave.Location = new System.Drawing.Point(133, 200);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 10;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
textBoxDeparture.Location = new Point(183, 215);
textBoxDeparture.Name = "textBoxDeparture";
textBoxDeparture.Size = new Size(250, 27);
textBoxDeparture.TabIndex = 11;
//
// groupBox1
//
groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
groupBox1.Controls.Add(dataGridView);
groupBox1.Location = new Point(14, 353);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(594, 298);
groupBox1.TabIndex = 12;
groupBox1.TabStop = false;
groupBox1.Text = "Работники";
//
// dataGridView
//
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnEmployee, ColumnFlight, ColumnHoursWork });
dataGridView.Location = new Point(6, 26);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.Size = new Size(582, 266);
dataGridView.TabIndex = 0;
//
// ColumnEmployee
//
ColumnEmployee.HeaderText = "Работник";
ColumnEmployee.MinimumWidth = 6;
ColumnEmployee.Name = "ColumnEmployee";
ColumnEmployee.Width = 125;
//
// ColumnFlight
//
ColumnFlight.HeaderText = "Рейс";
ColumnFlight.MinimumWidth = 6;
ColumnFlight.Name = "ColumnFlight";
ColumnFlight.Width = 125;
//
// ColumnHoursWork
//
ColumnHoursWork.HeaderText = "Часы работы";
ColumnHoursWork.MinimumWidth = 6;
ColumnHoursWork.Name = "ColumnHoursWork";
ColumnHoursWork.Width = 125;
//
// buttonAdd
//
buttonAdd.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonAdd.Location = new Point(15, 670);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(94, 40);
buttonAdd.TabIndex = 13;
buttonAdd.Text = "Добавить";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(208, 200);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 11;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Location = new Point(511, 670);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(94, 40);
buttonCancel.TabIndex = 14;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// FormFlight
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(304, 235);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.comboBoxAirport);
this.Controls.Add(this.comboBoxPlane);
this.Controls.Add(this.dateTimePickerArrival);
this.Controls.Add(this.dateTimePickerDeparture);
this.Controls.Add(this.numericUpDownFlightNumber);
this.Controls.Add(this.labelAirport);
this.Controls.Add(this.labelPlane);
this.Controls.Add(this.labelArrivalDateTime);
this.Controls.Add(this.labelDepartureDateTime);
this.Controls.Add(this.labelFlightNumber);
this.Name = "FormFlight";
this.Text = "Редактирование рейса";
((System.ComponentModel.ISupportInitialize)(this.numericUpDownFlightNumber)).EndInit();
this.ResumeLayout(false); // Вызов ResumeLayout
this.PerformLayout(); // Вызов PerformLayout
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(620, 722);
Controls.Add(buttonCancel);
Controls.Add(buttonAdd);
Controls.Add(groupBox1);
Controls.Add(textBoxDeparture);
Controls.Add(textBoxDestination);
Controls.Add(numericUpDownPrice);
Controls.Add(dateTimePickerArrival);
Controls.Add(dateTimePickerDeparture);
Controls.Add(comboBoxAirplane);
Controls.Add(label6);
Controls.Add(label5);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Name = "FormFlight";
Text = "FormFlight";
((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit();
groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelFlightNumber;
private System.Windows.Forms.Label labelDepartureDateTime;
private System.Windows.Forms.Label labelArrivalDateTime;
private System.Windows.Forms.Label labelPlane;
private System.Windows.Forms.Label labelAirport;
private System.Windows.Forms.NumericUpDown numericUpDownFlightNumber;
private System.Windows.Forms.DateTimePicker dateTimePickerDeparture;
private System.Windows.Forms.DateTimePicker dateTimePickerArrival;
private System.Windows.Forms.ComboBox comboBoxPlane;
private System.Windows.Forms.ComboBox comboBoxAirport;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
private Label label1;
private Label label2;
private Label label3;
private Label label4;
private Label label5;
private Label label6;
private ComboBox comboBoxAirplane;
private DateTimePicker dateTimePickerDeparture;
private DateTimePicker dateTimePickerArrival;
private NumericUpDown numericUpDownPrice;
private TextBox textBoxDestination;
private TextBox textBoxDeparture;
private GroupBox groupBox1;
private DataGridView dataGridView;
private Button buttonAdd;
private Button buttonCancel;
private DataGridViewComboBoxColumn ColumnEmployee;
private DataGridViewTextBoxColumn ColumnFlight;
private DataGridViewTextBoxColumn ColumnHoursWork;
}
}

View File

@ -1,75 +1,46 @@
using System;
using ProjectAirline.Entities;
using ProjectAirline.Repositories;
using ProjectAirline.Repositories.Implementations;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormFlight : Form
{
private readonly IFlightRepository _flightRepository;
private readonly IPlaneRepository _planeRepository;
private readonly IAirportRepository _airportRepository;
private int? _flightId;
public int Id
{
set
{
try
{
var flight = _flightRepository.ReadFlightById(value);
if (flight == null)
{
throw new InvalidDataException(nameof(flight));
}
numericUpDownFlightNumber.Value = flight.FlightNumber;
dateTimePickerDeparture.Value = flight.DepartureDateTime;
dateTimePickerArrival.Value = flight.ArrivalDateTime;
comboBoxPlane.SelectedValue = flight.PlaneId;
comboBoxAirport.SelectedValue = flight.AirportId;
_flightId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormFlight(IFlightRepository flightRepository, IPlaneRepository planeRepository, IAirportRepository airportRepository)
public FormFlight(IFlightRepository flightRepository, IAirplaneRepository airplaneRepository, IEmployeeRepository employeeRepository)
{
InitializeComponent();
_flightRepository = flightRepository ?? throw new ArgumentNullException(nameof(flightRepository));
_planeRepository = planeRepository ?? throw new ArgumentNullException(nameof(planeRepository));
_airportRepository = airportRepository ?? throw new ArgumentNullException(nameof(airportRepository));
comboBoxPlane.DataSource = _planeRepository.ReadPlanes();
comboBoxPlane.DisplayMember = "Model";
comboBoxPlane.ValueMember = "Id";
comboBoxAirplane.DataSource = airplaneRepository.ReadAirplanes();
comboBoxAirplane.DisplayMember = "Model";
comboBoxAirplane.ValueMember = "Id";
comboBoxAirport.DataSource = _airportRepository.ReadAirports();
comboBoxAirport.DisplayMember = "Name";
comboBoxAirport.ValueMember = "Id";
ColumnEmployee.DataSource = employeeRepository.ReadEmployees();
ColumnEmployee.DisplayMember = "FirstName";
ColumnEmployee.ValueMember = "Id";
}
private void ButtonSave_Click(object sender, EventArgs e)
private void ButtonAdd_Click(object sender, EventArgs e)
{
if (dataGridView.RowCount < 1 || comboBoxAirplane.SelectedIndex < 0 || numericUpDownPrice.Value <= 0)
{
throw new Exception("Имеются незаполненны поля");
}
try
{
if (comboBoxPlane.SelectedIndex < 0 || comboBoxAirport.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
if (_flightId.HasValue)
{
_flightRepository.UpdateFlight(CreateFlight(_flightId.Value));
}
else
{
_flightRepository.CreateFlight(CreateFlight(0));
}
_flightRepository.CreateFlight(Flight.CreateOperation(0, (int)comboBoxAirplane.SelectedValue,
textBoxDestination.Text, textBoxDeparture.Text,
(int)numericUpDownPrice.Value, CreateListFlightFromDataGrid()));
Close();
}
catch (Exception ex)
@ -78,8 +49,23 @@ namespace YourNamespace.Forms
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Flight CreateFlight(int id) => Flight.CreateEntity(id, (int)numericUpDownFlightNumber.Value, dateTimePickerDeparture.Value, dateTimePickerArrival.Value, (int)comboBoxPlane.SelectedValue, (int)comboBoxAirport.SelectedValue);
private void ButtonCancel_Click(object sender, EventArgs e)
{
Close();
}
private List<EmployeeFlight> CreateListFlightFromDataGrid()
{
var list = new List<EmployeeFlight>();
foreach (DataGridViewRow row in dataGridView.Rows)
{
if (row.Cells["ColumnEmployee"].Value == null || row.Cells["ColumnFlight"].Value == null || row.Cells["ColumnHoursWork"].Value == null)
{
continue;
}
list.Add(EmployeeFlight.CreateOperation(0, Convert.ToInt32(row.Cells["ColumnEmployee"].Value),
Convert.ToInt32(row.Cells["ColumnFlight"].Value), Convert.ToInt32(row.Cells["ColumnHoursWork"].Value)));
}
return list;
}
}
}

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormFlights
{
@ -28,79 +28,87 @@
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormFlights));
panel1 = new Panel();
buttonRemove = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridViewData
// panel1
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
panel1.Controls.Add(buttonRemove);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(653, 0);
panel1.Name = "panel1";
panel1.Size = new Size(147, 450);
panel1.TabIndex = 0;
//
// buttonRemove
//
buttonRemove.BackgroundImage = (Image)resources.GetObject("buttonRemove.BackgroundImage");
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(33, 165);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(89, 83);
buttonRemove.TabIndex = 1;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += ButtonRemove_Click;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(33, 41);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(89, 83);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonUpd
// dataGridView
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(653, 450);
dataGridView.TabIndex = 1;
//
// FormFlights
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormFlights";
this.Text = "Рейсы";
this.Load += new System.EventHandler(this.FormFlights_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false);
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(dataGridView);
Controls.Add(panel1);
Name = "FormFlights";
StartPosition = FormStartPosition.CenterParent;
Text = "Рейсы";
Load += FormFlights_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
private Panel panel1;
private Button buttonRemove;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -1,22 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Unity;
using YourNamespace.Repositories;
using ProjectAirline.Repositories;
using System.Xml.Linq;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormFlights : Form
{
private readonly IUnityContainer _container;
private readonly IFlightRepository _flightRepository;
public FormFlights(IUnityContainer container, IFlightRepository flightRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_flightRepository = flightRepository ?? throw new ArgumentNullException(nameof(flightRepository));
}
private void FormFlights_Load(object sender, EventArgs e)
{
try
@ -42,26 +48,7 @@ namespace YourNamespace.Forms
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormFlight>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
private void ButtonRemove_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
@ -82,17 +69,16 @@ namespace YourNamespace.Forms
}
}
private void LoadList() => dataGridViewData.DataSource = _flightRepository.ReadFlights();
private void LoadList() => dataGridView.DataSource = _flightRepository.ReadFlights();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
if (dataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
}

View File

@ -117,4 +117,123 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonRemove.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z
</value>
</data>
</root>

View File

@ -1,134 +0,0 @@
namespace YourNamespace.Forms
{
partial class FormMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.menuStrip = new System.Windows.Forms.MenuStrip();
this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.ticketsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.passengersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.flightsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.airportsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.planesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.employeesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip.SuspendLayout();
this.SuspendLayout();
//
// menuStrip
//
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.справочникиToolStripMenuItem});
this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.Name = "menuStrip";
this.menuStrip.Size = new System.Drawing.Size(800, 24);
this.menuStrip.TabIndex = 0;
this.menuStrip.Text = "menuStrip1";
//
// справочникиToolStripMenuItem
//
this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ticketsToolStripMenuItem,
this.passengersToolStripMenuItem,
this.flightsToolStripMenuItem,
this.airportsToolStripMenuItem,
this.planesToolStripMenuItem,
this.employeesToolStripMenuItem});
this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(94, 20);
this.справочникиToolStripMenuItem.Text = "Справочники";
//
// ticketsToolStripMenuItem
//
this.ticketsToolStripMenuItem.Name = "ticketsToolStripMenuItem";
this.ticketsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.ticketsToolStripMenuItem.Text = "Билеты";
this.ticketsToolStripMenuItem.Click += new System.EventHandler(this.TicketsToolStripMenuItem_Click);
//
// passengersToolStripMenuItem
//
this.passengersToolStripMenuItem.Name = "passengersToolStripMenuItem";
this.passengersToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.passengersToolStripMenuItem.Text = "Пассажиры";
this.passengersToolStripMenuItem.Click += new System.EventHandler(this.PassengersToolStripMenuItem_Click);
//
// flightsToolStripMenuItem
//
this.flightsToolStripMenuItem.Name = "flightsToolStripMenuItem";
this.flightsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.flightsToolStripMenuItem.Text = "Рейсы";
this.flightsToolStripMenuItem.Click += new System.EventHandler(this.FlightsToolStripMenuItem_Click);
//
// airportsToolStripMenuItem
//
this.airportsToolStripMenuItem.Name = "airportsToolStripMenuItem";
this.airportsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.airportsToolStripMenuItem.Text = "Аэропорты";
this.airportsToolStripMenuItem.Click += new System.EventHandler(this.AirportsToolStripMenuItem_Click);
//
// planesToolStripMenuItem
//
this.planesToolStripMenuItem.Name = "planesToolStripMenuItem";
this.planesToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.planesToolStripMenuItem.Text = "Самолеты";
this.planesToolStripMenuItem.Click += new System.EventHandler(this.PlanesToolStripMenuItem_Click);
//
// employeesToolStripMenuItem
//
this.employeesToolStripMenuItem.Name = "employeesToolStripMenuItem";
this.employeesToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.employeesToolStripMenuItem.Text = "Сотрудники";
this.employeesToolStripMenuItem.Click += new System.EventHandler(this.EmployeesToolStripMenuItem_Click);
//
// FormMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.menuStrip);
this.MainMenuStrip = this.menuStrip;
this.Name = "FormMain";
this.Text = "Главная форма";
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip;
private System.Windows.Forms.ToolStripMenuItem справочникиToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem ticketsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem passengersToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem flightsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem airportsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem planesToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem employeesToolStripMenuItem;
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormPassenger
{
@ -28,113 +28,135 @@
/// </summary>
private void InitializeComponent()
{
this.labelFirstName = new System.Windows.Forms.Label();
this.labelLastName = new System.Windows.Forms.Label();
this.labelPassportNumber = new System.Windows.Forms.Label();
this.textBoxFirstName = new System.Windows.Forms.TextBox();
this.textBoxLastName = new System.Windows.Forms.TextBox();
this.textBoxPassportNumber = new System.Windows.Forms.TextBox();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
checkedListBoxType = new CheckedListBox();
label1 = new Label();
textBoxFirstname = new TextBox();
textBoxLastname = new TextBox();
label2 = new Label();
label3 = new Label();
label4 = new Label();
dateTimePickerBorn = new DateTimePicker();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelFirstName
// checkedListBoxType
//
this.labelFirstName.AutoSize = true;
this.labelFirstName.Location = new System.Drawing.Point(12, 22);
this.labelFirstName.Name = "labelFirstName";
this.labelFirstName.Size = new System.Drawing.Size(32, 13);
this.labelFirstName.TabIndex = 0;
this.labelFirstName.Text = "Имя:";
checkedListBoxType.FormattingEnabled = true;
checkedListBoxType.Location = new Point(173, 27);
checkedListBoxType.Name = "checkedListBoxType";
checkedListBoxType.Size = new Size(205, 114);
checkedListBoxType.TabIndex = 0;
//
// labelLastName
// label1
//
this.labelLastName.AutoSize = true;
this.labelLastName.Location = new System.Drawing.Point(12, 58);
this.labelLastName.Name = "labelLastName";
this.labelLastName.Size = new System.Drawing.Size(59, 13);
this.labelLastName.TabIndex = 1;
this.labelLastName.Text = "Фамилия:";
label1.AutoSize = true;
label1.Location = new Point(39, 55);
label1.Name = "label1";
label1.Size = new Size(115, 20);
label1.TabIndex = 2;
label1.Text = "Тип пассажира";
//
// labelPassportNumber
// textBoxFirstname
//
this.labelPassportNumber.AutoSize = true;
this.labelPassportNumber.Location = new System.Drawing.Point(12, 94);
this.labelPassportNumber.Name = "labelPassportNumber";
this.labelPassportNumber.Size = new System.Drawing.Size(93, 13);
this.labelPassportNumber.TabIndex = 2;
this.labelPassportNumber.Text = "Номер паспорта:";
textBoxFirstname.Location = new Point(173, 176);
textBoxFirstname.Name = "textBoxFirstname";
textBoxFirstname.Size = new Size(205, 27);
textBoxFirstname.TabIndex = 3;
//
// textBoxFirstName
// textBoxLastname
//
this.textBoxFirstName.Location = new System.Drawing.Point(111, 19);
this.textBoxFirstName.Name = "textBoxFirstName";
this.textBoxFirstName.Size = new System.Drawing.Size(200, 20);
this.textBoxFirstName.TabIndex = 3;
textBoxLastname.Location = new Point(174, 234);
textBoxLastname.Name = "textBoxLastname";
textBoxLastname.Size = new Size(210, 27);
textBoxLastname.TabIndex = 4;
//
// textBoxLastName
// label2
//
this.textBoxLastName.Location = new System.Drawing.Point(111, 55);
this.textBoxLastName.Name = "textBoxLastName";
this.textBoxLastName.Size = new System.Drawing.Size(200, 20);
this.textBoxLastName.TabIndex = 4;
label2.AutoSize = true;
label2.Location = new Point(63, 180);
label2.Name = "label2";
label2.Size = new Size(39, 20);
label2.TabIndex = 5;
label2.Text = "Имя";
//
// textBoxPassportNumber
// label3
//
this.textBoxPassportNumber.Location = new System.Drawing.Point(111, 91);
this.textBoxPassportNumber.Name = "textBoxPassportNumber";
this.textBoxPassportNumber.Size = new System.Drawing.Size(200, 20);
this.textBoxPassportNumber.TabIndex = 5;
label3.AutoSize = true;
label3.Location = new Point(52, 237);
label3.Name = "label3";
label3.Size = new Size(73, 20);
label3.TabIndex = 6;
label3.Text = "Фамилия";
//
// label4
//
label4.AutoSize = true;
label4.Location = new Point(38, 303);
label4.Name = "label4";
label4.Size = new Size(116, 20);
label4.TabIndex = 7;
label4.Text = "Дата рождения";
//
// dateTimePickerBorn
//
dateTimePickerBorn.Location = new Point(173, 303);
dateTimePickerBorn.Name = "dateTimePickerBorn";
dateTimePickerBorn.Size = new Size(224, 27);
dateTimePickerBorn.TabIndex = 8;
//
// buttonSave
//
this.buttonSave.Location = new System.Drawing.Point(155, 128);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 6;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
buttonSave.Location = new Point(47, 364);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(115, 60);
buttonSave.TabIndex = 9;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(236, 128);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 7;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
buttonCancel.Location = new Point(267, 365);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(111, 59);
buttonCancel.TabIndex = 10;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// FormPassenger
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 166);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.textBoxPassportNumber);
this.Controls.Add(this.textBoxLastName);
this.Controls.Add(this.textBoxFirstName);
this.Controls.Add(this.labelPassportNumber);
this.Controls.Add(this.labelLastName);
this.Controls.Add(this.labelFirstName);
this.Name = "FormPassenger";
this.Text = "Редактирование пассажира";
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(417, 464);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(dateTimePickerBorn);
Controls.Add(label4);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(textBoxLastname);
Controls.Add(textBoxFirstname);
Controls.Add(label1);
Controls.Add(checkedListBoxType);
Name = "FormPassenger";
Text = "Пассажир";
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelFirstName;
private System.Windows.Forms.Label labelLastName;
private System.Windows.Forms.Label labelPassportNumber;
private System.Windows.Forms.TextBox textBoxFirstName;
private System.Windows.Forms.TextBox textBoxLastName;
private System.Windows.Forms.TextBox textBoxPassportNumber;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
private CheckedListBox checkedListBoxType;
private Label label1;
private TextBox textBoxFirstname;
private TextBox textBoxLastname;
private Label label2;
private Label label3;
private Label label4;
private DateTimePicker dateTimePickerBorn;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -1,71 +1,109 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using ProjectAirline.Entities.Enums;
using ProjectAirline.Entities;
using ProjectAirline.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms;
public partial class FormPassenger : Form
{
public partial class FormPassenger : Form
private readonly IPassengerRepository _passengerRepository;
private int? _passengerId;
public int Id
{
private readonly IPassengerRepository _passengerRepository;
private int? _passengerId;
public int Id
{
set
{
try
{
var passenger = _passengerRepository.ReadPassengerById(value);
if (passenger == null)
{
throw new InvalidDataException(nameof(passenger));
}
textBoxFirstName.Text = passenger.FirstName;
textBoxLastName.Text = passenger.LastName;
textBoxPassportNumber.Text = passenger.PassportNumber;
_passengerId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormPassenger(IPassengerRepository passengerRepository)
{
InitializeComponent();
_passengerRepository = passengerRepository ?? throw new ArgumentNullException(nameof(passengerRepository));
}
private void ButtonSave_Click(object sender, EventArgs e)
set
{
try
{
if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || string.IsNullOrWhiteSpace(textBoxLastName.Text) || string.IsNullOrWhiteSpace(textBoxPassportNumber.Text))
var passenger =
_passengerRepository.ReadPassengerById(value);
if (passenger == null)
{
throw new Exception("Имеются незаполненные поля");
throw new
InvalidDataException(nameof(passenger));
}
if (_passengerId.HasValue)
foreach (FoodPreferences elem in Enum.GetValues(typeof(FoodPreferences)))
{
_passengerRepository.UpdatePassenger(CreatePassenger(_passengerId.Value));
if ((elem & passenger.FoodPreferences) != 0)
{
checkedListBoxType.SetItemChecked(checkedListBoxType.Items.IndexOf(
elem), true);
}
}
else
{
_passengerRepository.CreatePassenger(CreatePassenger(0));
}
Close();
textBoxFirstname.Text = passenger.FirstName;
textBoxLastname.Text = passenger.LastName;
dateTimePickerBorn.Value = passenger.DateBirth;
_passengerId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormPassenger(IPassengerRepository passengerRepository)
{
InitializeComponent();
_passengerRepository = passengerRepository ??
throw new ArgumentNullException(nameof(passengerRepository));
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
foreach (var elem in Enum.GetValues(typeof(FoodPreferences)))
{
checkedListBoxType.Items.Add(elem);
}
}
private Passenger CreatePassenger(int id) => Passenger.CreateEntity(id, textBoxFirstName.Text, textBoxLastName.Text, textBoxPassportNumber.Text);
private void ButtonSave_Click(object sender, EventArgs e)
{
try
{
if (checkedListBoxType.CheckedItems.Count == 0 ||
string.IsNullOrWhiteSpace(textBoxFirstname.Text) ||
string.IsNullOrWhiteSpace(textBoxLastname.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_passengerId.HasValue)
{
_passengerRepository.UpdatePassenger(CreatePassenger(_passengerId.Value));
}
else
{
_passengerRepository.CreatePassenger(CreatePassenger(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
Close();
}
private Passenger CreatePassenger(int id)
{
FoodPreferences foodPreferences = FoodPreferences.None;
foreach (var elem in checkedListBoxType.CheckedItems)
{
foodPreferences |= (FoodPreferences)elem;
}
return Passenger.CreateEntity(id, foodPreferences, textBoxFirstname.Text, textBoxLastname.Text);
}
}

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormPassengers
{
@ -28,79 +28,101 @@
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormPassengers));
panel1 = new Panel();
buttonUpdate = new Button();
buttonRemove = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridViewData
// panel1
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonRemove);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(642, 0);
panel1.Name = "panel1";
panel1.Size = new Size(158, 450);
panel1.TabIndex = 0;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = (Image)resources.GetObject("buttonUpdate.BackgroundImage");
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(36, 246);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(93, 84);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += ButtonUpdate_Click;
//
// buttonRemove
//
buttonRemove.BackgroundImage = (Image)resources.GetObject("buttonRemove.BackgroundImage");
buttonRemove.BackgroundImageLayout = ImageLayout.Stretch;
buttonRemove.Location = new Point(36, 144);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(93, 84);
buttonRemove.TabIndex = 1;
buttonRemove.UseVisualStyleBackColor = true;
buttonRemove.Click += ButtonRemove_Click;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(36, 37);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(93, 84);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonUpd
// dataGridView
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(642, 450);
dataGridView.TabIndex = 1;
//
// FormPassengers
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormPassengers";
this.Text = "Пассажиры";
this.Load += new System.EventHandler(this.FormPassengers_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false);
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(dataGridView);
Controls.Add(panel1);
Name = "FormPassengers";
StartPosition = FormStartPosition.CenterParent;
Text = "Пассажиры";
Load += FormPassengers_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
private Panel panel1;
private Button buttonUpdate;
private Button buttonRemove;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -1,20 +1,29 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ProjectAirline.Repositories;
using Unity;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormPassengers : Form
{
private readonly IUnityContainer _container;
private readonly IPassengerRepository _passengerRepository;
public FormPassengers(IUnityContainer container, IPassengerRepository passengerRepository)
public FormPassengers(IUnityContainer container, IPassengerRepository
passengerRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_passengerRepository = passengerRepository ?? throw new ArgumentNullException(nameof(passengerRepository));
_container = container ??
throw new ArgumentNullException(nameof(container));
_passengerRepository = passengerRepository ??
throw new ArgumentNullException(nameof(passengerRepository));
}
private void FormPassengers_Load(object sender, EventArgs e)
@ -25,7 +34,8 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при загрузке",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@ -38,11 +48,35 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при добавлении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
private void ButtonRemove_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление",
MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_passengerRepository.DeletePassenger(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
@ -57,42 +91,24 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при изменении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_passengerRepository.DeletePassenger(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _passengerRepository.ReadPassengers();
private void LoadList() => dataGridView.DataSource =
_passengerRepository.ReadPassengers();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
if (dataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show("Нет выбранной записи", "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
id =
Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
}

View File

@ -117,4 +117,354 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonUpdate.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d
5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQVia
RIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
Xm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSM
fQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW
9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq9zwW9MAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZ
FZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsj
q93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d
5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQVia
RIpsjq93wW9EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFZxSMfQViaRIpsjq93wW9EAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjq93wW9EAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAaXm3+d5XTwZFJxWMfQViaRIpsjrd7wV3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABp
ebf53ldPBkVnFIx9BWJpEjp9zxbnt84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0vNv87yungyKTisY+
grE1mOl3fHs+jTncgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADS82/wA7yungyKTisY2N+vb9Oi2zXXdG
dTsb9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGl5t/neV08GRScdj3ePY36h9YyrGxv051gAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAADS82/wA7yungzkx3uh4KXIGWcV2a77tYAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAA1NG7W8+5jOdTnUsgM6nZ36cqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhPXevo3Ti8sz
9rA+sW2677tYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4rX0bpa7zqWWls19TfquAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAADCK19O3inhfRo9vl6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoeR
OIfp5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYmyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/xAAlEAACAgICAgMAAgMAAAAAAAABAgMQEmAAIAQR
EyExBZAUM0H/2gAIAQEAAQUC/p0llES/5UhaGYSDSZZREskhkbisVMMwkGjyyiJZJDI1qxUwzCQaLNMs
KPI0jdYsslbLRJplhSSRpXB6xRGUtHiFbHiPkNC8skz0DaJmY2C0y8jduK+WheRAJQylTQPETM/g4rc/
eOvEbHitkNB8jxxKGUqeAe+I31z95+8V6dOK2JVshoPkeOJR8ZBpHy5+2j+qdOI2PEfIaDNFmGTC1f30
R/VMvvkbtxXy0KWEPx09Gkf30VufvHXitjxXB0KWL5A6FDSP7r95+8V6mIj5H7RkfIaDLEJA6FDSPlz9
5+0ZvjABJ4rYlHyGgyxCQOhQ0j5U74D79g2rYlHyGgyxB+Ono182K/8AaBtWxKPkNBli+QOuPCfVA9Ab
VsSj5DQZoswVKtQPQG1bEo+Q0GeAShlKmgegNq2JR8hoM8AlDKVNA9AbVsSj5DQZ/HEoZSpoHoDasVKP
kNBngEoZSpoHoDatiUcMNBngEoZSpoHoDatiUfIaDPAJQylTQPQG1bEo+Q0GeAShlKmgegNq2JR8hoM8
AlDKVNA9AbVsSj5DQZ4BKGUqaB6A2rYlHyGgzwCUMpU0D0BtWKlHyGgzwCUMpU0D0BtWxKOGGgzwCUMp
U0D0BtWxKPkNBngEoZSpoHoDatiUfIaDPAJQylTQPQG1bEo4YaDPAJQylTQPQG1bEo+Q0GeAShlKmgeg
NqxUo+Q0GeAShlKmgegNq2JR8hoM8AlDKVNA9AbVsSj5DQZ4BKGUqaB6A2rYlHyGgzwCUMpU0D0BtWxK
PkNBngEoZSpoHoDatiUfIaDPAJQylTQPQG1bEo+Q0GeAShlKmgegNq2JR8hoM8AlDKVNA9AbVsSj5DQZ
/HEoZSpoHoDasVKPkNBngEoZSpoHoDatiUfIaDPAJQylTQPQG1bEo+Q0GeAShlKmgegNq2JR8hoM8AlD
KVNA9AbVsSj5DQZ4BKGUqaB6A2rYlHyGgzwCUMpU0D0BtWxKPkNBngEoZSpoHoDatiUfIaDPAJQylTQP
QG1bEo2Y0GeAShlKmgegNxfS6FPAJQylTQPQGh9BT9aFPAJQylTQNRx58+FOBQKU+joc8AlDKVNA8g/1
9AfY0OeAShlKngHsxrgnRT96JL46y8PjqvAoHcH2NFMYPChFe+inSCgPDGR08jyVgEMnyxaQVB4YyOeZ
/IJ4okmkll/ifKzGlT+LD5K+T/BOvIWl8HyY3EkelywxzrBCnjx/04f/xAAoEQACAQMFAAEDBQEAAAAA
AAABAgMAERIQICFgcWEEQZATFCIxMnD/2gAIAQMBAT8B/DpHGZDYV+2S1SxFD0qOMyGwpECCw0ZQwqWI
oekRxmQ2FIgQWGxlDCpYih6NFEZDYUiBBYbvqJFUc9FiiMhsKjjCCwojbNMIx80zFjc9F+mAEYtqRrNM
Ix80zFjc9GgnMZ+KVgwuNSKmmEY+aZixuekQTmM/FKwYXGk84jHzTMWNz0qCcxn4qX6hUW4pmLG5/wCT
W6ZHGXNFBjiKdMelRxlzQAUWGjLlTpj0iOMuaVQosKI1ZcqdMejRxlzSqFFhqRqy5U6Y9EjjLmlUKLDa
Rqy5U6Y9CFIFC/x3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQ
oZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb
8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasu
VOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KG
bDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I
3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlT
pj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw
8oG/I3kasuVOmPQoZsPKBvyN5GrLlTpj0KGbDygb8jeRqy5U6Y9Chmw8oG/I3kasuVOuJ6FDNh5QN+Rv
I1k5J6HDNh5QN+RvI0JuaYdDhmw8oG/I2u+NfqtRYn+9GHRIZsPKBvyNkv8AraR0SGbDygb8jVzkb7WH
RY5mShMT96JJq24i3Rg5FBwdLbGHSA5FBwdjHpQYihIPvTMB+Q7/xAAmEQEAAQMFAQACAQUAAAAAAAAB
AwACERAgITFgEwQSkBQiMkFw/9oACAECAQE/Af4dFxX7NDnxS4pc6jnxC4pc7Rz4ZcUud1p4VcUudwZ8
Nd3uDPh7rc7Qz4m63OttufF3W5ot/wCT58ZJIRmWrvybm/8AaoJyQ8VJIRmWppWRy6WXtjkqCckPESSE
ZlqSRkctJrZe2OSoJyQ8NJIWGWpJG9y6prZe2OSoJyQ8JJIWGWr729y0mxNbL2xyVBOSHgmpLrrrv7tU
2JrZe2OSoJyQ8FPB9OTukTh1TYmtl7Y5KgnJDwU8H0MndJhw6psTWy9sclQTkh4KeAk5O6THDqmxNbL2
xyVBOSHgp4Ppyd0icOqbE1svbHJUE5IeCng+nJ3SI4dU2JrZe2OSoJyQ8FPAScndJjh1TYmtl7Y5KgnJ
DwU8H0MndJhw6psTWy9sclQTkh4KeD6GTukw4dU2JrZe2OSoJyQ8FPB9OTukxw6psTWy9sclQTkh4KeD
6cndJjh1TYmtl7Y5KgnJDwU8H0MndJjh1TYmtl7Y5KgnJDwU8BJyd0mOHVNia2XtjkqCckPBTwfQyd0i
cOqbE1svbHJUE5IeCngJOTukxw6psTWy9sclQTkh4KeAk5O6THDqmxNbL2xyVBOSHgp4Ppyd0mOHVNia
2XtjkqCckPBTwfQyd0mOHVNia2XtjkqCckPBTwfTk7pMcOqbE1svbHJUE5IeCng+nJ3SY4dU2JrZe2OS
oJyQ8FPB9DJ3SY4dU2JrZe2OSoJyQ8FPB9OTukxw6psTWy9sclQTkh4KeD6cndJjh1TYmtl7Y5KgnJDw
U8H0MndJjh1TYmtl7Y5KgnJDwU8H05O6TDh1TYmtl7Y5KgnJDwU8H05O6THDqmxNbL2xyVBOSHgp4Ppy
d0icOqbE1svbHJUE5IeCng+nJ3SYcOqbE1svbHJUE5IeCngJOTukxw6psTWy9sclQTkh4KeD6GTukw4d
U2JrZe2OSoJyQ8FPB9OTukxw6psTWy9sclQTkh4KeD6GTukxw6psTWy9sclQTkh4KeD6cndJjh1TYmtl
7Y5KgnJDwU8H05O6THDqmxNbL2xyVBL9Lc+CngJOTukxw6psTX8biw8HPB9OTukTh1TYlArgqw/W0Kte
PBzwfQyd0mOHVNIov3r+nsq2O2zo0tcPhJ4Ppyd0mOHVK/H/AMNtrk8JPB9OTukxw6d1Zb+tuNhVrz4W
WC2TmmH9f9UAVncOTwzGNNiaZ2WPiGwaY02WGfFNo0xJ1Vtq0GP5Df/EACwQAAIBAgUEAQMEAwAAAAAA
AAERADJgAhASIWEgIjFBUQMTYjBSgZAEcLH/2gAIAQEABj8C/p0Zjc5spmasWTE5shmasXQxObGZ/gTV
i6tigPdis/wJqxdX4+zO3xYpfVxNPrJ+pvtYf5RHo4iGW/icTtsT8ojnpy4nEXrJixPyiOyz7pxmjkxH
YfPQuhHJ+pvtY6PRv4nE7fE4ie9hrNHLicResuT4E1nfFYfPR3TiIZfJ9CasW+I2LzN89OXPxNR82Xv5
mo+bK4ydl7eZ3ebNYqiNmsVRGzWKojZrFURs1iqI2axVEbNYqiNmsVRGzWKojZrFURs1iqI2axVEbNYq
iNmsVRGzWKojZrFURs1iqI2axVEbNYqiNmsVRGzWKojZrFURs1iqI2axVEbNYqiNmsVRGzWKojZrFURs
1iqI2axVEbNYqiNmsVRGzWKojZrFUR/SFhsVRH9FWIxVEenjLaxmKojZrFURyQgFlb+ZRNgv9O/PQML7
8XiDH82VtNNX1P2z7uPF3TR8/wDbLX1fpjFzNX+Pi1D9uKDXhOHgwYx4Nmafq4BiHM+3gekfP9OP/8QA
KBABAAEDBQEAAgICAwEAAAAAAREAEDEhQVFgYSBxkYHhobGQwfDx/9oACAEBAAE/If8Ah03L7HNOADgq
Bun+/Sty+xzSdP6sbSoG/wB+kbl9jmk6f18G0qBv9+jbg/2UyTX/AF9FSRmo/wCqMdE3B/spwmuxxU+j
88BH/wAKAIQNuKbW44oJv170PauaF59G6cBy0AQgY8tOxrkmE7UWPQpWaDDzTsIS8+jScBy0AAQGCgjV
qfR14lP4h/ilemKPQ6FIzQYeadhCWn+UcMIxQRq1zf7V+or8PlxQAaVBwU/lRyHQpGaDDzS6KFDXhisa
1gL+6/UUs6GgVivAWg4KTy4oJv8Az0IZj+HNMtcbVnVxWfxWnekYrF/AWnRrscB2osOhErGvHNLqmhvS
zoW9BcI1an0deJ/KtXYM+VLgpHwSNPehYxhqVC/oKCNWub/av1FfijfitAgxUQmtDrLJl4/FH7dDCgKW
NNawF/dfqK/AD/FbQYrRUkoQv/oeFnmKP26GFoppWdXFZ8CtAtI3raDFHyLHKg1GX/ip7vMUft0I1d+O
aXVwb1nQ0K/FYAnZ7QLJl/4vPd5ij9uhHoZpXFDPuxWsyzW2/E93mKP26FKpNOHengffl9t+J7vMUft0
LGwYeaRhCX234nu8xR+3QsbBh5pGEJfbfie7zFH7dCxMGHmkYQl9t+J7zoo/boWNgw80jCEvtvxPd5iv
ddCxsGHmkYQl9t+J7vMUft0LGwYeaRhCX234nu8xR+3QsbBh5pGEJfbfie7zFH7dCxsGHmkYQl9t+J7v
MUft0LGwYeaRhCX234nu8xR+3QsbBh5pGEJfbfie86KP26FjYMPNIwhL7b8T3eYr3XQsbBh5pGEJfbfi
e7zFH7dCxsGHmkYQl9t+J7vMUft0LGwYeaRhCX234nu8xXuuhY2DDzSMIS+2/E93mKP26FjYMPNIwhL7
b8T3nRR+3QsbBh5pGEJfbfie7zFH7dCxsGHmkYQl9t+J7vMUft0LGwYeaRhCX234nu8xR+3QsbBh5pGE
Jfbfie7zFH7dCxsGHmkYQl9t+J7vMUft0LGwYeaRhCX234nu8xR+3QsbBh5pGEJfbfie7zFH7dCxsGHm
kYQl9t+J7vMUft0LEwYeaRhCX234nvOij9uhY2DDzSMIS+2/E93mKP26FjYMPNIwhL7b8T3eYo/boWNg
w80jCEvtvxPd5ij9uhY2DDzSMIS+2/E93mKP26FjYMPNIwhL7b8T3eYo/boWNgw80jCEvtvxPd5ij9uh
Y2DDzSMIS+2/E93mKP26FjYMPNIwhL7b8T3eYo5ehY2DDzSMIS+2/E91/F6HjYMPNIwhL7b8T0CsFGHg
VJ+HQ8bBh5pGEJfbba9WBQWz+6x6h6KGNgw80jCEvttYfz0mMbBh5pGEJZCCVqdcmfgai/LorY6Bub1s
6Oawf+BQxUz8DWsdG8t8rb5PLHK5WtHPSNrh5KxWipShmxgO1/7oAtmv56Tnytc1Um2OnD807QtmeKJ0
8o46W8JjcfzUx/Dh/dShY6hFLroz0z8duUJ1RpKY/wCHH//aAAwDAQACAAMAAAAQAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuQAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAsFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAFQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAUAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU4AEYAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAADJ4E4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJ88AEAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAvOckggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp4EAkkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAEgAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkgEAkYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAgAkkksoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEgdzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EEA5uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEk4JuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk/
PJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJ
uzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuz
oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuz4AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkvJuzoAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAKkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqkPJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAqkvJuzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJuzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAKkPJuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkvJryAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AKkvmJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKkokeoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK
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
YsTyO4+SUvkJVWbq3j/xx//Z
</value>
</data>
<data name="buttonRemove.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z
</value>
</data>
</root>

View File

@ -1,120 +0,0 @@
namespace YourNamespace.Forms
{
partial class FormPlane
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.labelModel = new System.Windows.Forms.Label();
this.labelCapacity = new System.Windows.Forms.Label();
this.textBoxModel = new System.Windows.Forms.TextBox();
this.numericUpDownCapacity = new System.Windows.Forms.NumericUpDown();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownCapacity)).BeginInit();
this.SuspendLayout();
//
// labelModel
//
this.labelModel.AutoSize = true;
this.labelModel.Location = new System.Drawing.Point(12, 22);
this.labelModel.Name = "labelModel";
this.labelModel.Size = new System.Drawing.Size(54, 13);
this.labelModel.TabIndex = 0;
this.labelModel.Text = "Модель:";
//
// labelCapacity
//
this.labelCapacity.AutoSize = true;
this.labelCapacity.Location = new System.Drawing.Point(12, 58);
this.labelCapacity.Name = "labelCapacity";
this.labelCapacity.Size = new System.Drawing.Size(72, 13);
this.labelCapacity.TabIndex = 1;
this.labelCapacity.Text = "Вместимость:";
//
// textBoxModel
//
this.textBoxModel.Location = new System.Drawing.Point(111, 19);
this.textBoxModel.Name = "textBoxModel";
this.textBoxModel.Size = new System.Drawing.Size(200, 20);
this.textBoxModel.TabIndex = 2;
//
// numericUpDownCapacity
//
this.numericUpDownCapacity.Location = new System.Drawing.Point(111, 56);
this.numericUpDownCapacity.Name = "numericUpDownCapacity";
this.numericUpDownCapacity.Size = new System.Drawing.Size(200, 20);
this.numericUpDownCapacity.TabIndex = 3;
//
// buttonSave
//
this.buttonSave.Location = new System.Drawing.Point(155, 91);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 4;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(236, 91);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 5;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
//
// FormPlane
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 126);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.numericUpDownCapacity);
this.Controls.Add(this.textBoxModel);
this.Controls.Add(this.labelCapacity);
this.Controls.Add(this.labelModel);
this.Name = "FormPlane";
this.Text = "Редактирование самолета";
((System.ComponentModel.ISupportInitialize)(this.numericUpDownCapacity)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelModel;
private System.Windows.Forms.Label labelCapacity;
private System.Windows.Forms.TextBox textBoxModel;
private System.Windows.Forms.NumericUpDown numericUpDownCapacity;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
}
}

View File

@ -1,70 +0,0 @@
using System;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
{
public partial class FormPlane : Form
{
private readonly IPlaneRepository _planeRepository;
private int? _planeId;
public int Id
{
set
{
try
{
var plane = _planeRepository.ReadPlaneById(value);
if (plane == null)
{
throw new InvalidDataException(nameof(plane));
}
textBoxModel.Text = plane.Model;
numericUpDownCapacity.Value = plane.Capacity;
_planeId = value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormPlane(IPlaneRepository planeRepository)
{
InitializeComponent();
_planeRepository = planeRepository ?? throw new ArgumentNullException(nameof(planeRepository));
}
private void ButtonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxModel.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_planeId.HasValue)
{
_planeRepository.UpdatePlane(CreatePlane(_planeId.Value));
}
else
{
_planeRepository.CreatePlane(CreatePlane(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Plane CreatePlane(int id) => Plane.CreateEntity(id, textBoxModel.Text, (int)numericUpDownCapacity.Value);
}
}

View File

@ -1,106 +0,0 @@
namespace YourNamespace.Forms
{
partial class FormPlanes
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout();
//
// dataGridViewData
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
//
// buttonUpd
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
//
// FormPlanes
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormPlanes";
this.Text = "Самолеты";
this.Load += new System.EventHandler(this.FormPlanes_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
}
}

View File

@ -1,99 +0,0 @@
using System;
using System.Windows.Forms;
using Unity;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
{
public partial class FormPlanes : Form
{
private readonly IUnityContainer _container;
private readonly IPlaneRepository _planeRepository;
public FormPlanes(IUnityContainer container, IPlaneRepository planeRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_planeRepository = planeRepository ?? throw new ArgumentNullException(nameof(planeRepository));
}
private void FormPlanes_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormPlane>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormPlane>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_planeRepository.DeletePlane(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _planeRepository.ReadPlanes();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
return true;
}
}
}

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormTicket
{
@ -28,139 +28,122 @@
/// </summary>
private void InitializeComponent()
{
this.labelPassenger = new System.Windows.Forms.Label();
this.labelFlight = new System.Windows.Forms.Label();
this.labelDateBuy = new System.Windows.Forms.Label();
this.labelTicketPrice = new System.Windows.Forms.Label();
this.comboBoxPassenger = new System.Windows.Forms.ComboBox();
this.comboBoxFlight = new System.Windows.Forms.ComboBox();
this.dateTimePickerDateBuy = new System.Windows.Forms.DateTimePicker();
this.numericUpDownTicketPrice = new System.Windows.Forms.NumericUpDown();
this.buttonSave = new System.Windows.Forms.Button();
this.buttonCancel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTicketPrice)).BeginInit();
this.SuspendLayout();
label1 = new Label();
label2 = new Label();
label3 = new Label();
comboBoxFlight = new ComboBox();
comboBoxPassenger = new ComboBox();
numericUpDownPrice = new NumericUpDown();
buttonAdd = new Button();
buttonCancel = new Button();
((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
SuspendLayout();
//
// labelPassenger
// label1
//
this.labelPassenger.AutoSize = true;
this.labelPassenger.Location = new System.Drawing.Point(12, 22);
this.labelPassenger.Name = "labelPassenger";
this.labelPassenger.Size = new System.Drawing.Size(63, 13);
this.labelPassenger.TabIndex = 0;
this.labelPassenger.Text = "Пассажир:";
label1.AutoSize = true;
label1.Location = new Point(49, 37);
label1.Name = "label1";
label1.Size = new Size(41, 20);
label1.TabIndex = 0;
label1.Text = "Рейс";
//
// labelFlight
// label2
//
this.labelFlight.AutoSize = true;
this.labelFlight.Location = new System.Drawing.Point(12, 58);
this.labelFlight.Name = "labelFlight";
this.labelFlight.Size = new System.Drawing.Size(37, 13);
this.labelFlight.TabIndex = 1;
this.labelFlight.Text = "Рейс:";
label2.AutoSize = true;
label2.Location = new Point(34, 122);
label2.Name = "label2";
label2.Size = new Size(79, 20);
label2.TabIndex = 1;
label2.Text = "Пассажир";
//
// labelDateBuy
// label3
//
this.labelDateBuy.AutoSize = true;
this.labelDateBuy.Location = new System.Drawing.Point(12, 94);
this.labelDateBuy.Name = "labelDateBuy";
this.labelDateBuy.Size = new System.Drawing.Size(80, 13);
this.labelDateBuy.TabIndex = 2;
this.labelDateBuy.Text = "Дата покупки:";
//
// labelTicketPrice
//
this.labelTicketPrice.AutoSize = true;
this.labelTicketPrice.Location = new System.Drawing.Point(12, 130);
this.labelTicketPrice.Name = "labelTicketPrice";
this.labelTicketPrice.Size = new System.Drawing.Size(74, 13);
this.labelTicketPrice.TabIndex = 3;
this.labelTicketPrice.Text = "Цена билета:";
//
// comboBoxPassenger
//
this.comboBoxPassenger.FormattingEnabled = true;
this.comboBoxPassenger.Location = new System.Drawing.Point(111, 19);
this.comboBoxPassenger.Name = "comboBoxPassenger";
this.comboBoxPassenger.Size = new System.Drawing.Size(200, 21);
this.comboBoxPassenger.TabIndex = 4;
label3.AutoSize = true;
label3.Location = new Point(12, 201);
label3.Name = "label3";
label3.Size = new Size(135, 20);
label3.TabIndex = 2;
label3.Text = "Стоимость билета";
//
// comboBoxFlight
//
this.comboBoxFlight.FormattingEnabled = true;
this.comboBoxFlight.Location = new System.Drawing.Point(111, 55);
this.comboBoxFlight.Name = "comboBoxFlight";
this.comboBoxFlight.Size = new System.Drawing.Size(200, 21);
this.comboBoxFlight.TabIndex = 5;
comboBoxFlight.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxFlight.FormattingEnabled = true;
comboBoxFlight.Location = new Point(166, 37);
comboBoxFlight.Name = "comboBoxFlight";
comboBoxFlight.Size = new Size(223, 28);
comboBoxFlight.TabIndex = 3;
//
// dateTimePickerDateBuy
// comboBoxPassenger
//
this.dateTimePickerDateBuy.Location = new System.Drawing.Point(111, 91);
this.dateTimePickerDateBuy.Name = "dateTimePickerDateBuy";
this.dateTimePickerDateBuy.Size = new System.Drawing.Size(200, 20);
this.dateTimePickerDateBuy.TabIndex = 6;
comboBoxPassenger.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxPassenger.FormattingEnabled = true;
comboBoxPassenger.Location = new Point(167, 122);
comboBoxPassenger.Name = "comboBoxPassenger";
comboBoxPassenger.Size = new Size(222, 28);
comboBoxPassenger.TabIndex = 4;
//
// numericUpDownTicketPrice
// numericUpDownPrice
//
this.numericUpDownTicketPrice.Location = new System.Drawing.Point(111, 128);
this.numericUpDownTicketPrice.Name = "numericUpDownTicketPrice";
this.numericUpDownTicketPrice.Size = new System.Drawing.Size(200, 20);
this.numericUpDownTicketPrice.TabIndex = 7;
numericUpDownPrice.DecimalPlaces = 2;
numericUpDownPrice.Location = new Point(166, 205);
numericUpDownPrice.Maximum = new decimal(new int[] { 10000000, 0, 0, 0 });
numericUpDownPrice.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
numericUpDownPrice.Name = "numericUpDownPrice";
numericUpDownPrice.Size = new Size(223, 27);
numericUpDownPrice.TabIndex = 5;
numericUpDownPrice.Value = new decimal(new int[] { 1, 0, 0, 0 });
//
// buttonSave
// buttonAdd
//
this.buttonSave.Location = new System.Drawing.Point(155, 164);
this.buttonSave.Name = "buttonSave";
this.buttonSave.Size = new System.Drawing.Size(75, 23);
this.buttonSave.TabIndex = 8;
this.buttonSave.Text = "Сохранить";
this.buttonSave.UseVisualStyleBackColor = true;
this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
buttonAdd.Location = new Point(60, 332);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(109, 63);
buttonAdd.TabIndex = 6;
buttonAdd.Text = "Добавить";
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonCancel
//
this.buttonCancel.Location = new System.Drawing.Point(236, 164);
this.buttonCancel.Name = "buttonCancel";
this.buttonCancel.Size = new System.Drawing.Size(75, 23);
this.buttonCancel.TabIndex = 9;
this.buttonCancel.Text = "Отмена";
this.buttonCancel.UseVisualStyleBackColor = true;
this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click);
buttonCancel.Location = new Point(261, 335);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(107, 60);
buttonCancel.TabIndex = 7;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// FormTicket
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(324, 201);
this.Controls.Add(this.buttonCancel);
this.Controls.Add(this.buttonSave);
this.Controls.Add(this.numericUpDownTicketPrice);
this.Controls.Add(this.dateTimePickerDateBuy);
this.Controls.Add(this.comboBoxFlight);
this.Controls.Add(this.comboBoxPassenger);
this.Controls.Add(this.labelTicketPrice);
this.Controls.Add(this.labelDateBuy);
this.Controls.Add(this.labelFlight);
this.Controls.Add(this.labelPassenger);
this.Name = "FormTicket";
this.Text = "Редактирование билета";
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTicketPrice)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(440, 450);
Controls.Add(buttonCancel);
Controls.Add(buttonAdd);
Controls.Add(numericUpDownPrice);
Controls.Add(comboBoxPassenger);
Controls.Add(comboBoxFlight);
Controls.Add(label3);
Controls.Add(label2);
Controls.Add(label1);
Name = "FormTicket";
Text = "Билет";
((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private System.Windows.Forms.Label labelPassenger;
private System.Windows.Forms.Label labelFlight;
private System.Windows.Forms.Label labelDateBuy;
private System.Windows.Forms.Label labelTicketPrice;
private System.Windows.Forms.ComboBox comboBoxPassenger;
private System.Windows.Forms.ComboBox comboBoxFlight;
private System.Windows.Forms.DateTimePicker dateTimePickerDateBuy;
private System.Windows.Forms.NumericUpDown numericUpDownTicketPrice;
private System.Windows.Forms.Button buttonSave;
private System.Windows.Forms.Button buttonCancel;
private Label label1;
private Label label2;
private Label label3;
private ComboBox comboBoxFlight;
private ComboBox comboBoxPassenger;
private NumericUpDown numericUpDownPrice;
private Button buttonAdd;
private Button buttonCancel;
}
}

View File

@ -1,32 +1,36 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using ProjectAirline.Repositories;
using ProjectAirline.Entities;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormTicket : Form
{
private readonly ITicketRepository _ticketRepository;
private readonly IPassengerRepository _passengerRepository;
private readonly IFlightRepository _flightRepository;
private int? _ticketId;
public int Id
{
set
{
try
{
var ticket = _ticketRepository.ReadTicketById(value);
if (ticket == null)
var appointment =
_ticketRepository.ReadTicketById(value);
if (appointment == null)
{
throw new InvalidDataException(nameof(ticket));
throw new
InvalidDataException(nameof(appointment));
}
comboBoxPassenger.SelectedValue = ticket.PassengerId;
comboBoxFlight.SelectedValue = ticket.FlightId;
dateTimePickerDateBuy.Value = ticket.DateBuy;
numericUpDownTicketPrice.Value = ticket.TicketPrice;
comboBoxFlight.SelectedIndex = appointment.FlightID;
comboBoxPassenger.SelectedIndex = appointment.PassengerID;
_ticketId = value;
}
catch (Exception ex)
@ -36,30 +40,29 @@ namespace YourNamespace.Forms
}
}
}
public FormTicket(ITicketRepository ticketRepository, IPassengerRepository passengerRepository, IFlightRepository flightRepository)
{
InitializeComponent();
_ticketRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository));
_passengerRepository = passengerRepository ?? throw new ArgumentNullException(nameof(passengerRepository));
_flightRepository = flightRepository ?? throw new ArgumentNullException(nameof(flightRepository));
_ticketRepository = ticketRepository ??
throw new ArgumentNullException(nameof(ticketRepository));
comboBoxPassenger.DataSource = _passengerRepository.ReadPassengers();
comboBoxPassenger.DisplayMember = "Name";
comboBoxFlight.DataSource = flightRepository.ReadFlights();
comboBoxFlight.DisplayMember = "AirplaneID";
comboBoxFlight.ValueMember = "Id";
comboBoxPassenger.DataSource = passengerRepository.ReadPassengers();
comboBoxPassenger.DisplayMember = "FirstName";
comboBoxPassenger.ValueMember = "Id";
comboBoxFlight.DataSource = _flightRepository.ReadFlights();
comboBoxFlight.DisplayMember = "FlightNumber";
comboBoxFlight.ValueMember = "Id";
}
private void ButtonSave_Click(object sender, EventArgs e)
private void ButtonAdd_Click(object sender, EventArgs e)
{
try
{
if (comboBoxPassenger.SelectedIndex < 0 || comboBoxFlight.SelectedIndex < 0)
if (comboBoxPassenger.SelectedIndex < 0 || comboBoxFlight.SelectedIndex < 0 || numericUpDownPrice.Value <= 0)
{
throw new Exception("Имеются незаполненные поля");
throw new Exception("Имеются незаполненны поля");
}
if (_ticketId.HasValue)
{
@ -73,12 +76,16 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при сохранении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e) => Close();
private Ticket CreateTicket(int id) => Ticket.CreateEntity(id, (int)comboBoxPassenger.SelectedValue, (int)comboBoxFlight.SelectedValue, dateTimePickerDateBuy.Value, (int)numericUpDownTicketPrice.Value);
private void ButtonCancel_Click(object sender, EventArgs e)
{
Close();
}
private Ticket CreateTicket(int id) => Ticket.CreateTicket(id, comboBoxFlight.SelectedIndex,
comboBoxPassenger.SelectedIndex, (int)numericUpDownPrice.Value);
}
}

View File

@ -1,4 +1,4 @@
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
partial class FormTickets
{
@ -28,79 +28,87 @@
/// </summary>
private void InitializeComponent()
{
this.dataGridViewData = new System.Windows.Forms.DataGridView();
this.buttonAdd = new System.Windows.Forms.Button();
this.buttonUpd = new System.Windows.Forms.Button();
this.buttonDel = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).BeginInit();
this.SuspendLayout();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormTickets));
panel1 = new Panel();
buttonUpdate = new Button();
buttonAdd = new Button();
dataGridView = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridViewData
// panel1
//
this.dataGridViewData.AllowUserToAddRows = false;
this.dataGridViewData.AllowUserToDeleteRows = false;
this.dataGridViewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridViewData.Dock = System.Windows.Forms.DockStyle.Fill;
this.dataGridViewData.Location = new System.Drawing.Point(0, 0);
this.dataGridViewData.MultiSelect = false;
this.dataGridViewData.Name = "dataGridViewData";
this.dataGridViewData.ReadOnly = true;
this.dataGridViewData.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dataGridViewData.Size = new System.Drawing.Size(800, 450);
this.dataGridViewData.TabIndex = 0;
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(658, 0);
panel1.Name = "panel1";
panel1.Size = new Size(142, 450);
panel1.TabIndex = 0;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = (Image)resources.GetObject("buttonUpdate.BackgroundImage");
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(24, 148);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(91, 76);
buttonUpdate.TabIndex = 1;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += ButtonUpdate_Click;
//
// buttonAdd
//
this.buttonAdd.Location = new System.Drawing.Point(12, 12);
this.buttonAdd.Name = "buttonAdd";
this.buttonAdd.Size = new System.Drawing.Size(75, 23);
this.buttonAdd.TabIndex = 1;
this.buttonAdd.Text = "Добавить";
this.buttonAdd.UseVisualStyleBackColor = true;
this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click);
buttonAdd.BackgroundImage = Properties.Resources.plus;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(24, 46);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(91, 76);
buttonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += ButtonAdd_Click;
//
// buttonUpd
// dataGridView
//
this.buttonUpd.Location = new System.Drawing.Point(93, 12);
this.buttonUpd.Name = "buttonUpd";
this.buttonUpd.Size = new System.Drawing.Size(75, 23);
this.buttonUpd.TabIndex = 2;
this.buttonUpd.Text = "Изменить";
this.buttonUpd.UseVisualStyleBackColor = true;
this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click);
//
// buttonDel
//
this.buttonDel.Location = new System.Drawing.Point(174, 12);
this.buttonDel.Name = "buttonDel";
this.buttonDel.Size = new System.Drawing.Size(75, 23);
this.buttonDel.TabIndex = 3;
this.buttonDel.Text = "Удалить";
this.buttonDel.UseVisualStyleBackColor = true;
this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click);
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.AllowUserToResizeColumns = false;
dataGridView.AllowUserToResizeRows = false;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Fill;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowHeadersWidth = 51;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(658, 450);
dataGridView.TabIndex = 1;
//
// FormTickets
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.buttonDel);
this.Controls.Add(this.buttonUpd);
this.Controls.Add(this.buttonAdd);
this.Controls.Add(this.dataGridViewData);
this.Name = "FormTickets";
this.Text = "Билеты";
this.Load += new System.EventHandler(this.FormTickets_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGridViewData)).EndInit();
this.ResumeLayout(false);
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(dataGridView);
Controls.Add(panel1);
Name = "FormTickets";
StartPosition = FormStartPosition.CenterParent;
Text = "Билеты";
Load += FormTickets_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataGridView dataGridViewData;
private System.Windows.Forms.Button buttonAdd;
private System.Windows.Forms.Button buttonUpd;
private System.Windows.Forms.Button buttonDel;
private Panel panel1;
private Button buttonUpdate;
private Button buttonAdd;
private DataGridView dataGridView;
}
}

View File

@ -1,22 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using ProjectAirline.Repositories;
using Unity;
using YourNamespace.Repositories;
namespace YourNamespace.Forms
namespace ProjectAirline.Forms
{
public partial class FormTickets : Form
{
private readonly IUnityContainer _container;
private readonly ITicketRepository _ticketRepository;
public FormTickets(IUnityContainer container, ITicketRepository ticketRepository)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_ticketRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository));
}
private void FormTickets_Load(object sender, EventArgs e)
{
try
@ -42,7 +48,7 @@ namespace YourNamespace.Forms
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
private void ButtonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
@ -57,42 +63,20 @@ namespace YourNamespace.Forms
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show(ex.Message, "Ошибка при изменении",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_ticketRepository.DeleteTicket(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _ticketRepository.ReadTickets();
private void LoadList() => dataGridView.DataSource = _ticketRepository.ReadTickets();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
if (dataGridView.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
return true;
}
}

View File

@ -117,4 +117,123 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="buttonUpdate.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//Z
</value>
</data>
</root>

View File

@ -1,48 +1,34 @@
using System;
using System.Windows.Forms;
using ProjectAirline.Repositories.Implementations;
using ProjectAirline.Repositories;
using Unity;
using Unity.Lifetime;
using YourNamespace.Repositories;
using YourNamespace.Repositories.Implementations;
using YourNamespace.Forms;
namespace YourNamespace
namespace ProjectAirline
{
static class Program
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var container = CreateContainer();
Application.Run(container.Resolve<FormMain>());
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(CreateContainer().Resolve<FormAirline>());
}
private static IUnityContainer CreateContainer()
{
var container = new UnityContainer();
// Ðåãèñòðàöèÿ ðåïîçèòîðèåâ
container.RegisterType<IPassengerRepository, PassengerRepository>(new TransientLifetimeManager());
container.RegisterType<ITicketRepository, TicketRepository>(new TransientLifetimeManager());
container.RegisterType<IFlightRepository, FlightRepository>(new TransientLifetimeManager());
container.RegisterType<IEmployeeRepository, EmployeeRepository>(new TransientLifetimeManager());
container.RegisterType<IPlaneRepository, PlaneRepository>(new TransientLifetimeManager());
container.RegisterType<IAirportRepository, AirportRepository>(new TransientLifetimeManager());
// Ðåãèñòðàöèÿ ôîðì
container.RegisterType<FormMain>(new ContainerControlledLifetimeManager());
container.RegisterType<FormPassenger>(new TransientLifetimeManager());
container.RegisterType<FormTicket>(new TransientLifetimeManager());
container.RegisterType<FormFlight>(new TransientLifetimeManager());
container.RegisterType<FormEmployee>(new TransientLifetimeManager());
container.RegisterType<FormPlane>(new TransientLifetimeManager());
container.RegisterType<FormAirport>(new TransientLifetimeManager());
// Ïðàâèëüíî ñâÿçûâàåì èíòåðôåéñû ñ èõ ðåàëèçàöèÿìè
container.RegisterType<IFlightRepository, FlightRepository>();
container.RegisterType<IPassengerRepository, PassengerRepository>();
container.RegisterType<IAirplaneRepository, AirplaneRepository>();
container.RegisterType<IEmployeeFlightRepository, EmployeeFlightRepository>();
container.RegisterType<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITicketRepository, TicketRepository>();
return container;
}

View File

@ -12,4 +12,19 @@
<PackageReference Include="Unity" Version="5.11.10" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -0,0 +1,83 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProjectAirline.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectAirline.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap plus {
get {
object obj = ResourceManager.GetObject("plus", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap samolet {
get {
object obj = ResourceManager.GetObject("samolet", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -117,4 +117,11 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="samolet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\samolet.jpeg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="plus" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\plus.jpeg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,18 @@
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Repositories;
public interface IAirplaneRepository
{
IEnumerable<Airplane> ReadAirplanes();
Airplane ReadAirplaneById(int id);
void CreateAirplane(Airplane airplane);
void UpdateAirplane(Airplane airplane);
void DeleteAirplane(int id);
}

View File

@ -1,14 +0,0 @@
using System.Collections.Generic;
using YourNamespace.Entities;
namespace YourNamespace.Repositories
{
public interface IAirportRepository
{
IEnumerable<Airport> ReadAirports();
Airport ReadAirportById(int id);
void CreateAirport(Airport airport);
void UpdateAirport(Airport airport);
void DeleteAirport(int id);
}
}

View File

@ -0,0 +1,11 @@
using ProjectAirline.Entities;
using System.Collections.Generic;
namespace ProjectAirline.Repositories;
public interface IEmployeeFlightRepository
{
IEnumerable<EmployeeFlight> ReadEmployeeFlights();
EmployeeFlight ReadEmployeeFlightById(int id);
void CreateEmployeeFlight(EmployeeFlight employeeFlight);
}

View File

@ -1,14 +1,13 @@
using System.Collections.Generic;
using YourNamespace.Entities;
using ProjectAirline.Entities;
using System.Collections.Generic;
namespace YourNamespace.Repositories
namespace ProjectAirline.Repositories;
public interface IEmployeeRepository
{
public interface IEmployeeRepository
{
IEnumerable<Employee> ReadEmployees();
Employee ReadEmployeeById(int id);
void CreateEmployee(Employee employee);
void UpdateEmployee(Employee employee);
void DeleteEmployee(int id);
}
IEnumerable<Employee> ReadEmployees();
Employee ReadEmployeeById(int id);
void CreateEmployee(Employee employee);
void UpdateEmployee(Employee employee);
void DeleteEmployee(int id);
}

View File

@ -1,14 +1,13 @@
using System.Collections.Generic;
using YourNamespace.Entities;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
namespace YourNamespace.Repositories
namespace ProjectAirline.Repositories;
public interface IFlightRepository
{
public interface IFlightRepository
{
IEnumerable<Flight> ReadFlights();
Flight ReadFlightById(int id);
void CreateFlight(Flight flight);
void UpdateFlight(Flight flight);
void DeleteFlight(int id);
}
IEnumerable<Flight> ReadFlights(DateTime? dateForm = null, DateTime? dateTo = null, int? flightId = null, int? airplaneId = null);
Flight ReadFlightById(int flightId);
void CreateFlight(Flight flight);
void DeleteFlight(int id);
}

View File

@ -1,14 +1,18 @@
using System.Collections.Generic;
using YourNamespace.Entities;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YourNamespace.Repositories
namespace ProjectAirline.Repositories;
public interface IPassengerRepository
{
public interface IPassengerRepository
{
IEnumerable<Passenger> ReadPassengers();
Passenger ReadPassengerById(int id);
void CreatePassenger(Passenger passenger);
void UpdatePassenger(Passenger passenger);
void DeletePassenger(int id);
}
IEnumerable<Passenger> ReadPassengers();
Passenger ReadPassengerById(int id);
void CreatePassenger(Passenger passenger);
void UpdatePassenger(Passenger passenger);
void DeletePassenger(int id);
}

View File

@ -1,14 +0,0 @@
using System.Collections.Generic;
using YourNamespace.Entities;
namespace YourNamespace.Repositories
{
public interface IPlaneRepository
{
IEnumerable<Plane> ReadPlanes();
Plane ReadPlaneById(int id);
void CreatePlane(Plane plane);
void UpdatePlane(Plane plane);
void DeletePlane(int id);
}
}

View File

@ -1,14 +1,16 @@
using System.Collections.Generic;
using YourNamespace.Entities;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YourNamespace.Repositories
namespace ProjectAirline.Repositories;
public interface ITicketRepository
{
public interface ITicketRepository
{
IEnumerable<Ticket> ReadTickets();
Ticket ReadTicketById(int id);
void CreateTicket(Ticket ticket);
void UpdateTicket(Ticket ticket);
void DeleteTicket(int id);
}
IEnumerable<Ticket> ReadTickets();
Ticket ReadTicketById(int id);
void CreateTicket(Ticket ticket);
void UpdateTicket(Ticket ticket);
}

View File

@ -0,0 +1,34 @@
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectAirline.Repositories.Implementations;
public class AirplaneRepository : IAirplaneRepository
{
public void CreateAirplane(Airplane airplane)
{
}
public void DeleteAirplane(int id)
{
}
public Airplane ReadAirplaneById(int id)
{
return Airplane.CreateEntity(0, string.Empty, string.Empty, 0);
}
public IEnumerable<Airplane> ReadAirplanes()
{
return [];
}
public void UpdateAirplane(Airplane airplane)
{
throw new NotImplementedException();
}
}

View File

@ -1,49 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
namespace YourNamespace.Repositories.Implementations
{
public class AirportRepository : IAirportRepository
{
private readonly List<Airport> _airports = new List<Airport>();
private int _nextId = 1;
public IEnumerable<Airport> ReadAirports()
{
return _airports;
}
public Airport ReadAirportById(int id)
{
return _airports.FirstOrDefault(a => a.Id == id);
}
public void CreateAirport(Airport airport)
{
var newAirport = Airport.CreateEntity(_nextId++, airport.Name, airport.Location);
_airports.Add(newAirport);
}
public void UpdateAirport(Airport airport)
{
var existingAirport = _airports.FirstOrDefault(a => a.Id == airport.Id);
if (existingAirport != null)
{
var updatedAirport = Airport.CreateEntity(existingAirport.Id, airport.Name, airport.Location);
_airports.Remove(existingAirport);
_airports.Add(updatedAirport);
}
}
public void DeleteAirport(int id)
{
var airportToRemove = _airports.FirstOrDefault(a => a.Id == id);
if (airportToRemove != null)
{
_airports.Remove(airportToRemove);
}
}
}
}

View File

@ -0,0 +1,24 @@
using ProjectAirline.Entities;
using System.Collections.Generic;
namespace ProjectAirline.Repositories.Implementations;
public class EmployeeFlightRepository : IEmployeeFlightRepository
{
public void CreateEmployeeFlight(EmployeeFlight employeeFlight)
{
// Реализация создания связи сотрудник-рейс
}
public EmployeeFlight ReadEmployeeFlightById(int id)
{
// Реализация чтения связи сотрудник-рейс по ID
return null;
}
public IEnumerable<EmployeeFlight> ReadEmployeeFlights()
{
// Реализация чтения всех связей сотрудник-рейс
return new List<EmployeeFlight>();
}
}

View File

@ -1,49 +1,35 @@
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using ProjectAirline.Entities;
using ProjectAirline.Entities.Enums;
using System.Collections.Generic;
namespace YourNamespace.Repositories.Implementations
namespace ProjectAirline.Repositories.Implementations;
public class EmployeeRepository : IEmployeeRepository
{
public class EmployeeRepository : IEmployeeRepository
public void CreateEmployee(Employee employee)
{
private readonly List<Employee> _employees = new List<Employee>();
private int _nextId = 1;
// Реализация создания сотрудника
}
public IEnumerable<Employee> ReadEmployees()
{
return _employees;
}
public void DeleteEmployee(int id)
{
// Реализация удаления сотрудника
}
public Employee ReadEmployeeById(int id)
{
return _employees.FirstOrDefault(e => e.Id == id);
}
public Employee ReadEmployeeById(int id)
{
// Реализация чтения сотрудника по ID
return Employee.CreateEntity(0, string.Empty, string.Empty, string.Empty, EmployeePost.None);
}
public void CreateEmployee(Employee employee)
{
var newEmployee = Employee.CreateEntity(_nextId++, employee.FirstName, employee.LastName, employee.EmployeePost);
_employees.Add(newEmployee);
}
public IEnumerable<Employee> ReadEmployees()
{
// Реализация чтения всех сотрудников
return new List<Employee>();
}
public void UpdateEmployee(Employee employee)
{
var existingEmployee = _employees.FirstOrDefault(e => e.Id == employee.Id);
if (existingEmployee != null)
{
var updatedEmployee = Employee.CreateEntity(existingEmployee.Id, employee.FirstName, employee.LastName, employee.EmployeePost);
_employees.Remove(existingEmployee);
_employees.Add(updatedEmployee);
}
}
public void DeleteEmployee(int id)
{
var employeeToRemove = _employees.FirstOrDefault(e => e.Id == id);
if (employeeToRemove != null)
{
_employees.Remove(employeeToRemove);
}
}
public void UpdateEmployee(Employee employee)
{
// Реализация обновления сотрудника
}
}

View File

@ -1,49 +1,30 @@
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
namespace YourNamespace.Repositories.Implementations
namespace ProjectAirline.Repositories.Implementations;
public class FlightRepository : IFlightRepository
{
public class FlightRepository : IFlightRepository
public void CreateFlight(Flight flight)
{
private readonly List<Flight> _flights = new List<Flight>();
private int _nextId = 1;
// Реализация создания рейса
}
public IEnumerable<Flight> ReadFlights()
{
return _flights;
}
public void DeleteFlight(int id)
{
// Реализация удаления рейса
}
public Flight ReadFlightById(int id)
{
return _flights.FirstOrDefault(f => f.Id == id);
}
public Flight ReadFlightById(int flightId)
{
// Реализация чтения рейса по ID
return Flight.CreateOperation(flightId, 0, string.Empty, string.Empty, 0, new List<EmployeeFlight>());
}
public void CreateFlight(Flight flight)
{
var newFlight = Flight.CreateEntity(_nextId++, flight.FlightNumber, flight.DepartureDateTime, flight.ArrivalDateTime, flight.PlaneId, flight.AirportId);
_flights.Add(newFlight);
}
public void UpdateFlight(Flight flight)
{
var existingFlight = _flights.FirstOrDefault(f => f.Id == flight.Id);
if (existingFlight != null)
{
var updatedFlight = Flight.CreateEntity(existingFlight.Id, flight.FlightNumber, flight.DepartureDateTime, flight.ArrivalDateTime, flight.PlaneId, flight.AirportId);
_flights.Remove(existingFlight);
_flights.Add(updatedFlight);
}
}
public void DeleteFlight(int id)
{
var flightToRemove = _flights.FirstOrDefault(f => f.Id == id);
if (flightToRemove != null)
{
_flights.Remove(flightToRemove);
}
}
public IEnumerable<Flight> ReadFlights(DateTime? dateForm = null, DateTime? dateTo = null, int? flightId = null, int? airplaneId = null)
{
// Реализация чтения рейсов с фильтрацией
return new List<Flight>();
}
}

View File

@ -1,49 +1,33 @@
using System.Collections.Generic;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using System.Text;
using System.Threading.Tasks;
namespace YourNamespace.Repositories.Implementations
namespace ProjectAirline.Repositories.Implementations;
public class PassengerRepository : IPassengerRepository
{
public class PassengerRepository : IPassengerRepository
public void CreatePassenger(Passenger passenger)
{
private readonly List<Passenger> _passengers = new List<Passenger>();
private int _nextId = 1;
}
public IEnumerable<Passenger> ReadPassengers()
{
return _passengers;
}
public void DeletePassenger(int id)
{
}
public Passenger ReadPassengerById(int id)
{
return _passengers.FirstOrDefault(p => p.Id == id);
}
public Passenger ReadPassengerById(int id)
{
return null;
}
public void CreatePassenger(Passenger passenger)
{
var newPassenger = Passenger.CreateEntity(_nextId++, passenger.FirstName, passenger.LastName, passenger.PassportNumber);
_passengers.Add(newPassenger);
}
public IEnumerable<Passenger> ReadPassengers()
{
return [];
}
public void UpdatePassenger(Passenger passenger)
{
var existingPassenger = _passengers.FirstOrDefault(p => p.Id == passenger.Id);
if (existingPassenger != null)
{
var updatedPassenger = Passenger.CreateEntity(existingPassenger.Id, passenger.FirstName, passenger.LastName, passenger.PassportNumber);
_passengers.Remove(existingPassenger);
_passengers.Add(updatedPassenger);
}
}
public void DeletePassenger(int id)
{
var passengerToRemove = _passengers.FirstOrDefault(p => p.Id == id);
if (passengerToRemove != null)
{
_passengers.Remove(passengerToRemove);
}
}
public void UpdatePassenger(Passenger passenger)
{
}
}

View File

@ -1,49 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
namespace YourNamespace.Repositories.Implementations
{
public class PlaneRepository : IPlaneRepository
{
private readonly List<Plane> _planes = new List<Plane>();
private int _nextId = 1;
public IEnumerable<Plane> ReadPlanes()
{
return _planes;
}
public Plane ReadPlaneById(int id)
{
return _planes.FirstOrDefault(p => p.Id == id);
}
public void CreatePlane(Plane plane)
{
var newPlane = Plane.CreateEntity(_nextId++, plane.Model, plane.Capacity);
_planes.Add(newPlane);
}
public void UpdatePlane(Plane plane)
{
var existingPlane = _planes.FirstOrDefault(p => p.Id == plane.Id);
if (existingPlane != null)
{
var updatedPlane = Plane.CreateEntity(existingPlane.Id, plane.Model, plane.Capacity);
_planes.Remove(existingPlane);
_planes.Add(updatedPlane);
}
}
public void DeletePlane(int id)
{
var planeToRemove = _planes.FirstOrDefault(p => p.Id == id);
if (planeToRemove != null)
{
_planes.Remove(planeToRemove);
}
}
}
}

View File

@ -1,49 +1,29 @@
using System.Collections.Generic;
using ProjectAirline.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using YourNamespace.Entities;
using YourNamespace.Repositories;
using System.Text;
using System.Threading.Tasks;
namespace YourNamespace.Repositories.Implementations
namespace ProjectAirline.Repositories.Implementations;
public class TicketRepository : ITicketRepository
{
public class TicketRepository : ITicketRepository
public void CreateTicket(Ticket ticket)
{
private readonly List<Ticket> _tickets = new List<Ticket>();
private int _nextId = 1;
}
public IEnumerable<Ticket> ReadTickets()
{
return _tickets;
}
public Ticket ReadTicketById(int id)
{
return null;
}
public Ticket ReadTicketById(int id)
{
return _tickets.FirstOrDefault(t => t.Id == id);
}
public IEnumerable<Ticket> ReadTickets()
{
return [];
}
public void CreateTicket(Ticket ticket)
{
var newTicket = Ticket.CreateEntity(_nextId++, ticket.PassengerId, ticket.FlightId, ticket.DateBuy, ticket.TicketPrice);
_tickets.Add(newTicket);
}
public void UpdateTicket(Ticket ticket)
{
var existingTicket = _tickets.FirstOrDefault(t => t.Id == ticket.Id);
if (existingTicket != null)
{
var updatedTicket = Ticket.CreateEntity(existingTicket.Id, ticket.PassengerId, ticket.FlightId, ticket.DateBuy, ticket.TicketPrice);
_tickets.Remove(existingTicket);
_tickets.Add(updatedTicket);
}
}
public void DeleteTicket(int id)
{
var ticketToRemove = _tickets.FirstOrDefault(t => t.Id == id);
if (ticketToRemove != null)
{
_tickets.Remove(ticketToRemove);
}
}
public void UpdateTicket(Ticket ticket)
{
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB