#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
enum console {nswitch=1,ps4,xbox,pc};
class Produto{
protected:
int codigoproduto;
public:
virtual void ler();
virtual float getPreco()=0;
virtual int getTipo()=0;
int getCodigo(){return codigoproduto;}
};
void Produto::ler(){
printf("DIGITE O CODIGO DO PRODUTO:\n");
scanf("%d",&codigoproduto);
}
//////////////////////////// CARRO ///////////////////////
class Carro: public Produto {
private:
float precocarro;
char placa[50];
int ano;
char fabricante[50];
char modelo[50];
public:
virtual void listar(int quant);
virtual int getTipo();
virtual void ler();
int getAno(){return ano;}
char* getplaca(){return placa;}
char* getfabricante(){return fabricante;}
char* getmodelo(){return modelo;}
};
int Carro::getTipo(){
return 1;
}
void Carro::listar(int quant){
for(int i=0;i<quant;i++){
printf("PLACA%c\n",getplaca());
printf("ANO:%c\n",getAno());
printf("FABRICANTE:%c\n",getfabricante());
printf("MODELO%d:\n",getmodelo());
}
}
void Carro::ler(){
printf("ANO:\n");scanf("%d",&ano);fflush(stdin);
printf("PLACA:\n");scanf("%[^\n]",placa);fflush(stdin);
printf("MODELO:\n");scanf("%[^\n]",modelo);fflush(stdin);
printf("FABRICANTE:\n");scanf("%[^\n]",fabricante);fflush(stdin);
}
////////////// DVD ////////////////////////////
class Dvd: public Produto{
private:
char titulo[50];
char nomeatorprincipal[50];
char nomediretor[50];
char categoria[50];
int anolancamento;
float precodvd;
public:
void listar(int quant);
virtual int getTipo();
virtual void ler();
char* getTitulo(){return titulo;}
char* getDiretor(){return nomediretor;}
int getAnolancamento(){return anolancamento;}
char* getNomeato(){return nomeatorprincipal;}
};
int Dvd::getTipo(){return 2;}
void Dvd::listar(int quant){
for(int i=0;i<quant;i++){
printf("TITULO:%c\n",getTitulo());
printf("%ATOR:%c\n",getNomeato());
printf("DIRETOR:%c\n",getDiretor());
printf("ANO%d:\n",getAnolancamento());
}
}
void Dvd::ler(){
printf("ANO:\n");scanf("%d",&anolancamento);fflush(stdin);
printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
printf("ATOR:\n");scanf("%[^\n]",&nomeatorprincipal);fflush(stdin);
printf("DIRETOR:\n");scanf("%[^\n]",&nomediretor);fflush(stdin);
}
class Jogo: public Produto {
private:
char console[30];
float precojogo;
char titulo[50];
char categoria[50];
int qtdplayers;
public:
void listar(int quant);
virtual int getTipo();
virtual void ler();
char* getConsole(){return console;}
void* getTitulo(){return titulo;}
char* getCategoria(){return categoria;}
int getQtdplayers(){return qtdplayers;}
};
int Jogo::getTipo(){return 3;}
void Jogo::listar(int quant){
for(int i=0;i<quant;i++){
printf("\nTITULO:%c\n",getTitulo());
printf("%CONSOLE:%c\n",getConsole());
printf("CATEGORIA:%c\n",getCategoria());
printf("NUMERO DE JOGADOREs%d:\n",getQtdplayers());
}
}
void Jogo::ler(){
printf("NUMERO DE JOGADORS:\n");scanf("%d",&qtdplayers);fflush(stdin);
printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
printf("CONSOLE:\n");scanf("%[^\n]",&console);fflush(stdin);
}
class VideoLocadora{
private:
Produto *v[100];
int qtd;
public:
VideoLocadora();
void ler();
int existe(int cdg);
void Inserir(Produto *d);
void remover(int cdg);
void listar(Produto *d);
void desfazer(Produto *d);
float getvalor(Produto *d);
};
//FACTORY method
Produto* CriarNovoProduto(){
char letra;
do{
printf("QUAL PRODUTO?:\n");
printf("(J)OGO (C)ARRO (D)VD\n");
letra=getchar();
letra=tolower(letra);
}while(letra!='j' && letra!='c' && letra!= 'd');
switch(letra){
case 'j':
return new Jogo();
case 'c':
return new Carro();
case 'd':
return new Dvd();
default:
return NULL;
}
}
VideoLocadora::VideoLocadora(){
qtd=0;
}
void VideoLocadora::ler(){
v[qtd]=CriarNovoProduto();
v[qtd]->ler();
}
int VideoLocadora::existe(int cdg){
for(int i=0;i<qtd;i++){
if(v[i]->getCodigo()==cdg)
return i;
}
return -1;
}
void VideoLocadora::Inserir(Produto *d){
v[qtd]=d;
qtd++;
}
void VideoLocadora::remover(int cdg){
int pos=existe(cdg);
if (pos>-1)
{
delete v[pos];
v[pos] = v[qtd-1];
qtd--;
}
}
int main(){
VideoLocadora x;
x.ler();
return 0;
}