Stack Overflow em Português Asked by Luigi Wagner on November 13, 2021
Estou fazendo um programa que consiste no registro de filmes/séries, modificação de informações e exclusão de registros especificados.
Estou tendo grande dificuldade na concepção das funções de excluir e modificar filmes e séries.
Primeiramente, segue a definição das estruturas de filmes e séries:
#include<stdio.h>
#include<stdlib.h>
//Estruturas principais
typedef struct filmes
{
char nome[50];
char diretor[30];
char elenco[80];
int ano;
char genero[20];
}Filmes;
typedef struct series
{
char nome[50];
char criador[30];
char elenco[80];
int ano;
int numeroTemporadas;
char genero[20];
}Series;
//Cabeçalho das funções de funções.h
//FILMES
void adicionarFilme(Filmes *filmes, int *posF, int *nFilmes, FILE *arq);
void modificarFilme();
void removerFilme();
void imprimeFilmes(Filmes *filmes, int *nFilmes);
void managementFilmes(int codigo, Filmes *filmes, int *posF, int *nFilmes, FILE *arq);
int buscaFilme(FILE *arq, Filmes filmes);
//SÉRIES
void adicionarSerie(Series *series, int *posS, int *nSeries, FILE *arq);
void modificarSerie();
void removerSerie();
void imprimeSeries(Series *series, int *nSeries);
void managementSeries(int codigo, Series *series, int *posS, int *nSeries, FILE *arq);
Como o arquivo filmes.c é essencialmente o mesmo que series.c, segue apenas este para efeito de acompanhamento:
#include<stdio.h>
#include<stdlib.h>
#include "estruturas.h"
#include<string.h>
void adicionarFilme(Filmes *filmes, int *posF, int *nFilmes, FILE *arq)
{
*nFilmes = *nFilmes + 1;
filmes = (Filmes *) realloc(filmes, *nFilmes * sizeof(Filmes));
if(!filmes)
{
exit(1);
}
printf("nntNome: ");
scanf(" %[^n]s", filmes[*posF].nome);
printf("nntDiretor: ");
scanf(" %[^n]s", filmes[*posF].diretor);
printf("nntElenco: ");
scanf(" %[^n]s", filmes[*posF].elenco);
printf("nntAno: ");
scanf("%d", &filmes[*posF].ano);
printf("nntGenero: ");
scanf(" %[^n]s", filmes[*posF].genero);
fprintf(arq, "ntFilme: %s", filmes[*posF].nome);
fprintf(arq, "ntDiretor: %s", filmes[*posF].diretor);
fprintf(arq, "ntElenco: %s", filmes[*posF].elenco);
fprintf(arq, "ntAno: %d", filmes[*posF].ano);
fprintf(arq, "ntGenero: %snn", filmes[*posF].genero);
*posF = *posF + 1; //incrementa posição do vetor
}
void modificarFilme()
{
//como faço essa função?
}
void removerFilme()
{
//como faço essa função?
}
void imprimeFilmes(Filmes *filmes, int *nFilmes)
{
int i;
int x = 1;
printf("ntFILMESn");
for(i = 0; i < *nFilmes ; i++)
{
printf("ntNOME:t%s", filmes[i].nome);
printf("ntDIRETOR:t%s", filmes[i].diretor);
printf("ntELENCO:t%s", filmes[i].elenco);
printf("ntANO:t%d", filmes[i].ano);
printf("ntGENERO:t%s", filmes[i].genero);
printf("nn");
x++;
}
}
void managementFilmes(int codigo, Filmes *filmes, int *posF, int *nFilmes, FILE *arq)
{
if(codigo == 1)
{
adicionarFilme(filmes, posF, nFilmes, arq);
}
if(codigo == 2)
{
//função de remover/excluir
}
if(codigo == 3)
{
//função de modificar
}
if(codigo == 4)
{
imprimeFilmes(filmes, nFilmes);
}
if(codigo == 0)
{
return;
}
}
Os registros são feitos em um arquivo txt !
Por fim, segue o programa principal para efeito de referência:
#include<stdio.h>
#include<stdlib.h>
#include "estruturas.h"
void criar(FILE *arq);
int main()
{
Filmes *filmes;
Series *series;
int posF = 0;
int posS = 0;
int numeroFilmes = 0;
int numeroSeries = 0;
char codA;
int codB;
FILE *arq;
do{
/**********************************
Código A:
F - Filmes
S - Series
X - Encerra
***********************************/
printf("ntCOMANDOS: ");
printf("nntF - FilmesnntS - SeriesnntX - Encerrannt");
scanf("%c", &codA);
fflush(stdin);
if(codA == 'F' || codA == 'f')
{
/**********************************
Código B:
1 - Adicionar filme
2 - Remover filme
3 - Modificar informações de um filme
4 - Imprime registro de filmes
0 - Sair
***********************************/
printf("ntCOMANDOS: ");
printf("nnt1 - Adicionar filmennt2 - Remover filmennt3 - Modificar informacoes de um filmennt4 - Imprime registro de filmesnnt0 - Sairnnt");
scanf("%d", &codB);
arq = fopen("filmes.txt", "a++");
if(!arq)
{
printf("nntArquivo nao pode ser aberto corretamente!");
exit(1);
}
managementFilmes(codB, filmes, &posF, &numeroFilmes, arq);
fflush(stdin);
fclose(arq);
}
else if(codA == 'S' || codA == 's')
{
/**********************************
Código B:
1 - Adicionar série
2 - Remover série
3 - Modificar informações de uma série
4 - Imprime registro de séries
0 - Sair
***********************************/
printf("ntCOMANDOS: ");
printf("nnt1 - Adicionar seriennt2 - Remover seriennt3 - Modificar informacoes de uma seriennt4 - Imprime registro de seriesnnt0 - Sairnnt");
scanf("%d", &codB);
arq = fopen("series.txt", "a++");
if(!arq)
{
printf("nntArquivo nao pode ser aberto corretamente!");
exit(1);
}
if(codB == 1 && isFirstTimeS == 0)
{
series = (Series *) malloc(sizeof(Series));
isFirstTimeS = 1;
}
managementSeries(codB, series, &posS, &numeroSeries, arq);
fflush(stdin);
fclose(arq);
}
else if(codA == 'x' || codA == 'X')
{
break;
}
else
printf("nntCodigo invalido!");
fflush(stdin);
}while(codA != 'X' || codA != 'x');
if(numeroFilmes > 0)
free(filmes);
if(numeroSeries > 0)
free(series);
return 0;
}
Se vocês pudessem me ajudar com pelo menos parte do código de fato dessas duas funções em questão, seria de imensa ajuda!
Cara, por você estar trabalhando com Vetor a lógica tem que ser algo assim:
Modificar: 1- Pergunta qual o nome do filme. 2- Varre o vetor comparando. 3- Com o vetor em mãos, passa a função de inserção porém com o conteúdo do encontrado.
Excluir: Mesma lógica de varredura pra encontrar, mas quando encontrar vc pode colocar o ultimo filme nessa posição, caso a ordem dos filmes não importe.
RECOMENDO FORTEMENTE UTILIZAR LINKED LIST EM VEZ DE VETOR!
Answered by M. Bertolazo on November 13, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP