Описать структуру с именем ZNAK - C (СИ) (74652)

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

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

Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия, имя; • знак зодиака; • дата рождения (массив из трёх чисел). Задание на поиск: найти информацию о людях, родившихся под знаком, название которого введено с клавиатуры. Написать программу, которая выполняет следующие действия: 1. Ввод данных об информационном объекте через диалог с пользователем и запись этих данных в массив. При вводе проверять, есть ли свободное место в массиве. 2. Вывод хранящихся данных на экран. 3. Выполнение задания на поиск, которое определяется вариантом. Программа должна содержать 3 функции (ввод одного элемента массива (одной строчки таблицы), вывод всей таблицы на экран, выполнение задания на поиск) и меню, позволяющее пользователю выбрать одно из трех действий.

Решение задачи: «Описать структуру с именем ZNAK»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <string.h>
  5.  
  6. #define SIZE 5
  7.  
  8. typedef struct
  9. {
  10.   char fn[20], ln[20], zodiac[20];
  11.   int bday[3];
  12. } zodiac;
  13.  
  14. void printElement(zodiac * list, int index)
  15. {
  16.   printf("[Found] %s %s born on %d.%d.%d (%s)\n", list[index].fn, list[index].ln, list[index].bday[0],
  17.       list[index].bday[1], list[index].bday[2], list[index].zodiac);
  18. }
  19.  
  20. void search(zodiac * list, void * key, int * option)
  21. {
  22.   switch (*option)
  23.   {
  24.   case 0:
  25.     for (int i = 0; i < SIZE; i++)
  26.     {
  27.       if (list[i].bday[0] && !strcmp(list[i].fn, (char *) key))
  28.       {
  29.         printElement(list, i);
  30.       }
  31.     }
  32.     break;
  33.   case 1:
  34.     for (int i = 0; i < SIZE; i++)
  35.     {
  36.       if (list[i].bday[0] && !strcmp(list[i].ln, (char *) key))
  37.       {
  38.         printElement(list, i);
  39.       }
  40.     }
  41.     break;
  42.   case 2:
  43.     for (int i = 0; i < SIZE; i++)
  44.     {
  45.       if (list[i].bday[0] == *(int *) key && list[i].bday[1] == *((int *) key + 1)
  46.           && list[i].bday[2] == *((int *) key + 2))
  47.       {
  48.         printElement(list, i);
  49.       }
  50.     }
  51.     break;
  52.   default:
  53.     printf("Something gone wrong!\n");
  54.     break;
  55.   }
  56. }
  57.  
  58. int main(int argc, char ** argv)
  59. {
  60.   zodiac list[SIZE];
  61.   memset(list, 0, sizeof(zodiac) * SIZE);
  62.   char command[20];
  63.  
  64.   while (1)
  65.   {
  66.     printf("> ");
  67.     scanf("%s", command);
  68.  
  69.     if (!strcmp(command, "add"))
  70.     {
  71.       int index = 0;
  72.       for (int i = 0; i < SIZE; i++, index++)
  73.       {
  74.         if (!list[i].bday[0])
  75.         {
  76.           scanf("%s %s %s %d %d %d", list[i].fn, list[i].ln, list[i].zodiac, &list[i].bday[0], &list[i].bday[1],
  77.               &list[i].bday[2]);
  78.           break;
  79.         }
  80.       }
  81.       if (index == SIZE)
  82.       {
  83.         printf("There are no free slots!\n");
  84.       }
  85.     }
  86.     else if ((!strcmp(command, "print")))
  87.     {
  88.       for (int i = 0; i < SIZE; i++)
  89.       {
  90.         if (list[i].bday[0])
  91.         {
  92.           printElement(list, i);
  93.         }
  94.       }
  95.     }
  96.     else if ((!strcmp(command, "search")))
  97.     {
  98.       int option;
  99.       char key[20];
  100.       int date[3];
  101.  
  102.       printf("What you are looking for? (Firstname: 0, Lastname: 1, Birthday: 2): ");
  103.       scanf("%d", &option);
  104.       printf("Searching key: ");
  105.  
  106.       if (option == 2)
  107.       {
  108.         scanf("%d %d %d", &date[0], &date[1], &date[2]);
  109.         search(list, (void *) date, &option);
  110.       }
  111.       else
  112.       {
  113.         scanf("%s", key);
  114.         search(list, (void *) key, &option);
  115.       }
  116.     }
  117.     else if ((!strcmp(command, "exit")))
  118.     {
  119.       return EXIT_SUCCESS;
  120.     }
  121.     else
  122.     {
  123.       printf("unknown command\n");
  124.     }
  125.   }
  126.   return EXIT_SUCCESS;
  127. }

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

  1. Структура с именем ZNAK содержит поля: fn, ln, zodiac, bday.
  2. Размер структуры ZNAK определяется макросом SIZE, равным 5.
  3. В функции printElement() выводится информация о найденном элементе списка.
  4. В функции search() происходит поиск элементов списка по заданному ключу.
  5. В функции main() реализована система взаимодействия с пользователем через команды: add, print, search, exit.
  6. При выполнении команды add, пользователю предлагается ввести данные для заполнения полей структуры ZNAK.
  7. При выполнении команды print, выводится информация о всех элементах списка или только о найденных по заданному ключу.
  8. При выполнении команды search, пользователю предлагается ввести ключ для поиска в списке.
  9. Ключ для поиска может быть как именем (fn или ln), так и датой рождения (bday).
  10. При выполнении команды exit, программа завершается.

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


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

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

9   голосов , оценка 4.111 из 5

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

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

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