Курсовой проект по программировнаию. Курсовая работа Программирование. Курсовой проект по дисциплине Технологии Программирования пояснительная записка тема проекта Работник библиотеки
Скачать 102.45 Kb.
|
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ) ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ Кафедра Безопасности информационных систем КУРСОВОЙ ПРОЕКТ по дисциплине: Технологии Программирования ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Тема проекта: «Работник библиотеки» Автор: студент гр. ИБ-05з Бородин Максим Сергеевич Оценка: ______________ Дата: ________________ Проверил: руководитель проекта _________ __________ /_____________/ (должность) (подпись) (Ф.И.О.) Санкт-Петербург 2022 г СОДЕРЖАНИ ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ 1 Замысел 3 Состав 3 Код программы 3 Заключение 11 Замысел 3 Состав 3 Код программы 3 Заключение 11 ЗамыселДанная программа может представлять основу для базы данных библиотеки. С её помощью можно вести электронный учёт книг и присваивать им индивидуальные номера. Также можно вести базу данных читателей, чтобы сохранять необходимую информацию, присваивать читательские билеты и отслеживать книги на руках у каждого читателя. Для проверки работоспособности программы используется вывод данных в консоль. СоставКласс Book. Содержит необходимую информацию о книге и генерирует индивидуальные номера. Класс Library. Содержит массив объектов класса Book. Через этот класс создаются и корректируются новые объекты класса Book. В этом классе реализована логика изменения и отслеживания количества книг. Класс Reader. Содержит информацию о читателе, номер его билета и массив объектов класса Book. С его помощью можно генерировать новых пользователей и взаимодействовать с библиотекой (классом Library). Код программыBook.h #pragma once //хеддер класса, описывающего книги #include #include using namespace std; class Book { public: Book(); //Конструктор по умолчанию Book(string name, string autor, string genre); //Конструктор с параметрами //Конструктор копирования не требует реализации, т.к. генерируемый по умолчанию работает исправно //Геттеры названия, авторства и индивидуального номера string GetName(); string GetAutor(); int GetID(); //Сеттеры даты выдачи и количества экземпляров void SetDate(string date); void SetNum(); void PrintLib(); //Вывод информации о книге в библиотеке void PrintRead(); //Вывод информации о книге у читателя static int Count; //Статическая переменная для присваивания индивидуальных номеров private: string Name; //Название книги string Autor; //Авторство string Genre; //Жанр string DateOfIssue; //Дата выдачи int number = 1; //Количество экземпляров int id; //Индивидуальный номер friend class Library; //Класс Library установлен дружественным, т.к. в нём, и только в нём, //происходит изменение данных объектов класса Book }; Book.cpp #include "Book.h" //Не трбует реализации, т.к. внутри прогарммы объекты этого класса всегда создаются с параметрами Book::Book() {} //Принимаются три основные характеристики объекта, а также присваивается индивидуальный номер Book::Book(string name, string autor, string genre) { id = Count; Name = name; Autor = autor; Genre = genre; } string Book::GetName() { return Name; } string Book::GetAutor() { return Autor; } int Book::GetID() { return id; } //Принимает дату в текстовом формате и выводит предупреждение о возврате книги void Book::SetDate(string date) { cout << "Книгу необходимо вернуть в течение 30 календарных дней!" << endl << endl; DateOfIssue = date; } //У объекта класса Reader все книги хранятся отдельно, //поэтому для каждой книги на руках читателя устанавливается количество, равное 1 void Book::SetNum() { number = 1; } void Book::PrintLib() { if (number != 0) //Не выводит информацию о книге, если её экземпляры отсутствуют в библиотеке { cout << "Название: " << Name << endl; cout << "Автор: " << Autor << endl; cout << "Жанр: " << Genre << endl; cout << "Количество: " << number << endl; cout << "id: " << id << endl << endl; } } //Не нуждается в проверке на количество, //т.к. экземпляры на руках у читателя не складываются, а хранятся отдельно void Book::PrintRead() { cout << "Название: " << Name << endl; cout << "Автор: " << Autor << endl; cout << "Жанр: " << Genre << endl; cout << "Дата выдачи: " << DateOfIssue << endl << endl; } Library.h #pragma once //хеддер класса, описывающего коллекцию библиотеки #include #include #include #include "Book.h" //Подключение класса Book using namespace std; class Library { public: Library(); //Конструктор по умолчанию Library(string name, string autor, string genre); //Конструктор с параметром //Конструктор копирования не требует реализации, //т.к. в этой программе создаётся лишь один объект этого класса //Метод, добавляющий книгу в библиотеку void AddBook(string name, string autor, string genre); //Метод, удаляющий одну книгу из библиотеки по её индивидуальному номеру bool LoseBook(int id); //Метод, отслеживающий количество экземпляров одной книги bool CheckNumBook(string name, string autor); //Вывод коллекции библиотеки void Print(); private: vector friend class Reader; //Класс Reader установлен дружественным, т.к. в ходе его работы //необходимо корректировать данные объектов массива класса Library }; Library.cpp #include "Library.h" //Выводит сообщение об отсутствии книг Library::Library() { cout << "Здесь сейчас пусто! Добавьте какую-нибудь книгу." << endl << endl; } //Позвляет создать библиотеку с первой книгой Library::Library(string name, string autor, string genre) { AddBook(name, autor, genre); } void Library::AddBook(string name, string autor, string genre) { //Если экземпляры такой книги уже есть в наличии, то их количество увеличивается на 1 //Если такой книги ещё нет в библиотеке, то она добавлется и получает индивидуальный номер if (CheckNumBook(name, autor)) {} else { Book::Count++; bks.push_back(Book(name, autor, genre)); } } bool Library::LoseBook(int id) { //Если в библиотеке есть экземпляры указанной книги, то их количество уменьшается на 1, //а метод возвращает true //Если экземпляров нет, то выводится соответствующее сообщение, а метод возвращает false if (bks[id - 1].number != 0) { bks[id - 1].number -= 1; return 1; } else { cout << "Этой книги нет в наличии!\n" << endl; return 0; } } bool Library::CheckNumBook(string name, string autor) { bool check = 0; //Создаётся логическая переменная //С помощью цикла в массиве ищется книга с переданными параметрами //Если такая книга есть, то её количество увеличивается на 1, //цикл завершается, а метод возвращает true //Если такой книги нет, то метод возвращает false for (vector { if (it->Name == name && it->Autor == autor) { it->number += 1; check += 1; break; } } return check; } void Library::Print() { cout << "Коллекция библиотеки: " << endl << endl; //У каждого объекта класса Book в массиве вызывается вывод информации для библиотеки for (vector { it->PrintLib(); } cout << endl; } Reader.h #pragma once //хеддер класса, описывающего читателя библиотеки #include #include #include #include "Library.h" //Подключение класса Library. Вместе с ним подключается и класс Book using namespace std; class Reader { public: Reader(); //Конструктор по умолчанию Reader(string name, string adress, string BD); //Конструктор с параметром //Метод, добавляющий в коллекцию читателя книгу из указанной библиотеки void TakeBook(Library& obj, string name, string autor, string date); //Метод, удаляющий книгу из коллекции читателя. num - порядковый номер книги в коллекции читателя void BringBook(Library& obj, int num); //Вывод информации о читателе void ShowInfo(); static int Count; //Статическая перменная для присовения номера читательского билета private: string FIO; //Полное имя string Adress; //Адрес проживания string BirthDate; //Дата рождения int id; //Номер читательского билета vector }; Reader.cpp #include "Reader.h" //Задаёт уникальный номер и указывает стандартную информацию Reader::Reader() { Count++; id = Count; FIO = "Иванов Иван Иваныч"; Adress = "Информация отсутствует"; BirthDate = "Информация отсутствует"; } //Задаёт уникальный номер и присваивает основные параметры Reader::Reader(string name, string adress, string BD) : FIO(name), Adress(adress), BirthDate(BD) { Count++; id = Count; } void Reader::TakeBook(Library& obj, string name, string autor, string date) { bool check = 0; //Объявляется логическая переменная //Цикл проходит по массиву преданной библиотеки for (vector { //Проверка на совпадение переданных параметров с параметрами книги в этой итерации if (it->GetName() == name && it->GetAutor() == autor) { //Если такая книга нашлась, проходит проверка количества экземпляров //Если экземпляров больше 0, читатель получает книгу, а из библиотеки удаляется 1 экземпляр if (obj.LoseBook(it->GetID())) { collect.push_back(Book(*it)); //Добавление книги в коллекцию читателя (collect.end() - 1)->SetDate(date); //Установка даты получения (collect.end() - 1)->SetNum(); //Установка количества экземпляров } else //Если в библиотеке не осталось экземпляров найденой книги, выводится соответствующее сообщение, и цикл прерывается break; check += 1; //Если цикл не прервался, check увеличивается на 1 } } //Если указанной книги не нашлось, выводится соответствующее сообщение if (!check) cout << "Не нашлось такой книги!" << endl << endl; } void Reader::BringBook(Library& obj, int num) { //Количество экземпляров указанной книги в массиве переданной библиотеки увеличивается на 1 obj.CheckNumBook(collect[num - 1].GetName(), collect[num - 1].GetAutor()); //Указанная книга удаляется из коллекции читателя collect.erase(collect.begin() + num); } void Reader::ShowInfo() { cout << FIO << endl; cout << "Адрес проживания: " << Adress << endl; cout << "Дата рождения: " << BirthDate << endl; cout << "Номер читательского билета: " << id << endl; cout << "Книги на руках: " << endl << endl; //Для каждого объекта в массиве вызывается вывод информации для читателя for (vector { it->PrintRead(); } } Source.cpp #include #include #include #include "Reader.h" //Подключается только класс Reader, т.к. в его хеддере уже подключены остальные классы using namespace std; //переменные для присовения id обнуляются вне классов в целях корректной работы программы int Book::Count = 0; int Reader::Count = 0; //Проверяем работоспособность программы через выводы в консоль int main() { setlocale(LC_ALL, "ru"); Library lib; //Объявление объекта класса Library //Объявление объекта класса Reader с параметрами Reader rd("Сапогов А. А.", "г. Санкт-Петербург, ул. Пушкина, д. Колотушкина", "09.09.1999"); //Добавляется 4 книги, 2 из которох одинаковые lib.AddBook("Война и мир","Толстой Л. Н.","Роман-эпопея"); lib.AddBook("Война и мир", "Толстой Л. Н.", "Роман-эпопея"); lib.AddBook("Гарри Поттер и философский камень", "Джоан Роулинг", "Роман, фэнтези"); lib.AddBook("Война миров", "Герберт Уэллс", "Фантастика"); lib.Print(); //Выводим коллекцию библиотеки в консоль //Читатель берёт книгу из библиотеки lib rd.TakeBook(lib, "Война и мир", "Толстой Л. Н.", "14.05.2022"); //Тестируем корректность проверки на наличие экземпляров в библиотеке rd.TakeBook(lib, "Война миров", "Герберт Уэллс", "14.05.2022"); rd.TakeBook(lib, "Война миров", "Герберт Уэллс", "14.05.2022"); //Добавляем ещё одну книгу lib.AddBook("Дюна", "Фрэнк Герберт", "Философский роман"); lib.Print(); //Выводим коллекцию библиотеки в консоль //Тестируем корректность проверки на поиск указанной книги в библиотеке rd.TakeBook(lib, "Дюн", "Фрэнк Герберт", "20.05.2022"); rd.ShowInfo(); //Выводим коллекцию читателя в консоль lib.Print(); //Выводим коллекцию библиотеки в консоль return 0; } Результаты работы программы ЗаключениеСреда разработки: Microsoft Visual Studio 2019 ОС: Windows 7 Библиотеки: iostream, string, vector Объём кода: Book.h – 45, Book.cpp – 67, Library.h – 42, Library.cpp – 83, Reader.h – 38, Reader.cpp – 78, Source.cpp – 53. С помощью объектно-ориентированного подхода была создана программа, способная стать основной для базы данных библиотеки. В программе используются три класса: «Book» для описания книг, «Library» для работы с коллекцией библиотеки и «Reader» для работы с читателями. Для реализации списков книг была использована библиотека «vector», значительно упрощающая работу с массивами. Между классами «Library» и «Reader» выстроено взаимодействие, при котором отслеживается количество книг в каждом из объектов этих классов. Таким образом пользователь может добавлять новые книги в список библиотеки, а так же создавать профили новых читателей. У каждого созданного читателя можно отслеживать набор книг и дату их получения. Для проверки корректности работы все данные выводились в консоль. |