Ir para conteúdo

POWERED BY:

Arquivado

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

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.

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");    
}

 

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.