Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы - 2 сем - Калмычков / курсач по проге - 2 сем (Калмычков).docx
Скачиваний:
0
Добавлен:
09.07.2025
Размер:
649.8 Кб
Скачать

Текст программы

List_CARS.cpp

#include "FormV.h"

using namespace std;

bool ListNodeV::ReadV(std::ifstream& input, std::ofstream& res){

if (input.eof())

return false;

char s = 0;

int counter = 0;

f_H.head = new ListNodeH;

f_H.cur = f_H.head;

input >> f_H.cur->podstroka.nomer;

input.unsetf(ios::skipws);

while (s != '\n') {

if (input.eof()) break;

input >> s;

if (s == ' ') {

continue; }

else { if (input.eof()) break;

if (s == '\n' || s == 0) //!! if (s == '\n')

break;

f_H.cur->podstroka.massiv[counter] = s;

++counter; }

if (counter >= N) {

while (s != '\n') {

input >> s;

if (s == '\n' || s == 0) //!! if (s == '\n')

break; } } }

f_H.cur->podstroka.len = counter;

return true;}

void ListNodeV::PrintV(std::ofstream& res){

f_H.cur = f_H.head;

if (f_H.head == nullptr)

return;

cout << "\n Номер: "; res << "\n Номер: ";

cout << f_H.cur->podstroka.nomer; res << f_H.cur->podstroka.nomer;

cout << "\n Марка автомобиля: "; res << "\n Марка автомобиля: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++) {

cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i]; }

cout << "\n Вес: "; res << "\n Вес: "; cout << f_H.cur->podstroka.Weight; cout << " кг\n Стоимость: "; res << " кг\n Стоимость: ";

cout << f_H.cur->podstroka.Stoim; cout << " рублей\n Возможное количество: "; res << " рублей\n Возможное количество: "; cout << f_H.cur->podstroka.Kolvo; cout << "\n"; res << "\n";

}void ListNodeV::Print_CASE(std::ofstream& res, int CASE, int CASE_CAR, int PRICE1, int PRICE2, float LIGHT, float HEAVY){

f_H.cur = f_H.head;

if (f_H.head == nullptr) return;

int numm = f_H.cur->podstroka.nomer;

if (numm == CASE_CAR) {

if ((CASE == 1) || (CASE == 2)) {

cout << "\n Марка автомобиля: ";

res << "\n Марка автомобиля: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++) {

cout << f_H.cur->podstroka.massiv[i];

res << f_H.cur->podstroka.massiv[i]; }

cout << "\n Вес: ";

res << "\n Вес: ";

cout << f_H.cur->podstroka.Weight; res << f_H.cur->podstroka.Weight;

cout << " кг\n Стоимость: "; res << " кг\n Стоимость: ";

cout << f_H.cur->podstroka.Stoim; res << f_H.cur->podstroka.Stoim;

cout << " рублей\n Возможное количество: "; res << " рублей\n Возможное количество: ";

cout << f_H.cur->podstroka.Kolvo; res << f_H.cur->podstroka.Kolvo;

cout << "\n"; res << "\n";

if (CASE == 1) {

if (f_H.cur->podstroka.Kolvo > 0) { cout << " Эту модель МОЖНО изготовить :)"; res << " Эту модель МОЖНО изготовить :)"; }

else { cout << " Эту модель НЕЛЬЗЯ изготовить :(";

res << " Эту модель НЕЛЬЗЯ изготовить :("; } }

if (CASE == 2) {

if (f_H.cur->podstroka.Kolvo > 0) { cout << " Можно произвести " << f_H.cur->podstroka.Kolvo << " машин"; res << " Можно произвести " << f_H.cur->podstroka.Kolvo << " машин"; }

else { cout << " НЕЛЬЗЯ произвести ни одну машину :("; res << " НЕЛЬЗЯ произвести ни одну машину :("; } } } }

if (CASE == 3) {

if ((f_H.cur->podstroka.Stoim >= PRICE1) && (f_H.cur->podstroka.Stoim <= PRICE2)) { cout << "\n Марка автомобиля: "; res << "\n Марка автомобиля: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++) { cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i]; }

cout << "\n Стоимость: "; res << "\n Стоимость: ";

cout << f_H.cur->podstroka.Stoim; res << f_H.cur->podstroka.Stoim; cout << " рублей"; res << " рублей";} }

if (CASE == 4) {

if ((LIGHT == HEAVY)&&(LIGHT==f_H.cur->podstroka.Weight)){ cout << "\n Одинаковые по весу модели\n"; res << "\n Одинаковые по весу модели\n";

for (int i = 0; i < f_H.cur->podstroka.len; i++){ cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i]; }

cout << " "; res << " ";

cout << f_H.cur->podstroka.Weight; res << f_H.cur->podstroka.Weight;

cout << " кг"; res << " кг"; return;}

if (f_H.cur->podstroka.Weight == LIGHT) {

cout << "\n Самая легкая модель: ";

res << "\n Самая легкая модель: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++){ cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i];}

cout << " "; cout << f_H.cur->podstroka.Weight; cout << " кг"; res << " "; res << f_H.cur->podstroka.Weight; res << " кг";}

if (f_H.cur->podstroka.Weight == HEAVY) {

cout << "\n Самая тяжелая модель: "; res << "\n Самая тяжелая модель: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++){

cout << f_H.cur->podstroka.massiv[i];

res << f_H.cur->podstroka.massiv[i];}

cout << " "; cout << f_H.cur->podstroka.Weight; cout << " кг"; res << " "; res << f_H.cur->podstroka.Weight; res << " кг";}}}

ListV.cpp

#include "FormV.h"

using namespace std;

bool ListNodeV::ReadVDetails(std::ifstream& input, std::ofstream& res)

{

if (input.eof())

return false;

char s = 0;

int counter = 0;

f_H.head = new ListNodeH;

f_H.cur = f_H.head;

input >> f_H.cur->podstroka.nomer;

input.unsetf(ios::skipws);

while (s != '\n')

{ if (input.eof())

break;

input >> s;

if (s == '@')

break;

if (s == ' ') {

continue; }

else {

if (input.eof())

break;

if (s == '\n') //!! if (s == '\n')

break;

f_H.cur->podstroka.massiv[counter] = s;

++counter; }

if (counter >= N) {

while (s != '\n') {

input >> s;

if (s == '\n' || s == 0) //!! if (s == '\n')

break; } } }

f_H.cur->podstroka.len = counter;

input.setf(ios::skipws);

input >> f_H.cur->podstroka.weight;

input >> f_H.cur->podstroka.cena;

input >> f_H.cur->podstroka.nomer2;

input >> f_H.cur->podstroka.sklad;

return true;}

res << f_H.cur->podstroka.massiv[i]; }

cout << "\nСостав модели: \n";

res << "\nСостав модели: \n"; }

if (f_H.cur->podstroka.len2 == -1) { cout << " Ошибка! Деталь отсутствует в каталоге"; }

else {

cout << " "; res << " ";

cout << f_H.cur->podstroka.numd;

cout << ". "; res << ". ";

for (int i = 0; i < f_H.cur->podstroka.len2; i++) { cout << f_H.cur->podstroka.massiv2[i];

res << f_H.cur->podstroka.massiv2[i]; }

cout << " - ";

res << " - ";

cout << f_H.cur->podstroka.kol;

res << f_H.cur->podstroka.kol;

cout << " шт";

res << " шт"; } }}

void ListNodeV::PrintVDetails(std::ofstream& res)

{

f_H.cur = f_H.head;

if (f_H.head == nullptr)

return;

cout << f_H.cur->podstroka.nomer;

res << f_H.cur->podstroka.nomer;

cout << ". "; res << ". ";

for (int i = 0; i < f_H.cur->podstroka.len; i++) {

cout << f_H.cur->podstroka.massiv[i]; res << f_H.cur->podstroka.massiv[i]; }

cout << ". Вес: "; res << ". Вес: ";

cout << f_H.cur->podstroka.weight; res << f_H.cur->podstroka.weight;

cout << " Цена: "; res << " Цена: ";

cout << f_H.cur->podstroka.cena; res << f_H.cur->podstroka.cena;

cout << " Фирма: "; res << " Фирма: ";

for (int i = 0; i < f_H.cur->podstroka.len2; i++)

{

cout << f_H.cur->podstroka.massiv2[i]; res << f_H.cur->podstroka.massiv2[i];

}

cout << " Количество на складе: "; res << " Количество на складе: "; cout << f_H.cur->podstroka.sklad;

res << f_H.cur->podstroka.sklad;

cout << "\n";

res << "\n";}

bool ListNodeV::ReadVInfo(std::ifstream& input, std::ofstream& res)

{

if (input.eof())

return false;

char s = 0;

f_H.head = new ListNodeH;

f_H.cur = f_H.head;

input.setf(ios::skipws);

input >> f_H.cur->podstroka.nomer;

input >> f_H.cur->podstroka.detal;

input >> f_H.cur->podstroka.kol;

return true;

}

void ListNodeV::PrintVInfo(std::ofstream& res)

{

f_H.cur = f_H.head;

if (f_H.head == nullptr)

return;

if (f_H.cur->podstroka.len == -1) { cout << "\nОшибка! Такой машины нет в списке"; }

else {

if (f_H.cur->podstroka.prf == 5) {

/*cout << "\n\nПорядковый номер: ";

res << "\n\nПорядковый номер: ";

cout << f_H.cur->podstroka.nomer;

res << f_H.cur->podstroka.nomer;*/

cout << "\nНазвание модели: ";

res << "\nНазвание модели: ";

for (int i = 0; i < f_H.cur->podstroka.len; i++)

{

cout << f_H.cur->podstroka.massiv[i]; }

cout << " - ";

res << " - ";

cout << f_H.cur->podstroka.kol;

res << f_H.cur->podstroka.kol;

cout << " шт";

res << " шт"; }}

StrL.h

ListV.h

#pragma once

#include "ConstN.h"

struct StrL{

int nomer;

int nomer2 = 0;//номер фирмы

char massiv[N];

char massiv2[N];

float weight = 0.0; // вес детали

float Weight = 0.0; // вес машины

int cena = 0; //цена детали

int Stoim = 0; //цена машины

int sklad = 0; //сколько деталей на складе

int Kolvo = 0; // сколько наборов деталей

int len = 0; // длина названия

int len2 = 0;

int detal = 0;//номер детали

int kol = 0;//количество деталей для машины

int prf = 0;

int numd = 0; //f4};

All_func.h

#pragma once

#include "FormV.h"

void FUNCTION(std::ofstream& res, FormularV& F2, FormularV& F3);

void FUNCTION1(std::ofstream& res, std::ofstream& prot, FormularV& F1, FormularV& F2, FormularV& F3, FormularV& F4);

void deleting(FormularV& formularVert, std::ofstream& res);

bool Read_file(std::ifstream& input, std::ofstream& res, FormularV& formularVert);

void Print_file(std::ofstream& res, FormularV& formularVert);

void Print_BigCASE(std::ofstream& res, FormularV& formularVert, int CASE, int CASE_CAR, int PRICE1, int PRICE2);

void Process(std::ofstream& res, std::ofstream& prot, std::string in_filename, std::string in_filename2, std::string in_filename3, std::string in_filename4);

bool Read_fileDetails(std::ifstream& input, std::ofstream& res, FormularV& formularVert);

void Print_fileDetails(std::ofstream& res, FormularV& formularVert);

bool Read_fileINFO(std::ifstream& input, std::ofstream& res, FormularV& formularVert);

void Print_fileINFO(std::ofstream& res, FormularV& formularVert);

ConstN.h

#pragma once

#include <string>

#include <iostream>

#include <fstream>

#include <iomanip>

static const int N = 15;

#pragma once

#include "FormH.h"

struct ListNodeV{

FormularH f_H;

ListNodeV* next = nullptr;

ListNodeV* next1 = nullptr;

bool ReadV(std::ifstream& input, std::ofstream& res);

void PrintV(std::ofstream& res);

bool ReadVDetails(std::ifstream& input, std::ofstream& res);

void PrintVDetails(std::ofstream& res);

bool ReadVInfo(std::ifstream& input, std::ofstream& res);

void PrintVInfo(std::ofstream& res);

void Print_CASE(std::ofstream& res, int CASE, int CASE_CAR, int PRICE1, int PRICE2, float LIGHT, float HEAVY);};

ListH.h

#pragma once

#include "StrL.h"

struct ListNodeH{

StrL podstroka;

ListNodeH* next = nullptr;};

FormH.h

#pragma once

#include "ListH.h"

struct FormularH{

ListNodeH* head = nullptr;

ListNodeH* cur = nullptr;

ListNodeH* last = nullptr;

ListNodeH* prev = nullptr;};

FormV.h

#pragma once

#include "ListV.h"

struct FormularV{

ListNodeV* head = nullptr;

ListNodeV* cur = nullptr;

ListNodeV* last = nullptr;

ListNodeV* prev = nullptr;

float Lightt = 0.0;

float Heavyy = 0.0;};

main.cpp

#include "All_func.h"

using namespace std;

int main(int argc, char* argv[]){

setlocale(LC_ALL, "Russian");

std::string filename2 = "result.txt";

std::string filename3 = "protokol.txt";

std::ofstream res(filename2, ios::out | ios::trunc);

std::ofstream prot(filename3, ios::out | ios::trunc);

Process(res, prot, "cars.txt", "firms.txt", "details.txt", "info.txt");

return 0;}

PROCESS.cpp

#include "ConstN.h"

#include "FormV.h"

#include "All_func.h"

using namespace std;

bool Read_fileINFO(std::ifstream& input, std::ofstream& res, FormularV& formularVert){

if (input.eof()) {

cout << "SPISOK PUST" << endl; return false; }

formularVert.head = new ListNodeV;

formularVert.cur = formularVert.head;

while (!input.eof()) {

if (formularVert.cur->ReadVInfo(input, res)) {

formularVert.cur->next = new ListNodeV;

formularVert.prev = formularVert.cur;

formularVert.cur = formularVert.cur->next; }

else

break; }

if (formularVert.cur->f_H.head == nullptr && formularVert.prev != nullptr) {

delete formularVert.cur;

formularVert.prev->next = nullptr; }

return true;}

void Print_fileINFO(std::ofstream& res, FormularV& formularVert){

cout << "\n=======================================\n Информация о составе автомобилей\n=======================================\n";

res << "\n=======================================\n Информация о составе автомобилей\n=======================================\n";

formularVert.cur = formularVert.head;

while (formularVert.cur != nullptr){

formularVert.cur->PrintVInfo(res);

cout << "\n";

res << "\n";

formularVert.cur = formularVert.cur->next;}

cout << "\n\n";

res << "\n\n";}

bool Read_fileDetails(std::ifstream& input, std::ofstream& res, FormularV& formularVert){

if (input.eof()){

cout << "SPISOK PUST" << endl;

return false;}

formularVert.head = new ListNodeV;

formularVert.cur = formularVert.head;

while (!input.eof()) {

if (formularVert.cur->ReadVDetails(input, res)) {

formularVert.cur->next = new ListNodeV;

formularVert.prev = formularVert.cur;

formularVert.cur = formularVert.cur->next; }

else break; }

if (formularVert.cur->f_H.head == nullptr && formularVert.prev != nullptr) {

delete formularVert.cur;

formularVert.prev->next = nullptr; }

return true;}

void Print_fileDetails(std::ofstream& res, FormularV& formularVert){

cout << "\n=======================================\n Каталог деталей\n=======================================\n";

res << "\n=======================================\n Каталог деталей\n=======================================\n";

formularVert.cur = formularVert.head;

while (formularVert.cur != nullptr){

formularVert.cur->PrintVDetails(res);

formularVert.cur = formularVert.cur->next;}

cout << "\n\n";

res << "\n\n";}

bool Read_file(std::ifstream& input, std::ofstream& res, FormularV& formularVert){

if (input.eof()){

cout << "SPISOK PUST" << endl;

return false;}

formularVert.head = new ListNodeV;

formularVert.cur = formularVert.head;

while (!input.eof()){

if (formularVert.cur->ReadV(input, res)){

formularVert.cur->next = new ListNodeV;

formularVert.prev = formularVert.cur;

formularVert.cur = formularVert.cur->next;}

else

break;}

if (formularVert.cur->f_H.head == nullptr && formularVert.prev != nullptr){

delete formularVert.cur;

formularVert.prev->next = nullptr;}

return true;}

void Print_file(std::ofstream& res, FormularV& formularVert){

formularVert.cur = formularVert.head;

while (formularVert.cur != nullptr){

formularVert.cur->PrintV(res);

formularVert.cur = formularVert.cur->next;}

cout << "\n\n"; res << "\n\n";}

void Print_BigCASE(std::ofstream& res, FormularV& formularVert, int CASE, int CASE_CAR, int PRICE1, int PRICE2)

{ formularVert.cur = formularVert.head;

float LIGHT = formularVert.Lightt;

float HEAVY = formularVert.Heavyy;

while (formularVert.cur != nullptr) {

formularVert.cur->Print_CASE(res, CASE, CASE_CAR, PRICE1, PRICE2, LIGHT, HEAVY);

formularVert.cur = formularVert.cur->next;}

cout << "\n\n";

res << "\n\n";}

void deleting(FormularV& formularVert, std::ofstream& res){

formularVert.cur = formularVert.head;

FormularV tmp4;

if (formularVert.cur == nullptr){

cout << " Список пуст " << endl;

res << " Список пуст " << endl;return;}

while (formularVert.cur != nullptr){

FormularH tmp3;

formularVert.cur->f_H.cur = formularVert.cur->f_H.head;

while (formularVert.cur->f_H.cur != nullptr){

tmp3.cur = formularVert.cur->f_H.cur->next;

delete formularVert.cur->f_H.cur;

formularVert.cur->f_H.cur = tmp3.cur;}

tmp4.cur = formularVert.cur->next;

delete formularVert.cur;

formularVert.cur = tmp4.cur;}}

void FUNCTION(std::ofstream& res, FormularV& F2, FormularV& F3){

F3.cur = F3.head; // детали

F3.prev = nullptr; // детали

if (F3.cur == nullptr) // детали{

cout << " пустой верт. список! " << endl; return;}

while (F3.cur != nullptr) // детали{

F2.cur = F2.head; // фирмы

if (F2.cur == nullptr){

cout << " пустой второй верт. список! " << endl; return;}

F2.prev = nullptr; // фирмы

F3.cur->f_H.cur = F3.cur->f_H.head; // детали

while (F2.cur != nullptr) // фирмы{

F2.cur->f_H.cur = F2.cur->f_H.head;

int num2 = F3.cur->f_H.cur->podstroka.nomer2;

int num1 = F2.cur->f_H.cur->podstroka.nomer;

if (num2 == num1) {

int lenn = F2.cur->f_H.cur->podstroka.len;

F3.cur->f_H.cur->podstroka.len2 = lenn;

for (int t = 0; t < lenn; t++) {

F3.cur->f_H.cur->podstroka.massiv2[t] = F2.cur->f_H.cur->podstroka.massiv[t]; }}

F2.prev = F2.cur;

F2.cur = F2.cur->next;}

F3.prev = F3.cur;

F3.cur = F3.cur->next;}}

void FUNCTION1(std::ofstream& res, std::ofstream& prot, FormularV& F1, FormularV& F2, FormularV& F3, FormularV& F4) {

float light = pow(10,7);

float heavy = -10;

float number = 0;

float VES = 0;

int STOIMOST = 0;

int NABOR = -10;

F4.cur = F4.head; // ИНФО

F4.prev = nullptr; // ИНФО

if (F4.cur == nullptr) // инфо{

cout << " пустой верт. список! " << endl; return;}

int PredNUM = -5;

while (F4.cur != nullptr) // инфо{

F1.cur = F1.head; // машины

if (F1.cur == nullptr){

cout << " пустой второй верт. список! " << endl; return;}

F1.prev = nullptr; // машины

F4.cur->f_H.cur = F4.cur->f_H.head; // инфо

int numinf1 = F4.cur->f_H.cur->podstroka.nomer;

if (PredNUM != numinf1) {

if (PredNUM > 0) {

if ((light >= VES)&&(VES!=0)) {

light = VES;

F1.Lightt = light;}

if ((heavy <= VES) && (VES != 0)) {

heavy = VES;

F1.Heavyy = heavy;}

F4.cur->f_H.cur->podstroka.prf = 5;

prot << "\nСТОИМОСТЬ МАШИНЫ: " << STOIMOST << "\n";

prot << "\nВЕС МАШИНЫ: " << VES << "\n";

prot << "\nКОЛИЧЕСТВО МАШИН: " << NABOR << "\n";

VES = 0;

STOIMOST = 0;

NABOR = -100;

prot << "\n НОВАЯ МАШИНА\n";

PredNUM = numinf1;}

else {

F4.cur->f_H.cur->podstroka.prf = 5;

F1.Lightt = light;

F1.Heavyy = heavy;

prot << "\n НОВАЯ МАШИНА\n";

PredNUM = numinf1; }}

int numinf2 = F4.cur->f_H.cur->podstroka.detal;

int PROV = 0;

while (F1.cur != nullptr) // vfi{

F1.cur->f_H.cur = F1.cur->f_H.head;

int numcar = F1.cur->f_H.cur->podstroka.nomer;

prot << "номер машины: " << numcar << " " << "номер из файла: " << numinf1 << "\n";

if (numcar == numinf1) {

PROV = 1;

prot << "совпадение\n";

int lenn = F1.cur->f_H.cur->podstroka.len;

F4.cur->f_H.cur->podstroka.len = lenn;

for (int t = 0; t < lenn; t++) {

F4.cur->f_H.cur->podstroka.massiv[t] = F1.cur->f_H.cur->podstroka.massiv[t];}

prot << "\nсравнение номеров деталей\n";

F3.cur = F3.head; // машины

if (F3.cur == nullptr){

cout << " пустой второй верт. список! " << endl; return;}

F3.prev = nullptr; // машины

int prov = 0;

while (F3.cur != nullptr) // детали{

F3.cur->f_H.cur = F3.cur->f_H.head;

int numdet = F3.cur->f_H.cur->podstroka.nomer;

prot << numdet << " " << numinf2 << "\n";

int lenn1 = 0;

if (numdet == numinf2) {

F4.cur->f_H.cur->podstroka.numd = numdet;

prov = 1;

prot << "совпадение\n";

lenn1 = F3.cur->f_H.cur->podstroka.len;

F4.cur->f_H.cur->podstroka.len2 = lenn1;

for (int t = 0; t < lenn1; t++) {

F4.cur->f_H.cur->podstroka.massiv2[t] = F3.cur->f_H.cur->podstroka.massiv[t];}

float ves1 = F3.cur->f_H.cur->podstroka.weight;

float cena1 = F3.cur->f_H.cur->podstroka.cena;

int kol1 = F4.cur->f_H.cur->podstroka.kol;

int sklad_det = F3.cur->f_H.cur->podstroka.sklad;

float vesO = ves1 * kol1;

float cenaO = cena1 * kol1;

prot << "Вес деталей одного типа: " << vesO << "\n";prot << "Стоимость деталей одного типа: " << cenaO << "\n"; prot << "Количество деталей на складе: " << sklad_det << "\n"; prot << "Сколько нужно деталей для машины: " << kol1 << "\n";

VES = (VES + vesO);

STOIMOST = (STOIMOST + cenaO);

int nabor_det = sklad_det / kol1;

prot << "Сколько получится наборов деталей: " << nabor_det << "\n";

if (NABOR < 0) {

NABOR = nabor_det;}

else {

if (NABOR > nabor_det) {

NABOR = nabor_det;}}

prot << "сколько можно собрать машин из этих деталей: " << nabor_det << "\n";

F1.cur->f_H.cur->podstroka.Weight = VES; F1.cur->f_H.cur->podstroka.Stoim = STOIMOST; F1.cur->f_H.cur->podstroka.Kolvo = NABOR; break;}

else { prov = 2; } // номер не совпал

F3.prev = F3.cur;

F3.cur = F3.cur->next;} if (prov == 2) { // если ни один номер не совпал, значит такого нет

F4.cur->f_H.cur->podstroka.len2 = -1;}

break;}

else {

PROV = 2; } // номер не совпал

F1.prev = F1.cur;

F1.cur = F1.cur->next;}

if (PROV == 2) { // если ни один номер не совпал, значит такого нет

F4.cur->f_H.cur->podstroka.len = -1;}

F4.prev = F4.cur;

F4.cur = F4.cur->next;}

prot << "\nСТОИМОСТЬ МАШИНЫ: " << STOIMOST << "\n";

prot << "\nВЕС МАШИНЫ: " << VES << "\n";

prot << "\nКОЛИЧЕСТВО МАШИН: " << NABOR << "\n";

if ((light >= VES) && (VES != 0)) {

light = VES;

F1.Lightt = light;}

if ((heavy <= VES) && (VES != 0)) {

heavy = VES;

F1.Heavyy = heavy;}

prot << "\n\nсамый тяжелый: " << heavy;

prot << "\n\nсамый легкий: " << light << "\n";}

void Process(std::ofstream& res, std::ofstream& prot, std::string in_filename, std::string in_filename2, std::string in_filename3, std::string in_filename4){

ifstream cars;

ifstream firms;

ifstream details;

ifstream info;

cars.open(in_filename, std::ios_base::in);

firms.open(in_filename2, std::ios_base::in);

details.open(in_filename3, std::ios_base::in);

info.open(in_filename4, std::ios_base::in);

FormularV f1;

FormularV f2;

FormularV f3;

FormularV f4;

if (Read_file(cars, res, f1)) { ; }

if (Read_file(firms, res, f2)) { ; }

if (Read_fileDetails(details, res, f3)){

FUNCTION(res, f2, f3);

Print_fileDetails(res, f3);}

if (Read_fileINFO(info, res, f4)){

prot << " процесс: " << "\n\n";}

FUNCTION1(res, prot, f1, f2, f3, f4);

Print_fileINFO(res, f4); cout << "\nСписок автомобилей\n\n"; res << "\n\n Список автомобилей\n\n";

Print_file(res, f1); cout << " Список команд:\n"; cout << " 1 - Определить, можно ли произвести конкретную модель по запасу на складе, её вес и стоимость\n"; cout << " 2 - Определить сколько можно произвести автомобилей конкретной модели\n";cout << " 3 - Определить, какие модели можно произвести из определенного ценового диапазона\n"; cout << " 4 - Выделить модели по весу (самую легкую и самую тяжелую)\n"; res << " Список команд:\n"; res << " 1 - Определить, можно ли произвести конкретную модель по запасу на складе, её вес и стоимость\n"; res << " 2 - Определить сколько можно произвести автомобилей конкретной модели\n";res << " 3 - Определить, какие модели можно произвести из определенного ценового диапазона\n"; res << " 4 - Выделить модели по весу (самую легкую и самую тяжелую)\n";

int Case = -1;

int Case_car = -1;

int Price1 = -1;

int Price2 = -1;

while (Case != 0) {

cout << "\n -"; cout << "\n * Чтобы закончить работу, введите 0"; cout << "\n * Чтобы ещё раз вывести каталог деталей, введите 5"; cout << "\n * Чтобы ещё раз вывести информацию о составе автомобилей, введите 6"; cout << "\n * Чтобы ещё раз вывести список автомобилей, введите 7"; cout << "\n * Чтобы выполнилась команда, введите от 1 до 4 >> "; res << "\n -";

res << "\n * Чтобы закончить работу, введите 0"; res << "\n * Чтобы ещё раз вывести каталог деталей, введите 5";res << "\n * Чтобы ещё раз вывести информацию о составе автомобилей, введите 6";res << "\n * Чтобы ещё раз вывести список автомобилей, введите 7"; res << "\n * Чтобы выполнилась команда, введите от 1 до 4 >> ";

cin >> Case;

if ((Case > 7) || (Case < 0)) {

cout << "\n Это некорректный номер!"; res << "\n Это некорректный номер!"; continue;}

if (Case == 0) {

cout << "\n Работа закончена."; res << "\n Работа закончена."; break;}

if (Case == 5) {

Print_fileDetails(res, f3); continue;}

if (Case == 6) {

Print_fileINFO(res, f4);; continue; }

if (Case == 7) {

cout << "\n\n Список автомобилей\n\n"; res << "\n\n Список автомобилей\n\n";

Print_file(res, f1);

continue; }

if ((Case >= 1) || (Case <= 4)) {

cout << "\n Выбрана команда " << Case; res << "\n Выбрана команда " << Case;

if ((Case == 1) || (Case == 2)) { cout << "\n Введите номер модели >> "; res << "\n Введите номер модели >> "; cin >> Case_car;

if (Case_car <= 0) { cout << "\n - !Номер машины должен быть положительным числом!\n"; res << "\n - !Номер машины должен быть положительным числом!\n"; }

else { Print_BigCASE(res, f1, Case, Case_car, Price1, Price2);}}

if (Case == 3) { cout << "\n Введите левую границу диапазона >> "; cin >> Price1; cout << " Введите правую границу диапазона >> "; cin >> Price2; if ((Price1 < 0) || (Price2 < 0)) { cout << " - !Границы диапазона должен быть положительными числами!\n"; res << " - !Границы диапазона должен быть положительными числами!\n"; continue;} else if (Price1 > Price2) { cout << " - !Левая граница не может быть больше правой!\n";res << " - !Левая граница не может быть больше правой!\n"; continue;} else {cout << "\n Автомобили, попавшие в ценовой диапазон:\n"; res << "\n Автомобили, попавшие в ценовой диапазон:\n"; Print_BigCASE(res, f1, Case, Case_car, Price1, Price2);}}

if (Case == 4) { Print_BigCASE(res, f1, Case, Case_car, Price1, Price2);}} }

deleting(f1, res);

cout << "\n Список 1 удален\n";

deleting(f2, res);

cout << " Список 2 удален\n";

deleting(f3, res);

cout << " Список 3 удален\n";

deleting(f4, res);

cout << " Список 4 удален\n";}

Результаты работы программы

Входные файлы:

cars.txt

firms.txt

details.txt

info.txt

result.txt

Фрагмет из файла protokol.txt

ЗАКЛЮЧЕНИЕ

При выполнении данной курсовой работы были закреплены знания, полученные в

течение обучения во 2 семестре.