Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Exemplo de 3 estruturas ligadas entre si
- Tiago Cardoso - [email protected]
- Como sou lazzy, não fiz os free da memoria, Enjoy.
- **/
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct livro {
- char titulo[120];
- char autor[120];
- int paginas;
- struct livro* pnext;
- } LIVRO;
- typedef struct prateleira {
- char abecedario[20];
- struct prateleira* pnext;
- LIVRO* firstbook;
- } PRATELEIRA;
- typedef struct estante {
- char tipo[20];
- PRATELEIRA* prateleirafirst;
- } ESTANTE;
- void print_prateleiras(ESTANTE* es);
- PRATELEIRA* enserir_prateleira(ESTANTE* es, char nome[25]);
- void print_livros(PRATELEIRA* pt);
- int main()
- {
- ESTANTE es = {"Informatica",NULL};
- // Criar 2 apontadores para as estantes
- PRATELEIRA* primeira = enserir_prateleira(&es,"De A a B");
- PRATELEIRA* segunda = enserir_prateleira(&es,"De C a D");
- print_prateleiras(&es);
- // Enserir na 1 estante
- inserir_livro(primeira,"AA1", "Tiago",10);
- inserir_livro(primeira,"AA12", "Tiago2",10);
- print_livros(primeira);
- // Enserir na 2 estante
- inserir_livro(segunda,"CC1", "Tiago",10);
- inserir_livro(segunda,"CC12", "Tiago2",10);
- print_livros(segunda);
- // Extras
- find_livro_estante(&es, "CC12");
- find_livro_prateleira(primeira, "AA1");
- guardar_estante_ficheiro(&es,"obrigadotiago.txt");
- return 0;
- }
- PRATELEIRA* enserir_prateleira(ESTANTE* es, char nome[25]) // retorna o endereço de memoria da prateleira acabada de ser inserida
- {
- PRATELEIRA* aux;
- PRATELEIRA* p = NULL;
- // Cria uma prateleira nova
- p = (PRATELEIRA*)malloc(sizeof(PRATELEIRA));
- strcpy(p->abecedario,nome);
- p->firstbook = NULL;
- LIVRO* test = p->firstbook;
- p->pnext = NULL;
- // Se nao existir a primeira, vai ser a primeira então.
- if(es->prateleirafirst == NULL)
- {
- es->prateleirafirst = p;
- return p;
- }
- // Aponta para a primeira e começa até encontrar a ultima
- aux = es->prateleirafirst;
- while(aux->pnext != NULL)
- {
- aux = aux->pnext;
- }
- aux->pnext = p;
- return p;
- }
- void inserir_livro(PRATELEIRA* pt, char titulo[], char autor[], int paginas)
- {
- LIVRO* aux;
- LIVRO* novolivro = NULL;
- // Cria um livro novo
- novolivro = (LIVRO*)malloc(sizeof(LIVRO));
- strcpy(novolivro->titulo,titulo);
- strcpy(novolivro->autor,autor);
- novolivro->paginas = paginas;
- novolivro->pnext = NULL;
- // Se nao existir a primeira, vai ser a primeira então.
- if(pt->firstbook == NULL)
- {
- pt->firstbook = novolivro;
- return;
- }
- // Aponta para a primeiro livro ate encontrar o ultimo
- aux = pt->firstbook;
- while(aux->pnext != NULL)
- {
- aux = aux->pnext;
- }
- aux->pnext = novolivro;
- }
- void print_prateleiras(ESTANTE* es)
- {
- PRATELEIRA* aux = NULL;
- aux = es->prateleirafirst;
- if(es->prateleirafirst != NULL) // Existe 1 prateleira
- {
- aux = es->prateleirafirst;
- while(aux != NULL)
- {
- printf("Nova Prateleira | Abecedario: %s\n",aux->abecedario);
- aux = aux->pnext;
- }
- }
- else
- {
- printf("Não ha prateleiras!");
- exit(1);
- }
- }
- void print_livros(PRATELEIRA* pt)
- {
- LIVRO* aux = NULL;
- aux = pt->firstbook;
- if(pt->firstbook != NULL) // Existe livro na prateleira
- {
- printf("Livros da Prateleira: %s\n",pt->abecedario);
- aux = pt->firstbook;
- while(aux != NULL)
- {
- printf("Nome %s\n",aux->titulo);
- aux = aux->pnext;
- }
- }
- else
- {
- printf("Não ha livros nessa prateleira!\s");
- exit(1);
- }
- }
- void find_livro_prateleira(PRATELEIRA* pt, char nomelivro[])
- {
- int flag = 0;
- LIVRO* aux = NULL;
- aux = pt->firstbook;
- if(pt->firstbook != NULL) // Existe livro na prateleira
- {
- aux = pt->firstbook;
- while(aux != NULL)
- {
- if(strcmp(aux->titulo,nomelivro) == 0)
- {
- printf("Encontrado! Nome %s\n",aux->titulo);
- flag = 1;
- break;
- }
- aux = aux->pnext;
- }
- }
- else
- {
- printf("Não ha livros nessa prateleira!\s");
- exit(1);
- }
- if(flag == 0)
- {
- printf("Nao foi encontrado o livro \"%s\" na prateleira \"%s\"",nomelivro,pt->abecedario);
- }
- }
- void find_livro_estante(ESTANTE* es, char nomelivro[])
- {
- int flag = 0;
- PRATELEIRA* ptaux = NULL;
- ptaux = es->prateleirafirst;
- if(es->prateleirafirst != NULL) // Existe 1 prateleira
- {
- ptaux = es->prateleirafirst;
- while(ptaux != NULL)
- {
- if(ptaux->firstbook == NULL) break; // Se não existir o 1º livro na prateleira
- LIVRO* livroaux = ptaux->firstbook; // Para auxiliar, code mess
- while(livroaux != NULL)
- {
- if(strcmp(livroaux->titulo,nomelivro) == 0)
- {
- printf("Foi encontrado o (Livro - Nome %s) na (Prateleira - Nome: %s) \n",livroaux->titulo,ptaux->abecedario);
- flag = 1;
- break;
- }
- livroaux = livroaux->pnext; // Proximo livro
- }
- ptaux = ptaux->pnext; // Proxima prateleira
- }
- }
- else
- {
- printf("Não ha prateleiras!");
- exit(1);
- }
- if(flag == 0)
- {
- printf("Nao foi encontrado o livro em nenhuma das estantes!\n");
- }
- }
- void guardar_estante_ficheiro(ESTANTE* es, char nomeficheiro[])
- {
- char c[1000]; // OHHH BOY; WE GONNA FLOOD THIS SHIT
- FILE *fptr;
- fptr=fopen(nomeficheiro,"w");
- if(fptr==NULL){
- printf("Nao deu para guardar o ficheiro, vai o bar buscar uma mini enquanto isso!");
- exit(1);
- }
- // LET THE LITTLE FLOOD BEGIN!
- PRATELEIRA* ptaux = NULL;
- ptaux = es->prateleirafirst;
- if(es->prateleirafirst != NULL) // Existe 1 prateleira
- {
- ptaux = es->prateleirafirst;
- while(ptaux != NULL)
- {
- if(ptaux->firstbook == NULL) break; // Se não existir o 1º livro na prateleira
- LIVRO* livroaux = ptaux->firstbook; // Para auxiliar, code mess
- while(livroaux != NULL)
- {
- fprintf(fptr,"%s",livroaux->titulo);
- fprintf(fptr,"|%s",livroaux->autor);
- fprintf(fptr,"|%d",livroaux->paginas);
- livroaux = livroaux->pnext; // Proximo livro
- }
- ptaux = ptaux->pnext; // Proxima prateleira
- if(ptaux != NULL) // Fiz esta verificaao para nao criar uma nova linha se nao existir mais prateleiras
- {
- fprintf(fptr,"\n");
- }
- }
- }
- else
- {
- printf("Não ha prateleiras na estante!");
- exit(1);
- }
- fclose(fptr);
- }
Advertisement
Add Comment
Please, Sign In to add comment