Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
18.08.2019
Размер:
5.2 Кб
Скачать
#include "precompilator.h"
#include "functions.h"

void print_train(Ttrain *arr, int N)//распечатывает данные структуры
{
    for(int i=0; i < N ; i++)
    {
    cout << endl;
    cout << arr[i].NAZN << endl;
    cout << arr[i].NUMR << endl;
    cout << arr[i].TIME << endl;
    }
}

void file_train(Ttrain *arr, int N)//считывание из файла
{
    int i;
    ifstream fp("structures.txt");
    if(!fp)
        cout << "file don't opened \n";

    for(i = 0; i < N; i++)
    {
        fp >> arr[i].NAZN;
        fp >> arr[i].TIME;
        fp >> arr[i].NUMR;
    }
    print_train(arr,N);
fp.close();
}

void input_train(Ttrain *arr, int N)//ввод с клавиатуры
{
    int i;
for(i = 0; i < N; i++)
    {
     cout << "Введите название пункта назначения \n";
     cin >> arr[i].NAZN;
     cout << "Введите время отправления \n";
     cin >> arr[i].TIME;
     cout << "Введите номер поезда \n";
     cin >> arr[i].NUMR;
    }
}

void preordering(Ttrain *arr, int N)//упорядочивание по алфавиту
{
int i, j;
Ttrain tmp;

ofstream fp("structuries.dat");//бинарный файл
if(!fp)
        cout << "file don't opened \n";

cout << "\n До сортировки \n";
    for(i = 0; i < N; i++)
        cout << i+1 << " " << arr[i].NAZN << endl;

for (i = 1; i < N; i++)
    for (j = 0; j < N - i; j++)
        if (arr[j].NAZN > arr[j + 1].NAZN)//BUBBLE
            {
            tmp  = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
            }

cout << "\n После сортировки \n";
print_train(arr,N);

for(int i=0; i < N ; i++)
    {
    fp.write((char*)&arr[i].NAZN, sizeof(arr[i].NAZN));//запись в бинарный файл
    fp.write((char*)&arr[i].NUMR, sizeof(arr[i].NUMR));
    fp.write((char*)&arr[i].TIME, sizeof(arr[i].TIME));
    }

fp.close();
}

void search_train(Ttrain *arr, int N)//поиск по времени отправления
{
    int i, sw = 1;
    string s;

    cout << "Введите время отправления для поиска \n";
    cin >> s;

    for(i = 0; i < N; i++)
        if(arr[i].TIME > s)
           {
            cout << endl;
            cout << "№" << arr[i].NUMR << endl;
            cout << arr[i].NAZN << endl;
            cout << arr[i].TIME << endl;
            sw = 0;
            }

    if(sw) cout << "\nДанные отсутствуют\n";
}

void exit_prog(Ttrain *arr, int N)
{
cout << "\nВыход из программы ...\n";
exit(0);
}

void bin_train(Ttrain *arr, int N)//считывание из бинарного файла
{
    int i, k;
    string s, t;

    ifstream fp ("structuries.dat");
    if(!fp)
        cout << "file don't opened \n";

    for(i=0; i < N ; i++)
    {
      fp.read((char*)&s, sizeof(arr[i].NAZN));
      fp.read((char*)&k, sizeof(arr[i].NUMR));
      fp.read((char*)&t, sizeof(arr[i].TIME));
      cout<<"///"<<endl;
      cout << s << endl;
      cout << k << endl;
      cout << t << endl;
    }

    fp.close();
}

void bin_search_num(Ttrain *arr, int N)// поиск по номеру поезда
{
    int i,k, num;
    string s, t;

    ifstream fp ("structuries.bin");
    if(!fp)
        cout << "file don't opened \n";

    cout << "Введите номер поезда для поиска \n";
    cin >> num;

    for(i=0; i < N ; i++)
    {
      fp.read((char*)&s, sizeof(arr[i].NAZN));
      fp.read((char*)&k, sizeof(arr[i].NUMR));
      fp.read((char*)&t, sizeof(arr[i].TIME));

      if(k == num)
        break;
    }
    if(k != num)
        cout << "No information in database\n";
    else
    cout<<arr[i].NAZN<<" "<<"№"<<arr[i].NUMR<<" "<<arr[i].TIME<<endl;

    fp.close();
}

void bin_search(Ttrain *arr, int N)//считывание из бинарного файла по номеру записи
{
    int k, num, ssize;
    string s, t;

    ifstream fp ("structuries.bin");
    if(!fp)
        cout << "file don't opened \n";

    cout << "Введите номер записи для поиска \n";
    cin >> num;

    ssize = (num-1)*(sizeof(arr[0].NAZN)+sizeof(arr[0].TIME)+sizeof(arr[0].NUMR));

    if(num <= R)
    {
        fp.seekg(ssize,std::ios::beg);//смещает указатель от начала файла на ssize байт

        fp.read((char*)&s, sizeof(arr[0].NAZN));
        fp.read((char*)&k, sizeof(arr[0].NUMR));
        fp.read((char*)&t, sizeof(arr[0].TIME));
        cout << s << endl;
        cout << k << endl;
        cout << t << endl;
    }
    else
        cout << "Выход за пределы списка" << endl;

    fp.close();
}

int menu(int max_menu) {
int i_menu;
cout << "\n\nВведите номер действия 1-" << max_menu << endl;
do
    {
    cout << "1 - Выход" << endl;
    cout << "2 - Ввод элементов массива с клавиатуры" << endl;
    cout << "3 - Показать расписание" << endl;
    cout << "4 - Составление расписания (сортировка)" << endl;
    cout << "5 - Считывание информации о поездах из файла" << endl;
    cout << "6 - Проверка содержимого бинарного файла" << endl;
    cout << "7 - Вывод информации о поездах по заданному времени" << endl;
    cout << "8 - Поиск данных по номеру поезда" << endl;
    cout << "9 - Поиск данных по номеру записи в бин.файле" << endl;
    cout  << endl;
    cin >> i_menu;
    }
while( (i_menu < 0) || (i_menu > max_menu));

return i_menu;
}



Соседние файлы в папке Train_to_Cplusplus