golfflower

lab11

Mar 17th, 2020
720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.14 KB | None | 0 0
  1. #include <iostream> //библиотеки
  2. #include <iomanip>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include <fstream>
  6.  
  7. using namespace std; //пространство имён
  8.  
  9. const int nmax=100; //максимальный размер массива
  10.  
  11. struct tOrg // объявление структуры
  12. {
  13. char otdel[30], //название отдела
  14. name[20], //имя начальника
  15. fam[20], //фамилия начальника
  16. otch[20]; //отчество начальника
  17. int num, //номер кабинета
  18. people; //количество сотрудников
  19. };
  20.  
  21. int inputmas(tOrg org[], int n, char *orgfilename) //функция считывания данных из файла
  22. {
  23. ifstream fin;
  24. fin.open(orgfilename);
  25. if(fin)
  26. {
  27. while ((!fin.eof())&&(n<nmax))
  28. {
  29. fin>>org[n].otdel;
  30. fin>>org[n].name;
  31. fin>>org[n].fam;
  32. fin>>org[n].otch;
  33. fin>>org[n].num;
  34. fin>>org[n].people;
  35. n++;
  36. }
  37. fin.close();
  38. }
  39. else cout<<"такого файла нет"<<endl;
  40. return n; //возвращает количество отделов
  41. }
  42.  
  43. void outputmas (tOrg org[], int k) //функция вывода информации об отделе, количество сотрудников которого не меньше, заданного с клавиатуры
  44. {
  45. cout<<"введите количество сотрудников для проверки"<<endl;
  46. int c,q=0;
  47. cin>>c;
  48. cout<<setw(20)<<left<<"название отдела"<<setw(20)<<"фамилия начальника"<<setw(20)<<"имя начальника"<<setw(25)<<"отчество начальника"<<setw(20)<<"Ќомер кабинета"<<setw(20)<<" оличество сотрудников"<<endl;
  49. for (int i=0;i<k;i++)
  50. {
  51. if (org[i].people >= c)
  52. {
  53. q++;
  54. cout<<endl;
  55. cout<<setw(20)<<org[i].otdel<<setw(20)<<org[i].fam<<setw(20)<<org[i].name<<setw(25)<<org[i].otch
  56. <<setw(20)<<org[i].num<<setw(20)<<org[i].people<<endl;
  57. }
  58. }
  59. if (q==0) cout<<"таких отделов нет"<<endl; //проверка
  60. }
  61.  
  62. void orginfo(tOrg org[], int k, char fam1[]) //функция поиска отдела по фамилии начальника
  63. {
  64. int q=0;
  65. cout<<setw(20)<<left<<"название отдела"<<setw(20)<<"фамилия начальника"<<setw(20)<<"имя начальника"<<setw(25)<<"отчество начальника"<<setw(20)<<"номер кабинета"<<setw(20)<<"количество сотрудников"<<endl;
  66. for (int i=0;i<k;i++)
  67. {
  68. if (strcmp(org[i].fam, fam1)==0)
  69. {
  70. q++;
  71. cout<<endl;
  72. cout<<setw(20)<<org[i].otdel<<setw(20)<<org[i].fam<<setw(20)<<org[i].name<<setw(25)<<org[i].otch
  73. <<setw(20)<<org[i].num<<setw(20)<<org[i].people<<endl;
  74. }
  75. }
  76. if (q==0) cout<<"таких отделов нет"<<endl; //проверка
  77. }
  78.  
  79. void sort(tOrg org[], int k) //функция сортировки и вывода
  80. {
  81. tOrg temp;
  82. bool fl;
  83. do
  84. {
  85. fl=1; //поднимаем флаг
  86. for (int i=0;i<k-1;i++)
  87. if (strcmp(org[i].otdel,org[i+1].otdel)>0)
  88. {
  89. temp=org[i];
  90. org[i]=org[i+1];
  91. org[i+1]=temp;
  92. fl=0; //если поменяли местами, опускаем флаг
  93. }
  94. }
  95. while (!fl);
  96. }
  97.  
  98. void masout(tOrg org[], int k)
  99. {
  100. char sortfile[100];
  101. cout<<"введите имя файла для сортировки"<<endl;
  102. cin>>sortfile;
  103. ofstream fout(sortfile);
  104. fout<<setw(20)<<left<<"название отдела"<<setw(20)<<"фамилия начальника"<<setw(20)<<"имя начальника"<<setw(25)<<"отчество начальника"<<setw(20)<<"номер кабинета"<<setw(20)<<"количество сотрудников"<<endl;
  105. for (int l=0;l<k;l++)
  106. {
  107. fout<<endl;
  108. fout<<setw(20)<<org[l].otdel<<setw(20)<<org[l].fam<<setw(20)<<org[l].name<<setw(25)<<org[l].otch
  109. <<setw(20)<<org[l].num<<setw(20)<<org[l].people<<endl;
  110. }
  111. }
  112.  
  113. int main(void) //главная функция
  114. {
  115. SetConsoleCP(1251);
  116. SetConsoleOutputCP(1251);
  117. tOrg org[nmax];
  118. int n=0,k;
  119. char filename[100];
  120. cout<<"введите имя файла с данными организации"<<endl;
  121. cin>>filename;
  122. k=inputmas(org, n, filename);
  123. if (k>0) //если введены данные хотя бы одного отдела
  124. {
  125. outputmas (org, k); //вызов функции вывода по количеству
  126. cout<<endl<<"введите фамилию начальника отдела"<<endl;
  127. char fam1[20];
  128. cin>>fam1;
  129. orginfo (org, k, fam1); //вызов функции поиска по фамилии
  130. sort (org, k); //вызов функции сортировки
  131. masout(org,k); //вызов функции вывода в файл
  132. }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment