Информационная система по учету автомобилей

Автор: Пользователь скрыл имя, 05 Декабря 2011 в 16:04, курсовая работа

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

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

Содержание

ВВЕДЕНИЕ……………………………………………………………3
Постановка задачи……………………………………………5
Спецификация системы……………………………………..5
3. Структура входных и выходных данных………………………………….7
4. Диаграмма классов…………………………..……………………………..8
5. Описание классов………………………………...…………………..…....10
6. Алгоритмы по шагам и блок- схемы функций .…………………………13
7. Текст программы…………………………………………………………..15
8. Результаты работы………………………………………………………...34
ЗАКЛЮЧЕНИЕ………………………………………………………………….35
Список использованной литературы…………………………………………...36

Работа содержит 1 файл

ОтчётБадеев.doc

— 367.50 Кб (Скачать)

{

      qIterator<T> Iterator(&obj);

      T tmp;

      int count = 1; 

      for(count = 0; !Iterator.empty(); count++) // подсчёт количества элементов в стэке

      {

            tmp = *Iterator;

            if(++Iterator == NULL) break; // проход по стэку

      }

      Iterator.toBegin(); // На начало стэка 

      T *arr = new T[count]; 

      tmp = *Iterator;

      for(int j = 0; j < count && !Iterator.empty(); j++) // Преобразование стэка в массив

      {

            arr[j] = *Iterator;

            if(++Iterator == NULL) break;

      } 

      WriteArray(arr, count); // Запись массива в файл

}

template <class T>

Stack<T> FWriter<T>::ReadStack() // Функция чтения стэка

{

      Stack<T> *tmp = new Stack<T>(); 

      int count = ReadInt(); // Чтение количества элементов для чтения 

      for(int i = 0; i < count; i++) // Чтение элементов в стэк

            tmp->push(Read()); 

      return *tmp;

}

template <class T>

int FWriter<T>::ReadInt() // Функция чтения числа из файла

{

      if(File==NULL) throw FileException("File is not opened");

      int tmp = 0; 

      if(binary)

      {

            File->read(reinterpret_cast<char*>(&tmp), sizeof(tmp));

      }

      else

      {

            *File >> tmp;

      }

      return tmp;

}

template <class T>

T* FWriter<T>::ReadArray(int count) // Чтение массива из файла

{

      if(File==NULL) throw FileException("File is not opened");

      T *arr = new T[count]; // Выделение памяти под массив 

      for(int i = 0; i < count; i++) // Чтение массива из файла

      {

            arr[i] = Read();

      }

      return arr;

}

template <class T>

void FWriter<T>::WriteArray(T *obj, int count) // Запись массива в файл

{

      if(File==NULL) throw FileException("File is not opened");

      WriteInt(count); // Запись количества элементов массива

      if(!binary) // Если запись небинарная, то вставить разделитель

            *File << " "; 

      for(int i = 0; i < count; i++) // Запись Объектов в файл

      {

            Write(obj[i]);

            if(!binary)

            if(i < count - 1) *File << " ";

      }

}

template <class T>

void FWriter<T>::WriteInt(int obj) // Запись числа в файл

{

      if(File==NULL) throw FileException("File is not opened");

      if(binary)

      {

            File->write(reinterpret_cast<char*>(&obj), sizeof(obj));

      }

      else

      {

            *File << obj;

      }

}

template <class T>

void FWriter<T>::Write(T obj) // Запись объекта в файл

{

      if(File==NULL) throw FileException("File is not opened");

      if(binary)

      {

            File->write(reinterpret_cast<char*>(&obj), sizeof(obj));

      }

      else

      {

            *File << obj;

      }

}

template <class T>

bool FWriter<T>::Open(const char *filename, ios_base::openmode mode = ios_base::in | ios_base::out) // Открытие файла

{

      int tmp = mode; // Проверка, является ли открытие бинарным

      tmp = tmp | ios_base::binary;

      binary = mode == tmp; 

      File = new fstream(); // Создание экземляра файлового потока

      File->open(filename, mode); // Открытие файла

      if(!*File) // Если файл не открыт, то генерация исключения

            throw FileException("Error opening file");

      return *File;

}

template <class T>

bool FWriter<T>::Close() // Закрытие файла

{

      if(*File) // Если файл открыт, то закрыть

      {

            File->close();

            return true;

      }

      return false;

}  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Stack.h:

#include <iostream>

#include "exception.h" 

using namespace std; 

template<class TYPE>

class qIterator; 

template<class TYPE>

struct qItem // Структура элементов стэка

{

      TYPE data;

      qItem *next;

};

template<class TYPE>

class Stack // Класс стэка

{

private:

      friend class qIterator<TYPE>; // Дружественный класс итератор

      qItem<TYPE> *first; // Указатель на первый элемент

public:

      Stack() { first = NULL; }

      void push(TYPE); // Вставить элемент

      void pop(); // Изъять элемент

      TYPE front(); // Получить первый элемент

      bool empty(); // Пустой ли стэк

      void clean(); // Очистить стэк

}; 

template<class TYPE>

class qIterator

{

private:

      qItem<TYPE> *current;

      Stack<TYPE> *qStack;

public:

      void toBegin(); // Поставить итератор в начало стэка

Информация о работе Информационная система по учету автомобилей