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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
07.09.2014, 18:59     Составить программу которая содержит динамическую информацию об автобусном парке #1
Задание:
//Составить программу которая содержит динамическую информацию об автобусном парке.
//Сведения о каждом автобусе включают:
//* номер автобуса;
//* фамилию и инициалы водителя;
//*номер маршрута;
//Программа должна обеспечивать:
//* начальное формирование данных об автобусах в виде списка;
//* при выезде автобуса с парка, он переносится в список на маршруте;
//* при въезде в парк, он переносится в список находящихся в парке;
//* по запросу выдаются сведения об автобусах на маршруте или в парке.

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

В чём проблема?
Подозреваю что некорректно работает считывание. Исправить не получается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 18:59     Составить программу которая содержит динамическую информацию об автобусном парке
Посмотрите здесь:

Составить программу, которая содержит текущую информацию о книгах в библиотеке C++
C++ Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке.
C++ Составить программу, которая содержит текущую информацию о заявках на авиабилеты
Составить программу, которая содержит текущую информацию о книгах в библиотеке C++
Списки. Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Исправить ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,191
Завершенные тесты: 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;
}
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
07.09.2014, 20:44  [ТС]     Составить программу которая содержит динамическую информацию об автобусном парке #3
zss, нужны только инициалы.

Добавлено через 12 минут
Выводит только последнюю запись почему-то. И кушает пробел между фамилией и инициалами(
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,191
Завершенные тесты: 1
07.09.2014, 21:21     Составить программу которая содержит динамическую информацию об автобусном парке #4
Цитата Сообщение от EfimKR Посмотреть сообщение
И кушает пробел
ввод текста завершается по пробельному символу и не включает его,
поэтому при выводе пробелы надо добвлять заново.
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
08.09.2014, 00:33  [ТС]     Составить программу которая содержит динамическую информацию об автобусном парке #5
zss, а в чём может быть причина, что выводится только последняя запись?
zss
Модератор
Эксперт С++
 Аватар для zss
5948 / 5553 / 1785
Регистрация: 18.12.2011
Сообщений: 14,191
Завершенные тесты: 1
08.09.2014, 08:47     Составить программу которая содержит динамическую информацию об автобусном парке #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от EfimKR Посмотреть сообщение
в чём может быть причина
функция Bus* add (Bus* begin, const Bus& bus)
Должна возвращать указатель на начало списка
C++
1
return begin;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2014, 09:54     Составить программу которая содержит динамическую информацию об автобусном парке
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
EfimKR
 Аватар для EfimKR
48 / 21 / 10
Регистрация: 24.06.2014
Сообщений: 210
Записей в блоге: 1
08.09.2014, 09:54  [ТС]     Составить программу которая содержит динамическую информацию об автобусном парке #7
zss, точно. Большое спасибо.
Как всегда допустишь опечатку и думаешь, что работает правильно.
Yandex
Объявления
08.09.2014, 09:54     Составить программу которая содержит динамическую информацию об автобусном парке
Ответ Создать тему
Опции темы

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