это быстро и бесплатно
Оформите заказ сейчас и получите скидку 100 руб.!
ID (номер) заказа
3269297
Ознакомительный фрагмент работы:
Оглавление
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 дней в неделю
Наши менеджеры всегда на связи и оперативно решат любую проблему
Строгий отбор экспертов
К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»
Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован
Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн
Выполнить 2 контрольные работы по Информационные технологии и сети в нефтегазовой отрасли. М-07765
Контрольная, Информационные технологии
Срок сдачи к 12 дек.
Архитектура и организация конфигурации памяти вычислительной системы
Лабораторная, Архитектура средств вычислительной техники
Срок сдачи к 12 дек.
Организации профилактики травматизма в спортивных секциях в общеобразовательной школе
Курсовая, профилактики травматизма, медицина
Срок сдачи к 5 дек.
краткая характеристика сбербанка анализ тарифов РКО
Отчет по практике, дистанционное банковское обслуживание
Срок сдачи к 5 дек.
Исследование методов получения случайных чисел с заданным законом распределения
Лабораторная, Моделирование, математика
Срок сдачи к 10 дек.
Проектирование заготовок, получаемых литьем в песчано-глинистые формы
Лабораторная, основы технологии машиностроения
Срок сдачи к 14 дек.
Вам необходимо выбрать модель медиастратегии
Другое, Медиапланирование, реклама, маркетинг
Срок сдачи к 7 дек.
Ответить на задания
Решение задач, Цифровизация процессов управления, информатика, программирование
Срок сдачи к 20 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Информационные технологии
Срок сдачи к 11 дек.
Написать реферат по Информационные технологии и сети в нефтегазовой отрасли. М-07764
Реферат, Геология
Срок сдачи к 11 дек.
Разработка веб-информационной системы для автоматизации складских операций компании Hoff
Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления
Срок сдачи к 1 мар.
Нужно решить задание по информатике и математическому анализу (скрин...
Решение задач, Информатика
Срок сдачи к 5 дек.
Заполните форму и узнайте цену на индивидуальную работу!