Описать структуру с именем 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;
- }
Объяснение кода листинга программы
- Структура с именем ZNAK содержит поля: fn, ln, zodiac, bday.
- Размер структуры ZNAK определяется макросом SIZE, равным 5.
- В функции printElement() выводится информация о найденном элементе списка.
- В функции search() происходит поиск элементов списка по заданному ключу.
- В функции main() реализована система взаимодействия с пользователем через команды: add, print, search, exit.
- При выполнении команды add, пользователю предлагается ввести данные для заполнения полей структуры ZNAK.
- При выполнении команды print, выводится информация о всех элементах списка или только о найденных по заданному ключу.
- При выполнении команды search, пользователю предлагается ввести ключ для поиска в списке.
- Ключ для поиска может быть как именем (fn или ln), так и датой рождения (bday).
- При выполнении команды exit, программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д