Файл: Самгупс) Кафедра Мехатроника, автоматизация и управление на транспорте курсовая работа по дисциплине Объектноориентированное программирование (ооп) (09. 03. 01) Тема Риэлтерская.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 6

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


lМИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

САМАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ

(СамГУПС)
Кафедра «Мехатроника, автоматизация и управление на транспорте»

КУРСОВАЯ РАБОТА

по дисциплине: «Объектно-ориентированное программирование (ООП) (09.03.01)»

Тема: Риэлтерская программа.

Выполнил:

Студент гр. ИВТб-11

Запашнев К.Ю.

Проверил:

Фатеев В.А.

САМАРА 2022

СОДЕРЖАНИ

1.ВВЕДЕНИЕ 3

1.1. Наименование продукта 4

1.2. Краткая характеристика области применения 4

2.Техническое задание 6

3.1. Описание проекта 8

3.2. Пользовательский интерфейс 8

3.3. Описание работы программы 10

4. Реализация логики ПО 10

5.Заключение 17

Список литературы 18

Приложение А 19

1.ВВЕДЕНИЕ 3

1.1. Наименование продукта 4

1.2. Краткая характеристика области применения 4

2.Техническое задание 5

3.1. Описание проекта 7

3.2. Пользовательский интерфейс 7

3.3. Описание работы программы 9

4. Реализация логики ПО 9

5.Заключение 16

Список литературы 16

Приложение А 16

1.ВВЕДЕНИЕ


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

Работа будет написана в среде разработки Visual Studio 2022 на языке программирования C++. Visual Studio — это стартовая площадка для написания, отладки и сборки кода, а также последующей публикации приложений. Помимо стандартного редактора и отладчика, которые есть в большинстве сред IDE, Visual Studio включает в себя компиляторы, средства автозавершения кода, графические конструкторы и многие другие функции для улучшения процесса разработки.

Рис. 1 – Язык программирования

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

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

1.1. Наименование продукта


Риэлтерские услуги.

1.2. Краткая характеристика области применения


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

2.Техническое задание


Цель: Реализовать программу по поиску квартир с заданными параметрами

Задачи: изучить среду разработки Visual Studio, изучить язык программирования C++.

Функциональные требования: вывод, поиск, редактирование, добавление и удаление данных.

Обозначить цель работы





Подготовить алгоритм работы



Создать меню

Нет

Да

Расставить пункты в меню

Наличие меню

Блок схема 1 – Алгоритм выполнения работы

Оформить курсовую работу

Собрать код в единую систему

Написать код для каждого элемента системы

3.1. Описание проекта


Данная курсовая посвящена разработке программы для изучения работы классов и структур. Главная цель курсовой работы – проработка и упорядочивание знаний, полученных за время изучения дисциплины «Объектно-ориентированное программирование» с использованием языка C++.

3.2. Пользовательский интерфейс


Пользовательский интерфейс (UI) — это способ взаимодействия пользователя и программы. Интерфейс используется для корректного в пользователя с программой для верного решения поставленных задач. В данной работе используется консоль. Консоль — простейший интерфейс ввода-вывода, относящийся к классу символьных устройств, позволяющий вводить данные с клавиатуры и выводить их на экран или в другое устройство отображения.

На рис. 2 представлен пользовательский интерфейс программы.

Здесь пользователю предлагают выбрать пункт меню.



Рис. 2 – Меню.

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



Рис. 3 – Список квартир.



Рис. 4 – Поиск квартиры.

На рис. 4 мы видим как выполняется поиск квартиры по заданными нами параметрами.

3.3. Описание работы программы


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

4. Реализация логики ПО


Прежде всего мы создаём классы содержащие информацию о квартире (floor, city, room, price, s(площадь)).Для данных классов реализованы методы добавления, удаления, редактирования и т.д. данных. Метод Print выводит данные в консоль. Метод Choose выбирает нужную квартиру. Метод DataChange позволяет поменять данные. Метод Copy создает копию данных массива. Метод DataAdd позволяет добавить квартиру, а DeleteData удалить. Метод SaveData позволяет сохранить данные в другой файл. Метод DataReading.


Начало удаления





Введите номер элемента



Да

Нет

Номер введен не верно. Введите номер элемента

Удаляем данные

Есть такой элемент

Данные удалены

Блок схема 2 – Алгоритм удаления данных


По алгоритму, описанному в блок схеме 2, представленной выше, был разработан метод удаления данных. Во время разработки были применены классы и другие методы. Одним из таких методов является метод Copy, который копирует данные массива. Мы выбираем номер элемента, который хотим удалить, делается проверка ввода, если она пройдена, то данные удаляются.



Начало



Нет

Да

Да

Нет

Ошибка. Введите число

Ошибка. Введите положительное число

Число проходит

Число положительное?

Это число?

Блок схема 3 – Алгоритм проверки ввода данных

Начать работу


Код проверки ввода данных пользователем. Данный код проверяет подходит ли число введённое пользователем для работы программы. Мы используем cin.peek, cin.fail, cin.get, cin.clear

cin.peek() возвращает целочисленное представление следующего символа в буфере потока, не прочитав его (cin >> a) при вводе значения a , если все нормально, то выражение вернет true, соответственно !(cin >> a) вернет false (неудачу). Функция get() же стандартного потока ввода cin заставляет систему ожидать ввода пользователем любого символа, который она считывает.cin.fail() повторяется, пока не получит int. cin.sync () используется для очистки потока данных в области кэша.
Если идентификатор не изменился, его нельзя ввести, даже если поток данных очищен.


Запуск программы



Нет

Да

Да

Нет

Это пункт закрытия

Есть такой пункт

Выбираем пункт меню

Блок схема 4 – Алгоритм основной программы

Закрыть программу

Старт


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

5.Заключение


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


Список литературы


Язык программирования C++ – Стивен Прата.

Объектно-ориентированное программирование в С++реализации – Роберт Лафоре.

Программирование. Принципы и практика с использованием C++ – Страуструп.

Философия C++ – Эккель Брюс.

C++: базовый курс– Герберт Шилдт.

Язык программирования C++. Базовый курс – Стенли Липпман, Жози Лажойе, Барбара Э. Му


Приложение А


#include

#include "function.h"

using namespace std;
int _stateMenu;

void menu() {


cout << "Выберите действие" << endl

<< "0 - Выход из программы" << endl

<< "1 - Ввод данных" << endl

<< "2 - Вывод данных" << endl

<< "3 - Поменять данные" <
<< "4 - Добавить данные" << endl

<< "5 - Удаление данных" << endl

<< "6 - Сохранить данные" << endl

<< "7 - Найти данные" << endl

<< "Ваш выбор:";

cin >> _stateMenu;

}

/*

Данные

Стоимость

Адрес

Площадь

Этаж

Кол-во комнат

*/

int main()

{

setlocale(LC_ALL, "Russian"); //Чтобы функция isalpha() работала с русским текстом

SetConsoleCP(1251);

SetConsoleOutputCP(1251);
menu();
string fileName;
int _size = 0; //количество данных

Data* d = new Data[_size];//массив данных

Data r;
while (_stateMenu != 0) {

switch (_stateMenu) {

case 1:

system("cls");// очистка консоли

DataReading(d, _size, "Input.txt");
system("cls");

menu();

break;

case 2:

system("cls");
if (_size != 0)

Print(d, _size);

else

cout << "Данные пусты!" << endl;

menu();

break;

case 3:

system("cls");
if (_size != 0)

DataChange(d, _size);

else

cout << " Данные пусты " << endl;
system("cls");

menu();

break;

case 4:

system("cls");
if (_size != 0)

AddData(d, _size);

else

cout << "Данные пусты" << endl;
system("cls");

menu();

break;

case 5:

system("cls");
if (_size != 0)

DeleteData(d, _size);

else

cout << "Данные пусты" << endl;
system("cls");

menu();

break;

case 6:

system("cls");
if (_size != 0) {

cout << "Введите название файла: ";

cin >> fileName;

SaveData(d, _size, fileName);

}

else

cout << "Данные пусты" << endl;

system("cls");

menu();

break;

case 7:

system("cls");

cout << "Введите данные квартиры" << endl;

DataEntry(r);

Choose(r, d, _size);

system("pause");

system("cls");

menu();

break;

default:

cout << "Пункт меню введен не верно" << endl;

system("cls");

menu();

break;
}

}

system("cls");

}

#include "Room.h"
Data::Data()

{

price.p = 0;

se.s = 0;

floor.f = 0;

rooms.r = 0;

city.c = "";
}
Data::Data(Price price_, Se se_, Floor floor_, Rooms rooms_, City city_) {

price.p = price_.p;

se.s = se_.s;

floor.f = floor_.f;

rooms.r = rooms_.r;

city.c = city_.c;
}
Data::
Data() {
}

void Data::Print() {

cout << "Цена:" << price.p << endl;

cout << "Площадь:" << se.s << endl;

cout << "Этаж:" << floor.f << endl;

cout << "Комнаты:" << rooms.r << endl;

cout << "Город:" << city.c << endl;

}
void Data::DataEntry(Price price_, Se se_, Floor floor_, Rooms rooms_, City city_) {

price.p = price_.p;

se.s = se_.s;

floor.f = floor_.f;

rooms.r = rooms_.r;

city.c = city_.c;
}
Data& Data::operator=(Data d_o) {

this->price.p = d_o.price.p;

this->se.s = d_o.se.s;

this->floor.f = d_o.floor.f;

this->rooms.r = d_o.rooms.r;

this->city.c = d_o.city.c;

return *this;

}
bool Data::operator==(const Data& d_o) {

return

this->price.p == d_o.price.p &&

this->se.s == d_o.se.s &&

this->floor.f == d_o.floor.f &&

this->rooms.r == d_o.rooms.r &&

this->city.c == d_o.city.c;

}

#include "function.h"
int checkint(int& a)

{

while (cin >> a, cin.fail() || a < 0 || (cin.peek() != '\n')) // обнаружение ошибки, установка размера ввода, переход к следующему символу в строке, если это не перевод строки

{

cin.clear(); // восстановление потока после ошибки

while (cin.get() != '\n');// извлечение мз потока всех символов до перевода строки

cout << "Error! Try again" << endl;

}

return a;

}

void DataReading(Data* (&d), int& n, string fileName) {

//чтение данных из файла
ifstream reading(fileName);
if (reading) {

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;
reading >> n;
//выделяем память для массива данных

d = new Data[n];
//считываем данные

for (int i = 0; i < n; i++) {

reading >> price.p;

reading >> se.s;

reading >> floor.f;

reading >> rooms.r;

reading >> city.c;
// добавляем новые данные в элемент массива объект класса

d[i].DataEntry(price, se, floor, rooms, city);

}

cout << "Данные считаны!" << endl;

}

else

cout << "Ошибка открытия файла!" << endl;
reading.close();

}
void Print(Data* d, int n) {

for (int i = 0; i < n; i++) {

cout << "Квартира N" << i + 1 << endl;

d[i].Print();

cout << "________________________\n";

}

}
void Choose(Data a,Data* d, int n) {

int num = 0;

for (int i = 0; i < n; ++i) {

if (a == d[i]) {

++num;

cout << "Найденная квартира:" << endl;

d[i].Print();

}

}

if (num == 0)

cout << "Нет подходящих вариантов" << endl;

num = 0;
}
void DataEntrys(Data* (&d), int& n) {

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;
cout << "Введите размер массива";

cin >> n;

d = new Data[n];
for (int i = 0; i < n; ++i) {

cout << "Введите цену: ";

cin >> price.p;

cout << "Введите площадь:";

cin >> se.s;
cout << "Введите этаж:";

cin >> floor.f;
cout << "Введите кол-во комнат:";

cin >> rooms.r;

cout << "Введите город";

cin >> city.c;
d[i].DataEntry(price, se, floor, rooms, city);
cout << "_________________________\n";

}

}
void DataEntry(Data (&d)) {

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;
//cout << "Введите размер массива";

//cin >> n;

//d = new Data[n];
//for (int i = 0; i < n; ++i) {

cout << "Введите цену: ";

//cin >> price.p;

checkint(price.p);
cout << "Введите площадь:";

//cin >> se.s;

checkint(se.s);
cout << "Введите этаж:";

//cin >> floor.f;

checkint(floor.f);
cout << "Введите кол-во комнат:";

//cin >> rooms.r;

checkint(rooms.r);
cout << "Введите город";

cin >> city.c;
d.DataEntry(price, se, floor, rooms, city);
cout << "_________________________\n";

//}

}
void DataChange(Data* d, int n) {

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;

int _n;
cout << "Введите номер нужного элемента (от 1 до " << n << "):";

cin >> _n;

_n--;
if (_n >= 0 && _n < n) {

cout << "Введите новую цену: ";

cin >> price.p;
cout << "Введите новую площадь:";

cin >> se.s;
cout << "Введите новый этаж:";

cin >> floor.f;
cout << "Введите новое кол-во комнат:";

cin >> rooms.r;
cout << "Введите новый город";

cin >> city.c;
d[_n].DataEntry(price, se, floor, rooms, city);

}

else

cout << "Номер введен не верно" << endl;

}
void Copy(Data* d_n, Data* d_o, int n) {

for (int i = 0; i < n; i++)

d_n[i] = d_o[i];

}
void AddData(Data* (&d), int& n) {

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;

Data* buf = new Data[n];

int size = n, new_size = ++n;
Copy(buf, d, size);
d = new Data[new_size];
Copy(d, buf, size);
cout << "Введите новую цену: ";

checkint(price.p);

cout << "Введите новую площадь:";

checkint(se.s);
cout << "Введите новый этаж:";

checkint(floor.f);
cout << "Введите новое кол-во комнат:";

checkint(rooms.r);
cout << "Введите новый город";

cin >> city.c;

d[size].DataEntry(price, se, floor, rooms, city);

cout << " Данные добавлены " << endl;
delete[] buf;

}
void DeleteData(Data* (&d), int& n) {

int _n;

Data* buf = new Data[n];

cout << "Введите номер нужного элемента (от 1 до" << n << "): ";

cin >> _n;

_n--;
if (_n >= 0 && _n < n) {

Copy(buf, d, n);

int q = 0;

n--;
d = new Data[n];
for (int i = 0; i <= n; i++) {

if (i != _n) {

d[q] = buf[i];

q++;

}

}

cout << "Данные удалены" << endl;
}

else

cout << "Номер введен не верно" << endl;
delete[]buf;

}
void SaveData(Data* d, int n, string fileName) {

//создать поток для записи в файл

ofstream record(fileName);
if (record) {

record << n << endl;
for (int i = 0; i < n; i++) {

record << d[i].GetPrice().p << endl;

record << d[i].GetSe().s << endl;

record << d[i].GetFloor().f << endl;

record << d[i].GetRooms().r << endl;

record << d[i].GetCity().c;
if (i < n - 1)

record << endl;

}

}

else

cout << "Ошибка открытия файла" << endl;
cout << "Данные сохранены в файл: " << fileName << endl;
record.close();

}

#pragma once
#include

#include

#include

#include

#include "Room.h"
using namespace std;
//прототипы функций

void DataReading(Data* (&d), int& n, string fileName);//чтение данных

void Print(Data* d, int n);//вывод в консоль

void Choose(Data a, Data* d, int n);//выбор параметров

void DataEntry(Data (&d));//ввод данных в ручную

void DataChange(Data* d, int n);//изменение данных

void Copy(Data* d_n, Data* d_o, int n);//копия данных массива

void AddData(Data* (&d), int& n);//добавление данных

void DeleteData(Data* (&d), int& n);//удаление данных

void SaveData(Data* d, int n, string fileName);//сохранение данных

void DataEntrys(Data* (&d), int& n);

#pragma once

#include

#include

#include

#include

using namespace std;
/*

Данные

1. Цена

2. Площадь

3. Этаж

4. Кол-во комнат

5. Город

*/
struct Price {

int p;

};
struct Se {

int s;

};
struct Floor {

int f;

};
struct Rooms {

int r;

};
struct City {

string c;

};

// прототип класса

class Data {

//закрытая часть класса

private:

Price price;

Se se;

Floor floor;

Rooms rooms;

City city;
public:

Data();//пустой класс

Data(Price price_, Se se_, Floor floor_, Rooms rooms_, City city_);

Data();//деструктор

void Print();

void DataEntry(Price price_, Se se_, Floor floor_, Rooms rooms_, City city_);
// вывод данных полей из класса

Price GetPrice() { return price; };

Se GetSe() { return se; };

Floor GetFloor(){ return floor; };

Rooms GetRooms() { return rooms; };

City GetCity() { return city; };


// перегрузка оператора

Data& operator = (Data d_o);

bool operator == (const Data& d_o);


};