Структура «Фильм»: Задания 1, 2, 3, 7, 8
- название;
- режиссер (фамилия, имя, отчество);
- страна;
- год выпуска;
- стоимость;
- доход.
Задания к структурам.
1. Задать с клавиатуры размер массива структур.
2. Написать функцию для формирования одномерного массива структур, значения которых вводятся с клавиатуры.
3. Написать функцию вывода форматированной таблицы структур на экран с шапкой.
4. Написать функцию дополнения уже существующего массива структур новыми структурами.
5. Написать функцию поиска структуры с заданным значением выбранного элемента.
6. Написать функцию постраничного вывода на экран содержимого массива структур.
7. Написать функцию поиска структур с заданными признаками (например, по заданному диапазону значений элемента).
8. Написать функцию упорядочения массива структур по заданному полю (элементу).
#include <conio.h>
#include <stdio.h>
#include <string.h>
struct SFilm {
char Art[20];
char FIO[35];
char Country[10];
char Year[4];
char Price[8];
char Vol[8];
SFilm *Next;
SFilm *Prior;
};
SFilm *Film, *Start, *End;
int SizeOfFilms = 0;
void FillFilms();
void PrintFilms();
void Find(char find[20]);
void Sort();
void main()
{
Film = Start = End = NULL;
clrscr();
printf("Введи количество записей: ");
scanf("%d", &SizeOfFilms);
Film = new SFilm;
Start = Film;
End = Film;
FillFilms();
clrscr();
PrintFilms();
printf("\n\nВведи название фильма для поиска: ");
char findf[15];
scanf("%15s", &findf);
Find(findf);
Sort();
}
void FillFilms()
{
Film = Start;
for (int i=0; i<SizeOfStructFilm; i++)
{
printf("[%d] Название: ", i);
scanf ("%20s", &Film->Art); fflush(stdin);
printf("[%d] Режиссёр: ", i);
scanf ("%35s", &Film->FIO); fflush(stdin);
printf("[%d] Страна: ", i);
scanf ("%10s", &Film->Country); fflush(stdin);
printf("[%d] Год выпуска: ", i);
scanf ("%4s", &Film->Year); fflush(stdin);
printf("[%d] Стоимость: ", i);
scanf ("%8s", &Film->Price); fflush(stdin);
printf("[%d] Доход: ", i);
scanf ("%8s", &Film->Vol); fflush(stdin);
printf("\n");
SFilm *temp = new SFilm;
temp->Next = NULL;
temp->Prior = Film;
Film->Next = temp;
Film->Prior = Start;
Film = temp;
}
}
void PrintFilms()
{
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
printf("| Название | Режиссёр | Отчество | Год| Стоимость| Доход |");
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
Film = Start;
for (int i=0; i<SizeOfStructFilm; i++)
{
printf("|%20s|%35s|%10s|%4s|%8s|%8s|", Film->Art, Film->FIO, Film->Country, Film->Year, Film->Price, Film->Vol);
Film = Film->Next;
}
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
}
void Find (char find[15])
{
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
printf("| Название | Режиссёр | Отчество | Год| Стоимость| Доход |");
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
Film = Start;
for (int i=0; i<SizeOfStructFilm; i++)
{
int yes = 0;
for (int j=0; j<strlen(find); j++) if (find[j] == Film->Family[j]) yes++;
if (yes == strlen(find))
printf("|%20s|%35s|%10s|%4s|%8s|%8s|", Film->Art, Film->FIO, Film->Country, Film->Year, Film->Price, Film->Vol);
Film = Film->Next;
}
printf("+--------------------+-----------------------------------+----------+----+--------+--------+");
}
void Sort()
{
SFilm *temp = Start;
for (int i=0; i<SizeOfStructFilm; i++)
for (int j=i; j<SizeOfStructFilm; j++)
{
temp = Film->Prior;
if (Film->Art[1]<temp->Art[1])
{
Film->Next = temp->Next;
Film->Prior = temp->Prior;
Film = temp;
}
}
PrintFilms();
}