Автор: Пользователь скрыл имя, 05 Декабря 2011 в 16:04, курсовая работа
Язык С++ , появившийся в начале 80-х годов, не только универсален, как язык Си, но и является средством объектного программирования, новейшей методикой проектирования и реализации программ. Главной целью создателя языка, доктора Бьерна Страустрапа, было оснащение языка С++ конструкциями, позволяющими увеличить производительность труда программистов и облегчить процесс овладения большими программными продуктами.
ВВЕДЕНИЕ……………………………………………………………3
Постановка задачи……………………………………………5
Спецификация системы……………………………………..5
3. Структура входных и выходных данных………………………………….7
4. Диаграмма классов…………………………..……………………………..8
5. Описание классов………………………………...…………………..…....10
6. Алгоритмы по шагам и блок- схемы функций .…………………………13
7. Текст программы…………………………………………………………..15
8. Результаты работы………………………………………………………...34
ЗАКЛЮЧЕНИЕ………………………………………………………………….35
Список использованной литературы…………………………………………...36
{
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(reinter
}
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(reinte
}
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(reinte
}
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(); // Поставить итератор в начало стэка
Информация о работе Информационная система по учету автомобилей