Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.69 KB | None | 0 0
  1. Дедюкина лаба 6 вар 6
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <string>
  6. #include <iomanip>
  7. #include <fstream>
  8. #include<iostream>
  9. #include<cstring>
  10. #include<windows.h>
  11. using namespace std;
  12.  
  13. struct avto {
  14.  
  15. char type[20];
  16. double num;
  17. double race;
  18. double hour;
  19. double km;
  20. };
  21. avto B[10]; //объявляется массив из 10 структур
  22. const char *sh[] = { "\t\t\tСамолеты\t",
  23. "||=============================================================||",
  24. "|| Тип ||Номер || Количество || Налет ||Налет в тыс.||",
  25. "|| Самолета || Борта || рейсов ||в часах|| км. ||",
  26. "||=============================================================||",
  27. "||_____________________________________________________________||"
  28. };
  29. ifstream fin; // определяется входной файловый поток;
  30. ofstream fout; //определяется выходной файловый поток;
  31. double s;
  32.  
  33. //------------удаление пробелов вначале и в конце строки - параметра--------
  34. void filtr(char *Stroka)
  35. {
  36. char Source[255] = ""; // вспомогательная строка;
  37. int X1 = 0, X2 = strlen(Stroka) - 1; //установка на начало и конец строки;
  38. while (Stroka[X1] == ' ') X1++;
  39. while (Stroka[X2] == ' ' || Stroka[X2] == '\n') X2--;
  40. for (int x = X1; x <= X2; x++) {
  41. Source[x - X1] = Stroka[x];
  42. Source[x - X1 + 1] = '\0'; // в конце строки устанавливаем байтовский ноль;
  43. } //строку Source копируем в массив Stroka;
  44. strcpy(Stroka, Source);
  45. }
  46. //---------------------Вывод строк шапки таблицы-------------------------
  47. void psh() {
  48. for (int i = 0; i<5; i++)
  49. fout << sh[i] << endl;
  50. }
  51. //------------Определение количества записей в файле данных--------------
  52. int number(char* filename)
  53. //параметр функции – строка с именем файла данных
  54. {
  55. int n = 0; // счетчик записей;
  56. char T[255]; // массив буфер;
  57. fin.open(filename); //открытие файла данных;
  58. if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
  59. while (!fin.eof()) //пока не достигли конца файла данных
  60. {
  61. fin.getline(T, 255); n++;
  62. } //считываем строку файла, увеличиваем n
  63.  
  64.  
  65. fin.close(); // закрываем файл данных;
  66. return n; //возвращаем количество строк;
  67. }
  68.  
  69. void vvod(avto B[10], int n, double & s, char*filename)
  70. //параметры: 1)- массив структур, 2) - количество записей в файле данных, //3) - ссылка для передачи суммарной стоимости, 4) - адрес массива с //именем файла данных
  71. {
  72. int i; s = 0;
  73. char T[80]; //массив буфер;
  74. fin.open(filename); //открытие файла данных;
  75. if (!fin) { cout << "Ошибка при открытии файла данных"; exit(0); }
  76. for (i = 0; i< n; i++) //цикл считывания данных из файла в массив
  77. {
  78. fin.getline(B[i].type, 15); filtr(B[i].type);
  79. fin.clear();
  80. fin >> B[i].num>> B[i].race>> B[i].hour>> B[i].km;
  81. s += B[i].hour;
  82. fin.getline(T, 80);
  83. }//из потока извлекается символ перехода на новую строку
  84. fin.close();
  85. }
  86.  
  87. //-------------------------------Вывод массива структур--------------------------------
  88. void vivod(avto B[10], int n)
  89. {
  90. int i;
  91. for (i = 0; i<n; i++)
  92. fout << "||" << setw(14) << B[i].type << "||" << setw(8) << B[i].num << "||"
  93. << setw(12) << B[i].race << "||" << setw(7) << B[i].hour << "||" << setw(12)
  94. << B[i].km << "||" << endl;
  95. fout << sh[5] << endl << "Суммарный налет в часах: " << s ;
  96. }
  97. //-----------------------Поиск по типу самолета----------------------------------
  98. void poisk(avto *p, int n)
  99. //параметры: адрес первого элемента массива структур и кол-во //заполненных структур в массиве
  100. {
  101. char name[20]; // строка для поискового признака;
  102. fin.open("p.dat"); //открытие файла данных для поиска;
  103. if (!fin) { cout << "Ошибка открытия файла данных для поиска "; exit(0); }
  104. fout << "\n\n Поиск по типу самолета \n";
  105. psh();
  106. while (!fin.eof()) // пока не конец файла;
  107. {
  108. fin.getline(name, 20); //считываем из файла поисковый признак;
  109. filtr(name);
  110. if (!strcmp(name, "")) //если это пустая строка
  111. {
  112. fout << endl << "Нет данных " ; continue;
  113. } //к следующей итерации цикла while;
  114.  
  115.  
  116. //в противном случае
  117. for (int i = 0; i<n; i++) //перебираем структуры из массива структур
  118. if (strcmp(p[i].type, name) == 0) //если есть совпадение
  119. {
  120. fout << "\n||" << setw(14) << p[i].type << "||" << setw(8) << p[i].num << "||"
  121. << setw(12) << p[i].race << "||" << setw(7) << p[i].hour << "||" << setw(12)
  122. << p[i].km << "||" ;
  123. goto m;
  124. } //тело цикла for
  125. //если перебрали все структуры массива, и совпадения не было
  126. fout << endl << "Самолет " << name << setw(11) << " не найден";
  127. m:;
  128. } //тело цикла while
  129. fout << endl << sh[5] << endl;
  130. fin.close();
  131. }
  132. //------------------------Главная функция------------------------------------------
  133. void main() {
  134. SetConsoleCP(1251);
  135. SetConsoleOutputCP(1251);
  136. char filen[15];
  137. cout << "Введите имя файла данных - ";
  138. cin.getline(filen, 80); // ввод имени файла;
  139. fout.open("res.dat"); // открытие файла результатов;
  140. if (!fout) { cout << "Ошибка открытия файла результатов"; exit(0); }
  141. //вызовы функций:
  142. int n = number(filen); //количество записей в файле;
  143. vvod(B, n, s, filen); psh(); vivod(B, n); poisk(B, n);
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement