}
/// <summary>
/// Открытие файла и запись его содержимого в каталог
/// </summary>
private void openCatal() {
if (openFileDialog1.ShowDialog() != DialogResult.OK) {
return;
}
newCatalForm();
catalogViewForm.Text = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
string[] str = File.ReadAllLines(openFileDialog1.FileName);
catalog.getCatalFromString(str);
catalogViewForm.updateTable(catalog, catalogViewForm.catalTable, catalogViewForm.bookInfoLabel);
}
public static AddNewBook addNewBookForm;
/// <summary>
/// Открытие формы для добавления новой книги
/// </summary>
public static void openAddBookForm() {
addNewBookForm = new AddNewBook();
addNewBookForm.MdiParent = catalogViewForm.MdiParent;
addNewBookForm.Show();
}
public static SearchBook searchBookForm;
/// <summary>
/// Открытие формы для поиска книги
/// </summary>
public static void openSearchBookForm() {
searchBookForm = new SearchBook();
searchBookForm.MdiParent = catalogViewForm.MdiParent;
searchBookForm.Show();
}
/// <summary>
/// Вызов событий ко клику на элемент меню "Каталог/Открыть"
/// </summary>
private void openCatalToolStripMenuItem_Click(object sender, EventArgs e) {
if (catalogViewForm != null) {
openedCatalDialog(sender, e, "открыть другой");
}
openCatal();
}
/// <summary>
/// Вызов событий ко клику на элемент меню "Каталог/Сохранить"
/// </summary>
private void saveCatalToolStripMenuItem2_Click(object sender, EventArgs e) {
if (catalog == null) {
MessageBox.Show("Нет данных для сохранения");
return;
}
if (saveFileDialog1.ShowDialog() != DialogResult.OK) {
return;
}
catalogViewForm.Text = Path.GetFileNameWithoutExtension(saveFileDialog1.FileName);
File.WriteAllLines(saveFileDialog1.FileName, catalog.catalToStringArray());
}
/// <summary>
/// Вызов событий ко клику на элемент меню "Выход"
/// </summary>
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
if (catalog != null) {
if (MessageBox.Show("Вы уверены, что хотите выйти?\nМогут быть утеряны несохраненные данные", "Выход из программы", MessageBoxButtons.YesNo) == DialogResult.No) {
return;
}
}
Close();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CourseProject {
public partial class CatalogView : Form {
public CatalogView() {
InitializeComponent();
}
/// <summary>
/// Запись в таблицу table записей из списка list
/// </summary>
public void updateTable(Books list, DataGridView table, Label info) {
if (list == null) {
return;
}
if (list.books == null) {
return;
}
for (int i = 0; i < list.books.Count; i++) {
if (i > table.RowCount - 1) {
table.RowCount++;
}
table.Rows[i].HeaderCell.Value = (i + 1).ToString();
table["idCol", i].Value = list.books[i].id;
table["authorCol", i].Value = list.books[i].author;
table["titleCol", i].Value = list.books[i].title;
table["yearCol", i].Value = list.books[i].year;
table["publisherCol", i].Value = list.books[i].publisher;
table["typeCol", i].Value = list.books[i].type;
table["infoCol", i].Value = list.books[i].extraInfo;
}
if (table.RowCount > list.books.Count) {
table.RowCount -= table.RowCount - list.books.Count;
}
info.Text = "";
}
/// <summary>
/// Событие по клику на элемент меню "Книга/Добавить"
/// </summary>
private void addBookToolStripMenuItem_Click(object sender, EventArgs e) {
if (BookCatalog.addNewBookForm == null) {
BookCatalog.openAddBookForm();
} else {
BookCatalog.addNewBookForm.Activate();
}
}
public static string author = "";
public static string title = "";
public static string year = "";
public static string publisher = "";
public static string type = "";
public static string extraInfo = "";
private int curId;
private int curIndex = -1;
/// <summary>
/// Событие по клику на заголовок строки таблицы
/// </summary>
private void catalTable_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
try {
editBookToolStripMenuItem.Enabled = true;
removeBookToolStripMenuItem.Enabled = true;
curIndex = catalTable.CurrentRow.Index;
curId = Int32.Parse(catalTable["idCol", curIndex].Value.ToString());
bookInfoLabel.Text = BookCatalog.catalog.getInfoString(curId);
} catch {
return;
}
}
/// <summary>
/// Событие по клику на элемент меню "Книга/Редактировать"
/// </summary>
private void editBookToolStripMenuItem_Click(object sender, EventArgs e) {
if (curIndex > -1) {
author = catalTable["authorCol", curIndex].Value.ToString();
title = catalTable["titleCol", curIndex].Value.ToString();
year = catalTable["yearCol", curIndex].Value.ToString();
publisher = catalTable["publisherCol", curIndex].Value.ToString();
type = catalTable["typeCol", curIndex].Value.ToString();
extraInfo = catalTable["infoCol", curIndex].Value.ToString();
addBookToolStripMenuItem_Click(sender, e);
if (BookCatalog.addNewBookForm.isAdded) {
removeBookToolStripMenuItem_Click(sender, e);
}
}
}
/// <summary>
/// Событие по клику на элемент меню "Книга/Удалить"
/// </summary>
private void removeBookToolStripMenuItem_Click(object sender, EventArgs e) {
if (curIndex > -1) {
curId = Int32.Parse(catalTable["idCol", curIndex].Value.ToString());
BookCatalog.catalog.removeBook(curId);
updateTable(BookCatalog.catalog, catalTable, bookInfoLabel);
}
}
/// <summary>
/// Событие по клику на элемент меню "Поиск"
/// </summary>
private void searchToolStripMenuItem_Click(object sender, EventArgs e) {
if (BookCatalog.catalog == null) {
MessageBox.Show("Список пуст");
return;
}
if (BookCatalog.catalog.books == null) {
MessageBox.Show("Список пуст");
return;
}
if (BookCatalog.searchBookForm == null) {
BookCatalog.openSearchBookForm();
} else {
BookCatalog.searchBookForm.Activate();
}
}
/// <summary>
/// Установление видимости столбцов таблицы
/// </summary>
private void colVisibility(DataGridViewTextBoxColumn visCol, DataGridViewTextBoxColumn unvisCol1, DataGridViewTextBoxColumn unvisCol2) {
visCol.Visible = true;
unvisCol1.Visible = false;
unvisCol2.Visible = false;
}
/// <summary>
/// Добавление нового узла в дерево
/// </summary>
private void createTreeNode(string node) {
if (!sortTreeView.Nodes[0].Nodes.ContainsKey(node)) {
sortTreeView.Nodes[0].Nodes.Add(node, node);
}
}
private const string authorNodeName = "Авторы:";
private const string titleNodeName = "Названия:";
private const string typeNodeName = "Жанры:";
private const string publisherNodeName = "Издательства:";
private const string yearNodeName = "Года издания:";
/// <summary>
/// Событие по клику на кнопку "Сортировать"
/// </summary>
private void sortButton_Click(object sender, EventArgs e) {
if (authorRadioButton.Checked) {
univSort(book => book.sortTitle(), book => book.sortAuthor(), book => book.author.First<char>().ToString().ToUpper(), typeCol, yearCol, publisherCol, authorNodeName);
}
if (titleRadioButton.Checked) {
univSort(book => book.sortAuthor(), book => book.sortTitle(), book => book.title.First<char>().ToString().ToUpper(), typeCol, yearCol, publisherCol, titleNodeName);
}
if (typeRadioButton.Checked) {
univSort(book => book.sortAuthor(), book => book.sortType(), book => book.type.ToLower(), typeCol, yearCol, publisherCol, typeNodeName);
}
if (yearRadioButton.Checked) {
univSort(book => book.sortAuthor(), book => book.sortYear(), book => book.year.ToString(), yearCol, typeCol, publisherCol, yearNodeName);
}
if (publisherRadioButton.Checked) {
univSort(book => book.sortAuthor(), book => book.sortPublisher(), book => book.publisher.ToLower(), publisherCol, typeCol, yearCol, publisherNodeName);
}
}
private delegate void sort(Books list);
private delegate string treeNodeItem(BookInfo book);
/// <summary>
/// Сортировка и обновление дерева выборки
/// </summary>
private void univSort(sort del1, sort del2, treeNodeItem item, DataGridViewTextBoxColumn visCol, DataGridViewTextBoxColumn unvisCol1, DataGridViewTextBoxColumn unvisCol2, string treeNodeName) {
del1(BookCatalog.catalog);
del2(BookCatalog.catalog);
updateTable(BookCatalog.catalog, catalTable, bookInfoLabel);
colVisibility(visCol, unvisCol1, unvisCol2);
sortTreeView.Nodes.Clear();
sortTreeView.Nodes.Add(treeNodeName);
for (int i = 0; i < BookCatalog.catalog.books.Count; i++) {
createTreeNode(item(BookCatalog.catalog.books[i]));
}
}
/// <summary>
/// Событие по активации формы
/// </summary>
private void CatalogView_Enter(object sender, EventArgs e) {
if (curIndex < 0) {
editBookToolStripMenuItem.Enabled = false;
removeBookToolStripMenuItem.Enabled = false;
}
updateTable(BookCatalog.catalog, catalTable, bookInfoLabel);
}
/// <summary>
/// Выборка по клику на дочернем элементе дерева выборки
/// </summary>
private void childNodeSort(string parentNodeText) {
switch (parentNodeText) {
case authorNodeName:
sampleToTable(BookCatalog.catalog.sampleAuthor(sortTreeView.SelectedNode.Text));
break;
case titleNodeName:
sampleToTable(BookCatalog.catalog.sampleTitle(sortTreeView.SelectedNode.Text));
break;
case typeNodeName:
sampleToTable(BookCatalog.catalog.sampleType(sortTreeView.SelectedNode.Text));
break;
case yearNodeName:
sampleToTable(BookCatalog.catalog.sampleYear(sortTreeView.SelectedNode.Text));
break;
case publisherNodeName:
sampleToTable(BookCatalog.catalog.samplePublisher(sortTreeView.SelectedNode.Text));
break;
}
}
/// <summary>
/// Занесение в таблицу результатов выборки
/// </summary>
private void sampleToTable(List<BookInfo> sample) {
Books res = new Books();
res.books = sample;
updateTable(res, catalTable, bookInfoLabel);
}
/// <summary>
/// Событие по клику на узле дерева выборки
/// </summary>
private void sortTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
if (sortTreeView.SelectedNode == null) {
return;
}
if (sortTreeView.SelectedNode.Parent == null) {
sortButton_Click(sender, e);
return;
}
childNodeSort(sortTreeView.SelectedNode.Parent.Text);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CourseProject {
public partial class AddNewBook : Form {
public AddNewBook() {
InitializeComponent();
}
/// <summary>
/// Добавление нового элемента в коллекцию ComboBox
/// </summary>
private void addItemToComboBox(ComboBox tempComboBox, string item) {
if (!tempComboBox.Items.Contains(item)) {
tempComboBox.Items.Add(item);
}
}
/// <summary>
/// Проверка на вхождение элемента в коллекцию ComboBox и возврат введенного в ComboBox текста
/// </summary>
private string comboItemChek(ComboBox tempComboBox, string messagePart) {
string str = tempComboBox.Text;
if (str == "") {
return "-";
}
if (!tempComboBox.Items.Contains(str)) {
if (!messageComboBox(messagePart, tempComboBox, str)) {
return "";
}
}
return str;
}
/// <summary>
/// Сообщение, выдаваемое, если элемент не содержится в ComboBox
/// </summary>
private bool messageComboBox(string messagePart, ComboBox tempComboBox, string item) {
var dialogResult = MessageBox.Show(messagePart + "\nВы уверены, что хотите добавить?", "Добавление книги", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes) {
tempComboBox.Items.Add(item);
return true;
}
return false;
}
/// <summary>
/// Проверка на вхождение в веденный текст разделителя
/// </summary>
private bool isContainSeparator(string str) {
return str.Contains(BookInfo.separator[0]);
}
public bool isAdded = false;
/// <summary>
/// Событие по клику на кнопку "Добавить новую книгу"
/// </summary>
private void addBookButton_Click(object sender, EventArgs e) {
isAdded = false;
errorLabel.Text = "";
string title = titleTextBox.Text;
if ((title == "") || (yearTextBox.Text == "")) {
errorLabel.Text = "Заполнены не все обязательные поля (*)";
return;
}
int year = 0;
if (!Int32.TryParse(yearTextBox.Text, out year) || (year > 2011) || (year < 1900)) {
errorLabel.Text = "Год издания введен некорректно";
return;
}
string author = comboItemChek(authorComboBox, "Данного автора нет в списке");
string publisher = comboItemChek(publisherComboBox, "Данного издательства нет в списке");
string type = comboItemChek(typeComboBox, "Данного жанра нет в списке");
if ((author == "") || (publisher == "") || (type == "")) {
return;
}
string extraInfo = infoTextBox.Text;
if (extraInfo == "") {
extraInfo = "-";
}
if (isContainSeparator(title) || isContainSeparator(author) || isContainSeparator(publisher) || isContainSeparator(type) || isContainSeparator(extraInfo)) {
errorLabel.Text = "Одно из полей содержит недопустимый символ - \"" + BookInfo.separator + "\"";
return;
}
BookCatalog.catalog.addNewBook(author, title, year, publisher, type, extraInfo);
MessageBox.Show("Книга добавлена");
clearFieldButton_Click(sender, e);
isAdded = true;
}
/// <summary>
/// Событие по клику на кнопку "Перейти к каталогу"
/// </summary>
private void toCatalButton_Click(object sender, EventArgs e) {
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;