#include<iostream>
#include<fstream>
#include<windows.h>
#include<string>
#include<iomanip>
#include "ConsoleApplication1.h"
using namespace std;
ofstream fout("Object.txt", ios_base::app);
ifstream fin("Object.txt");
class Raspisanie {
public:
Raspisanie();
float Rasp;
int i;
struct Object {
string name;
float time;
int directivterm;
int fine;
int bin;
float spec_val;
};
struct Object obj[100];
struct Object sp;
void sort();
void sort2();
void fill();
void add_object();
void obj_change();
void binarcode();
void binsort();
void bestlist();
void save();
float x, y, dx, dy; //координаты и скорость
bool life; //жив или мертв
float w, h; //линейные размеры
int num; //личный отличительный номер
int lifetime; //время жизни
float range; //радиус обнаружения хищника
int n;
int m;
};
Raspisanie::Raspisanie() {
i = 0;
while (!fin.eof()) {
fin >> obj[i].name >> obj[i].time >> obj[i].directivterm >> obj[i].fine >> obj[i].spec_val >> obj[i].bin;
i++;
}
//fin.close();
}
void Raspisanie::sort() {
for (int m = 0; m < i - 1; m++) {
for (int n = 0; n < i - m; n++) {
if (obj[n].spec_val < obj[n + 1].spec_val) {
sp = obj[n];
obj[n] = obj[n + 1];
obj[n + 1] = sp;
}
}
}
Raspisanie::sort2();
}
void Raspisanie::sort2() {
for (int m = 0; m < i - 1; m++) {
for (int n = 0; n < i - m; n++) {
if (obj[n].directivterm < obj[n + 1].directivterm) {
sp = obj[n];
obj[n] = obj[n + 1];
obj[n + 1] = sp;
}
}
}
}
void Raspisanie::fill() {
Raspisanie::sort();
int n = 0;
while (n != i) {
cout << obj[n].name << endl;
n++;
}
}
void Raspisanie::add_object() {
cout << "Введите наименование Детали: ";
cin.ignore();
getline(cin, obj[i].name);
cout << "Введите длительность обработки: ";
cin >> obj[i].time;
cout << "Введите директивный срок: ";
cin >> obj[i].directivterm;
cout << "Введите штраф: ";
cin >> obj[i].fine;
obj[i].spec_val = obj[i].directivterm + obj[i].time + obj[i].fine;
fout.open("Object.txt", ios_base::app);
fout << obj[i].name << " " << obj[i].time << " " << obj[i].directivterm << " " << obj[i].fine << " " << obj[i].spec_val << endl;
fout.close();
i++;
}
void Raspisanie::obj_change() {
int a;
cout << left << setw(3) << '№' << setw(20) << "Наименование" << setw(10) << "длительность обработки" << setw(4) << "директивный срок + штраф" << setw(4) << " штраф" << endl;
for (int n = 0; n < i - 1; n++) {
cout << left << setw(3) << n << setw(20) << obj[n].name << setw(10) << obj[n].time << setw(4) << obj[n].directivterm << setw(4) << obj[n].fine << endl;
}
cout << endl << "Выберите номер Детали: ";
cin >> a;
cout << endl << obj[a].name << endl << endl;
cout << "Введите длительность обработки: ";
cin >> obj[a].time;
cout << "Введите директивный срок: ";
cin >> obj[a].directivterm;
cout << "Введите штраф: ";
cin >> obj[a].fine;
obj[a].spec_val = obj[a].directivterm / obj[a].time;
cout << "Данные обновлены!" << endl;
}
void Raspisanie::binarcode() {
Raspisanie::sort();
obj[n].bin = 00000001;
for (int n = 0; n < i - m; n++) {
if (obj[n + 1].directivterm - obj[n].time < 0) {
obj[n + 1].bin = 00000000;
}
else {
obj[n + 1].bin = 00000001;
}
}
}
void Raspisanie::binsort() {
Raspisanie::binarcode();
for (int m = 0; m < i - 1; m++) {
for (int n = 0; n < i - m; n++) {
if (obj[n].bin < obj[n + 1].bin) {
sp = obj[n];
obj[n] = obj[n + 1];
obj[n + 1] = sp;
}
}
}
}
void Raspisanie::bestlist() {
Raspisanie::binsort();
int n = 0;
while (n != i) {
cout << obj[n].name << endl;
n++;
}
}
void Raspisanie::save() {
fout.open("Object.txt", ios_base::out | ios_base::trunc);
for (int n = 0; n < i; n++) {
fout << obj[n].name << " " << obj[n].time << " " << obj[n].directivterm << " " << obj[n].fine << " " << obj[n].spec_val << endl;
}
fout.close();
}
Raspisanie bp;
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int menu;
do {
cout << endl;
cout << "1. Сформировать расписание" << endl;
cout << "2. Добавить объекты" << endl;
cout << "3. Изменить параметры объектов" << endl;
cout << "4. Вывести бест список" << endl;
cout << "0. Выход" << endl;
cout << "Выберите действие: ";
cin >> menu;
switch (menu) {
case 0:
exit(0);
break;
case 1:
cout << endl;
Raspisanie.fill();
break;
case 2:
cout << endl;
Raspisanie.add_object();
break;
case 3:
cout << endl;
Raspisanie.obj_change();
break;
case 4:
cout << endl;
Raspisanie.bestlist();
break;
default:
cout << endl << "Введены некорректные данные!!!" << endl;
}
} while (menu != 0);
return 0;
}