kyrs4a

                Never    
C++
       
#include <iostream>
#include <fstream>
#include <string>
#include <locale>
#include <vector>
#include <iomanip>

using namespace std;

struct factory {
	int day, month, year, workshopNumber, amountOfProduction;
	string product, name, surname;
};

bool isFileOpen(string FILE_NAME1) {//проверка на открытие файла
	ifstream fin(FILE_NAME1, ios::in);
	if (!fin.is_open())
		return false;
	else {
		fin.close();
		return true;
	}
}

void writeInFileWorkers(vector<factory> &factory) {
	ofstream fout("factory.txt", ios_base::out | ios_base::trunc);//открываем файл, удаляем всё что в нем было и записываем из вектора
	for (int i = 0; i < factory.size(); i++) {//запись из вектора в файл
		fout << factory[i].day << endl << factory[i].month << endl << factory[i].year << endl << factory[i].amountOfProduction << endl << factory[i].workshopNumber << endl << factory[i].name << endl << factory[i].surname << endl << factory[i].product << endl;
	}
	fout.close();//закрытие файла
}

int checkOfDigit() {//проверка на ввод цифры
	int number;
	cin >> number;
	while (!cin)//пока не будет правильно введен
	{
		cin.clear(); 
		cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
		cout << "Введите корректные данные\n";
		cin >> number;
	}
	return number;
}

void addWorkshop(vector<factory> &factory) {//добавить цех
	struct factory workshop;
	do {//ввод информации
		cout << "Введите день: ";
		workshop.day = checkOfDigit();
	} while (workshop.day <= 0 || workshop.day > 31);
	do {
		cout << "Введите месяц: ";
		workshop.month = checkOfDigit();
	} while (workshop.month <= 0 || workshop.month > 12);
	cout << "Введите год: ";
	workshop.year = checkOfDigit();
	do {
		cout << "Введите номер цеха: ";
		workshop.workshopNumber = checkOfDigit();
	} while (workshop.workshopNumber <= 0);
	do {
		cout << "Введите количество продукции: ";
		workshop.amountOfProduction = checkOfDigit();
	} while (workshop.workshopNumber<0);
	cout << "Введите наименование продукции: ";
	cin >> workshop.product;
	cout << "Введите имя ответственного: ";
	cin >> workshop.name;
	cout << "Введите фамилию ответственного: ";
	cin >> workshop.surname;
	factory.push_back(workshop);//добавляем в конец вектора
	writeInFileWorkers(factory);//перезаписываем в файл
}

void writeInVector(vector<factory> &factory) {//запись в вектор из файла
	ifstream fin("factory.txt", ios_base::in);
	struct factory info;
	fin.seekg(0, ios_base::beg);//указатель файла в начало
	int i = 0;
	while (fin>>info.day) {//если не конец файла то считываем
		fin >> info.month >> info.year >> info.amountOfProduction >> info.workshopNumber >> info.name >> info.surname >> info.product;
		factory.push_back(info);//добавляем в вектор
	}
	fin.close();//закрываем файл
}

bool checkForAvailability(string name, int pos, vector<factory> factory, int workshopNumber) {//проверка на наличие по позиции
	for (int i = 0; i < pos; i++) {
		if (name == factory[i].product && workshopNumber==factory[i].workshopNumber) return true;//если встретилось вернуть true
	}
	return false;
}

void drawHead() {//вывод шапки
	cout << setw(10) << "| Номер цеха |";
	cout << setw(6) << "| Наименование продукции |";
	cout << setw(6) << "| Количество продукции |";
	cout << endl;
}

void searchByDate(vector<factory> factory){//поиск по дате
	int workshopNumber, i, j, day1, month1, year1, day2, month2, year2, totalAmountOfProduction=0;
	bool flag = false;
	cout << "Введите номер цеха:";//ввод информации
	workshopNumber = checkOfDigit();
	do {
		cout << "Введите с какого дня:";
		day1 = checkOfDigit();
	} while (day1 <= 0 || day1>31);
	do {
		cout << "Введите с какого месяца:";
		month1 = checkOfDigit();
	} while (month1 <= 0 || month1>12);
	do {
		cout << "Введите с какого года:";
		year1 = checkOfDigit();
	} while (year1 < 0);
	do {
		cout << "Введите по какой день:";
		day2 = checkOfDigit();
	} while (day2 <= 0 || day2 > 31);
	do {
		cout << "Введите по какой месяц:";
		month2 = checkOfDigit();
	} while (month2<=0 || month2>12);
	do {
		cout << "Введите по какой год:";
		year2 = checkOfDigit();
	} while (year2 <= 0);
	system("cls");
	drawHead();//рисуем шапку
	for (i = 0; i < factory.size(); i++) {//поиск информации за промежуток времени
		totalAmountOfProduction = 0;
		if (factory[i].workshopNumber == workshopNumber) {
			flag = true;
			if (checkForAvailability(factory[i].product, i, factory,workshopNumber) == false) {//проверка на совпадение продукта и номера цеха
				for (j = i; j < factory.size(); j++) {
					if (workshopNumber==factory[j].workshopNumber && factory[i].product == factory[j].product && (factory[j].day>=day1 && factory[j].day<=day2) && (factory[j].month >= month1 && factory[j].month <= month2) && (factory[j].year >= year1 && factory[j].year <= year2))
						totalAmountOfProduction += factory[j].amountOfProduction;
				}
				if (totalAmountOfProduction != 0)//если продукция найдена вывод
					cout << setw(13) << workshopNumber << setw(26) << factory[i].product << setw(24) << totalAmountOfProduction << endl;
				else cout << setw(13) << workshopNumber << setw(26) << factory[i].product << setw(24) << "Нет продукции" << endl;//иначе вывод "Нет продукции"
			}
		}
	}
	if (flag == false) {//если цех не был найден
		system("cls");
		cout << "Цех не найден." << endl;
	}
}

void menu() {//вывод меню
	cout << "---------МЕНЮ---------" << endl;
	cout << "1.Просмотр информации." << endl;
	cout << "2.Просмотр информации по дате." << endl;
	cout << "3.Добавить информацию." << endl;
	cout << "4.Выход." << endl;
}

int numberOfMenu() {//проверка введенного пункта меню
	int numb;
	do {
		numb = checkOfDigit();
	} while (numb < 0 || numb>4);
	return numb;
}

void showInfo(vector<factory> factory) {//вывод информации о цехах
	cout << setw(10) << "| Номер цеха |";
	cout << setw(6) << "|   Дата   |";
	cout << setw(6) << "| Наименование продукции |";
	cout << setw(6) << "| Количество продукции |";
	cout << setw(6) << "|       ФИО       |" << endl;
	for (int i = 0; i < factory.size(); i++) {
		cout << setw(13) << factory[i].workshopNumber << setw(6) << factory[i].day<<"." << factory[i].month<<"." << factory[i].year << setw(26) << factory[i].product << setw(24) << factory[i].amountOfProduction <<setw(12)<< factory[i].name << " " << factory[i].surname << endl;
	}
}

void useFuncUser(vector<factory> &factory) {//проход по меню
	system("cls");
	menu();
	int run;
	run = numberOfMenu();
	while (1) {
		system("cls");
		switch (run) {
		case 1:
			showInfo(factory);
			menu();
			run = numberOfMenu();
			break;
		case 2:
			searchByDate(factory);
			menu();
			run = numberOfMenu();
			break;
		case 3:
			addWorkshop(factory);
			system("cls");
			menu();
			run = numberOfMenu();
			break;
		case 4:
			system("pause");
			exit(1);
			break;
		}
	}
}

int main() {
	setlocale(LC_ALL, "Rus");
	vector<factory> factory;
	writeInVector(factory);
	useFuncUser(factory);
}

Raw Text