Есть структура, в которой хранится ID, фио пациента. Но ID я могу заводить одинаковые - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, как лучше сделать так, чтобы ID были уникальными.
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. typedef struct{
  4. int id;
  5. char famil[20];
  6. char imya[20];
  7. char otchest[20];
  8. char adres[20];
  9. int phone;
  10. int nomer;
  11. char diagnoz[30];
  12. } Patient;
  13. Patient a[100];
  14. int function () //проверка на корректность целого числа
  15. {
  16. char s[100];
  17. while (1 > 0)
  18. {
  19. int len, point = 0, simbol = 0, i = 0;
  20. scanf ("%s", s);
  21. if (s[0] == '-')
  22. i++, simbol++;
  23. len = strlen(s);
  24. for (; i < len; i++)
  25. {
  26. if (isdigit(s[i])) simbol++;
  27. if (s[i] == '.') point++;
  28. }
  29. if (simbol == (len - point)) break;
  30. printf("Poproby snova!\n");
  31. }
  32. return(atoi(s));
  33. }
  34. int fun (int a, int b)//функция, возвращающая переменную вещественного типа и непринимающая аргументов
  35. {
  36. int flag = 0;
  37. char s[100];//объявление строки
  38. while (1 > 0)//бесконечный цикл, который не прервется, пока не будет введено верное значение
  39. {
  40. flag = 0;
  41. int len, i = 0;//объявление переменных целочисленного типа
  42. scanf ("%s", s);//ввод строки с клавиатуры
  43. len = strlen(s);//присваивание переменной значения длины введенной строки
  44. for (; i < len; i++)//цикл, проходящий по всем символам введенной строки
  45. {
  46. if (isdigit(s[i]) == 0)
  47. {
  48. flag = 1; //проверяем флаг потом во внешнем цикле
  49. break;
  50. }
  51. }
  52. if (((atoi(s) > a) && (atoi(s) < b) || (flag == 1))) return(atoi(s));
  53. else printf("Poproby snova!\n"); continue;//продолжение цикла в случае не выполнения условия на числовое значение
  54. }
  55. }
  56. void cozdatZapisi()
  57. {
  58. fflush(stdin);
  59. int z, i;
  60. printf("Vvedite chislo patient: ");
  61. z= function();
  62. for(i=0;i<z;i++){
  63. printf("%d", i+1);
  64. printf("\n Vvedite id: ");
  65. a[i].id= function();
  66. while(1){
  67. printf(" Vvedite famil: ");
  68. scanf("%s", &a[i].famil);
  69. if(strtol(a[i].famil, NULL, 10)==0) break;
  70. printf("Poproby snova!\n");
  71. }
  72. while(1){
  73. printf(" Vvedite imya: ");
  74. scanf("%s", &a[i].imya);
  75. if(strtol(a[i].imya, NULL, 10)==0) break;
  76. printf("Poproby snova!\n");
  77. }
  78. while(1){
  79. printf(" Vvedite otcest: ");
  80. scanf("%s", &a[i].otchest);
  81. if(strtol(a[i].otchest, NULL, 10)==0) break;
  82. printf("Poproby snova!\n");
  83. }
  84. while(1){
  85. printf(" Vvedite adres: ");
  86. scanf("%s", &a[i].adres);
  87. if(strtol(a[i].adres, NULL, 10)==0) break;
  88. printf("Poproby snova!\n");
  89. }
  90. printf(" Vvedite nomer med. karti: ");
  91. a[i].nomer= function();
  92. while(1){
  93. printf(" Vvedite diagnoz: ");
  94. scanf("%s", &a[i].diagnoz);
  95. if(strtol(a[i].diagnoz, NULL, 10)==0) break;
  96. printf("POPROBY SNOVA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
  97. }
  98. printf("\n");
  99. fflush(stdin);
  100. }
  101. }
  102. int main()
  103. {
  104. int n;
  105. while(1)
  106. {
  107. char control;
  108. printf( "1 - Cozdat baza patient\n"
  109. "2 - Spisok patientov po diagnoz\n"
  110. "3 - Spisok patientov po nomer\n"
  111. "0 - Exit\n");
  112. scanf("%c", &control);
  113. fflush(stdin);
  114. switch (control) {
  115. case '1':
  116. {
  117. cozdatZapisi();
  118. break;
  119. }
  120. case '2':
  121. {
  122. char b[100];
  123. int i;
  124. printf("Diagnoz: ");
  125. scanf("%s", &b);
  126. int flag1 = 0;
  127. for(i=0; i<100; i++){
  128. if(strcmp(a[i].diagnoz, b)==0){
  129. printf("FIO patient: %s %s %s\n", a[i].famil, a[i].imya, a[i].otchest);
  130. flag1 = 1;
  131. }
  132. if (flag1 == 0)printf("Net patient s takim diagnoz\n");
  133. break;
  134. }
  135. getchar();
  136. getchar();
  137. fflush(stdin);
  138. break;
  139. }
  140. case '3':
  141. {
  142. char b[100];
  143. int g, o;
  144. int i;
  145. int flag1 = 0;
  146. printf("Zadaite nomer 1: ");
  147. scanf("%i", &g);
  148. printf("Zadaite nomer 2: ");
  149. scanf("%i", &o);
  150. for(i=0; i<100; i++){
  151. if(g<a[i].nomer && a[i].nomer <o){
  152. printf("FIO i nomer patient: %s %s %s %i\n", a[i].famil, a[i].imya, a[i].otchest, a[i].nomer);
  153. flag1 = 1;
  154. }
  155. if (flag1 == 0)printf("Net patient\n");
  156. break;
  157. }
  158. getchar();
  159. getchar();
  160. fflush(stdin);
  161. break;
  162. }
  163. case '0':
  164. {
  165. return 0;
  166. }
  167. default:
  168. break;
  169. }
  170. }
  171. return 0;
  172. }

Решение задачи: «Есть структура, в которой хранится ID, фио пациента. Но ID я могу заводить одинаковые»

textual
Листинг программы
  1. //...
  2. printf("\n Vvedite id: ");
  3. while(true){
  4.   int id = function();//ввод числа
  5.   bool is_ok = true;
  6.   for(int j=0;j<i;j++){
  7.     if (a[j].id==id) {
  8.       is_ok = false;
  9.       break;
  10.     }
  11.   }
  12.   if (is_ok){
  13.     break;
  14.   }
  15.   printf("Poproby snova!\n");
  16. }
  17. a[i].id=id;
  18. //...

Объяснение кода листинга программы

В этом коде представлен ввод уникального идентификатора (id) для структуры данных, содержащей информацию о пациентах. Предполагается, что идентификаторы должны быть уникальными, и код проверяет это, проходя циклом по уже введенным идентификаторам. Если такой же идентификатор уже существует, пользователю предлагается ввести другой. Когда введен уникальный идентификатор, он сохраняется в структуре данных. Вот список элементов кода с номерами:

  1. printf(\n Vvedite id: ); - Вывод приглашения для ввода идентификатора.
  2. while(true){ - Начало бесконечного цикла.
  3. int id = function();//ввод числа - Ввод идентификатора с помощью функции ввода.
  4. bool is_ok = true; - Объявление переменной для проверки уникальности идентификатора.
  5. for(int j=0;j<i;j++){ - Цикл для проверки уникальности введенного идентификатора.
  6. if (a[j].id==id) { - Проверка наличия идентификатора в массиве структур.
  7. is_ok = false; - Если идентификатор уже существует, переменная проверки становится ложной.
  8. break; - Выход из цикла, если идентификатор уже существует.
  9. if (is_ok){ - Проверка, является ли идентификатор уникальным.
  10. break; - Выход из цикла, если идентификатор уникален.
  11. printf(Poproby snova!\n); - Вывод сообщения об ошибке, если идентификатор не уникален.
  12. a[i].id=id; - Сохранение введенного идентификатора в структуре данных.
  13. } - Конец блока кода.
  14. } - Конец цикла.
  15. //... - Возможно, есть еще код после этого, но он не виден в данном контексте. Пожалуйста, обратите внимание, что этот код не обрабатывает ошибки ввода или другие потенциальные проблемы, которые могут возникнуть во время его выполнения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы