Разработка объектной программы для задачи управления автобусной сетью города.

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: C++
  • 48 48 страниц
  • 18 + 18 источников
  • Добавлена 01.05.2023
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Введение 3
1. Постановка задачи 4
2. Объектно-ориентированный подход 5
3. Проектирование классов программы 8
4. Тестирование созданных классов 15
5. Готовое приложение 16
Заключение 18
Список литературы 19
Приложение А 21
Приложение Б 27
Приложение В 29
Фрагмент для ознакомления

rbus) return 0;return rbus->getCount();}Bus* Route::getBus(std::string _num)// Получитьавтобуспогосномеру{if (!rbus) returnNULL;// Нетавтобусовнамарщрутеreturn rbus->getBus(_num);}void Route::Save(std::ofstream &ofs)// Сохранитьмаршрут{ofs << busCount() << " " << num << std::endl;if (rbus) rbus->Save(ofs);}Bus* Bus::getBus(std::string _num)// Получитьавтобуспогосномеру{if (num == _num) return this;// Автобуснайденif (!next) return NULL;// Большеэлементовнетreturn next->getBus(_num);}void Bus::addBusLast(Bus* _bus) // Добавитьавтобусвконец{if (next) next->addBusLast(_bus); else next = _bus;}void Bus::addBus(std::string _num, Bus* _bus) // Добавитьавтобуспослеуказанного{Bus *after = getBus(_num);// Ищемавтобусif (!after) return;_bus->next=after->next; after->next = _bus;}void Bus::remBus(Bus* &fbus, std::string _num)// Удалениеавтобусаизмаршрута{Bus *tmp;if (num == _num)// Первый в списке{ tmp = this; fbus = next;tmp->next = NULL; delete tmp;} elseif (next->num==_num) {Bus *tmp = next;next = next->next;tmp->next = NULL; delete tmp;}}voidBus::Show()// Показать текущий{std::cout << "Автобус " << num << " водитель " << driver << std::endl;}voidBus::ShowAll() // Показать все автобусы{Show();// Показать текущийif (next) next->ShowAll(); // Если есть следующий, показать}intBus::getCount()// Количество автобусов до конца списка включая текущий{if (!next) return 1;return next->getCount() + 1;}void Bus::Save(std::ofstream& ofs)// Сохранитьданные{ofs << num << " " << driver << std::endl;if (next) next->Save(ofs);}ПриложениеБМодульbustest.cpp#include #include #include // дляРусскоготекста#include "BusDefs.h"using namespace std;int main(){SetConsoleCP(1251);// для Русского текстаSetConsoleOutputCP(1251);//setlocale(LC_ALL, "rus");Routes rs;cout << "Добавлениемаршрутов (T1): "<addBusLast(new Bus("к100пи", "ПетровИван"));rs[0]->addBusLast(new Bus("к110ип", "ИвановПетр"));rs[0]->addBusLast(new Bus("к120пп", "ПетровПетр"));rs[0]->Show();cout << "Добавление автобусов в начало (T3): " << endl;rs[1]->addBusFirst(new Bus("т200тк", "ТойодаКиичиро"));rs[1]->addBusFirst(new Bus("х210хс", "ХондаСоичиро"));rs[1]->Show();cout << "Добавление автобусов в микс (T4): " << endl;rs[2]->addBusFirst(new Bus("ф300фг", "ФордГенри"));rs[2]->addBusLast(new Bus("р310лу", "РеноЛуи"));rs[2]->addBus("ф300фг", new Bus("р320ма", "РеноМарсель"));rs[2]->addBus("р310лу", new Bus("р330фе", "РеноФернандо"));rs[2]->Show();cout << "Автобусы по маршрутам (T5): " << endl;rs.Show();cout << "Всегоавтобусов " << rs.getCount() << endl;string busNum = "р320ма";cout << "Поискавтобусанамаршруте (T6): " << endl;Bus *bus;for (size_ti = 0; i < rs.size(); i++){ bus = rs[i]->getBus(busNum);cout << "Намаршруте " << rs[i]->getNum() << " автобус " << busNum <<(!bus ? " отсутствует" : " водитель " + bus->getDriver()) << endl;}cout << "Поиск автобуса по всей сети (T7): " << endl;bus = rs.getBus(busNum);cout << "Автобус " << busNum << " в транспортной сети" <<(!bus ? " отсутствует" : " водитель " + bus->getDriver()) << endl;cout << "Поиск автобуса по всей сети (T8): " << endl;bus = rs.getBus("т223тк");cout << "Автобус " << busNum << " в транспортной сети" <<(!bus ? " отсутствует" : " водитель " + bus->getDriver()) << endl;cout << "Сохранение сети маршрутов (T9): " << endl;rs.Save("routes.dat");cout << "Удаления автобуса на маршруте (T10): " << endl;rs[0]->remBus(busNum);rs[1]->remBus("т222тк");// Несуществующийrs[1]->remBus("т200тк");// Несуществующийrs[2]->remBus(busNum);rs.Show();cout << "Загрузка сети маршрутов (T11): " << endl;rs.Load("routes.dat");rs.Show();std::cout << "Все сделано!"<#include "BusDefs.h"namespace busrun {using namespace System;using namespace System::ComponentModel;using namespace System::Collections;using namespace System::Windows::Forms;using namespace System::Data;using namespace System::Drawing;Routes rs;// Маршруты///

/// Summary for MainForm/// public ref class MainForm : public System::Windows::Forms::Form{public:MainForm(void){InitializeComponent();////TODO: Add the constructor code here//}protected:/// /// Clean up any resources being used./// ~MainForm(){if (components){delete components;}}public: System::Windows::Forms::ListBox^ lbRoute;protected:public: System::Windows::Forms::ListBox^ lbBus;protected:private: System::Windows::Forms::Button^ btnLoad;private: System::Windows::Forms::Button^ btnSave;private: System::Windows::Forms::Button^ btnAddRoute;private: System::Windows::Forms::Button^ btnAddBus;private: System::Windows::Forms::TextBox^ tbRoute;private: System::Windows::Forms::TextBox^ tbBus;private: System::Windows::Forms::TextBox^ tbDriver;protected:protected:private: System::ComponentModel::IContainer^ components;private:/// /// Required designer variable./// #pragma region Windows Form Designer generated code/// /// Required method for Designer support - do not modify/// the contents of this method with the code editor./// void InitializeComponent(void){this->lbRoute = (gcnew System::Windows::Forms::ListBox());this->lbBus = (gcnew System::Windows::Forms::ListBox());this->btnLoad = (gcnew System::Windows::Forms::Button());this->btnSave = (gcnew System::Windows::Forms::Button());this->btnAddRoute = (gcnew System::Windows::Forms::Button());this->btnAddBus = (gcnew System::Windows::Forms::Button());this->tbRoute = (gcnew System::Windows::Forms::TextBox());this->tbBus = (gcnew System::Windows::Forms::TextBox());this->tbDriver = (gcnew System::Windows::Forms::TextBox());this->SuspendLayout();// // lbRoute// this->lbRoute->FormattingEnabled = true;this->lbRoute->Location = System::Drawing::Point(1, 76);this->lbRoute->Name = L"lbRoute";this->lbRoute->Size = System::Drawing::Size(241, 199);this->lbRoute->TabIndex = 1;this->lbRoute->SelectedIndexChanged += gcnew System::EventHandler(this, &MainForm::onRouteChange);// // lbBus// this->lbBus->FormattingEnabled = true;this->lbBus->Location = System::Drawing::Point(248, 76);this->lbBus->Name = L"lbBus";this->lbBus->Size = System::Drawing::Size(272, 199);this->lbBus->TabIndex = 2;// // btnLoad// this->btnLoad->Location = System::Drawing::Point(12, 12);this->btnLoad->Name = L"btnLoad";this->btnLoad->Size = System::Drawing::Size(75, 23);this->btnLoad->TabIndex = 3;this->btnLoad->Text = L"Загрузить";this->btnLoad->UseVisualStyleBackColor = true;this->btnLoad->Click += gcnew System::EventHandler(this, &MainForm::btnLoad_Click);// // btnSave// this->btnSave->Location = System::Drawing::Point(12, 41);this->btnSave->Name = L"btnSave";this->btnSave->Size = System::Drawing::Size(75, 23);this->btnSave->TabIndex = 4;this->btnSave->Text = L"Сохранить";this->btnSave->UseVisualStyleBackColor = true;this->btnSave->Click += gcnew System::EventHandler(this, &MainForm::btnSave_Click);// // btnAddRoute// this->btnAddRoute->Location = System::Drawing::Point(93, 12);this->btnAddRoute->Name = L"btnAddRoute";this->btnAddRoute->Size = System::Drawing::Size(75, 49);this->btnAddRoute->TabIndex = 5;this->btnAddRoute->Text = L"Добавитьмаршрут";this->btnAddRoute->UseVisualStyleBackColor = true;this->btnAddRoute->Click += gcnew System::EventHandler(this, &MainForm::btnAddRoute_Click);// // btnAddBus// this->btnAddBus->Location = System::Drawing::Point(257, 12);this->btnAddBus->Name = L"btnAddBus";this->btnAddBus->Size = System::Drawing::Size(75, 49);this->btnAddBus->TabIndex = 6;this->btnAddBus->Text = L"Добавитьавтобус";this->btnAddBus->UseVisualStyleBackColor = true;this->btnAddBus->Click += gcnew System::EventHandler(this, &MainForm::btnAddBus_Click);// // tbRoute// this->tbRoute->Location = System::Drawing::Point(174, 12);this->tbRoute->Name = L"tbRoute";this->tbRoute->Size = System::Drawing::Size(70, 20);this->tbRoute->TabIndex = 7;// // tbBus// this->tbBus->Location = System::Drawing::Point(339, 12);this->tbBus->Name = L"tbBus";this->tbBus->Size = System::Drawing::Size(162, 20);this->tbBus->TabIndex = 8;// // tbDriver// this->tbDriver->Location = System::Drawing::Point(339, 41);this->tbDriver->Name = L"tbDriver";this->tbDriver->Size = System::Drawing::Size(162, 20);this->tbDriver->TabIndex = 9;// // MainForm// this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;this->ClientSize = System::Drawing::Size(528, 287);this->Controls->Add(this->tbDriver);this->Controls->Add(this->tbBus);this->Controls->Add(this->tbRoute);this->Controls->Add(this->btnAddBus);this->Controls->Add(this->btnAddRoute);this->Controls->Add(this->btnSave);this->Controls->Add(this->btnLoad);this->Controls->Add(this->lbBus);this->Controls->Add(this->lbRoute);this->Name = L"MainForm";this->Text = L"Городскаяавтобуснаясеть";this->ResumeLayout(false);this->PerformLayout();}#pragma endregionprivate: System::Void btnLoad_Click(System::Object^ sender, System::EventArgs^ e) {rs.Load("routes.dat");for (size_ti = 0; i < rs.size(); i++) {lbRoute->Items->Add(gcnew String(rs[i]->getNum().c_str()));}//String^ str2 = gcnew String(str.c_str());}private: System::Void btnSave_Click(System::Object^ sender, System::EventArgs^ e) {rs.Save("routes.dat");}private: System::Void btnAddRoute_Click(System::Object^ sender, System::EventArgs^ e) {using namespace Runtime::InteropServices;const char* chars =(const char*)(Marshal::StringToHGlobalAnsi(tbRoute->Text)).ToPointer();std::string os = chars;Marshal::FreeHGlobal(IntPtr((void*)chars));rs.addRoute(new Route(os));lbRoute->Items->Add(tbRoute->Text);}private: System::Void btnAddBus_Click(System::Object^ sender, System::EventArgs^ e) {if (lbRoute->SelectedIndex < 0) return;using namespace Runtime::InteropServices;constchar* chars =(const char*)(Marshal::StringToHGlobalAnsi(tbBus->Text)).ToPointer();std::string osbus = chars;Marshal::FreeHGlobal(IntPtr((void*)chars));chars =(const char*)(Marshal::StringToHGlobalAnsi(tbDriver->Text)).ToPointer();std::string osdrv = chars;Marshal::FreeHGlobal(IntPtr((void*)chars));rs[lbRoute->SelectedIndex]->addBusLast(new Bus(osbus, osdrv));lbBus->Items->Add(tbBus->Text + " " + tbDriver->Text);}private: System::Void onRouteChange(System::Object^ sender, System::EventArgs^ e) {lbBus->Items->Clear();rs[lbRoute->SelectedIndex]->Show(lbBus);}};}Модуль MainForm.cpp#include "MainForm.h"#include #include "BusDefs.h"using namespace busrun;int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){Application::EnableVisualStyles();Application::SetCompatibleTextRenderingDefault(false);Application::Run(gcnewMainForm);return 0;}

1. Что такое логистика простыми словами и ее значение в бизнесе. URL: https://logistics.ru/academy/chto-takoe-logistika-prostymi-slovami-i-ee-znachenie-v-biznese#_Toc12816146
2. Мартынова Ю. А. Анализ опыта проектирования рациональных маршрутных сетей городского пассажирского транспорта. // Интернет-журнал «НАУКОВЕДЕНИЕ», Выпуск 2, март – апрель 2014. URL: https://naukovedenie.ru/PDF/65TVN214.pdf
3. Виды автобусных перевозок и организация движения на маршрутах. URL: https://stroy-technics.ru/article/vidy-avtobusnykh-perevozok-i-organizatsiya-dvizheniya-na-marshrutakh
4. ГОСТ Р 58287-2018. Национальный стандарт Российской Федерации. Отличительные знаки и информационное обеспечение транспортных средств пассажирского наземного транспорта, остановочных пунктов и автостанций. Общие технические требования. URL: https://protect.gost.ru/document.aspx?control=7&id=232032
5. ГОСТ Р 50577-2018 Знаки государственные регистрационные транспортных средств. URL: https://protect.gost.ru/document1.aspx?control=31&baseC=6&page=28&month=7&year=2016&search=%D1%80&id=231380
6. ООП. URL: https://blog.skillfactory.ru/glossary/oop-obektno-orientirovannoe-programmirovanie/
7. Как ООП помогает разработчикам писать код быстрее и проще. URL: https://practicum.yandex.ru/blog/obektno-orientirovannoe-programmirovanie/
8. Коротко об истории объектно-ориентированного программирования. URL: https://habr.com/ru/post/107940/
9. Раздел 10. «Эпизодическое» объектно-ориентированное программирование. URL: http://ermak.cs.nstu.ru/cprog/html/101.htm
10. Что такое объекты и классы: 1‑я часть гайда по ООП. URL: https://skillbox.ru/media/code/oop_chast_1_chto_takoe_klassy_i_obekty/?ysclid=lfvf0552x4622996203
11. Особенности моделирования предметной области с помощью ООП. URL: https://habr.com/ru/post/249165/
12. Объектно-ориентированное программирование. URL: https://prog-cpp.ru/oop/
13. Полиморфизм. URL: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/object-oriented/polymorphism
14. Проектирование классов и наследование. URL: http://www.programmer-lib.ru/cstandart_page.php?id=15
15. Построение иерархии классов и проектирование приложения. URL: https://foxford.ru/wiki/informatika/postroenie-ierarhii-klassov-i-proektirovanie-prilozheniya
16. Взаимосвязи схемы классов UML, объясненные с примерами. URL: https://creately.com/blog/ru/uncategorized-ru/%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D1%81%D0%B2%D1%8F%D0%B7%D0%B8-%D1%81%D1%85%D0%B5%D0%BC%D1%8B-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2-uml-%D0%BE%D0%B1%D1%8A%D1%8F%D1%81%D0%BD%D0%B5%D0%BD%D0%BD/#ClassDiagram
17. Класс vector. URL: https://learn.microsoft.com/ru-ru/cpp/standard-library/vector-class?view=msvc-170
18. Односвязный линейный список. URL: https://prog-cpp.ru/data-ols/

Вопрос-ответ:

Какая задача решается этой программой?

Эта программа предназначена для управления автобусной сетью города. Она поможет организовать передвижение автобусов по маршрутам, отслеживать количество автобусов на каждом маршруте и получать информацию о конкретном автобусе по его номеру.

Какие преимущества имеет объектно-ориентированный подход в разработке программы?

Объектно-ориентированный подход позволяет разбить программу на небольшие модули (классы), каждый из которых отвечает за определенную функциональность. Это упрощает понимание и поддержку кода, повышает его гибкость и переиспользуемость.

Как проектировались классы программы?

Классы программы были спроектированы с учетом разных аспектов функциональности: автобуса, маршрута, сети автобусов в городе. Каждый класс имеет свои поля и методы, которые отвечают за выполнение определенных операций и хранение данных.

Как тестировались созданные классы?

Созданные классы были протестированы, чтобы убедиться в их работоспособности и соответствии заявленным требованиям. Для этого были написаны специальные тестовые случаи, которые проверяли разные сценарии использования классов.

Что нужно для установки и запуска готового приложения?

Для установки и запуска готового приложения требуется компьютер с операционной системой, совместимой с программой, и наличие всех необходимых зависимостей. Подробные инструкции по установке и запуску приложения можно найти в документации или руководстве пользователя.

Какие задачи можно решить с помощью данной программы?

Данная программа позволяет решить задачи управления автобусной сетью города, включая получение информации о маршрутах и автобусах, добавление новых автобусов, изменение и удаление информации о существующих автобусах.

Какой подход используется в разработке программы?

В разработке программы используется объектно-ориентированный подход, который позволяет организовать код в виде классов, объединяющих данные и операции над ними.

Что включает проектирование классов программы?

Проектирование классов программы включает определение основных классов, их свойств и методов, а также взаимодействие между классами для решения задачи управления автобусной сетью города.