Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 1
1

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке

25.06.2019, 18:59. Показов 3873. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте. Скажите пожалуйста, в чём может быть проблема различных багов в результате выполнения программы ? Переполнение стека ?

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке.

Сведения о каждом автобусе содержат:
• номер автобуса;
• фамилию и инициалы водителя;
• номер маршрута;
• признак того, где находится автобус — на маршруте или в парке.
Программа должна обеспечивать :
• начальное формирование данных о всех автобусах в виде списка;
• при выезде каждого автобуса из парка вводится номер автобуса, и программа
устанавливает значение признака «автобус на маршруте»;
• при въезде каждого автобуса в парк вводится номер автобуса, и программа устанавливает значение признака «автобус в парке»;
• по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
#include "pch.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>
#include <fstream>
#include <time.h>
 
using namespace std;
 
struct Rec {
    int num;
    string fio;
    int mnum;
    Rec* pNext;
};
 
typedef Rec* PtrRec;
 
class buspark
{
public:
    int Create_List() { // процедура создания списка автобусов
        PtrRec pAux;
        PtrRec pT;
        string filename;
        char ch = '\0';
        PtrRec pBegin;
        pBegin = new Rec;
        pBegin->pNext = 0;
 
        cout << "Vvedite imya faila ";
        cin >> filename;
 
        ofstream file(filename.c_str());
        if (!file) {
            cout << endl << "File dont exist\n";
            _getch();
            return -1;
        }
 
        cout << endl << "Vvedite nomer avtobysa\n"; cin >> pBegin->num;
 
        cout << endl << "Vvedite Fio voditelya\n"; cin >> pBegin->fio;
 
        cout << endl << "Vvedite nomer marshruta\n"; cin >> pBegin->mnum;
 
        file.write((char *)&pBegin, sizeof(PtrRec));
 
 
 
        pAux = pBegin;
        cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
        ch = _getch();
 
        while (ch == 'y') {
            pT = new Rec;
            pAux->pNext = pT;
            pT->pNext = 0;
            cout << endl << "Vvedite nomer avtobysa\n"; cin >> pT->num;
 
            cout << endl << "Vvedite Fio voditelya\n"; cin >> pT->fio;
 
            cout << endl << "Vvedite nomer marshruta\n"; cin >> pT->mnum;
 
            cout << pT->num << pT->fio << pT->mnum;
 
            file.write((char *)&pT, sizeof(PtrRec));
 
            pAux = pT;
            cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
            ch = _getch();
        }
        delete pBegin;
 
        file.close();
        return 0;
    }
 
    int Print_List() { // процедура печати списка автобусов
 
        int i, i2;
        string sh;
 
        PtrRec pAux;
        string filename;
        PtrRec pBegin;
        pBegin = new Rec;
        pBegin->pNext = 0;
 
        pAux = pBegin;
 
        cout << "Vvedite imya faila ";
        cin >> filename;
 
        ifstream file(filename.c_str());
        if (!file) {
            cout << endl << "File dont exist\n";
            _getch();
            return -1;
        }
 
        cout << endl << "Nomer avtobyca | Fio vodiLbl | Nomer marshruta\n";
        while (pAux != 0) {
 
            file >> pAux->num >> pAux->fio >> pAux->mnum;
 
            cout << endl << pAux->num << " " << pAux->fio << " " << pAux->mnum;
            cout << endl << "----------------------------------\n";
            pAux = pAux->pNext;
        }
        delete pBegin;
 
        file.close();
        return 0;
    }
 
    void Otpravl() { // процедура отправки автобуса на маршрут
 
        int nomer;
 
        PtrRec pLmarsh;
        pLmarsh = new Rec;
        pLmarsh->pNext = 0;
 
        PtrRec pLpark;
        pLpark = new Rec;
        pLpark->pNext = 0;
 
        PtrRec pAux, pT1, pT2;
        PtrRec pNext;
 
        cout << endl << "Vvedite nomer avtobyca dlya otpravki na marshrut: "; cin >> nomer;
        pAux = pLpark;
 
        while ((pAux != 0) && (pAux->num != nomer))
        {
            pAux = pAux->pNext;
            if (pAux == 0)
                cout << endl << "V parke Het avtobyca s takim nomerom!";
            else // удаляем автобус из парка и ставим его на маршрут
            {
                if (pAux = pLpark) pLpark = pAux->pNext;
                else
                {
                    pT1 = pLpark;
                    while (pT1->pNext != pAux)
                    {
                        pT1 = pT1->pNext;
                        pT1->pNext = pAux->pNext;
                    }
                    pAux->pNext = pLmarsh;
                    pLmarsh = pAux;
                }
 
            }
        }
        delete pLmarsh;
        delete pLpark;
    }
 
    void VPark() { // процедура отправки автобуса в парк
 
        int nomer;
 
        PtrRec pLmarsh;
        pLmarsh = new Rec;
        pLmarsh->pNext = 0;
 
        PtrRec pLpark;
        pLpark = new Rec;
        pLpark->pNext = 0;
 
        PtrRec pNext;
        PtrRec pAux, pT1, pT2;
 
        cout << endl << "Vvedite nomer avtobyca dlya otpravki v park"; cin >> nomer;
        pAux = pLmarsh;
 
        while ((pAux != 0) && (pAux->mnum != nomer))
        {
            pAux = pAux->pNext;
            if (pAux = 0)
                cout << endl << "V parke Het avtobyca s takim nomerom!";
            else // удаляем автобус из парка и ставим его на маршрут
            {
                if (pAux = pLmarsh) pLmarsh = pAux->pNext;
                else
                {
                    pT1 = pLmarsh;
                    while (pT1->pNext != pAux)
                    {
                        pT1 = pT1->pNext;
                        pT1->pNext = pAux->pNext;
                    }
                    pAux->pNext = pLpark;
                    pLpark = pAux;
                }
            }
        }
        delete pLmarsh;
        delete pLpark;
    }
 
 
};
 
 
int ShowMenu()
{
    char ch = '\0';
    // рисуем меню
    puts("1 : Sozdat Spisok avtobusov");
    puts("2 : Pokazat Spisok Avtobysov");
    puts("3 : Poslat Avtobys v Put");
    puts("4 : Poslat Avtobus na parkovku");
    puts("5 : Exit");
 
    ch = _getch(); // считываем выбор пользователя
 
    return atoi(&ch); // возвращаем код выбранного меню
}
 
int main()
{
    PtrRec spPark;
    PtrRec spMarsh;
 
    buspark *Data = new buspark;
 
    while (1) // выполняем в бесконечном цикле
    {
        switch (ShowMenu()) // показываем меню и проверяем что выбрал пользователь
        {
        case 1: Data->Create_List(); break; // если 1, то создаём список автобусов
        case 2: Data->Print_List(); break; // если 2, то смотрим список
        case 3: Data->Otpravl(); break; // если 3, то отправляем автобусы на маршрут
        case 4: Data->VPark(); break; // если 4, то отправляем автобусы в парк
        case 5: return 0; // если 5 то выходим из программы
        default:  // если другая кнопка, ничего не делаем
            break;
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2019, 18:59
Ответы с готовыми решениями:

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке
Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном...

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке.
Есть готовая программа, но понять бы, почему не запускается.... Составить программу, которая...

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке
Всем доброго времени суток... у меня к вам огромная просьба....вы не могли бы посмотреть есть ли в...

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке
Прошу помочь с написанием программы. Условие: Составить программу, которая содержит динамическую...

1
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
30.06.2019, 02:40 2
Лучший ответ Сообщение было отмечено _Тимофей_ как решение

Решение

Цитата Сообщение от _Тимофей_ Посмотреть сообщение
Переполнение стека ?
Не-а.
Проблема в прокладке.

Ваша программа, не в обиду, бред полный. Если она даже как-то и работает - это чудо. Думаю, если вы ещё раз внимательно посмотрите на своё творение, то некоторые проблемы поймёте сами.

Из неочевидного:

1. file.write((char *)&pBegin, sizeof(PtrRec)); Во-первых, pBegin - это уже указатель на структуру (т.е. адрес начала структуры), которую вы пытаетесь записать в файл. А &pBegin - это адрес этого указателя; и по этому адресу ваших данных нет. Т.е. оператор взятия адреса тут лишний.

Во-вторых, структура Rec содержит поле типа std::string. Этот класс, в общем случае, держит свои данные, т.е. строку, в куче, а в самом экземпляре класса содержатся вспомогательные данные и адрес строки в куче. Следовательно, метод ofstream::write() запишет в файл только эти вспомогательные данные и адрес, но не саму строку. Поэтому вашу структуру записывать в файл этим способом нельзя.

2. Метод ofstream::write() предназначен для записи в бинарный файл. Вы открываете файл в текстовом режиме.

3. Информацию в файл вы записываете методом для записи бинарных файлов (в Create_List()), а читаете (в Print_List()) из текстового файла (открываете файл в текстовом режиме) операторами, предназначенными для чтения из текстового файла (>>). Так нельзя. Либо вы пишите и читаете информацию в текстовом режиме, либо в бинарном - одно из двух.

4. Хотя это и очевидно... Методы вашего класса Otpravl() и VPark() вообще ничего не знают про то, что вы вводили в методе Create_List().

5. if (pAux = pLpark) pLpark = pAux->pNext; Присваивание вместо проверки на равенство. Надо внимательнее. Это не Бейсик.

---

Некоторые общие соображения:

1. У вас в задании сказано "начальное формирование данных о всех автобусах в виде списка". В каком смысле здесь употреблено слово "список"? В обиходном? Или как структура данных? Потому что если в обиходном, то проще было бы использовать std::vector для хранения информации об автобусах.

2. У вас в задании сказано "Сведения о каждом автобусе содержат: <...> признак того, где находится автобус — на маршруте или в парке". Где в структуре Rec этот самый признак? Как следствие вы получили геморрой с удалением автобуса из одного списка ("автобусы в парке") и вставкой его в другой список ("автобусы на маршруте"). И боль будет долгой, поскольку правильно реализовать эту идею у вас не получилось. А оно вам надо?

3. Я бы вам посоветовал:
  • Разграничить доступ к информации. Что бы одна сущность отвечала за хранение информации об автобусе. (Примерный аналог - ваша структура Rec). И что бы другая сущность отвечала за автобусный парк: добавление/удаление автобусов, выпуск на маршрут и возврат с маршрута. (Примерный аналог - ваш класс buspark).
  • Переименовать структуру Rec во что-то типа BusInfo. (А по-хорошему сделать её классом.) Убрать поле pNext. Добавить переменную для признака "автобус на маршруте". Добавить дружественную перегрузку оператора вывода в поток (<<) для вывода информации об автобусе на консоль. Добавить методы для записи в файл и для чтения из файла (какой режим использовать текстовый или бинарный - решите сами).
  • Если вам реально нужна струкура данных список, в класс buspark добавить описание структуры для списка и приватную переменную указатель на начало списка:
    C++
    1
    2
    3
    4
    5
    6
    
    private:
        struct ListItem {
            ListItem *pNext;
            BusInfo busInfo;
        };
        ListItem *pHead;
    Иначе можно просто хранить информацию об автобусах в векторе:
    C++
    1
    2
    
    private:
        vector<BusInfo> buses;
    Кстати это облегчит и поиск автобуса, если попользовать функцию std::find_if() из заголовка <algorithm>.
  • Поскольку теперь информация об автобусах хранится непосредственно в классе, то она будет доступна во всех методах класса.
  • Возможность сохранении информации обо всех известных автобусах в файл и чтение её из файла можно использовать для того, что бы не вводить десяток автобусов с клавиатуры каждый запуск программы
  • Использовать признак "автобус на маршруте" для обеспечения "по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте".
  • Если вы работаете под Windows, то если сделать так:
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    
    #include <Windows.h>
    ...
    int main()
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    ...
    }
    то в программе можно будет вводить и выводить информацию с/на консоль с ипользованием кириллицы.
1
30.06.2019, 02:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2019, 02:40
Помогаю со студенческими работами здесь

Списки. Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Исправить ошибку
Помогите исправить ошибки у меня MinGW Developer Studio 2.05 установлен.Я его отсюда скачивал...

Составить программу, которая содержит информацию о наличии автобусов в автобусном парке
Всем добрый день. Если будет у вас свободная минутка, пожалуйста помогите. Составить программу,...

Составить программу , которая содержит динамическую информацию о наличие автобусов в автобусном парке
Составить программу , которая содержит динамическую информацию о наличие автобусов в автобусном...

Составить программу, которая содержит динамическую информацию о наличие автобусов в автобусном парке
С++ Составить программу , которая содержит динамическую информацию о наличие автобусов в автобусном...

Составить класс, который содержит информацию о наличии автобусов в автобусном парке
Задание Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get...

Составить программу которая содержит динамическую информацию об автобусном парке
Задание: //Составить программу которая содержит динамическую информацию об автобусном парке....


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru