Автор работы: Пользователь скрыл имя, 18 Декабря 2013 в 17:10, контрольная работа
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания C++.
ВВЕДЕНИЕ . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . … . 3
1. Постановка задачи и обзор методов. . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Структура входных и выходных данных . . . . . . . . . . . . . . . . . . . . . . . 7
3. Диаграмма классов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .8
4. Описание классов и структур. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
5. Блок-схемы и алгоритмы по шагам…….... …. . . . . . . . . . . . . . . . ….14
6.Текст программы. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .…18
7.Результаты работы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .31
ЗАКЛЮЧЕНИЕ.. . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .. .33
ЛИТЕРАТУРА……………. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . ..34
Шаг 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,
Шаг 6. Выводим на консоль значение переменной buffer (сout<<buffer<<endl;)
5.3 Блок-схемы функций
Функция заезда автомобиля на парковку void Add():
да
Функция расчета оплаты за пользование
стоянкой double Calc(double priceH)
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<<"_______________________
cout<<"|Номер места| Марка | Тип |Номер авт.|Время заезда| "<<endl;
cout<<"|___________|_________|
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;