Диплом, курсовая, контрольная работа
Помощь в написании студенческих работ

Управление массивом указателей средствами объектно-ориентированного программирования

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Пункт меню номер 8 — «Poisk Minimal’nou godovaya stoimost'» предусматривает поиск минимального элемента по годовой стоимости расходов на содержание в заданном массиве. Программа выдаст ошибку, если записи не были загружены во время работы программы или не были введены, рисунок 2.9. В противном случае она выполнит поиск минимального элемента и выведет его на экран. Так как в программе… Читать ещё >

Управление массивом указателей средствами объектно-ориентированного программирования (реферат, курсовая, диплом, контрольная)

Министерство образования Республики Беларусь Учреждение образования

«Гомельский государственный университет имени Франциска Скорины»

Заочный факультет Кафедра автоматизированных систем обработки информации Управление массивом указателей средствами объектно-ориентированного программирования Курсовой проект по дисциплине «Объектно-ориентированное программирование»

Вариант 4

Исполнитель студент группы АС-32 Демиденко Е.А.

Руководитель Давыдов В.С.

Гомель 2015

Содержание Введение

1. Описание программного комплекса

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

1.2 Описание модуля mod1. cpp

1.3 Описание модуля mod2. cpp

2. Описание работы программы по контрольному примеру Заключение Список использованных источников Приложение А

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

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

Тема курсового проекта — «Управление массивом указателей средствами ООП».

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

В программном комплексе необходимо обеспечить реализацию следующих запросов к массиву:

Загрузка массива из текстовых файлов в форматах csv или ini.

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

Добавление новых элементов в конец массива из заданного файла.

Удаление элементов массива.

Сохранение массива в заданном файле в формате csv или ini.

Получение трех отчетов.

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

1. Описание программного комплекса

Программа, написанная для выполнения поставленной задачи, состоит из двух модулей. Первый модуль mod1. cpp — это модуль, который содержит создание меню и используемые в программе функции. Второй модуль — mod2. cpp, содержит классы и методы работы с данными.

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

Необходимо разработать программный комплекс по обработке заданного множества данных. Множество данных — памятники города, представляет собой массив указателей.

Информационная система должна осуществлять хранение данных о предметной области в текстовом файле формата *.csv, загрузку начальных данных из текстового файла, ввод, хранение, удаление, сохранение и обработку.

Данные о популярных телепередачах должны содержать обязательные поля:

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

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

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

вид: квартал, площадь, здание, скульптура.

Исходные данные о популярных телепередачах хранятся в файле Pamyatniki. csv (рисунок 1.1).

Рисунок 1.1 — Текстовый файл с исходными данными

Главная процедура программы выполняет обработку данных согласно выбранным пунктам меню. Главная процедура представлена циклом с выходом по выбору определенного пункта меню. Так же в главном модуле объявлены все переменные согласно классам и необходимые для правильного функционирования программы.

1.2 Описание модуля mod1. cpp

Модуль mod1. cpp содержит в себе все классы, которые необходимы для работы. В классах описаны методы, для дальнейшей работы с данными. По заданию, один, или несколько методов должны быть переопределены в классах-потомках, что и представлено в программе.

Ниже приведен пример описания класса, функций и методов используемых в нём.

Пример:

class Kvartal: public Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

string gr1;

public:

Kvartal ()

{

god=0;

name="none" ;

god_cena=0;

gr1="Kvartal" ;

}

Kvartal (int god, string name, long int god_cena)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

}

virtual int getVid ()

{

return 1;

}

virtual string getGr ()

{

return gr1;

}

};

Класс предок — Pamyatniki. Классы потомки: Kvartal, Ploschad, Zdanie, Skulptura.

1.3 Описание модуля mod2. cpp

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

Функция void Line () отвечает за прорисовку полей таблицы. Точнее она выводит разделительную горизонтальную линию таблицы.

void Line ()

{

cout << «-» ;

cout.fill ('-');

cout<<<" -" << endl;

cout.fill (' ');

}

Функция void Main (void) определяет главную программу, содержащую первый выполняемый оператор. Слово void предназначено для указания того, что функция не возвращает значения или не имеет значений, передаваемых в нее.

Также этот модуль содержит описание всех пунктов меню и процедур: открытие, добавление, просмотр, сохранение, удаление, поиск. Выбор пункта меня осуществляется при помощи использования оператора выбора Case.

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

После компилирования в папке с классами появляется исполняемая программа. При запуске появляется меню со списком действий. Так как программа зациклена, мы будем возвращаться в меню до тех пор, пока не выберем для выхода соответствующий пункт меню. Для нас это 10-ый пункт с номером «0». После ввода цифры «0» программа завершит работу.

Рисунок 2.1 — Главное меню

При выполнении первого пункта меню «Novaya BD» создается новая база данных, согласно варианту. Далее в диалоговом режиме мы производим ввод данных и после ввода, выбрав пункт 2 запроса о продолжении, выходим из процедуры ввода данных, рисунок 2.2.

Рисунок 2.2 — Создание новой базы данных

Так как в программе предусмотрена процедура для вывода по номеру элемента, пункт меню для просмотра всех элементов мы назвали «Prosmotr dannyx» — полный просмотр. После выбора этого пункта меню на экране появится таблица, в которой будут содержаться данные, хранящиеся в памяти. На рисунке 2.3 представлен результат работы этого пункта меню.

Рисунок 2.3 — Просмотр данных

В данной процедуре так же предусмотрена проверка. Если в памяти данные не хранятся, то на экран будет выведено соответствующее сообщение, как представлено на рисунке 2.4.

Рисунок 2.4- Сообщение об ошибке

После создания новой базы данных есть возможность добавления данных в ее конец. Эта функция представлена процедурой, вызываемой шестым пунктом меню — «Dobavlenie dannyx». На рисунке 2.5 представлена работа данной процедуры и добавление новых данных в конец текущего массива.

Рисунок 2.5 — Добавление данных

Просмотрим результат с помощью предыдущего пункта меню, рисунок 2.6.

Рисунок 2.6 — Просмотр результата добавления

Если вы не хотите просматривать весь массив информации, но знаете номер необходимой вам записи, то вы можете воспользоваться седьмым пунктом меню — «Poisk po nomery». Он вызывает процедуру, которая выполняет переход на запись с введенным номером. Результат работы представлен на рисунке 2.7.

Рисунок 2.7 — Поиск элемента по порядковому номеру

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

Рисунок 2.8- Поиск элемента

Пункт меню номер 8 — «Poisk Minimal’nou godovaya stoimost'» предусматривает поиск минимального элемента по годовой стоимости расходов на содержание в заданном массиве. Программа выдаст ошибку, если записи не были загружены во время работы программы или не были введены, рисунок 2.9. В противном случае она выполнит поиск минимального элемента и выведет его на экран.

Рисунок 2.9 — Ошибка отсутствия записей

Результат поиска представлен на рисунке 2.10.

Рисунок 2.10 — Поиск минимальной годовой стоимости

Процедура «Poisk Maximal’nou godovaya stoimost'» работает аналогично предыдущей с той лишь разницей, что ищет не минимальный, а максимальный элемент в заданном массиве данных, рисунок 2.11. Обработка ошибок такая же, как и в предыдущем пункте меню.

Рисунок 2.11 — Поиск максимальной годовой стоимости

Введенные данные мы можем сохранить на компьютер в файле Pamyatniki. csv, которые затем сможем открыть с помощью, например, Microsoft Excel. Для сохранения выбираем пункт меню «Sohranit v fail». Программа выдаст сообщение об успешном выполнении рисунок 2.12.

Рисунок 2.12 - Удачное сохранение в файл

Для того чтобы удалить данные из таблицы необходимо выбрать четвертый пункт меню — «Ydalenie vsex dannyx». После выбора этого пункта пользователю будет задан вопрос: представленный на рисунке 2.13 и вся информация из файла будет удалена. Это можно увидеть, выбрав пункт «5 — Prosmotr dannyx», рисунок 2.14.

Рисунок 2.13 - Подтверждение удаления

На рисунке 2.14 мы видим, что удаление прошло успешно.

Рисунок 2.14 - Проверка удаления всех данных

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

При выборе пункта меню «Otkrit fail» программа будет искать соответствующий файл и откроет его для чтения, после чего скопирует данные в память и создаст множество данных, к которым в последующем можно будет обратиться выбирая другие пункты меню. Выбираем данный пункт меню и получаем данные из файла. С помощью 5-го пункта можно просмотреть данные, рисунок 2.15

Рисунок 2.15 - Успешное открытие

Заключение

программный текстовый файл база

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

Загрузка данных из источника (файла формата *.CSV).

Просмотр всех элементов.

Добавление новых элементов.

Удаление элементов.

Сохранение в файл (источник).

Получение отчетов (поиск, минимальное, максимальное).

В процессе выполнения данной курсовой работы были приобретены и закреплены навыки в работе с C++. Особенно было уделено внимание работе с классами и объектами класса. Детальному освоению процедур загрузки из файла, добавления, просмотра, удаления, сохранения, поиска.

Полученные знания помогли эффективно подойти к выполнению поставленной задачи.

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

Березин, Б. И. Начальный курс С и C++ / Б. И. Березин; под ред. Ю. М. Черкасова. — М.: ИНФРА-М, 2001.

Бондарев, В. М. Основы программирования / В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. — Харьков: Фолио, Ростов н/Д: Феникс, 1997.

Вирт, Н. Алгоритмы и структуры данных / Н. Вирт. — М.: Мир, 1989.

Керниган, Б. Язык программирования Си / Б. Керниган, Д. Ритчи; Пер. с англ. — М.: Финансы и статистика, 1992.

Страуструп, Б. Язык программирования С++ 3-е изд. / Б. Страусруп; Пер. с англ. — М.: «Невский Диалект», 1999 г.

Шилдт, Г. А. С++ Базовый курс / Г. А. Шилдт. — М.: Диалектика, 2010.

Приложение А

Код программы Модуль mod1. cpp

#pragma once

#include

#include

#include

#include

#include

#include

#include

#include

#include «mod1.cpp»

using namespace std;

void Line ()

{

cout << «-» ;

cout.fill ('-');

cout<<<" -" << endl;

cout.fill (' ');

}

void main (void)

{

Pamyatniki prod, *tek;

Kvartal z1;

Ploschad z2;

Zdanie z3;

Skulptura z4;

int g;

string n, s;

long int gc;

int a, i, k, num, ans, kol=0, min, vsp1;

list spis;

list:iterator pos, vsp;

while (1)

{

// myMenuShow ()

system («cls»);

cout<<" /——————————————————————/n" ;

cout <<< «|1 — Novaya BD» <<" |" << endl;

cout <<< «|2 — Otkrit fail» <<" |" << endl;

cout <<< «|3 — Sohranit v fail» <<" |" << endl;

cout <<< «|4 — Ydalenie vsex dannyx» << «|» <

cout <<< «|5 — Prosmotr dannyx» << «|» <

cout <<< «|6 — Dobavlenie dannyx» << «|» <

cout <<< «|7 — Poisk po nomery» << «|» <

cout <<< «|8 — Poisk Minimal’nou godovoy stoimosti» <<" |" << endl;

cout <<< «|9 — Poisk Maximal’nou godovoy stoimosti» <<" |" << endl;

cout <<< «|0 — Vixod» <<" |" << endl;

cout<<" /——————————————————————/n" ;

cout << «nViberete deystvie: » ;

cin >> num;

switch (num)

{

case 0: //выход

{

exit (0);

};

case 1: // новая база данных

{

system («cls»);

cout << setw (65) << «——-Sozdanie novoy BD——-» << endl;

while (1)

{

cout << «nVVedite god sozdaniya: » ;

cin >> g;

prod.addGod (g);

cout << «Vvedite nazvanie: » ;

cin >> n;

prod.addName (n);

cout << «Vvedite godovuyu stoimost: » ;

cin >> gc;

prod.addGod_cena (gc);

do

{

cout << «1 — Kvartal, 2 — Ploschad, 3 — Zdanie, 4 — Skulptura: » ;

cin >> i;

} while (!((i>0)&&(i<5))) ;

if (i==1) prod. addVid (z1.getVid ());

if (i==2) prod. addVid (z2.getVid ());

if (i==3) prod. addVid (z3.getVid ());

if (i==4) prod. addVid (z4.getVid ());

tek = new Pamyatniki (g, n, gc, i);

spis.push_back (*tek);

kol++;

cout << «nProdolgit? [1 — Da/ 2 — Net] «;

cin >> ans;

if (ans==2) break;

}

break;

};

case 2: // открыть ыайл

{

system («cls»);

string str, str1;

ifstream file («Pamyatniki.csv»);

if (!file)

{

cout << «Fail ne nayden!» ;

_getch ();

break;

}

else

{

while (!file.eof ())

{

getline (file, str);

if (str=="") break;

str1=(str.substr (0,str.find («;»)));

g=atoi (str1.c_str ());

str.erase (0,str.find («;»)+1);

str1=str.substr (0,str.find («;»));

n=str1.c_str ();

str.erase (0,str.find («;»)+1);

str1=str.substr (0,str.find («;»));

gc=atoi (str1.c_str ());

str.erase (0,str.find («;»)+1);

str1=str.substr (0,1);

i=atoi (str1.c_str ());

tek = new Pamyatniki (g, n, gc, i);

spis.push_back (*tek);

kol++;

}

}

file.close ();

cout << «Vipolneno!» ;

_getch ();

break;

}

case 3: //сохранить в файл

{

system («cls»);

if (spis.empty ())

{

cout << «Zapisi ne naydeni!» ;

_getch ();

break;

}

else

{

ofstream file («Pamyatniki.csv»);

for (pos=spis.begin (); pos≠spis.end (); pos++)

{

file << pos->getGod () << «;» << pos->getName () << «;» << pos->getGod_cena () << «;» << pos->getVid () << endl;

}

cout << «Gotovo!» ;

file.close ();

_getch ();

break;

}

};

case 4: // удаление всех записей

{

system («cls»);

if (spis.empty ())

{

cout << «Zapisi ne naydeni!» ;

_getch ();

break;

}

else

{

cout << «nUdalit vse? [1 — Da/ 2 — Net] «;

cin >> ans;

if (ans==1) spis. clear ();

cout << «Vipolneno!» ;

_getch ();

break;

}

};

case 5: // просмотр записей

{

system («cls»);

if ((spis.empty ()) || (kol==0))

{

cout << «Zapisi ne naydeni» ;

_getch ();

break;

}

else

Nazvanie ;

_getch ();

break;

};

case 6: // добавление записей

{

system («cls»);

pos=spis.end ();

while (1)

{

cout << «nVVedite god sozdaniya: » ;

cin >> g;

prod.addGod (g);

cout << «Vvedite nazvanie: » ;

cin >> n;

prod.addName (n);

cout << «Vvedite godovuyu stoimost: » ;

cin >> gc;

prod.addGod_cena (gc);

do

{

cout << «1 — Kvartal, 2 — Ploschad, 3 — Zdanie, 4 — Skulptura: » ;

cin >> i;

} while (!((i>0)&&(i<5))) ;

if (i==1) prod. addVid (z1.getVid ());

if (i==2) prod. addVid (z2.getVid ());

if (i==3) prod. addVid (z3.getVid ());

if (i==4) prod. addVid (z4.getVid ());

tek = new Pamyatniki (g, n, gc, i);

spis.push_back (*tek);

kol++;

cout << «nProdolgit? [1 — Da/ 2 — Net] «;

cin >> ans;

if (ans==2) break;

}

break;

};

case 7: // поиск по номеру записи

{

if (spis.empty ())

{

system («cls»);

cout << «Zapisi ne naydeni!» ;

_getch ();

break;

}

else

{

while (1)

{

system («cls»);

pos=spis.begin ();

cout << «Vvedite nomer zapisi: » ;

cin >> a;

if (a>kol) cout << «Ne naydeno» << endl;

else

" << setw (9)<< s << «

cout << «nProdolgit poisk? [1 — Da/ 2 — Net] «;

cin >> ans;

if (ans==2) break;

}

break;

}

};

case 8://нахождение минимальной годовой стоимости

{

system («cls»);

int min, vsp1, v_pos;

if (spis.empty ())

{

system («cls»);

cout << «Zapisi ne naydeni!» ;

_getch ();

break;

}

else

{

pos=spis.begin ();

min=pos->getGod_cena ();

v_pos=0;vsp=spis.begin ();

for (pos=spis.begin (), a=1; pos≠spis.end (); pos++, a++)

{

vsp1=pos->getGod_cena ();

if (min>vsp1)

{

min=vsp1;

v_pos=a;

vsp=pos;

};

};

cout <<" Minimal’naya godovaya stoimost' :" <

Line ();

cout << «|Num|God sozdaniya| Nazvanie |Godovay stoimost| Vid |» << endl;

Line ();

k=vsp->getVid ();

if (k==1) s=z1.getGr ();

if (k==2) s=z2.getGr ();

if (k==3) s=z3.getGr ();

if (k==4) s=z4.getGr ();

cout << «|» << setw (3)<<< a <<" | «<< setw (12) << left << pos->getGod () << «|» << setw (19) << right << pos->getName () << «|» << setw (15) << pos->getGod_cena () << «| «<< setw (9)<< s << «|» << endl;

Line ();

};

_getch ();

break;

};

case 9: //нахождение максимальной годовой стоимости

{

system («cls»);

int max, vsp1;

if (spis.empty ())

{

system («cls»);

cout <<" Zapisi ne naydeni!" ;

_getch ();

break;

}

else

{

pos=spis.begin ();

max=pos->getGod_cena ();

for (pos=spis.begin (), a=1; pos≠spis.end (); pos++, a++)

{

vsp1=pos->getGod_cena ();

if (max

{

max=vsp1;

vsp=pos;

};

};

cout <<" Maximal’naya godovaya stoimost' :" <

Line ();

cout << «|Num|God sozdaniya| Nazvanie |Godovay stoimost| Vid |» << endl;

Line ();

k=vsp->getVid ();

if (k==1) s=z1.getGr ();

if (k==2) s=z2.getGr ();

if (k==3) s=z3.getGr ();

if (k==4) s=z4.getGr ();

cout << «|» << setw (3)<<< a <<" | «<< setw (12) << left << pos->getGod () << «|» << setw (19) << right << pos->getName () << «|» << setw (15) << pos->getGod_cena () << «| «<< setw (9)<< s << «|» << endl;

Line ();

};

_getch ();

break;

};

default:

{

cout << «n Oshibka vvoda!» ;

_getch ();

}

}

}

}

Модуль mod2. cpp

#include

#include

#include

#define MAX 30

using namespace std;

class Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

public:

Pamyatniki ()

{

god=0;

name="none" ;

god_cena=0;

vid=0;

}

Pamyatniki (int god, string name, long int god_cena, int vid)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

this->vid=vid;

}

virtual ~Pamyatniki (){};

virtual void addGod (int god)

{

this->god=god;

}

virtual void addName (string name)

{

this->name=name;

}

virtual void addGod_cena (long int god_cena)

{

this->god_cena=god_cena;

}

virtual void addVid (int Vid)

{

this->vid=vid;

}

virtual int getGod ()

{

return god;

}

virtual string getName ()

{

return name;

}

virtual long int getGod_cena ()

{

return god_cena;

}

int getVid ()

{

return vid;

}

};

class Kvartal: public Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

string gr1;

public:

Kvartal ()

{

god=0;

name="none" ;

god_cena=0;

gr1="Kvartal" ;

}

Kvartal (int god, string name, long int god_cena)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

}

virtual int getVid ()

{

return 1;

}

virtual string getGr ()

{

return gr1;

}

};

class Ploschad: public Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

string gr2;

public:

Ploschad ()

{

god=0;

name="none" ;

god_cena=0;

gr2="Ploschad" ;

}

Ploschad (int god, string name, long int god_cena)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

}

virtual int getVid ()

{

return 2;

}

virtual string getGr ()

{

return gr2;

}

};

class Zdanie: public Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

string gr3;

public:

Zdanie ()

{

god=0;

name="none" ;

god_cena=0;

gr3="Zdanie" ;

}

Zdanie (int god, string name, long int god_cena)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

}

virtual int getVid ()

{

return 3;

}

virtual string getGr ()

{

return gr3;

}

};

class Skulptura: public Pamyatniki

{

private:

int god;

string name;

long int god_cena;

int vid;

string gr4;

public:

Skulptura ()

{

god=0;

name="none" ;

god_cena=0;

gr4="Skulptura" ;

}

Skulptura (int god, string name, long int god_cena)

{

this->god=god;

this->name=name;

this->god_cena=god_cena;

}

virtual int getVid ()

{

return 4;

}

virtual string getGr ()

{

return gr4;

}

};

Показать весь текст
Заполнить форму текущей работой