Ir para conteúdo
S1ll3NT

Exercício com STRUCT

Recommended Posts

Olá
Sou novo aqui no fórum e iniciante em programação.

Alguém pode me ajudar com esse exercício ?

Espero que alguém possa me ajudar.Agradeço desde já

Construa um algoritmo que armazene para 10 filmes, o código, o nome,o gênero (ação, aventura...), censura (em idade), tamanho do filme (em minutos), valor da locação, quantidade de mídias existentes e quantidade que já estão locadas.
A cada final de cadastro, pergunte ao usuário se ele deseja cadastrar novo filme se a resposta for afirmativa e o numero máximo de filmes (no caso 10) não foi ultrapassado volte a cadastrar novo filme.
Faça a locação dos filmes, no final do cadastro de cada locação, pergunte ao usuário se ele deseja cadastrar nova locação, se a resposta for afirmativa volte a cadastrar nova locação.
Verifique antes de finalizar cada locação se quem está locando pode locar o filme desejado perguntando a idade do cliente, e verifique também se ainda tem mídia do filme disponível para locação, se nenhuma dessas restrições for constatada, faça a locação para o cliente acrescente o número de filmes locados na coluna quantidade de locações.
Faça um relatório no qual constarão todos os filmes cadastrados contendo: o código do filme, o nome, o gênero, o valor de locação e quantos filmes estão disponíveis para locação. Faça também uma rotina para devolução dos filmes locados.

Utilize Case para a construção do menu com as opções:
1 - Cadastro
2 - Locação
3 - Devolução
4 - Relatório de Filmes
5 - Sobre
6 - Sair

Bom, até agora o que eu consegui fazer é isso


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>

int main(){
setlocale(LC_ALL,"");

int menu;

struct filmes{
int cod, idade, qtd_midias=0, qtd_loc, cadastro;
char nome[50], genre[50];
float duracao, val_loc;

};

filmes loc[10];

printf("\n Menu \n");
printf("\n 1 - Cadastrar Filmes ");
printf("\n 2 - Locar Filmes ");
printf("\n 3 - Devolver Filmes ");
printf("\n 4 - Relatório ");
printf("\n 5 - Sobre ");
printf("\n 6 - Sair ");
scanf("%d",&menu);

int qtd_cad=0;

switch(menu){
case 1:

if(qtd_cad==10){
printf("\n Atingiu o limite máximo de filmes cadastrado ");
break;
}

do{

printf("\n Digite o código do filme ");
scanf("%i",&loc[qtd_cad].cod);
fflush(stdin);
printf("\n Digite o nome do filme ");
scanf("%s",&loc[qtd_cad].nome);
fflush(stdin);
printf("\n Digite o gênero do filme ");
scanf("%s",&loc[qtd_cad].genre);
fflush(stdin);
printf("\n Digite a idade permitida para acessar o filme ");
scanf("%d",&loc[qtd_cad].idade);
fflush(stdin);
printf("\n Digite a duração do filme em minutos ");
scanf("%s",&loc[qtd_cad].duracao);
fflush(stdin);
printf("\n Digite o valor da locação ");
scanf("%f",&loc[qtd_cad].val_loc);
fflush(stdin);
printf("\n Digite a quantidade de midias existentes ");
scanf("%d",&loc[qtd_cad].qtd_midias);
fflush(stdin);
printf("\n Deseja cadastrar outro filme ? Pressione s ( para sim ) ou n (para não) ");
scanf("%c",&loc[qtd_cad].cadastro);
fflush(stdin);

if((loc[qtd_cad].cadastro!='s') && (loc[qtd_cad].cadastro!='n')){
printf("\nTecla errada !! Por favor pressione a tecla novamente ");
scanf("%c",&loc[qtd_cad].cadastro);
fflush(stdin);

qtd_cad ++;
}


}
while(qtd_cad<10);


case 2:

int codigo, idad;
char locar;

do{

printf("\n Digite o código do filme ");
scanf("%d",&codigo);

printf("\n Digite sua idade ");
scanf("%d",&idad);

if (codigo==loc[qtd_cad].cod){
if(idad==loc[qtd_cad].idade){
}else{
printf("\n Idade não permitida !! ");
}
printf("\n O nome do filme é : %d",loc[0].cod);
printf("\n O gênero é : %s",loc[0].genre);
printf("\n O valor do filme é : %0.2f",loc[0].val_loc);
printf("\n Deseja locar outro filme ? Pressione S (para sim) ou N(para não)");
scanf("%c",&locar);
}
locar++;
}
while('S'==locar);

}
}

No case 2 :

Vou precisar fazer 10 vezes ? fazendo um por um

printf("\n O nome do filme é : %d",loc[0].cod);
printf("\n O gênero é : %s",loc[0].genre);
printf("\n O valor do filme é : %0.2f",loc[0].val_loc);
printf("\n Deseja locar outro filme ? Pressione S (para sim) ou N(para não)");
scanf("%c",&locar);

Ex : loc[1].cod , loc[2].cod .....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use fflush na entrada padrão. Coloque um %*c nos scanf como segundo formatador.

  • +1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 05/08/2016 at 12:09, _Isis_ disse:

Não use fflush na entrada padrão. Coloque um %*c nos scanf como segundo formatador.

É verdade. Ele fazendo o que você diz não precisará colocar fflush(stdin) após ler dados de entrada. Abaixo está esse programa de locadora completo e sem o uso de fflush(stdin): 

#include<stdio.h>
struct filme{
  int codigo;
  char nome[30];
  char genero[30];
  int censura;
  int tamanho_min;
  float valor_loc;
  int quant;
  int quant_locada;
};

int main(){
  struct filme filmes[10];
  int i,quant_filmes_cad=0,op,cod_loc,cod_dev,idade;
  char resp;
  while(1){
    printf("1.Cadastro");
    printf("\n2.Locacao");
    printf("\n3.Devolucao");
    printf("\n4.Relatorio");
    printf("\n5.Sobre");
    printf("\n6.Sair");
    scanf("%d", &op);
    switch(op){
      case 1:
        do{
          if(quant_filmes_cad==10){
            printf("Numero maximo de filmes cadastrados atingido.");
            resp='n';
          }
          else{
            printf("Digite o codigo do filme:");
            scanf("%d%*c",&filmes[quant_filmes_cad].codigo); //Limpando o buffer de entrada com %*c como segundo formatador
            printf("Digite o nome do filme:");
            gets(filmes[quant_filmes_cad].nome);            
            printf("Digite o genero do filme:");
            gets(filmes[quant_filmes_cad].genero);
            printf("Digite a idade da censura do filme:");
            scanf("%d",&filmes[quant_filmes_cad].censura);
            printf("Digite o tamanho em minutos do filme:");
            scanf("%d",&filmes[quant_filmes_cad].tamanho_min);
            printf("Digite o valor de locacao:");
            scanf("%f",&filmes[quant_filmes_cad].valor_loc); 
            printf("Digite a quantidade de copias total desse filme:");
            scanf("%d",&filmes[quant_filmes_cad].quant);
            printf("Digite a quantidade de copias locadas desse filme:");
            scanf("%d",&filmes[quant_filmes_cad].quant_locada);
            quant_filmes_cad++;
            printf("Deseja cadastrar mais algum ?(s/n)"); 
            scanf("%*c%c",&resp);//Limpando o buffer novamente usando %*c
          }  
        }while((resp=='s')||(resp=='S'));   
        break;
      case 2:
        printf("Qual o codigo do filme que deseja locar?");
        scanf("%d",&cod_loc);
        printf("Digite a sua idade:");
        scanf("%d",&idade);
        for(i=0;i<quant_filmes_cad;i++)
          if(filmes[i].codigo==cod_loc){
            printf("Nome do filme: %s",filmes[i].nome);
            printf("Genero: %s",filmes[i].genero);            
            printf("Idade recomendada: %d",filmes[i].censura);
            printf("Tamanho em minutos: %d",filmes[i].tamanho_min);
            printf("Valor da locacao: %f",filmes[i].valor_loc);
            printf("Quantidade total de copias: %d",filmes[i].quant);          
            printf("Quantidade de copias disponiveis: %d",filmes[i].quant-filmes[i].quant_locada);
            printf("Deseja locar este?S/N");
            scanf("%*c%c",&resp);//limpeza de buffer com %*c            
            if((resp=='s')||(resp=='S')){
              if(idade>=filmes[i].censura)
                if(filmes[i].quant_locada!=filmes[i].quant){
                  filmes[i].quant_locada++;
                  printf("Filme locado.");
                }  
                else
                  printf("Nao ha mais copias desse filme disponiveis.");
              else
                printf("A idade para locacao nao e permitida.");
            }           
          }
        if(i==quant_filmes_cad){
          printf("Filme nao encontrado.");
          break;
        }
        break;
      case 3:
        printf("Qual o codigo do filme que deseja devolver?");
        scanf("%d%*c",&cod_dev);//%*c pra limpar o buffer
        for(i=0;i<quant_filmes_cad;i++){
          if(cod_dev==filmes[i].codigo){
            if(filmes[i].quant_locada==0){
              printf("Todas as copias desse filme ja estao devolvidas.");
              break;
            }             
            printf("Filme devolvido.");
            filmes[i].quant_locada--;
            break;
          }
                    
        }
        if(i==quant_filmes_cad){
          printf("Filme nao encontrado.");
          break;
        }
       break;    
      case 4:
        if(quant_filmes_cad==0){
          printf("Nao ha filmes cadastrados.");
          break;  
        }        
        for(i=0;i<quant_filmes_cad;i++){
          printf("Codigo: %d",filmes[i].codigo);
          printf("Nome do filme: %s",filmes[i].nome);
          printf("Genero: %s",filmes[i].genero);
          printf("Valor de locacao: %f",filmes[i].valor_loc);
          printf("Quantidade disponivel para locacao: %d",filmes[i].quant-filmes[i].quant_locada);
        }        
        break;
      case 5:
        printf("Software de locadora - Forum iMasters."); 
        break;
      case 6:
        exit(0);
    }
  }  
  system("pause");    
}

 

Editado por Wilkyn Fernandes Taborda
Falta de inserção de um pequeno bloco de código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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