Главная страница
Навигация по странице:

  • УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

  • ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ Кафедра Безопасности информационных систем КУРСОВОЙ ПРОЕКТ

  • ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

  • Результаты работы программы

  • Среда разработки

  • Курсовой проект по программировнаию. Курсовая работа Программирование. Курсовой проект по дисциплине Технологии Программирования пояснительная записка тема проекта Работник библиотеки


    Скачать 102.45 Kb.
    НазваниеКурсовой проект по дисциплине Технологии Программирования пояснительная записка тема проекта Работник библиотеки
    АнкорКурсовой проект по программировнаию
    Дата06.06.2022
    Размер102.45 Kb.
    Формат файлаdocx
    Имя файлаКурсовая работа Программирование.docx
    ТипКурсовой проект
    #571706

    ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

    ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

    УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

    «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

    ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

    (СПбГУТ)
    ИНСТИТУТ НЕПРЕРЫВНОГО ОБРАЗОВАНИЯ

    Кафедра Безопасности информационных систем

    КУРСОВОЙ ПРОЕКТ

    по дисциплине: Технологии Программирования

    ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

    Тема проекта: «Работник библиотеки»

    Автор: студент гр. ИБ-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 bks; //Массив объектов класса Book
    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::iterator it = bks.begin(); it != bks.end(); ++it)

    {

    if (it->Name == name && it->Autor == autor)

    {

    it->number += 1;
    check += 1;
    break;

    }

    }
    return check;

    }
    void Library::Print()

    {

    cout << "Коллекция библиотеки: " << endl << endl;
    //У каждого объекта класса Book в массиве вызывается вывод информации для библиотеки

    for (vector::iterator it = bks.begin(); it != bks.end(); ++it)

    {

    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 collect; //Массив объектов класса Book

    };
    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::iterator it = obj.bks.begin(); it != obj.bks.end(); ++it)

    {

    //Проверка на совпадение переданных параметров с параметрами книги в этой итерации

    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::iterator it = collect.begin(); it != collect.end(); ++it)

    {

    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» выстроено взаимодействие, при котором отслеживается количество книг в каждом из объектов этих классов. Таким образом пользователь может добавлять новые книги в список библиотеки, а так же создавать профили новых читателей. У каждого созданного читателя можно отслеживать набор книг и дату их получения. Для проверки корректности работы все данные выводились в консоль.


    написать администратору сайта