diff --git a/ProjectLibrary/Entites/Book.cs b/ProjectLibrary/Entites/Book.cs new file mode 100644 index 0000000..bb5894b --- /dev/null +++ b/ProjectLibrary/Entites/Book.cs @@ -0,0 +1,25 @@ +namespace ProjectLibrary.Entities +{ + using ProjectLibrary.Entities.Enums; + + public class Book + { + public int Id { get; private set; } + public string Author { get; private set; } = string.Empty; + public string Name { get; private set; } = string.Empty; + public BookType Type { get; set; } = BookType.None; + public int LibraryID { get; private set; } + + public static Book CreateEntity(int id, string author, string name, int libraryID, BookType type = BookType.None) + { + return new Book + { + Id = id, + Author = author ?? string.Empty, + Name = name ?? string.Empty, + LibraryID = libraryID, + Type = type + }; + } + } +} diff --git a/ProjectLibrary/Entites/Book_Orders.cs b/ProjectLibrary/Entites/Book_Orders.cs new file mode 100644 index 0000000..6f7c6e2 --- /dev/null +++ b/ProjectLibrary/Entites/Book_Orders.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLibrary.Entites +{ + public class Book_Orders + { + public int BookID { get; private set; } + public int OrderID { get; private set; } + + public static Book_Orders CreateEntity(int orderID,int bookID ) + { + return new Book_Orders + { + BookID = bookID, + OrderID = orderID + }; + } + } +} diff --git a/ProjectLibrary/Entites/Book_library.cs b/ProjectLibrary/Entites/Book_library.cs new file mode 100644 index 0000000..5c08041 --- /dev/null +++ b/ProjectLibrary/Entites/Book_library.cs @@ -0,0 +1,19 @@ +namespace ProjectLibrary.Entites +{ + public class Book_Library + { + public int BookID { get; private set; } + public int LibraryID { get; private set; } + public int Count { get; private set; } + + public static Book_Library CreateEntity(int libraryID, int bookID, int count) + { + return new Book_Library + { + BookID = bookID, + LibraryID = libraryID, + Count = count + }; + } + } +} diff --git a/ProjectLibrary/Entites/Enums/BookStatus.cs b/ProjectLibrary/Entites/Enums/BookStatus.cs new file mode 100644 index 0000000..73e2de7 --- /dev/null +++ b/ProjectLibrary/Entites/Enums/BookStatus.cs @@ -0,0 +1,11 @@ +namespace ProjectLibrary.Entities.Enums +{ + public enum BookStatus + { + None = 0, + Available = 1, + CheckedOut = 2, + Reserved = 3, + Lost = 4 + } +} diff --git a/ProjectLibrary/Entites/Enums/BookType.cs b/ProjectLibrary/Entites/Enums/BookType.cs new file mode 100644 index 0000000..865fa09 --- /dev/null +++ b/ProjectLibrary/Entites/Enums/BookType.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLibrary.Entities.Enums +{ + [Flags] + public enum BookType + { + None = 0, + Fiction = 1, + NonFiction = 2, + Science = 4, + History = 8, + Mystery = 16, + Fantasy = 32 + } +} \ No newline at end of file diff --git a/ProjectLibrary/Entites/Library.cs b/ProjectLibrary/Entites/Library.cs new file mode 100644 index 0000000..0cc6ead --- /dev/null +++ b/ProjectLibrary/Entites/Library.cs @@ -0,0 +1,32 @@ +using ProjectLibrary.Forms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLibrary.Entites +{ + public class Library + { + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public IEnumerable BookLibrary + { + get; + private set; + } = []; + + public static Library CreateEntity(int id, string name, string address, IEnumerable bookLibrary) + { + return new Library + { + Id = id, + Name = name ?? string.Empty, + Address = address ?? string.Empty, + BookLibrary = bookLibrary + }; + } + } +} diff --git a/ProjectLibrary/Entites/Orders.cs b/ProjectLibrary/Entites/Orders.cs new file mode 100644 index 0000000..2065d1f --- /dev/null +++ b/ProjectLibrary/Entites/Orders.cs @@ -0,0 +1,36 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectLibrary.Entites +{ + public class Orders + { + public int Id { get; private set; } + public DateTime OrderDate { get; private set; } + public DateTime ReturnDate { get; private set; } + public int ReaderID { get; private set; } + + public IEnumerable BookOrders + { + get; + private set; + } = []; + + + public static Orders CreateEntity(int id, DateTime orderDate, DateTime returnDate, int readerID, IEnumerable bookOrders) + { + return new Orders + { + Id = id, + OrderDate = orderDate, + ReturnDate = returnDate, + ReaderID = readerID, + BookOrders = bookOrders + }; + } + } +} diff --git a/ProjectLibrary/Entites/Reader.cs b/ProjectLibrary/Entites/Reader.cs new file mode 100644 index 0000000..c46b5af --- /dev/null +++ b/ProjectLibrary/Entites/Reader.cs @@ -0,0 +1,21 @@ +namespace ProjectLibrary.Entities +{ + public class Reader + { + public int Id { get; private set; } + public string Name { get; private set; } = string.Empty; + public int ReaderTicket { get; private set; } + public DateTime RegistrationDateRT { get; private set; } // Изменение на DateTime + + public static Reader CreateEntity(int id, string name, int readerTicket) + { + return new Reader + { + Id = id, + Name = name ?? string.Empty, + ReaderTicket = readerTicket, + RegistrationDateRT = DateTime.Now + }; + } + } +} diff --git a/ProjectLibrary/Entites/Ticket_Extension.cs b/ProjectLibrary/Entites/Ticket_Extension.cs new file mode 100644 index 0000000..2f6f2dc --- /dev/null +++ b/ProjectLibrary/Entites/Ticket_Extension.cs @@ -0,0 +1,19 @@ +namespace ProjectLibrary.Entites +{ + public class TicketExtensions + { + public int ReaderID { get; private set; } + public DateTime LastUpdateDate { get; private set; } + public DateTime NextUpdateDate { get; private set; } + + public static TicketExtensions CreateEntity(int readerID, DateTime lastUpdateDate, DateTime nextUpdateDate) + { + return new TicketExtensions + { + ReaderID = readerID, + LastUpdateDate = lastUpdateDate, + NextUpdateDate = nextUpdateDate + }; + } + } +} diff --git a/ProjectLibrary/Form1.Designer.cs b/ProjectLibrary/Form1.Designer.cs deleted file mode 100644 index 11bc596..0000000 --- a/ProjectLibrary/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectLibrary -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/ProjectLibrary/Form1.cs b/ProjectLibrary/Form1.cs deleted file mode 100644 index fa0ca5b..0000000 --- a/ProjectLibrary/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectLibrary -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectLibrary/FormLibrary.Designer.cs b/ProjectLibrary/FormLibrary.Designer.cs new file mode 100644 index 0000000..ad19e59 --- /dev/null +++ b/ProjectLibrary/FormLibrary.Designer.cs @@ -0,0 +1,141 @@ +namespace ProjectLibrary +{ + partial class FormLibrary + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + книгаToolStripMenuItem = new ToolStripMenuItem(); + читателиToolStripMenuItem = new ToolStripMenuItem(); + библиотекиToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + обновлениеБилетаToolStripMenuItem = new ToolStripMenuItem(); + заказатьКнигиToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.BackColor = Color.SlateGray; + menuStrip1.ImageScalingSize = new Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new Padding(5, 2, 0, 2); + menuStrip1.Size = new Size(728, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { книгаToolStripMenuItem, читателиToolStripMenuItem, библиотекиToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // книгаToolStripMenuItem + // + книгаToolStripMenuItem.Name = "книгаToolStripMenuItem"; + книгаToolStripMenuItem.Size = new Size(180, 22); + книгаToolStripMenuItem.Text = "Книга"; + книгаToolStripMenuItem.Click += книгаToolStripMenuItem_Click; + // + // читателиToolStripMenuItem + // + читателиToolStripMenuItem.Name = "читателиToolStripMenuItem"; + читателиToolStripMenuItem.Size = new Size(180, 22); + читателиToolStripMenuItem.Text = "Читатели"; + читателиToolStripMenuItem.Click += читателиToolStripMenuItem_Click; + // + // библиотекиToolStripMenuItem + // + библиотекиToolStripMenuItem.Name = "библиотекиToolStripMenuItem"; + библиотекиToolStripMenuItem.Size = new Size(180, 22); + библиотекиToolStripMenuItem.Text = "Библиотеки"; + библиотекиToolStripMenuItem.Click += библиотекиToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { обновлениеБилетаToolStripMenuItem, заказатьКнигиToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(75, 20); + операцииToolStripMenuItem.Text = "Операции"; + // + // обновлениеБилетаToolStripMenuItem + // + обновлениеБилетаToolStripMenuItem.Name = "обновлениеБилетаToolStripMenuItem"; + обновлениеБилетаToolStripMenuItem.Size = new Size(184, 22); + обновлениеБилетаToolStripMenuItem.Text = "Обновление билета"; + обновлениеБилетаToolStripMenuItem.Click += обновлениеБилетаToolStripMenuItem_Click; + // + // заказатьКнигиToolStripMenuItem + // + заказатьКнигиToolStripMenuItem.Name = "заказатьКнигиToolStripMenuItem"; + заказатьКнигиToolStripMenuItem.Size = new Size(184, 22); + заказатьКнигиToolStripMenuItem.Text = "Заказать книги"; + заказатьКнигиToolStripMenuItem.Click += заказатьКнигиToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormLibrary + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = SystemColors.ButtonHighlight; + BackgroundImage = Properties.Resources.Снимок_экрана_2024_11_19_132940; + ClientSize = new Size(728, 340); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Margin = new Padding(3, 2, 3, 2); + Name = "FormLibrary"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Библиотека"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem книгаToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem обновлениеБилетаToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem читателиToolStripMenuItem; + private ToolStripMenuItem библиотекиToolStripMenuItem; + private ToolStripMenuItem заказатьКнигиToolStripMenuItem; + } +} diff --git a/ProjectLibrary/FormLibrary.cs b/ProjectLibrary/FormLibrary.cs new file mode 100644 index 0000000..1baf67b --- /dev/null +++ b/ProjectLibrary/FormLibrary.cs @@ -0,0 +1,75 @@ +using Unity; + +namespace ProjectLibrary +{ + public partial class FormLibrary : Form + { + private readonly IUnityContainer _container; + + public FormLibrary(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectLibrary/FormLibrary.resx b/ProjectLibrary/FormLibrary.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectLibrary/FormLibrary.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FBook.Designer.cs b/ProjectLibrary/Forms/FBook.Designer.cs new file mode 100644 index 0000000..853de9c --- /dev/null +++ b/ProjectLibrary/Forms/FBook.Designer.cs @@ -0,0 +1,162 @@ +namespace ProjectLibrary.Forms +{ + partial class FBook + { + /// + /// Обязательная переменная конструктора + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Очистка всех используемых ресурсов + /// + /// true, если управляемые ресурсы нужно освободить; иначе false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором Windows Form Designer + + /// + /// Требуемый метод для поддержки конструктора - не изменяйте + /// содержимое этого метода с помощью редактора кода. + /// + private void InitializeComponent() + { + lblAuthor = new Label(); + txtAuthor = new TextBox(); + lblName = new Label(); + txtName = new TextBox(); + lblType = new Label(); + lblLibraryId = new Label(); + btnSave = new Button(); + buttonCancel_Click = new Button(); + comboBoxLibrary = new ComboBox(); + checkedListBox1 = new CheckedListBox(); + SuspendLayout(); + // + // lblAuthor + // + lblAuthor.AutoSize = true; + lblAuthor.Location = new Point(19, 25); + lblAuthor.Name = "lblAuthor"; + lblAuthor.Size = new Size(54, 20); + lblAuthor.TabIndex = 2; + lblAuthor.Text = "Автор:"; + // + // txtAuthor + // + txtAuthor.Location = new Point(105, 25); + txtAuthor.Name = "txtAuthor"; + txtAuthor.Size = new Size(246, 27); + txtAuthor.TabIndex = 3; + // + // lblName + // + lblName.AutoSize = true; + lblName.Location = new Point(19, 65); + lblName.Name = "lblName"; + lblName.Size = new Size(80, 20); + lblName.TabIndex = 4; + lblName.Text = "Название:"; + // + // txtName + // + txtName.Location = new Point(105, 65); + txtName.Name = "txtName"; + txtName.Size = new Size(246, 27); + txtName.TabIndex = 5; + // + // lblType + // + lblType.AutoSize = true; + lblType.Location = new Point(19, 105); + lblType.Name = "lblType"; + lblType.Size = new Size(38, 20); + lblType.TabIndex = 6; + lblType.Text = "Тип:"; + // + // lblLibraryId + // + lblLibraryId.AutoSize = true; + lblLibraryId.Location = new Point(19, 226); + lblLibraryId.Name = "lblLibraryId"; + lblLibraryId.Size = new Size(114, 20); + lblLibraryId.TabIndex = 8; + lblLibraryId.Text = "ID библиотеки:"; + // + // btnSave + // + btnSave.Location = new Point(19, 266); + btnSave.Name = "btnSave"; + btnSave.Size = new Size(100, 30); + btnSave.TabIndex = 10; + btnSave.Text = "Сохранить"; + btnSave.UseVisualStyleBackColor = true; + btnSave.Click += btnSave_Click; + // + // buttonCancel_Click + // + buttonCancel_Click.Location = new Point(251, 266); + buttonCancel_Click.Name = "buttonCancel_Click"; + buttonCancel_Click.Size = new Size(100, 30); + buttonCancel_Click.TabIndex = 11; + buttonCancel_Click.Text = "Отмена"; + buttonCancel_Click.Click += ButtonCancel_Click; + // + // comboBoxLibrary + // + comboBoxLibrary.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxLibrary.FormattingEnabled = true; + comboBoxLibrary.Items.AddRange(new object[] { "Fiction", "Non-Fiction", "Science", "Biography" }); + comboBoxLibrary.Location = new Point(151, 223); + comboBoxLibrary.Name = "comboBoxLibrary"; + comboBoxLibrary.Size = new Size(200, 28); + comboBoxLibrary.TabIndex = 12; + // + // checkedListBox1 + // + checkedListBox1.FormattingEnabled = true; + checkedListBox1.Location = new Point(105, 105); + checkedListBox1.Name = "checkedListBox1"; + checkedListBox1.Size = new Size(246, 114); + checkedListBox1.TabIndex = 13; + checkedListBox1.SelectedIndexChanged += checkedListBox1_SelectedIndexChanged; + // + // FBook + // + ClientSize = new Size(400, 300); + Controls.Add(checkedListBox1); + Controls.Add(comboBoxLibrary); + Controls.Add(buttonCancel_Click); + Controls.Add(lblAuthor); + Controls.Add(txtAuthor); + Controls.Add(lblName); + Controls.Add(txtName); + Controls.Add(lblType); + Controls.Add(lblLibraryId); + Controls.Add(btnSave); + Name = "FBook"; + Text = "Книга"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.Label lblAuthor; + private System.Windows.Forms.TextBox txtAuthor; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.TextBox txtName; + private System.Windows.Forms.Label lblType; + private System.Windows.Forms.Label lblLibraryId; + private System.Windows.Forms.Button btnSave; + private Button buttonCancel_Click; + private ComboBox comboBoxLibrary; + private CheckedListBox checkedListBox1; + } +} diff --git a/ProjectLibrary/Forms/FBook.cs b/ProjectLibrary/Forms/FBook.cs new file mode 100644 index 0000000..9732e74 --- /dev/null +++ b/ProjectLibrary/Forms/FBook.cs @@ -0,0 +1,125 @@ +using ProjectLibrary.Entities; +using ProjectLibrary.Entities.Enums; +using ProjectLibrary.Repositores; +using ProjectLibrary.Repositories; + +namespace ProjectLibrary.Forms +{ + public partial class FBook : Form + { + private readonly IBookRepository _bookRepository; + private int? _bookId; + + public int Id + { + set + { + try + { + var book = _bookRepository.ReadBookById(value); + if (book == null) + { + throw new InvalidOperationException("Книга не найдена."); + } + + txtAuthor.Text = book.Author; + txtName.Text = book.Name; + //cmbType.SelectedItem = book.Type; + comboBoxLibrary.SelectedItem = book.LibraryID; + _bookId = value; + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + public FBook(IBookRepository bookRepository, ILibraryRepository libraryRepository) + { + InitializeComponent(); + _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); + comboBoxLibrary.DataSource = libraryRepository.ReadLibraries(); + foreach(var elem in Enum.GetValues(typeof(BookType))) + { + if (!elem.Equals(BookType.None)) checkedListBox1.Items.Add(elem); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(txtAuthor.Text) || string.IsNullOrWhiteSpace(txtName.Text) || comboBoxLibrary.SelectedItem == null) + { + throw new Exception("Имеются незаполненные поля."); + } + + BookType selectedType = BookType.None; + + foreach (var item in checkedListBox1.CheckedItems) + { + if (item is BookType type) + { + selectedType |= type; + } + } + + var book = Book.CreateEntity( + _bookId ?? 0, + txtAuthor.Text, + txtName.Text, + Convert.ToInt32(comboBoxLibrary.SelectedItem), + selectedType + ); + + if (_bookId.HasValue) + { + _bookRepository.UpdateBook(book); + } + else + { + _bookRepository.CreateBook(book); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) + { + Close(); + } + + private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e) + { + try + { + BookType selectedType = BookType.None; + + + foreach (var item in checkedListBox1.CheckedItems) + { + if (item is BookType type) + { + selectedType |= type; + } + } + + + var book = _bookRepository.ReadBookById(_bookId ?? 0); + book.Type = selectedType; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при обработке выбора", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + } +} diff --git a/ProjectLibrary/Forms/FBook.resx b/ProjectLibrary/Forms/FBook.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectLibrary/Forms/FBook.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FBooks.Designer.cs b/ProjectLibrary/Forms/FBooks.Designer.cs new file mode 100644 index 0000000..b11ed39 --- /dev/null +++ b/ProjectLibrary/Forms/FBooks.Designer.cs @@ -0,0 +1,106 @@ +namespace ProjectLibrary.Forms +{ + partial class FBooks + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewBooks = new DataGridView(); + buttonAdd = new Button(); + buttonUpdate = new Button(); + buttonRemove = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewBooks).BeginInit(); + SuspendLayout(); + // + // dataGridViewBooks + // + dataGridViewBooks.AllowUserToAddRows = false; + dataGridViewBooks.AllowUserToDeleteRows = false; + dataGridViewBooks.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewBooks.Location = new Point(10, 9); + dataGridViewBooks.Margin = new Padding(3, 2, 3, 2); + dataGridViewBooks.Name = "dataGridViewBooks"; + dataGridViewBooks.ReadOnly = true; + dataGridViewBooks.RowHeadersWidth = 51; + dataGridViewBooks.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewBooks.Size = new Size(602, 254); + dataGridViewBooks.TabIndex = 8; + // + // buttonAdd + // + buttonAdd.Location = new Point(27, 267); + buttonAdd.Margin = new Padding(3, 2, 3, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(161, 37); + buttonAdd.TabIndex = 9; + buttonAdd.Text = "Добавить"; + buttonAdd.Click += buttonAdd_Click; + // + // buttonUpdate + // + buttonUpdate.Location = new Point(247, 267); + buttonUpdate.Margin = new Padding(3, 2, 3, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(161, 37); + buttonUpdate.TabIndex = 10; + buttonUpdate.Text = "Изменить"; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonRemove + // + buttonRemove.Location = new Point(452, 267); + buttonRemove.Margin = new Padding(3, 2, 3, 2); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(161, 37); + buttonRemove.TabIndex = 11; + buttonRemove.Text = "Удалить"; + buttonRemove.Click += buttonRemove_Click; + // + // FBooks + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(700, 338); + Controls.Add(dataGridViewBooks); + Controls.Add(buttonAdd); + Controls.Add(buttonUpdate); + Controls.Add(buttonRemove); + Margin = new Padding(3, 2, 3, 2); + Name = "FBooks"; + Text = "FBooks"; + Load += FBooks_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewBooks).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewBooks; + private Button buttonAdd; + private Button buttonUpdate; + private Button buttonRemove; + } +} \ No newline at end of file diff --git a/ProjectLibrary/Forms/FBooks.cs b/ProjectLibrary/Forms/FBooks.cs new file mode 100644 index 0000000..91e6c78 --- /dev/null +++ b/ProjectLibrary/Forms/FBooks.cs @@ -0,0 +1,122 @@ +using ProjectLibrary.Repositores; +using Unity; + +namespace ProjectLibrary.Forms +{ + public partial class FBooks : Form + { + private readonly IUnityContainer _container; + private readonly IBookRepository _bookRepository; + + public FBooks(IUnityContainer container, IBookRepository bookRepository) + { + InitializeComponent(); // Инициализация компонентов формы, включая DataGridView. + _container = container ?? throw new ArgumentNullException(nameof(container)); + _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); + } + + private void LoadList() + { + // Привязывает к DataGridView коллекцию книг, полученную из репозитория. + // Устанавливает источник данных DataGridView (dataGridViewBooks) как список объектов из ReadBooks(). + dataGridViewBooks.DataSource = _bookRepository.ReadBooks(); + } + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + // Проверяет, выбрана ли хотя бы одна строка в DataGridView. + if (dataGridViewBooks.SelectedRows.Count < 1) + { + // Если строка не выбрана, отображает сообщение об ошибке. + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + // Извлекает идентификатор (ID) из выбранной строки, используя значение ячейки столбца "Id". + id = Convert.ToInt32(dataGridViewBooks.SelectedRows[0].Cells["Id"].Value); + return true; + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + // Открывает форму добавления книги. + _container.Resolve().ShowDialog(); + + // После добавления обновляет список записей в DataGridView. + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonUpdate_Click(object sender, EventArgs e) + { + // Получает ID выбранной строки из DataGridView. + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + // Открывает форму редактирования книги с указанным ID. + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + + // После редактирования обновляет список записей в DataGridView. + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonRemove_Click(object sender, EventArgs e) + { + // Получает ID выбранной строки из DataGridView. + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + // Подтверждение удаления записи. + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + // Удаляет запись через репозиторий. + _bookRepository.DeleteBook(findId); + + // После удаления обновляет список записей в DataGridView. + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FBooks_Load(object sender, EventArgs e) + { + try + { + // При загрузке формы заполняет DataGridView данными из репозитория. + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectLibrary/Forms/FBooks.resx b/ProjectLibrary/Forms/FBooks.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectLibrary/Forms/FBooks.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FLibraries.Designer.cs b/ProjectLibrary/Forms/FLibraries.Designer.cs new file mode 100644 index 0000000..0334104 --- /dev/null +++ b/ProjectLibrary/Forms/FLibraries.Designer.cs @@ -0,0 +1,105 @@ +namespace ProjectLibrary.Forms +{ + partial class FLibraries + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewOrders = new DataGridView(); + buttonAdd = new Button(); + buttonUpdate = new Button(); + buttonRemove = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewOrders).BeginInit(); + SuspendLayout(); + // + // dataGridViewOrders + // + dataGridViewOrders.AllowUserToAddRows = false; + dataGridViewOrders.AllowUserToDeleteRows = false; + dataGridViewOrders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewOrders.Location = new Point(12, 11); + dataGridViewOrders.Margin = new Padding(3, 2, 3, 2); + dataGridViewOrders.Name = "dataGridViewOrders"; + dataGridViewOrders.ReadOnly = true; + dataGridViewOrders.RowHeadersWidth = 51; + dataGridViewOrders.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewOrders.Size = new Size(525, 225); + dataGridViewOrders.TabIndex = 8; + // + // buttonAdd + // + buttonAdd.Location = new Point(12, 251); + buttonAdd.Margin = new Padding(3, 2, 3, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(88, 22); + buttonAdd.TabIndex = 9; + buttonAdd.Text = "Добавить"; + buttonAdd.Click += buttonAdd_Click; + // + // buttonUpdate + // + buttonUpdate.Location = new Point(227, 251); + buttonUpdate.Margin = new Padding(3, 2, 3, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(88, 22); + buttonUpdate.TabIndex = 10; + buttonUpdate.Text = "Изменить"; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonRemove + // + buttonRemove.Location = new Point(450, 251); + buttonRemove.Margin = new Padding(3, 2, 3, 2); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(88, 22); + buttonRemove.TabIndex = 11; + buttonRemove.Text = "Удалить"; + buttonRemove.Click += buttonRemove_Click; + // + // FLibraries + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(562, 283); + Controls.Add(dataGridViewOrders); + Controls.Add(buttonAdd); + Controls.Add(buttonUpdate); + Controls.Add(buttonRemove); + Name = "FLibraries"; + Text = "FLibraries"; + Load += FLibraries_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewOrders).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewOrders; + private Button buttonAdd; + private Button buttonUpdate; + private Button buttonRemove; + } +} \ No newline at end of file diff --git a/ProjectLibrary/Forms/FLibraries.cs b/ProjectLibrary/Forms/FLibraries.cs new file mode 100644 index 0000000..499a120 --- /dev/null +++ b/ProjectLibrary/Forms/FLibraries.cs @@ -0,0 +1,102 @@ +using ProjectLibrary.Repositories; +using Unity; + +namespace ProjectLibrary.Forms +{ + public partial class FLibraries : Form + { + private readonly IUnityContainer _container; + private readonly ILibraryRepository _libraryRepository; + + public FLibraries(IUnityContainer container, ILibraryRepository libraryRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _libraryRepository = libraryRepository ?? throw new ArgumentNullException(nameof(libraryRepository)); + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + 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)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonRemove_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _libraryRepository.DeleteLibrary(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FLibraries_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() + { + dataGridViewOrders.DataSource = _libraryRepository.ReadLibraries(); + } + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewOrders.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewOrders.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ProjectLibrary/Forms/FLibraries.resx b/ProjectLibrary/Forms/FLibraries.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectLibrary/Forms/FLibraries.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FLibrary.Designer.cs b/ProjectLibrary/Forms/FLibrary.Designer.cs new file mode 100644 index 0000000..05898f0 --- /dev/null +++ b/ProjectLibrary/Forms/FLibrary.Designer.cs @@ -0,0 +1,132 @@ +namespace ProjectLibrary.Forms +{ + partial class FLibrary + { + private System.ComponentModel.IContainer components = null; + private Label lblName; + private TextBox txtName; + private Label lblAddress; + private TextBox txtAddress; + private Button ButtonSave; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + lblName = new Label(); + txtName = new TextBox(); + lblAddress = new Label(); + txtAddress = new TextBox(); + ButtonSave = new Button(); + buttonCancel_Click = new Button(); + dataGridView = new DataGridView(); + Book = new DataGridViewComboBoxColumn(); + Count = new DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // lblName + // + lblName.AutoSize = true; + lblName.Location = new Point(20, 9); + lblName.Name = "lblName"; + lblName.Size = new Size(62, 15); + lblName.TabIndex = 2; + lblName.Text = "Название:"; + // + // txtName + // + txtName.Location = new Point(100, 12); + txtName.Name = "txtName"; + txtName.Size = new Size(200, 23); + txtName.TabIndex = 3; + // + // lblAddress + // + lblAddress.AutoSize = true; + lblAddress.Location = new Point(20, 49); + lblAddress.Name = "lblAddress"; + lblAddress.Size = new Size(43, 15); + lblAddress.TabIndex = 4; + lblAddress.Text = "Адрес:"; + // + // txtAddress + // + txtAddress.Location = new Point(100, 49); + txtAddress.Name = "txtAddress"; + txtAddress.Size = new Size(200, 23); + txtAddress.TabIndex = 5; + // + // ButtonSave + // + ButtonSave.Location = new Point(20, 224); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(100, 27); + ButtonSave.TabIndex = 14; + ButtonSave.Text = "Сохранить"; + ButtonSave.Click += ButtonSave_Click; + // + // buttonCancel_Click + // + buttonCancel_Click.Location = new Point(200, 222); + buttonCancel_Click.Name = "buttonCancel_Click"; + buttonCancel_Click.Size = new Size(100, 30); + buttonCancel_Click.TabIndex = 10; + buttonCancel_Click.Text = "Отмена"; + buttonCancel_Click.Click += buttonCancel_Click_Click; + // + // dataGridView + // + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { Book, Count }); + dataGridView.Location = new Point(20, 93); + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersWidth = 51; + dataGridView.Size = new Size(280, 123); + dataGridView.TabIndex = 13; + // + // Book + // + Book.HeaderText = "Book"; + Book.MinimumWidth = 6; + Book.Name = "Book"; + Book.SortMode = DataGridViewColumnSortMode.Automatic; + Book.Width = 125; + // + // Count + // + Count.HeaderText = "Count"; + Count.MinimumWidth = 6; + Count.Name = "Count"; + Count.Width = 125; + // + // FLibrary + // + ClientSize = new Size(400, 436); + Controls.Add(dataGridView); + Controls.Add(buttonCancel_Click); + Controls.Add(lblName); + Controls.Add(txtName); + Controls.Add(lblAddress); + Controls.Add(txtAddress); + Controls.Add(ButtonSave); + Name = "FLibrary"; + Text = "Библиотека"; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + private Button buttonCancel_Click; + private DataGridView dataGridView; + private DataGridViewComboBoxColumn Book; + private DataGridViewTextBoxColumn Count; + } +} diff --git a/ProjectLibrary/Forms/FLibrary.cs b/ProjectLibrary/Forms/FLibrary.cs new file mode 100644 index 0000000..5e94e6c --- /dev/null +++ b/ProjectLibrary/Forms/FLibrary.cs @@ -0,0 +1,99 @@ +using ProjectLibrary.Entites; +using ProjectLibrary.Repositores; +using ProjectLibrary.Repositories; +using ProjectLibrary.Repositories.Implementations; +using System.Windows.Forms; + + +namespace ProjectLibrary.Forms +{ + public partial class FLibrary : Form + { + private readonly ILibraryRepository _libraryRepository; + private int? _orderId; + public int Id + { + set + { + try + { + var library = _libraryRepository.ReadLibraryById(value); + if (library == null) + { + throw new InvalidOperationException("Заказ не найден."); + } + + txtName.Text = library.Name; + txtAddress.Text = library.Address; + dataGridView.DataSource = library.BookLibrary; + _orderId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + public FLibrary(ILibraryRepository libraryRepository, IBookRepository bookRepository) + { + InitializeComponent(); + _libraryRepository = libraryRepository ?? throw new ArgumentNullException(nameof(libraryRepository)); + + Book.DataSource = bookRepository.ReadBooks(); + Book.DisplayMember = "Name"; + Book.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(txtName.Text) || string.IsNullOrWhiteSpace(txtAddress.Text)) + { + throw new Exception("Не все поля заполнены."); + } + + var library = Library.CreateEntity( + _orderId ?? 0, + txtName.Text, + txtAddress.Text, + CreateListBooksFromDataGrid() + ); + + if (_orderId.HasValue) + { + _libraryRepository.UpdateLibrary(library); + } + else + { + _libraryRepository.CreateLibrary(library); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click_Click(object sender, EventArgs e) + { + this.Close(); + } + + private List CreateListBooksFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["Book"].Value == null || row.Cells["Count"].Value == null) + { + continue; + } + list.Add(Book_Library.CreateEntity(0, Convert.ToInt32(row.Cells["ColumnBook"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value))); + } + return list; + } + } +} diff --git a/ProjectLibrary/Forms/FLibrary.resx b/ProjectLibrary/Forms/FLibrary.resx new file mode 100644 index 0000000..5faf464 --- /dev/null +++ b/ProjectLibrary/Forms/FLibrary.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FOrder.Designer.cs b/ProjectLibrary/Forms/FOrder.Designer.cs new file mode 100644 index 0000000..1753305 --- /dev/null +++ b/ProjectLibrary/Forms/FOrder.Designer.cs @@ -0,0 +1,156 @@ +namespace ProjectLibrary.Forms +{ + partial class FOrder + { + private System.ComponentModel.IContainer components = null; + private Label lblOrderDate; + private TextBox txtOrderDate; + private Label lblReturnDate; + private TextBox txtReturnDate; + private Label lblReaderID; + private Label lblBookID; + private Button btnSave; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + lblOrderDate = new Label(); + txtOrderDate = new TextBox(); + lblReturnDate = new Label(); + txtReturnDate = new TextBox(); + lblReaderID = new Label(); + lblBookID = new Label(); + btnSave = new Button(); + buttonCancel_Click = new Button(); + comboBox = new ComboBox(); + dataGridViewBook = new DataGridView(); + Book = new DataGridViewComboBoxColumn(); + ((System.ComponentModel.ISupportInitialize)dataGridViewBook).BeginInit(); + SuspendLayout(); + // + // lblOrderDate + // + lblOrderDate.AutoSize = true; + lblOrderDate.Location = new Point(12, 25); + lblOrderDate.Name = "lblOrderDate"; + lblOrderDate.Size = new Size(72, 15); + lblOrderDate.TabIndex = 2; + lblOrderDate.Text = "Дата заказа:"; + // + // txtOrderDate + // + txtOrderDate.Location = new Point(129, 25); + txtOrderDate.Name = "txtOrderDate"; + txtOrderDate.Size = new Size(200, 23); + txtOrderDate.TabIndex = 3; + // + // lblReturnDate + // + lblReturnDate.AutoSize = true; + lblReturnDate.Location = new Point(12, 65); + lblReturnDate.Name = "lblReturnDate"; + lblReturnDate.Size = new Size(86, 15); + lblReturnDate.TabIndex = 4; + lblReturnDate.Text = "Дата возврата:"; + // + // txtReturnDate + // + txtReturnDate.Location = new Point(129, 65); + txtReturnDate.Name = "txtReturnDate"; + txtReturnDate.Size = new Size(200, 23); + txtReturnDate.TabIndex = 5; + // + // lblReaderID + // + lblReaderID.AutoSize = true; + lblReaderID.Location = new Point(12, 105); + lblReaderID.Name = "lblReaderID"; + lblReaderID.Size = new Size(73, 15); + lblReaderID.TabIndex = 6; + lblReaderID.Text = "ID читателя:"; + // + // lblBookID + // + lblBookID.AutoSize = true; + lblBookID.Location = new Point(12, 145); + lblBookID.Name = "lblBookID"; + lblBookID.Size = new Size(56, 15); + lblBookID.TabIndex = 8; + lblBookID.Text = "ID книги:"; + // + // btnSave + // + btnSave.Location = new Point(23, 238); + btnSave.Name = "btnSave"; + btnSave.Size = new Size(100, 30); + btnSave.TabIndex = 10; + btnSave.Text = "Сохранить"; + btnSave.Click += ButtonSave_Click; + // + // buttonCancel_Click + // + buttonCancel_Click.Location = new Point(232, 238); + buttonCancel_Click.Name = "buttonCancel_Click"; + buttonCancel_Click.Size = new Size(100, 30); + buttonCancel_Click.TabIndex = 11; + buttonCancel_Click.Text = "Отмена"; + buttonCancel_Click.Click += ButtonCancel_Click; + // + // comboBox + // + comboBox.Location = new Point(129, 108); + comboBox.Name = "comboBox"; + comboBox.Size = new Size(203, 23); + comboBox.TabIndex = 0; + // + // dataGridViewBook + // + dataGridViewBook.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewBook.Columns.AddRange(new DataGridViewColumn[] { Book }); + dataGridViewBook.Location = new Point(129, 151); + dataGridViewBook.Name = "dataGridViewBook"; + dataGridViewBook.RowHeadersWidth = 51; + dataGridViewBook.Size = new Size(200, 81); + dataGridViewBook.TabIndex = 12; + // + // Book + // + Book.HeaderText = "Book"; + Book.MinimumWidth = 6; + Book.Name = "Book"; + Book.Width = 125; + // + // FOrder + // + ClientSize = new Size(372, 332); + Controls.Add(dataGridViewBook); + Controls.Add(comboBox); + Controls.Add(buttonCancel_Click); + Controls.Add(lblOrderDate); + Controls.Add(txtOrderDate); + Controls.Add(lblReturnDate); + Controls.Add(txtReturnDate); + Controls.Add(lblReaderID); + Controls.Add(lblBookID); + Controls.Add(btnSave); + Name = "FOrder"; + Text = "Заказы"; + ((System.ComponentModel.ISupportInitialize)dataGridViewBook).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + private Button buttonCancel_Click; + private ComboBox comboBox; + private DataGridView dataGridViewBook; + private DataGridViewComboBoxColumn Book; + } +} diff --git a/ProjectLibrary/Forms/FOrder.cs b/ProjectLibrary/Forms/FOrder.cs new file mode 100644 index 0000000..4a0af10 --- /dev/null +++ b/ProjectLibrary/Forms/FOrder.cs @@ -0,0 +1,95 @@ +using ProjectLibrary.Repositories; +using ProjectLibrary.Entites; +using System.Xml.Linq; + +namespace ProjectLibrary.Forms +{ + public partial class FOrder : Form + { + private readonly IOrderRepository _orderRepository; + private int? _orderId; + + public FOrder(IOrderRepository orderRepository) + { + InitializeComponent(); + _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); + } + + public int Id + { + set + { + try + { + var order = _orderRepository.ReadOrderById(value); + if (order == null) + { + throw new InvalidOperationException("Заказ не найден."); + } + + txtOrderDate.Text = order.OrderDate.ToString(); + txtReturnDate.Text = order.ReturnDate.ToString(); + comboBox.SelectedItem = order.ReaderID; + dataGridViewBook.DataSource = order.BookOrders; + _orderId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private List CreateListBooksFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridViewBook.Rows) + { + if (row.Cells["ColumnBook"].Value == null) + { + continue; + } + list.Add(Book_Orders.CreateEntity(0, Convert.ToInt32(row.Cells["ColumnBook"].Value))); + } + return list; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(txtOrderDate.Text) || string.IsNullOrWhiteSpace(txtReturnDate.Text) || comboBox.SelectedItem == null) + { + throw new Exception("Не все поля заполнены."); + } + + var order = Orders.CreateEntity( + _orderId ?? 0, + DateTime.Parse(txtOrderDate.Text), + DateTime.Parse(txtReturnDate.Text), + int.Parse(comboBox.SelectedItem.ToString()), + CreateListBooksFromDataGrid() + ); + + if (_orderId.HasValue) + { + _orderRepository.UpdateOrder(order); + } + else + { + _orderRepository.CreateOrder(order); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) + { + Close(); + } + } +} diff --git a/ProjectLibrary/Forms/FOrder.resx b/ProjectLibrary/Forms/FOrder.resx new file mode 100644 index 0000000..eacd88f --- /dev/null +++ b/ProjectLibrary/Forms/FOrder.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FOrders.Designer.cs b/ProjectLibrary/Forms/FOrders.Designer.cs new file mode 100644 index 0000000..c1b187a --- /dev/null +++ b/ProjectLibrary/Forms/FOrders.Designer.cs @@ -0,0 +1,106 @@ +namespace ProjectLibrary.Forms +{ + partial class FOrders + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridViewOrders = new DataGridView(); + buttonAdd = new Button(); + buttonUpdate = new Button(); + buttonRemove = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridViewOrders).BeginInit(); + SuspendLayout(); + // + // dataGridViewOrders + // + dataGridViewOrders.AllowUserToAddRows = false; + dataGridViewOrders.AllowUserToDeleteRows = false; + dataGridViewOrders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewOrders.Location = new Point(10, 9); + dataGridViewOrders.Margin = new Padding(3, 2, 3, 2); + dataGridViewOrders.Name = "dataGridViewOrders"; + dataGridViewOrders.ReadOnly = true; + dataGridViewOrders.RowHeadersWidth = 51; + dataGridViewOrders.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewOrders.Size = new Size(525, 225); + dataGridViewOrders.TabIndex = 4; + // + // buttonAdd + // + buttonAdd.Location = new Point(10, 249); + buttonAdd.Margin = new Padding(3, 2, 3, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(88, 22); + buttonAdd.TabIndex = 5; + buttonAdd.Text = "Добавить"; + buttonAdd.Click += buttonAdd_Click; + // + // buttonUpdate + // + buttonUpdate.Location = new Point(225, 249); + buttonUpdate.Margin = new Padding(3, 2, 3, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(88, 22); + buttonUpdate.TabIndex = 6; + buttonUpdate.Text = "Изменить"; + buttonUpdate.Click += buttonUpdate_Click; + // + // buttonRemove + // + buttonRemove.Location = new Point(448, 249); + buttonRemove.Margin = new Padding(3, 2, 3, 2); + buttonRemove.Name = "buttonRemove"; + buttonRemove.Size = new Size(88, 22); + buttonRemove.TabIndex = 7; + buttonRemove.Text = "Удалить"; + buttonRemove.Click += buttonRemove_Click; + // + // FOrders + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(551, 309); + Controls.Add(dataGridViewOrders); + Controls.Add(buttonAdd); + Controls.Add(buttonUpdate); + Controls.Add(buttonRemove); + Margin = new Padding(3, 2, 3, 2); + Name = "FOrders"; + Text = "FOrders"; + Load += FOrders_Load; + ((System.ComponentModel.ISupportInitialize)dataGridViewOrders).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridViewOrders; + private Button buttonAdd; + private Button buttonUpdate; + private Button buttonRemove; + } +} \ No newline at end of file diff --git a/ProjectLibrary/Forms/FOrders.cs b/ProjectLibrary/Forms/FOrders.cs new file mode 100644 index 0000000..a43130f --- /dev/null +++ b/ProjectLibrary/Forms/FOrders.cs @@ -0,0 +1,104 @@ +using ProjectLibrary.Repositories; +using Unity; + +namespace ProjectLibrary.Forms +{ + public partial class FOrders : Form + { + private readonly IUnityContainer _container; + private readonly IOrderRepository _orderRepository; + + public FOrders(IUnityContainer container, IOrderRepository orderRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository)); + } + + private void LoadList() + { + dataGridViewOrders.DataSource = _orderRepository.ReadOrders(); + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewOrders.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewOrders.SelectedRows[0].Cells["Id"].Value); + return true; + } + + private void buttonUpdate_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonRemove_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _orderRepository.DeleteOrder(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FOrders_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectLibrary/Forms/FOrders.resx b/ProjectLibrary/Forms/FOrders.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectLibrary/Forms/FOrders.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FReader.Designer.cs b/ProjectLibrary/Forms/FReader.Designer.cs new file mode 100644 index 0000000..35470c4 --- /dev/null +++ b/ProjectLibrary/Forms/FReader.Designer.cs @@ -0,0 +1,98 @@ +namespace ProjectLibrary.Forms +{ + partial class FReader + { + private System.ComponentModel.IContainer components = null; + private Label lblName; + private TextBox txtName; + private Label lblReaderTicket; + private TextBox txtReaderTicket; + private Button btnSave; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + lblName = new Label(); + txtName = new TextBox(); + lblReaderTicket = new Label(); + txtReaderTicket = new TextBox(); + btnSave = new Button(); + buttonCancel_Click = new Button(); + SuspendLayout(); + // + // lblName + // + lblName.AutoSize = true; + lblName.Location = new Point(22, 22); + lblName.Name = "lblName"; + lblName.Size = new Size(42, 20); + lblName.TabIndex = 2; + lblName.Text = "Имя:"; + // + // txtName + // + txtName.Location = new Point(179, 22); + txtName.Name = "txtName"; + txtName.Size = new Size(238, 27); + txtName.TabIndex = 3; + // + // lblReaderTicket + // + lblReaderTicket.AutoSize = true; + lblReaderTicket.Location = new Point(22, 62); + lblReaderTicket.Name = "lblReaderTicket"; + lblReaderTicket.Size = new Size(151, 20); + lblReaderTicket.TabIndex = 4; + lblReaderTicket.Text = "Читательский билет:"; + // + // txtReaderTicket + // + txtReaderTicket.Location = new Point(179, 62); + txtReaderTicket.Name = "txtReaderTicket"; + txtReaderTicket.Size = new Size(238, 27); + txtReaderTicket.TabIndex = 5; + // + // btnSave + // + btnSave.Location = new Point(22, 111); + btnSave.Name = "btnSave"; + btnSave.Size = new Size(100, 30); + btnSave.TabIndex = 8; + btnSave.Text = "Сохранить"; + btnSave.Click += SaveBtn_Click; + // + // buttonCancel_Click + // + buttonCancel_Click.Location = new Point(317, 111); + buttonCancel_Click.Name = "buttonCancel_Click"; + buttonCancel_Click.Size = new Size(100, 30); + buttonCancel_Click.TabIndex = 10; + buttonCancel_Click.Text = "Отмена"; + buttonCancel_Click.Click += DiscardBtn_Click; + // + // FReader + // + ClientSize = new Size(438, 180); + Controls.Add(buttonCancel_Click); + Controls.Add(lblName); + Controls.Add(txtName); + Controls.Add(lblReaderTicket); + Controls.Add(txtReaderTicket); + Controls.Add(btnSave); + Name = "FReader"; + Text = "Читатель"; + ResumeLayout(false); + PerformLayout(); + } + + private Button buttonCancel_Click; + } +} diff --git a/ProjectLibrary/Forms/FReader.cs b/ProjectLibrary/Forms/FReader.cs new file mode 100644 index 0000000..b440943 --- /dev/null +++ b/ProjectLibrary/Forms/FReader.cs @@ -0,0 +1,88 @@ +using System; +using System.Windows.Forms; +using ProjectLibrary.Entities; +using ProjectLibrary.Repositories; + +namespace ProjectLibrary.Forms +{ + public partial class FReader : Form + { + private readonly IReaderRepository _readerRepository; + private int? _readerId; + + public int ID + { + set + { + try + { + var reader = _readerRepository.ReadReaderById(value); + + if (reader == null) + { + throw new InvalidOperationException($"Reader with ID {value} not found."); + } + + txtName.Text = reader.Name; + txtReaderTicket.Text = reader.ReaderTicket.ToString(); + + + _readerId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "[ Error : wrong data ]", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FReader(IReaderRepository readerRepository) + { + InitializeComponent(); + _readerRepository = readerRepository ?? throw new ArgumentNullException(nameof(readerRepository)); + } + + private void SaveBtn_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(txtName.Text) || string.IsNullOrWhiteSpace(txtReaderTicket.Text)) + { + throw new Exception("[ Error : blank spaces were left, not enough information ]"); + } + + var reader = CreateReader(); + + if (_readerId.HasValue) + { + _readerRepository.UpdateReader(reader); + } + else + { + _readerRepository.CreateReader(reader); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "[ Error : while saving ]", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void DiscardBtn_Click(object sender, EventArgs e) + { + Close(); + } + + private Reader CreateReader() + { + return Reader.CreateEntity( + _readerId ?? 0, + txtName.Text, + int.Parse(txtReaderTicket.Text) + ); + } + } +} diff --git a/ProjectLibrary/Forms/FReader.resx b/ProjectLibrary/Forms/FReader.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectLibrary/Forms/FReader.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FReaders.Designer.cs b/ProjectLibrary/Forms/FReaders.Designer.cs new file mode 100644 index 0000000..1b6d877 --- /dev/null +++ b/ProjectLibrary/Forms/FReaders.Designer.cs @@ -0,0 +1,72 @@ +namespace ProjectLibrary.Forms +{ + partial class FReaders + { + private System.ComponentModel.IContainer components = null; + private DataGridView dataGridViewReaders; + private Button buttonAdd; + private Button buttonUpdate; + private Button buttonRemove; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + this.dataGridViewReaders = new DataGridView(); + this.buttonAdd = new Button(); + this.buttonUpdate = new Button(); + this.buttonRemove = new Button(); + + this.SuspendLayout(); + + // dataGridViewReaders + this.dataGridViewReaders.AllowUserToAddRows = false; + this.dataGridViewReaders.AllowUserToDeleteRows = false; + this.dataGridViewReaders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewReaders.Location = new System.Drawing.Point(20, 20); + this.dataGridViewReaders.Name = "dataGridViewReaders"; + this.dataGridViewReaders.ReadOnly = true; + this.dataGridViewReaders.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + this.dataGridViewReaders.Size = new System.Drawing.Size(600, 300); + this.Controls.Add(this.dataGridViewReaders); + + // buttonAdd + this.buttonAdd.Location = new System.Drawing.Point(20, 340); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(100, 30); + this.buttonAdd.Text = "Добавить"; + this.buttonAdd.Click += new EventHandler(this.ButtonAdd_Click); + this.Controls.Add(this.buttonAdd); + + // buttonUpdate + this.buttonUpdate.Location = new System.Drawing.Point(140, 340); + this.buttonUpdate.Name = "buttonUpdate"; + this.buttonUpdate.Size = new System.Drawing.Size(100, 30); + this.buttonUpdate.Text = "Изменить"; + this.buttonUpdate.Click += new EventHandler(this.ButtonUpdate_Click); + this.Controls.Add(this.buttonUpdate); + + // buttonRemove + this.buttonRemove.Location = new System.Drawing.Point(260, 340); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(100, 30); + this.buttonRemove.Text = "Удалить"; + this.buttonRemove.Click += new EventHandler(this.ButtonRemove_Click); + this.Controls.Add(this.buttonRemove); + + // FReaders + this.ClientSize = new System.Drawing.Size(650, 400); + this.Name = "FReaders"; + this.Text = "Список читателей"; + this.Load += new EventHandler(this.FReaders_Load); + this.ResumeLayout(false); + } + } +} diff --git a/ProjectLibrary/Forms/FReaders.cs b/ProjectLibrary/Forms/FReaders.cs new file mode 100644 index 0000000..4d8b770 --- /dev/null +++ b/ProjectLibrary/Forms/FReaders.cs @@ -0,0 +1,104 @@ +using ProjectLibrary.Repositories; +using Unity; +using System; +using System.Windows.Forms; + +namespace ProjectLibrary.Forms +{ + public partial class FReaders : Form + { + private readonly IUnityContainer _container; + private readonly IReaderRepository _readerRepository; + + public FReaders(IUnityContainer container, IReaderRepository readerRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _readerRepository = readerRepository ?? throw new ArgumentNullException(nameof(readerRepository)); + } + private void LoadList() + { + dataGridViewReaders.DataSource = _readerRepository.ReadReaders(); + } + private void FReaders_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().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonRemove_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _readerRepository.DeleteReader(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)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.ID = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewReaders.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridViewReaders.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ProjectLibrary/Form1.resx b/ProjectLibrary/Forms/FReaders.resx similarity index 100% rename from ProjectLibrary/Form1.resx rename to ProjectLibrary/Forms/FReaders.resx diff --git a/ProjectLibrary/Forms/FTicket_Extension.Designer.cs b/ProjectLibrary/Forms/FTicket_Extension.Designer.cs new file mode 100644 index 0000000..090b444 --- /dev/null +++ b/ProjectLibrary/Forms/FTicket_Extension.Designer.cs @@ -0,0 +1,120 @@ +namespace ProjectLibrary.Forms +{ + partial class FTicket_Extension + { + private System.ComponentModel.IContainer components = null; + private Label lblLastUpdateDate; + private DateTimePicker dtpLastUpdateDate; + private Label lblNextUpdateDate; + private DateTimePicker dtpNextUpdateDate; + private Button btnSave; + private Button btnCancel; + + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + lblLastUpdateDate = new Label(); + dtpLastUpdateDate = new DateTimePicker(); + lblNextUpdateDate = new Label(); + dtpNextUpdateDate = new DateTimePicker(); + btnSave = new Button(); + btnCancel = new Button(); + labelId = new Label(); + comboBoxId = new ComboBox(); + SuspendLayout(); + // + // lblLastUpdateDate + // + lblLastUpdateDate.AutoSize = true; + lblLastUpdateDate.Location = new Point(20, 64); + lblLastUpdateDate.Name = "lblLastUpdateDate"; + lblLastUpdateDate.Size = new Size(219, 20); + lblLastUpdateDate.TabIndex = 4; + lblLastUpdateDate.Text = "Дата последнего обновления:"; + // + // dtpLastUpdateDate + // + dtpLastUpdateDate.Location = new Point(276, 59); + dtpLastUpdateDate.Name = "dtpLastUpdateDate"; + dtpLastUpdateDate.Size = new Size(200, 27); + dtpLastUpdateDate.TabIndex = 5; + // + // lblNextUpdateDate + // + lblNextUpdateDate.AutoSize = true; + lblNextUpdateDate.Location = new Point(20, 104); + lblNextUpdateDate.Name = "lblNextUpdateDate"; + lblNextUpdateDate.Size = new Size(223, 20); + lblNextUpdateDate.TabIndex = 6; + lblNextUpdateDate.Text = "Дата следующего обновления:"; + // + // dtpNextUpdateDate + // + dtpNextUpdateDate.Location = new Point(276, 99); + dtpNextUpdateDate.Name = "dtpNextUpdateDate"; + dtpNextUpdateDate.Size = new Size(200, 27); + dtpNextUpdateDate.TabIndex = 7; + // + // btnSave + // + btnSave.Location = new Point(140, 164); + btnSave.Name = "btnSave"; + btnSave.Size = new Size(100, 30); + btnSave.TabIndex = 8; + btnSave.Text = "Сохранить"; + btnSave.Click += btnSave_Click; + // + // btnCancel + // + btnCancel.Location = new Point(250, 164); + btnCancel.Name = "btnCancel"; + btnCancel.Size = new Size(100, 30); + btnCancel.TabIndex = 9; + btnCancel.Text = "Отмена"; + btnCancel.Click += btnCancel_Click; + // + // labelId + // + labelId.AutoSize = true; + labelId.Location = new Point(20, 19); + labelId.Name = "labelId"; + labelId.Size = new Size(173, 20); + labelId.TabIndex = 10; + labelId.Text = "ID Читателского билета"; + // + // comboBoxId + // + comboBoxId.Location = new Point(273, 16); + comboBoxId.Name = "comboBoxId"; + comboBoxId.Size = new Size(203, 28); + comboBoxId.TabIndex = 11; + // + // FTicket_Extension + // + ClientSize = new Size(573, 250); + Controls.Add(comboBoxId); + Controls.Add(labelId); + Controls.Add(lblLastUpdateDate); + Controls.Add(dtpLastUpdateDate); + Controls.Add(lblNextUpdateDate); + Controls.Add(dtpNextUpdateDate); + Controls.Add(btnSave); + Controls.Add(btnCancel); + Name = "FTicket_Extension"; + Text = "Продление билета"; + ResumeLayout(false); + PerformLayout(); + } + + private Label labelId; + private ComboBox comboBoxId; + } +} diff --git a/ProjectLibrary/Forms/FTicket_Extension.cs b/ProjectLibrary/Forms/FTicket_Extension.cs new file mode 100644 index 0000000..385ebab --- /dev/null +++ b/ProjectLibrary/Forms/FTicket_Extension.cs @@ -0,0 +1,75 @@ +using ProjectLibrary.Entites; +using ProjectLibrary.Repositores; + +namespace ProjectLibrary.Forms +{ + public partial class FTicket_Extension : Form + { + private readonly ITicketExtensionsRepository _ticketExtensionsRepository; + private int? _extensionId; + + public int Id + { + set + { + try + { + var ticket = _ticketExtensionsRepository.ReadTicketExtensionById(value); + if (ticket == null) + { + throw new InvalidOperationException("Заказ не найден."); + } + comboBoxId.SelectedItem = ticket.ReaderID; + dtpLastUpdateDate.Text = ticket.LastUpdateDate.ToString(); + dtpNextUpdateDate.Text = ticket.NextUpdateDate.ToString(); + _extensionId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + public FTicket_Extension(ITicketExtensionsRepository ticketRepository) + { + InitializeComponent(); + _ticketExtensionsRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository)); + } + + private void btnSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(dtpLastUpdateDate.Text) || string.IsNullOrWhiteSpace(dtpNextUpdateDate.Text) || comboBoxId.SelectedItem == null) + { + throw new Exception("Не все поля заполнены."); + } + + var ticket = TicketExtensions.CreateEntity( + _extensionId ?? 0, + DateTime.Parse(dtpLastUpdateDate.Text), + DateTime.Parse(dtpNextUpdateDate.Text) + ); + + if (_extensionId.HasValue) + { + _ticketExtensionsRepository.UpdateTicketExtension(ticket); + } + else + { + _ticketExtensionsRepository.CreateTicketExtension(ticket); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + } +} diff --git a/ProjectLibrary/Forms/FTicket_Extension.resx b/ProjectLibrary/Forms/FTicket_Extension.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ProjectLibrary/Forms/FTicket_Extension.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Forms/FTiclet_Extensions.Designer.cs b/ProjectLibrary/Forms/FTiclet_Extensions.Designer.cs new file mode 100644 index 0000000..d20f538 --- /dev/null +++ b/ProjectLibrary/Forms/FTiclet_Extensions.Designer.cs @@ -0,0 +1,92 @@ +namespace ProjectLibrary.Forms +{ + partial class FTiclet_Extensions + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView = new DataGridView(); + buttonAdd = new Button(); + buttonUpdate = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Location = new Point(12, 11); + dataGridView.Margin = new Padding(3, 2, 3, 2); + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(525, 225); + dataGridView.TabIndex = 8; + // + // buttonAdd + // + buttonAdd.Location = new Point(12, 251); + buttonAdd.Margin = new Padding(3, 2, 3, 2); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(88, 22); + buttonAdd.TabIndex = 9; + buttonAdd.Text = "Добавить"; + buttonAdd.Click += buttonAdd_Click; + // + // buttonUpdate + // + buttonUpdate.Location = new Point(227, 251); + buttonUpdate.Margin = new Padding(3, 2, 3, 2); + buttonUpdate.Name = "buttonUpdate"; + buttonUpdate.Size = new Size(88, 22); + buttonUpdate.TabIndex = 10; + buttonUpdate.Text = "Изменить"; + buttonUpdate.Click += buttonUpdate_Click; + // + // FTiclet_Extensions + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(569, 293); + Controls.Add(dataGridView); + Controls.Add(buttonAdd); + Controls.Add(buttonUpdate); + Name = "FTiclet_Extensions"; + Text = "FTiclet_Extensions"; + Load += FTiclet_Extensions_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Button buttonAdd; + private Button buttonUpdate; + } +} \ No newline at end of file diff --git a/ProjectLibrary/Forms/FTiclet_Extensions.cs b/ProjectLibrary/Forms/FTiclet_Extensions.cs new file mode 100644 index 0000000..9a8f2ce --- /dev/null +++ b/ProjectLibrary/Forms/FTiclet_Extensions.cs @@ -0,0 +1,79 @@ +using ProjectLibrary.Repositores; +using ProjectLibrary.Repositories; +using Unity; + +namespace ProjectLibrary.Forms +{ + public partial class FTiclet_Extensions : Form + { + private readonly IUnityContainer _container; + private readonly ITicketExtensionsRepository _ticketRepository; + public FTiclet_Extensions(IUnityContainer container, ITicketExtensionsRepository ticketRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _ticketRepository = ticketRepository ?? throw new ArgumentNullException(nameof(ticketRepository)); + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + 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)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FTiclet_Extensions_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() + { + dataGridView.DataSource = _ticketRepository.ReadTicketExtensions(); + } + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} diff --git a/ProjectLibrary/Forms/FTiclet_Extensions.resx b/ProjectLibrary/Forms/FTiclet_Extensions.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectLibrary/Forms/FTiclet_Extensions.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ProjectLibrary/Program.cs b/ProjectLibrary/Program.cs index 2baf02a..e0ded03 100644 --- a/ProjectLibrary/Program.cs +++ b/ProjectLibrary/Program.cs @@ -1,3 +1,8 @@ +using ProjectLibrary.Repositories.Implementations; +using ProjectLibrary.Repositories; +using Unity; +using ProjectLibrary.Repositores; + namespace ProjectLibrary { internal static class Program @@ -11,7 +16,20 @@ namespace ProjectLibrary // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + // + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + return container; } } } \ No newline at end of file diff --git a/ProjectLibrary/ProjectLibrary.csproj b/ProjectLibrary/ProjectLibrary.csproj index 663fdb8..accbdf0 100644 --- a/ProjectLibrary/ProjectLibrary.csproj +++ b/ProjectLibrary/ProjectLibrary.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectLibrary/Properties/Resources.Designer.cs b/ProjectLibrary/Properties/Resources.Designer.cs new file mode 100644 index 0000000..fca8482 --- /dev/null +++ b/ProjectLibrary/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectLibrary.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом 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() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [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("ProjectLibrary.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Снимок_экрана_2024_11_19_132940 { + get { + object obj = ResourceManager.GetObject("Снимок экрана 2024-11-19 132940", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectLibrary/Properties/Resources.resx b/ProjectLibrary/Properties/Resources.resx new file mode 100644 index 0000000..1db6ab7 --- /dev/null +++ b/ProjectLibrary/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Снимок экрана 2024-11-19 132940.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectLibrary/Repositores/IBookRepository.cs b/ProjectLibrary/Repositores/IBookRepository.cs new file mode 100644 index 0000000..07ffa28 --- /dev/null +++ b/ProjectLibrary/Repositores/IBookRepository.cs @@ -0,0 +1,13 @@ +namespace ProjectLibrary.Repositores +{ + using ProjectLibrary.Entities; + + public interface IBookRepository + { + IEnumerable ReadBooks(); + Book ReadBookById(int id); + void CreateBook(Book book); + void UpdateBook(Book book); + void DeleteBook(int id); + } +} diff --git a/ProjectLibrary/Repositores/ILibraryRepository.cs b/ProjectLibrary/Repositores/ILibraryRepository.cs new file mode 100644 index 0000000..21c3951 --- /dev/null +++ b/ProjectLibrary/Repositores/ILibraryRepository.cs @@ -0,0 +1,14 @@ +namespace ProjectLibrary.Repositories +{ + using ProjectLibrary.Entites; + using ProjectLibrary.Entities; + + public interface ILibraryRepository + { + IEnumerable ReadLibraries(); + Library ReadLibraryById(int id); + void CreateLibrary(Library library); + void UpdateLibrary(Library library); + void DeleteLibrary(int id); + } +} diff --git a/ProjectLibrary/Repositores/IOrderRepository.cs b/ProjectLibrary/Repositores/IOrderRepository.cs new file mode 100644 index 0000000..47a1c5d --- /dev/null +++ b/ProjectLibrary/Repositores/IOrderRepository.cs @@ -0,0 +1,13 @@ +namespace ProjectLibrary.Repositories +{ + using ProjectLibrary.Entites; + + public interface IOrderRepository + { + IEnumerable ReadOrders(); + Orders ReadOrderById(int id); + void CreateOrder(Orders order); + void UpdateOrder(Orders order); + void DeleteOrder(int id); + } +} diff --git a/ProjectLibrary/Repositores/IReaderRepository.cs b/ProjectLibrary/Repositores/IReaderRepository.cs new file mode 100644 index 0000000..b7050a6 --- /dev/null +++ b/ProjectLibrary/Repositores/IReaderRepository.cs @@ -0,0 +1,14 @@ +namespace ProjectLibrary.Repositories +{ + using ProjectLibrary.Entities; + using System.Collections.Generic; + + public interface IReaderRepository + { + Reader ReadReaderById(int id); + void CreateReader(Reader reader); + void UpdateReader(Reader reader); + void DeleteReader(int id); + List ReadReaders(); + } +} diff --git a/ProjectLibrary/Repositores/ITicketExtension.cs b/ProjectLibrary/Repositores/ITicketExtension.cs new file mode 100644 index 0000000..e07e971 --- /dev/null +++ b/ProjectLibrary/Repositores/ITicketExtension.cs @@ -0,0 +1,11 @@ +using ProjectLibrary.Entites; + +namespace ProjectLibrary.Repositores; + +public interface ITicketExtensionsRepository +{ + TicketExtensions ReadTicketExtensionById(int id); + List ReadTicketExtensions(); + void CreateTicketExtension(TicketExtensions ticketExtension); + void UpdateTicketExtension(TicketExtensions ticketExtension); +} diff --git a/ProjectLibrary/Repositores/Implementations/BookRepository.cs b/ProjectLibrary/Repositores/Implementations/BookRepository.cs new file mode 100644 index 0000000..aa7a83b --- /dev/null +++ b/ProjectLibrary/Repositores/Implementations/BookRepository.cs @@ -0,0 +1,35 @@ +using ProjectLibrary.Entities; +using ProjectLibrary.Entities.Enums; +using ProjectLibrary.Repositores; + +namespace ProjectLibrary.Repositories.Implementations +{ + public class BookRepository : IBookRepository + { + public void CreateBook(Book book) + { + + } + + public void UpdateBook(Book book) + { + + } + + public void DeleteBook(int id) + { + + } + + public Book ReadBookById(int id) + { + + return Book.CreateEntity(id, "", "", 0); + } + + public IEnumerable ReadBooks() + { + return []; + } + } +} diff --git a/ProjectLibrary/Repositores/Implementations/LibraryRepository.cs b/ProjectLibrary/Repositores/Implementations/LibraryRepository.cs new file mode 100644 index 0000000..4bfe06e --- /dev/null +++ b/ProjectLibrary/Repositores/Implementations/LibraryRepository.cs @@ -0,0 +1,33 @@ +using ProjectLibrary.Entites; + + +namespace ProjectLibrary.Repositories.Implementations +{ + public class LibraryRepository : ILibraryRepository + { + public void CreateLibrary(Library library) + { + + } + + public void UpdateLibrary(Library library) + { + + } + + public void DeleteLibrary(int id) + { + + } + + public Library ReadLibraryById(int id) + { + return Library.CreateEntity(id, "", "", []); + } + + public IEnumerable ReadLibraries() + { + return []; + } + } +} diff --git a/ProjectLibrary/Repositores/Implementations/OrderRepository.cs b/ProjectLibrary/Repositores/Implementations/OrderRepository.cs new file mode 100644 index 0000000..f514ed1 --- /dev/null +++ b/ProjectLibrary/Repositores/Implementations/OrderRepository.cs @@ -0,0 +1,31 @@ +using ProjectLibrary.Entites; + +namespace ProjectLibrary.Repositories.Implementations +{ + public class OrderRepository : IOrderRepository + { + public void CreateOrder(Orders order) + { + + } + public void UpdateOrder(Orders order) + { + + } + + public void DeleteOrder(int id) + { + + } + + public Orders ReadOrderById(int id) + { + return Orders.CreateEntity(0, DateTime.Now, DateTime.Now, 0, []); + } + + public IEnumerable ReadOrders() + { + return [] ; + } + } +} diff --git a/ProjectLibrary/Repositores/Implementations/ReaderRepository.cs b/ProjectLibrary/Repositores/Implementations/ReaderRepository.cs new file mode 100644 index 0000000..ce70eda --- /dev/null +++ b/ProjectLibrary/Repositores/Implementations/ReaderRepository.cs @@ -0,0 +1,31 @@ +using ProjectLibrary.Entities; + +namespace ProjectLibrary.Repositories +{ + public class ReaderRepository : IReaderRepository + { + public void CreateReader(Reader reader) + { + + } + + public void UpdateReader(Reader reader) + { + + } + + public void DeleteReader(int id) + { + + } + public Reader ReadReaderById(int id) + { + return Reader.CreateEntity(id, "", 0); + } + + public List ReadReaders() + { + return []; + } + } +} diff --git a/ProjectLibrary/Repositores/Implementations/TicketExtensionsRepository.cs b/ProjectLibrary/Repositores/Implementations/TicketExtensionsRepository.cs new file mode 100644 index 0000000..1632764 --- /dev/null +++ b/ProjectLibrary/Repositores/Implementations/TicketExtensionsRepository.cs @@ -0,0 +1,25 @@ +using ProjectLibrary.Entites; +using ProjectLibrary.Repositores; + +public class TicketExtensionsRepository : ITicketExtensionsRepository +{ + public void CreateTicketExtension(TicketExtensions ticketExtension) + { + + } + + public void UpdateTicketExtension(TicketExtensions ticketExtension) + { + + } + + public TicketExtensions ReadTicketExtensionById(int id) + { + return TicketExtensions.CreateEntity(0, DateTime.Now, DateTime.Now); + } + + public List ReadTicketExtensions() + { + return []; + } +} diff --git a/ProjectLibrary/Resources/Снимок экрана 2024-11-19 132940.png b/ProjectLibrary/Resources/Снимок экрана 2024-11-19 132940.png new file mode 100644 index 0000000..42e3a3b Binary files /dev/null and b/ProjectLibrary/Resources/Снимок экрана 2024-11-19 132940.png differ