Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматизированная информационная система 
:(
    Опции темы
Кли
Дата 24.12.2018, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Здравствуйте!! Помогите пожалуйста, с проблемой. Написал код, 1-3 пункты работают, 4 пункт не так работает, мне надо по последней станции вывести инфу об тих поездах. Например: у меня есть станции: СПб-Москва, Казань-Москва и Новгород-Воронеж, я ввожу конечную стацию Москва, и у меня выводит все три станции, а по идее надо Новгород-Воронеж убрать из списка
Скрытый текст
Код

/* Вариант 9
Написать программу «Автоматизированная информационная система на железнодорожном вокзале».
Информационная система содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: 
- номер поезда; 
- станция назначения;
- время отправления.
Программа должна обеспечивать выбор с помощью меню и выполнение одной из следующих функций:
- первоначальный ввод данных в информационную систему (с клавиатуры или из файла);
- вывод сведений по всем поездам;
- вывод сведений по поезду с запрошенным номером;
- вывод сведений по тем поездам, которые следуют до запрошенной станции назначения. 
Хранение данных организовать с применением контейнерного класса vector. */
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <conio.h>
#include <vector>
using namespace std;
class Train
{
    int number;
    string destination;
    string time;
public:
    Train()
    {
        number = 0;
        destination = "";
        time = "";
    }
    Train(int NumParam, string DestParam, string TimeParam)
    {
        number = NumParam;
        destination = DestParam;
        time = TimeParam;
    }
    int GetNumber()
    {
        return number;
    }
    Train(Train const &copy):number(copy.number), destination(copy.destination), time(copy.time) {}
    string GetDestination()
    {
        return destination;
    }
    string GetTime()
    {
        return time;
    }
    void operator = (Train objRight)
    {
        number = objRight.number;
        destination = objRight.destination;
        time = objRight.time;
    }
};
// Функция, для ввода данных
void AddTrain(vector <Train> &vSource)
{
    int numb;
    string station,times;
    cout << "Введите номер поезда: ";
    cin >> numb; 
    cin.ignore();
    cout << "Введите станцию назначения: ";
    getline(cin, station, '\n');
    cout << "Введите время отправления: ";
    cin >> times; 
    cin.ignore();
    vSource.push_back(Train(numb, station, times));
}
// Функция списка данных
void PrintList(vector <Train> &vSource)
{
    if (vSource.empty())
    {
        cout <<"Список пуст";
        return;
    }
    vector <Train>::iterator iterSource = vSource.begin();
    cout << "Номер поезда пункт назначения время отправления " << endl;
    while (iterSource != vSource.end())
    {
        cout << iterSource -> GetNumber() << '\t' << iterSource -> GetDestination() << '\t' << iterSource -> GetTime() << '\n';
        iterSource++;
    }
}
// Функция, для информации о поездах
void GetInfoTrain(vector <Train> &vSource)
{
    if (vSource.empty())
    {
        cout <<"Список пуст";
        return;
    }
    vector <Train>::iterator iterSource = vSource.begin();
    bool found = false;
    int train_search;
    cout << "Введите номер поезда: ";
    cin >> train_search; 
    cin.ignore();
    while (iterSource != vSource.end())
    {
        if (iterSource -> GetNumber() == train_search)
        {
            found = true;
            cout << iterSource -> GetDestination() << '\t' << iterSource -> GetTime() << '\n';
        }
        iterSource++;
    }
    if (!found) cout << "Такого поезда не найдено";
}
// Функция, для информации о станции
void GetInfoStation(vector <Train> &vSource)
{
    if (vSource.empty())
    {
        cout <<"Список пуст";
        return;
    }
    vector <Train>::iterator iterSource = vSource.begin();
    bool found = false;
    string station_search;
    cout << "Введите станцию назначения: ";
    getline(cin, station_search, '\n');
    while (iterSource != vSource.end())
    {
        if (iterSource -> GetDestination() != station_search)
        {
            found = true;
            cout << iterSource -> GetNumber() << '\t' << iterSource -> GetDestination() << '\t' << iterSource -> GetTime() << '\n';
        }
        iterSource++;
    }
    if (!found) cout << "Нет такой станции";
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
    vector <Train> vDataBase;
    char cKey;
    do{
        cout << "1 - Добавить информацию о новом поезде в базу данных\n";
        cout << "2 - Показать базу данных\n";
        cout << "3 - Показать информацию о конкретном поезде\n";
        cout << "4 - Показать информацию о прибывающих поездах на станцию\n";
        cout << "5 - Выход\n";
        cKey = _getch();
        if (cKey == '1')
        {
            AddTrain(vDataBase);
        }
        else if (cKey == '2')
            PrintList(vDataBase);
        else if (cKey == '3')
            GetInfoTrain(vDataBase);
        else if (cKey == '4')
            GetInfoStation(vDataBase);
        else if (cKey == '5') break;
        else 
        continue;
        _getch();
    }
        while (cKey != '5');
        return 0;
}


PM MAIL   Вверх
xvr
Дата 25.12.2018, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



В строке 129 должно быть ==, а не !=

PS. Код можно немного причесать

PM MAIL   Вверх
Кли
Дата 25.12.2018, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



если там равенство написать, то когда конечную станцию вводишь Москва, он мне выводит, что такой станции нет, а когда полностью вводишь станцию Казань-Москва, то он выводит информацию
PM MAIL   Вверх
Кли
Дата 25.12.2018, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Цитата(xvr @  25.12.2018,  14:53 Найти цитируемый пост)
PS. Код можно немного причесать

каким образом?
PM MAIL   Вверх
xvr
Дата 25.12.2018, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Кли @  25.12.2018,  15:36 Найти цитируемый пост)
если там равенство написать, то когда конечную станцию вводишь Москва, он мне выводит, что такой станции нет, а когда полностью вводишь станцию Казань-Москва, то он выводит информацию 

Угу, причем всю, какая есть  smile Это вас не натолкнуло на мысль, что всё же != тут быть не должно?

Вам нужно проверить, что iterSource -> GetDestination() вернёт нечто, в форме <любая строка>-<ваш station_search>
Это простым == или != не проверить. Это можно проверить регуляркой:
Код

     if (regex_search( iterSource -> GetDestination(), regex('-'+station_search+'$'))
      ...

Не забудьте добавить #include <regex>


Цитата(Кли @  25.12.2018,  16:34 Найти цитируемый пост)
каким образом? 


Ну например:
Код

template<class Predicate>
void find(vector <Train> &vSource, Predicate& predicate)
{
   if (vSource.empty())
   {
     cout << "Список пуст" << endl;
     return;
   }
   bool has_some  = false;
   for(auto& item : vSource)
     if (predicate(item))
     {
       has_some = true;
       cout << item. GetNumber() << '\t' << item.GetDestination() << '\t' << item.GetTime() << endl;
     }
   if (!has_some) cout << "Ничего не найдено" << endl;
}

void PrintList(vector <Train> &vSource)
{
    cout << "Номер поезда пункт назначения время отправления " << endl;
    find(vSource, [] (Train&) {return true});
}

void GetInfoTrain(vector <Train> &vSource)
{
    int train_search;
    cout << "Введите номер поезда: ";
    cin >> train_search; 
    cin.ignore();
     find(vSource, [=] (Train& t) {return train_search == t.GetNumber();});
}

ну и т.д.

PM MAIL   Вверх
Кли
Дата 25.12.2018, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



благодарю за помощь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1135 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.