Домашнее задание для ПО 2.11 по системному программированию от 08.05.20
учебно-методическое пособие
Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся информация должна храниться в массиве структур, с возможностью их записи в файл. Организовать сортировку данных различными методами (быстрая, Шелла, Пузырьковая), вывод результатов сортировки должен быть в табличной форме.
Скачать:
Вложение | Размер |
---|---|
53.docx | 16.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
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;
}