Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
#1

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

07.09.2014, 18:59. Просмотров 1793. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 18:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить программу которая содержит динамическую информацию об автобусном парке (C++):

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

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

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

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

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

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

6
zss
Модератор
Эксперт С++
6542 / 6104 / 2012
Регистрация: 18.12.2011
Сообщений: 15,883
Завершенные тесты: 1
07.09.2014, 19:19 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
07.09.2014, 20:44  [ТС] #3
zss, нужны только инициалы.

Добавлено через 12 минут
Выводит только последнюю запись почему-то. И кушает пробел между фамилией и инициалами(
0
zss
Модератор
Эксперт С++
6542 / 6104 / 2012
Регистрация: 18.12.2011
Сообщений: 15,883
Завершенные тесты: 1
07.09.2014, 21:21 #4
Цитата Сообщение от EfimKR Посмотреть сообщение
И кушает пробел
ввод текста завершается по пробельному символу и не включает его,
поэтому при выводе пробелы надо добвлять заново.
1
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
08.09.2014, 00:33  [ТС] #5
zss, а в чём может быть причина, что выводится только последняя запись?
0
zss
Модератор
Эксперт С++
6542 / 6104 / 2012
Регистрация: 18.12.2011
Сообщений: 15,883
Завершенные тесты: 1
08.09.2014, 08:47 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от EfimKR Посмотреть сообщение
в чём может быть причина
функция Bus* add (Bus* begin, const Bus& bus)
Должна возвращать указатель на начало списка
C++
1
return begin;
0
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
08.09.2014, 09:54  [ТС] #7
zss, точно. Большое спасибо.
Как всегда допустишь опечатку и думаешь, что работает правильно.
0
08.09.2014, 09:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 09:54
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru