Курсовая работа: Программа для учета книг домашней библиотеки

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Сортировка списка по автору книги

15. public void sortTitle()

Сортировка списка по названию книги

16. public void sortType()

Сортировка списка по жанру книги

17. public void sortYear()

Сортировка списка по году выпуска книги

18. public void sortPublisher()

Сортировка списка по издательству

19. public List<BookInfo> getSearchList(itemBook book)

Поиск книги по определенному параметру. В качестве параметра передается делегат itemBook типа bool. Функция возвращает список найденных книг

20. public List<BookInfo> searchAuthor(string author)

Поиск книг по автору. Объект поиска передается в качестве параметра. Функция возвращает список книг, соответствующих переданному параметру

21. public List<BookInfo> searchTitle(string title)

Поиск книг по названию. Объект поиска передается в качестве параметра. Функция возвращает список книг, соответствующих переданному параметру

22. public List<BookInfo> sampleType(string type)

Возвращает список книг, жанр которых соответствует переданному в параметрах

23. public List<BookInfo> sampleYear(string year)

Возвращает список книг, год издания которых соответствует переданному в параметрах

24. public List<BookInfo> samplePublisher(string publisher)

Возвращает список книг, издательство которых соответствует переданному в параметрах

25. public List<BookInfo> sampleAuthor(string firstChar)

Возвращает список книг, у которых автор начинается с буквы, переданной в параметрах

26. public List<BookInfo> sampleTitle(string firstChar)

Возвращает список книг, у которых название начинается с буквы, переданной в параметрах

3. Требования к техническим и программным средствам

Для запуска данного программного продукта на компьютере необходим следующий минимальный набор технических средств:

· ОС: Microsoft Windows XP (Home, Professional) / Vista / 7

· Установленный фреймворк: .NET Framework 4

· Процессор: 1 ГГц

· ОЗУ: 512 МБ

· Место на диске (для .NET Framework 4):

§ 600-850 МБ (32х разрядный процессор)

§ 1,5-2 ГБ (64х разрядный процессор)

· Место на диске (для программы и файлов с каталогами): ~160 КБ

· манипулятор типа «мышь»

· клавиатура и монитор

4. Входные данные

Входные данные не являются обязательными.

Требования к входным данным, создаваемым вне этого приложения:

- тип файла: .txt

- содержание файла: набор строк типа

АвторРазделительНазваниеРазделительГод_ИзданияРазделитель

ИздательствоРазделительЖанрРазделитель

Дополнительная_Информация

Вместо Разделитель подставляется символ, используемый в качестве разделителя в данной версии программы (например, символ «|»)

5. Выходные данные

Выходные данные не являются обязательными.

Выходные данные представляют собой:

- тип файла: .txt

- содержание файла: набор строк типа

АвторРазделительНазваниеРазделительГод_ИзданияРазделитель

ИздательствоРазделительЖанрРазделитель

Дополнительная_Информация

Вместо Разделитель подставляется символ, используемый в качестве

разделителя в данной версии программы (например, символ «|»)

6. Проблемы отладки

В процессе отладки программы возникали следующие проблемы:

· Появление лишних строк в таблице после добавления нового элемента

· Открытие множественных окон

· Контроль открытия и закрытия окон

· Удаление книги при редактировании без сохранения

7. Использование программы GIT в процессе написания и отладки приложения

Git -- распределённая система управления версиями файлов. В данном проекте использована для сохранения внесенных в код программы изменений. Были сделаны следующие коммиты:

· Создание формы для добавления новой книги в каталог Создание класса Booklnfo

· Класс Books

· Действия в главной форме, частично действия в дочерних

· Привязка элементов списка к dataGridView

· Добавление событий форм CatalogView и AddNewBook

· Отладка процесса добавления в список

· Добавление событий в форме поиска

· Редактирование сортировки, введение treeView

· Корректировка 1

Заключение

Курсовой проект «Каталог книг» был написан на языке программирования Visual C# и платформе .Net Framework 4. Этот язык по сравнению с другими традиционными языками позволяет нам увидеть уже при создании программы, как будет выглядеть программа в действии. Visual C# включает в себя множество полезных инструментов, которые облегчают труд программиста. Это проекты, формы, объекты, шаблоны, управляющие элементы, настройки. Срок разработки готового приложения сокращается от многих месяцев до недель и даже дней - это значительный выигрыш по сравнению с другими языками программирования.

С помощью курсового проекта я закрепила теоретические знания по дисциплине «Программирование на языках высокого уровня» и приобрела практически навыки при разработки приложений на Visual C#.

В дальнейшем курсовой проект можно расширять и модифицировать. Например, можно добавить новые поля в информацию о книги для использования её не только дома, но и в библиотеках.

Данных курсовой проект помог мне в приобретении навыков при составлении программной и эксплуатационной документации программного продукта. В дальнейшем я могу использовать полученные знания для составления документации при разработке дальнейших проектов.

Список использованных сокращений

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);