Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Структуры (http://www.tehnari.ru/f41/t88089/)

bulding 06.05.2013 22:39

Структуры
 
Описать структуру с именем MARSH, содержащую следующие поля:
1)название начального пункта маршрута;
2)название конечного пункта маршрута;
3)номер маршрута.
Написать программу, выполняющую следующие действия:
1)добавление n записей в массив структур
2)записи должны упорядочиваться по номерам маршрутов;
3)вывод на экран информации о маршруте, номер которого введен с клавиатуры;
4)если таких маршрутов нет, выдать на дисплей соответствующее сообщение.
5) удаление элементов массива, введенных с клавиатуры

все сделал,только как удалить элементы из массива, введенные с клавиатуры



Код:

#include <iostream>
#include <limits.h> //для INT_MAX
#include <iomanip> //для setw()
#include <fstream> //для файлового ввода/вывода

using namespace std;

//Структура Маршрута
struct MARSH
{
    char NameStart [16]; //Начальный пункт маршрута
    char NameEnd [16]; //Конечный пункт маршрута
    int Number; // Номер маршрута
};

int Count = 0; //Введеное кол-во маршрутов
const int MaxEl = 8; //Размерность массива
MARSH El[MaxEl]; // Массив элементов

//Функция вывода меню
char ShowMenu (void)
{
    cout<<
        "-----------------------"<<endl<<
        "          MENU        "<<endl<<
        "-----------------------"<<endl<<
        "<1> - Input Marshrut"<<endl<<
        "<2> - Print All Marshrut"<<endl<<
        "<3> - Print Marshrut of Number"<<endl<<
        "<4> - Quit"<<endl<<endl<<
        "<5> - Save To File"<<endl<<
        "<6> - Load From File"<<endl;

    cout<<": ";

    return getchar(); //Ожидаем ввода
};

//Функция Добавление элемента
bool Add()
{
    MARSH Temp; //Временная переменная структуры
    cin.sync(); //Синхронизируем входной поток (В нем скорее всего необработаная эскейп-последовательность
                //или код ентера
    cout<<endl<< //Рисуем шапка
        "----------------------------------------"<<endl<<
        "          Input new Marshrut"<<endl<<
        "----------------------------------------"<<endl;
    cout<<"Enter Start Marshrut: "; //Вводим начало маршрута
    cin.getline(Temp.NameStart,16);

    cout<<"Enter End Marshrut: "; //Водим конец маршрута
    cin.getline(Temp.NameEnd,16);

    cout<<"Enter Number (#) Marshrut: "; //Вводи номер маршрута
    cin>>Temp.Number;
    cout<<endl;

    if (Count < MaxEl) //Проверяем что бы массив был не переполнен (Условие задачи [8])
    {
        El[Count] = Temp; //Помещяем элемент в массив
        Count ++; //Интерементируем кол-во элементов
    } else { //Если переполнение
        cout<<endl<<"False :Massive is FULL"<<endl;
        cin.sync();
        return false;
    }

    cin.sync();
    return true;
}

//Функция сортивовки Массива элементов
void Sort (void)
{
    for (int i = 0; i< Count; i++)
    {
        int Min = INT_MAX; //Максимальное значение Int
        int minPos = -1; //Позиция с минимальным элементом
        for (int j=i; j<Count;j++) //Перебираем
        {
            if (El[j].Number<Min)//Ищим наименьший элемент
            {
                Min = El[j].Number;
                minPos = j;
            }
            MARSH Temp; //Меняем местами по-возрастанию Ном. маршрута элементы
            Temp = El[i];
            El[i] = El[minPos];
            El[minPos] = Temp;
        }
    }
}

//Функция вывода Элементов Массива (Всех
void Print(void)
{
    //Рисуем шапку setw(int) длина поля для вывода
    cout<<setw(3)<<"  "<<setw(6)<<"#    "<<setw(17)<<"Start Marshrut  "<<setw(17)<<"End Marshrut  "<<endl<<
        "------------------------------------------"<<endl;
    cout.setf(ios::left);
    //Обходим массив элементов и печатаем все
    for (int i=0; i < Count; i++)
    {
        cout<<setw(3)<<i+1<<setw(6)<<El[i].Number<<setw(17)<<El[i].NameStart<<setw(17)<<El[i].NameEnd<<endl;
    }
    cout.unsetf(ios::left);
    cout<<"------------------------------------------"<<endl<<endl;

    cin.sync(); //синхронизация потока и задержка
    cin.get();
}

//Функции проверки маршрута по его номеру и вывод его на экран
void PrintOfNumMars(void)
{
    int NumMarsh; // Номер маршрута
    cin.sync();
    cout<<endl<<"Input No Marshruta : ";
    cin>>NumMarsh; //Получаем номер маршрута
    cout<<endl;
    //Обходим весь цикл элементов
    for (int i=0; i < Count; i++)
    {
        //Пытаемся найти требуемый номер маршрута
        //если нашли отрисовываем шапку выводим элемент и выходи return ом из функции
        if (El[i].Number == NumMarsh)
        {
            cout<<setw(3)<<"  "<<setw(6)<<"#    "<<setw(17)<<"Start Marshrut  "<<setw(17)<<"End Marshrut  "<<endl<<
                "------------------------------------------"<<endl;
            cout<<setw(3)<<i+1<<setw(6)<<El[i].Number<<setw(17)<<El[i].NameStart<<setw(17)<<El[i].NameEnd<<endl;

            cin.sync(); //синхронизация потока и задержка
            cin.get();
            return;
        }
    }
    //Если не нашли элемента с треб. номером пишим что ничего не вышло :-)
    cout<<"Marshrut "<<NumMarsh<<" NOT FOUND"<<endl;

    cin.sync(); //синхронизация потока и задержка
    cin.get();
}

//Функция сохранения массива элементов в файл
void SaveToFile(void)
{
    char  filename[256]; //Имя файла
    cout<<endl<<"Input Filename to Save Date : ";
    cin.sync();
    cin.get(filename,256); //Вводим имя файла

    ofstream OutFile(filename,ios::binary); //Определяем выходной поток и делаем его бинарным
    for (int i=0; i < Count; i++)
    {
        OutFile.write(reinterpret_cast<char*>(&El[i]),sizeof(El[i])); //Пишим элементы в файл
    }
    OutFile.close(); //Закрываем файл
}

//Функция загрузки массива из файла
void LoadFromFile(void)
{
    char  filename[256]; //Имя файла
    cout<<endl<<"Input Filename to Load Date : ";
    cin.sync();
    cin.get(filename,256); //Получение имени файла

    ifstream InFile(filename,ios::binary); //Определение входного потока как бинарного
    Count = 0;
    InFile.read(reinterpret_cast<char*>(&El[Count]),sizeof(El[Count])); //Читаем первый элемент из файла
    while (!InFile.eof()) // Пока не конец файла читаем остальные элементы
    {
        InFile.read(reinterpret_cast<char*>(&El[Count]),sizeof(El[Count]));
        Count++;
    }

    InFile.close(); //Закрываем файл
}

//Входная функция программы
int main (void)
{
    char ch=0;
    while (ch !='4') //Пока не введено '4' - ВЫХОД, то повторять меню
    {
        cin.sync();
        ch = ShowMenu();
        switch (ch)
        {
        case '1': Add();Sort();break;
        case '2': Print();break;
        case '3': PrintOfNumMars();break;
      /* case '5': SaveToFile();break;
        case '6': LoadFromFile();break;*/
        }
    }
    return 0;
}



Часовой пояс GMT +4, время: 21:22.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.