Проектирование классов в языке С++ для обработки файлов данных. Автоматизированная информационная система библиотеки.

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 36 36 страниц
  • 14 + 14 источников
  • Добавлена 12.06.2023
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
Введение 5
1. Проектирование системы 7
1.1 Описание предметной области 7
1.2 Концепция ООП 8
1.3 Проектирование классов 11
2. Реализация системы 14
2.1 Структура проекта 14
2.2 Реализация классов 14
2.3 Реализация файловой подсистемы 15
2.4 Тестирование 17
Заключение 22
Список использованных источников 23
Приложение 25
Фрагмент для ознакомления

getline(str, 100); cin.getline(str, 100);book = db.getBook(str);if (book == -1) { cout << "Книга " << str << "ненайдена" << endl; break; }cout << book << " " << (string)book << endl;for (size_t j = 0; j < book.getCount(); j++)cout << db.getAuthor(book[j]) << ((j != book.getCount() - 1) ? ", " : "");cout << endl;break;case 8:// Добавлениечитателяcout << "Введитефамилию: "; cin.getline(str, 100); cin.getline(str, 100); st[0] = ltrim(str);cout << "Введитеимя: "; cin.getline(str, 100); st[1] = ltrim(str);cout << "Введитеотчество: "; cin.getline(str, 100); st[2] = ltrim(str);cout << "Телефон: "; cin.getline(str, 100); st[3] = ltrim(str);cout<< "Номер билета: "; cin >> nbil;db.addReader(eReader(nbil, st[0], st[1], st[2], st[3]));break;case 9:// ДобавлениекнигиaddBook();break;}}}intmain(){SetConsoleCP(811);// для Русского текста или 1251SetConsoleOutputCP(811);setlocale(LC_ALL, "rus");//system("chcp 1251");db.Load();showMenu();db.Save();}ИнтерфейсклассакнигeBook:Books.h#ifndefBooksH#define BooksH#include #include using namespace std;class eBook {private:__int64 nbook;// Инвентарныйномерstringcapt;// Наименованиеvector <__int64> authors;// Авторыpublic:// КонструкторыeBook() { nbook = -1; capt = ""; authors.clear(); }// ПустойконструкторeBook(__int64 _nbook, string _capt);eBook(__int64 _nbook, string _capt, int _author);eBook(__int64 _nbook, string _capt, vector<__int64> _authors);// ДобавитьавтораvoidaddAuthor(__int64 _author) { authors.push_back(_author); }operator __int64() { return nbook; }// Перегрузкапреобразованиятипаoperator string() { return capt; }__int64 operator[](size_t n) { return getAuthor(n); }// Операториндексирования__int64 getN() { return nbook; }// ГеттерыstringgetCapt() { return capt; }__int64 getAuthor(size_t n) { return (n _authors) {nbook = _nbook; capt = _capt; authors.clear(); authors.assign(_authors.begin(), _authors.end());}Интерфейс класса читателей eReader :Readers.h#ifndefReadersH#define ReadersH#include using namespace std;classeReader {// Читателиprivate:__int64 nbil;// НомербилетаstringrName;// ИмяstringrSurn;// ФамилияstringrMidl;// Отчествоstring phone; // Телефонpublic:eReader() { nbil = -1; rSurn = ""; rName = ""; rMidl = ""; phone = ""; }// ПустойконструкторeReader(__int64 _nbil, string _rSurn, string _rName, string _rMidl, string _phone);operator __int64() { return nbil; }// Перегрузкапреобразованиятипаoperator string() { return rSurn+" "+rName; }// Перегрузкапреобразованиятипа__int64 getBil() { return nbil; }// ГеттерыstringgetName() { return rName; }stringgetSurn() { return rSurn; }stringgetMidl() { return rMidl; }stringgetPhone() { return phone; }};#endifРеализацияклассачитателейeReader: Readers.cpp#include "pch.h"// Для visual studio 2017#include #include "Readers.h"using namespace std;// КонструкторeReader::eReader(__int64 _nbil, string _rSurn, string _rName, string _rMidl, string _phone) {nbil = _nbil;rName = _rName; rSurn = _rSurn; rMidl = _rMidl; ; phone = _phone;}Интерфейс класса выдачи книг eRental: Rental.h#ifndefrentalH#define rentalH#include #include using namespace std;classeRental {// Выдачакнигиprivate:__int64 rId;// Читатель__int64 bId;// Книгаtime_tissue;// Датавыдачиintdays;// Количество днейpublic:eRental() { rId = -1; bId = -1; days = 0; }eRental(__int64 _rd, __int64 _bk, time_t _issue, int _days);operator string();__int64 getReader() { return rId; }__int64 getBook() { return bId; }time_tgetIssue() { return issue; }intgetDays() { return days; }stringgetReturn();voidextendTo(int _days) { days += _days; }// Продлениевыдачи};#endifРеализация класса выдачи книг eRental: Rental.cpp#include "pch.h"// Для visual studio 2017#define _CRT_SECURE_NO_WARNINGS// Дляработысдатойв VS 2017#include #include #include "rental.h"using namespace std;eRental::eRental(__int64 _rd, __int64 _bk, time_t _issue, int _days){rId = _rd; bId = _bk; issue = _issue; days = _days;}eRental::operator string() {char s[40];tm *now = localtime(&issue);strftime(s, 40, "%d.%m.%Y (%a)", now);return s; }stringeRental::getReturn() {char s[40];time_t ret = issue;ret += days * 24 * 60 * 60;tm *now = localtime(&ret);strftime(s, 40, "%d.%m.%Y (%a)", now);return s;}Интерфейсклассабазыданныхmdb: mdb.h#ifndefmdbH#define mdbH#include #include #include #include "Books.h"#include "Readers.h"#include "Rental.h"using namespace std;const string BLANKS = " \n\r\t\f\v";static string ltrim(conststd::string &s){size_t start = s.find_first_not_of(BLANKS);return (start == string::npos) ? "" :s.substr(start);}classmdb {// Классбазыданныхprivate:map<__int64, string> Authors;// Авторыvector Books;// Книгиvector Readers;// Читателиvector Rentals;// ВыдачакнигstringdbName;// ИмяБДpublic:mdb(string _dbName) { Authors.clear(); Books.clear(); Readers.clear(); dbName = _dbName; }void Load();// Загрузкаvoid Save();// Сохранение// ДобавлениеавтораvoidaddAuthor(__int64 _id, string _aName) { Authors[_id] = _aName; }voidaddAuthor(string _aName);map<__int64, string> getAuthors() { return Authors; }// ДобавлениекнигиvoidaddBook(eBook _book) { Books.push_back(_book); }// ДобавлениечитателяvoidaddReader(eReader _reader) { Readers.push_back(_reader); }// ДобавлениевыдачиvoidaddRental(eRental _rental) { Rentals.push_back(_rental); }size_tgetNBooks() { return Books.size(); }// Количестваsize_tgetNReaders() { return Readers.size(); }size_tgetNAuthors() { return Authors.size(); }size_tgetNRentals() { return Rentals.size(); }stringgetAuthor(__int64 _id);// Получениеавтора__int64 getAuthId(string _name);eBookgetBook(__int64 _id);// КнигиeBookgetBook(string _capt);eBookgetBookI(size_t n) { return (n#include #include #include #include #include "mdb.h"voidmdb::Load() {charstr[100]; __int64 id;stringst[4];ifstream ifs(dbName);size_tnpos; ifs >> npos;// Списокавторовfor (size_ti = 0; i < npos; i++) {ifs >> id; ifs.getline(str, 100); st[0] = ltrim(str);addAuthor(id, st[0]);}ifs >> npos;// Списокчитателейfor (size_ti = 0; i < npos; i++) {ifs >> id; ifs.getline(str, 100); st[0] = ltrim(str);ifs.getline(str, 100); st[1] = ltrim(str);ifs.getline(str, 100); st[2] = ltrim(str);ifs.getline(str, 100); st[3] = ltrim(str);addReader(eReader(id, st[0], st[1], st[2], st[3]));}ifs >> npos;// Списоккнигsize_tnauth; vector<__int64> authids; __int64 aid;for (size_ti = 0; i < npos; i++) {ifs >> id;ifs.getline(str, 100); st[0] = ltrim(str);ifs >> nauth; authids.clear();for (size_t j = 0; j < nauth; j++) {ifs >> aid;authids.push_back(aid);}addBook(eBook(id, st[0], authids));}ifs >> npos;// Списоквыдачtime_t issue; int days;for (size_ti = 0; i < npos; i++) {ifs >> id >> aid >> issue >> days;addRental(eRental(id, aid, issue, days));}}voidmdb::Save() {ofstreamfos(dbName);fos << Authors.size() << endl;for (auto p : Authors)// Сохранитьавторовfos << p.first << " " << p.second << endl;fos << Readers.size() << endl;for (size_ti = 0; i < Readers.size(); i++) {// Сохранитьчитателейfos << Readers[i] << " " << Readers[i].getSurn() << endl <

МБУ «Городская библиотека». URL: https://library-snz.chel.muzkult.ru/
ООП. URL: https://blog.skillfactory.ru/glossary/oop-obektno-orientirovannoe-programmirovanie/
Как ООП помогает разработчикам писать код быстрее и проще. URL: https://practicum.yandex.ru/blog/obektno-orientirovannoe-programmirovanie/
Коротко об истории объектно-ориентированного программирования. URL: https://habr.com/ru/post/107940/
Раздел 10. «Эпизодическое» объектно-ориентированное программирование. URL: http://ermak.cs.nstu.ru/cprog/html/101.htm
Что такое объекты и классы: 1‑я часть гайда по ООП. URL: https://skillbox.ru/media/code/oop_chast_1_chto_takoe_klassy_i_obekty/?ysclid=lfvf0552x4622996203
Особенности моделирования предметной области с помощью ООП. URL: https://habr.com/ru/post/249165/
Объектно-ориентированное программирование. URL: https://prog-cpp.ru/oop/
Полиморфизм. URL: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/object-oriented/polymorphism
Проектирование классов и наследование. URL: http://www.programmer-lib.ru/cstandart_page.php?id=15
Построение иерархии классов и проектирование приложения. URL: https://foxford.ru/wiki/informatika/postroenie-ierarhii-klassov-i-proektirovanie-prilozheniya
Стандартная библиотека шаблонов STL. URL: http://techn.sstu.ru/kafedri/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/1/MetMat/murashev/oop/lec/lec11.htm
Класс vector. URL: https://learn.microsoft.com/ru-ru/cpp/standard-library/vector-class?view=msvc-170
Класс map. URL: https://learn.microsoft.com/ru-ru/cpp/standard-library/map-class?view=msvc-170