Iz E-študij, proste zakladnice študentskega znanja
#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