C++

Обработка массива данных предметной области «штатное расписание»

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

«ФИО работника»
«кол-во отработанных часов»
«должность»
«оплата за час работы»
«присваиваемый id»
вычисляемое поле «зарплата»
Примечание: зарплата = количество отработанных часов умножить на оплату за час работы.

Выберите действие:
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.
n
Enter data:
id: 1
Surname: Hume
Name: Desmond
Patronymic: ---
Post: athlete
Hr. pay: 40
Hours: 4320

Выберите действие:
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.
n
Enter data:
id: 2
Surname: Shephard
Name: Jack
Patronymic: ---
Post: leader
Hr. pay: 100
Hours: 5235

Выберите действие:
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.
n
Enter data:
id: 3
Surname: Ford
Name: James
Patronymic: ---
Post: killer
Hr. pay: 43
Hours: 345

Выберите действие:
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.
v
Worker data
ID Surname Name Patronymic Post h/pay Hours Salary
-------------------------------------------------------------------

1 Hume Desmond --- athlete 40 4320 172800
2 Shephard Jack --- leader 100 5235 523500
3 Ford James --- killer 43 345 14835
Выберите действие:
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.
q



#include<iostream>
#include<iomanip>
#include<vector>
#include <locale>
#include <fstream>
 
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:"<<endl;
        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<<setw(4)<<id<<setw(12)<<surname<<setw(8)<<name<<setw(12)<<patron<<setw(10)<<post<<setw(10)<<h_pay<<setw(6)<<hours<<setw(8)<<salary;
    }
 
    void edit()
    {
        char d[128];
        int num;
        double hpay;
        char key;
        while(1)
        {
            cout<<"that edit?"<<endl
                <<"1. Post"<<endl
                <<"2. h/pay"<<endl
                <<"3. Hours"<<endl
                <<"4. End edit"<<endl;
                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 <worker> w;
public:
 
    void add(worker emp)
    {
        w.push_back(emp);
    }
 
    void show()
    {
        cout<<"Worker data"<<endl;
        cout<<setw(4)<<"ID"<<setw(12)<<"Surname"<<setw(8)<<"Name"<<setw(12)<<"Patronymic"<<setw(10)<<"Post"<<setw(10)<<"h/pay"<<setw(6)<<"Hours"<<setw(8)<<"Salary"<<endl;
        cout<<"-------------------------------------------------------------------"<<endl;
        for(int i=0; i<w.size(); i++)
        {
            cout<<endl;
            w[i].show();
        }
    }
 
    void erase(int id_)
    {
        for(int i=0; i<w.size(); i++)
        {
            if(w[i].get_id()==id_)
            {
                w.erase(w.begin()+i);
                return;
            }
        }
        cout<<"No id"<<endl;
    }
 
    void search(int id_)
    {
        for(int i=0; i<w.size(); i++)
        {
            if(w[i].get_id()==id_)
            {
                w[i].show();
                return;
            }
        }
        cout<<"No ID"<<endl;
    }
 
    void find(int id_)
    {
        for(int i=0; i<w.size(); i++)
        {
            if(w[i].get_id()==id_)
            {
                w[i].edit();
                w[i].Salary();
                return;
            }
        }
        cout<<"No ID"<<endl;
    }
 
    void to_file()
    {
        char file[64]="data.txt";
        ofstream out(file, ios::binary);
        for(int i=0; i<w.size(); i++)
        {
            out.write( (char*)&w[i],sizeof(w[i]) );
        }
        cout<<"Saved"<<endl;
    }
 
    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"<<endl;
    }
 
    void Sort()
    {
        char key;
        cout<<"How sort?"<<endl
            <<"1. bubble"<<endl;
        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<<endl
            <<"Выберите действие:"
            <<endl
            <<"N New worker."<<endl
            <<"E Edit data."<<endl
            <<"F Find worker."<<endl
            <<"D Delete data."<<endl
            <<"S Save to file."<<endl
            <<"R Load from file."<<endl
            <<"V Show all workers."<<endl
            <<"C Sort data."<<endl
            <<"Q Quit."<<endl;
        cin>>key;
 
        switch(key)
        {
        case 'n':
            emp.set_data();
            emp.Salary();
            mas.add(emp);
            break;
        case 'e':
            cout<<endl<<"Enter id: ";
            cin>>id_;
            mas.find(id_);
            break;
        case 'f':
            cout<<endl<<"Enter id: ";
            cin>>id_;
            mas.search(id_);
            break;
        case 'd':
            cout<<endl<<"Enter id: ";
            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;
}
Теги:
Обработка массива
Добавлено: 11 Апреля 2018 09:26:26 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...