Loja de CDs
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.
Discussão (4)
Carregando comentários...