В ході даної курсової роботи я зміг використати свої навички здобуті за час вивчення курсу ООП. Покращив свої навички застосування функції та роботи з файлом, навчився правильно розробляти ієрархію класів. Дана робота вимагала від мене застосування майже всіх понять яких нас навчили, таких як наслідування, перевантаження та інкапсуляція.
Список використаних джерел
Що таке ООП(об’єктно-орієнтоване програмування)? : Веб-сайт. URL: https://foxminded.ua/shho-take-oop-ob-iektno-oriientovane-programuvannja/ (Дата звернення 20.11.2022)
Що таке компілятор? : Веб-сайт. URL: https://uk.theastrologypage.com/compiler (Дата звернення 20.11.2022)
Декомпілятор – Словник з інформатики : Веб-сайт. URL: http://іт.словник.укр/index.php/%D0%94%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%BE%D1%80 (Дата звернення 20.11.2022)
Об’єктно-орієнтоване програмування : Веб-сайт. URL: http://programming.in.ua/programming/basisprogramming/25-oop.html (Дата звернення 20.11.2022)
Додатки 1 Додаток
#include
#include
#include
#include
using namespace std;
const float massPass=0.07;//константа для маси пасажирів(тони)
class Paroplav
{
protected://змінні до яких будуть мати доступ нащадки
string company, nameShip;
int tonaj;
public:
Paroplav()//конструктор без параметра
{
nameShip="Defolt Name";
company="Defolt";
tonaj = 999999;
}
Paroplav(int tonaj, string company, string nameShip)//конструктор з параметром
{
this->nameShip=nameShip;
this->tonaj=tonaj;
this->company=company;
}
//сетери і гетери
void setMassa(int tonaj){this->tonaj=tonaj;}
void setNameShip(string nameShip){this->nameShip=nameShip;}
void setCompany(string company){this->company=company;}
string getCompany(){return company;}
string getNameShip(){return nameShip;}
int getMassa(){return tonaj;}
~Paroplav(){}//деструктор
};
class Passajir : public Paroplav//спадкування
{
protected:
int kilkistPass;
int vaga;
public:
Passajir()
{
vaga = 900;
kilkistPass=900;
}
Passajir(int kilkistPass, int tonaj, string company, string nameShip)
{
this->kilkistPass=kilkistPass;
this->nameShip=nameShip;
this->tonaj=tonaj;
this->company=company;
vaga=kilkistPass*massPass;
}
int getKilkist() {return kilkistPass;}
void setKilkist(int kilkistPass) {kilkistPass=kilkistPass;}
~Passajir(){}
};
class Way : public Passajir
{
protected:
string startPort, finishPort;
public:
Way(){ this->startPort="City 1"; this->finishPort="City 2";}
Way(string nameShip, string startPort, string finishPort, int kilkistPass, int tonaj, string company)
{
this->startPort=startPort;
this->finishPort=finishPort;
this->kilkistPass=kilkistPass;
this->nameShip=nameShip;
this->tonaj=tonaj;
this->company=company;
vaga=kilkistPass*massPass;
}
void setStart(string startCity){this->startPort=startPort;}
void setFinish(string finishCity){this->finishPort=finishPort;}
string getStart(){return startPort;}
string getFinish(){return finishPort;}
int getVaga(){return vaga;}
int overweight() const//розрахунок перевантаження
{
if(massPass*kilkistPass>tonaj) {return 1;} else{return 0;}
}
void Print()//вивід інформації
{
//вивід на дисплей і у файл пункти призначення, куди пароплав не прибуде, тому що перевантажений, а також назву компанії, що здійснює таку перевозку.
if(overweight() == 1)
{
cout<<"Корабель: "<cout<<" Мав відправлятися з порту: "<cout<<"Проте цей рейс відмінили, адже корабель перевантажений"<}
}
~Way(){}
friend ofstream& operator <<(ofstream& t, Way& w); // запис у файл
friend ifstream& operator >>(ifstream& t, Way& w);//виведення з файлу
};
class File : public Way//клас роботи з файлом
{
private:
Way* NewShip;//створення нового елемента класу
int counter = 0;//поточна довжина списку
int maxCounter;// максимальна довжина списку
public:
void SortAlphabet(Way* NewShip)//сортування за алфавітом
{
for (int i = 0; i < counter; i++)
{
Way* first_ele = &NewShip[i];
for (int j = i + 1; j < counter; j++)
{
if(NewShip[i].getNameShip() > first_ele[j].getNameShip())
{
swap(NewShip[i], NewShip[j]);
}
}
}
}
File (int maxCounter)// Створення списку максимальногоx розміру
{
this->maxCounter = maxCounter;
NewShip = new Way[maxCounter]; // виділення пам'яті для списку
counter = 0; //обнулення списку
}
~File()
{
if (maxCounter > 0)
delete[] NewShip; // звільнення пам'яті
}
bool Pystota()//Перевірка на пустоту
{
return counter == 0;
}
int Counter()//Розрахунок кількості елементів списку
{
return counter;
}
bool Povnota()// Перевірка на повноту списку
{
return counter == maxCounter;
}
//Функція додавання до списку
void AddInfo(string nameShip, string startPort, string finishPort, int kilkistPass, int tonaj, string company)
{
if (!Povnota())//Перевірка на повноту списку
{
NewShip[counter++] = Way(nameShip, startPort, finishPort, kilkistPass, tonaj, company);
}
}
void DeleteElementFromFile(int del)//Видалення елементу зі списку за номером
{
Way fordelete;
cout << "Введiть номер корабля за списком для виделення зі списку" << endl;
if (!Pystota()) // Якщо список заповнений
{
Way fordelete = NewShip[del];//Перезапис першого елементу списку
for (int i = del; i < counter; i++)//зсув списку
NewShip[i - 1] = NewShip[i];
counter--;
}
}
void ReadFile()//читання файлу
{
int kilkistSTR = 0;
string str;
ifstream fin("in.txt");
if (fin) {
while (!fin.eof())
{
getline(fin, str, '\n');
kilkistSTR++;
}
fin.clear();
fin.seekg(0);
for (int i = 0; i < kilkistSTR - 1; i++)//зчитування елементі з файлу
{ fin>>nameShip; fin>>startPort; fin>>finishPort; fin>>kilkistPass; fin>>tonaj; fin>>company;
if (!Povnota())//Запис якщо список не заповнений
{
NewShip[counter++] = Way(nameShip, startPort, finishPort, kilkistPass, tonaj, company);
}
}
SortAlphabet(NewShip);//виклик сортування
PrintFinal();//вивід одразу інформації з файлу
fin.close();//закриття файлу
}
}
void Zapisb()//Запис поточного списку до файлу
{
ofstream filex("in.txt");
for (int i = 0; i < counter; i++) {
filex << NewShip[i];
cout << endl;
}
filex.close();
}
void PrintFinal()//Функція, що виводить список
{
cout << "Кораблі, що перевантажені" << endl;
SortAlphabet(NewShip);
int j = 1;
for (int i = 0; i < counter; i++) {
if (NewShip[i].overweight() == 1) {
cout << j++ << ") ";
NewShip[i].Print();
cout << endl;
}
}
}
};
ofstream& operator <<(ofstream& t, Way& w)//запис у файл
{
t << w.nameShip << " " << w.startPort << " " << w.finishPort << " " << w.kilkistPass << " " << w.tonaj << " " << w.company << endl;
return t;
}
ifstream& operator >>(ifstream& t, Way& w)//читання з файлу
{
t >> w.nameShip;
t >> w.startPort;
t >> w.finishPort;
t >> w.kilkistPass;
t >> w.tonaj;
t >> w.company;
return t;
}
int main()
{
system("CHCP 65001");
int size = 10, del, kilkistPass, tonaj;
string nameShip, startPort, finishPort, company;
int MenuNum = 0;
bool flag = true;
File* NewShip = new File(size);
cout << "\tПочаток роботи" << endl;
cout << "\t СПИСОК ПУСТИЙ\n\n\n" << endl;
while (flag) {
cout << "1)Вивести поточний список перевантажених кораблів" << endl;
cout << "2)Додати корабель до списку" << endl;
cout << "3)Видалити перевантажений корабель" << endl;
cout << "4)Записати поточний список до файлу" << endl;
cout << "5)Заповнити список з файлу" << endl;
cin >> MenuNum;
switch (MenuNum)
{
case 1:
NewShip->PrintFinal();
break;
case 2:
cout << "\tВведіть дані для додання нового пароплаву" << endl;
cout << "Введіть назву пароплаву" << endl;
cin >> nameShip;
cout<<"Введіть тонаж пароплаву"<cin>>tonaj;
cout<<"Введіть назву компанії тримаючої пароплав"<cin>>company;
cout << "Введіть місто з якого він відпливає" << endl;
cin >> startPort;
cout << "Введіть місто пробутя" << endl;
cin >> finishPort;
cout << "Введіть кількість пасажирів" << endl;
cin >> kilkistPass;
NewShip->AddInfo(nameShip, startPort, finishPort, kilkistPass, tonaj, company);
break;
case 3:
cout << "\tВведіть номер корабля у списку, який ви бажаєте видалити" << endl;
cin >> del;
NewShip->DeleteElementFromFile(del);
break;
case 4:
NewShip->Zapisb();
break;
case 5:
NewShip->ReadFile();
break;
default:
cout << "\tРОБОТУ ЗАВЕРШЕНО";
flag = false;
break;
}
}
return 0;
}
Достарыңызбен бөлісу: |