Домашнее задание для ПО 2.11 по системному программированию от 08.05.20
учебно-методическое пособие

Склемин Алексей Анатольевич

Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся информация должна храниться в массиве структур, с возможностью их записи в файл. Организовать сортировку данных различными методами (быстрая, Шелла, Пузырьковая), вывод результатов сортировки должен быть в табличной форме.

Скачать:

ВложениеРазмер
Файл 53.docx16.9 КБ

Предварительный просмотр:

Пятьдесят третье задание

Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся информация должна храниться в массиве структур, с возможностью их записи в файл. Организовать сортировку данных различными методами (быстрая, Шелла, Пузырьковая), вывод результатов сортировки должен быть в табличной форме.


#include

#include

#include

#include

#include

 

using namespace std;

 

class worker

{

    char surname[64];

    char name[64];

    char patron[64];

    char post[128];

    double salary;

    double h_pay;

    int hours;

    int id;

public:

    worker(){};

    ~worker(){};

 

    void set_data()

    {

        cout<<"Enter data:"<

        cout<<"id: "; cin>>id;

        cout<<"Surname: "; cin>>surname;

        cout<<"Name: "; cin>>name;

        cout<<"Patronymic: "; cin>>patron;

        cout<<"Post: "; cin>>post;

        cout<<"Hr. pay: "; cin>>h_pay;

        cout<<"Hours: "; cin>>hours;

    }

 

    void Salary()

    {

        salary= h_pay*hours;

    }

 

    void show()

    {

        cout<

    }

 

    void edit()

    {

        char d[128];

        int num;

        double hpay;

        char key;

        while(1)

        {

            cout<<"that edit?"<

                <<"1. Post"<

                <<"2. h/pay"<

                <<"3. Hours"<

                <<"4. End edit"<

                cin>>key;

            switch(key)

            {

            case '1':

                cout<<"Post: ";

                cin>>d;

                strcpy(post, d);

                break;

            case '2':

                cout<<"Pay: ";

                cin>>hpay;

                h_pay=hpay;

                break;

            case '3':

                cout<<"Hours: ";

                cin>>num;

                hours=num;

                break;

            case '4':

                return;

                break;

            }

        }//while

    }//func

 

    int get_id() const

    {

        return id;

    }

};

 

// array for save data

class arr

{

    vector w;

public:

 

    void add(worker emp)

    {

        w.push_back(emp);

    }

 

    void show()

    {

        cout<<"Worker data"<

        cout<

        cout<<"-------------------------------------------------------------------"<

        for(int i=0; i

        {

            cout<

            w[i].show();

        }

    }

 

    void erase(int id_)

    {

        for(int i=0; i

        {

            if(w[i].get_id()==id_)

            {

                w.erase(w.begin()+i);

                return;

            }

        }

        cout<<"No id"<

    }

 

    void search(int id_)

    {

        for(int i=0; i

        {

            if(w[i].get_id()==id_)

            {

                w[i].show();

                return;

            }

        }

        cout<<"No ID"<

    }

 

    void find(int id_)

    {

        for(int i=0; i

        {

            if(w[i].get_id()==id_)

            {

                w[i].edit();

                w[i].Salary();

                return;

            }

        }

        cout<<"No ID"<

    }

 

    void to_file()

    {

        char file[64]="data.txt";

        ofstream out(file, ios::binary);

        for(int i=0; i

        {

            out.write( (char*)&w[i],sizeof(w[i]) );

        }

        cout<<"Saved"<

    }

 

    void from_file()

    {

        char file[64]="data.txt";

        char key;

        worker emp;

        ifstream in(file, ios::binary);

        cout<<"Clear array? y/n  ";

        cin>>key;

        if(key=='y')

        {

            w.clear();

        }

 

        while(!in.eof())

        {

            in.read( (char*)&emp, sizeof(emp) );

            w.push_back(emp);

        }

        w.erase(w.end()-1);

        cout<<"Loaded"<

    }

 

    void Sort()

    {

        char key;

        cout<<"How sort?"<

            <<"1. bubble"<

        cin>>key;

 

        if(key=='1')

        {

            worker temp; // временная переменная для хранения элемента массива

            bool exit = false; // болевая переменная для выхода из цикла, если массив отсортирован

 

            while (!exit) // пока массив не отсортирован

            {

             exit = true;

             for (int int_counter = 0; int_counter < (w.size()-1); int_counter++) // внутренний цикл

             //сортировка пузырьком по возрастанию - знак >

             //сортировка пузырьком по убыванию - знак <

             if (w[int_counter].get_id() > w[int_counter + 1].get_id()) // сравниваем два соседних элемента

                {

              // выполняем перестановку элементов массива

                    swap(w[int_counter],w[int_counter+1]);

                    exit = false; // на очередной итерации была произведена перестановка элементов

                }

             }

 

        }// if

    }// Sort

 

};

 

int main(int argc, char* argv[])

{

    setlocale(LC_ALL, "rus");

 

    char key;

    arr mas;

    worker emp;

    int id_;

 

    while(1)

    {

        cout<

            <<"Выберите действие:"

            <

            <<"N New worker."<

            <<"E Edit data."<

            <<"F Find worker."<

            <<"D Delete data."<

            <<"S Save to file."<

            <<"R Load from file."<

            <<"V Show all workers."<

            <<"C Sort data."<

            <<"Q Quit."<

        cin>>key;

 

        switch(key)

        {

        case 'n':

            emp.set_data();

            emp.Salary();

            mas.add(emp);

            break;

        case 'e':

            cout<

            cin>>id_;

            mas.find(id_);

            break;

        case 'f':

            cout<

            cin>>id_;

            mas.search(id_);

            break;

        case 'd':

            cout<

            cin>>id_;

            mas.erase(id_);

            break;

        case 's':

            mas.to_file();

            break;

        case 'r':

            mas.from_file();

            break;

        case 'v':

            mas.show();

            break;

        case 'c':

            mas.Sort();

            break;

        case 'q':

            exit (1);

            break;

        }

 

    }

 

    system("pause");

    return 0;

}