Advertisement
Metaraddin

Untitled

Mar 16th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. //#define _CRT_SECURE_NO_WARNINGS
  2. #include "stdafx.h"
  3. #include <iostream>
  4. #include <ctime>
  5. using namespace std;
  6.  
  7. struct TAddress
  8. {
  9. char Street[40];
  10. unsigned short NumHouse, NumApart;
  11. };
  12.  
  13. struct TResident
  14. {
  15. char Fam[40];
  16. char City[40];
  17. TAddress Address;
  18. };
  19.  
  20. void RndFill(TResident * mas, int Len); // Заполняет массив записей случайными значениями.
  21. void OutNum(TResident * mas, int Num); // Выводит запись под номером Num.
  22. void OutAll(TResident * mas, int Len); // Выводит массив записей.
  23. int InNum(int Len); // Проверяет и возвращает значение Num.
  24. void Fill(TResident * mas, int Num); // Заполняет запись под номером Num.
  25. int Add(TResident * mas, int Len); // Добавляет в массив записей новый элемент. Вызывает Fill от этого элемента. Возвращает новую длинну массива (Len).
  26. void Sort(TResident * mas, int Len); // Сортирует записи методом вставки по алфавиту (по фамилии).
  27. void NewYear(TResident * mas, int Len); // Выводит на экран по две фамилии с одинаковыми адресами, но разными городами.
  28.  
  29. int main()
  30. {
  31. //setlocale(LC_ALL, "Russian");
  32. //SetConsoleCP(1251);
  33. //SetConsoleOutputCP(1251);
  34.  
  35. srand(time(0));
  36.  
  37. int Len;
  38. cout << " Введите кол-во записей: ";
  39. cin >> Len;
  40. TResident * mas = new TResident[Len];
  41. RndFill(mas, Len);
  42.  
  43. char Task;
  44. do
  45. {
  46. cout << endl;
  47. cout << " 1 - Вывести на экран все записи." << endl;
  48. cout << " 2 - Вывести на экран одну запись." << endl;
  49. cout << " 3 - Изменить одну запись." << endl;
  50. cout << " 4 - Добавить новую запись." << endl;
  51. cout << " 5 - Сортировка записей по алфавиту." << endl;
  52. cout << " 6 - Режим \"Ирония судьбы\"." << endl;
  53.  
  54. cout << "\n Что вы хотите сделать? : ";
  55. cin >> Task;
  56. cout << endl;
  57.  
  58. switch (Task)
  59. {
  60. case '1':
  61. {
  62. OutAll(mas, Len);
  63. break;
  64. }
  65. case '2':
  66. {
  67. OutNum(mas, InNum(Len));
  68. break;
  69. }
  70. case '3':
  71. {
  72. Fill(mas, InNum(Len));
  73. break;
  74. }
  75. case '4':
  76. {
  77. Len = Add(mas, Len);
  78. break;
  79. }
  80. case '5':
  81. {
  82. Sort(mas, Len);
  83. break;
  84. }
  85. case '6':
  86. {
  87. NewYear(mas, Len);
  88. break;
  89. }
  90. default:
  91. {
  92. cout << " Такого задания я не готовил. :с" << endl;
  93. break;
  94. }
  95.  
  96. }
  97. } while (1 != 0);
  98. return 0;
  99. }
  100.  
  101. void RndFill(TResident * mas, int Len)
  102. {
  103. const char * MFam[] = { "Rasputin", "Pyrkin", "Putin", "Medvedev", "Navalnyi" , "Tolstoi" , "Maier" , "Veber" , "Braun", "Torres", "Garsia", "Bernar", "German", "Fisher", "Robinson", "Teilor", "Abamelek", "Romanova", "Saltykova", "Razumovskaya" };
  104. const char * MCity[] = { "Lyubercy", "ZHukovskii", "Moskva" , "Piter" , "Sankt-Peterburg" , "Kaluga" , "Kirov" , "Sarov" , "Saransk" , "Balashiha" , "Belgorod" , "Sokol" , "Sochi" , "Kostroma" , "Bilibino" , "Krasnoyarsk" , "Starica" , "Suzdal'" , "Suksun" , "Sulak" };
  105. const char * MStreet[] = { "SHosseinaya", "Komsomolskaya", "Centralnaya" , "Molodezhnaya" , "SHkolnaya" , "Lesnaya" , "Sovetskaya" , "Novaya" , "Sadovaya" , "Naberezhnaya" , "Zarechnaya" , "Zelenaya" , "Mira" , "Lenina" , "Polevaya" , "Lugovaya" , "Oktyabrskaya" , "Gagarina" , "Pervomaiskaya" , "Severnaya" };
  106. srand(time(0));
  107.  
  108. for (int i = 0; i < Len; i++)
  109. {
  110. strcpy(mas[i].Fam, MFam[0 + rand() % 19]);
  111. strcpy(mas[i].City, MCity[0 + rand() % 19]);
  112. strcpy(mas[i].Address.Street, MStreet[0 + rand() % 19]);
  113. mas[i].Address.NumHouse = (1 + rand() % 20);
  114. mas[i].Address.NumApart = (1 + rand() % 50);
  115. }
  116. }
  117.  
  118. int InNum(int Len)
  119. {
  120. do
  121. {
  122. int Num;
  123. cout << " Введите номер записи: ";
  124. cin >> Num;
  125. if (Num - 1 >= 0 && Num - 1 < Len)
  126. {
  127. cout << endl;
  128. return Num - 1;
  129. }
  130. else cout << " Записи под этим номером не существует." << endl;
  131. } while (1 != 0);
  132. }
  133.  
  134. void OutNum(TResident * mas, int Num)
  135. {
  136. cout << "№ " << Num + 1 << "; Фамилия: " << mas[Num].Fam << "; Место жительства: г. " << mas[Num].City << ", ул. " << mas[Num].Address.Street << ", дом " << mas[Num].Address.NumHouse << ", кв. " << mas[Num].Address.NumApart << endl;
  137. }
  138.  
  139. void OutAll(TResident * mas, int Len)
  140. {
  141. for (int Num = 0; Num < Len; Num++)
  142. {
  143. OutNum(mas, Num);
  144. }
  145. }
  146.  
  147. void Fill(TResident * mas, int Num)
  148. {
  149. cout << "Введите новые значения.\n\n Фамилия: ";
  150. cin >> mas[Num].Fam;
  151. cout << " Город: ";
  152. cin >> mas[Num].City;
  153. cout << " Улица: ";
  154. cin >> mas[Num].Address.Street;
  155. cout << " Номер дома: ";
  156. cin >> mas[Num].Address.NumHouse;
  157. cout << " Номер квартиры: ";
  158. cin >> mas[Num].Address.NumApart;
  159. }
  160.  
  161. int Add(TResident * mas, int Len)
  162. {
  163. Len++;
  164. memcpy(mas, mas, Len);
  165. Fill(mas, Len - 1);
  166. return Len;
  167. }
  168.  
  169. void Sort(TResident * mas, int Len)
  170. {
  171. for (int i = 1; i < Len; i++)
  172. {
  173. for (int j = i; j > 0 && strcmp(mas[j - 1].Fam, mas[j].Fam) > 0; j--)
  174. {
  175. swap(mas[j - 1], mas[j]);
  176. }
  177. }
  178. }
  179.  
  180. void NewYear(TResident * mas, int Len)
  181. {
  182. for (int i = 0; i < Len; i++)
  183. {
  184. for (int j = i + 1; j < Len; j++)
  185. {
  186. if (strcmp(mas[i].Address.Street, mas[j].Address.Street) == 0 && mas[i].Address.NumHouse == mas[j].Address.NumHouse && mas[i].Address.NumApart == mas[j].Address.NumApart && strcmp(mas[i].City, mas[j].City) != 0)
  187. {
  188. cout << mas[i].Fam << " (№" << i + 1 << ") и " << mas[j].Fam << " (№" << j + 1 << ")\n";
  189. }
  190. }
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement