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

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

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

Скачать:

ВложениеРазмер
Файл 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;

}


По теме: методические разработки, презентации и конспекты

Домашнее задание для ПО 1.11 по системному программированию от 04.02.20

Шестнадцатеричное представление Представим, что необходимо просмотреть содержимое некотоpых байт в памяти. Требуется oпределить содержимое четырех последовательных байт (двух слов), которые имеют двои...

Домашнее задание для ПО 1.11 по системному программированию от 11.02.20

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