Разработка программного комплекса на языке программирования С++ с использованием принципов объектно-ориентированного программирования

 

СОДЕРЖАНИЕ


Введение

1. ОПИСАНИЕ ПРОГРАММНОГО КОМПЛЕКСА

.1 Структура программного комплекса

.2 Модуль ClassFile.cpp

.2.1 Класс Pamiatnik

.2.2 Класс Zdanie

.2.3 Класс Kvartal

.2.4 Класс Square

.2.5 Класс Skulptura

.2.6 Класс Massiv_Pamiatnikov

.3 Модуль FunctionFile.cpp

.4 Модуль main.cpp

2. Описание работы программы по контрольному примеру

2.1 Описание процесса сортировки памятников

.2 Описание процесса поиска в массиве памятников

.3 Описание формирования статистики по памятникам

Заключение

Список использованных источников

Приложения


Введение


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

Заданием для курсовой работы является разработка программного комплекса на языке программирования С++ с использованием принципов объектно-ориентированного программирования.

Согласно индивидуальному заданию необходимо разработать программный комплекс для ведения учёта памятников города. Множество памятников представляют собой массив, элементами которого являются любые из следующих четырех типов памятников: здание, квартал, площадь, скульптура.

Для всех памятников имеются как общие данные, так возможно и специфические.

Общие данные содержат следующие поля:

)год создания (integer);

)название (string);

)годовая стоимость расходов на содержание (longint);

По заданию программный комплекс должен быть способен выполнять следующие действия:

·Загрузка массива памятников из текстового файла в формате csv (файл в котором данные разделённые символом «;», причём одна строка задаёт один элемент массива;

·Сохранения массива памятников в файл формата csv;

·Просмотр всех элементов массива (один элемент на одной строке);

·Добавление новых элементов в массив как вручную, так и из заданного файла;

·Удаление элементов из массива;

·Получение трёх отчётов;

При выполнении работы необходимо придерживаться следующих ограничений:

·Обязательно использовать объектно-ориентированный подход при проектировании приложений;

·Все поля классов, описывающих элемент множества данных должны быть private;

·Год создания, название памятника и стоимость расходов на содержание включить в базовый класс. Разработать наследуемые классы для здания, квартала, площади и скульптуры.

·Классы для элементов множества данных должны содержать конструкторы следующих видов: а) конструктор без параметров, очищающий переменные объекта класса; б) конструктор, инициализирующий все переменные класса, значениями, заданными в качестве параметра; в) конструктор приведения из строки символов (поля класса, разделенные символом ";");

·В наследуемых классах переопределить хотя бы один метод базового класса;

·Интерфейс разработанных классов продемонстрировать в форме консольного приложения;

·Выводить отчеты в виде таблицы (одна запись - одна строка таблицы).


1. ОПИСАНИЕ ПРОГРАММНОГО КОМПЛЕКСА


1.1Структура программного комплекса


Программный комплекс состоит из следующих модулей:

? ClassFile.cpp;

? FunctionFile.cpp;

? main.cpp.

? global.h.

На рисунке 1 показана схема подключения модулей.


Рисунок 1 - Схема подключения модулей


Модуль ClassFile.cpp содержит описание всех используемых в программе классов. А точнее базовый класс памятника и четыре его наследника (здание, квартал, площадь и скульптура), а также класс оболочка, который содержит динамический массив и все функции для работы с массивом памятника (добавление, удаление, сортировка и т.д.) Модуль FunctionFile.cpp содержит различные вспомогательные функции. Это и вывод на экран различных частей таблицы и вывод различных меню, а также выбор имени файла. Модуль main.cpp содержит точку входа в программу, в которой находится оператор switch для выбора необходимых действий.

Файл global.h является связующим звеном, где описаны все стандартные библиотеки и функции из файла FunctionFile.cpp


1.2Модуль ClassFile.cpp


В модуле описаны следующие классы:

? Pamiatnik;

? Zdanie;

? Kvartal;

? Square;

? Skulptura;

? Massiv_Pamiatnikov.

Иерархия классов представлена на рисунке 2.


Рисунок 2 - Иерархия классов


1.2.1 Класс Pamiatnik

Класс Pamiatnik является базовым классом для всех памятников. Именно поэтому он содержит все общие поля и все общие методы. Ко всему прочему данный класс считается абстрактным, т.е. нельзя непосредственно создавать экземпляры этого класса. Данный класс предназначен только как шаблон для создания других классов памятника. Однако, несмотря на это, он содержит в себе множество методов, которые могут вызывать наследники.

Класс Pamiatnik содержит следующие поля:

Set_God - Год основания памятника;

Set_Stoimost - Стоимость расходов на содержание памятника;

Set_Name - Название памятника;

Type - Тип памятника. Используется для того, чтобы каждому памятнику присвоить соответствующее значение в данном поле. Значение именно из этого поля будет использоваться каждым классом, когда он будет создавать строковое представление всех своих ключевых полей для сохранения в файл.

prev - указатель на предыдущий памятник в массиве.

next - указатель на следующий памятник в массиве.

Поля prev и next предназначены для построения динамического массива. Принцип динамического массива заключается в том, что все его элементы не обязаны находиться в памяти последовательно друг за другом. Однако все элементы массива должны быть выстроены в определённую последовательность. При такой концепции сам массив должен знать элемент, который является первым, чтобы именно с него начать работу с массивом, а также должен знать последний элемент, для того, чтобы знать, куда добавлять следующий элемент. Таким образом, с помощью полей prev и next каждый памятник точно знает своё место в массиве.

При работе с динамическими массивами, элементами которых являются большие структуры данных, можно очень быстро управлять элементами. Например, если необходимо удалить элемент массива, то достаточно только будет изменить указатель у предыдущего элемента и у следующего элемента, и при этом не образуется пустой ячейки, как это было бы при работе со статическим массивом.

Так как все ключевые поля являются закрытыми, то необходимо в поле public создать методы для записи и чтения данных в/из этих ключевых полей. Методы для записи имеют в своём названии слово Set, а методы для получения значения - Get.

В связи с тем, что в программе необходимо предусмотреть возможность пользователю добавить новый памятник, в том числе и вручную. Поэтому класс Pamiatnik содержит метод Vvod. С помощью данного метода все наследники будут делегировать полномочия родителю по вводу общих ключевых полей, которые также описаны в родителе.

Метод Draw в классе Pamiatnik является абстрактным. Дело в том, что класс Pamiatnik не будет непосредственно создаваться, поэтому и выводить свои данные ему незачем. А вот наследники обязаны будут выводить свои данные на экран. Поэтому в базовом классе данный метод является абстрактным.

Метод ToString также является абстрактным. Все наследники обязаны будут его реализовать. Сам же метод будет создавать строку, для записи в файл csv на основании ключевых полей.


1.2.2 Класс Zdanie

Класс описывает тип здание. Фактически здание наследует все поля от Pamiatnik и добавляет два поля visota и adress. В эти поля заносятся высота памятника и адрес памятника. По правилам, данный класс должен определить все виртуальные классы. Класс Zdanie знает, как себя отобразить, поэтому реализует метод Draw и ToString.

Так как конструкторы не наследуются, то в соответствии с заданием нужно реализовать три конструктора. Один конструктор без параметров, второй с пятью параметрами (значениями для заполнения ключевых полей). Данный конструктор просто делегирует обязанности по заполнению ключевых полей базовому классу Pamiatnik.

Третий конструктор - это конструктор, в которую передаётся лишь одна строка в формате csv. Данный конструктор будет вызываться во время загрузки данных из файла csv. Все данные для одного элемента массива разделяются точкой с запятой. В данном конструкторе входная строка анализируется и раскладывается на ключевые поля.


1.2.3 Класс Kvartal

Класс Kvartal расширяет базовый класс ещё одним ключевым полем - Ploschad. В данное поле заносится строка, в которой указывается размер площади памятника, который есть в квартале. Поле Ploschad является private, именно поэтому для доступа к нему необходимо создать метод set и get.

Также реализуются методы Vvod, Draw и ToString, а также три конструктора.


1.2.4 Класс Square

Данный класс ничем не отличается от класса Ploschad. В данном классе реализованы все те же поля, что и в предыдущем классе Ploschad.


1.2.5 Класс Skulptura

Класс Skulptura расширяет базовый класс ещё одним ключевым полем - Avtor. В данное поле заносится строка, в которой указывается имя автора создавшего скульптуру. Поле Avtor является private, именно поэтому для доступа к нему необходимо создать метод set и get.

Также реализуются методы Vvod, Draw и ToString, а также три конструктора. Все классы наследники от класса Pamiatnik выводят себя на экран в общую таблицу, т.е. все общие ключевые поля выводятся каждый в свою колонку, а все отличающиеся в поле примечание.

1.2.6 Класс Massiv_Pamiatnikov

Класс оболочка, которая содержит методы для работы с массивом строк. Так как это класс, то для него должен быть хоть один конструктор. В конструкторе нужно будет проинициализировать только два поля, которые содержит данный класс.

Поле first предназначено для того, чтобы хранить адрес первого памятника в списке. Благодаря этому полю массив знает, с какого элемента необходимо, например, отображать массив или искать какой-то памятник. Поле last предназначено для хранения адреса последнего в массиве памятника. Благодаря этому полю добавление нового элемента в массив осуществляется довольно быстро.

Метод Add_Pamiatnik(Pamiatnik* p) предназначен для добавления памятника в массив. Для добавления в массив необходимо, чтобы памятник уже был создан, т.е. для него была выделена память. Как уже ранее упоминалось, сам массив не имеет своей памяти для расположения в ней памятников, т.к. класс массива является оболочкой, которая содержит методы для управления массивом. В данный метод достаточно передать адрес любого памятника, и он войдёт в состав динамического массива на последнее место.

Метод Del_ Pamiatnik(char* name) предназначен для удаления памятника, точнее данный метод только ищет в массиве адрес памятника, номер которого передан в качестве параметра. И если памятник с указанным номером будет найден, то его адрес передаётся в другую функцию - Del. В функции Del сначала задаётся уточняющий вопрос о том, нужно ли на самом деле удалять памятник из массива. И если пользователь подтвердит удаление, то запускается механизм удаления. Дело в том, что при удалении всего одного памятника может быть затронуты сразу все памятники. Так как все памятники расположены последовательно, то при удалении второго памятника, необходимо изменить указатели, чтобы первый памятник указывал сразу на третий, а третий на первый. Только после этого можно будет физически удалить памятник. Метод ShowAll предназначен для того, чтобы вызовом одной функции вывести сразу все памятники, зарегистрированные в массиве. В данной функции не только выводятся все памятники, но и все элементы таблицы (шапка таблицы, подчёркивание таблицы).

Метод SaveFile предназначен для сохранения в файл всех памятников, зарегистрированных в массиве. Здесь происходит открытие потока для записи в файл и каждый памятник представив все свои ключевые поля в виде одной строки, записывает в файл.

Метод LoadFile читает памятники из файла. Когда будет прочитана одна очередная строка, содержащая все поля памятников определённого типа, то сначала нужно выделить память для этого памятника, а затем на основании прочитанной строки заполнить все ключевые поля. А лишь затем вызывается метод добавления памятника в массив.

Для создания памятника предназначен специальный метод:

Pamiatnik * Create Pamiatnik (int type, char* stroka)

Главное, что данная функция возвращает указатель на созданный ей памятник. Для того, чтобы функция знала какой конкретный памятник нужно создавать - предназначен параметр type. Кроме всего прочего в функцию передаётся строка, в которой находятся все ключевые поля для создания памятника.

Метод Sort(int pole) предназначен для сортировки всех памятников в массиве. Причём можно сортировать по разным полям. Для указания поля для сортировки предназначен параметр pole. Сортировка динамического массива производится крайне быстро, так как нет необходимости менять местами большие объёмы памяти, достаточно лишь изменить два поля prev и next для каждого из памятников.

Сортировка производится по методу «пузырька», т.е. обмениваются местами рядом стоящие элементы. Однако как ранее упоминалось, нет необходимости физически изменять расположение памятников в памяти. Поэтому при обмене, возможно, потребуется изменить поля сразу 4-х памятников.

Метод Find(char* FindStroka) предназначен для поиска памятника по каким-нибудь данным. При этом не важно, по каким полям нужно искать, так как функция ищет сразу по всем. Дело в том, что мы можем получить все поля в виде одной строки. Именно в этой строке мы и будем искать искомую строку FindStroka. Можно искать как цифры, так и текст. Все памятники удовлетворяющие критерии поиска выводятся на экран.

Метод Statistika предназначен для вывода статистики по каждому типу памятника в отдельности и для всех сразу. Т.е. памятники группируются по типу и выводятся на экран. После каждой группы выводится статистика по году создания памятника (старый памятник или новый и т.д.). А после того как данные по группам будут выданы - появится общая статистика по всем памятникам.

программирование памятник сортировка объектный

1.3Модуль FunctionFile.cpp


Модуль FunctionFile.cpp содержит вспомогательные функции для работы программы.

Функция MainMenu предназначена для вывода на экран главного меню, а также для ввода пункта главного меню.

Главное меню состоит из следующих пунктов:

- Загрузить памятники из файла csv

- Сохранить памятники в файл csv

- Просмотреть все памятники

- Добавить новый памятник

- Удалить памятник

- Сортировать памятники

- Найти памятник

- Групповой отчет

- Выход из программы

Если пользователь введёт неверный пункт, то программа сообщит об ошибке и попросит ввести пункт меню заново.

Функция MenuTypePamiatnik предназначена для вывода меню и выбора типа памятника. Например, когда пользователь создаёт памятник, то у него спрашивается, какого типа он желает создать памятник. Данная функция содержит следующие пункты меню:

- Здание

- Квартал

- Площадь

- Скульптура

- Вернуться в главное меню

Функция type_sort выводит меню для выбора поля, по которому нужно будет сортировать массив памятников. Данная функция содержит следующие пункты меню:

- Имя

- Год основания

- Стоимость

- Вернуться в главное меню

Функции ShowShapkaTabl и ShowPodcherkTabl выводят на экран шапку таблицы и подчёркивают таблицу соответственно. Данные функции вызываются из разных мест, поэтому было решено вынести их в отдельные функции.

Функция char* GetFileName получает имя файла, например, при сохранении или загрузки файла.

Функция ShowNameGroup выводит на экран название типов памятников над шапкой таблицы.


1.4 Модуль main.cpp


Данный модуль содержит точку входа в программу (метод main). Основная задача метода main - это управлять всей программой. Принцип управления программой заключается в теории конечных автоматов. Главная идея данного принципа заключается в том, что программа может находиться только в одном состоянии. Например, вывод главного меню, добавление нового элемента - это разные состояния. Каждому состоянию будет соответствовать уникальное число. Также необходима одна переменная (menu) для того, чтобы пользователь мог выбрать пункт меню и его выбор отразился на данной переменной.

Далее показан упрощённый принцип, реализующий принцип конечных автоматов:

Switch(menu)

Case 1: // Делаем всё, что касается загрузки данных из файла

Case 2: // делаем действия, чтобы просмотреть все данные

// и так далее

Если необходимо какое-то действие детализировать, то мы можем легко добавлять дополнительные пункты меню. Например, если мы выберем пункт меню 6, то у нас программа уточняет, какой конкретно памятник необходимо отсортировать. Теперь все вложенные элементы будут двузначными, например, 61,62 и т.п. И так можно делать вложения достаточно глубоко.

Также в данном модуле есть функция CreatePamiatnik, которая вызывается при выборе пункта меню добавления нового памятника. Для создания памятника необходимо указать только тип создаваемого памятника, а данные для памятника должен будет пользователь ввести вручную.


2. Описание работы программы по контрольному примеру


2.1 Описание процесса сортировки памятников


Запускаем программу Kursovoy.exe. Результат отображён на рисунке 3.


Рисунок 3 - Запуск программы


В программе предусмотрено при запуске программы загрузка файла с данными по умолчанию. Данное действие аналогично выбору пункта меню 1 и ввода имени файла с данными.

Выполним пункт 3 для просмотра загруженных данных. Результат представлен на рисунке 4.


Рисунок 4 - Результат просмотра данных


Как видно из рисунка 4 данные не отсортированы не по одному из полей. Поэтому сортировать можно по любому полю. Для продолжения нажимаем клавишу Ввод, затем выбираем пункт меню 6. Результат показан на рисунке 5.


Рисунок 5 - Меню для выбора поля сортировки


Например, сортировать будем по полю «Год основания», поэтому выбираем пункт меню 2. Результат сортировки показан на рисунке 6.


Рисунок 6 - Результат сортировки по полю Год основания


Как видно на рисунке 6 все записи были сортированы по полю «Год основания». Далее достаточно нажать на клавишу Ввод и снова отобразится главное меню.


2.2 Описание процесса поиска в массиве памятников


Довольно часто приходится в массиве данных производить поиск. Разработанный программный комплекс позволяет производить поиск в массиве. Для этого необходимо в главном меню (рисунок 3) выбрать пункт меню 7. При этом отобразится строка, в которой нужно будет ввести искомый текст (рисунок 7).


Рисунок 7 - Требование ввести искомую строку


Далее достаточно ввести какой-то ключ для поиска, например, мы введём такую строку: «43». Тогда, учитывая, что первоначально в массиве находятся данные, представленные на рисунке 6, мы получим результат, представленный на рисунке 8.


Рисунок 8 - Результат выполнения поиска строки в массиве


Как видно на рисунке 8, у первого памятника расходы как раз составляют 433000, а у второго памятника год составляет 2043, что также имеет в своей основе 43. Остальные записи не удовлетворяют критериям поиска, поэтому и не были отображены.


2.3 Описание формирования статистики по памятникам


Для отображения статистики по памятникам, необходимо чтобы данные уже были загружены в память, т.е. массив существовал. Предполагаем, что у нас загружены исходные данные, отображённые на рисунке 6. Тогда для вывода статистики по памятникам необходимо в главном меню выбрать пункт 8. В результате чего на экране появится статистика по памятникам. Результат вызова статистики по памятникам представлен на рисунке 9.


Рисунок 9 - Вывод статистики по памятникам

Заключение


В процессе курсовой работы разработана программа «Kursovoy.exe».

В программе:

? использованы принципы объектно-ориентированного программирования;

? разработаны различные меню, помогающие пользователю работать с программой;

? описаны классы согласно варианту;

? можно все памятники в массиве отсортировать;

? реализован поиск памятников, в которых встречается упоминание подстроки которую введёт пользователь;

? можно вывести развёрнутую статистику для конкретного типа памятников и статистику для всех памятников одновременно;

? все методы классов наглядно протестированы;

В результате работы: были закреплены знания объектно-ориентированного программирования; приобретены навыки разработки многомодульного приложения.

Курсовая работа в полной мере отражает поставленную задачу.


Список использованных источников


  1. Павловская, Т. А. С/С++. Программирование на языке высокого уровня [Текст] : учеб. пособие / Т. А. Павловская. - СПб.: Питер, 2010. - 450 с.
  2. Страуструп, Б. Язык программирования С++ [Текст] : учеб. пособие / Б. Страуструп. - М. : Бином-Пресс, 1991. - 313 с.
  3. Подбельский, В.В. Объектно-ориентированное программирование [Текст] : учеб. пособие / В. В. Подбельский. - М. : Программирование, 2002. - 279 с.
  4. Тагин, М.А. Стандартная библиотека функций [Текст] : учеб. пособие / М. А. Тагин. - М. : Программирование, 2002. - 265 с.

ПРИЛОЖЕНИЯ


Приложение А


#include <stdio.h>

#include <conio.h>

#include <iostream>

#include "locale.h"// для использования русской кодировки

#include <string>

#include <fstream>ShowShapkaTabl(void);ShowPodcherkTabl(void);MainMenu (void);MenuTypePamiatnik(void);* GetFileName(void);type_sort(int k);ShowNameGroup(int i);// вызов функции отображения названия группы памятника

#include "global.h"Pamiatnik// описываем класс Памятник

{:God_osn;Name[20];int Stoimost;Type;:* prev;* next;()

{_osn = 0;(Name,"no name");= 0;=NULL;=NULL;

}(int god_osn, char* name, long int stoimost)

{>God_osn = god_osn;(Name,name);>Stoimost = stoimost;=NULL;=NULL;

}Set_God(int god)

{error=3;// общая ошибка при вводе года(god>2050)

{("Вы ввели год основания памятника который ещё не наступил\n");=1;

}(god<1000)

{("Вы ввели слишком маленький год основания памятника\n");=2;

}

{>God_osn = god;=0;

}error;

}

Set_Stoimost(long int stoim)

{error=3;// общая ошибка при вводе года(stoim>5000000)

{("Введена большая стоимость расходов на содержание памятника\n");=1;

}(stoim<200000)

{("Введена слишком маленькая стоимость расходов на содержание памятника\n");=2;

}

{>Stoimost = stoim;=0;

}error;

}Set_Name(char* name)

{error=3;len;= strlen(name);(strcmp(name,"")==0) //Функция сравнения

{("Ошибка! Вы не ввели название памятника\n");= 1;

}(len>20)

{("Ошибка! Вы ввели слишком длиное название памятника (<20) \n ");= 2;

}

{(this->Name,name);= 0;

}error;

}Get_God(void)

{God_osn;

}int Get_Stoimost(void)

{Stoimost;

}Get_Type()

{Type;

}* Get_Name(void)

{Name;

}void Vvod()

{god_osnov;name[40];int stoimost;

{("Введите год основания памятника: ");(stdin);("%d", &god_osnov);

} while(Set_God(god_osnov)>0);

{("Введите название памятника:");(stdin);(name);

}while(Set_Name(name)>0);

{("Введите стоимость расходов на содержание памятника: ");(stdin);("%d", &stoimost);

}while(Set_Stoimost(stoimost)>0);

}void Draw(void)=0;char* ToString(void)=0;

};Zdanie{...}Kvartal{...}Square{...}Skulptura{...}

// класс массива памятнмков. Содержит оболочку для управления массивомMassiv_Pamiatnikov

{* first;// указывает на первый памятник в массиве* last;// указывает на последний памятник в массивеKoll;// количество памятнмков в массиве

// функция для удаления конкретного памятника, которая приходит как параметрDel(Pamiatnik* p)

{i;::cout<<"Вы действительно хотите удалить памятник "<<p->Get_Name()<<"?"<<std::endl;::cout<<"1 - ДА"<<std::endl; // Выводим меню для подтверждения удаления::cout<<"2 - НЕТ"<<std::endl;::fflush(stdin);::cin>>i;// принимаем выбор пользователя(i==1)//если пользователь подтвердил удаление, то

{(p == this->first)// если мы удаляем первый элемент, то

{>first = p->next;// первым становится следующий

}

{>prev->next = p->next;// поля next для предыдущего элемента необходимо привязать к следующему элементу

}(p == this->last)// если мы удаляем последний элемент, то

{>last = p->prev;// последним становится предыщущий

}

{>next->prev = p->prev;// поле prev для следующго элемента необходимо привязать к предыдущему элементу

}p;// удаляем элемент-;// уменьшаем количество элементов::cout<<"Памятник удален"<<std::endl;

}

}:

// конструктор без параметров_Pamiatnikov()

{= NULL;// во все поля записываются значения по умолчанию= NULL;=0;

}

//Функция для добавления памятника в массивAdd_Pamiatnik(Pamiatnik* p){...}

// Функция для удаления памятника из массиваDel_Pamiatnik(char* name){...}

// Функция отображает все памятники, находящиеся в массивеShowAll()

{* temp;// объявляем временый указатель на памятник для вывода=first;// первым выводим тот памятник, на который указывает first(temp == NULL)// если окажется, что в массиве нет памятников, то

{("В массиве нет памятников\n");;// выходим из функции

}();// отображаем шапку

{>Draw();// выводим первый памятник= temp->next;// говорим, что потом нам нужно будет выводить тот памятник, на который ссылается поле next текущего памятника

} while (temp!=NULL);();// подчркиваем таблицу

}

// функция для сохранения массива в файлSaveFile(void)

{* temp;// объявляем временый указатель на памятник для вывода=first;// первым используем тот памятник, на который указывает first(temp == NULL)// если окажется, что в массиве нет памятников, то

{;// выходим из функции

}

// если есть данные для сохранения, то::ofstream fout;// создаём поток для вывода данных в файл.open(GetFileName());// отрываем файл, который первоначально получаем специальной функцией

{<<temp->ToString();// записываем памятники(temp->next != NULL)<<"\n";= temp->next;// говорим, что потом нам нужно будет выводить тот памятник, на который ссылается поле next текущего памятника

} while(temp != NULL);.close();// закрываем файл::cout<<"Все памятники успешно сохранены"<<std::endl;

}

// функция для загрузки массива из файлаLoadFile(char* FileName)

{temp[100];// временная строка, куда мы будем получать строку из файла* a;// указатель для работы со строкойtype;// тип памятника* f=fopen(FileName,"r");// открываем файл для чтения(f==NULL)// если файл не открылся, то

{::cout << "Ошибка чтения файла" << std::endl;;// выводим сообщение об ошибки и выходим из функции

};(!feof(f))// находимся в цикле пока не достигнем конца файла.

{(temp,100,f);// читаем очередную строку=strstr(temp,";");// получаем адрес первого вхождения символа ';' в исходную строку

*a=0;// там где символ ';' необходимо установить признак конца строки=atol(temp);// теперь в первоначальной строке осталось только число - его и записываем в соответствующее поле=a+1;// изменяем указатель исходной строки, чтобы можно было дальше продолжить работу>Add_Pamiatnik(this->CreatePamiatnik(type,a));

}(f);// закрываем файл.::cout<<"Все памятники были прочитаны из файла "<<FileName<<std::endl;

}

// функция создаёт памятник из файла* CreatePamiatnik(int type, char* stroka)

{(type==1)// Это здание

{* z = new Zdanie(stroka);z;

}(type==2)// Это квартал

{* k = new Kvartal(stroka);k;

}(type==3)// Это площадь

{* s = new Square(stroka);s;

}(type==4)// Это скульптура

{* sk = new Skulptura(stroka);sk;

}

}

// функция для сортировки памятников в массивеSort(int pole){...}

// Поиск элементов по заданной строкеFind(char* FindStroka){...}

// Функция выводит статистику по всем памятникамStatistika(void){...}


Приложение Б


#include "global.h"

#include "ClassFile.cpp"_Pamiatnikov MP;* CreatePamiatnik(int type)

{(type==1)

{* z = new Zdanie();>Vvod();z;

}(type==2)

{* k = new Kvartal();>Vvod();k;

}(type==3)

{* s = new Square();>Vvod();s;

}(type==4)

{* sk = new Skulptura();>Vvod();sk;

}

}main(void)

{(LC_CTYPE,".1251"); // включаем русскую кодировку в консоли

/*Zdanie* z1=new Zdanie(1901,"Muzei",32000000,200,"Suhogo 40");* k1=new Kvartal(1954,"Kitaiskiy",30000000,1230000,"Polesskaiy 43");* s1=new Square(1887,"Lenina",5000000,200000,"Pr_Lenina 12");* sk1=new Skulptura(1443,"Ahiles",500000,20,"Da Vinchi");.Add_Pamiatnik(z1);.Add_Pamiatnik(k1);.Add_Pamiatnik(s1);.Add_Pamiatnik(sk1);*/.LoadFile("D:\\nick.csv");menu;=9;

{(menu)

{1:MP.LoadFile(GetFileName());("Для продолжения нажмите любую клавишу\n");();=9;;2: MP.SaveFile();("Для продолжения нажмите любую клавишу\n");();=9;;3: MP.ShowAll();("Для продолжения нажмите любую клавишу\n");();=9;;4: int type;("Выбирите тип добавляемого памятника\n");= MenuTypePamiatnik();.Add_Pamiatnik(CreatePamiatnik(type));("ПАМЯТНИК БЫЛ ДОБАВЛЕН\n");("Для продолжения нажмите любую клавишу\n");();=9;;5: char name[20];("Введите имя удаляемого памятника: ");(stdin);(name);.Del_Pamiatnik(name);("Для продолжения нажмите любую клавишу\n");();=9;;6: menu = type_sort(menu);;61:62:63: MP.Sort(menu % 10);("Для продолжения нажмите любую клавишу\n");();=9;;69:=9;;7: printf("Введите строку поиска: ");(stdin);(name);.Find(name);("Для продолжения нажмите любую клавишу\n");();=9;;8: MP.Statistika();("Для продолжения нажмите любую клавишу\n");();=9;;9: menu = MainMenu();;

}

} while (menu!=0);();

}


СОДЕРЖАНИЕ Введение 1. ОПИСАНИЕ ПРОГРАММНОГО КОМПЛЕКСА .1 Структура программного комплекса .2 Модуль ClassFile.cpp .2.1 Класс Pamiatnik .2

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ