Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Francisco Jr.

Loja de CDs

Recommended Posts

Tenho que desenvolver um programa com a seguinte proposta:

Desenvolver um aplicativo para cadastro de CDs. Este aplicativo deve manipular
duas listas encadeadas uma para os CDs e outra para as músicas. A estrutura de dados a
ser utilizada para isso está no arquivo “estrutura.h”. O aplicativo deve conter as
seguintes funções:
1. Cadastra CD
2. Deleta CD
3. Lista as músicas de um CD
4. Lista todo o cadastro (CDs e suas respectivas músicas)
5. Pesquisa cadastro por código do CD ou por Nome do Conjunto.
6. Cadastra músicas em um CD
7. Deleta músicas em um CD
8. Grava o Cadastro em disco
9. Lê o cadastro do disco
Formato do arquivo dos CDs:
{Código do CD}
[Nome do CD]
[Nome do Conjunto]
[Ano do CD]
(Musica 1)
Nome da trilha
Tempo
(Musica 2)
Nome da trilha
Tempo
Tenho um arquivo de cabeçalho:
#ifndef ESTRUTURA_H
#define ESTRUTURA_H

#define TAM_NOME	30

typedef struct MUSICA
{
	int nPosicaTrilha;
	char szNomeDaTrilha[TAM_NOME];
	int nTempo;
	struct MUSICA* proximo;
}musica;

typedef struct CD
{
	int nCodigoCd;
	char szNomeDoConjunto[TAM_NOME];
	char szNomedoCd[TAM_NOME];
	int nAno;
	musica* psMusicas;
	struct CD* proximo;
}cd;

#endif

E o arquivo principal:

/*##########################################################################*/
/*--$#
#
#   FILE NAME : Loja de CDs
#   AUTOR: Francisco S. S. Junior
#
#$--*/
/*##########################################################################*/

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Estrutura.h"

int insereCD( cd **albumInicial, int codigoCD, char nomeConjunto[30], char nomeCD[30], int Ano){
	
	cd *pstNovo, *p;
	
	pstNovo = (cd*)calloc(1,sizeof(cd));
	
	pstNovo->nCodigoCd = codigoCD;
	strcpy(pstNovo->szNomeDoConjunto, nomeConjunto);
	strcpy(pstNovo->szNomedoCd, nomeCD);
	pstNovo->nAno = Ano;
	
	if(*albumInicial == NULL){
		*albumInicial = pstNovo;
	}else{
		for(p = *albumInicial; p->proximo; p = p->proximo);
        p->proximo = pstNovo;
	}
	return codigoCD;
}

void deletarCD( cd **primeiroAlbum, int codigo ){
	
	cd *p, *auxiliar;

	p = *primeiroAlbum;
	
	if(p->nCodigoCd == codigo ){
		*primeiroAlbum = p->proximo;
	} else {
		for(;p;p=p->proximo){
			
			if(p->proximo != NULL && p->proximo->nCodigoCd == codigo ){
				
				if( p->proximo->proximo == NULL){
					p->proximo = NULL;
				} else {
					auxiliar = p->proximo->proximo;
					p->proximo = auxiliar;
				}

			}
		}	
	}
	
}

void insereMusica( cd **albumInicial, int codigoCD, int nPosicaTrilha, char szNomeDaTrilha[30], int nTempo){
	
	cd *p;
	
	p = *albumInicial;
	
	for(;p;p=p->proximo){
	
		if(p->nCodigoCd == codigoCD ) {
		
			musica *musicaNova, *pMusicaAuxiliar;
			
			musicaNova = (musica*)calloc(1, sizeof(musica));
			musicaNova->nPosicaTrilha = nPosicaTrilha;
			musicaNova->nTempo = nTempo;
			strcpy(musicaNova->szNomeDaTrilha,szNomeDaTrilha);
			
			if(p->psMusicas == NULL){
				p->psMusicas = musicaNova;
			} else {

				for( pMusicaAuxiliar = p->psMusicas; pMusicaAuxiliar->proximo; pMusicaAuxiliar=pMusicaAuxiliar->proximo);
				pMusicaAuxiliar->proximo = musicaNova;
			}

		}		
	}
	
}

int adicionarCD( cd **primeiroAlbum, int nCodigoCd, char szNomeDoConjunto[TAM_NOME], char szNomedoCd[TAM_NOME], int nAno ){
	
	cd *pstNovo, *p;
	
	pstNovo = (cd*)calloc(1, sizeof(cd));
	pstNovo->nAno = nAno;
	pstNovo->nCodigoCd = nCodigoCd;
	strcpy(pstNovo->szNomeDoConjunto,szNomeDoConjunto );
	strcpy(pstNovo->szNomedoCd,szNomedoCd );

	if(*primeiroAlbum == NULL){
		*primeiroAlbum = pstNovo;
	} else {
		for(p=*primeiroAlbum;p->proximo;p=p->proximo);
		p->proximo = pstNovo;
	}
	return nCodigoCd;	
}

void listarMusicasCD(cd **albumInicial, int codigo){
	cd *p;
	p = *albumInicial;
	
	musica *pm;
	
	for(;p;p=p->proximo){
	
		if(p->nCodigoCd == codigo ) {
			printf("\n--------------------------------------\n");
			printf("Listagem de Musicas do album %s\n\n", p->szNomedoCd );
			pm = p->psMusicas;
			for(;pm;pm=pm->proximo){
				printf("%d - %s - %d\n", pm->nPosicaTrilha, pm->szNomeDaTrilha, pm->nTempo);					
			}
			printf("\n--------------------------------------");
			break;
		}		
	}
	
}

void gravarTxt( unsigned char *psEstrutura, int tamanho, FILE *arquivo ){
	
	if( arquivo == NULL ){
		printf( "Arquivo nao existe..\n" );
	} else {		
		fwrite( psEstrutura, tamanho, 1, arquivo );
		fclose( arquivo );
		printf( "Fila salva com sucesso...\n" );
	}
	
}

void carregarTXT( cd **psEstrutura, FILE *arquivo ){
	
	if( arquivo == NULL ){
		printf( "Arquivo nao existe..\n" );		
	} else {
		while(!feof(arquivo))
		{
			cd stLido;
			int BytesLidos;
			memset(&stLido,0,sizeof(cd));
			BytesLidos = fread(&stLido, 1, sizeof(cd), arquivo );
			if(BytesLidos == sizeof(cd))
			insereCD(psEstrutura,stLido.nCodigoCd, stLido.szNomeDoConjunto, stLido.szNomedoCd, stLido.nAno);
		}
		fclose( arquivo );
		printf( "Fila carregada com sucesso...\n\n" );		
	}
	
}

void listar( cd **s ){
		
	cd *p;
	int index = 1;
	p = *s;
	printf("--------Albuns---------------\n");
	for(;p;p=p->proximo){
		printf("Album: %i\nCodigo: %i\nNome do conjunto: %s\nTitulo do album: %s\nAno: %i\nNumero da faixa: %i\nNome da faixa: %s\nDuracao: %i\n\n", 
		index++, p->nCodigoCd, p->szNomeDoConjunto, p->szNomedoCd, p->nAno, p->psMusicas->nPosicaTrilha, p->psMusicas->szNomeDaTrilha, p->psMusicas->nTempo);
	}
	printf("--------------------------------\n");
	
}

int main( int argc, char** argv ) {
	
	cd *ponteiroCD = NULL;
	int opcao = 1, opcadastro;
	int codAlbum, anoAlbum;
	char opc, nomeBanda[30], nomeAlbum[30];
	
	cd *pTEMP = ponteiroCD;
	
	do
    {
        printf("\n\tEscolha a opcao desejada\n\n");
        printf("1. Cadastra CD\n");
        printf("2. Deleta CD\n");
        printf("3. Lista as musicas de um CD\n");
        printf("4. Lista todo o cadastro (CDs e suas respectivas musicas)\n");
        printf("5. Pesquisa cadastro por codigo do CD ou por Nome do Conjunto\n");
        printf("6. Cadastra musicas em um CD\n");
        printf("8. Grava o Cadastro em disco\n");
        printf("9. Le o cadastro do disco\n");        
        printf("0. Sair\n");
        printf("\n\nEscolha uma opcao: ");
        scanf("%d", &opcao);
        system("cls || clear");

        switch(opcao)
        {
            case 1:
            	insereCD( (cd**)&ponteiroCD, 10, "Jota", "Azul", 2010);
		insereCD( (cd**)&ponteiroCD, 20, "Legiao", "Vermelho", 2007);
		insereCD( (cd**)&ponteiroCD, 30, "Paralamas", "Amarelo", 1989);
		insereCD( (cd**)&ponteiroCD, 40, "Titas", "Verde", 1995);
		
                break;

            case 2:
                deletarCD((cd**)&ponteiroCD, 10);
                break;

            case 3:
                listarMusicasCD((cd**)&ponteiroCD, 10);
                break;
                
            case 4:
                listar((cd**)&ponteiroCD);
                break;
                
            case 5:
              
                break; 
			
	    case 6:
              	insereMusica( (cd**)&ponteiroCD, 10, 1, "Intro", 2);
              	insereMusica( (cd**)&ponteiroCD, 20, 1, "Intro", 2);
              	insereMusica( (cd**)&ponteiroCD, 30, 1, "Intro", 2);
              	insereMusica( (cd**)&ponteiroCD, 40, 1, "Intro", 2);
                break;  
                
            
	case 8:
				
                break;    
            
            case 9:
                
                break;

            case 0:
                printf("\n\n O Programa foi fechado!"); 				
                break;

            default:
                printf("Digite uma opcao valida\n");
        }
    } while(opcao);
    fflush(stdin);
    getchar();	
}

Infelizmente não consegui implementar as opções 8 e 9, pois ele não inseria no arquivo.
Só me falta esse conhecimento para poder ir adiante em C.
Peço ajuda gentilmente.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire esse fflush(stdin) daí (leia o tópico fixo).

"Ele não inseria no arquivo" -> qual foi exatamente o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Isis.
Eu não pus mesmo, desculpa.

 

A chamada ficaria case 8 do switch:

case 8:
   while(pTEMP){
	gravarTxt((unsigned char *) pTEMP, sizeof(cd), fopen("bdados.txt","ab"));	
	pTEMP = pTEMP->proximo;  
   }
   break;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.