Тема: Опис класу та дії з ним
Добрий вечір.
Чергова лабораторна робота, яку я зробив, але також дали завдання на захист, з яким в мене тупняк.
1. Описати клас з ім’ям TRAIN, що містить наступні поля:
назва пункту призначення;
номер потягу;
час відправлення.
2. Написати програму, що виконує наступні дії:
введення з клавіатури даних в масив, що складається з восьми елементів типу TRAIN;
записи повинні бути впорядковані по номерах потягів;
виведення на екран інформації про потяг, номер якого введений з клавіатури;
якщо таких потягів немає, видати на дисплей відповідне повідомлення.
Зроблено!
Ось код.
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Train
{
private:
string Name;
int Number;
string Time;
public:
void setTrainType(string trainName, int trainNumber, string trainTime)
{
Name = trainName;
Number = trainNumber;
Time = trainTime;
};
string getName()
{
return Name;
};
int getNumber()
{
return Number;
};
string getTime()
{
return Time;
};
void searchNumber(int trainNumber, int countNumber)
{
/*
for (int i = 0; i < countNumber; i++)
if (Number == trainNumber)
*/
};
};
int main()
{
string Name;
int Number, Count;
int i = 0;
string Time;
setlocale(LC_ALL, "");
cout << "Input number of record's: ";
cin >> Count;
Train Trains[15];
for (i = 0; i < Count; i++)
{
cout << "Input Train name: ";
cin >> Name;
cout << "Input Train number: ";
cin >> Number;
cin.get();
cout << "Input Train time: ";
getline(cin, Time);
Trains[i].setTrainType(Name, Number, Time);
cout << endl;
};
for (int i = 0; i < Count; i++)
for (int j = 0; j < Count - 1; j++)
if (Trains[j].getNumber() < Trains[j + 1].getNumber())
{
Train newNumber = Trains[j];
Trains[j] = Trains[j + 1];
Trains[j + 1] = newNumber;
};
for (i = 0; i < Count; i++)
cout << Trains[i].getName() << " " << Trains[i].getNumber() << " " << Trains[i].getTime() << endl;
cout << endl;
int searchTrainNumber;
string yesNo;
bool Wrong = true;
do
{
cout << "Input Train Number for search: ";
cin >> searchTrainNumber;
for (int j = 0; j < Count; j++)
if (Trains[j].getNumber() == searchTrainNumber)
{
cout << Trains[j].getName() << " " << Trains[j].getNumber() << " " << Trains[j].getTime() << endl;
Wrong = false;
};
if (Wrong == true)
cout << "Wrong number! Please, repeat again." << endl;
cout << "Repeat? (Yes, No): ";
cin >> yesNo;
Wrong = true;
cout << endl;
i++;
}
while (yesNo != "No");
return 0;
}
Програма працює таким чином:
Введіть кількість записів: 3
/*Ввід данних*/
Введіть назву потягу: Львів-Київ /*Під назвою, мається на увазі маршрут*/
Введіть номер потягу: 10
Введіть час потягу: 10:20 /*Під часом, мається на увазі час відправки*/
Введіть назву потягу: Київ-Львів
Введіть номер потягу: 9
Введіть час потягу: 15:30
Введіть назву потягу: Харків-Київ
Введіть номер потягу: 11
Введіть час потягу: 12:10
/*Відсортований вивід даних*/
Харків-Київ 11 12:10
Львів-Київ 10 10:20
Київ-Львів 9 15:30
/*Пошук по номеру*/
Введіть номер потягу для пошуку: 10
Львів-Київ 10 10:20
Повторити? (так, ні): ...
Захист: Потрібно при пошуку, виводити потяг який їде за оберненим маршрутом. Наприклад.
Введіть кількість записів: 3
Введіть назву потягу: Львів-Київ
Введіть номер потягу: 10
Введіть час потягу: 10:20
Введіть назву потягу: Київ-Львів
Введіть номер потягу: 9
Введіть час потягу: 15:30
Введіть назву потягу: Харків-Київ
Введіть номер потягу: 11
Введіть час потягу: 12:10
Харків-Київ 11 12:10
Львів-Київ 10 10:20
Київ-Львів 9 15:30
Введіть номер потягу для пошуку: 10
Львів-Київ 10 10:20
Київ-Львів 9 15:30
Повторити? (так, ні): ...
Ось програма яка має це відтворювати:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Train
{
private:
string Name;
int Number;
string Time;
public:
void setTrainType(string trainName, int trainNumber, string trainTime)
{
Name = trainName;
Number = trainNumber;
Time = trainTime;
};
string getName()
{
return Name;
};
int getNumber()
{
return Number;
};
string getTime()
{
return Time;
};
};
int main()
{
string Name;
int Number, Count;
int i = 0;
string Time;
setlocale(LC_ALL, "");
cout << "Input number of record's: ";
cin >> Count;
Train Trains[15];
for (i = 0; i < Count; i++)
{
cout << "Input Train name: ";
cin >> Name;
cout << "Input Train number: ";
cin >> Number;
cin.get();
cout << "Input Train time: ";
getline(cin, Time);
Trains[i].setTrainType(Name, Number, Time);
cout << endl;
};
for (int i = 0; i < Count; i++)
for (int j = 0; j < Count - 1; j++)
if (Trains[j].getNumber() < Trains[j + 1].getNumber())
{
Train newNumber = Trains[j];
Trains[j] = Trains[j + 1];
Trains[j + 1] = newNumber;
};
for (i = 0; i < Count; i++)
cout << Trains[i].getName() << " " << Trains[i].getNumber() << " " << Trains[i].getTime() << endl;
cout << endl;
int searchTrainNumber;
string yesNo;
bool Wrong = true;
do
{
cout << "Input Train Number for search: ";
cin >> searchTrainNumber;
/*Перевірка починається тут*/
if ((searchTrainNumber % 2) == 1)
{
for (int j = 0; j < Count; j++)
if (Trains[j].getNumber() == searchTrainNumber)
{
cout << Trains[j].getName() << " " << Trains[j].getNumber() << " " << Trains[j].getTime() << endl;
if (Trains[j + 1].getNumber() == Trains[j].getNumber() + 1)
cout << Trains[j + 1].getName() << " " << Trains[j + 1].getNumber() << " " << Trains[j + 1].getTime() << endl;
else
cout << "Error! Train with this number don't exist" << endl;
Wrong = false;
};
}
else
for (int j = 0; j < Count; j++)
if (Trains[j].getNumber() == searchTrainNumber)
{
cout << Trains[j].getName() << " " << Trains[j].getNumber() << " " << Trains[j].getTime() << endl;
if (Trains[j - 1].getNumber() == Trains[j].getNumber() - 1)
cout << Trains[j - 1].getName() << " " << Trains[j - 1].getNumber() << " " << Trains[j - 1].getTime() << endl;
else
cout << "Error! Train with this number don't exist" << endl;
Wrong = false;
};
if (Wrong == true)
cout << "Wrong number! Please, repeat again." << endl;
cout << "Repeat? (Yes, No): ";
cin >> yesNo;
Wrong = true;
cout << endl;
i++;
}
while (yesNo != "No");
return 0;
}
Моя перевірка повинна працювати так:
"Якщо номер потягу непарне число, то перевіряємо елемент який стоїть після нього,
якщо цей елемент, що стоїть після непарного, більший від попереднього (непарного) на 1,
тоді виводимо його, інакше, "Помилка!"
"Якщо номер потягу парне число, то перевіряємо елемент який стоїть перед ним,
якщо цей елемент, що стоїть перед парним, меньший від попереднього (парного) на 1,
тоді виводимо його, інакше, "Помилка!"
Що в мене виходить:
Введіть кількість записів: 3
Введіть назву потягу: Львів-Київ
Введіть номер потягу: 10
Введіть час потягу: 10:20
Введіть назву потягу: Київ-Львів
Введіть номер потягу: 9
Введіть час потягу: 15:30
Введіть назву потягу: Харків-Київ
Введіть номер потягу: 11
Введіть час потягу: 12:10
Харків-Київ 11 12:10
Львів-Київ 10 10:20
Київ-Львів 9 15:30
Введіть номер потягу для пошуку: 10
Львів-Київ 10 10:20
Помилка! Потяг з даним номером не існує.
Повторити? (так, ні): ...
Питання саме в тому, як зробити данну перевірку працюючою?
Перепробував декілька варіантів (переставляючи змінні і вивід) перевірки, але нажаль не можу дістати працюючу програму.