Форум программистов, компьютерный форум CyberForum.ru

Класс поезд, и вокзал. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
24.03.2012, 14:20     Класс поезд, и вокзал. #1
Добрый день! Помогите пожалуйста с задачей.
Клаcс «ПОЕЗД» coдержит закрытые поля: номер пoезда, название пункта назначения, время отправления и метод вывoда сведений o поезде. Класс «ВОКЗАЛ» cодержит закрытые пoля: название вокзала, массив объектoв класса «ВОКЗАЛ», метод поиска информации о поездах, отправляющихся после введенного с клавиатуры времени и метод вывода информации о поездах, oтправляющихся в заданный пункт назначения. Инфoрмация должна быть отсoртирована по времени oтправления.
Вот что у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <clocale>
#include <cstring>
#include <conio.h>
 
using namespace std;
 
class Train
{
        char punkt[20];// ГЇГіГ*ГЄГІ Г*Г*Г§Г*Г*Г·ГҐГ*ГЁГї
        int num;//Г*îìåð ïîåçäГ*
        double time;//âðåìÿ îòïðГ*ГўГЄГЁ
public:
        explicit Train (const char *_punkt = "Unknown", int _num = 0, double _time = 0.0, int _kupe = 0, int _plac = 0)
        {
                setPunkt(_punkt);
                setNum(_num);
                setTime(_time);
 
        }
        void setPunkt(const char *_punkt)
        {
                strcpy(punkt, _punkt);
        }
        void setNum(int _num)
        {
                num=_num;
        }
        void setTime (double _time)
        {
                time=_time;
        }
        void printInfo()
        {
                cout << "ГЏГіГ*ГЄГІ Г*Г*Г§Г*Г·ГҐГ*ГЁГї: " << punkt << endl
                        << "В№ ïîåçäГ*: " << num << endl
                        << "Âðåìÿ îòïðГ*ГўГЄГЁ: " << time << endl;
 
        }
};
class mas
{
        Train train[5]; //Г¬Г*Г±Г±ГЁГў ïîåçäîâ
        int size; // êîë-ГўГ® ïîåçäîâ
public:
        mas() :
                size()
        {
        }
 
        void addTrain (Train _train)
        {
                if (size < 5)
                        train[size++]=_train;
                else
                        cout << "Error, array is full" << endl;
        }
        void printInfo()
        {
                for(int i = 0; i < size; i++)
                {
                        cout<<i+1<<". ";
                        train[i].printInfo();
                }
        }
}; 
class Vokzal
{
        Vokzal vokzal[5]; //Г¬Г*Г±Г±ГЁГў ïîåçäîâ
        int size2; // êîë-ГўГ® ïîåçäîâ
public:
        mas() :
                size2()
        {
        }
 
        void printInfo()
        {
                for(int i = 0; i < size2; i++)
                {
                        cout<<i+1<<". ";
                        vokzal[i].printInfo2();
                }
        }
};
int main()
{
        const int len=5;
        Train train[len] = 
        {
                Train("Kiev", 4, 22.44),
                Train("Zaporizhia", 7, 11.01),
                Train("Moskva", 16, 00.37),
                Train("St-Peterburg", 3, 07.56),
                Train("Doneck", 41, 14.08)
        };
 
        mas ms;
        for (int i = 0; i < len; ++i)
        ms.addTrain(train[i]);
        ms.printInfo();
        const int len=5;
                Train train[len2] = 
        {
                Train("Vokzal-Kiev"),
                Train("Vokzal-Zaporizhia"),
                Train("Vokzal-Moskva"),
                Train("Vokzal-St-Peterburg"),
                Train("Vokzal-Doneck")
        };
        for (int i = 0; i < len; ++i)
        ms.addTVokzal(vokzal[i]);
        ms.printInfo2();
        system("pause");
        return 0;
}
я понимаю что написал все как попало, но я только учусь, исправьте и дополните решение. Заранее спасибо!!!

Добавлено через 3 часа 5 минут
Помогите отсортировать по времени отправления.
Опять попытался что-то исправить...но наверное только хуже...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <clocale>
#include <cstring>
#include <conio.h>
 
using namespace std;
 
class Train
{
        char punkt[20];// ГЇГіГ*ГЄГІ Г*Г*Г§Г*Г*Г·ГҐГ*ГЁГї
        int num;//Г*îìåð ïîåçäГ*
        double time;//âðåìÿ îòïðГ*ГўГЄГЁ
public:
        explicit Train (const char *_punkt = "Unknown", int _num = 0, double _time = 0.0, int _kupe = 0, int _plac = 0)
        {
                setPunkt(_punkt);
                setNum(_num);
                setTime(_time);
 
        }
        void setPunkt(const char *_punkt)
        {
                strcpy(punkt, _punkt);
        }
        void setNum(int _num)
        {
                num=_num;
        }
        void setTime (double _time)
        {
                time=_time;
        }
        void printInfo()
        {
                cout << "ГЏГіГ*ГЄГІ Г*Г*Г§Г*Г·ГҐГ*ГЁГї: " << punkt << endl
                        << "В№ ïîåçäГ*: " << num << endl
                        << "Âðåìÿ îòïðГ*ГўГЄГЁ: " << time << endl;
 
        }
};
class mas
{
        Train train[5]; //Г¬Г*Г±Г±ГЁГў ïîåçäîâ
        int size; // êîë-ГўГ® ïîåçäîâ
public:
        mas() :
                size()
        {
        }
 
        void addTrain (Train _train)
        {
                if (size < 5)
                        train[size++]=_train;
                else
                        cout << "Error, array is full" << endl;
        }
        void printInfo()
        {
                for(int i = 0; i < size; i++)
                {
                        cout<<i+1<<". ";
                        train[i].printInfo();
                }
        }
}; 
int main()
{
        const int len=5;
        int n,n1,n2,n3,n4,n5;
        double t,t2,t3,t4,t5;
        cout<<"Ââåäèòå Г*îìåð ïåðâîãî ïîåçäГ*: ";
        cin>>n;
        cout<<"Ââåäèòå âðåìÿ îòïðГ*âëåГ*ГЁГї ïåðâîãî ïîåçäГ*: ";
        cin>>t;
        cout<<"Ââåäèòå Г*îìåð âòîðîãî ïîåçäГ*: ";
        cin>>n2;
        cout<<"Ââåäèòå âðåìÿ îòïðГ*âëåГ*ГЁГї âòîðîãî ïîåçäГ*: ";
        cin>>t2;
        cout<<"Ââåäèòå Г*îìåð òðåòüåãî ïîåçäГ*: ";
        cin>>n3;
        cout<<"Ââåäèòå âðåìÿ îòïðГ*âëåГ*ГЁГї òðåòüåãî ïîåçäГ*: ";
        cin>>t3;
        cout<<"Ââåäèòå Г*îìåð ÷åòâåðòîãî ïîåçäГ*: ";
        cin>>n4;
        cout<<"Ââåäèòå âðåìÿ îòïðГ*âëåГ*ГЁГї ÷åòâåðòîãî ïîåçäГ*: ";
        cin>>t4;
        cout<<"Ââåäèòå Г*îìåð ïÿòîãî ïîåçäГ*: ";
        cin>>n5;
        cout<<"Ââåäèòå âðåìÿ îòïðГ*âëåГ*ГЁГї ïÿòîãî ïîåçäГ*: ";
        cin>>t5;
        Train train[len] = 
        {
                Train("Kiev", n,t),
                Train("Zaporizhia", n2,t2),
                Train("Moskva", n3,t3),
                Train("St-Peterburg", n4,t4),
                Train("Doneck", n5,t5)
        };
 
        mas ms;
        for (int i = 0; i < len; ++i)
        ms.addTrain(train[i]);
        ms.printInfo();
        system("pause");
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 14:20     Класс поезд, и вокзал.
Посмотрите здесь:

Быстрый поезд (задача с acmp) C++
C++ Нужна помощь в структуре поезд!
C++ поезд
Задача про поезд: будет ли поезд на платформе? C++
C++ Составить класс "Поезд", "Вокзал"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
24.03.2012, 15:57     Класс поезд, и вокзал. #2
Вася1q, код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <locale.h>
 
using namespace std;
 
class train
{
    int number_id;
    char destination[40];
    int time;
    public:
    void set(int id, char *city, int t)
    {
        number_id = id;
        strcpy(destination, city);
        time = t;
    }
    void show()
    {
        cout << "Поезд "
             << number_id
             << " в "
             << time
             << " совершает путь, местоназначения: "
             << destination
             << endl;
    }
    int get_time()
    {
        return time;
    }
};
class train_station
{
    char name[40];
    const static int trns_size = 3;
    public:
    train *trns;
    train_station(char *n)
    {
        strcpy(name, n);
        try
        {
            trns = new train[trns_size];
        }
        catch(bad_alloc xa)
        {
            cout << "Ошибка\n";
            exit(EXIT_FAILURE);
        }
    }
    ~train_station()
    {
        delete [] trns;
    }
    char *get_name()
    {
        return name;
    }
    train get_train(int i)
    {
        return trns[i];
    }
    void show_by(const int time)
    {
        cout << "Список поездов, которые будут отправляться после "
             << time
             << endl
             << "----------------------------------------------------"
             << endl;
        for(int i = 0; i < trns_size - 1; i++)
        {
            for(int j = 1; j < trns_size; j++)
            {
                if(trns[i].get_time() > trns[j].get_time())
                {
                    train tmp = trns[i];
                    trns[i] = trns[j];
                    trns[j] = tmp;
                }
            }
        }
        int count = 0;
        for(int i = 0; i < trns_size; i++)
        {
            if(trns[i].get_time() > time)
            {
                trns[i].show();
                count++;
            }
        }
        if(count == 0)
        {
            cout << "Ни один поезд не отправляется после: "
                 << time
                 << endl;
        }
    }
};
 
int main()
{
    setlocale(0, "");
    cout << "Вокзал"
         << endl;
    train_station ts("Станция 1");
    cout << "\t"
         << ts.get_name()
         << endl;
    ts.trns[0].set(1201, "Кировград", 19);
    //ts.trns[0].show();
    ts.trns[1].set(1202, "Москва", 20);
    //ts.trns[1].show();
    ts.trns[2].set(1203, "Минск", 17);
    //ts.trns[2].show();
    int time;
    cout << "Введите время: ";
    cin >> time;
    ts.show_by(time);
    system("pause");
    return 0;
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
26.03.2012, 22:57  [ТС]     Класс поезд, и вокзал. #3
Огромное вам спасибо!
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.03.2012, 23:06     Класс поезд, и вокзал. #4
А вот какой смысл в топорном сокрытии любых полей класса, если их всё равно можно получить или изменить функцией геттером сеттером?
У Страуструппа был адекватный пример, когда сокрытие необходимо для сохранения логической связанности данных (там был класс "сумма чисел")
А тут зачем лишние извращения с private???
Дмитрий3241
27.03.2012, 01:12
  #5

Не по теме:

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

Какой-то малоизвестный Бьерн Страуструпп в своей забытой всеми книжке "Язык программирования С++"
давал пример класса именно...
Бьерн Страуструп - Язык программирования С++. глава 6.2.5 Виртуальные функции
У Страуструппа был адекватный пример, когда сокрытие необходимо...
И еше в 3 точно вот такая фраза:
Ты HelloWorld хоть самостоятельно писал?

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.03.2012, 23:37     Класс поезд, и вокзал. #6
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Не по теме:
Kuzia domovenok, просматривал темы, в 5 разных точно были сообщение с сылками на Страуструппа. Тут людям нужно помогать а не указывать, что где то, в какой то книге, кто то приводил пример.
:LOL:
То есть посоветовать прочитать книгу ОБЯЗАТЕЛЬНУЮ для прочтения каждому, изучающему программирование это не считается помощью?
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
28.03.2012, 11:11     Класс поезд, и вокзал. #7
Kuzia domovenok,
А вот какой смысл в топорном сокрытии любых полей класса, если их всё равно можно получить или изменить функцией геттером сеттером?
У Страуструппа был адекватный пример, когда сокрытие необходимо для сохранения логической связанности данных (там был класс "сумма чисел")
А тут зачем лишние извращения с private???
Это хороший тон программирования - меня так вполне устраивает. Что я могу Вам сказать - почитайте, что такое инкапсуляция. С уважением.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.03.2012, 11:41     Класс поезд, и вокзал. #8
Kuzia domovenok, Геттеры/сеттеры практически всегда делать логичнее, как минимум в "свойствах" можно реализовать бизнес-логику. И непрямой доступ куда проще отловить, если потребуется запретить изменения извне.

Добавлено через 37 секунд
Дмитрий3241, А вы бред несете. Малоизвестный Страуструп... О да. Всего лишь создатель языка С++.
soon
28.03.2012, 11:48
  #9

Не по теме:

ForEveR, это писал Kuzia domovenok, в теме про комплексные числа. Причем это был явный сарказм, просто Дмитрий3241, не все процитировал

ForEveR
28.03.2012, 11:54
  #10

Не по теме:

soon, Понятно. Жаль, что не могу сообщение уже поменять)

Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
28.03.2012, 11:59     Класс поезд, и вокзал. #11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
сокрытии любых полей класса
такой вопрос:
а если знать как располагаются данные в классе, можно ли изменить приватный член методом записи данных в начало объекта + смещение приватного члена
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.03.2012, 12:14     Класс поезд, и вокзал. #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
class Cl
{
public:
   Cl():value(0) { }
   const int& get() const { return value; }
private:
   int value;
};
 
int main()
{
   Cl c;
   *(((char*)&c)) = 1;
   std::cout << c.get() << std::endl;
}
http://liveworkspace.org/code/9d0170...58687a0a9c08cf
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.03.2012, 12:21     Класс поезд, и вокзал. #13
Цитата Сообщение от eji Посмотреть сообщение
Kuzia domovenok, Это хороший тон программирования - меня так вполне устраивает. Что я могу Вам сказать - почитайте, что такое инкапсуляция. С уважением.
Ну а объяснить своими словами, чем именно это помогает программировать, никак да? Или единственное объяснение - "это хороший тон программирования, так большие дяди делают"...

Я говорю, если методы Get() Set() ничего не делают, кроме геттинга, сеттинга,
проще вынести поля класса в public, потому что private поля безопасности всё равно никакой не добавляют. Никакого "хорошего тона" в них нет
Сравни

C++
1
2
3
4
5
6
void train::set(int id, char *city, int t)
    {
        number_id = id;
        strcpy(destination, city);
        time = t;
    }
Любой пользователь класса может изменить поля number_id, destination и time произвольным образом, вызвав эту функцию. Ну и какая тогда роль у неё? Тупо копировать, а у геттеров тупо возвращать? спасибо, но я мог бы это сделать и с public полями; легче объявить поля
C++
1
2
3
4
public:
 int number_id;
    char destination[40];
    int time;
Другое дело, если мы заботимся о безопасности данных, но тогда о ней надо действительно заботиться, а не шаблонно действовать. скрыть данные в private, но при этом при попытке сеттинга проверять их корректность, например:
C++
1
2
3
4
5
6
7
8
9
void train::set(int id, char *city, int t)
    {
        number_id = id;
        if (strlen(city)>40) 
            strncpy(destination, city);
        else
            strcpy(destination, city);
        time = t;
    }
Тогда было бы ясно: Мы закрыли поле сити, чтобы при попытке его изменить пользователь не смог бы записать в него строку больше 40 символов. Так безопаснее.
Но этого нет. Тогда какой смысл в сеттерах, которые делают ровно то же, что мог бы сделать пользователь?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.03.2012, 12:35     Класс поезд, и вокзал. #14
Kuzia domovenok, Дело в стиле. По хорошему в классе данные должны быть закрыты, если сущность обладает некоторым поведением, а не просто набор данных (структура). Ну это конечно ИМХО, но подкрепленное опытом.
Не задумывались почему в шарпе к примеру в основном происходит работа через свойства и никого это не напрягает?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.03.2012, 12:43     Класс поезд, и вокзал. #15
Kuzia domovenok, проблема в том, что идеальное проектирование изначально - утопия. Код всегда будет дописываться или переписываться. Сегодня геттеры/сеттеры просто возвращают/устанавливают значение? Ну и ну их нафиг, сделаем поля открытыми! А завтра понадобится проводить дополнительные проверки. Ой, беда, надо сеттеры/геттеры. Ой, а уже куча программистов используют наш класс и могут достучаться до полей прямым доступом. И что делать? Просить пользователей переписать тонны готового кода?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2012, 13:03     Класс поезд, и вокзал.
Еще ссылки по теме:

C++ Класс "Вокзал", сделать метод прибытия поезда
C++ Поезд отправляется в h1:m1, время в пути h2:m2. Во сколько прибывает поезд?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
28.03.2012, 13:03     Класс поезд, и вокзал. #16
Kuzia domovenok,
Ну а объяснить своими словами, чем именно это помогает программировать, никак да?
Я Вам уже дал ответ, мне незачем пересказывать своими словами, что такое инкапсуляция, зачем она и так далее. Я программирую не первый год и приучил себя к одному стилю и не обязан менять свои принципы, потому что кто то "умнее" Страуструпа, Шилтда... Вы можете вообще поубирать права доступа и оставить только public, мне все равно на это, я пишу так как считаю нужным (береженного Бог бережет). Считаю, что диалог себя исчерпал.
Yandex
Объявления
28.03.2012, 13:03     Класс поезд, и вокзал.
Ответ Создать тему
Опции темы

Текущее время: 19:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru