Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Добавление транспортного средстваСодержание книги
Поиск на нашем сайте Функция Main::AddVehicle() функция реализует добавление нового транспортного средства. Блок-схема изображена на рисунке 4.2.
Рис. 4.2. – Алгоритм добавления транспортного средства
Удаление транспортного средства Функция Main::DeleteVehicle() удаляет транспортное средство по указанному индексу. Блок-схема изображена на рисунке 4.3.
Рис. 4.3. – Алгоритм удаления транспортного средства Вывод значений специфических характеристик
Транспортные средства с наибольшей характеристикой Функция Main::outputMaxSpecial() выводит на экран те транспортные средства, у которых значение специфической характеристики наибольшее среди своих классов. Блок-схема изображена на рисунке 4.4.1.
Рис. 4.4.1 – Алгоритм вывода транспортных средств с наибольшей характеристикой. Транспортные средства с наименьшей характеристикой Функция Main::outputMinSpecial() выводит на экран те транспортные средства, у которых значение специфической характеристики наименьшее среди своих классов. Блок-схема изображена на рисунке 4.4.2.
Рис. 4.4.2 – Алгоритм вывода транспортных средств с наименьшей характеристикой. Транспортные средства с наибольшей ценой Функция Main::outputMaxPrice() выводит на экран то транспортное средство, у которого наибольшая стоимость. Блок-схема изображена на рисунке 4.5.
Рис. 4.5. – Алгоритм вывода транспортного средства с максимальной ценой Транспортные средства с наименьшей ценой Функция Main::outputMinPrice() выводит на экран то транспортное средство, у которого наименьшая стоимость. Блок-схема изображена на рисунке 4.6.
Рис. 4.6. – Алгоритм вывода транспортного средства с минимальной ценой Транспортные средства с наибольшей скоростью Функция Main::outputMaxSpeed() выводит на экран то транспортное средство, у которого наибольшая скорость. Блок-схема изображена на рисунке 4.7.
Рис. 4.7. – Алгоритм вывода транспортного средства с максимальной скоростью Транспортные средства с наименьшей скоростью Функция Main::outputMinSpeed() выводит на экран то транспортное средство, у которого наибольшая скорость. Блок-схема изображена на рисунке 4.8.
Рис. 4.8. – Алгоритм вывода транспортного средства с минимальной скоростью Выводы: в результате выполнения этапа описания были пошагово разобраны и проанализированы все алгоритмы функций главной программы, а именно алгоритмы функций добавления и удаления транспортного средства, а так же вывод транспортного средства на экран отвечающего определенной характеристике.
ТЕСТИРОВАНИЕ Тестирование взаимодействия классов
План тестирование 2-го этапа 1. Написание кода 2. Тестирование 3. Описание теста 4. Анализ полученных результатов 5. Результаты тестирования 6. Вывод 5.1.1 Тесты
Тест_1
Код:
Описание: В данном тесте я тестирую взаимодействие классов Main и Car, а именно добавляет машину в гараж.
Результат:
Ожидалось – 1 Получили – 1 Вывод: тест пройден, программа работает корректно.
Тест_2
Код:
Описание: В данном тесте я тестирую взаимодействие классов Main и Bicycle, а именно добавляет мотоцикл в гараж. Результат:
Ожидалось – 1 Получили – 1 Вывод: тест пройден, программа работает корректно.
Тест_3
Код:
Описание: В данном тесте я тестирую взаимодействие классов Main и Lorry, а именно - добавляет грузовик в гараж. Результат:
Ожидалось – 1 Получили – 1 Вывод: Тест пройден, программа работает корректно.
Тестирование взаимодействия классов в составе динамической Коллекции
План тестирование 3-го этапа 1. Написание кода 2. Тестирование 3. Описание теста 4. Анализ полученных результатов 5. Результаты тестирования 6. Вывод
Тест_1
Код:
Описание: В данном тесте я тестирую взаимодействие классов Garage ( динам. коллекция ) и Main, а именно - показываю содержимое гаража. Результат:
Ожидалось – 1 Получили – 1 Вывод: тест пройден, программа работает корректно. 5.3 Тестирование всех задач заданных по варианту
Тест_1
Код:
Описание: В данном тесте я проверяю работу выхода с программы. Результат:
Ожидалось – 0 Получили – 0 Вывод: тест пройден, программа работает корректно. Тест_2
Код:
Описание: В данном тесте я проверяю на корректность вывод макс. и мин. цены транспорта. Результат:
Ожидалось – 6 Получили – 6 Вывод: тест пройден, программа работает корректно. Тест_3
Код:
Описание: В данном тесте я проверяю на корректность вывод макс. и мин. скорости транспорта.
Результат:
Ожидалось – 7 Получили – 7 Вывод: тест пройден, программа работает корректно.
Тест_4
Код:
Описание: В данном тесте я проверяю программу на удаление транспорта. Результат:
Ожидалось – 2 Получили – 2 Вывод: тест пройден, программа работает корректно.
Тест_5
Код:
Описание: В данном тесте я проверяю программу на возможность добавления характеристик транспорту. Результат:
Ожидалось – 1 Получили – 1 Вывод: тест пройден, программа работает корректно.
Тест_6
Код:
Описание: В данном тесте я проверяю программу на возможность записи в файл. Результат:
Ожидалось – 0 Получили – 0 Вывод: тест пройден, программа работает корректно.
Usability тестирование
1. Цель - Проверить интерфейс на удобство пользования. 2. Время и место - Время – не имеет значения, место – в домашних условиях. 3. Продолжительность - Час 4. Необходимое оборудование и софт - Необходимо только наличие ПК, Visual Studio 2010-2013 и самой программы курсового 5. Дополнительные настройки оборудования и софта (начальные экраны, время реакции) - Отсутствуют 6. Ответственный за проведение тестирования - Тестировщик Карпинский С.И. 7. Количество и состав участников и где их взять - 3 человека, между собой не знакомы, добровольцы с ВУЗа 8. Количество и состав заданий - 5 заданий: · 1 задание – добавить в гараж транспорт (любой) · 2 задание – удалить из гаража транспорт (любой) · 3 задание – показать максимальную скорость (любой транспорт) · 4 задание – показать гараж · 5 задание – показать минимальные характеристики
9. Возможность использования вспомогательных материалов для выполнения заданий - Запрещено
10. Признаки успешного и ошибочного выполнения заданий - Время, затраченное на выполнения 1 задания, если t>1 мин., то задание считается проваленным, иначе – выполненным. - Время, затраченное на выполнения 2 задания, если t>20 сек., то задание считается проваленным, иначе – выполненным. - Время, затраченное на выполнения 3 задания, если t>20 сек., то задание считается проваленным, иначе – выполненным. - Время, затраченное на выполнения 4 задания, если t>20 сек., то задание считается проваленным, иначе – выполненным. - Время, затраченное на выполнения 5 задания, если t>20 сек., то задание считается проваленным, иначе – выполненным. Если среднее время, затраченное на выполнение 5-и заданий, будет меньше 15 сек. то считается, что тест пройден. 11. Степень допустимого участия (подсказок) со стороны проводящего тестирование - Одна или две подсказки, не более 12. Анализ полученных данных будем проводить по таблице результатов (рис.5.1).
Проведение тестирования
Рис. 5.1 Таблица результатов Usability тестирование
Вывод: Как мы видим, в 2-х случаях из 3-х время, затраченное на выполнение всех заданий, лежит в приделах нормы, а это значит, что интерфейс сделан удобно для пользования.
ВЫВОД
В ходе курсового проекта была разработана программа на языке программирования С++, в котором реализуется динамический полиморфизм на примере роботы с транспортными средствами. В программе реализовано: - массив из объектов абстрактного класса; - добавление и удаление транспортного средства; - минимальное и максимальное значение специфического поля; - максимальную и минимальную скорость передвижения; - максимальную и минимальную цену транспортного средства;
Был создан проект автоматического тестирования UnitTest1, который тестирует программу на корректность работы функций. При тестировании ошибок не обнаружено.
ПРИЛОЖЕНИЕ А. ЛИСТИНГИ ИСХОДНЫХ КОДОВ Bicycle.h #pragma once #include "Vehicle.h" #include "Convert.h" #include "Constant.h" #include <iostream> class Bicycle: public Vehicle { // специальное свойство: количество колес // int wheelNumber; public: Bicycle(void); virtual ~Bicycle(void); int outputWheelNumber(void); bool inputWheelNumber(int value); virtual string getClass(void); virtual string toString(void); };
Car.h #pragma once #include "Vehicle.h" #include "Convert.h" #include "Constant.h" class Car: public Vehicle { //специальное свойство: количество лошадиных сил // double horsepower; public: Car(void); virtual ~Car(void); double outputHorsepower(void); bool inputHorsepower(double value); virtual string getClass(void); virtual string toString(void); };
Constant.h #pragma once //для задания начальных значений для объектов car и lorry // #define NOT_SET_NUM -1 // если не введено -1 = not set // static const char* NOT_SET_CHAR = "not_set"; // при чтении из файла возникла ошибка // static const char* FILE_FORMAT_EXCEPTION = "wrong file format"; Convert.h #pragma once #include <string> #include <vector> class Convert { public: // перевод из double в string // static std::string toString(double value); // из int в string // static std::string toString(int value); // чтобы разбить строку - массив слов: ' ' // // vector - массив слов // static std::vector<std::string> Convert::splitByGraps(std::string text); // перевод строки в double // static double toDouble(std::string value); // перевод строки в int // static int toInt(std::string value); };
Garage.h #pragma once #include <vector> #include "Convert.h" #include "Lorry.h" #include "Bicycle.h" #include "Car.h" // массив из объектов vehicle (car, lorry, bicycle) // // vector - стандартный класс библиотеки stl // // наследуется от vector указателей на объекты vehicle // class Garage: public vector<Vehicle*> { public: Garage(void); ~Garage(void); string toString(void); Lorry* outputMinCapacity(void); Lorry* outputMaxCapacity(void); Car* outputMinHorsepower(void); Car* outputMaxHorsepower(void); Bicycle* outputMinWheelsCount(void); Bicycle* outputMaxWheelsCount(void); Vehicle* outputMinSpeed(char *vechicleName); Vehicle* outputMaxSpeed(char *vechicleName); Vehicle* outputMinPrice(char *vechicleName); Vehicle* outputMaxPrice(char *vechicleName); Vehicle* outputMinSpeed(void); Vehicle* outputMaxSpeed(void); Vehicle* outputMinPrice(void); Vehicle* outputMaxPrice(void); };
Lorry.h #pragma once #include "Vehicle.h" #include "Convert.h" #include "Constant.h" // наследование от базового класса vehicle // class Lorry: public Vehicle { // грузоподъемность грузового автомобиля // int capacity; public: Lorry(void); virtual ~Lorry(void); int outputCapacity(void); bool inputCapacity(int value); virtual string getClass(void); virtual string toString(void); }; Main.h #pragma once #include "Vehicle.h" #include "Garage.h" #include "Constant.h" #include <iostream> #include <conio.h> using namespace std; // основной класс - содержит объект класса "гараж" // class Main { // указатель на массив // // Garage - класс // // *garage - указатель на "гараж" //
Garage *garage; public: Main(void); ~Main(void); void AddVehicle(void); void DeleteVehicle(void); void outputMaxSpecial(void); void outputMinSpecial(void); void outputMaxPrice(); void outputMinPrice(); void outputMaxSpeed(); void outputMinSpeed(); Garage *GetGarage(void); void WriteToFile(void); void ReadFromFile(void); bool bin(fstream &file); unsigned int length(fstream &file); unsigned int capacity(fstream &file); unsigned int max_size(fstream &file); bool empty(fstream &file); }; Vehicle.h #pragma once #include <string> #include <ostream> #include <sstream> #include "Constant.h" #include <iostream> // абстрактный класс, содержащий характеристики всех моделей // // содержит функцию для коректного ввода данных // // private - иначе мы нарушим ООП код // using namespace std; class Vehicle { string model; string color; double maxSpeed; double price; int year; double weight; public: // output - вывод данных // //input - ввод данных // // Vehicle(void) - конструктор // // ~Vehicle(void) - деструктор // Vehicle(void); virtual ~Vehicle(void); // для всех классов (bicycle, car, lorry) // string outputModel(void); string outputColor(void); double outputMaxSpeed(void); double outputPrice(void); int outputYear(void); double outputWeight(void); bool inputModel(string value); bool inputColor(string value); bool inputMaxSpeed(double value); bool inputPrice(double value); bool inputYear(int value); bool inputWeight(double value); // для абстракции необходимо объявить виртуальную функцию // // getClass - название класса // virtual string getClass(void) = 0; // ввод string - представления // virtual string toString(void) = 0; };
Bicycle.cpp #include "Bicycle.h" using namespace std; // задание количества колес велосипеда // Bicycle::Bicycle(void) { wheelNumber = NOT_SET_NUM; #ifdef _DEBUG cout << "\nConstructor Bicycle\n"; #endif } Bicycle::~Bicycle(void) { #ifdef _DEBUG cout << "\nDestructor Bicycle\n"; #endif } int Bicycle::outputWheelNumber(void) { return wheelNumber; } bool Bicycle::inputWheelNumber(int value) { if(value <= 0 || value > 6) return false; wheelNumber = value; return true; } // вывод названия класса // string Bicycle::getClass(void) { return "Bicycle"; } // формирование строки вывода // string Bicycle::toString(void) { string result; result.append(getClass()); result.append(": название "); result.append(outputModel()); result.append(", цвет "); result.append(outputColor()); result.append(", максимальная скорость "); result.append(Convert::toString(outputMaxSpeed())); result.append(", цена "); result.append(Convert::toString(outputPrice())); result.append(", год "); result.append(Convert::toString(outputYear())); result.append(", вес "); result.append(Convert::toString(outputWeight())); result.append(", количество колес "); result.append(Convert::toString(outputWheelNumber())); return result; }
Car.cpp #include "Car.h" using namespace std; Car::Car(void) { horsepower = NOT_SET_NUM; #ifdef _DEBUG cout << "\nConstructor Car\n"; #endif } Car::~Car(void) { #ifdef _DEBUG cout << "\nDestructor Car\n"; #endif } double Car::outputHorsepower(void) { return horsepower; } bool Car::inputHorsepower(double value) { if(value <= 0) return false; horsepower = value; return true; }
string Car::getClass(void) { return "Car"; } string Car::toString(void) { string result; result.append(getClass()); result.append(": название "); result.append(outputModel()); result.append(", цвет "); result.append(outputColor()); result.append(", максимальная скорость "); result.append(Convert::toString(outputMaxSpeed())); result.append(", цена "); result.append(Convert::toString(outputPrice())); result.append(", год "); result.append(Convert::toString(outputYear())); result.append(", вес "); result.append(Convert::toString(outputWeight())); result.append(", лошадиная сила "); result.append(Convert::toString(outputHorsepower())); return result; }
Convert.cpp #include "Convert.h" #include <sstream> #include "Constant.h" // перевод в строку // std::string Convert::toString(double value) { if(value == NOT_SET_NUM) return NOT_SET_CHAR; std::ostringstream strs; // заносим в поток value // strs << value; // заносим в строку поток // return strs.str(); } std::string Convert::toString(int value) { if(value == NOT_SET_NUM) return NOT_SET_CHAR; std::ostringstream strs; strs << value; return strs.str(); } // вводим текст и разбиваем на слова // std::vector<std::string> Convert::splitByGraps(std::string text) { // tokens - массив слов // std::vector<std::string> tokens; // создание потока // std::istringstream iss(text); copy(std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>(), std::back_inserter<std::vector<std::string> >(tokens)); return tokens; } double Convert::toDouble(std::string value) { return atof(value.c_str()); } int Convert::toInt(std::string value) { return atoi(value.c_str()); }
Garge.cpp #include "Garage.h" #include <iostream>
Garage::Garage(void){} Garage::~Garage(void){} string Garage::toString() { string result = ""; iterator pGarage = begin(); int index = 0; while(pGarage!= end()) { result += Convert::toString(index++); result += ") " + (*pGarage)->toString() + "\n"; pGarage++; } return result; } Lorry* Garage::outputMinCapacity() { iterator pGarage = begin(); Lorry* min = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Lorry" && (min == nullptr || static_cast<Lorry*>(*pGarage)->outputCapacity() < min->outputCapacity())) min = static_cast<Lorry*>(*pGarage); pGarage++; } return min; } // функция поиска максимальной грузоподъемности // Lorry* Garage::outputMaxCapacity() { // создаем итератор - указатель на начало гаража // iterator pGarage = begin(); // указатель на текущий максимальный элемент, в начале равен 0 // Lorry* max = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Lorry" && (max == nullptr || static_cast<Lorry*>(*pGarage)->outputCapacity() > max->outputCapacity())) max = static_cast<Lorry*>(*pGarage); pGarage++; } return max; } Car* Garage::outputMinHorsepower() { iterator pGarage = begin(); Car* min = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Car" && (min == nullptr || static_cast<Car*>(*pGarage)->outputHorsepower() < min->outputHorsepower())) min = static_cast<Car*>(*pGarage); pGarage++; } return min; } Car* Garage::outputMaxHorsepower() { iterator pGarage = begin(); Car* max = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Car" && (max == nullptr || static_cast<Car*>(*pGarage)->outputHorsepower() > max->outputHorsepower())) max = static_cast<Car*>(*pGarage); pGarage++; } return max; } Bicycle* Garage::outputMinWheelsCount() { iterator pGarage = begin(); Bicycle* min = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Bicycle" && (min == nullptr || static_cast<Bicycle*>(*pGarage)->outputWheelNumber() < min->outputWheelNumber())) min = static_cast<Bicycle*>(*pGarage); pGarage++; } return min; } Bicycle* Garage::outputMaxWheelsCount() { iterator pGarage = begin(); Bicycle* max = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == "Bicycle" && (max == nullptr || static_cast<Bicycle*>(*pGarage)->outputWheelNumber() > max->outputWheelNumber())) max = static_cast<Bicycle*>(*pGarage); pGarage++; } return max; } Vehicle* Garage::outputMinSpeed(char *vechicleName) { iterator pGarage = begin(); Vehicle* min = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == vechicleName && (min == nullptr || (*pGarage)->outputMaxSpeed() < min->outputMaxSpeed())) min = *pGarage; pGarage++; } return min; } Vehicle* Garage::outputMaxSpeed(char *vechicleName) { iterator pGarage = begin(); Vehicle* max = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == vechicleName && (max == nullptr || (*pGarage)->outputMaxSpeed() > max->outputMaxSpeed())) max = *pGarage; pGarage++; } return max; } Vehicle* Garage::outputMinPrice(char *vechicleName) { iterator pGarage = begin(); Vehicle* min = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == vechicleName && (min == nullptr || (*pGarage)->outputPrice() < min->outputPrice())) min = *pGarage; pGarage++; } return min; } Vehicle* Garage::outputMaxPrice(char *vechicleName) { iterator pGarage = begin(); Vehicle* max = nullptr; while(pGarage!= end()) { if ((*pGarage)->getClass() == vechicleName && (max == nullptr || (*pGarage)->outputPrice() > max->outputPrice())) max = *pGarage; pGarage++; } return max; } Vehicle* Garage::outputMinSpeed() { iterator pGarage = begin(); Vehicle* min = nullptr; while(pGarage!= end()) { if ((min == nullptr || (*pGarage)->outputMaxSpeed() < min->outputMaxSpeed())) min = *pGarage; pGarage++; } return min; } Vehicle* Garage::outputMaxSpeed() { iterator pGarage = begin(); Vehicle* max = nullptr; while(pGarage!= end()) { if ((max == nullptr || (*pGarage)->outputMaxSpeed() > max->outputMaxSpeed())) max = *pGarage; pGarage++; } return max; } Vehicle* Garage::outputMinPrice() { iterator pGarage = begin(); Vehicle* min = nullptr; while(pGarage!= end()) { if ((min == nullptr || (*pGarage)->outputPrice() < min->outputPrice())) min = *pGarage; pGarage++; } return min; } Vehicle* Garage::outputMaxPrice() { iterator pGarage = begin(); Vehicle* max = nullptr; while(pGarage!= end()) { if ((max == nullptr || (*pGarage)->outputPrice() > max->outputPrice())) max = *pGarage; pGarage++; } return max; } KursV2T1.cpp // KursV2T1.cpp - определяет точку входа для консольного приложения //
#include "stdafx.h" #include "Main.h"
using namespace std; Main main;
int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_CTYPE, "russian"); start: try { // считывание из файла данных // main.ReadFromFile(); // выбор: добавить или удалить // int act; begin: do { cout << "\n\nУкажите что желаете сделать: \n\n1 - Добавить транспортное средство\n2 - Удалить транспортное средство\n3 - Показать гараж\n4 - Показать максимальное значение специфической характеристики\n5 - Показать минимальное значение специфической характеристики\n6 - Показать максимальную цену\n7 - Показать минимальную цену\n8 - Показать максимальную скорость\n9 - Показать минимальную скорость\n0 - ВЫХОД\n\n"; cout << "Ваш выбор: "; cin >> act; } while (act > 9 || act < 0); switch (act) { case 1: { main.AddVenicle(); goto begin; break; } case 2: { main.DeleteVenicle(); goto begin; break; } case 3: { cout << main.GetGarage()->toString(); goto begin; break; } case 4: { main.outputMaxSpecial(); goto begin; break; } case 5: { main.outputMinSpecial(); goto begin; break; } case 6: { main.outputMaxPrice(); goto begin; break; } case 7: { main.outputMinPrice(); goto begin; break; } case 8: { main.outputMaxSpeed(); goto begin; break; } case 9: { main.outputMinSpeed(); goto begin; break; } case 0: { main.WriteToFile(); Garage::iterator pGarage = main.GetGarage()->begin(); while (pGarage!= main.GetGarage()->end()) { delete *pGarage; pGarage++; } _getch(); break; } } } catch (exception ex) { cout << ex.what() << endl; _getch(); } return 0; }
Lorry.cpp #include "Lorry.h" #include "Constant.h" using namespace std;
Lorry::Lorry(void) { capacity = NOT_SET_NUM; #ifdef _DEBUG cout << "\nConstructor Lorry\n"; #endif } Lorry::~Lorry(void) { #ifdef _DEBUG cout << "\nDestructor Lorry\n"; #endif } int Lorry::outputCapacity(void) { return capacity; } bool Lorry::inputCapacity(int value) { if(value <= 0 || value > 1000000) return false; capacity = value; return true; } string Lorry::getClass(void) { return "Lorry"; } string Lorry::toString(void) { string result; result.append(getClass()); result.append(": название "); result.append(outputModel()); result.append(", цвет "); result.append(outputColor()); result.append(", максимальная скорость "); result.append(Convert::toString(outputMaxSpeed())); result.append(", цена "); result.append(Convert::toString(outputPrice())); result.append(", год "); result.append(Convert::toString(outputYear())); result.append(", вес "); result.append(Convert::toString(outputWeight())); result.append(", грузоподъемность "); result.append(Convert::toString(outputCapacity())); return result; }
Main.cpp #include "Main.h" #include <fstream> #include "Bicycle.h" #include "Car.h" #include "Lorry.h" #include <stdlib.h> // srand, rand // #include <time.h> using namespace std; unsigned int _capacity = 0;
Main::Main(void) { // создаем гараж в динамической памяти // garage = new Garage(); } Main::~Main(void) { // обязательно удалять // delete garage; } bool okInput() { // проверка коректности ввода // if(cin.bad() || cin.fail()) return false; return true; } void Main::DeleteVenicle() { setlocale(LC_CTYPE, "russian"); if(garage->size() == 0) { cout << "\nВ гараже пусто.\n"; return; } int index; do { cout << "\nУкажите номер транспортного средства которое желаете удалить: "; cout << "Ваш выбор: "; cin >> index; // размер массива "гараж" // } while(index > garage->size() -1 && index < 0); delete *(garage->begin() + index); garage->erase(garage->begin() + index); cout << "Удалять еще?(no - ESC)\n"; if(_getch()!= 27) DeleteVenicle(); } void Main::AddVenicle() { setlocale(LC_CTYPE, "russian"); // указатель на абстрактный класс // Vehicle *vehicle; int mod; string str; double Double; int Int; do{ cout << "\nУкажите тип транспортного средства которое желаете добавить: Car - 1, Bicycle - 2, Lorry- 3, random - 0\n"; cout << "Ваш выбор: "; cin >> mod;
} while (okInput() && (mod < 0 || mod > 3)); srand(time(nullptr)); if (mod == 0) mod = rand() % 3 + 1; cout << "Укажите специфическую характеристику для типа "; cout << "Ваш выбор: "; switch (mod) { case 1: { // создание указателя на класс car // Car *temp = new Car(); cout << temp->getClass(); do{ cout << "\ndouble лошадиная сила "; cin >> Double; } while (okInput() &&!temp->inputHorsepower(Double)); //конвертация на venicle // vehicle = temp; break; } case 2: { Bicycle *temp = new Bicycle(); cout << temp->getClass(); do{ cout << "\nint количество колес "; cin >> Int; } while (okInput() &&!temp->inputWheelNumber(Int)); vehicle = temp; break; } case 3: { Lorry *temp = new Lorry(); cout << temp->getClass(); do{ cout << "\nint грузоподъемность "; cin >> Int; } while (okInput() &&!temp->inputCapacity(Int)); vehicle = temp; break; } default: { throw exception("rand exception" + mod); } } // ввод характеристики для всех моделей // cout << "Укажите характеристики транспортного средства\n";
do { cout << "\nstring название "; cin >> str; } while (okInput() &&!vehicle->inputModel(str));
do { cout << "\nstring цвет "; cin >> str; } while (okInput() &&!vehicle->inputColor(str));
do { cout << "\ndouble максимальная скорость "; cin >> Double; } while (okInput() &&!vehicle->inputMaxSpeed(Double));
do { cout << "\ndouble цена "; cin >> Double;
// занесение цены в vehicle // } while (okInput() &&!vehicle->inputPrice(Double));
do{ cout << "\nint год "; cin >> Int; } while (okInput() &&!vehicle->inputYear(Int));
do{ cout << "\ndouble вес "; cin >> Double; } while (okInput() &&!vehicle->inputWeight(Double)); // push_back - заносим в конец массива // garage->push_back(vehicle); cout << "Добавлять еще?(no - ESC)\n"; if (_getch()!= 27) AddVenicle(); } Garage *Main::GetGarage() { return garage; } // запись - обязательная функция // void Main::WriteToFile() { fstream file; // out - для записи // file.open("save.txt", ios::out); if(!file) throw "opening file error"; // перевод в строку // string str = "garage\n" + garage->toString(); file.write(str.c_str(), str.size()); file.close(); } void Main::ReadFromFile() { fstream file; file.open("save.txt", ios::in); if (!file) throw "opening file error"; string str = ""; char ch; // цикл для чтения посимвольно в переменную ch // while (file.get(ch)) // занос всех символов в str // str += ch; // создаем массив из слов // vector<string> strVect = Convert::splitByGraps(str); //указатель на первое слово vector<string>::iterator pStrVect = strVect.begin(); // указатель на специфическую характеристику передвижения // vector<string>::iterator pSpecial; Vehicle *vehicle; pStrVect++;
#ifdef _DEBUG cout << ((empty(file))? "": "\nnot") << " empty, "; cout << ((bin(file))? "": "not") << " binary, "; cout << "length " << length(file) << ", "; cout << "capacity " << capacity(file) << ", "; cout << "max_size " << max_size(file) << ".\n"; #endif
while (pStrVect!= strVect.end()) { pStrVect++; pSpecial = pStrVect + 14; if (*pStrVect == "Car:") { Car *car = new Car(); car->inputHorsepower(Convert::toDouble(*pSpecial)); vehicle = car; } else if (*pStrVect == "Bicycle:") { Bicycle *bicycle = new Bicycle(); bicycle->inputWheelNumber(Convert::toInt(*pSpecial)); vehicle = bicycle; } else if (*pStrVect == "Lorry:") { Lorry *lorry = new Lorry(); lorry->inputCapacity(Convert::toInt(*pSpecial)); vehicle = lorry; } else throw FILE_FORMAT_EXCEPTION; pStrVect += 2; vehicle->inputModel(pStrVect->substr(0, pStrVect->size() - 1)); pStrVect += 2; vehicle->inputColor(pStrVect->substr(0, pStrVect->length() - 1)); pStrVect += 2; vehicle->inputMaxSpeed(Convert::toDouble(pStrVect->substr(0, pStrVect->length() - 1))); pStrVect += 2; vehicle->inputPrice(Convert::toDouble(pStrVect->substr(0, pStrVect->length() - 1))); pStrVect += 2; vehicle->inputYear(Convert::toInt(pStrVect->substr(0, pStrVect->length() - 1))); pStrVect += 2; vehicle->inputWeight(Convert::toDouble(pStrVect->substr(0, pStrVect->length() - 1))); pStrVect += 3; garage->push_back(vehicle); // вместимость файла - количество записей // _capacity++; }
} bool Main::bin(fstream &file) { file.clear(); file.seekg(0, ios_base::beg); char ch; string str; for(int i = 0; i < 6, file.get(ch); ++i) { str += ch; } return (str == "garage"); } unsigned int Main::length(fstream &file) { file.clear(); file.seekg(0, ios_base::end); return file.tellg(); } unsigned int Main::capacity(fstream &file) { file.clear(); file.seekg(0); unsigned int result = 0; char ch; while(file.get(ch)) if(ch == '\n') result++; return result; } unsigned int Main::max_size(fstream &file) { return string().max_size(); } bool Main::empty(fstream &file) { return (length(file) == 0); } void Main::outputMaxSpecial() { Vehicle *vehicle = garage->outputMaxCapacity(); cout << "\nМаксимальная грузоподъемность \n" << ((vehicle == nullptr)? "not found": vehicle->toString()); vehicle = garage->outputMaxWheelsCount(); cout << "\nВелосипед с максимальным количеством колес\n" << ((vehicle == nullptr)? "not found": vehicle->toString()); vehicle = garage->outputMaxHorsepower(); cout << "\nМашина с максимальной лошадиной силой\n" << ((vehicle == nullptr)? "not found": vehicle->toString()); } void Main::outputMinSpecial() { Vehicle *vehicle = garage->outputMinCapacity(); cout << "\nМинимальная грузоподъемность \n" << ((vehicle == nullptr)? "not found": vehicle->toString()); vehicle = garage->outputMinWheelsCount(); cout << "\nВелосипед с минимальным количеством колес\n" << ((vehicle == nullptr)? "not found": vehicle->toString()); vehicle = garage->outputMinHorsepower(); cout << "\nМашина с минимальной лошадиной силой\n" << ((vehicle == nullptr)? "not found": vehicle->toString()); } void Main::outputMaxPrice() { setlocale(LC_CTYPE, "russian"); int vehicleType = 0; char* vehicleName = ""; cout << "\nЖелаете выбрать тип транспортного средства?(no - ESC)\n"; if (_getch()!= 27) { beg: cout << "\nУкажите тип транспортного средства 1- Lorry, 2 - Bicycle, 3- Car\n"; cout << "Ваш выбор: "; cin >> vehicleType; switch (vehicleType) { case 1: vehicleName = "Lorry"; break; case 2: vehicleName = "Bicycle"; break; case 3: vehicleName = "Car"; break; default: goto beg; break; } } Vehicle *vehicle; if (vehicleType == 0) { vehicle = garage->outputMaxPrice(); } else vehicle = garage->outputMaxPrice(vehicleName); cout << "Максимальная цена " << ((vehicle == nullptr)? "не найдена": vehicle->toString()) << endl; } void Main::outputMinPrice() { setlocale(LC_CTYPE, "russian"); int vehicleType = 0; char* vehicleName = ""; cout << "\nЖелаете выбрать тип транспортного средства?(no - ESC)\n"; if (_getch()!= 27) { beg: cout << "\nУкажите тип транспортного средства 1- Lorry, 2 - Bicycle, 3- Car\n"; cout << "Ваш выбор: "; cin >> vehicleType; switch (vehicleType) { case 1: vehicleName = "Lorry"; break; case 2: vehicleName = "Bicycle"; break; case 3: vehicleName = "Car"; break; default: goto beg; break; } } Vehicle *vehicle; if (vehicleType == 0) { vehicle = garage->outputMinPrice(); } else vehicle = garage->outputMinPrice(vehicleName); cout << "Минимальная цена " << ((vehicle == nullptr)? "не найдена": vehicle->toString()) << endl; } void Main::outputMaxSpeed() { setlocale(LC_CTYPE, "russian"); int vehicleType = 0; char* vehicleName = ""; cout << "\nЖелаете выбрать тип транспортного средства?(no - ESC)\n"; if (_getch()!= 27) { beg: cout << "\nУкажите тип транспортного средства 1- Lorry, 2 - Bicycle, 3- Car\n"; cout << "Ваш выбор: "; cin >> vehicleType; switch (vehicleType) { case 1: vehicleName = "Lorry"; break; case 2: vehicleName = "Bicycle"; break; case 3: vehicleName = "Car"; break; default: goto beg; break; } } Vehicle *vehicle; if (vehicleType == 0) { vehicle = garage->outputMaxSpeed(); } else vehicle = garage->outputMaxSpeed(vehicleName); cout << "Максимальная скорость " << ((vehicle == nullptr)? "не найдена": vehicle->toString()) << endl;
} void Main::outputMinSpeed() { setlocale(LC_CTYPE, "russian"); int vehicleType = 0; char* vehicleName = ""; cout << "\nЖелаете выбрать тип транспортного средства?(no - ESC)\n"; if (_getch()!= 27) { beg: cout << "\nУкажите тип транспортного средства 1- Lorry, 2 - Bicycle, 3- Car\n"; cout << "Ваш выбор: "; cin >> vehicleType; switch (vehicleType) { case 1: vehicleName = "Lorry"; break; case 2: vehicleName = "Bicycle"; break; case 3: vehicleName = "Car"; break; default: goto beg; break; } } Vehicle *vehicle; if (vehicleType == 0) { vehicle = garage->outputMinSpeed(); } else vehicle = garage->outputMinSpeed(vehicleName); cout << "Минимальная скорость " << ((vehicle == nullptr)? "не найдена": vehicle->toString()) << endl; }
Vehicle.cpp #include "Vehicle.h" Vehicle::Vehicle(void) { model = NOT_SET_CHAR; color = NOT_SET_CHAR; maxSpeed = NOT_SET_NUM; price = NOT_SET_NUM; year = NOT_SET_NUM; weight = NOT_SET_NUM; #ifdef _DEBUG cout << "\nConstructor Vehicle\n"; #endif } Vehicle::~Vehicle(void) { #ifdef _DEBUG cout << "\nDestructor Vehicle\n"; #endif } string Vehicle::outputModel(void) { return model;}
string Vehicle::outputColor(void) { return color;} double Vehicle::outputMaxSpeed(void) { return maxSpeed;}
double Vehicle::outputPrice(void) { return price;}
int Vehicle::outputYear(void) { return year;}
double Vehicle::outputWeight(void) { return weight;}
bool Vehicle::inputModel(string value) { if(value == "") return false; model = value; return true; } bool Vehicle::inputColor(string value) { if(value == "") return false; color = value; return true; } bool Vehicle::inputMaxSpeed(double value) { if(value > 1000 || value <= 0) return false; maxSpeed = value; return true; } bool Vehicle::inputPrice(double value) { if(value <= 0) return false; | ||||||||||||||||||||||||||||
|
| Поделиться: |
Познавательные статьи:
Последнее изменение этой страницы: 2016-09-19; просмотров: 266; Нарушение авторского права страницы; Мы поможем в написании вашей работы!
infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.96 (0.011 с.)