0 / 0 / 0
Регистрация: 08.04.2017
Сообщений: 17
1

Выводится несколько рейсов вместо одного

21.12.2017, 21:14. Показов 538. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вечера форумчане! Есть такой вопрос: не могу понять, почему при поиске рейса по номеру рейса и дате рейса выводит несколько заявок, а должно выдать только одну. Если вводишь самый последний рейс в списке, то он выводится единственный, а если вводишь с 1 по предпоследний, то они все выводятся. Прилагаю код программы.
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
#include <iostream>
#include <string>
#include <iomanip>
#include "windows.h"
using namespace std;
 
struct Node
{
    char point[20];    //- пункт назначения;
    int reis;        //- номер рейса;
    char name[12];    //- фамилия пассажира;
    char surname[12];    //- имя
    char patr[12];    //- отчество
    char date[12];  //- желаемая дата вылета;
    Node * next;    // указатель на структуру заявка.
};
 
void Menu();
Node *first;
Node *addNode(Node *first); // - добавление заявок в список;
Node *deleteNode(Node *first); // - удаление заявок по заданному номеру рейса
void outNode(Node *first); // - вывод всех заявок.
void outNodeNum(Node *first); // вывод одной заявки
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int k = 5;
    while (k != 6)
    {   
        switch (k)
        {
        case 1: first = addNode(first); break;
        case 2: outNode(first); break;
        case 3: outNodeNum(first); break;
        case 4: first = deleteNode(first); break;
        case 5: Menu(); break;
        case 6: break;
        default: cout << "  ОШИБКА! Числа от 1 до 6.\n";     
        }
        cout << "\nВведите нужный пункт: ";
        cin >> k;
    }
    getchar(); // пауза    
    return 0;
}
 
 
void Menu()
{
    system("cls");
    cout << "\n";
    cout << "1 - Добавить заявку\n";
    cout << "2 - Вывести все заявки\n";
    cout << "3 - Вывести заявку по номеру рейса и дате вылета\n";
    cout << "4 - Удалить заявку\n";
    cout << "5 - Очистить экран\n";
    cout << "6 - Выход\n";
}
 
Node *addNode(Node *first)
{
    cout << "______________________________________________\n";
    Node *pv = new Node;
    cout << "Данные о заявке: \n";
    cout << "Введите пункт назначения > ";
    cin >> pv->point;
    cout << "Введите номер рейса > ";
    cin >> pv->reis;
    cout << "Введите фамилию пассажира > ";
    cin >> pv->name;
    cout << "Введите имя пассажира > ";
    cin >> pv->surname;
    cout << "Введите отчество пассажира > ";
    cin >> pv->patr;
    cout << "Введите дату вылета > ";
    cin >> pv->date;
    cout << "\n";
    pv->next = NULL;
    cout << "______________________________________________\n";
    if (first == NULL)
    {
        first = pv; 
    }
    else
    {
        Node *p = first;
        while (p->next != NULL)
        {
            p = p->next;
        }
        p->next = pv;
    }
    return first;
}
 
void outNode(Node *first)
{
    cout << setiosflags(ios::right);
    cout << "_________________________________________________________________\n";
    cout << "Данные по заявкам:\n";
    cout << "       Пункт  Номер    Фамилия      Имя      Отчество        Дата\n";
    cout << "  назначения  рейса  --------- ДАННЫЕ ПАССАЖИРА -----      вылета\n";
 
    Node *pv = first;
    while (pv)
    {
        cout << setw(12) << pv->point << setw(7) << pv->reis << setw(11) << pv->name;
        cout << setw(10) << pv->surname << setw(13) << pv->patr << setw(12) << pv->date << endl;
        pv = pv->next;
    }
    cout << "_________________________________________________________________\n";
}
 
void outNodeNum(Node *first)
{
    int num;
    string dat;
    Node *pv = first;
    cout << "Введите номер рейса: ";
    cin >> num;
    cout << "Введите дату: ";
    cin >> dat;
    int n = 1, fl = 0;
    while (pv)
    {
        if (pv->reis == num && pv->date == dat)
        {
            outNode(pv);
            break;
        }
        pv = pv->next;
    }
}
 
Node *deleteNode(Node *first)
{
    cout << "______________________________________________\n";
    cout << "Номер рейса, заявку по которому удалить: ";
    int num;
    cin >> num;
 
    Node *temp = first;
    int k = -1;
    int N = 0;
    while (temp)
    {
        if (temp->reis == num)
        {
            k = N;
        }
        temp = temp->next;
        N++;
    }
    N--;
    if (k != -1)
    {
        temp = first;
        // если нужно удалить 1-й узел и он единственный был в списке
        if (k == 0 && N == 0)
        {
            delete first;
            cout << "  Удаление прошло успешно!\n";
            cout << "______________________________________________\n";
            return NULL;
        }
        // если нужно удалить 1-й узел и он НЕ единственный в списке
        if (k == 0 && N > 0)
        {
            temp = temp->next;
            delete first;
            cout << "  Удаление прошло успешно!\n";
            cout << "______________________________________________\n";
            return temp;
        }
        // если нужно удалить узел где-то в середине списка, но не последнего
        Node *el = first;
        temp = first->next;
        while (temp->next)
        {
            if (temp->reis == num)
            {
                el->next = temp->next;
                delete temp;
                cout << "  Удаление прошло успешно!\n";
                cout << "______________________________________________\n";
                return first;
            }
            el = el->next;
            temp = temp->next;
        }
        // если нужно удалить последний узел
        el->next = NULL;
        delete temp;
        cout << "  Удаление прошло успешно!\n";
        cout << "______________________________________________\n";
        return first;
    }
    else
    {
        cout << "  Такого рейса нет или список пуст!\n";
        cout << "______________________________________________\n";
        return first;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2017, 21:14
Ответы с готовыми решениями:

Два раза выводится слово вместо одного
Здесь в первый раз &quot;Бот, &quot; выводится 2 раза, все последующие разы по 1 разу Вот отрывочек из...

Вместо одного принта и одного скана выводится 2 принта на один скан
Первый цикл проходит нормально, а далее небольшая проблемка. Вместо одного принта и одного скана...

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

Цикл прокручивается несколько раз, вместо одного
Добрый вечер. Недавно начал изучать Java. Написал простенькую программу с &quot;System.in.read()&quot; и...

4
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
22.12.2017, 09:17 2
потому что outNode предназначена для вывода всего списка рейсов, а не одного найденного элемента и не должна вызываться из outNodeNum
Для этого может быть написана отдельная функция
0
0 / 0 / 0
Регистрация: 08.04.2017
Сообщений: 17
22.12.2017, 11:38  [ТС] 3
Можете помочь с этим?)
0
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
22.12.2017, 11:46 4
vladson78, а я что сделал?
Хочешь сказать, ты написал самостоятельно эти 200+ строк, а уже найденную ошибку исправить не можешь? Или всё же не самостоятельно?
0
0 / 0 / 0
Регистрация: 08.04.2017
Сообщений: 17
22.12.2017, 11:53  [ТС] 5
Не самостоятельно.
0
22.12.2017, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2017, 11:53
Помогаю со студенческими работами здесь

Вместо создания одного массива создает несколько
Здравствуйте. Простите за наглость но задам два вопроса. 1 Вместо одного массива создает...

Происходит несколько редиректов 301 вместо одного
Здравствуйте. Проблема следующего характера. Сайт переехал на новый движок. С вордпресса на модекс....

Explorer отправляет несколько post запросов вместо одного
Через мазилу и гуглхром работает нормально, но вот эхплорер11 почему-то шлёт по несколько запросов...

Asus x55a - Клавиатура: скачет курсор, несколько символов вместо одного
При наборе текста проявляются след. проблемы: 1. Курсор может переместиться в произвольное...


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

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

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