Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.68 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <locale.h>
  6. #define begin 9//начало работы
  7. #define end 21//конец работы
  8.  
  9. typedef struct {
  10. char name[40];//название
  11. int time;//время
  12. }hairstyle;//описание прически
  13.  
  14. typedef struct {
  15. int min;
  16. int pr;
  17. }time;//структура описания времени
  18.  
  19. typedef struct {
  20. char name[50];
  21. hairstyle rec;
  22. int time[2];
  23. }client;
  24.  
  25. int time_work = (end - begin) * 60;//время работы в минутах
  26. client man[30];//массив клиентов за день
  27. int counter = 0;//счетчик записей за день
  28. hairstyle list[10] = { { "hair1", 30 },//массив причесок "название, время исполнения"
  29. { "hair2", 40 },
  30. { "hair3", 50 },
  31. { "hair4", 60 },
  32. { "hair5", 65 },
  33. { "hair6", 45 },
  34. { "hair7", 82 },
  35. { "hair8", 23 },
  36. { "hair9", 54 },
  37. { "hair10", 23 } };
  38.  
  39.  
  40. void record(time[]);//запись в парикмахерскую
  41. void delet(time[]);//удаление записи из списка
  42. void out_record();//вывод на экран списка записей
  43.  
  44. int main()
  45. {
  46. setlocale(LC_ALL, "rus");//для корректной работы кириллицы
  47. int a = 0;//переменная для switch
  48. time Time[(end - begin) * 60];//массив времени работы в минутах
  49. int i = 0;//для циклов
  50. for (i = 0; i < time_work; i++)//инициализация времени работы парикмахерской
  51. {
  52. Time[i].min = i;//номер минуты
  53. Time[i].pr = 0;//показатель "свободно/занято"
  54. }
  55. do {//стандартный выбор через switch
  56. system("cls");
  57. printf("Выберите действие\n\n");
  58. printf("1.Записаться на стрижку\n2.Вывести записи\n3.Удаление из списка\n4.Выход\n");
  59. scanf("%i", &a);
  60. switch (a)
  61. {
  62. case 1:
  63. record(Time);
  64. break;
  65. case 2:
  66. out_record();
  67. system("pause");
  68. break;
  69. case 3:
  70. if (counter)//если записец нет, то удалять нечего
  71. delet(Time);//и функция удаления не вызывается
  72. else
  73. printf("\nЗаписей нет!");
  74. break;
  75. case 4:
  76. break;
  77. default: printf("Введите 1-4");
  78. }
  79. } while (a != 4);
  80. system("pause");
  81. return 0;
  82. }
  83.  
  84. void Print()//вывод списка причесок для выбора
  85. {
  86. int i;
  87. printf("Прическа\t\tвремя выполнения");
  88. for (i = 0; i < 10; i++)
  89. {
  90. printf("\n%i.%s\t\t%i:%i", i + 1, list[i].name, list[i].time / 60, list[i].time % 60);
  91. }
  92. }
  93.  
  94. void delet(time T[])
  95. {
  96. client r;//впомогательная переменная
  97. int n, i;
  98. system("cls");
  99. out_record();//вывод списка записей
  100. do {
  101. printf("\nВведите порядковый номер записи для удаления: ");
  102. scanf("%i", &n);//ввод номера удаляемой записи
  103. if (n < 1 || counter < n)
  104. printf("Введите номер из списка!\n");
  105. } while (n < 1 || counter < n);
  106. n--;
  107. for (i = 60 * (man[n].time[0] - begin) + man[n].time[1]; i < 60 * (man[n].time[0] - begin) + man[n].time[1] + man[n].rec.time; i++)
  108. {
  109. /*освобождаем минуты с "времени записи на стрижку" до "время записи на стрижку + время самой стрижки"*/
  110. T[i].pr = 0;//при удалении записи "освобождаем" время, которое было "занято" в массиве работы парикмахерской
  111. //printf("\n%i %i", T[i].min, T[i].pr);
  112. }
  113.  
  114. if (n != counter - 1)//если удаляемая запись не последняя
  115. {
  116. r = man[n];//то меняем ее с последней записью
  117. man[n] = man[counter - 1];
  118. man[counter - 1] = r;
  119. }
  120. system("pause");
  121. counter--;//уменьшаем счетчик
  122. }
  123.  
  124. void sort()
  125. {//сортировка пузырьком по времени записи
  126. client r;
  127. int i, j;
  128. if (counter < 2)
  129. return;
  130. for (i = 0; i < counter - 1; i++)
  131. for (j = i + 1; j < counter; j++)
  132. if (man[i].time[0] > man[j].time[0])
  133. {
  134. r = man[i];
  135. man[i] = man[j];
  136. man[j] = r;
  137. }
  138. }
  139.  
  140. void out_record()
  141. {//вывод записей на экран
  142. int i;
  143. printf("\nЗаписи\n\n");
  144. sort();
  145. for (i = 0; i < counter; i++)
  146. {
  147. printf("\n%i.%s", i + 1, man[i].name);//вывод имени
  148. printf("%i:", man[i].time[0]);//вывод часа
  149. if (man[i].time[1] < 10)//если минуты равны 0-9
  150. printf("0");//то приписываем 0 впереди чтоб получилось "9 00", а не "9 0"
  151. printf("%i - ", man[i].time[1]);//вывод минут
  152. printf("%i:", ((60 * man[i].time[0]) + man[i].time[1] + man[i].rec.time) / 60);
  153. if ((man[i].time[1] + man[i].rec.time) % 60 < 10)//вывод времени до которого длится стрижка
  154. printf("0");
  155. printf("%i", (man[i].time[1] + man[i].rec.time) % 60);
  156. }
  157. printf("\n");
  158. }
  159.  
  160. void record(time T[])
  161. {
  162. system("cls");
  163. int i, j;
  164. int time_rec[2];//времени
  165. int n;
  166. fflush(stdin);
  167. printf("Введите имя и фамилию: ");
  168. getchar();
  169. fgets(man[counter].name, 50, stdin);
  170. if (counter)
  171. {
  172. out_record();//вывод записей, если они есть
  173. }
  174. do {
  175. printf("\nВведите время, на которое хотите записаться(например 11 00): ");
  176. scanf("%i%i", &time_rec[0], &time_rec[1]);//ввод времени на которое хочет записаться пользователь
  177. if (time_rec[0] < begin || end <= time_rec[0])//если время выходит за рамки режима работы, то просим ввести время заново
  178. printf("\nВведите время в пределах %i - %i\n\n", begin, end);
  179. } while (time_rec[0] < begin || end <= time_rec[0]);//если время выходит за рамки режима работы, то запускаем ввод заново
  180. man[counter].time[0] = time_rec[0];//запись времени в массив записей(часов)
  181. man[counter].time[1] = time_rec[1];//запись времени в массив записей(минут)
  182. Print();//вывод списка стрижек, для выбора
  183. printf("\nВыберите прическу (введите порядковый номер): ");
  184. scanf("%i", &n);//считывание номера стрижки
  185. n--;
  186. man[counter].rec = list[n];//копирование данных о стрижке
  187. for (i = 0; i < time_work; i++)
  188. {
  189. if (time_rec[0] == (T[i].min / 60) + begin && time_rec[1] == (T[i].min % 60))/*поиск минуты в массиве
  190. соответсвующей введенному времени*/
  191. if (T[i].min + list[n].time <= T[time_work - 1].min)//если стрижка не укладывается в режим работы, то не записываем
  192. {
  193. int flag = 0;
  194. for for (j = i; j < T[i].min + list[n].time; j++)
  195. {
  196. if (T[j].pr == 1) flag = 1;
  197. }
  198. if (flag == 0)
  199. {
  200. for (j = i; j < T[i].min + list[n].time; j++)
  201. {
  202. T[j].pr = 1;
  203. }
  204. counter++;
  205. }
  206. else
  207. {
  208. printf("Вы не можете записаться на данное время!!!\n\n");
  209. system("pause");
  210. break;
  211. }
  212. system("pause");
  213. break;
  214. }
  215. }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement