МОДЕЛИРОВАНИЕ И РАЗРАБОТКА ПРОГРАММЫ НА ОСНОВЕ ПРИНЦИПОВ ООП (Прикладной программный продукт «Производство мебели. Торговля и склад, управление индивидуальными заказами и оптовыми поставками»)

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: C++
  • 52 52 страницы
  • 14 + 14 источников
  • Добавлена 12.03.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Содержание
ВВЕДЕНИЕ 4
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 6
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ 8
2.1 Назначение разработки 8
2.2 Требования к программе 8
2.3 Стадии и этапы разработки 9
3 МОДЕЛИРОВАНИЕ И РАЗРАБОТКА ПРОГРАММЫ НА ОСНОВЕ ПРИНЦИПОВ ООП 11
4 ОПИСАНИЕ ПРОГРАММЫ 16
4.1 Функциональное назначение 16
4.2 Описание логической структуры 17
4.3 Входные и выходные данные 18
5 ИНСТРУКЦИЯ ПО ЭКСПЛУАТАЦИИ ПРОГРАММЫ 20
5.1 Назначение программы 20
5.2 Выполнение программы 20
5.3 Описание контрольного примера 21
ЗАКЛЮЧЕНИЕ 24
Список использованной литературы 25
ПРИЛОЖЕНИЯ 27

Фрагмент для ознакомления

((DataGridView^)sender)->IsCurrentCellInEditMode) return; // Не редактируем String ^serr = "Неверные данные";try {DataGridViewCell^ p = ((DataGridView^)sender)->Rows[e->RowIndex]->Cells[e->ColumnIndex]; if (p->ValueType->ToString() == "System.Int32") { serr = "Значение должно быть целым числом";Int32 x = Convert::ToInt32(e->FormattedValue); } else if (p->ValueType->ToString() == "System.Double") { serr = "Значение должно быть вещественным числом - проверьте разделитель";Double x = Convert::ToDouble(e->FormattedValue); } else if (p->ValueType->ToString() == "System.DateTime") { serr = "Значение должно быть датой";DateTime x = Convert::ToDateTime(e->FormattedValue); } } catch (Exception^ ex) { MessageBox::Show(serr); e->Cancel = true; } } private: System::Void MainForm_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) {dbMain::db->Save(); } private: System::Void btnAddOrder_Click(System::Object^ sender, System::EventArgs^ e) { if (dbMain::db->getClientSource()->Count < 1 || dbMain::db->getFurnSource()->Count < 1){MessageBox::Show("Заполните список изделий и заказчиков");return; }dbMain::db->addOrder(gcnew Order(0, 0, DateTime::Now, 1, 1000)); gOrder->DataSource = nullptr; // Обновить таблицу gOrder->DataSource = dbMain::db->getOrderSource(); } private: System::Void btnDelOrder_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->getOrderSource()->RemoveAt(gOrder->SelectedCells[0]->RowIndex); gOrder->DataSource = nullptr; // Обновить таблицу gOrder->DataSource = dbMain::db->getOrderSource(); } private: System::Void btnAddStore_Click(System::Object^ sender, System::EventArgs^ e) { if (dbMain::db->getFurnSource()->Count < 1){MessageBox::Show("Заполните список изделий");return; }dbMain::db->addStore(gcnew Store(0, 1)); gStorage->DataSource = nullptr; // Обновить таблицу gStorage->DataSource = dbMain::db->getStoreSource(); } private: System::Void btnDelStore_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->getStoreSource()->RemoveAt(gStorage->SelectedCells[0]->RowIndex); gStorage->DataSource = nullptr; // Обновить таблицу gStorage->DataSource = dbMain::db->getStoreSource(); } private: System::Void btnAddFurn_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->addFurn(gcnew Furn("Изделие", 400, 1000, 2000)); gFurn->DataSource = nullptr; // Обновить таблицу gFurn->DataSource = dbMain::db->getFurnSource(); } private: System::Void btnDelFurn_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->getFurnSource()->RemoveAt(gFurn->SelectedCells[0]->RowIndex); gFurn->DataSource = nullptr; // Обновить таблицу gFurn->DataSource = dbMain::db->getFurnSource(); } private: System::Void btnAddClient_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->addClient(gcnew Client("Новый", "")); gClient->DataSource = nullptr; // Обновить таблицу gClient->DataSource = dbMain::db->getClientSource(); } private: System::Void btnDelClient_Click(System::Object^ sender, System::EventArgs^ e) {dbMain::db->getClientSource()->RemoveAt(gClient->SelectedCells[0]->RowIndex); gClient->DataSource = nullptr; // Обновить таблицу gClient->DataSource = dbMain::db->getClientSource(); }};}Описание интерфейса модуля данных iStore.h#pragma once#include "Furn.h"#include "Client.h"interface class iStore{public: Client^ getClient(int idx); Furn^ getFurn(int idx); Int32 getClientObj(Client^ obj); Int32 getFurnObj(Furn^ obj);};ЗаголовокмодуляданныхdbMain.h#pragma once#include "Client.h"#include "Furn.h"#include "Store.h"#include "Order.h"#include "iStore.h"using namespace System;using namespace System::IO;using namespace System::Collections::Generic;using namespace System::Diagnostics;ref class dbMain : public iStore{ private: String^ dbName; List^ clients; List^ furns; List^ storage; List^ orders; public: static dbMain^ db;dbMain(String^ _dbName) { // Инициализация dbName = _dbName; clients = gcnew List(); furns = gcnew List(); storage = gcnew List(); orders = gcnew List(); }; void addClient(Client^ c); void addFurn(Furn^ c); void addStore(Store^ c); voidaddOrder(Order^ c); // Получние значения по номруvirtual Client^ getClient(int idx) { return (idx>=0 && idxCount)?clients[idx]:nullptr; } virtual Furn^ getFurn(int idx) { return furns[idx]; } Order^ getOrder(int idx) { return orders[idx]; } // Получние значения по номру virtual Int32 getClientObj(Client^ obj) { return clients->FindIndex(gcnew Predicate(obj,&Client::Equals)); } virtual Int32 getFurnObj(Furn^ obj) { return furns->FindIndex(gcnew Predicate(obj, &Furn::Equals)); ; } // Получние источника ьаблицы List^ getClientSource() { return clients; } List^ getFurnSource() { return furns; } List^ getStoreSource() { return storage; } List^ getOrderSource() { return orders; } voidLoad(); // Загрузка/Сохранение данныхvoidSave();};Модуль данных dbMain.cpp#include "dbMain.h"//---------------------------------------- ДОБАВЛЕНИЕ заказчикаvoid dbMain::addClient(Client^ c){ clients->Add(c);}//---------------------------------------- ДОБАВЛЕНИЕ изделияvoid dbMain::addFurn(Furn^ c){furns->Add(c);}//---------------------------------------- ДОБАВЛЕНИЕ на складvoid dbMain::addStore(Store^ c){ storage->Add(c); c->SetDB(this);}//--------------------------------------------- ДОБАВЛЕНИЕ заказаvoid dbMain::addOrder(Order^ c){ orders->Add(c); c->SetDB(this);}//---------------------------------------------- ЗАГРУЗКАvoid dbMain::Load(){ StreamReader^ sr; try { sr = File::OpenText(dbName);} // Попыта открыть БД catch (Exception^ e) { Console::WriteLine("IO Error {0}", e); return; } int cnt = Convert::ToInt32(sr->ReadLine()); // Заказчики for (int i = 0; i < cnt; i++)addClient(gcnew Client(sr)); cnt = Convert::ToInt32(sr->ReadLine()); // Изделия for (int i = 0; i < cnt; i++)addFurn(gcnew Furn(sr)); cnt = Convert::ToInt32(sr->ReadLine()); // Склады for (int i = 0; i < cnt; i++)addStore(gcnew Store(sr)); cnt = Convert::ToInt32(sr->ReadLine()); // Заказы for (int i = 0; i < cnt; i++)addOrder(gcnew Order(sr)); sr->Close();}//---------------------------------------------- СОХРАНЕНИЕvoid dbMain::Save(){ StreamWriter^ sw; try { sw = gcnew StreamWriter(dbName); } catch (Exception^ e) { Debug::WriteLine("IO Error {0}", e); return; } sw->WriteLine(clients->Count); // Заказчики for each (Client^ p in clients) p->Save(sw); sw->WriteLine(furns->Count); // Изделия for each (Furn^ p in furns) p->Save(sw); sw->WriteLine(orders->Count); // Склады for each (Store^ p in storage) p->Save(sw); sw->WriteLine(orders->Count); // Заказы for each (Order^ p in orders) p->Save(sw); sw->Close();}//--------------------------------------------------------------Заголовок класса Client.h#pragma onceusing namespace System;using namespace System::IO;ref class Client{ private: String^ FIO; String^ phone; String^ addr; public: bool Equals(Client^ p) { return p == this; } // Переопределениесравнения property String^ pFIO { String^ get() { return FIO; }; void set(String^ val) { FIO = val; } }; property String^ Phone { String^ get() { return phone; }; void set(String^ val) { phone = val; } }; property String^ Address { String^ get() { return addr; }; void set(String^ val) { addr = val; } }; property Client^ thisClient { Client^ get() { return this; }; }Client(String^ _FIO, String^ _phone) { FIO = _FIO; phone = _phone; }Client(StreamReader^ sr); void Save(StreamWriter^ sw);};Класс Client.cpp#include "Client.h"//--------------------------------------------- гюцпсгйюйкхемрюClient::Client(StreamReader^ sr){ FIO=sr->ReadLine(); phone=sr->ReadLine(); addr = sr->ReadLine();}//--------------------------------------------- янупюмемхеvoid Client::Save(StreamWriter^ sw){ sw->WriteLine(FIO); sw->WriteLine(phone);sw->WriteLine(addr);}//--------------------------------------------------------------Заголовок класса Furn.h#pragma onceusing namespace System;using namespace System::IO;ref class Furn{private: String^ capt; Int32 length,width,height;public:// Переопределениесравнения bool Equals(Furn^ p) { return p == this; } property String^ Caption { String^ get() { return capt; }; void set(String^ val) { capt = val; } }; property Int32 Length { Int32 get() { return length; }; void set(Int32 val) { length = val; } }; property Int32 Width { Int32 get() { return width; }; void set(Int32 val) { width = val; } }; property Int32 Height { Int32 get() { return height; }; void set(Int32 val) { height = val; } }; property Furn^ thisFurn { Furn^ get() { return this; }; }Furn(String^ _capt, Int32 _length, Int32 _width, Int32 _height) { capt = _capt; length = _length; width = _width; height = _height; }Furn(StreamReader^ sr); void Save(StreamWriter^ sw);};Класс Furn.cpp#include "Furn.h"//--------------------------------------------- ЗАГРУЗКАFurn::Furn(StreamReader^ sr){ capt = sr->ReadLine(); length = Convert::ToInt32(sr->ReadLine()); width = Convert::ToInt32(sr->ReadLine()); height = Convert::ToInt32(sr->ReadLine());}//--------------------------------------------- СОХРАНЕНИЕvoid Furn::Save(StreamWriter^ sw){ sw->WriteLine(capt); sw->WriteLine(length); sw->WriteLine(width); sw->WriteLine(height);}//--------------------------------------------------------------Заголовок класса Store.h#pragma once#include "iStore.h"using namespace System;using namespace System::IO;ref class Store{private: Int32 nFurn; Int32 count; static iStore^ dbMain=nullptr;public: property Int32 Count { Int32 get() { return count; }; void set(Int32 val) { count = val; } }; property Furn^ objFurn { Furn^ get() { return dbMain->getFurn(nFurn); }; void set(Furn^ val) { nFurn = (dbMain != nullptr) ? dbMain->getFurnObj(val) : 0; } }; void SetDB(iStore^ _dbMain) { dbMain = _dbMain; }Store(Int32 _nFurn, Int32 _count) { nFurn = _nFurn; count = _count; }Store(StreamReader^ sr);void Save(StreamWriter^ sw);};Класс Store.cpp#include "Store.h"//--------------------------------------------- ЗАГРУЗКАStore::Store(StreamReader^ sr){ nFurn = Convert::ToInt32(sr->ReadLine()); count = Convert::ToInt32(sr->ReadLine());}//--------------------------------------------- СОХРАНЕНИЕvoid Store::Save(StreamWriter^ sw){ sw->WriteLine(nFurn); sw->WriteLine(count);}//--------------------------------------------------------------Заголовок класса Order.h#pragma once#include "iStore.h"using namespace System;using namespace System::IO;ref class Order{private: Int32 nClient; Int32 nFurn; DateTime date; Int32 count;Double price; static iStore^ dbMain=nullptr;public: property DateTime Date { DateTime get() { return date; }; void set(DateTime val) { date = val; } }; property Int32 Count { Int32 get() { return count; }; void set(Int32 val) { count = val; } }; property Double Price { Double get() { return price; }; void set(Double val) { price = val; } }; property Client^ objClient { Client^ get() { return dbMain->getClient(nClient); }; void set(Client^ val) { nClient = (dbMain != nullptr) ? dbMain->getClientObj(val) : 0; } }; property Furn^ objFurn { Furn^ get() { return dbMain->getFurn(nFurn); }; void set(Furn^ val) { nFurn = (dbMain != nullptr) ? dbMain->getFurnObj(val) : 0; } }; void SetDB(iStore^ _dbMain) { dbMain = _dbMain; }Order(Int32 _nClient, Int32 _nFurn, DateTime _date, Int32 _count, Double _price) { nClient = _nClient; nFurn = _nFurn; date = _date; count = _count; price = _price; }Order(StreamReader^ sr); void Save(StreamWriter^ sw);};КлассOrder.cpp#include "Order.h"//--------------------------------------------- ЗАГРУЗКАOrder::Order(StreamReader^ sr){ nClient = Convert::ToInt32(sr->ReadLine()); nFurn = Convert::ToInt32(sr->ReadLine()); date = Convert::ToDateTime(sr->ReadLine()); count = Convert::ToInt32(sr->ReadLine()); price = Convert::ToDouble(sr->ReadLine());}//--------------------------------------------- СОХРАНЕНИЕvoid Order::Save(StreamWriter^ sw){ sw->WriteLine(nClient); sw->WriteLine(nFurn); sw->WriteLine(date); sw->WriteLine(count);sw->WriteLine(price);}//--------------------------------------------------------------

Список использованной литературы

1. Язык программирования C++. [Электронный ресурс] URL: https://metanit.com/cpp/tutorial/1.1.php
2. Возвращение к C++ — современный C++. [Электронный ресурс]. URL: https://learn.microsoft.com/ru-ru/cpp/cpp/welcome-back-to-cpp-modern-cpp?view=msvc-170
3. Национальная рабочая группа по стандартизации С++. [Электронный ресурс]. URL: https://stdcpp.ru/
4. Тема 2. Общая характеристика проектирования ИС. [Электронный ресурс]. URL: https://samara.mgpu.ru/~dzhadzha/dis/15/130.html
5. Особенности работы CLR в .NET Framework [Электронный ресурс]. URL: https://habr.com/ru/post/90426
6. Объектно-ориентированное программирование. [Электронный ресурс] URL: https://prog-cpp.ru/oop/
7. Как ООП помогает разработчикам писать код быстрее и проще. [Электронный ресурс] URL: https://practicum.yandex.ru/blog/obektno-orientirovannoe-programmirovanie/
8. Особенности моделирования предметной области с помощью ООП. [Электронный ресурс] URL: https://habr.com/ru/post/249165/
9. ref class и ref struct (C++/CLI и C++/CX). [Электронный ресурс]. URL: https://learn.microsoft.com/ru-ru/cpp/extensions/classes-and-structs-cpp-component-extensions?view=msvc-170
10. Построение иерархии классов и проектирование приложения. [Электронный ресурс] URL: https://foxford.ru/wiki/informatika/postroenie-ierarhii-klassov-i-proektirovanie-prilozheniya
11. Полиморфизм. [Электронный ресурс] URL: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/object-oriented/polymorphism
12. interface class (C++/CLI и C++/CX). [Электронный ресурс] URL: https://learn.microsoft.com/ru-ru/cpp/extensions/interface-class-cpp-component-extensions?view=msvc-170
13. Знакомство с Visual Studio. [Электронный ресурс] URL: https://learn.microsoft.com/ru-ru/visualstudio/get-started/visual-studio-ide?view=vs-2022
14. Пошаговое руководство. Компиляция программы C++/CLI, предназначенной для среды CLR в Visual Studio. [Электронный ресурс]. URL: https://learn.microsoft.com/ru-ru/cpp/dotnet/walkthrough-compiling-a-cpp-program-that-targets-the-clr-in-visual-studio?view=msvc-170