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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать файл)

Шаг 7. Производим обработку исключений catch(error_oshibka obj) {obj.print();} и возвращаемся на шаг 4.

Шаг 8. При успешной проверке строки на введенные в нее цифры, далее в условии if (n-1<CountM && !parkingID[n-1]) проверяем значение переменной n (место свободно или занято). Если занято (значение переменной parkingID=True), то возвращаемся в начало цикла while (true) шаг 3 и повторно вводим другое парковочное место

Шаг 9. При условии, что место свободно занимаем место (функция Setnumbermesto(n)), входным параметром которой является переменная n

Шаг 10. На последнем шаге припарковываем автомобиль (функция add_begin(c)), входным параметром которой является структура класса Carparking

 

5.2 Алгоритм функции получения времени заезда автомобиля на парковку в формате HH:MM::SS void get_time()

Шаг 1. Объявляем переменую для хранения конечного результата (char buffer[80])

Шаг 2. Значение переменной Time (время заезда автомобиля, время хранится в секундах прошедших от 1 1970 года (год запуска юникс) сохраняем в перемнной second типа time_t (time_t second=Time)

Шаг 3. С помощью функции localtime((&second), входным параметром которой является перемнная second преобразуем число секунд типа t_timt в структуру типа tm* timeinfo (в которой в качестве полей содержатся целочисленные (int) значения секунд, минут часа, дня, месяца и года (начиная от 1900, т.е для 2009 это будет число 109))

Шаг 4. Устанавливаем формат вывода преобразованния в виде char* format="%H:%M:%S"

Шаг 5. Форматируем время в строку strftime(buffer,80,format,timeinfo),  с помощью функции strftime

Шаг 6. Выводим на консоль значение переменной buffer (сout<<buffer<<endl;)

 

5.3  Блок-схемы функций

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


 

 


                                                                                                                                                               Объявление переменных


                                                                                                                                                               Указатель *с на структуру


                                                                                                                                                                                  CarParking


                                                                                                                                                                                   ss-ввод.с клав.число

                                                                                                                                                                err-флаг для правильности


                                                                                                                                                                                    ввода   


                                                                                                                                                                                                                                                                                                                              


                                                                                                                                                              Функция Read() запрашивает


                                                                                                                                                                                  данные об автомобиле, 

                                                                                                                                                                                  заезжающего на парковку











                                                                    Вводи номер места


                                                                            cin>>ss и переводим


                                                                            ее из типа char в int

                                                                            n=atoi(ss)



                                                                   Начала цикла на 

                                                                   Ввод цифр или нет



                                                                  Функция возвращает


                                                                  ненулевое знач. Если


                                                                          аргумент явл.цифрой 




                                                нет                                                               да                                                      



 



           да                                                              нет


                                                   


 






 

 



                                        нет                                                                   да


 


 

 



 



 


 

 

 
Функция расчета оплаты за пользование стоянкой  double Calc(double priceH)

 


 

 


                                                                                                                                                                 timeC – текущее время

                                                                                                                                                                 result – время, провед. на стоянке в часах


                                                                                                                                                                 round – время в часах (округл.)



                                                                                                                                                                 получаем время, провед. на


                                                                                                                                                стоянке в часах




                                                                                                                                               округляем до целого

                                                                                                                                                в большую сторону


                                                                                                                                   


                                                                                                                                                умножаем часы на стоимость

                                                                                                                                                одного часа



 



 

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

 

“MAIN.CPP”

#include"stdafx.h"

#include"Car.h"

#include"Oshibka.h"

#include"Parcing.cpp"

 

char Menu()

{

system("cls");

char choice;

cout<<"Выберите пункт меню <Парковка>"<<endl<<endl;

cout<<"1 - Заезд автомобиля на парковку"<<endl;

cout<<"2 - Выезд автомобиля с парковки "<<endl;

cout<<"3 - Просмотреть список припаркованных автомобилей"<<endl;

cout<<"4 - Записать в файл припаркованные автомобили"<<endl;

cout<<"5 - Выгрузить из файла."<<endl;

cout<<"6 - Поиск автомобиля"<<endl;

cout<<"0 - Выход"<<endl;

cout<<endl;

cout<<"Сделайте выбор\n";

cin>>choice;

return choice;

}

 

int main()

{

 

setlocale(LC_ALL, "Russian_rus.1251");

Parking pr;

try

{

pr.readCars();

}

catch(...)

{cout << "Error read file "; }

 

char c = 0;

int price = 3000; // цена одно часа парковки

 

while (c!='0')

{

c =Menu();

switch(c)

{

case '1':

system("cls");

cout<<"Пункт меню <Заезд автомобиля на парковку>"<<endl;

 

pr.Add();

cout<<endl<<"Машина припаркована.";

pr.writeCars();

getch();

break;

case '2':

 

system("cls");

char a[8];

cout<<"Пункт меню <Выезд автомобиля с парковки>"<<endl<<endl;

 

cout << "Cтоимость 1 часа парковки (бел.руб): "<<price<<endl;

 

cout << "Ввeдите номер машины: ";

cin >> a;

pr.poisk(a);

 

pr.remove(a,price);

 

cout<<endl<<"Оплачено: Выезд разрешен.";

pr.writeCars();

getch();

break;

system("cls");

 

case '3':

system("cls");

cout<<"Пункт меню <Припаркованные автомобили>"<<endl;

if (pr.list_t.is_empty())

cout<<"Парковна пустая";

else

{

cout<<"_________________________________________________________"<<endl;

cout<<"|Номер места| Марка   | Тип     |Номер авт.|Время заезда| "<<endl;

cout<<"|___________|_________|_________|__________|____________| "<<endl;

 

cout << pr; }

getch();

break;

case '5':

system("cls");

cout<<"Пункт меню <Выгрузить из файла>"<<endl;

pr.list_t.clear();

pr.readCars();

break;

case '4':

system("cls");

cout<<"Пункт меню <Записать в файл припаркованные автомобили>"<<endl;

pr.writeCars();

 

break;

case '6':

 

system("cls");

char b[8];

cout<<"Пункт меню <Поиск автомобиля по номеру>"<<endl;

cout << "Ввeдите номер машины: ";

cin >> b;

pr.poisk(b);

getch();

break;

}

}

return 0;

}

 

 

“OHSIBKA.H”

 

#include "stdafx.h"

 

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(){}

};

 

 

“CAR.H”

 

#include "stdafx.h"

 

class Car // базовый класс Car(автомобили)

{

private:

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

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

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

 

public:

Car()     //конструктор

{

type = NULL;

mark = NULL;

}

 

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

{ int n;

cout<<endl;

cout << "Введите марку автомобиля: ";

char buff[256];

cin >> buff;cout<<endl;

mark = new char[strlen(buff)+1];

strcpy(mark,buff);

cout << "Тип автомобиля: ";

cin >> buff;cout<<endl;

type = new char[strlen(buff)+1];

strcpy(type,buff);

cout << "Введите номер автомобиля: ";

cin >> nomercar;cout<<endl;

nomercar[9] = '\0';

}

 

char* getMark() //получаем марку автомобиля

{return mark;}

 

    char* getType() //получаем тип автомобиля

{return type; }

   

   char* getnomercar() //получаем номер автомобиля

{ return nomercar;}

 

 

Car(char* type,char* mark,char* nomer) //конструктор с параметрами

{

this->type = new char[strlen(type)+1];

this->mark = new char[strlen(mark)+1];

strcpy(this->nomercar,nomer);

strcpy(this->type,type);

strcpy(this->mark,mark);

}

 

~Car()    //деструктор

{

if(type!=NULL)

{ delete[] type; }

 

if(mark!=NULL)

{ delete[] mark; }

}

};

 

class CarParking:public Car   //производный класс CarParking (класс парковочных мест)

{

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

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

                          //от 1 января 1970 года (год запуска юникс)

 

public:

int numberID;

 

CarParking(int Time,int numbermesta,char* type,char* mark,char* nomer):Car(type,mark,nomer) //конструктор с параметрами

{

numberID = time(NULL) + rand(); //число секунд прошедших с 1 января 1970 + функция rand возвращает псевдослучайное целое в интервале

this->Time=Time;

this->numbermesta=numbermesta;

}

CarParking(int Time,int numbermesta)

{

this->Time=Time;

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