- •Курсовая работа на тему: «Программа для учета книг домашней библиотеки»
- •Содержание
- •Введение
- •Техническое задание
- •Назначение разработки
- •Описание программы Общие сведения
- •Описание структуры программы
- •Описание форм и работы с ними
- •Описание некоторых функций, используемых в процессе работы программы
- •Требования к техническим и программным средствам
- •Входные данные
- •Выходные данные
- •Проблемы отладки
- •Использование программы git в процессе написания и отладки приложения
- •Заключение
- •Список использованных сокращений
- •Приложение
Список использованных сокращений
MDI – multiple document interface (тип графического интерфейса)
ОС – операционная система
ОЗУ – оперативное запоминающее устройство
Приложение
Приложение 1
Исходный код программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CourseProject {
public class BookInfo {
public int id { get; set; }
public string author { get; set; }
public string title { get; set; }
public int year { get; set; }
public string publisher { get; set; }
public string type { get; set; }
public string extraInfo { get; set; }
public BookInfo(int id_, string author_, string title_, int year_, string publisher_, string type_, string extraInfo_) {
id = id_;
author = author_;
title = title_;
year = year_;
publisher = publisher_;
type = type_;
extraInfo = extraInfo_;
}
/// <summary>
/// Получение информации о книге в виде строки
/// </summary>
public string getInfoString() {
return "Автор: " + author + "\nНазвание: " + title + "\nГод издания: " + year + "\nИздательство:" + publisher + "\nЖанр: " + type + "\nДополнительная информация: " + extraInfo;
}
public const string separator = "|";
/// <summary>
/// Получение информации о книги в виде стори с разделителями для записи в файл
/// </summary>
public string getStringForFile() {
return author + separator + title + separator + year + separator + publisher + separator + type + separator + extraInfo;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CourseProject {
public class Books {
public List<BookInfo> books;
public Books() {
books = new List<BookInfo>();
}
/// <summary>
/// Поиск максимального Id
/// </summary>
private int findMaxId() {
try {
return books.Max(p => p.id);
} catch {
return 0;
}
}
/// <summary>
/// Добавление новой книги
/// </summary>
public void addNewBook(string author, string title, int year, string publisher, string type, string extraInfo) {
int newId = findMaxId() + 1;
BookInfo newBook = new BookInfo(newId, author, title, year, publisher, type, extraInfo);
if (books == null) {
books = new List<BookInfo>();
}
books.Add(newBook);
}
/// <summary>
/// Получение индекса книги в списке по Id
/// </summary>
private int getIndex(itemBook item) {
for (int i = 0; i < books.Count; i++) {
if (item(books[i])) {
return i;
}
}
return -1;
}
/// <summary>
/// Удаление книги из списка по Id
/// </summary>
public void removeBook(int id) {
int index = getIndex(p => p.id == id);
books.RemoveAt(index);
}
/// <summary>
/// Редактирование книги
/// </summary>
public void editBook(int id, string author, string title, int year, string publisher, string type, string extraInfo) {
BookInfo editedBook = new BookInfo(id, author, title, year, publisher, type, extraInfo);
removeBook(id);
books.Add(editedBook);
}
/// <summary>
/// Очистка списка
/// </summary>
public void clearCatal() {
books.Clear();
books = null;
}
/// <summary>
/// Получение всех параметров книги в виде строки
/// </summary>
public string getInfoString(int id) {
int index = getIndex(p => p.id == id);
return books[index].getInfoString();
}
/// <summary>
/// Получение всех параметров книги в виде строки для записи в файл
/// </summary>
private string getStringForFile(int index) {
return books[index].getStringForFile();
}
/// <summary>
/// Получение списка из массива строк
/// </summary>
public void getCatalFromString(string[] str) {
clearCatal();
for (int i = 0; i < str.Length; i++) {
string[] tempStr = str[i].Split(BookInfo.separator[0]);
try {
addNewBook(tempStr[0], tempStr[1], Int32.Parse(tempStr[2]), tempStr[3], tempStr[4], tempStr[5]);
} catch {
MessageBox.Show("Cтрока с номером " + i + " в файле имеет неверный формат");
}
}
}
/// <summary>
/// Запись каталога в массив строк
/// </summary>
public string[] catalToStringArray() {
string[] str = new string[books.Count];
for (int i = 0; i < books.Count; i++) {
str[i] = books[i].getStringForFile();
}
return str;
}
/// <summary>
/// Перестановка двух соседних элементов списка
/// </summary>
private void exchange(int index) {
BookInfo temp = books[index];
books[index] = books[index + 1];
books[index + 1] = temp;
}
/// <summary>
/// Универсальная сортировка
/// </summary>
private void sort(compare delCompare) {
bool wasChanged = true;
while (wasChanged) {
wasChanged = false;
for (int i = 0; i < books.Count - 1; i++) {
if (delCompare(books[i], books[i + 1])) {
exchange(i);
wasChanged = true;
}
}
}
}
/// <summary>
/// Сортировка по автору
/// </summary>
public void sortAuthor() {
sort((book1, book2) => String.Compare(book1.author, book2.author) > 0);
}
/// <summary>
/// Сортировка по названию
/// </summary>
public void sortTitle() {
sort((book1, book2) => String.Compare(book1.title, book2.title) > 0);
}
/// <summary>
/// Сортировка по жанру
/// </summary>
public void sortType() {
sort((book1, book2) => String.Compare(book1.type, book2.type) > 0);
}
/// <summary>
/// Сортировка по году выпуска
/// </summary>
public void sortYear() {
sort((book1, book2) => book1.year > book2.year);
}
/// <summary>
/// Сортировка по издательству
/// </summary>
public void sortPublisher() {
sort((book1, book2) => String.Compare(book1.publisher, book2.publisher) > 0);
}
/// <summary>
/// Универсальный поиск
/// </summary>
public List<BookInfo> getSearchList(itemBook book) {
List<BookInfo> searchList = new List<BookInfo>();
for (int i = 0; i < books.Count; i++) {
if (book(books[i])) {
searchList.Add(books[i]);
}
}
return searchList;
}
/// <summary>
/// Поиск по автору
/// </summary>
public List<BookInfo> searchAuthor(string author) {
return getSearchList(book => book.author.ToLower().Contains(author.ToLower()));
}
/// <summary>
/// Поиск по названию
/// </summary>
public List<BookInfo> searchTitle(string title) {
return getSearchList(book => book.title.ToLower().Contains(title.ToLower()));
}
/// <summary>
/// Выборка по жанру
/// </summary>
public List<BookInfo> sampleType(string type) {
return getSearchList(book => book.type.ToLower() == type.ToLower());
}
/// <summary>
/// Выборка по году выпуска
/// </summary>
public List<BookInfo> sampleYear(string year) {
return getSearchList(book => book.year.ToString() == year);
}
/// <summary>
/// Выборка по издательству
/// </summary>
public List<BookInfo> samplePublisher(string publisher) {
return getSearchList(book => book.publisher.ToLower() == publisher.ToLower());
}
/// <summary>
/// Выборка авторов по первой букве
/// </summary>
public List<BookInfo> sampleAuthor(string firstChar) {
return getSearchList(book => book.author.First<char>().ToString().ToUpper() == firstChar.ToUpper());
}
/// <summary>
/// Выборка названий по первой букве
/// </summary>
public List<BookInfo> sampleTitle(string firstChar) {
return getSearchList(book => book.title.First<char>().ToString().ToUpper() == firstChar.ToUpper());
}
public delegate bool itemBook(BookInfo book);
public delegate bool compare(BookInfo book1, BookInfo book2);
}
}
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;
using System.IO;
namespace CourseProject {
public partial class BookCatalog : Form {
public BookCatalog() {
InitializeComponent();
}
public static Books catalog;
/// <summary>
/// Очистка старого и создание нового каталога
/// </summary>
private void clearCatal() {
if (catalog != null) {
catalogViewForm.Close();
catalogViewForm = null;
if (catalog.books == null) {
return;
}
catalog.clearCatal();
}
}
/// <summary>
/// Запрос на создание нового каталога при уже открытом старом
/// </summary>
private void openedCatalDialog(object sender, EventArgs e, string messagePart) {
var dialogResult = MessageBox.Show("У вас есть открытый каталог\nВы хотите сохранить его и " + messagePart + "?", "Новый каталог", MessageBoxButtons.YesNoCancel);
if (dialogResult == DialogResult.Yes) {
saveCatalToolStripMenuItem2_Click(sender, e);
clearCatal();
newCatalToolStripMenuItem_Click(sender, e);
}
if (dialogResult == DialogResult.No) {
clearCatal();
newCatalToolStripMenuItem_Click(sender, e);
}
if (dialogResult == DialogResult.Cancel) {
catalogViewForm.Activate();
}
}
/// <summary>
/// Создание новой формы отображения каталога
/// </summary>
private void newCatalForm() {
if (catalogViewForm == null) {
catalogViewForm = new CatalogView();
catalogViewForm.MdiParent = this;
catalogViewForm.Show();
catalogViewForm.Text = "Новый каталог";
} else {
catalogViewForm.Activate();
}
catalog = new Books();
}
public static CatalogView catalogViewForm;
/// <summary>
/// Вызов событий ко клику на элемент меню "Каталог/Добавить"
/// </summary>
private void newCatalToolStripMenuItem_Click(object sender, EventArgs e) {
if (catalog != null) {
if (catalog.books != null) {
openedCatalDialog(sender, e, "создать новый");
return;
}
}
newCatalForm();
catalogViewForm.updateTable(catalog, catalogViewForm.catalTable, catalogViewForm.bookInfoLabel);
}
/// <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) {
BookCatalog.catalogViewForm.Activate();
clearFieldButton_Click(sender, e);
}
/// <summary>
/// Событие по клику на кнопку "Сброс"
/// </summary>
private void clearFieldButton_Click(object sender, EventArgs e) {
authorComboBox.Text = "";
titleTextBox.Text = "";
publisherComboBox.Text = "";
yearTextBox.Text = "";
typeComboBox.Text = "";
infoTextBox.Text = "";
}
/// <summary>
/// Событие по активации формы
/// </summary>
private void AddNewBook_Enter(object sender, EventArgs e) {
authorComboBox.Text = CatalogView.author;
titleTextBox.Text = CatalogView.title;
yearTextBox.Text = CatalogView.year;
publisherComboBox.Text = CatalogView.publisher;
typeComboBox.Text = CatalogView.type;
infoTextBox.Text = CatalogView.extraInfo;
var list = BookCatalog.catalog.books;
for (int i = 0; i < list.Count; i++) {
addItemToComboBox(authorComboBox, list[i].author);
addItemToComboBox(publisherComboBox, list[i].publisher);
addItemToComboBox(typeComboBox, list[i].type);
}
}
}
}
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 SearchBook : Form {
public SearchBook() {
InitializeComponent();
searchComboBox.Text = searchComboBox.Items[0].ToString();
errorLabel.Visible = false;
}
/// <summary>
/// Вывод результата сортировки в таблицу
/// </summary>
private void resOutput(Books res) {
res.sortAuthor();
BookCatalog.catalogViewForm.updateTable(res, searchResultView, bookInfoLabel);
}
/// <summary>
/// Событие по клику на кнопку "Искать"
/// </summary>
private void searchButton_Click(object sender, EventArgs e) {
string subject = searchSubjectTextBox.Text;
if (subject == "") {
errorLabel.Visible = true;
return;
}
errorLabel.Visible = true;
Books resultOfSearch = new Books();
if (searchComboBox.Text == searchComboBox.Items[0].ToString()) {
resultOfSearch.books = BookCatalog.catalog.searchAuthor(subject);
resOutput(resultOfSearch);
}
if (searchComboBox.Text == searchComboBox.Items[1].ToString()) {
resultOfSearch.books = BookCatalog.catalog.searchTitle(subject);
resOutput(resultOfSearch);
}
}
/// <summary>
/// Событие по клику на заголовок строки таблицы
/// </summary>
private void searchResultView_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
string selectedId = searchResultView["idCol", searchResultView.CurrentRow.Index].Value.ToString();
bookInfoLabel.Text = BookCatalog.catalog.getInfoString(Int32.Parse(selectedId));
for (int i = 0; i < BookCatalog.catalogViewForm.catalTable.RowCount; i++) {
BookCatalog.catalogViewForm.catalTable.Rows[i].Selected = false;
if (BookCatalog.catalogViewForm.catalTable["idCol", i].Value.ToString() == selectedId) {
BookCatalog.catalogViewForm.catalTable.Rows[i].Selected = true;
}
}
}
/// <summary>
/// Событие по клику на кнопку "Перейти к каталогу"
/// </summary>
private void toCatalButton_Click(object sender, EventArgs e) {
BookCatalog.catalogViewForm.Activate();
}
}
}
1 Здесь и далее: под каталогом понимается список книг с информацией о них