Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Разработка информационной системы для библиотеки

Тип Курсовая
Предмет Объектно ориентированное программирование

ID (номер) заказа
3269297

500 руб.

Просмотров
1426
Размер файла
439.54 Кб
Поделиться

Ознакомительный фрагмент работы:

Оглавление
TOC \o "1-3" \h \z \u Введение PAGEREF _Toc74221199 \h 11. Проектирование программного продукта PAGEREF _Toc74221200 \h 41.1. Анализ предметной области PAGEREF _Toc74221201 \h 41.2. Определение структуры программного продукта PAGEREF _Toc74221202 \h 42. Разработка программного продукта PAGEREF _Toc74221203 \h 92.1. Выбор технологии, языка и среды разработки PAGEREF _Toc74221204 \h 92.2. Разработка пользовательского интерфейса PAGEREF _Toc74221205 \h 102.2.1. Создание проекта в среде разработки MS Visual Studio PAGEREF _Toc74221206 \h 102.2.2. Создание форм PAGEREF _Toc74221207 \h 102.3. Описание реализации программного продукта PAGEREF _Toc74221208 \h 122.3.1. Создание классов в коде программы PAGEREF _Toc74221209 \h 122.3.2. Программирование главной формы PAGEREF _Toc74221210 \h 133. Тестирование и отладка программного продукта PAGEREF _Toc74221211 \h 16Заключение PAGEREF _Toc74221212 \h 22Список источников PAGEREF _Toc74221213 \h 23Приложение 1 PAGEREF _Toc74221214 \h 24Приложение 2 PAGEREF _Toc74221215 \h 25Приложение 3 PAGEREF _Toc74221216 \h 26Приложение 4 PAGEREF _Toc74221217 \h 27
ВведениеРешение задач управления предприятием, банком, учебным заведением, государственной структурой сегодня немыслимо без автоматизации технологических и управленческих процессов, которая, в свою очередь, часто основывается на обработке больших объемов информации. Потеря информации или ее несвоевременное получение могут обернуться потерей денег. Именно этими обстоятельствами можно объяснить столь быстрый рост компьютерной техники и стремительное развитие электронных таблиц и систем управления базами данных в нашей стране и за рубежом.
Для оперативного, гибкого и эффективного управления предприятиями, фирмами и организациями различных форм собственности широко внедряются системы автоматизированного управления, ядром которых являются базы данных (БД). При большом объеме информации и сложности средств организации хранения, доступа и обработки данных приобретает особое значение. Важность и значимость информационных систем (ИС) в современной жизни определяют серьезные требования, предъявляемые к квалификации специалистов, создающих приложения на их основе.
Целью курсовой работы является разработка информационной системы предметной области «Библиотека».
Для достижения поставленной цели необходимо решить следующие задачи:
-провести анализ предметной области;
-выделить основные сущности предметной области и связи между ними;
-определить структуру программного продукта;
-выбрать технические средства для реализации проекта;
-выполнить проектирование структуры приложения;
-выполнить проектирование классов информационной системы;
-разработать интерфейс пользователя;
-выполнить кодирование приложения на выбранном языке программирования;
-выполнить тестирование приложения.

1. Проектирование программного продукта1.1. Анализ предметной областиБиблиотека обслуживает читателей. В библиотечном фонде находятся книги, каждая книга может быть представлена в нескольких экземплярах.
Про каждую книгу
Информационная система должна обеспечивать следующий функционал:
-обеспечивать ввод и редактирование о книгах в библиотечном фонде;
-обеспечивать ввод и редактирование о читателях;
-предоставить интерфейс для регистрации выдачи книги читателю;
-предоставить интерфейс для регистрации возврата книги читателем;
-предоставить отчет по экземплярам выданных книг.
Данные о книгах содержат:
Идентификатор
Автор
Название
Издательство
Общее число экземпляров
Дата выдачи
Данные о читателях содержат:
Идентификатор
ФИО
Паспортные данные
Список книг, которые находятся у читателя
Данные ИС хранятся в бинарных файлах.
1.2. Определение структуры программного продуктаНа рисунке 1.2.1 показана структурная схема программы.
Рисунок 1.2.1 – Структурная схема программы
Для разработки программы будет использован объектно-ориентированный подход. В программе будет реализована иерархия классов, показанная на рисунке 1.2.2.
Важнейшим шагом на пути к совершенствованию языков программирования стало появление объектно-ориентированного подхода к программированию и соответствующего класса языков.
Объектно-ориентированное программирование (ООП) - это парадигма (совокупность понятий и идей) программирования, в рамках которой «во главу угла» ставят понятия объектов и классов. Сейчас ООП так или иначе присутствует во всех языках, поэтому понимание его основ просто необходимо для всех, кто занимается программированием. Наиболее известным примером объектно-ориентированного языка программирования является язык C++, развывшийся из императивного языка С. Его прямым потомком и логическим продолжением является язык С#. Другие примеры объектно-ориентированных языков программирования: Visual Basic, Java, Eiffel, Oberon.
При объектно-ориентированном подходе программа представляет собой описание объектов, их свойств (или атрибутов), совокупностей (или классов), отношений между ними, способов их взаимодействия и операций над объектами (или методов).
Базовые понятия ООП это класс и объект.
Класс - это шаблон, описание ещё не созданного объекта. Класс содержит данные, которые описывают строение объекта и его возможности, методы работы с ним.
Объект - экземпляр класса. То, что «рождено» по «чертежу», то есть по описанию из класса. В качестве примера объекта и класса можно привести технический чертёж для изготовления детали - это класс. Выточенная же на станке по размерам и указаниям из чертежа деталь - объект.
Появление объектно-ориентированного программирования стало результатом возросших требований к функционалу программ, когда описывать объект приходилось раз за разом в разных участках кода. Тогда и было введено понятие класса, параметры которого задавались единожды, а после в коде оставлялись только ссылки на класс, чтобы код самостоятельно «собрал» объект.
Несомненным преимуществом данного подхода является концептуальная близость к предметной области произвольной структуры и назначения. Механизм наследования атрибутов и методов позволяет строить производные понятия на основе базовых и таким образом создавать модель сколь угодно сложной предметной области с заданными свойствами.
В объектно-ориентированном программировании выделяют 4 основных принципа: абстракция, инкапсуляция, наследование и полиморфизм.
Абстракция — способ выделения самых значимых характеристик объекта, при этом менее значимые отбрасываются. В ООП абстракция - работа только со значимыми характеристиками. Суть этого принципа в том, чтобы отделить составные объекты, состоящие из «меньших» объектов, от этих самых объектов, то есть от их составляющих.
Такой подход позволяет работать непосредственно с объектом, не вдаваясь в подробности, из чего же он состоит и как работает
Инкапсуляция - принцип объектно-ориентированного программирования, позволяющий собрать объект в пределах одной структуры или массива, убрав способ обработки данных и сами данные от «чужих глаз».
Это одновременно и облегчает конечному пользователю работу с программой, и защищает данные и само приложение от постороннего вмешательства. Пользователь может работать со всем функционалом через интерфейс, не задумываясь над тем, как программа работает. Инкапсуляцию применяют:
-когда нужно сохранить некоторый участок кода без изменений со стороны пользователя;
-когда нужно ограничить доступ к коду - в связи с уникальностью используемых техник, которые автор хочет оставить «при себе»;
-когда изменение кода повлечёт за собой неработоспособность программы или её взлом.
Наследование — способность в объектно-ориентированном программировании построить новый класс на основе уже заданного. При этом функционал может, как полностью совпадать, так и отличаться. Класс-донор называется в таком случае родительским или базовым, а его «потомок» — наследником, дочерним классом.
Существует также множественное наследование, при котором у класса-наследника может быть несколько «родителей». При этом класс наследует методы всех своих отцов и матерей, что часто приводит к ошибкам. Наследование требует определения ещё одного понятия:
-прототип - объект-образец, на основе которого «рождаются» другие объекты, полностью копируя его или изменяясь в процессе. При изменении в прототипе в копиях также происходят соответствующие изменения.
Полиморфизм - способность объектов самим определять, какие методы они должны применить в зависимости от того, где именно в коде они находятся. То есть, объект может изменяться в зависимости от своего местоположения и действовать по-разному, что позволяет не заводить лишних структур.
Полиморфизм позволяет повысить процент повторного использования кода и сократить тем самым размер программы и временные затраты на её написание.

Рисунок 1.2.2 – Иерархия классов программы

2. Разработка программного продукта2.1. Выбор технологии, языка и среды разработкиДля написания программного кода использовалась среда разработки Visual Studio. Программный код написан на языке C#.
Microsoft Visual Studio - линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом.
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense, встроенный отладчик, редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных.
Назначение .NET Framework - служить средой для поддержки разработки и выполнения распределенных компонентных приложений. Она обеспечивает совместное использование разных языков программирования, а также безопасность, переносимость программ и общую модель программирования для платформы Windows.
Язык C# был разработан корпорацией Microsoft в конце 90-х годов как часть общей стратегии .NET. Первая версия была выпущена в середине 2000 года. Язык С# имеет родственные связи с языками С, С++ и Java.
Это объектно-ориентированный язык программирования.
Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения. Язык имеет полный и хорошо определённый набор основных типов, предусмотрено автоматическое освобождение динамически распределённой памяти, имеется полный доступ к библиотеке базовых классов .NET, а также лёгкий доступ к Windows API (если это действительно необходимо) .2.2. Разработка пользовательского интерфейса2.2.1. Создание проекта в среде разработки MS Visual StudioЧтобы создать проект необходимо запустить программу MS Visual Studio. После запуска программы в меню необходимо нажать «Файл», раскрыть список «Создать» и выбрать «Проект». После откроется окно «Создание проекта», в котором необходимо выбрать решение, в данном случае это решение «Приложение Windows Forms (.NET Framework) на языке C#». Далее необходимо задать имя проекту и решению, расположение файла и выбрать платформу. После всех действий нужно нажать «ОК». После создания проекта откроется окно «Конструктор форм», в котором можно изменить вид главной формы.
2.2.2. Создание формПроект интерфейса приложения показан на рисунке 1.

Рисунок 2.2.2.1 - Проект интерфейса приложения
Элементы управления, расположенные на форме перечислены в таблице 2.2.2.1.
Таблица 2.2.2.1 - Элементы управления, расположенные на форме
Имя элемента Тип элемента Назначение
menuStrip MenuStrip Главное меню программы
listBoxReaders ListBox Список для вывода читателей
listBoxBooks ListBox Список для вывода книг
dateTimePicker DateTimePicker Календарь
label1, label2, label3, label4, label5, label6, label7, label8, label9 Label Подписи на форме
buttonBookToReader Button Кнопка «Выдача=>»
buttonBookFromReader Button Кнопка «<=Возврат»
listBoxReaderHasBooks ListBox Список для вывода книг на руках у читателя
textBoxAuthors TextBox Поле для ввода автора книги
textBoxTitle TextBox Поле для ввода названия книги
textBoxPublisher TextBox Поле для ввода издательства книги
textBoxQuantity TextBox Поле для ввода количества экземпляров книги
buttonEditBook Button Кнопка «Исправить» для книги
buttonAddBook Button Кнопка «Добавить» для книги
buttonDeleteBook Button Кнопка «Удалить» для книги
textBoxName TextBox Поле для ввода ФИО читателя
textBoxPassport TextBox Поле для ввода паспортных данных читателя
buttonEditReader Button Кнопка «Исправить» для читателя
buttonAddReader Button Кнопка «Добавить» для читателя
buttonDeleteReader Button Кнопка «Удалить» для читателя
textBoxBookFind TextBox Поле для ввода образца поиска для книг
buttonBookFind Button Кнопка «?» для книги
textBoxReaderFind TextBox Поле для ввода образца поиска для читателей
buttonReaderFind Button Кнопка «?» для читателя
button1 Button Кнопка «У кого»
2.3. Описание реализации программного продукта2.3.1. Создание классов в коде программыИнтерфейсы описанных классов описаны ниже.
Базовый класс:
class classData
{
private static int ID = 0;
public int id; //Идентификатор
public classData() //конструктор
{}
public static void SetID(classData data) //установить идентификатор
{ }
Класс описывающий книгу:
class classBook :classData
{
//Общая информация
public string Authors; //автор
public string Title; //название
public string Publisher; //издательство
//Для тех, что в библиотеке
public int Total; //Всего в библиотеке
//Для тех, что выданы:
public DateTime date; //Дата выдачи
//Конструктор по умолчанию
public classBook():base()
{ }
//Конструктор копирования
public classBook(classBook book):this()
{ }
public override string ToString() //представление в виде строки
{ }
Класс описывающий читателя:
class classReader :classData
{
public string Name; //ФИО
public string Passport; //паспортные данные
public List<classBook> books = new List<classBook>(); //список книг у читателя
public override string ToString()//представление в виде строки
{ }
}
Полный код классов приведен в приложении.
2.3.2. Программирование главной формыНа главной форме приложения описаны следующие обработчики:
private void exitToolStripMenuItem_Click(object sender, EventArgs e) – выход из программы (меню);
private void Form1_FormClosing(object sender, FormClosingEventArgs e) - выход из программы (закрытие формы);
private void Form1_Load(object sender, EventArgs e) – загрузка формы;
void ToListBoxBooks(ListBox listBox, List<classBook> list) – отображения списка книг;
void ToListBoxReaders(ListBox listBox, List<classReader> list) – отображения списка читателей;
private void buttonDeleteBook_Click(object sender, EventArgs e) – удаление книги;
private void buttonDeleteReader_Click(object sender, EventArgs e) – удаление читателя;
private void buttonAddBook_Click(object sender, EventArgs e) – добавить книгу;
int ByTitle(classBook b1, classBook b2) – сортировка книг по названию;
private void buttonAddReader_Click(object sender, EventArgs e) – добавить читателя;
int ByName(classReader r1, classReader r2) – сортировка читателей по ФИО;
private void buttonEditBook_Click(object sender, EventArgs e) – редактирование книги;
private void buttonEditReader_Click(object sender, EventArgs e) – редактирование читателя;
private void listBoxBooks_SelectedIndexChanged(object sender, EventArgs e) – выбор книги в списке;
private void listBoxReaders_SelectedIndexChanged(object sender, EventArgs e) – выбор читателя в списке;
private void buttonBookToReader_Click(object sender, EventArgs e) – выдача книги;
private void buttonBookFromReader_Click(object sender, EventArgs e) – возврат книги;
private void buttonBookFind_Click(object sender, EventArgs e) – поиск книги;
private void buttonReaderFind_Click(object sender, EventArgs e) – поиск читателя;
private void button1_Click(object sender, EventArgs e) – список книг на выдаче.

3. Тестирование и отладка программного продуктаТестирование программного обеспечения – это процесс исследования ПО с целью выявления ошибок и определения соответствия между реальным и ожидаемым поведением ПО, осуществляемый на основе набора тестов, выбранных определённым образом.
В более широком смысле, тестирование ПО – это техника контроля качества программного продукта, включающая в себя проектирование тестов, выполнение тестирования и анализ полученных результатов.
Результаты тестирования приведены на рисунках 3.1 – 3.15.

Рисунок 3.1 – Вывод информации

Рисунок 3.2 – Добавление книги

Рисунок 3.3 – Редактирование книги

Рисунок 3.4 – Поиск книги

Рисунок 3.5 – Добавление читателя

Рисунок 3.6 – Выдача книги

Рисунок 3.10 – Возврат книги

Рисунок 3.11 – Запрос подтверждения удаления книги

Рисунок 3.12 – Удаление книги

Рисунок 3.13 – Запрос подтверждения удаления читателя

Рисунок 3.14 – Удаление читателя

Рисунок 3.15 – Вывод списка читателей, имеющих на руках выбранную книгу

ЗаключениеВ рамках курсовой работы была спроектирована и разработана информационной системы для предметной области «Библиотека».
В рамках работы решены следующие задачи:
-проведен анализ предметной области;
-выделены основные сущности предметной области и связи между ними;
-определена структура программного продукта;
-выбраны технические средства для реализации проекта;
-выполнено проектирование структуры приложения;
-выполнено проектирование классов информационной системы;
-разработан интерфейс пользователя;
-выполнено кодирование приложения на выбранном языке программирования;
-выполнено тестирование приложения.
Для написания программного кода использовалась среда разработки Visual Studio. Программный код написан на языке C#.
Приложение имеет графический интерфейс. Данные программы хранятся в бинарных файлах.

Список источников1. Албахари Д. C# 6.0. Справочник. Полное описание языка / Джозеф Албахари, Бен Албахари - Москва. : Вильямс. 2017 -1040c
2. Ахо Дж., Хопкрофт А., Ульман Дж. Структуры данных и алгоритмы. — Москва.: Вильямс, 2016. - 400 c.
3. Иванова Г. Объектно-ориентированное программирование. Учебник/ Иванова Г, Ничушкина Т. – М.: МГТУ им. Н.Э. Баумана, 2014 - 455с.
4. Комлев Н. Объектно Ориентированное Программирование. Настольная книга программиста/ Н. Комлев – М.: Солон-Пресс, 2018 - 298с.
5. Маклафлин Б. C#. Объектно-ориентированный анализ и проектирование/ Бретт Маклафлин - СПб.: Питер. 2017 -608c
6. Павловская Т. А. C#. Программирование на языке высокого уровня: Учебник для вузов/ Павловская Т. А. - СПб.: Питер. 2015 -432c
7. Рихтер Д. C#. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#/ Джеффри Рихтер - СПб.: Питер. 2017 -896c
8. Рэнди С. С# 5.0. Карманный справочник / Стефан Рэнди Дэвис, Чак Сфер. — Москва. : Вильямс, 2013. — 288 с.

Приложение 1
Листинг кода базового класса
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Базовый класс
namespace TheLibrary
{
[Serializable]
class classData
{
private static int ID = 0;
public int id; //Идентификатор
public classData()
{
id = ++ID;
}
public static void SetID(classData data)
{
if (data.id >= ID)
ID = data.id;
}
}
}

Приложение 2
Листинг кода класса описывающего книги
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Книга
namespace TheLibrary
{
[Serializable]
class classBook :classData
{
//Общая информация
public string Authors;
public string Title;
public string Publisher;
//Для тех, что в библиотеке
public int Total; //Всего в библиотеке
//Для тех, что выданы:
public DateTime date; //Дата выдачи
//Конструктор по умолчанию
public classBook():base()
{
}
//Конструктор наследования
public classBook(classBook book):this()
{
Authors = book.Authors;
Publisher = book.Publisher;
Title = book.Title;
Total = book.Total;
date = book.date;
id = book.id; //Чтобы найти потом
}
public override string ToString()
{
string result = Title;
if (Total > 0)
{
result += " " + Authors;
result += " " + Total.ToString();
}
else result += " " + date.ToString("dd.MM.yyyy");
return result;
}
}
}

Приложение 3
Листинг кода класса описывающего читателей
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Читатель
namespace TheLibrary
{
[Serializable]
class classReader :classData
{
public string Name;
public string Passport;
public List<classBook> books = new List<classBook>();
public override string ToString()
{
return Name+" {"+Passport+"} ["+books.Count.ToString()+"]";
}
}
}

Приложение 4Листинг кода формы программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace TheLibrary
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Данные
List<classBook> books = new List<classBook>();
List<classReader> readers = new List<classReader>();
BinaryFormatter formatter = new BinaryFormatter();
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//Сохранить книги и читателей
using (FileStream fs = new FileStream("books.dat", FileMode.Create, FileAccess.Write))
{
formatter.Serialize(fs, books);
fs.Close();
}
using (FileStream fs = new FileStream("readers.dat", FileMode.Create, FileAccess.Write))
{
formatter.Serialize(fs, readers);
fs.Close();
}
}
private void Form1_Load(object sender, EventArgs e)
{
//Установить сегодняшнюю дату
//Загрузить книги
if (File.Exists("books.dat"))
using (FileStream fs = new FileStream("books.dat", FileMode.OpenOrCreate, FileAccess.Read))
books = (List<classBook>)formatter.Deserialize(fs);
//Показать книги
ToListBoxBooks(listBoxBooks,books);
//Загрузить читателей
if (File.Exists("readers.dat"))
using (FileStream fs = new FileStream("readers.dat", FileMode.OpenOrCreate, FileAccess.Read))
readers = (List<classReader>)formatter.Deserialize(fs);
//Показать читаталей
ToListBoxReaders(listBoxReaders, readers);
if (books.Count > 0) listBoxBooks.SelectedIndex = 0;
if (readers.Count > 0) listBoxReaders.SelectedIndex = 0;
//Установить правильный ID для книг и читателей
foreach (classData d in books) classData.SetID(d);
foreach (classReader r in readers) classData.SetID(r);
}
void ToListBoxBooks(ListBox listBox, List<classBook> list)
{
listBox.Items.Clear();
foreach (var l in list)
listBox.Items.Add(l);
}
void ToListBoxReaders(ListBox listBox, List<classReader> list)
{
listBox.Items.Clear();
foreach (var l in list)
listBox.Items.Add(l);
}
//Удаление книги
private void buttonDeleteBook_Click(object sender, EventArgs e)
{
int index = listBoxBooks.SelectedIndex;
if (index < 0) return; //Не выбран удаляемый
if (MessageBox.Show(books[index].ToString(), "Вы уверены?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return;
books.RemoveAt(index);
ToListBoxBooks(listBoxBooks,books);
if (index >= listBoxBooks.Items.Count) index--;
if (index >= 0) listBoxBooks.SelectedIndex = index;
}
private void buttonDeleteReader_Click(object sender, EventArgs e)
{
int index = listBoxReaders.SelectedIndex;
if (index < 0) return; //Не выбран удаляемый
if (MessageBox.Show(readers[index].ToString(), "Вы уверены?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) return;
readers.RemoveAt(index);
ToListBoxReaders(listBoxReaders, readers);
if (index >= listBoxReaders.Items.Count) index--;
if (index >= 0) listBoxReaders.SelectedIndex = index;
}
//Добавить книгу
private void buttonAddBook_Click(object sender, EventArgs e)
{
int q = 0;
if (!int.TryParse(textBoxQuantity.Text, out q) || q<=0)
{
MessageBox.Show("Количество книг - не натуральное число");
return;
}
//Создать книгу
classBook b = new classBook()
{
Authors = textBoxAuthors.Text,
date = DateTime.Now,
Publisher = textBoxPublisher.Text,
Title = textBoxTitle.Text,
Total = q
};
books.Add(b);
books.Sort(ByTitle);
ToListBoxBooks(listBoxBooks, books);
listBoxBooks.SelectedIndex = books.IndexOf(b);
}
//Способ сортировки книг
int ByTitle(classBook b1, classBook b2)
{
return b1.Title.CompareTo(b2.Title);
}
//Добавить читателя
private void buttonAddReader_Click(object sender, EventArgs e)
{
classReader r = new classReader()
{
Name = textBoxName.Text,
Passport = textBoxPassport.Text
};
readers.Add(r);
readers.Sort(ByName);
ToListBoxReaders(listBoxReaders, readers);
listBoxReaders.SelectedIndex = readers.IndexOf(r);
}
//Способ сортировки читателей
int ByName(classReader r1, classReader r2)
{
return r1.Name.CompareTo(r2.Name);
}
//Исправить данные о книге
private void buttonEditBook_Click(object sender, EventArgs e)
{
int index = listBoxBooks.SelectedIndex;
if (index < 0) return; //Не выбран
classBook b = books[index];
b.Authors = textBoxAuthors.Text;
b.Title = textBoxTitle.Text;
b.Publisher = textBoxPublisher.Text;
int.TryParse(textBoxQuantity.Text, out b.Total);
books[index] = b;
ToListBoxBooks(listBoxBooks, books);
}
private void buttonEditReader_Click(object sender, EventArgs e)
{
int index = listBoxReaders.SelectedIndex;
if (index < 0) return; //Не выбран
classReader r = readers[index];
r.Name = textBoxName.Text;
r.Passport = textBoxPassport.Text;
readers[index] = r;
ToListBoxBooks(listBoxBooks, books);
}
//Реакция на выбор в ListBox
private void listBoxBooks_SelectedIndexChanged(object sender, EventArgs e)
{
int index = listBoxBooks.SelectedIndex;
if (index < 0) return; //Не выбран
classBook b = books[index];
textBoxAuthors.Text = b.Authors;
textBoxTitle.Text = b.Title;
textBoxPublisher.Text = b.Publisher;
textBoxQuantity.Text = b.Total.ToString();
}
private void listBoxReaders_SelectedIndexChanged(object sender, EventArgs e)
{
int index = listBoxReaders.SelectedIndex;
if (index < 0) return; //Не выбран
classReader r = readers[index];
textBoxName.Text = r.Name;
textBoxPassport.Text = r.Passport;
ToListBoxBooks(listBoxReaderHasBooks, r.books);
}
//Основные режимы работы библиотекаря
//Выдача
private void buttonBookToReader_Click(object sender, EventArgs e)
{
int bookIndex = listBoxBooks.SelectedIndex;
if (bookIndex < 0)
{
MessageBox.Show("Книга не выбрана", "Пожалуйста", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; //Не выбрана
}
classBook b = books[bookIndex];
if (b.Total<1)
{
MessageBox.Show("Книги на полках нет", "Пожалуйста", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; //Не выбрана
}
int readerIndex = listBoxReaders.SelectedIndex;
if (readerIndex < 0)
{
MessageBox.Show("Читатель не выбран", "Пожалуйста", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; //Не выбрана
}
classReader r = readers[readerIndex];
//Процесс выдачи:
//К списку книг у читателя добавляется копия
classBook rb = new classBook(b);
rb.Total = 0; //Условность
rb.date = dateTimePicker.Value;
r.books.Add(rb);
b.Total--;
readers[readerIndex] = r;
books[bookIndex] = b;
//Обновить изображение
ToListBoxBooks(listBoxBooks, books);
ToListBoxReaders(listBoxReaders, readers);
//Восстановить выбор
listBoxBooks.SelectedIndex = bookIndex;
listBoxReaders.SelectedIndex = readerIndex;
}
//Возврат
private void buttonBookFromReader_Click(object sender, EventArgs e)
{
int readerIndex = listBoxReaders.SelectedIndex;
if (readerIndex < 0)
{
MessageBox.Show("Читатель не выбран", "Пожалуйста", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; //Не выбрана
}
classReader r = readers[readerIndex];
int bookIndex = listBoxReaderHasBooks.SelectedIndex;
if (bookIndex < 0)
{
MessageBox.Show("Книга для возврата не выбрана", "Пожалуйста", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return; //Не выбрана
}
classBook br = r.books[bookIndex];
//Найти книгу в библиотеке
int baseBookIndex = 0;
while (books[baseBookIndex].id != br.id)
baseBookIndex++;
classBook b = books[baseBookIndex];
//Зарегистрировать
r.books.Remove(br);
b.Total++;
books[baseBookIndex] = b;
readers[readerIndex] = r;
//Обновить изображение
ToListBoxBooks(listBoxBooks, books);
ToListBoxReaders(listBoxReaders, readers);
//Восстановить выбор
listBoxBooks.SelectedIndex = baseBookIndex;
listBoxReaders.SelectedIndex = readerIndex;
}
//Найти книгу (по подстроке, со следующей позиции)
private void buttonBookFind_Click(object sender, EventArgs e)
{
string templ = textBoxBookFind.Text.ToLower().Trim();
int index = listBoxBooks.SelectedIndex;
if (templ == "") return; //Пустая строка не ищется
if (books.Count == 0) return; //В пустых списках не ищется
for (int k=0; k<books.Count; k++) //Не больше чем полный оборот
{
index = (index + 1) % books.Count;
if (books[index].ToString().ToLower().IndexOf(templ)>=0)
{
listBoxBooks.SelectedIndex = index;
return;
}
}
MessageBox.Show(templ, "Не найден", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
//Аналогично - читателей
private void buttonReaderFind_Click(object sender, EventArgs e)
{
string templ = textBoxReaderFind.Text.ToLower().Trim();
int index = listBoxReaders.SelectedIndex;
if (templ == "") return; //Пустая строка не ищется
if (readers.Count == 0) return; //В пустых списках не ищется
for (int k = 0; k < readers.Count; k++) //Не больше чем полный оборот
{
index = (index + 1) % readers.Count;
if (readers[index].ToString().ToLower().IndexOf(templ) >= 0)
{
listBoxReaders.SelectedIndex = index;
return;
}
}
MessageBox.Show(templ, "Не найден", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
//Составить список, у кого выбранная книга
private void button1_Click(object sender, EventArgs e)
{
string result = "";
int index = listBoxBooks.SelectedIndex;
if (index < 0) return;
int id = books[index].id;
foreach (var r in readers)
foreach (var b in r.books)
if (b.id == id)
result += r.Name + Environment.NewLine;
if (result == "") result = "Все на полках";
MessageBox.Show(result, "Книга", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
54 132 оценки star star star star star
среднее 4.9 из 5
ТюмГУ
Спасибо большое за курсовую работу!! Оригинальность 75%, оценка отлично
star star star star star
СПбГУ
Очень грамотное написание курсовой, видно, что исполнитель разбирается в теме работы и пиш...
star star star star star
РЭУ им.Плеханова
Благодарю Евгению за выполнение работы,оценка-отлично.Сделано -все как положено,грамотно и...
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

Архитектура и организация конфигурации памяти вычислительной системы

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно
    Введите ваш e-mail
    Файл с работой придёт вам на почту после оплаты заказа
    Успешно!
    Работа доступна для скачивания 🤗.