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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#include <string.h>
 
#define SIZE 5
 
typedef struct
{
  char fn[20], ln[20], zodiac[20];
  int bday[3];
} zodiac;
 
void printElement(zodiac * list, int index)
{
  printf("[Found] %s %s born on %d.%d.%d (%s)\n", list[index].fn, list[index].ln, list[index].bday[0],
      list[index].bday[1], list[index].bday[2], list[index].zodiac);
}
 
void search(zodiac * list, void * key, int * option)
{
  switch (*option)
  {
  case 0:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] && !strcmp(list[i].fn, (char *) key))
      {
        printElement(list, i);
      }
    }
    break;
  case 1:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] && !strcmp(list[i].ln, (char *) key))
      {
        printElement(list, i);
      }
    }
    break;
  case 2:
    for (int i = 0; i < SIZE; i++)
    {
      if (list[i].bday[0] == *(int *) key && list[i].bday[1] == *((int *) key + 1)
          && list[i].bday[2] == *((int *) key + 2))
      {
        printElement(list, i);
      }
    }
    break;
  default:
    printf("Something gone wrong!\n");
    break;
  }
}
 
int main(int argc, char ** argv)
{
  zodiac list[SIZE];
  memset(list, 0, sizeof(zodiac) * SIZE);
  char command[20];
 
  while (1)
  {
    printf("> ");
    scanf("%s", command);
 
    if (!strcmp(command, "add"))
    {
      int index = 0;
      for (int i = 0; i < SIZE; i++, index++)
      {
        if (!list[i].bday[0])
        {
          scanf("%s %s %s %d %d %d", list[i].fn, list[i].ln, list[i].zodiac, &list[i].bday[0], &list[i].bday[1],
              &list[i].bday[2]);
          break;
        }
      }
      if (index == SIZE)
      {
        printf("There are no free slots!\n");
      }
    }
    else if ((!strcmp(command, "print")))
    {
      for (int i = 0; i < SIZE; i++)
      {
        if (list[i].bday[0])
        {
          printElement(list, i);
        }
      }
    }
    else if ((!strcmp(command, "search")))
    {
      int option;
      char key[20];
      int date[3];
 
      printf("What you are looking for? (Firstname: 0, Lastname: 1, Birthday: 2): ");
      scanf("%d", &option);
      printf("Searching key: ");
 
      if (option == 2)
      {
        scanf("%d %d %d", &date[0], &date[1], &date[2]);
        search(list, (void *) date, &option);
      }
      else
      {
        scanf("%s", key);
        search(list, (void *) key, &option);
      }
    }
    else if ((!strcmp(command, "exit")))
    {
      return EXIT_SUCCESS;
    }
    else
    {
      printf("unknown command\n");
    }
  }
  return EXIT_SUCCESS;
}

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

  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