Soverein

Untitled

Mar 31st, 2021
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <fstream>
  6. using namespace std;
  7. struct Date {
  8. int day;
  9. int month;
  10. int year;
  11. };
  12. struct Worker {
  13.  
  14. char name[10];
  15. char sname[20];
  16. Date date;
  17. char pos[10];
  18. int zarp;
  19. Worker* prev, * next;
  20. };
  21. Worker* InitList() //Первичная инициализация структуры
  22. {
  23. Worker* list = new Worker;
  24. //У нас буквально пока нет элементов, так что нулл
  25. list->prev = NULL;
  26. list->next = NULL;
  27.  
  28. printf("Enter new record\n");
  29. printf("Enter name\n");
  30. cin >> list->name;
  31. printf("Enter sname\n");
  32. cin >> list->sname;
  33. printf("Enter day\n");
  34. cin >> list->date.day;
  35. printf("Enter month\n");
  36. cin >> list->date.month;
  37. printf("Enter year\n");
  38. cin >> list->date.year;
  39. printf("Enter pos\n");
  40. cin >> list->pos;
  41. printf("Enter day\n");
  42. cin >> list->zarp;
  43. return list;
  44. }
  45. Worker* Sort(Worker* Head) {
  46. Worker* q = Head;
  47.  
  48. while (q) {
  49. if (q->next) {
  50. if (strcmp(q->sname, q->next->sname) > 0) {
  51. printf("\nSwapping %s %s\n", q->sname, q->next->sname);
  52. swap(q->name, q->next->name);
  53. swap(q->sname, q->next->sname);
  54. swap(q->date.day, q->next->date.day);
  55. swap(q->date.month, q->next->date.month);
  56. swap(q->date.year, q->next->date.year);
  57. swap(q->pos, q->next->pos);
  58. swap(q->zarp, q->next->zarp);
  59. }
  60. else {
  61. q = q->prev;
  62. }
  63. }
  64. else q = q->prev;
  65. }
  66. return Head;
  67. }
  68. Worker* AddElems(Worker* Head) //Добавление элементов в структуру
  69. {
  70. Worker* temp;
  71. int n = 0;
  72. cout << "Enter num of obj you want to add: ";
  73. do {
  74. cin >> n;
  75. if (n <= 0) "Please try again!\n";
  76. } while (n <= 0);
  77.  
  78. for (int i = 0; i < n; i++) {
  79. temp = InitList();
  80. //Твикаем хуету, чтобы последний элемент был на последнем месте.
  81. temp->prev = Head;
  82. //И предпоследний ссылался на последний.
  83. Head->next = temp;
  84. Head = temp;
  85.  
  86. }
  87. Head = Sort(Head);
  88. return Head;
  89. }
  90. Worker* AddFromFile(ifstream& in) //Initlist, но для файла.
  91. {
  92. Worker* list = new Worker;
  93. list->prev = NULL;
  94. list->next = NULL;
  95.  
  96. in >> list->name;
  97. cout << list->name<<" ";
  98. in >> list->sname;
  99. cout << list->sname<<" ";
  100. in >> list->date.day;
  101. cout << list->date.day<<" ";
  102. in >> list->date.month;
  103. cout << list->date.month<<" ";
  104. in >> list->date.year;
  105. cout << list->date.year<<" ";
  106. in >> list->pos;
  107. cout << list->pos<<" ";
  108. in >> list->zarp;
  109. cout << list->zarp<<"\n";
  110. return list;
  111. }
  112. void PrintDuoList(Worker* Head) //Вывод элементов на консось
  113. {
  114.  
  115. Worker* q = Head;
  116. printf("Elements of list is:\n");
  117.  
  118. if (q) {
  119. //Опять же, идем с головы и до жопы.
  120. do
  121. {
  122. printf("%s %s %d %d %d %s %d\n", q->name, q->sname, q->date.day, q->date.month, q->date.year, q->pos, q->zarp);
  123. //Сдвигаем элемент на предыдущий.
  124. q = q->prev;
  125. } while (q); //Пока элемент вообще существует.
  126.  
  127. }
  128. //На случай, если у нас не существует элементов.
  129. else {
  130. printf("\nList is empty \n");
  131. }
  132. }
  133. void OutDuoList(Worker* Head) //Тот же самый щит, что и для консоси, но в файл.
  134. {
  135. ofstream out("outOFF.txt");
  136. Worker* q = Head;
  137. printf("Saving to file....\n");
  138. if (!q) {
  139. printf("\nList is empty \n");
  140. }
  141. else {
  142. do
  143. {
  144. if (q->zarp < 1000)
  145. {
  146. out << q->name << " " << q->sname << " " << q->date.day << " " << q->date.month << " " << q->date.year << " " << q->pos << " " << q->zarp << "\n";
  147. }
  148. q = q->prev;
  149. } while (q);
  150. }
  151. out.close();
  152. }
  153. Worker* Readfromfile() { //Считывание с файла.
  154. ifstream in("OFFICE.txt");
  155. //Если этот файл вдруг не существует.
  156. if (!in)
  157. {
  158. printf("File not found");
  159. return 0;
  160. }
  161.  
  162. //AddElems, но для файла.
  163. Worker* Head = NULL;
  164. Worker* temp;
  165. bool Switch = false;
  166.  
  167. while (!in.eof()) { //Пока не конец файла.
  168. if (!Switch) {
  169. Head = AddFromFile(in);
  170. Switch = true;
  171. }
  172. else {
  173. temp = AddFromFile(in);
  174. temp->prev = Head;
  175. Head->next = temp;
  176. Head = temp;
  177. }
  178. }
  179. in.close();
  180. return Head;
  181.  
  182. }
  183. void Monthout(Worker* Head) //Тот же самый щит, что и для консоси, но в файл.
  184. {
  185. ofstream out("Mout.txt");
  186. Worker* q = Head;
  187. printf("Saving to file....\n");
  188. if (!q) {
  189. printf("\nList is empty \n");
  190. }
  191. else {
  192. do
  193. {
  194. if (q->date.month == 3)
  195. {
  196. out << q->name << " " << q->sname << " " << q->date.day << " " << q->date.month << " " << q->date.year << " " << q->pos << " " << q->zarp << "\n";
  197. }
  198. q = q->prev;
  199. } while (q);
  200. }
  201. }
  202. int main() {
  203. Worker* Head = NULL;
  204. Worker* Tail = NULL;
  205. Head = Readfromfile();
  206. PrintDuoList(Head);
  207. Head = AddElems(Head);
  208. PrintDuoList(Head);
  209. OutDuoList(Head);
  210. Monthout(Head);
  211. system("exit");
  212. }
Add Comment
Please, Sign In to add comment