1 Востаннє редагувалося leofun01 (13.03.2021 23:53:57)

Тема: автоматизована система ЖД станції C++

Написати програму «Автоматизована інформаційна система залізничного вокзалу».
// Система містить: відомості про відправлення поїздів далекого прямування.
// Для кожного поїзда вказуємо: номер, час відправлення, станцію призначення.
// Забезпечити:
// ■■ Введення даних в систему;
// ■■ Виведення інформації по всіх потягах;
// ■■ Виведення інформації про потрібний потяг.
// Використовувати контейнерний клас vector

Програма працює. Тільки не знаю як правильно реалізувати пункт 2 - searchinfo()
При виборі пункту 2 потрібно реалізувати введення номеру потягу і так далі і порівняти їх з наявними в базі.

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>

using namespace std;

class train
{
    protected:
    string departure;
    string arrival;
    int train_number;

    public:
    train()
    {
        departure = " ";
        arrival = " ";
        train_number = 0;
    }
    train(string dp, string a, int tn)
    {
        departure = dp;
        arrival = a;
        train_number = tn;
    }
    void set_departure()
    {
        cout << "введить станцію відправлення" << endl;
        cin >> departure;
    }
    void set_arrival()
    {
        cout << "введіть станцію прибуття" << endl;
        cin >> arrival;
    }
    void set_train_number()
    {
        cout << "введіть номер потяга" << endl;
        cin >> train_number;
    }
    void new_train()
    {
        set_arrival();
        set_departure();
        set_train_number();
    }
    string get_daparture()
    {
        return this->departure;
    }
    string get_arrival()
    {
        return this->arrival;
    }
    string get_train_number()
    {
        return to_string(this->train_number);
    }
    friend ostream &operator <<(ostream &out, train &obj);
};
ostream &operator <<(ostream &out, train &obj)
{
    return out
        << obj.departure << endl
        << obj.arrival << endl
        << obj.train_number << endl;
}

class railway_station
{
    private:
    vector<train> station;

    public:
    railway_station()
    {
        station.clear();
    }
    void add_train()
    {
        train *TMP = new train();
        TMP->new_train();
        this->station.push_back(*TMP);
        delete TMP;
    }
    void add_train(train TMP)
    {
        this->station.push_back(TMP);
    }
    void Output1()
    {
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
            cout << *IT << endl;
    }
    //пошук по номеру потяга
    void Search_by_TrainNumber(string tn)
    {
        bool a = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if((tn) == (*IT).get_train_number())
                cout << *IT << endl;
            a = true;
        }
        if(!a)
            cout << "немає потяга з таким номером" << endl;
    }
    void Search_by_arrival(string a)
    {
        bool b = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if(a == (*IT).get_arrival())
            cout << *IT << endl;
            b = true;
        }
        if(!b)
            cout << "нет поезда на данное время" << endl;
    }
    void Search_by_departure(string dp)
    {
        bool c = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if(dp == (*IT).get_daparture())
            cout << *IT << endl;
            c = true;
        }
        if(!c)
            cout << "нет поезда на ето время" << endl;
    }
    void searchinfo(string value)
    {
        vector<train>::iterator iter = station.begin();
        for(; iter != station.end(); iter++)
        {
            if(
                (*iter).get_arrival() == value ||
                (*iter).get_daparture() == value ||
                (*iter).get_train_number() == value
            )
                break;
        }
        cout << *iter << endl;
    }
};

void Menu_()
{
    cout << "Введіть будь-ласка дані" << endl;
    cout << "1 - додати новий запис" << endl;
    cout << "2 - вивести інформацію по певному потягу" << endl;
    cout << "3 - вивести інформацію по всіх потягах " << endl;
    cout << "4 - exit" << endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    train T;
    railway_station RS;
    string TMP;
    int Menu = 0;
    do
    {
        system("cls");
        Menu_();
        cin >> Menu;
        switch(Menu)
        {
            case 1:
                cout << "додавання нового запису" << endl;
                RS.add_train();
                break;
            case 2:
                cout << "вивід інформації про потяг на вимогу" << endl << endl;
                RS.searchinfo2(TMP);
                cin >> TMP;
                break;
            case 3:
                cin >> TMP;
                RS.Output1();
                cout << "Пошук інформації завершено" << endl;
                break;
        }
        system("pause");
    }
    while(Menu != 4);
    system("pause");
    return 0;
}
Оригінал
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
using namespace std;
class train
{
    protected:
    string departure;
    string arrival;
    int train_number;
    public: 
    train()
    {
    
        departure=" ";
        arrival=" ";
        train_number=0;
    }
    train(string dp, string a, int tn)
    {
        departure=dp;
        arrival=a;
        train_number=tn;
    }
    void set_departure()
    {
        cout<<"введить станцію відправлення"<<endl;
        cin>>departure;
    }
        void set_arrival()
        {
            cout<<"введіть станцію прибуття"<<endl;
            cin>>arrival;
        }
        void set_train_number()
        {
        cout<<"введіть номер потяга"<<endl;
        cin>>train_number;    
        }
        void new_train()
        {
        set_arrival();
        set_departure();
        set_train_number();    
        }
        string get_daparture()
        {
            return this->departure;
        }
        string get_arrival()
        {
            return this->arrival;
        }
        
        string get_train_number()
        {
        
        return to_string(this->train_number);    
        }
        friend ostream & operator <<(ostream& out, train& obj);
};
std::ostream& operator <<(std::ostream& out, train& obj)
{
out<<obj.departure<<endl;
out<<obj.arrival<<endl;
out<<obj.train_number<<endl;
return out;    
}

class railway_station
{
private:
vector<train>station;
public:
railway_station()
{
station.clear();    
}
void add_train()
{
    train *TMP=new train();
    TMP->new_train();
    this->station.push_back(*TMP);
    delete TMP;
}
void add_train(train TMP)
{
this->station.push_back(TMP);    
}
void Output1()
{
vector<train>::iterator IT=station.begin();
for(;IT!=station.end();IT++)
    {
cout<<*IT<<endl;    
    }
}
    //пошук по номеру потяга
    void Search_by_TrainNumber(string tn)
    {
    bool a=false;
    vector<train>::iterator IT=station.begin();
        for(;IT!=station.end();IT++)
        {
            if((tn)==(*IT).get_train_number())
            cout<<*IT<<endl;
            a=true;
        }
        if (!a)
        cout<<"немає потяга з таким номером"<<endl;
    }
    void Search_by_arrival(string a)
    {
    bool b=false;
    vector<train>::iterator IT=station.begin();
        for(;IT!=station.end();IT++)
        {
            if(a==(*IT).get_arrival())
            cout<<*IT<<endl;
            b=true;
        }
        if (!b)
        cout<<"нет поезда на данное время"<<endl;
    }
    void Search_by_departure(string dp)
    {
    bool c=false;
    vector<train>::iterator IT=station.begin();
        for(;IT!=station.end();IT++)
        {
            if(dp==(*IT).get_daparture())
            cout<<*IT<<endl;
            c=true;
        }
        if (!c)
        cout<<"нет поезда на ето время"<<endl;
    }
    void searchinfo(string value)
    {
    vector<train>::iterator iter=station.begin();
    for (; iter!=station.end();iter++)
    {
        if ((*iter).get_arrival()==value||
        (*iter).get_daparture()==value||
        (*iter).get_train_number()==value)
        break;
    }
    cout<<*iter<<endl;
    
    }
    
};
    
void Menu_()
{
cout<<"Введіть будь-ласка дані"<<endl;
cout<<"1 - додати новий запис"<<endl;
cout<<"2 - вивести інформацію по певному потягу"<<endl;
cout<<"3 - вивести інформацію по всіх потягах "<<endl;
cout<<"4 - exit"<<endl;
}
int main()
{
    setlocale(LC_ALL,"rus");
    train T;
    railway_station RS;
    string TMP;
    int Menu=0;
    do
    {
    system("cls");
    Menu_();
    cin>>Menu;
    switch (Menu)
    {
    case 1:
    cout<<"додавання нового запису"<<endl;
    RS.add_train();
    break;
    case 2:
    cout<<"вивід інформації про потяг на вимогу"<<endl;
    cout<<""<<endl;
    RS.searchinfo2(TMP);
    cin>>TMP;
    break;
    case 3:
    cin>>TMP;
    RS.Output1();
    cout<<"Пошук інформації завершено"<<endl;
    break;
    }
    system("pause");    
    }
    while (Menu!=4);
    system("pause");
    return 0;
}

2

Re: автоматизована система ЖД станції C++

???

3

Re: автоматизована система ЖД станції C++

яка мова

4

Re: автоматизована система ЖД станції C++

c++

5

Re: автоматизована система ЖД станції C++

тоді навіщо тобі сішні функції?

6

Re: автоматизована система ЖД станції C++

Мені так зручно.
Я писав за зразком, який у мене є.
То як зробити, щоб функція працювала?

7 Востаннє редагувалося ur_naz (13.03.2021 21:44:30)

Re: автоматизована система ЖД станції C++

 cout<<*iter<<endl;

що це таке? і такого там достатньо. змішав мухи з котлєтами.
пс твій зразок - лайно

8

Re: автоматизована система ЖД станції C++

тобто, мухи з котлетами?

9

Re: автоматизована система ЖД станції C++

спочатку треба розробити об'єктну модель. а потім лише починати писати, щоб не було такого

void set_arrival()
        {
            cout<<"введіть станцію прибуття"<<endl;
            cin>>arrival;
        }

10

Re: автоматизована система ЖД станції C++

більш детально на рахунок розробити об'єктну модель можна будь-ласка?

11

Re: автоматизована система ЖД станції C++

Пане sasha87, я взагалі не розумію питання.

sasha87 написав:

Програма працює.

Дуже легко переконатися, що це не так. В програмі є виклик searchinfo2, але немає його визначення. Натомість є визначення searchinfo, але його не викликають.

sasha87 написав:

Тільки не знаю як правильно реалізувати пункт 2 - searchinfo()
При виборі пункту 2 потрібно реалізувати введення номеру потягу і так далі і порівняти їх з наявними в базі.

А чим саме вас не влаштовує ваша реалізація?

Ну і раджу:
- звернути увагу на наявність оператора ->;
- подумати про використання стандартних функцій STL та/або циклів по колекціях замість оцих страшних ітераторів. C++11, зрештою, 10 років справляє.

ur_naz написав:
 cout<<*iter<<endl;

що це таке? і такого там достатньо. змішав мухи з котлєтами.
пс твій зразок - лайно

Це, пане, friend ostream& operator <<. Збочення від Страуструпа. Не подобається Страуструп - не користуйтеся плюсами.

12

Re: автоматизована система ЖД станції C++

Я пробував по іншому зробити реалізацію пункту 2 і створив search2, а потім забув його видалити. Все ж таки як зробити, зоб цен пункт меню працював?

13

Re: автоматизована система ЖД станції C++

Вибачте, але я не бачу ніякої функції search2. Можливо, ви мали на увазі searchinfo2, але з таким ставленням до кодування ви цю програму ще довго писатимете.
Щоб пункт меню запрацював, необхідно запустити програму. Якщо ви цього чомусь не можете зробити - то кажіть конкретно, що саме у вас відбувається, ми не телепати.

14

Re: автоматизована система ЖД станції C++

Вибачаюсь. Саме так. Searchinfo2.
Я запускаю програму, запускаю пункт 2 і в терміналі не можна нічого зробити

15

Re: автоматизована система ЖД станції C++

Ще раз: ця програма не компілюється, бо в ній немає функції searchinfo2. Ви запускаєте якусь іншу програму, мабуть, отриману з цієї якимись змінами, але я вже задовбався повторювати: МИ НЕ ТЕЛЕПАТИ, якщо ви не надаєте проблемний код - ми не можемо вам допомогти.

16

Re: автоматизована система ЖД станції C++

Витріть 2 і буде компілюватись

17

Re: автоматизована система ЖД станції C++

                RS.searchinfo2(TMP);
                cin >> TMP;

А якщо ці два рядки місцями поміняти?

18

Re: автоматизована система ЖД станції C++

переробив трохи функцію, але всеодно трохи не корректно працює

void searchinfo(string Value)
    {
        
        bool found = false;
        cout<<"введіть станцію відправлення"<<endl;
        
        vector<train>::iterator iter=station.begin();
        for (; iter!=station.end();++iter)
    {
        if (iter->get_arrival()==Value)
        {
            cout<<iter->get_train_number()<<"\t"<<iter->get_daparture()<<endl;
            found=true;
            break;
        }
        
    }
    if(!found)cout<<"нічого не знайдено"<<endl;
    
    }

ось повний код

#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>

using namespace std;

class train
{
    protected:
    string departure;
    string arrival;
    int train_number;

    public:
    train()
    {
        departure = " ";
        arrival = " ";
        train_number = 0;
    }
    train(string dp, string a, int tn)
    {
        departure = dp;
        arrival = a;
        train_number = tn;
    }
    void set_departure()
    {
        cout << "введить станцію відправлення" << endl;
        cin >> departure;
    }
    void set_arrival()
    {
        cout << "введіть станцію прибуття" << endl;
        cin >> arrival;
    }
    void set_train_number()
    {
        cout << "введіть номер потяга" << endl;
        cin >> train_number;
    }
    void new_train()
    {
        set_arrival();
        set_departure();
        set_train_number();
    }
    string get_daparture()
    {
        return this->departure;
    }
    string get_arrival()
    {
        return this->arrival;
    }
    string get_train_number()
    {
        return to_string(this->train_number);
    }
    friend ostream &operator <<(ostream &out, train &obj);
};
ostream &operator <<(ostream &out, train &obj)
{
    return out
        << obj.departure << endl
        << obj.arrival << endl
        << obj.train_number << endl;
}

class railway_station
{
    private:
    vector<train> station;

    public:
    railway_station()
    {
        station.clear();
    }
    void add_train()
    {
        train *TMP = new train();
        TMP->new_train();
        this->station.push_back(*TMP);
        delete TMP;
    }
    void add_train(train TMP)
    {
        this->station.push_back(TMP);
    }
    void Output1()
    {
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
            cout << *IT << endl;
    }
    //пошук по номеру потяга
    void Search_by_TrainNumber(string tn)
    {
        bool a = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if((tn) == (*IT).get_train_number())
                cout << *IT << endl;
            a = true;
        }
        if(!a)
            cout << "немає потяга з таким номером" << endl;
    }
    void Search_by_arrival(string a)
    {
        bool b = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if(a == (*IT).get_arrival())
            cout << *IT << endl;
            b = true;
        }
        if(!b)
            cout << "нет поезда на данное время" << endl;
    }
    void Search_by_departure(string dp)
    {
        bool c = false;
        vector<train>::iterator IT = station.begin();
        for(; IT != station.end(); IT++)
        {
            if(dp == (*IT).get_daparture())
            cout << *IT << endl;
            c = true;
        }
        if(!c)
            cout << "нет поезда на ето время" << endl;
    }
    
void searchinfo(string Value)
    {
        
        bool found = false;
        cout<<"введіть станцію відправлення"<<endl;
        
        vector<train>::iterator iter=station.begin();
        for (; iter!=station.end();++iter)
    {
        if (iter->get_arrival()==Value)
        {
            cout<<iter->get_train_number()<<"\t"<<iter->get_daparture()<<endl;
            found=true;
            break;
        }
        
    }
    if(!found)cout<<"нічого не знайдено"<<endl;
    
};

void Menu_()
{
    cout << "Введіть будь-ласка дані" << endl;
    cout << "1 - додати новий запис" << endl;
    cout << "2 - вивести інформацію по певному потягу" << endl;
    cout << "3 - вивести інформацію по всіх потягах " << endl;
    cout << "4 - exit" << endl;
}
int main()
{
    setlocale(LC_ALL, "rus");
    train T;
    railway_station RS;
    string TMP;
    int Menu = 0;
    do
    {
        system("cls");
        Menu_();
        cin >> Menu;
        switch(Menu)
        {
            case 1:
                cout << "додавання нового запису" << endl;
                RS.add_train();
                break;
            case 2:
                cout << "вивід інформації про потяг на вимогу" << endl << endl;
                cin>>TMP;
               RS.searchinfo(TMP);
        
                break;
            case 3:
                cin >> TMP;
                RS.Output1();
                cout << "Пошук інформації завершено" << endl;
                break;
        }
        system("pause");
    }
    while(Menu != 4);
    system("pause");
    return 0;
}

19

Re: автоматизована система ЖД станції C++

sasha87 написав:

трохи не корректно працює

Виправіть щось, щоб працювало коректніше.

Подякували: Betterthanyou1

20

Re: автоматизована система ЖД станції C++

Виправив
Тепер працює корректно.
Але мені здається, що функції void Search_by_TrainNumber(string tn),void Search_by_departure(string dp),void Search_by_arrival(string a) є зайвими.
Як ви думаєте?

Подякували: Betterthanyou1