Software para locadora

No tutorial de hoje trago para vocês um código que escrevi a algum tempo atrás quando ainda fazia a cadeira de Linguagem de programação II onde aprendiamos orientação a objetos utilizando a linguagem C++.

Um dos exercícios propostos pelo professor foi escrever um código para gerenciar uma locadora. Esse software possuía alguns requisitos básicos que deveriam ser atendidos, entre eles estavam:

Crie uma classe Filme, com campos para:

– Código do Filme (caracteres alfanuméricos)
– Título do Filme
– Categoria (que pode ser Aventura, Ficção, etc.)
– Quantidade (inteiro)
– Alugados (inteiro)
– Disponível (Sim/Não)

Além do método construtor, crie os seguintes métodos:

– locar(), que não recebe parâmetros e seta o campo Disponivel para Não;
– devolver(), que não recebe parâmetros e seta o campo Disponível para Sim.

Crie a classe Pessoa com os atributos:

 – codigo
– nome
– endereco
Criar os métodos set e gets correspondentes.  Também implemente o construtor.

Crie a classe Locadora

Onde esta simula um acervo de 20 filmes ( Filme filmes[20]) e então faça uma pessoa ser capaz de locar alguns filmes e em seguida devolve-los.

Bem seguindo esses requisitos e depois de algum tempo, aí esta o código…

/*********************************
Autor: Fernando Krein Pinheiro
Data: 19/01/2012
Linguagem: C++
========= IMPORTANTE ===========
O código esta livre para usar,
citar e compartilhar desde que
mantida sua fonte e seu autor.
Obrigado.
*********************************
*/

#include <iostream>
#include <cstdlib>

using namespace std;

class filme
{
   private:
     string codigo;
     string titulo;
     string categoria;
     int quantidade;
     int alugado;
     int disponivel;

public:
    filme()
    {
        codigo = "NULL";
        titulo = "NULL";
        categoria = "NULL";
        quantidade = 0;
        alugado = 0;
        disponivel = 0;
    }

    void set_codigo(string);
    void set_titulo(string);
    void set_categoria(string);
    void set_quantidade(int);
    void set_alugado(int);
    void set_disponivel(int);
    string get_codigo();
    string get_titulo();
    string get_categoria();
    int get_quantidade();
    int get_alugado();
    int get_disponivel();
    void set_filme(string, string, string, int, int, int);
    void get_filme(string *, string *, string *, int *, int *, int *);
    void loca();
    void devolve();
};

void filme::set_codigo(string cod)
{
    codigo = cod;
}
void filme::set_titulo(string tit)
{
    titulo = tit;
}
void filme::set_categoria(string cat)
{
    categoria = cat;
}
void filme::set_quantidade(int n)
{
    quantidade = n;
}
void filme::set_alugado(int n)
{
    alugado = n;
}
void filme::set_disponivel(int n)
{
    disponivel = n;
}
string filme::get_codigo()
{
    return codigo;
}
string filme::get_titulo()
{
    return titulo;
}
string filme::get_categoria()
{
    return categoria;
}
int filme::get_quantidade()
{
    return quantidade;
}
int filme::get_alugado()
{
    return alugado;
}
int filme::get_disponivel()
{
    return disponivel;
}

void filme::set_filme(string codigo, string titulo, string categoria, int quantidade, int alugado, int disponivel)
{
    set_codigo(codigo);
    set_titulo(titulo);
    set_categoria(categoria);
    set_quantidade(quantidade);
    set_alugado(alugado);
    set_disponivel(disponivel);
}

void filme::get_filme(string *codigo, string *titulo, string *categoria, int *quantidade, int *alugado, int *disponivel)
{
    *codigo = get_codigo();
    *titulo = get_titulo();
    *categoria = get_categoria();
    *quantidade = get_quantidade();
    *alugado = get_alugado();
    *disponivel = get_disponivel();
}

void filme::loca()
{
    set_disponivel(0);
}
void filme::devolve()
{
    set_disponivel(1);
}

class pessoa
{

    filme film;

    private:
      string codigo;
      string nome;
      string rua;

    public:
      pessoa()
      {
        codigo = "NULL";
        nome = "NULL";
        rua = "NULL";
      }

    void set_codigo(string);
    void set_nome(string);
    void set_rua(string);
    void set_dados(string, string, string);
    string get_codigo();
    string get_nome();
    string get_rua();
    void get_dados(string *, string *, string *);
};

void pessoa::set_codigo(string cod)
{
    codigo = cod;
}
void pessoa::set_nome(string nom)
{
    nome = nom;
}
void pessoa::set_rua(string ru)
{
    rua = ru;
}
void pessoa::set_dados(string codigo, string nome, string rua)
{
    set_codigo(codigo);
    set_nome(nome);
    set_rua(rua);
}
string pessoa::get_codigo()
{
    return codigo;
}
string pessoa::get_nome()
{
    return nome;
}

string pessoa::get_rua()
{
    return rua;
}
void pessoa::get_dados(string *codigo, string *nome, string *rua)
{
    *codigo = get_codigo();
    *nome = get_nome();
    *rua = get_rua();
}

class locadora
{
    filme film[20];
    pessoa pess[10];

    private:
    public:
       locadora()
       {
       }
    void set_filme(string, string, string, int, int, int);
    void set_pessoa(string, string, string);
    void get_filme(string *, string *, string *, int *, int *, int *, int x);
    void get_pessoa(string *, string *, string *, int);
    void aluga_filme(int);
    void devolve_filme(int);
    int localiza_filme(string);
    int localiza_pessoa(string);
};

void locadora::set_filme(string codigo, string titulo, string categoria, int
                         quantidade, int aluga, int disponivel)
{
  for (int x = 0; x < 20; x++)
  {
    if (film[x].get_codigo() == "NULL")
    {
      film[x].set_filme(codigo, titulo, categoria, quantidade, aluga, disponivel);
      x = 30;
    }
  }
}

void locadora::set_pessoa(string codigo, string nome, string rua)
{
  for (int x = 0; x < 10; x++)
  {
     if (pess[x].get_codigo() == "NULL")
     {
        pess[x].set_dados(codigo, nome, rua);
        x = 20;
     }
  }
}

void locadora::get_filme(string *codigo, string *titulo, string *categoria,
                         int *quantidade, int *aluga, int *disponivel, int x)
{
   film[x].get_filme(codigo, titulo, categoria, quantidade, aluga, disponivel);
}

void locadora::get_pessoa(string *codigo, string *nome, string *rua, int x)
{
    pess[x].get_dados(codigo, nome, rua);
}

int locadora::localiza_filme(string titulo)
{
  for (int x = 0; x < 20; x++)
  {
     if (film[x].get_titulo() == titulo)
     {
       return x;
     }
  }
    return 30;
}

int locadora::localiza_pessoa(string nome)
{
   for (int x = 0; x < 10; x++)
   {
     if (pess[x].get_nome() == nome)
     {
       return x;
     }
   }
    return 30;
}

void locadora::aluga_filme(int a)
{
    film[a].loca();
}
void locadora::devolve_filme(int a)
{
    film[a].devolve();
}

int main()
{
  locadora loca;
  char op;
  string codigo, nome, rua, titulo, categoria;
  int a, b, c, aux;
  do
  {
     system("clear");
     cout << "[1] Cadastrar\n[2] Buscar\n[3] Locacao\n
              [4] Devolucao\n[0] Sair\n\nOpcao [ ]\b\b";
     cin >> op;
     switch (op)
     {
        case'1':
        do
         {
             system("clear");
             cout << "Cadastrar\n[1] Cliente\n[2] Filme\n
                      [0] Voltar\n\nOpcao [ ]\b\b";
             cin >> op;
             switch (op)
             {
                case'1':
                system("clear");
                cout << "Cliente\nCodigo: ";
                cin >> codigo;
                cout << "Nome: ";
                cin >> nome;
                cout << "Rua: ";
                cin >> rua;
                loca.set_pessoa(codigo, nome, rua);
                break;

                case'2':
                system("clear");
                cout << "Filme\nCodigo: ";
                cin >> codigo;
                cout << "Titulo: ";
                cin >> titulo;
                cout << "Categoria\n[1] Acao [2] Aventura [3] Romance
                         [4] Pudor [5] Lagrimas\nOpcao [ ]\b\b";
                cin >> op;
                cout << "Quantidade: ";
                cin >> a;
                do
                {
                   cout << "Alugados: ";
                   cin >> b;
                   if (b > a)
                   {
                      cout << "NULL." << endl;
                      aux = 0;
                   }else
                      aux = 1;
                 }while (aux != 1);

                if (a != b)
                {
                   cout << "Disponivel \n[1] Sim [2] Nao\nOpcao [ ]\b\b";
                   cin >> c;
                   if (c == 1)
                       c = 1;
                   else
                      c = 0;
                } else
                c = 0;
                switch (op)
                {
                    case'1':
                    loca.set_filme(codigo, titulo, "Acao", a, b, c);
                    break;

                    case'2':
                    loca.set_filme(codigo, titulo, "Aventura", a, b, c);
                    break;

                    case'3':
                    loca.set_filme(codigo, titulo, "Romance", a, b, c);
                    break;

                    case'4':
                    loca.set_filme(codigo, titulo, "Pudor", a, b, c);
                    break;

                    case'5':
                    loca.set_filme(codigo, titulo, "Lagrimas", a, b, c);
                    break;
                 }
                 break;
              }
           } while (op != '0');
             break;

         case'2':
         do {
              system("clear");
              cout << "[1] Cliente\n[2] Filme\n[0] Voltar\nOpcao [ ]\b\b";
              cin >> op;
              switch (op)
              {
                 case'1':
                 system("clear");
                 cout << "[1] Nome\n[2] Todos\nOpcao [ ]\b\b";
                 cin >> op;
                 switch (op)
                 {
                    case'1':
                    system("clear");
                    cout << "Nome: ";
                    cin >> nome;
                    a = loca.localiza_pessoa(nome);
                    if (a < 30)
                    {
                        loca.get_pessoa(&codigo, &nome, &rua, a);
                        cout << "Cliente\nCodigo: " << codigo << "\nNome: "
                             << nome << "\nRua: " << rua << endl;
                    } else
                        cout << "Nao Localizado." << endl;
                        sleep(3);
                        break;

                        case'2':
                        system("clear");
                        for (aux = 0; aux < 10; aux++)
                        {
                             loca.get_pessoa(&codigo, &nome, &rua, aux);
                             if (codigo != "NULL")
                             {
                                  cout << "\nCodigo: " << codigo << "\nNome: "
                                       << nome << "\nRua: " << rua << endl;
                                  sleep(3);
                             }
                        }
                        break;
                 }

                 break;
                 case'2':
                 system("clear");
                 cout << "Filme\n[1] Titulo\n[2] Todos\nOpcao [ ]\b\b";
                 cin >> op;
                 switch (op)
                 {
                   case'1':
                   system("clear");
                   cout << "Titulo: ";
                   cin >> titulo;
                   a = loca.localiza_filme(titulo);
                  if (a < 30)
                  {
                   loca.get_filme(&codigo, &titulo, &categoria, &aux, &b, &c, a);
                   cout << "Cliente\nCodigo: " << codigo << "\nTitulo: " << titulo
                   << "\nCategoria: " << categoria << "\nQuantidade: " << aux << "\n
                   Alugados: " << b;
                   if (c == 1)
                         cout << "\nDisponivel: SIM" << endl;
                     else
                         cout << "\nDisponivel: NAO" << endl;
                     } else
                         cout << "Nao Localizado." << endl;
                         sleep(3);
                         break;

                     case'2':
                     system("clear");
                     for (aux = 0; aux < 20; aux++)
                     {
                    loca.get_filme(&codigo, &titulo, &categoria, &a, &b, &c, aux);
                    if (codigo != "NULL")
                    {
                      cout << "Cliente\nCodigo: " << codigo << "\nTitulo: "
                      << titulo << "\nCategoria: " << categoria << "\nQuantidade: "
                      << a << "\nAlugados: " << b;
                      if (c == 1)
                        cout << "\nDisponivel: SIM" << endl;
                      else
                           cout << "\nDisponivel: NAO" << endl;
                           sleep(3);

                      }
                    }
                        break;
                     }
                    }
                } while (op != '0');
                break;
            case'3':
                system("clear");
                cout << "Titulo do filme: ";
                cin >> titulo;
                a = loca.localiza_filme(titulo);
                if (a < 30) {
                    loca.aluga_filme(a);
                    cout << "Locado." << endl;
                } else
                    cout << "Nao encontrado." << endl;
                sleep(3);
                break;
            case'4':
                system("clear");
                cout << "Titulo do filme: ";
                cin >> titulo;
                a = loca.localiza_filme(titulo);
                if (a < 30) {
                    loca.devolve_filme(a);
                    cout << "Devolvido." << endl;
                } else
                    cout << "Nao encontrado." << endl;
                sleep(3);
                break;
            case'0':
                return 0;
                break;
        }
    } while (1 != 0);
}

Para compilar digite: g++ -o Locadora arquivo_fonte.cpp
Para executar digite ./Locadora

Esse código é valido para Windows tambem, apenas basta modificar a chamada de sistema system(“clear”) para system(“cls”)

Faça o Download do Código

Algumas telas do software:

Tela Inicial

Tela de Cadastro de Filmes

Espero que seja útil….até mais

Anúncios
por ferpinheiro Postado em C/C++

3 comentários em “Software para locadora

  1. eu to precisando desse codigo em Linguagem C, para um projeto da faculdade, tenho muitas dificuldades com Programação, e gostaria de saber se vc, para estudar e desenvolver a parte que foi destinada para mim.
    abraço, desde ja obrigado…

    • Olá Yugo!

      Em primeiro lugar: não posso fazer isso pra voce porque nao tenho tempo disponivel para isso.

      Em segundo lugar: se eu fizer seu trabalho, voce não vai aprender a programar…. porque programação só aprende quem programa!

      Não existe formula mágica e muito menos decoreba… Voce precisa fazer para entender e aprender!

      Desculpe por nao poder lhe ajudar.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s