
Все лабы и практики(1-2 семестр ВМСИС),а также курсовая [Вариант разные варианты] / Курсовые работы по ОАИП / MY TR(variant 19) / Код расчетки в RTF
.rtf#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<locale.h>
#define N 50
//Структуры данных
struct dir_actors_prod
{
char actor[N];
char director[N];
char producer[N];
};
struct film
{
int budget;
int cash;
int time;
int year;
int num_a;
int num_d;
int num_p;
char country[N];
char name[N];
char rating[N];
char type[N];
dir_actors_prod actors[N];
dir_actors_prod directors[N];
dir_actors_prod producers[N];
film *next;
};
//Прототипы функций
void Create(film **films); //добавление в очередь информации о фильме
void ShowList(film *films);//просмотр очереди
void WriteInFile(film *films,FILE *myfile);//запись очереди в файл
void ReadFromFile(film **films,FILE *myfile);//чтение из файла в очередь
void YearSort(film *films);//поиск фильмов по году
void TypeSort(film *films);//поиск фильмов по жанру
void CountrySort(film *films);//поиск фильмов по стране
void RatingSort(film *films);//поиск фильмов по рейтингу
void DirectorSort(film *films);//поиск фильмов по режиссеру
void ActorSort(film *films);//поиск фильмов по актеру
void ShowAllActors(film *films);//показ всех актеров по всем фильмам
void WriteOneInFile(film *films,FILE *potok);//запись одного фильма в файл
void Delete(film **h);//удаление информации по фильму из очереди
//Головная функция
int main()
{
setlocale(LC_CTYPE,"Russian");
film *films = NULL;
FILE *myfile = fopen("info.txt","a+");
while(1)
{
printf("==========================ИНФОРМАЦИОННАЯ СИСТЕМА КИНОТЕ");
printf("ÀÒÐÀ=====================\n");
puts("Выберите операцию:");
puts(" 1 - Добавить фильм в инф. систему");
puts(" 2 - Просмотр всех фильмов");
puts(" 3 - Поиск фильмов по году");
puts(" 4 - Поиск фильмов по жанру");
puts(" 5 - Поиск фильмов по стране");
puts(" 6 - Поиск фильмов по рейтингу");
puts(" 7 - Поиск фильмов по режиссеру");
puts(" 8 - Поиск фильмов по актеру");
puts(" 9 - Просмотр всех актеров по всем фильмам");
puts(" d - Удаление любого фильма из файла");
puts(" 0 - Выйти");
fflush(stdin);
switch(getch())
{
case '1' : //Добавить фильм в файл
ReadFromFile(&films,myfile);
Create(&films);
fclose(myfile);
myfile = fopen("info.txt","w+");
WriteInFile(films,myfile);
fclose(myfile);
break;
case '2' : //Просмотр всех фильмов из файла
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
ShowList(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '3' : //Поиск фильмов по году
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
YearSort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '4' : //Поиск фильмов по определенному жанра
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
TypeSort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '5' : //Поиск фильмов по стране
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
CountrySort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '6' : //Поиск фильмов по рейтингу
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
RatingSort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '7' : //Поиск фильмов по режиссеру
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
DirectorSort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '8' : //Поиск фильмов по актеру
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
ActorSort(films);
fclose(myfile);
free(films);
films = NULL;
break;
case '9' : //Показ всех актеров по всем фильмам
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
ShowAllActors(films);
fclose(myfile);
free(films);
films = NULL;
break;
case 'd' : //удаление любого фильма из файла
free(films);
films = NULL;
myfile = fopen("info.txt","a+");
ReadFromFile(&films,myfile);
fclose(myfile);
Delete(&films);
myfile = fopen("info.txt","w");
WriteInFile(films,myfile);
fclose(myfile);
free(films);
films = NULL;
break;
case '0' : return 0;
}
}
system("pause");
}
//Функция добавления в очередь информации о фильме
void Create(film **films)
{
system("cls");
film *films_copy;
do{
if(!(films_copy = (film *)calloc(1,sizeof(film))))
{
puts("===Нет свободной памяти===");
return;
}
//Непосредственно ввод данных
printf("Введите название фильма:");
fflush(stdin);
gets(films_copy->name);
strcat(films_copy->name,"\n");
printf("Введите год выпуска фильма:");
scanf("%d",&films_copy->year);
printf("Введите жанр фильма:");
fflush(stdin);
gets(films_copy->type);
strcat(films_copy->type,"\n");
printf("Введите страну:");
fflush(stdin);
gets(films_copy->country);
strcat(films_copy->country,"\n");
printf("Введите бюджет фильма:");
scanf("%d",&films_copy->budget);
printf("Введите сборы в мире:");
scanf("%d",&films_copy->cash);
printf("Введите рейтинг:(*-ми(макс *****)):");
fflush(stdin);
gets(films_copy->rating);
strcat(films_copy->rating,"\n");
printf("Введите количество режиссеров:");
scanf("%d",&films_copy->num_d);
printf(" ====Ввод режиссеров====\n\n");
for(int i=0;i<films_copy->num_d;i++)
{
printf(" Введите имя %d -го режиссера:",i+1);
fflush(stdin);
gets(films_copy->directors[i].director);
strcat(films_copy->directors[i].director,"\n");
}
printf("Введите кол-во актеров:");
scanf("%d",&films_copy->num_a);
printf(" ====Ввод актеров====\n\n");
for(int i=0;i<films_copy->num_a;i++)
{
printf(" Введите %d -го актера:",i+1);
fflush(stdin);
gets(films_copy->actors[i].actor);
strcat(films_copy->actors[i].actor,"\n");
}
printf("Введите кол-во продюссеров:");
scanf("%d",&films_copy->num_p);
printf(" ====Ввод продюссеров====\n\n");
for(int i=0;i<films_copy->num_p;i++)
{
printf(" Введите %d -го продюссера:",i+1);
fflush(stdin);
gets(films_copy->producers[i].producer);
strcat(films_copy->producers[i].producer,"\n");
}
//Тут заканчивается непосредственно ввод данных
if(!*films) *films = films_copy;
else
{
films_copy->next = *films;
*films = films_copy;
}
puts("Продолжить ввод фильмов?(y/n)");
fflush(stdin);
}while(getch() == 'y');
}
//Функция просмотра всех фильмов из файла
void ShowList(film *films)
{
system("cls");
if(!films)
{
puts("Очередь пуста!");
return;
}
printf("\n==============================СПИСОК ФИЛЬМОВ========");
printf("===========================\n\n");
do{
if(films->name[0] != '\0'){
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n===================================================");
printf("============================\n\n");}
films = films->next;
}while(films);
system("pause");
}
//Функция записи очереди в файл
void WriteInFile(film *films,FILE *myfile)
{
if(!films)
{
puts("\nЗапись в файл невозможна!\n");
return;
}
do{
if(films->name[0] != '\0')
{
fputs(films->name,myfile);
fprintf(myfile,"%d\n",films->year);
fputs(films->type,myfile);
fputs(films->country,myfile);
fprintf(myfile,"%d\n",films->budget);
fprintf(myfile,"%d\n",films->cash);
fputs(films->rating,myfile);
fprintf(myfile,"%d\n",films->num_d);
for(int i=0;i<films->num_d;i++)
fputs(films->directors[i].director,myfile);
fprintf(myfile,"%d\n",films->num_a);
for(int i=0;i<films->num_a;i++)
fputs(films->actors[i].actor,myfile);
fprintf(myfile,"%d\n",films->num_p);
for(int i=0;i<films->num_p;i++)
fputs(films->producers[i].producer,myfile);
}
films = films->next;
}while(films);
}
//Функция чтения из файла в очередь
void ReadFromFile(film **films,FILE *myfile)
{
film *films_copy;
rewind(myfile);
do{
if(!(films_copy = (film *)calloc(1,sizeof(film))))
{
puts("Нет свободной памяти!");
return;
}
fgets(films_copy->name,N,myfile);//считываем имя из файла
fscanf(myfile,"%d\n",&films_copy->year);//год выпуска
fgets(films_copy->type,N,myfile);//æàíð
fgets(films_copy->country,N,myfile);//страна
fscanf(myfile,"%d\n",&films_copy->budget);//бюджет
fscanf(myfile,"%d\n",&films_copy->cash);//сборы в мире
fgets(films_copy->rating,N,myfile);//рейтинг
fscanf(myfile,"%d\n",&films_copy->num_d);
for(int i=0;i<films_copy->num_d;i++)
fgets(films_copy->directors[i].director,N,myfile);
fscanf(myfile,"%d\n",&films_copy->num_a);
for(int i=0;i<films_copy->num_a;i++)
fgets(films_copy->actors[i].actor,N,myfile);
fscanf(myfile,"%d\n",&films_copy->num_p);
for(int i=0;i<films_copy->num_p;i++)
fgets(films_copy->producers[i].producer,N,myfile);
if(!*films) *films = films_copy;
else
{
films_copy->next = *films;
*films = films_copy;
}
}while(!feof(myfile));
}
//Функция поиска фильмов по заданному году
void YearSort(film *films)
{
FILE *potok;
int y_flag;
int year;
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
system("cls");
if(!films)
{
puts("Очередь пуста!");
return;
}
printf("Введите год:");
scanf("%d",&year);
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ %d-го года==");
printf("=====================\n\n",year);
do{
if(films->name[0] != '\0' && year == films->year){
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n================================================");
printf("===============================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
films = films->next;
}while(films);
system("pause");
}
//Функция сортировки по определенному жанру
void TypeSort(film *films)
{
FILE *potok;
int y_flag;
int flag;
char *type = (char *)malloc(N*sizeof(char));
char *copy = (char *)malloc(N*sizeof(char));
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
if(!films)
{
puts("Очередь пуста!");
return;
}
printf("Ввести свой жанр/выбрать из популярных(0/1):");
scanf("%d",&flag);
if(flag == 0)
{
system("cls");
printf("Введите жанр:");
fflush(stdin);
gets(type);
strcpy(copy,type);
strcat(type,"\n");
}
else if(flag == 1)
{
system("cls");
puts("Выберите жанр:\n");
puts(" 1 - Action\n 2 - Fantasy\n 3 - Sport\n 4 - Drama");
fflush(stdin);
switch(getch())
{
case '1' : strcpy(copy,"Action");
strcpy(type,"Action\n"); break;
case '2' : strcpy(copy,"Fantasy");
strcpy(type,"Fantasy\n"); break;
case '3' : strcpy(copy,"Sport");
strcpy(type,"Sport\n"); break;
case '4' : strcpy(copy,"Drama");
strcpy(type,"Drama\n"); break;
}
}
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ(Жанр:%s)====");
printf("===================\n\n",copy);
do{
if(films->name[0] != '\0' && !strcmp(films->type,type))
{
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n===========================================");
printf("====================================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
films = films->next;
}while(films);
system("pause");
}
//Функция поиска фильмов по стране
void CountrySort(film *films)
{
FILE *potok;
int y_flag;
char *country = (char *)malloc(N*sizeof(char));
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
printf("Введите страну для поиска:");
fflush(stdin);
gets(country);
if(!films)
{
puts("Очередь пуста!");
return;
}
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ(Страна:%s)==");
printf("=====================\n\n",country);
strcat(country,"\n");
do{
if(films->name[0] != '\0' && !strcmp(films->country,country)){
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n=====================================================");
printf("==========================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
films = films->next;
}while(films);
system("pause");
}
//Функция поиска фильмов по рейтингу
void RatingSort(film *films)
{
FILE *potok;
int y_flag;
char *rating = (char *)malloc(N*sizeof(char));
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
printf("Введите рейтинг фильма для поиска:");
fflush(stdin);
gets(rating);
if(!films)
{
puts("Очередь пуста!");
return;
}
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ(Рейтинг:%s)===");
printf("====================\n\n",rating);
strcat(rating,"\n");
do{
if(films->name[0] != '\0' && !strcmp(films->rating,rating)){
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n======================================================");
printf("=========================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
films = films->next;
}while(films);
system("pause");
}
//Функция поиска фильмов по режиссеру
void DirectorSort(film *films)
{
FILE *potok;
int y_flag;
char *director = (char *)malloc(N*sizeof(char));
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
printf("Введите имя режиссера для поиска фильмов:");
fflush(stdin);
gets(director);
if(!films)
{
puts("Очередь пуста!");
return;
}
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ(Режиссер:%s)=");
printf("======================\n\n",director);
strcat(director,"\n");
do{
for(int i=0;i<films->num_d;i++)
{
if(films->name[0] != '\0' &&
!strcmp(films->directors[i].director,director))
{
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n============================================");
printf("===================================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
}
films = films->next;
}while(films);
system("pause");
}
//Функция поиска фильмов по определенному актеру
void ActorSort(film *films)
{
FILE *potok;
int y_flag;
char *actor = (char *)malloc(N*sizeof(char));
char *name = (char *)malloc(N*sizeof(char));
system("cls");
printf("Записать рез-ты поиска в файл?(0-нет/1-да):");
scanf("%d",&y_flag);
if(y_flag == 1)
{
printf("Введите имя файла:");
fflush(stdin);
gets(name);
strcat(name,".txt");
potok = fopen(name,"w");
}
else y_flag == 0;
printf("Введите имя актера для поиска фильмов:");
fflush(stdin);
gets(actor);
if(!films)
{
puts("Очередь пуста!");
return;
}
system("cls");
printf("\n==============================СПИСОК ФИЛЬМОВ(Актер:%s)===");
printf("====================\n\n",actor);
strcat(actor,"\n");
do{
for(int i=0;i<films->num_a;i++)
{
if(films->name[0] != '\0' &&
!strcmp(films->actors[i].actor,actor))
{
printf("Название фильма:%s",films->name);
printf("Год выпуска:%d\n",films->year);
printf("Жанр фильма:%s",films->type);
printf("Страна:%s",films->country);
printf("Бюджет:%d дол.\n",films->budget);
printf("Сборы в мире:%d дол.\n",films->cash);
printf("Рейтинг:%s",films->rating);
printf("Режиссеры:\n");
for(int i=0;i<films->num_d;i++)
printf(" %s",films->directors[i].director);
printf("Актеры:\n");
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
printf("Продюссеры:\n");
for(int i=0;i<films->num_p;i++)
printf(" %s",films->producers[i].producer);
printf("\n============================================");
printf("===================================\n\n");
if(y_flag == 1) WriteOneInFile(films,potok);
}
}
films = films->next;
}while(films);
system("pause");
}
//Функция показа всех актеров по всем фильмам
void ShowAllActors(film *films)
{
if(!films)
{
puts("Очередь пуста!");
return;
}
system("cls");
printf("\n==============================СПИСОК ВСЕХ АКТЕРОВ======");
printf("=================\n\n");
do{
if(films->name[0] != '\0')
{
for(int i=0;i<films->num_a;i++)
printf(" %s",films->actors[i].actor);
}
films = films->next;
}while(films);
system("pause");
}
//Функция записи информации по 1-му фильму в файл
void WriteOneInFile(film *films,FILE *potok)
{
fputs(films->name,potok);
fprintf(potok,"%d\n",films->year);
fputs(films->type,potok);
fputs(films->country,potok);
fprintf(potok,"%d\n",films->budget);
fprintf(potok,"%d\n",films->cash);
fputs(films->rating,potok);
fprintf(potok,"%d\n",films->num_d);
for(int i=0;i<films->num_d;i++)
fputs(films->directors[i].director,potok);
fprintf(potok,"%d\n",films->num_a);
for(int i=0;i<films->num_a;i++)
fputs(films->actors[i].actor,potok);
fprintf(potok,"%d\n",films->num_p);
for(int i=0;i<films->num_p;i++)
fputs(films->producers[i].producer,potok);
}
//Функция удаления из очереди
void Delete(film **h)
{
system("cls");
char *st = (char *)malloc(N*sizeof(char));
printf("Введите название фильма для удаления:");
fflush(stdin);
gets(st);
strcat(st,"\n");
film *f,*pr;
if (!(*h)->next && // в очереди только один элемент
(!strcmp((*h)->name,st) || *st=='\0'))
{
free(*h);
*h=NULL; // очередь пуста
return;
}
pr=*h;
f=pr; // далее f предыдущий к pr элемент
while(pr)
{
if (!strcmp(pr->name,st)) // найден элемент со строкой st
{
if (pr==*h) {*h=pr->next; free(pr); f=pr=*h;}
else
{
f->next=pr->next; // обходим элемент pr
free(pr); // удаляем элемент pr очереди
pr=f->next; // выбор следующего элемента очереди pr
}
}
else {f=pr; pr=pr->next;} // переход к следующему элементу
}
puts("\n\n===Фильм удален!!!===\n\n");
system("pause");
}