Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Добавление транспортного средства↑ ⇐ ПредыдущаяСтр 2 из 2 Содержание книги
Поиск на нашем сайте
Функция 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; просмотров: 162; Нарушение авторского права страницы; Мы поможем в написании вашей работы!
infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.161.151 (0.01 с.)