Управление парковкой

Автор работы: Пользователь скрыл имя, 18 Декабря 2013 в 17:10, контрольная работа

Описание работы

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания C++.

Содержание работы

ВВЕДЕНИЕ . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . … . 3
1. Постановка задачи и обзор методов. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Структура входных и выходных данных . . . . . . . . . . . . . . . . . . . . . . . 7
3. Диаграмма классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .8
4. Описание классов и структур. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
5. Блок-схемы и алгоритмы по шагам…….... …. . . . . . . . . . . . . . . . ….14
6.Текст программы. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .…18
7.Результаты работы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .31
ЗАКЛЮЧЕНИЕ.. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .. .33
ЛИТЕРАТУРА……………. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . ..34

Файлы: 1 файл

Копия (2) Parcing1.doc

— 343.50 Кб (Скачать файл)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ  РЕСПУБЛИКИ БЕЛАРУСЬ

 

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ  «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ  ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»

 

 

КАФЕДРА:       Экономической информатики

 

ФАКУЛЬТЕТ:   Инженерно-экономический

 

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к расчетной работе

по курсу 

«Объектно-ориентированное 

программирование  и проектирование»

НА ТЕМУ:

                                             «Управление парковкой»

 

 

 

 

 

 

 

 

 

 

 

ИСПОЛНИТЕЛЬ:                     

 

РУКОВОДИТЕЛЬ:                        

 

 

 

 

 

 

                              Минск, 2011

 

СОДЕРЖАНИЕ:

 

ВВЕДЕНИЕ . . . . . .  . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . … . 3

1. Постановка задачи и обзор методов. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2. Структура входных и выходных данных . . . . . . . . . . . . . . . . . . . . . .  . 7

3. Диаграмма классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .8

4. Описание классов   и структур. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9

5. Блок-схемы и алгоритмы по шагам…….... …. . . . . . . . . . . . . . . .  ….14

6.Текст программы. . . . . . . . . . . .  . . . . . . . . . . .. . . . . . . . . . . . .  . . . . .…18

7.Результаты работы. . . . .  . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . .. .31

ЗАКЛЮЧЕНИЕ.. . . . . . . . . . . . . . . . . . . . . . . . . ..  . . . . . . . . . . . . . . . . .. .33

ЛИТЕРАТУРА……………. . . . . . . . . .  . . . . . . . .. . . . . . . . . . . . . . . . . ..34

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

Язык программирования служит двум связанным между собой  целям: он дает программисту аппарат  для задания действий, которые  должны быть выполнены, и формирует  концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания C++.

Связь между языком, на котором мы думаем/программируем, и задачами и решениями, которые мы можем представлять в своем воображении, очень близка. По этой причине ограничивать свойства языка только целями исключения ошибок программиста в лучшем случае опасно. Как и в случае с естественными языками, есть огромная польза быть по крайней мере двуязычным. Язык предоставляет программисту набор концептуальных инструментов; если они не отвечают задаче, то их просто игнорируют. Например, серьезные ограничения концепции указателя заставляют программиста применять вектора и целую арифметику, чтобы реализовать структуры, указатели и т.п. Хорошее проектирование и отсутствие ошибок не может гарантироваться чисто за счет языковых средств.

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

Язык С++ является средством  объектного программирования. Главной  целью создателя языка доктора  Бьерна Страустрапа было оснащение  языка С++ конструкциями, позволяющими увеличить производительность труда программистов и облегчить процесс овладения большими программными продуктами. Отвечая требованиям современного программирования, С++ делает акцент на разработке новых типов данных наиболее соответствующих концепциям выбранной области знаний и задачам приложения. Класс является ключевым понятием С++. Описание класса содержит описание данных, требующих для предоставления объектов этого типа и набор операций для работы с подобными  объектами.

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

 

 

 

1 Постановка задачи и  обзор методов

1.1 Постановка задачи

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

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

Информационная система  по учету автомобилей на стоянке  должна содержать  в себе информацию:

- марку  автомобиля;

- тип автомобиля;

- номер автомобиля;

- номер парковочного  места на стоянке;

- время заезда на  стоянку;

- время выезда со  стоянки;

- расчет стоимости за пользование стоянкой;

- получение оплаты  за пользование стоянкой.

Запись и  чтение реализовать с помощью  бинарных файлов . Основой для хранения базы данных использовать контейнер List .

 

1.2  Обзор методов

Для успешной реализации поставленных задач существует множество методов решения. Среди основных можно выделить:

Создание  программного продукта средствами Microsoft Visual C++ 8.0, используя объектно-ориентированную  технологию и язык программирования С++;

создание  полноценной реляционной базы данных средствами Microsoft SQL Server 2005 и др.

Для данного проекта  выбираем созданию продукта с использованием MS Visual C++ 8.0, т.к. эта система наиболее полно подходит для реализации поставленных задач. Конечный продукт с некоторыми доработками может быть использован  сотрудниками парковки без какого-либо обучения и специальной подготовки, в то время как использование конечной  реализации в MS SQL Server  требует дополнительных знаний и навыков.

 

 

2  Структура входных и выходных данных

Входными данными является бинарный файл “cars.dat”, элементами данных которого являются класс автомобилей Car и класс парковочных мест  CarParking.

1. class Car                             // класс автомобилей

- char* type;                          //тип автомобиля

- char* mark;                        //марка автомобиля

- char nomercar[8];             //номер автомобиля

2. class CarParcing: class Car  // класс парковочных мест

- unsigned int numbermesta;  // номер парковочного места

- int Time;                              // время заезда на парковку

Для хранения информации о припаркованных автомобилях используется файл cars.dat. Объекты класса Parcing записываются в файл cars.dat . Структура файла представлена ниже:

type

mark

nomercar

numbermesta

Time


 

type  - тип автомобиля;

 mark - модель автомобиля

nomercar - номер автомобиля

numbermesta  - номер парковочного места

 Time  - время заезда автомобиля на парковку

3. class Parking   // класс парковки автомобилей

- bool parkingID[10];                //парковочное место(занято/свободно)

- List<CarParking*> list_t;       // список припаркованных машин

- int count;                                // количество машин на парковке

 

 

 

 

 

 

 

3  Диаграмма классов

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4  Описание классов и структур

4.1  class Car     // класс автомобилей

Компоненты-данные: 

- char* type;              //тип автомобиля

- char* mark;            //марка автомобиля

- char nomercar[8];  //номер автомобиля

Компоненты-методы:

- virtual void Read(); - функция запрашивает данные об автомобиле

- char* getMark(); - функция получения марки автомобиля

-  char* getType(); - функция получения типа автомобиля

-  char* getnomercar(); - функция получения номера автомобиля

 

4.2  class CarParcing: class Car  // класс парковки автомобилей

Компоненты-данные: 

- unsigned int numbermesta;  // номер парковочного места

- int Time;                              // время заезда на парковку (хранится в

                                              //секундах прошедших от 1 января 1970

                                             //(год основания UNIX)

Компоненты-методы:

- void Read(); - функция запрашивает данные об автомобиле

- void SetNumberMest(); - функция устанавливает номер парковочного

                                            места 

-  int gettime(); - получаем время заезда  в секундах

-  int getnumbermesta(); - получаем  номер парковочного места

-  int get_time(); - получаем время заезда  в формате HH:MM:SS

-  double Calc(double priceH); - расчет стоимости парковочного места

- ostream &operator << (ostream &output, CarParking *car) //перегрузка

                                                                        вывода структуры CarParcing

 

4.3 class Parking   // класс парковки автомобилей

Компоненты-данные: 

- bool parkingID[10];                //парковочное место(занято/свободно)

- List<CarParking*> list_t;         // список припаркованных автомобилей

- int count;                                   // количество автомобилей на парковке

Компоненты-методы:

- void readCars(); - функция чтения припаркованных автомобилей из

                                  файла

- void writeCars(); - функция записи припаркованных автомобилей в

                                    файл

- void Add(); - заезд автомобиля на парковку 

- void remove(char* nomer,double price); - выезд автомобиля с парковки

- void poisk(char* nomer); - функция поиска втомобиля по номеру

-  ostream &operator << (ostream &output,  Parking &parking); -

                                                        //перегрузка вывода структуры Parking

 

4.4 class  List, class  iterator   // класс контейнер и класс итератор

Класс List (класс контейнер), реализованный в виде шаблонов классов, для доступа к элементам списка. Итератор реализован как открытый вложенный класс List::iterator. В классе iterator выполнена перегрузка некоторых операций, позволяющих манипулировать узлом.

template <class T>

class  List   //класс итератор

Компоненты-данные: 

- Uzel *head;   //указатель на начало списка

- Uzel *tail;     //указатель на конец списка

- int countElements;  //количество элементов списка

Компоненты-методы:

- int getSize();   // получаем количество элементов списка

- void clear();    //очищаем список

- void add_begin(T info) // добавление нового элемента в начало списка

- bool remove_it(int key)  //удаление требуемого узла

- bool is_empty( )  //проверка пустой список или нет

- iterator front( )  //получаем итератор начала контейнера

- iterator rear( )  //получаем итератор конца контейнера

 

class  Uzel   // элемент списка

Компоненты-данные: 

- Uzel *next; //указатель на следующий узел

- Uzel *prev; //указатель на предыдущий узел

- T info;         //данные

Компоненты-методы:

- void print_info(); //вывод элементов списка

 

class  iterator   // класс итератор

Компоненты-данные: 

- Uzel *next1;   //указатель на элемент списка

Компоненты-методы:

  • iterator& operator=(const iterator& it) // оператор перегрузки =
  • iterator &operator++(); //оператор перегрузки ++

-  bool getNext() // следущий элемент (Да/Нет)

 

 

4.5 class oshibka   // класс для обработки исключительных ситуаций

Класс используется для  обработки исключительных ситуаций. Базовый класс class oshibka является абстрактным.  Два унаследованных от него класса class error_oshibka  и class Fail_oshibka служат для обработки исключительных ситуаций на ввод элементов и работу с файлами соответственно.

class oshibka

{

  public:

virtual void print()=0;// создать объект этого  класса невозможно

virtual ~oshibka(){}

};

class error_oshibka:public oshibka  // производный класс ошибки

{ char *buf;       //храниться текст сообщения об ошибке

  public:

       error_oshibka(char *abuf) //конструктор с параметрами

  {  buf=new char[strlen(abuf)+1];

     strcpy(buf,abuf); }

 

  void print()  //получение сообщения об ошибке

  { cout<<buf<<endl; }

  ~error_oshibka(){}

};

 

class Fail_oshibka:public oshibka  // производный класс ошибки при

                                                        //работе с файлами

{ char *buf;   //храниться текст сообщения об ошибке

public:

 Fail_oshibka(char *abuf)  //конструктор с параметрами

{

  buf = new char[strlen(abuf)+1];

  strcpy(buf, abuf); }

 

      void print()  // получение сообщения об ошибке

{cout << buf<< endl; }

~Fail_oshibka(){} };  
 5  Блок-схемы и алгоритмы по шагам

5.1 Алгоритм функции заезда автомобиля на парковку (void Add()):

Шаг 1. Вводим данные об автомобиле , заезжающего на парковку (функция Read())

Шаг 2. В цикле  for(int i=0;i<CountM;i++) отображаем свободные пасрковочные места при условии (!parkingID[i]), что значение переменной parkingID   имеет значение false

Шаг 3. Организовываем цикл для проверки свободно введенное парковочное место или занято  while (true)

Шаг 4. Организовываем цикл для проверки введенгого парковочного места на число int Do{} Wile(er==0)

Шаг 5. Блок try начинаем с ввода парковочного места (переменная char ss[10]) и перевода полученной переменной (cin>>ss) из типа char в тип int и записи её в переменную n (n=atoi(s)).

Шаг 6. Проверяем полученную строку на отсутствие в ней цифр с помощью функции er=isdigit(s[i]), которая возвращает ненулевое значение, если её аргумент является цифрой. Если проверка пройдёт неуспешно, генерируем исключение (throw EnterExp("Ошибка ввода!""Пожалуйста, повторите ввод: ")).

Информация о работе Управление парковкой