Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1

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

07.09.2014, 18:59. Показов 4884. Ответов 6
Метки нет (Все метки)

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

main
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
#include<iostream>
#include<fstream>
#include<cstdlib>
#include"bus.h"
using namespace std;
 
int main()
{
    setlocale(0, "");
    Bus *pBeg = 0;
    bool bLabelOut = true;
 
    pBeg = read_base("base_in.txt");
 
    while (bLabelOut)
    {
        switch (menu_bus())
        {
        case 1: add (pBeg, read_bus());
            break;
        case 2: pBeg = delete_bus (pBeg);
            break;
        case 3: bLabelOut = false;
            break;
        default: cout<<"Введено некорpектное значение\n";
            break;
        }
    }
 
    if (!pBeg)
    {
        cout<<"База автобусов пуста\n";
        return 0;
    }
 
    bLabelOut = true;
    while (bLabelOut)
    {
        switch (menu())
        {
        case 1: departure();
            break;
        case 2: entry();
            break;
        case 3: print_location(PARK);
            break;
        case 4: print_location(ROAD);
            break;
        case 5: bLabelOut = false;
            break;
        default: cout<<"Введено некорpектное значение\n";
            break;
        }
    }
 
    write_base ("base_out.txt", pBeg);
 
    return 0;
}
bus.h
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
#ifndef BUS_H
#define BUS_H
 
const int cnLenghtName = 20;
 
struct Bus
{
    int number;
    char name[cnLenghtName];
    int rout;
    bool in_road;
    Bus *next;
};
 
enum location {PARK, ROAD};
 
Bus* add (Bus* begin, const Bus& bus);  
Bus* delete_bus (Bus* begin);
void departure();
void entry();
Bus* find_number(Bus* begin, char* name, Bus*& prev);
void get_number(int& number);
int menu_bus();
int menu();
void print(const Bus& bus);
void print_location(location loc);
Bus* read_base (char* filename);
Bus read_bus();
void write_base(char* filename, Bus* begin);
 
#endif BUS_H
bus.cpp
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
#include"bus.h"
#include<iostream>
#include<fstream>
#include<windows.h>
using namespace std;
 
inline void rus_in (char* buf)
{
    OemToCharA(buf, buf);
}
 
Bus* add (Bus* begin, const Bus& bus)
{
    Bus *pv = new Bus;
    *pv = bus;
    pv->next = 0;
    if (begin)
    {
        Bus *temp = begin;
        while (temp->next)
            temp = temp->next;
        temp->next = pv;
    }
    else
        begin = pv;
    return pv;
}
 
Bus* delete_bus (Bus* begin)
{
    cout<<"run delete\n";
    return 0;
}
void departure()
{
    cout<<"run departure\n";
}
 
void entry()
{
    cout<<"run entry\n";
}
 
Bus* find_number(Bus* begin, char* name, Bus*& prev)
{
    cout<<"run find_number\n";
    return 0;
}
void get_number(int& number)
{
    cout<<"Введите номер автобуса: ";
    cin>>number;
}
 
int menu_bus()
{
    int option;
    cout<<"Редактирование списка автобусов. Выберите действие:\n"
        <<"1 - добавить автобус в список\n2 - удалить автобус с списка\n3 - выход из редактирования списка\n";
    cin>>option;
    if (1 == option) return 1;
    else if (2 == option) return 2;
    else if (3 == option) return 3;
    else return 4;
}
 
int menu()
{
    int option;
    cout<<"Редактирование списка местоположения автобусов. Выберите действие:\n"
        <<"1 - ввести выехавший автобус\n2 - ввести въехавший автобус"
        <<"\n3 - вывод информации о автобусах в парке\n4 - вывод информации о автобусах на маршруте"
        <<"\n5 - выход из редактирования списка\n";
    cin>>option;
    if (1 == option) return 1;
    else if (2 == option) return 2;
    else if (3 == option) return 3;
    else if (4 == option) return 4;
    else if (5 == option) return 5;
    else return 6;
}
 
void print(const Bus& bus)
{
    cout<<"run print\n";
}
 
void print_location(location loc)
{
    cout<<"run print_location\n";
}
 
//------------------------------------- Чтение базы с файла
Bus* read_base (char* filename)                     
{
    Bus bus, *begin = 0;
    ifstream fin (filename, ios::in | ios::_Nocreate);
    if (!fin)
    {
        cout<<"Нет файла "<<filename;
        cout<<"\n";
        return 0;
    }
 
    while (fin>>bus.number)
    {
        fin.getline(bus.name, cnLenghtName);
        fin>>bus.rout;
        bus.in_road = false;            // При чтении все автобусы находятся в парке.
        begin = add(begin, bus);
    }
    fin.close();
    return begin;
}
 
//--------------------------------- Ввод информации о новом автобусе
Bus read_bus()
{
    Bus bus;
    get_number(bus.number);
    cout<<"Введите фамилию и инициалы водителя:\n";
    cin.get();                          // Нужно чтобы корректно работал следующий оператор. Убирает символ перевода строки.
    cin.getline(bus.name, cnLenghtName);
    rus_in(bus.name);
    for (int i = strlen(bus.name); i < cnLenghtName; i++)   // Добавляем пробелами поле фамилии для однотипности.
        bus.name[i] = ' ';
    bus.name[cnLenghtName - 1] = '\0';
    cout<<"\nВведите номер маршрута: ";
    cin>>bus.rout;
    cout<<"\n";
    return bus;
}
 
//--------------------------------------Запись базы в файл
void write_base(char* filename, Bus* begin)
{
    ofstream fout(filename, ios::out | ios::_Nocreate);
    if (!fout)
    {
        cout<<"Не найден файл "<<filename<<"\n";
    }
 
    while(begin)
    {
        fout<<begin->number<<" "
            <<begin->name<<" "
            <<begin->rout<<endl;    // Для простоты считаем что когда идет вывод в базу, всё автобусы находятся в парке.
        begin = begin->next;
    }
}
Проблема с функциями чтения базы и чтения нового автобуса.
Чтение базы вместо маршрута пишет мусор, и дальше чтение работает неправильно.
Если попытаться добавить автобус в список, указатель на начало обнуляется (почему?).

Вот текст файла для чтения base_in.txt:
(в тексте форматировано пробелами - номера маршрутов выстроены в столбик)
11125 Смирнов А. Л. 5
56278 Сидоров В. Л. 255
58796 Иванов А. Л. 125
21534 Петрович А. Л. 84
36854 Петров А. Л. 125
12457 Никифоров В. В. 47
12658 Недря в. в. 124
12354 Обухов П. П. 35
88546 Крылов К. В. 12
21354 Стоянов В. В. 254
15465 Гаманин С. К. 14
84752 Армянин К. Л. 148

Вот что пишет в выходной файл base_out.txt:

11125 Смирнов А. Л. -858993460

В чём проблема?
Подозреваю что некорректно работает считывание. Исправить не получается.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.09.2014, 18:59
Ответы с готовыми решениями:

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

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

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

6
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
07.09.2014, 19:19
Лучший ответ Сообщение было отмечено EfimKR как решение

Решение

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
Bus* read_base (char* filename)                     
{
    Bus bus, *begin = 0;
    ifstream fin (filename, ios::in | ios::_Nocreate);
    if (!fin)
    {
        cout<<"Нет файла "<<filename;
        cout<<"\n";
        return 0;
    }
 
    while (fin>>bus.number)
    {
        fin>>bus.name;// фамилия
        char n1[4],n2[4];
        fin>>n1; // имя
        fin>>n2; // отчество
        strcat(bus.name,n1); // прилепили имя
        strcat(bus.name,n2);// прилепили отчество
        fin>>bus.rout;
        bus.in_road = false;            // При чтении все автобусы находятся в парке.
        begin = add(begin, bus);
    }
    fin.close();
    return begin;
}
1
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
07.09.2014, 20:44  [ТС]
zss, нужны только инициалы.

Добавлено через 12 минут
Выводит только последнюю запись почему-то. И кушает пробел между фамилией и инициалами(
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
07.09.2014, 21:21
Цитата Сообщение от EfimKR Посмотреть сообщение
И кушает пробел
ввод текста завершается по пробельному символу и не включает его,
поэтому при выводе пробелы надо добвлять заново.
1
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
08.09.2014, 00:33  [ТС]
zss, а в чём может быть причина, что выводится только последняя запись?
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
08.09.2014, 08:47
Лучший ответ Сообщение было отмечено EfimKR как решение

Решение

Цитата Сообщение от EfimKR Посмотреть сообщение
в чём может быть причина
функция Bus* add (Bus* begin, const Bus& bus)
Должна возвращать указатель на начало списка
C++
1
return begin;
0
 Аватар для EfimKR
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
08.09.2014, 09:54  [ТС]
zss, точно. Большое спасибо.
Как всегда допустишь опечатку и думаешь, что работает правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2014, 09:54
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru