Zbirka filmov

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
//definiramo strukturo Film
struct Film
{
	char *naslov;
	int letnica;
	struct Igralec *igralci;
	struct Film* next;
};
 
//definiramo strukturo Igralec
struct Igralec
{
	char *priimek;
	struct Igralec *next;
};
 
//prototipi funkcij
void IzpisiSeznam(struct Film*);
void DodajIgralca(struct Film*);
struct Film *DodajFilm(struct Film*);
 
/* Sestavite program v jeziku C, v katerem interaktivno vnesete 
 * podatke o zbirki filmov. Za vsak film navedete naslov, letnice 
 * in priimke igralcev (v vsakem filmu nastopa eden ali več 
 * igralcev). Podatke o zbirki filmov prepišite v datoteko.
 * 
 * Avtor: kaalen
 */
int main()
{
	struct Film *filmi = NULL;
	int izbira;
	while(1)
	{
		printf("\nEvidenca filmov - moznosti:\n1 - izpis seznama vseh filmov\n2 - dodaj nov film\n3 - izhod iz programa\n");
		scanf("%d", &izbira);
		switch(izbira)
		{
			case 1:
			{
				//izpisi seznam
				IzpisiSeznam(filmi);
				break;
			}
			case 2:
			{
				//poklici funkcijo za dodajanje novega filma
				filmi = DodajFilm(filmi);
				break;
			}
			case 3:
			{
				//izhod iz programa
				return 0;
			}
		}
	}
	return 0;
}
 
/* Izpise celoten seznam filmov v zbirki.
 */
void IzpisiSeznam(struct Film *filmi)
{
	printf("\nSeznam filmov v zbirki:\n");
	struct Film *iterator = filmi;
	if(iterator == NULL)
	{
		printf("Zbirka filmov je prazna.\n");
	}
	else
	{
		int i = 1;
		while(iterator != NULL)
		{
			//izpisi osn. podatke o filmu
			printf("%d. %s (%d)\n", i, iterator->naslov, iterator->letnica);
			struct Igralec *igralecIt = iterator->igralci;
			//izpisi priimke igralcev
			while(igralecIt != NULL)
			{
				printf("\t%s\n", igralecIt->priimek);
				igralecIt = igralecIt->next;
			}
			iterator = iterator->next;
		}
	}
}
 
/* Funkcija doda film v zbirko.
 */
struct Film *DodajFilm(struct Film *filmi)
{
	struct Film *film = malloc(sizeof(struct Film));
 
	printf("\nVnesi ime filma:\n");
	char tmp[80];
	scanf("%s", tmp);
	film->naslov = malloc(sizeof(char) * strlen(tmp));
	strcpy(film->naslov, tmp);
 
	printf("Vnesi letnico izdaje:\n");
	scanf("%d", &(film->letnica));
 
	int moznost;
	while(1)
	{
		//izpisi moznosti za nadaljevanje
		printf("\nMoznosti:\n1- dodajanje igralca\n2 - koncaj\n");
		scanf("%d", &moznost);
		switch(moznost)
		{
			case 1:
			{
				DodajIgralca(film);
				break;
			}
			case 2:
			{
				struct Film *filmIt = filmi;
				if(filmIt == NULL)
				{
					printf("Dodajamo film v prazen seznam.\n");
					filmi = film;
				}
				else
				{
					while(filmIt->next != NULL)
					{
						filmIt = filmIt->next;
					}
					filmIt->next = film;
				}
				return filmi;
			}
		}
	}
}
 
/* Funkcija doda igralca k podatkom o filmu.
 */
void DodajIgralca(struct Film *film)
{
	//kreiraj novo strukturo Igralec
	struct Igralec *igralec = malloc(sizeof(struct Igralec));
 
	//preberi vhodne podatke
	printf("\nVnesi priimek igralca:\n");
	char tmp[80];
	scanf("%s", tmp);
	igralec->priimek = malloc(sizeof(char) * strlen(tmp));
	strcpy(igralec->priimek, tmp);
 
	//dodaj novega igralca k obstojecim
	struct Igralec *igralci = film->igralci;
	if(igralci == NULL)
	{
		//dodamo 1. igralca
		printf("Dodajamo igralca v prazen seznam");
		film->igralci = igralec;
	}
	else
	{
		while(igralci->next != NULL)
		{
			igralci = igralci->next;
		}
		igralci->next = igralec;
	}
}//malo telovadbe ipak ne skodi
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja