Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Дедюкина лаба 6 вар 6
- #define _CRT_SECURE_NO_WARNINGS
- #include <conio.h>
- #include <stdlib.h>
- #include <string>
- #include <iomanip>
- #include <fstream>
- #include<iostream>
- #include<cstring>
- #include<windows.h>
- using namespace std;
- struct avto {
- char type[20];
- double num;
- double race;
- double hour;
- double km;
- };
- avto B[10]; //объявляется массив из 10 структур
- const char *sh[] = { "\t\t\tСамолеты\t",
- "||=============================================================||",
- "|| Тип ||Номер || Количество || Налет ||Налет в тыс.||",
- "|| Самолета || Борта || рейсов ||в часах|| км. ||",
- "||=============================================================||",
- "||_____________________________________________________________||"
- };
- ifstream fin; // определяется входной файловый поток;
- ofstream fout; //определяется выходной файловый поток;
- double s;
- //------------удаление пробелов вначале и в конце строки - параметра--------
- void filtr(char *Stroka)
- {
- char Source[255] = ""; // вспомогательная строка;
- int X1 = 0, X2 = strlen(Stroka) - 1; //установка на начало и конец строки;
- while (Stroka[X1] == ' ') X1++;
- while (Stroka[X2] == ' ' || Stroka[X2] == '\n') X2--;
- for (int x = X1; x <= X2; x++) {
- Source[x - X1] = Stroka[x];
- Source[x - X1 + 1] = '\0'; // в конце строки устанавливаем байтовский ноль;
- } //строку Source копируем в массив Stroka;
- strcpy(Stroka, Source);
- }
- //---------------------Вывод строк шапки таблицы-------------------------
- void psh() {
- for (int i = 0; i<5; i++)
- fout << sh[i] << endl;
- }
- //------------Определение количества записей в файле данных--------------
- int number(char* filename)
- //параметр функции – строка с именем файла данных
- {
- int n = 0; // счетчик записей;
- char T[255]; // массив буфер;
- fin.open(filename); //открытие файла данных;
- if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
- while (!fin.eof()) //пока не достигли конца файла данных
- {
- fin.getline(T, 255); n++;
- } //считываем строку файла, увеличиваем n
- fin.close(); // закрываем файл данных;
- return n; //возвращаем количество строк;
- }
- void vvod(avto B[10], int n, double & s, char*filename)
- //параметры: 1)- массив структур, 2) - количество записей в файле данных, //3) - ссылка для передачи суммарной стоимости, 4) - адрес массива с //именем файла данных
- {
- int i; s = 0;
- char T[80]; //массив буфер;
- fin.open(filename); //открытие файла данных;
- if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
- for (i = 0; i< n; i++) //цикл считывания данных из файла в массив
- {
- fin.getline(B[i].type, 15); filtr(B[i].type);
- fin.clear();
- fin >> B[i].num>> B[i].race>> B[i].hour>> B[i].km;
- s += B[i].hour;
- fin.getline(T, 80);
- }//из потока извлекается символ перехода на новую строку
- fin.close();
- }
- //-------------------------------Вывод массива структур--------------------------------
- void vivod(avto B[10], int n)
- {
- int i;
- for (i = 0; i<n; i++)
- fout << "||" << setw(14) << B[i].type << "||" << setw(8) << B[i].num << "||"
- << setw(12) << B[i].race << "||" << setw(7) << B[i].hour << "||" << setw(12)
- << B[i].km << "||" << endl;
- fout << sh[5] << endl << "Суммарный налет в часах: " << s ;
- }
- //-----------------------Поиск по типу самолета----------------------------------
- void poisk(avto *p, int n)
- //параметры: адрес первого элемента массива структур и кол-во //заполненных структур в массиве
- {
- char name[20]; // строка для поискового признака;
- fin.open("p.dat"); //открытие файла данных для поиска;
- if (!fin) { cout << "Ошибка открытия файла данных для поиска "; exit(0); }
- fout << "\n\n Поиск по типу самолета \n";
- psh();
- while (!fin.eof()) // пока не конец файла;
- {
- fin.getline(name, 20); //считываем из файла поисковый признак;
- filtr(name);
- if (!strcmp(name, "")) //если это пустая строка
- {
- fout << endl << "Нет данных " ; continue;
- } //к следующей итерации цикла while;
- //в противном случае
- for (int i = 0; i<n; i++) //перебираем структуры из массива структур
- if (strcmp(p[i].type, name) == 0) //если есть совпадение
- {
- fout << "\n||" << setw(14) << p[i].type << "||" << setw(8) << p[i].num << "||"
- << setw(12) << p[i].race << "||" << setw(7) << p[i].hour << "||" << setw(12)
- << p[i].km << "||" ;
- goto m;
- } //тело цикла for
- //если перебрали все структуры массива, и совпадения не было
- fout << endl << "Самолет " << name << setw(11) << " не найден";
- m:;
- } //тело цикла while
- fout << endl << sh[5] << endl;
- fin.close();
- }
- //------------------------Главная функция------------------------------------------
- void main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- char filen[15];
- cout << "Введите имя файла данных - ";
- cin.getline(filen, 80); // ввод имени файла;
- fout.open("res.dat"); // открытие файла результатов;
- if (!fout) { cout << "Ошибка открытия файла результатов"; exit(0); }
- //вызовы функций:
- int n = number(filen); //количество записей в файле;
- vvod(B, n, s, filen); psh(); vivod(B, n); poisk(B, n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement