ИСЭбд-21. Мосевнин А.М. LabWork_1 #1

Closed
Aleks_andr435 wants to merge 6 commits from LabWork_1 into main
9 changed files with 110 additions and 47 deletions
Showing only changes of commit 1fd999137b - Show all commits

View File

@ -7,18 +7,18 @@
public int Id { get; private set; } public int Id { get; private set; }
public string Author { get; private set; } = string.Empty; public string Author { get; private set; } = string.Empty;
public string Name { get; private set; } = string.Empty; public string Name { get; private set; } = string.Empty;
public BookType Type { get; private set; } = BookType.None; public BookType Type { get; set; } = BookType.None;
public int LibraryID { get; private set; } public int LibraryID { get; private set; }
public static Book CreateEntity(int id, string author, string name, BookType type, int libraryID) public static Book CreateEntity(int id, string author, string name, int libraryID, BookType type = BookType.None)
{ {
return new Book return new Book
{ {
Id = id, Id = id,
Author = author ?? string.Empty, Author = author ?? string.Empty,
Name = name ?? string.Empty, Name = name ?? string.Empty,
Type = type, LibraryID = libraryID,
LibraryID = libraryID Type = type
}; };
} }
} }

View File

@ -33,11 +33,11 @@
lblName = new Label(); lblName = new Label();
txtName = new TextBox(); txtName = new TextBox();
lblType = new Label(); lblType = new Label();
cmbType = new ComboBox();
lblLibraryId = new Label(); lblLibraryId = new Label();
btnSave = new Button(); btnSave = new Button();
buttonCancel_Click = new Button(); buttonCancel_Click = new Button();
comboBoxLibrary = new ComboBox(); comboBoxLibrary = new ComboBox();
checkedListBox1 = new CheckedListBox();
SuspendLayout(); SuspendLayout();
// //
// lblAuthor // lblAuthor
@ -45,15 +45,15 @@
lblAuthor.AutoSize = true; lblAuthor.AutoSize = true;
lblAuthor.Location = new Point(19, 25); lblAuthor.Location = new Point(19, 25);
lblAuthor.Name = "lblAuthor"; lblAuthor.Name = "lblAuthor";
lblAuthor.Size = new Size(43, 15); lblAuthor.Size = new Size(54, 20);
lblAuthor.TabIndex = 2; lblAuthor.TabIndex = 2;
lblAuthor.Text = "Автор:"; lblAuthor.Text = "Автор:";
// //
// txtAuthor // txtAuthor
// //
txtAuthor.Location = new Point(115, 25); txtAuthor.Location = new Point(105, 25);
txtAuthor.Name = "txtAuthor"; txtAuthor.Name = "txtAuthor";
txtAuthor.Size = new Size(200, 23); txtAuthor.Size = new Size(246, 27);
txtAuthor.TabIndex = 3; txtAuthor.TabIndex = 3;
// //
// lblName // lblName
@ -61,15 +61,15 @@
lblName.AutoSize = true; lblName.AutoSize = true;
lblName.Location = new Point(19, 65); lblName.Location = new Point(19, 65);
lblName.Name = "lblName"; lblName.Name = "lblName";
lblName.Size = new Size(62, 15); lblName.Size = new Size(80, 20);
lblName.TabIndex = 4; lblName.TabIndex = 4;
lblName.Text = "Название:"; lblName.Text = "Название:";
// //
// txtName // txtName
// //
txtName.Location = new Point(115, 65); txtName.Location = new Point(105, 65);
txtName.Name = "txtName"; txtName.Name = "txtName";
txtName.Size = new Size(200, 23); txtName.Size = new Size(246, 27);
txtName.TabIndex = 5; txtName.TabIndex = 5;
// //
// lblType // lblType
@ -77,32 +77,22 @@
lblType.AutoSize = true; lblType.AutoSize = true;
lblType.Location = new Point(19, 105); lblType.Location = new Point(19, 105);
lblType.Name = "lblType"; lblType.Name = "lblType";
lblType.Size = new Size(30, 15); lblType.Size = new Size(38, 20);
lblType.TabIndex = 6; lblType.TabIndex = 6;
lblType.Text = "Тип:"; lblType.Text = "Тип:";
// //
// cmbType
//
cmbType.DropDownStyle = ComboBoxStyle.DropDownList;
cmbType.FormattingEnabled = true;
cmbType.Items.AddRange(new object[] { "Fiction", "Non-Fiction", "Science", "Biography" });
cmbType.Location = new Point(115, 102);
cmbType.Name = "cmbType";
cmbType.Size = new Size(200, 23);
cmbType.TabIndex = 7;
//
// lblLibraryId // lblLibraryId
// //
lblLibraryId.AutoSize = true; lblLibraryId.AutoSize = true;
lblLibraryId.Location = new Point(19, 145); lblLibraryId.Location = new Point(19, 226);
lblLibraryId.Name = "lblLibraryId"; lblLibraryId.Name = "lblLibraryId";
lblLibraryId.Size = new Size(90, 15); lblLibraryId.Size = new Size(114, 20);
lblLibraryId.TabIndex = 8; lblLibraryId.TabIndex = 8;
lblLibraryId.Text = "ID библиотеки:"; lblLibraryId.Text = "ID библиотеки:";
// //
// btnSave // btnSave
// //
btnSave.Location = new Point(19, 185); btnSave.Location = new Point(19, 266);
btnSave.Name = "btnSave"; btnSave.Name = "btnSave";
btnSave.Size = new Size(100, 30); btnSave.Size = new Size(100, 30);
btnSave.TabIndex = 10; btnSave.TabIndex = 10;
@ -112,7 +102,7 @@
// //
// buttonCancel_Click // buttonCancel_Click
// //
buttonCancel_Click.Location = new Point(239, 185); buttonCancel_Click.Location = new Point(251, 266);
buttonCancel_Click.Name = "buttonCancel_Click"; buttonCancel_Click.Name = "buttonCancel_Click";
buttonCancel_Click.Size = new Size(100, 30); buttonCancel_Click.Size = new Size(100, 30);
buttonCancel_Click.TabIndex = 11; buttonCancel_Click.TabIndex = 11;
@ -124,14 +114,24 @@
comboBoxLibrary.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxLibrary.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxLibrary.FormattingEnabled = true; comboBoxLibrary.FormattingEnabled = true;
comboBoxLibrary.Items.AddRange(new object[] { "Fiction", "Non-Fiction", "Science", "Biography" }); comboBoxLibrary.Items.AddRange(new object[] { "Fiction", "Non-Fiction", "Science", "Biography" });
comboBoxLibrary.Location = new Point(115, 145); comboBoxLibrary.Location = new Point(151, 223);
comboBoxLibrary.Name = "comboBoxLibrary"; comboBoxLibrary.Name = "comboBoxLibrary";
comboBoxLibrary.Size = new Size(200, 23); comboBoxLibrary.Size = new Size(200, 28);
comboBoxLibrary.TabIndex = 12; 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 // FBook
// //
ClientSize = new Size(400, 300); ClientSize = new Size(400, 300);
Controls.Add(checkedListBox1);
Controls.Add(comboBoxLibrary); Controls.Add(comboBoxLibrary);
Controls.Add(buttonCancel_Click); Controls.Add(buttonCancel_Click);
Controls.Add(lblAuthor); Controls.Add(lblAuthor);
@ -139,7 +139,6 @@
Controls.Add(lblName); Controls.Add(lblName);
Controls.Add(txtName); Controls.Add(txtName);
Controls.Add(lblType); Controls.Add(lblType);
Controls.Add(cmbType);
Controls.Add(lblLibraryId); Controls.Add(lblLibraryId);
Controls.Add(btnSave); Controls.Add(btnSave);
Name = "FBook"; Name = "FBook";
@ -154,10 +153,10 @@
private System.Windows.Forms.Label lblName; private System.Windows.Forms.Label lblName;
private System.Windows.Forms.TextBox txtName; private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label lblType; private System.Windows.Forms.Label lblType;
private System.Windows.Forms.ComboBox cmbType;
private System.Windows.Forms.Label lblLibraryId; private System.Windows.Forms.Label lblLibraryId;
private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Button btnSave;
private Button buttonCancel_Click; private Button buttonCancel_Click;
private ComboBox comboBoxLibrary; private ComboBox comboBoxLibrary;
private CheckedListBox checkedListBox1;
Review

У элементов форм, с которыми работаем в логике должны быть логичные имена

У элементов форм, с которыми работаем в логике должны быть логичные имена
} }
} }

View File

@ -24,9 +24,10 @@ namespace ProjectLibrary.Forms
txtAuthor.Text = book.Author; txtAuthor.Text = book.Author;
txtName.Text = book.Name; txtName.Text = book.Name;
cmbType.SelectedItem = book.Type; //cmbType.SelectedItem = book.Type;
comboBoxLibrary.SelectedItem = book.LibraryID; comboBoxLibrary.SelectedItem = book.LibraryID;
_bookId = value; _bookId = value;
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -40,6 +41,10 @@ namespace ProjectLibrary.Forms
InitializeComponent(); InitializeComponent();
_bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository));
comboBoxLibrary.DataSource = libraryRepository.ReadLibraries(); 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) private void btnSave_Click(object sender, EventArgs e)
@ -51,12 +56,22 @@ namespace ProjectLibrary.Forms
throw new Exception("Имеются незаполненные поля."); throw new Exception("Имеются незаполненные поля.");
} }
BookType selectedType = BookType.None;
foreach (var item in checkedListBox1.CheckedItems)
{
if (item is BookType type)
{
selectedType |= type;
}
}
var book = Book.CreateEntity( var book = Book.CreateEntity(
_bookId ?? 0, _bookId ?? 0,
txtAuthor.Text, txtAuthor.Text,
txtName.Text, txtName.Text,
(BookType)cmbType.SelectedValue, Convert.ToInt32(comboBoxLibrary.SelectedItem),
Convert.ToInt32(comboBoxLibrary.SelectedItem) selectedType
); );
if (_bookId.HasValue) if (_bookId.HasValue)
@ -80,5 +95,31 @@ namespace ProjectLibrary.Forms
{ {
Close(); 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);
}
}
} }
} }

View File

@ -10,25 +10,30 @@ namespace ProjectLibrary.Forms
public FBooks(IUnityContainer container, IBookRepository bookRepository) public FBooks(IUnityContainer container, IBookRepository bookRepository)
{ {
InitializeComponent(); InitializeComponent(); // Инициализация компонентов формы, включая DataGridView.
_container = container ?? throw new ArgumentNullException(nameof(container)); _container = container ?? throw new ArgumentNullException(nameof(container));
_bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository)); _bookRepository = bookRepository ?? throw new ArgumentNullException(nameof(bookRepository));
} }
private void LoadList() private void LoadList()
{ {
// Привязывает к DataGridView коллекцию книг, полученную из репозитория.
// Устанавливает источник данных DataGridView (dataGridViewBooks) как список объектов из ReadBooks().
dataGridViewBooks.DataSource = _bookRepository.ReadBooks(); dataGridViewBooks.DataSource = _bookRepository.ReadBooks();
} }
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {
id = 0; id = 0;
// Проверяет, выбрана ли хотя бы одна строка в DataGridView.
if (dataGridViewBooks.SelectedRows.Count < 1) if (dataGridViewBooks.SelectedRows.Count < 1)
{ {
// Если строка не выбрана, отображает сообщение об ошибке.
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false; return false;
} }
// Извлекает идентификатор (ID) из выбранной строки, используя значение ячейки столбца "Id".
id = Convert.ToInt32(dataGridViewBooks.SelectedRows[0].Cells["Id"].Value); id = Convert.ToInt32(dataGridViewBooks.SelectedRows[0].Cells["Id"].Value);
return true; return true;
} }
@ -37,7 +42,10 @@ namespace ProjectLibrary.Forms
{ {
try try
{ {
// Открывает форму добавления книги.
_container.Resolve<FBook>().ShowDialog(); _container.Resolve<FBook>().ShowDialog();
// После добавления обновляет список записей в DataGridView.
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
@ -48,6 +56,7 @@ namespace ProjectLibrary.Forms
private void buttonUpdate_Click(object sender, EventArgs e) private void buttonUpdate_Click(object sender, EventArgs e)
{ {
// Получает ID выбранной строки из DataGridView.
if (!TryGetIdentifierFromSelectedRow(out var findId)) if (!TryGetIdentifierFromSelectedRow(out var findId))
{ {
return; return;
@ -55,9 +64,12 @@ namespace ProjectLibrary.Forms
try try
{ {
// Открывает форму редактирования книги с указанным ID.
var form = _container.Resolve<FBook>(); var form = _container.Resolve<FBook>();
form.Id = findId; form.Id = findId;
form.ShowDialog(); form.ShowDialog();
// После редактирования обновляет список записей в DataGridView.
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
@ -68,11 +80,13 @@ namespace ProjectLibrary.Forms
private void buttonRemove_Click(object sender, EventArgs e) private void buttonRemove_Click(object sender, EventArgs e)
{ {
// Получает ID выбранной строки из DataGridView.
if (!TryGetIdentifierFromSelectedRow(out var findId)) if (!TryGetIdentifierFromSelectedRow(out var findId))
{ {
return; return;
} }
// Подтверждение удаления записи.
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes) if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{ {
return; return;
@ -80,7 +94,10 @@ namespace ProjectLibrary.Forms
try try
{ {
// Удаляет запись через репозиторий.
_bookRepository.DeleteBook(findId); _bookRepository.DeleteBook(findId);
// После удаления обновляет список записей в DataGridView.
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
@ -93,6 +110,7 @@ namespace ProjectLibrary.Forms
{ {
try try
{ {
// При загрузке формы заполняет DataGridView данными из репозитория.
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)

View File

@ -1,4 +1,5 @@
using ProjectLibrary.Entites; using ProjectLibrary.Entites;
using ProjectLibrary.Repositores;
using ProjectLibrary.Repositories; using ProjectLibrary.Repositories;
using ProjectLibrary.Repositories.Implementations; using ProjectLibrary.Repositories.Implementations;
using System.Windows.Forms; using System.Windows.Forms;
@ -34,10 +35,14 @@ namespace ProjectLibrary.Forms
} }
} }
public FLibrary(ILibraryRepository libraryRepository) public FLibrary(ILibraryRepository libraryRepository, IBookRepository bookRepository)
{ {
InitializeComponent(); InitializeComponent();
_libraryRepository = libraryRepository ?? throw new ArgumentNullException(nameof(libraryRepository)); _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) private void ButtonSave_Click(object sender, EventArgs e)

View File

@ -36,7 +36,7 @@
lblLastUpdateDate.AutoSize = true; lblLastUpdateDate.AutoSize = true;
lblLastUpdateDate.Location = new Point(20, 64); lblLastUpdateDate.Location = new Point(20, 64);
lblLastUpdateDate.Name = "lblLastUpdateDate"; lblLastUpdateDate.Name = "lblLastUpdateDate";
lblLastUpdateDate.Size = new Size(172, 15); lblLastUpdateDate.Size = new Size(219, 20);
lblLastUpdateDate.TabIndex = 4; lblLastUpdateDate.TabIndex = 4;
lblLastUpdateDate.Text = "Дата последнего обновления:"; lblLastUpdateDate.Text = "Дата последнего обновления:";
// //
@ -44,7 +44,7 @@
// //
dtpLastUpdateDate.Location = new Point(276, 59); dtpLastUpdateDate.Location = new Point(276, 59);
dtpLastUpdateDate.Name = "dtpLastUpdateDate"; dtpLastUpdateDate.Name = "dtpLastUpdateDate";
dtpLastUpdateDate.Size = new Size(200, 23); dtpLastUpdateDate.Size = new Size(200, 27);
dtpLastUpdateDate.TabIndex = 5; dtpLastUpdateDate.TabIndex = 5;
// //
// lblNextUpdateDate // lblNextUpdateDate
@ -52,7 +52,7 @@
lblNextUpdateDate.AutoSize = true; lblNextUpdateDate.AutoSize = true;
lblNextUpdateDate.Location = new Point(20, 104); lblNextUpdateDate.Location = new Point(20, 104);
lblNextUpdateDate.Name = "lblNextUpdateDate"; lblNextUpdateDate.Name = "lblNextUpdateDate";
lblNextUpdateDate.Size = new Size(178, 15); lblNextUpdateDate.Size = new Size(223, 20);
lblNextUpdateDate.TabIndex = 6; lblNextUpdateDate.TabIndex = 6;
lblNextUpdateDate.Text = "Дата следующего обновления:"; lblNextUpdateDate.Text = "Дата следующего обновления:";
// //
@ -60,7 +60,7 @@
// //
dtpNextUpdateDate.Location = new Point(276, 99); dtpNextUpdateDate.Location = new Point(276, 99);
dtpNextUpdateDate.Name = "dtpNextUpdateDate"; dtpNextUpdateDate.Name = "dtpNextUpdateDate";
dtpNextUpdateDate.Size = new Size(200, 23); dtpNextUpdateDate.Size = new Size(200, 27);
dtpNextUpdateDate.TabIndex = 7; dtpNextUpdateDate.TabIndex = 7;
// //
// btnSave // btnSave
@ -86,15 +86,15 @@
labelId.AutoSize = true; labelId.AutoSize = true;
labelId.Location = new Point(20, 19); labelId.Location = new Point(20, 19);
labelId.Name = "labelId"; labelId.Name = "labelId";
labelId.Size = new Size(17, 15); labelId.Size = new Size(173, 20);
labelId.TabIndex = 10; labelId.TabIndex = 10;
labelId.Text = "id"; labelId.Text = "ID Читателского билета";
// //
// comboBoxId // comboBoxId
// //
comboBoxId.Location = new Point(273, 16); comboBoxId.Location = new Point(273, 16);
comboBoxId.Name = "comboBoxId"; comboBoxId.Name = "comboBoxId";
comboBoxId.Size = new Size(203, 23); comboBoxId.Size = new Size(203, 28);
comboBoxId.TabIndex = 11; comboBoxId.TabIndex = 11;
// //
// FTicket_Extension // FTicket_Extension

View File

@ -24,7 +24,7 @@ namespace ProjectLibrary.Repositories.Implementations
public Book ReadBookById(int id) public Book ReadBookById(int id)
{ {
return Book.CreateEntity(id, "", "", BookType.None, 0); return Book.CreateEntity(id, "", "", 0);
} }
public IEnumerable<Book> ReadBooks() public IEnumerable<Book> ReadBooks()