[Resolvido]Incrementar construção de Objetos

8 respostas
Bruno_Ferreira1

Bom dia
Estou fazendo um programinha, como se fosse para restaurante, onde tenho que guardar os produtos e preços gastos em cada mesa.
fiz uma classe produtos:

public class Produtos {

    private int id;
    private String nome;
    private float preco;
    
    public Produtos(int i, String n, float p){
        id=i;
        nome=n;
        preco=p;
    }

    
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

   
    public String getNome() {
        return nome;
    }

   public void setNome(String nome) {
        this.nome = nome;
    }
   
    public float getPreco() {
        return preco;
    }
  
    public void setPreco(float preco) {
        this.preco = preco;
    }

e fiz uma classe Mesa que vai guardar os produtos:

public class Mesa {

    private int id;
    private float total;
    String nome;
    boolean situacao;
    private ArrayList<Produtos> produtos;

    public Mesa(){
        nome="Mesa vazia";
    }

    public Mesa(int i, String n, boolean s){
        id=i;
        total=0;
        nome=n;
        situacao=s;
     }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public float getTotal() {
        return total;
    }

    public void setTotal(float total) {
        this.total = total;
    }

    public ArrayList<Produtos> getProdutos() {
        return produtos;
    }

    public void setProdutos(ArrayList<Produtos> produtos) {
        this.produtos = produtos;
    }

coloquei um valor máximo de 50 mesas a serem abertas
Minha dúvida é a seguinte:
Seria um bom negócio construir as 50 mesas no construtor da classe JFrame, onde esta a Interface Gráfica?
ou construo apenas quando a pessoa clicar em um botão que tem la, chamado: Abrir mesa?
estou perguntando isso, pois fiz uma tabela neste JFrame, que desde quando abre o programa, ja mostra a situação das 50 mesas
no caso, quando abrisse o programa, estariam todas "desocupadas", conforme a pessoa ia abrindo as mesas
ia mudando a situação, e o valor de cada mesa

se fosse construir as 50 mesas no construtor, queria que ficassem com os nomes seguidos, tipo mesa01, mesa02, mesa03...
mas não consigo fazer este incremento na construção, ja que o programa não aceita concatenar o contador, junto com o nome da variavel

Alguem tem alguma sugestão?

8 Respostas

d34d_d3v1l

Cara, guardar na mesa a lista de produtos não é uma boa não…

Te falo isso pq ja fiz um programa pra restaurante e cometi os mesmos “erros” que você, por pura falta de planejamento e de desenhar o modelo do banco.
Eu sugiro o seguinte… Pense na situação:

O Cliente chega no restaurante senta em uma mesa. Pede algumas coisas e depois vai para outra?
(IAI?) O seu banco está muito dependente, fazendo com que o seu cliente fique preso a uma mesa.

Mas veja só…
Qual que é a RESPONSABILIDADE de uma mesa?

Praticamente nenhuma né. A mesa serve para uma ou mais pessoas sentarem, almoçarem, comerem jantarem.
Então, como o software que você está construindo é Orientado a Objetos e em OO a gente se espelha no mundo real, veja só,
não seria mais interessante um esquema tipo:

----------| senta |---------| CLIENTE | ----------> | MESA | ----------| |---------| | | | | | |--------------| |---------------------------| |---------------------| OCUPAÇÃO |----------------------->| ProdutosConsumidos | |--------------| |-------------------------- |

Assim, o cliente senta na mesa, isso gera uma OCUPAÇÃO…

Mesa
-ID
-Localização

Ocupação
-ID
-ID_Cliente
-ID_Mesa
-ID_ProdutosConsumidos
-TimestampEntrada
-TimestampSaida

ProdutosConsumidos
-ID
-ID_Ocupação
-ID_Produto
-ID_Quantidade
-ID_Total

O produtos consumidos é só um extra, pensando na normalização do banco… Pesquisa depois: 1, 2 e 3° Formas de Normalização…

Seu software vai ter pesistencia em banco né? kkkkkkk

Bruno_Ferreira1

d34d_d3v1l:
Cara, guardar na mesa a lista de produtos não é uma boa não…

Te falo isso pq ja fiz um programa pra restaurante e cometi os mesmos “erros” que você, por pura falta de planejamento e de desenhar o modelo do banco.
Eu sugiro o seguinte… Pense na situação:

O Cliente chega no restaurante senta em uma mesa. Pede algumas coisas e depois vai para outra?
(IAI?) O seu banco está muito dependente, fazendo com que o seu cliente fique preso a uma mesa.

Mas veja só…
Qual que é a RESPONSABILIDADE de uma mesa?

Praticamente nenhuma né. A mesa serve para uma ou mais pessoas sentarem, almoçarem, comerem jantarem.
Então, como o software que você está construindo é Orientado a Objetos e em OO a gente se espelha no mundo real, veja só,
não seria mais interessante um esquema tipo:

----------| senta |---------| CLIENTE | ----------> | MESA | ----------| |---------| | | | | | |--------------| |---------------------------| |---------------------| OCUPAÇÃO |----------------------->| ProdutosConsumidos | |--------------| |-------------------------- |

Assim, o cliente senta na mesa, isso gera uma OCUPAÇÃO…

Mesa
-ID
-Localização

Ocupação
-ID
-ID_Cliente
-ID_Mesa
-ID_ProdutosConsumidos
-TimestampEntrada
-TimestampSaida

ProdutosConsumidos
-ID
-ID_Ocupação
-ID_Produto
-ID_Quantidade
-ID_Total

O produtos consumidos é só um extra, pensando na normalização do banco… Pesquisa depois: 1, 2 e 3° Formas de Normalização…

Seu software vai ter pesistencia em banco né? kkkkkkk

Entendi + ou -
no caso a localização da mesa seria o que? tipo andar? Mezanino? (Caso o restaurante tenha isso)
No caso da ocupação, não vou ter um cadastro de clientes (pelo menos por enquanto), no caso eu não teria o Id_Cliente
ira ter persistência sim, mas ira gravar apenas os dados das vendas:
Valor, Mesa, Hora_Entrada, Hora_Saida, Forma Pagamento

d34d_d3v1l

Não vai ter controle de estoque?
Quais produtos estão vendendo mais…
Qual mesa possui o maior numero de ocupações…

Informações assim ajudam o dono do restaurante :wink:

Bom… A localização seria o andar mesmo… ou o bloco… Vamos supor que tem mesas assim:
A-1
A-2

B-1
B-2

Onde A e B são os blocos ou seções?

Mas acho que não precisa não…

Tudo bem se não tiver cadastro de clientes…

Outra coisa, vai ter algum controle financeiro? Plano de contas, Fechamento de caixa, essas coisas?

Bruno_Ferreira1

d34d_d3v1l:
Não vai ter controle de estoque?
Quais produtos estão vendendo mais…
Qual mesa possui o maior numero de ocupações…

Informações assim ajudam o dono do restaurante :wink:

Bom… A localização seria o andar mesmo… ou o bloco… Vamos supor que tem mesas assim:
A-1
A-2

B-1
B-2

Onde A e B são os blocos ou seções?

Mas acho que não precisa não…

Tudo bem se não tiver cadastro de clientes…

Outra coisa, vai ter algum controle financeiro? Plano de contas, Fechamento de caixa, essas coisas?

Bom, é que na verdade, o intuito é mais para fazer a soma dos produtos, ficar guardado o que cada mesa/pessoa esta consumindo e gravar as vendas,
para saber quanto vendeu por dia, ou entre datas escolhidas

Por enquanto é isso, mas nada impede de incrementar mais o programa né?!
vou dar uma pesquisada aqui
valeu pelas dicas

d34d_d3v1l

Certo.

Meu amigo, lembre-se, o intuito de toda e qualquer empresa/estabelecimento/qualquercoisa é crescer.
Se você faz um software simples sem pensar no futuro, o software vai satisfazer o seu cliente por um bom periodo de tempo. Mas e quando ele crescer? Quando ele evoluir? Ou ele vai pedir outro software, ou vai correr atrás de você, ou vai falar mal do seu serviço. kkkkkkk

Então, não custa nada pensar um pouco a diante.
Faça com que o seu software fique fléxivel.
Programe de forma que a manutenção seja menos dolorosa.

E sempre pense no futuro :wink:

Detalhe:
esse software vc vai vender compilado, vender a source, ou alugar?

Se você for alugar, pode oferecer o mesmo para outros restaurantes, e se for fazer isso,
quanto mais completo melhor.

Abraços

d34d_d3v1l

Um amigo me ajudou com isso e encontrei uma coisa que pode te ajudar:

//CLASSE PRODUTO
public class Produto {

	private int idProduto;
	private String nome;
	private float preco;
	private int quantidade;

	//criar getters e setters

}

//CLASSE MESA
public class Mesa {

	private int idMesa;

	//cria getter e setter

}

//CLASSE OCUPACAO
public class Ocupacao {

	private int idOcupacao;
	private Mesa mesa;
	private Calendar entrada;
	private Calendar saida;
	private List<ProdutosConsumidos> listaDeProdutosConsumidos;

	//criar getters e setters

}

//CLASSE PRODUTOSCONSUMIDOS
public class ProdutosConsumidos {

	private int idProdutosConsumidos;
	private Ocupacao ocupacao;
	private Produto produto;
	private int quantidade;
	private float total;

	//criar getters e setters

}

Eu também criei o banco e algumas consultas... se quiser ver:

-- OQUE GERAR NOS RELATORIOS?


//relatorio de produtos:
-> quantidade vendida de cada produto no mes
select p.nome, sum(pc.quantidade) from ocupacao o,produto p, produtosconsumidos pc where p.idProduto = pc.idProduto AND EXTRACT(YEAR FROM o.entrada) = 2011 AND EXTRACT(MONTH FROM o.entrada) = 02 group by p.nome

-> relatorio de produtos COM estoque
select * from produto where quantidade != 0

-> relatorio de produtos SEM estoque
select * from produto where quantidade = 0
 
//Relatorio mesa:
-> quantas ocupacoes teve cada mesa no mes (assim sabera qual mesa é mais visitada)
select count(*), idMesa from ocupacao o where EXTRACT(YEAR FROM o.entrada) = 2011 AND EXTRACT(MONTH FROM o.entrada) = 02 group by idMesa

-> quantos rendeu cada mesa (qual mesa os clientes preferem sentar e consumir)
select m.idMesa, sum(pc.total) from mesa m, ocupacao o, produtosconsumidos pc where m.idMesa = o.idMesa and o.idOcupacao = pc.idOcupacao AND EXTRACT(YEAR FROM o.entrada) = 2011 AND EXTRACT(MONTH FROM o.entrada) = 02 group by m.idMesa


//Relatorio Financeiro:
-> total do mes 
select sum(pc.total) from ocupacao o, produtosconsumidos pc where o.idOcupacao = pc.idOcupacao AND EXTRACT(YEAR FROM o.entrada) = 2011 AND EXTRACT(MONTH FROM o.entrada) = 02

-> total do ano 
select sum(pc.total) from ocupacao o, produtosconsumidos pc where o.idOcupacao = pc.idOcupacao AND EXTRACT(YEAR FROM o.entrada) = 2011

-> total "de tudo" (desda abertura, ou utilização do programa)
select sum(pc.total) from ocupacao o, produtosconsumidos pc where o.idOcupacao = pc.idOcupacao


/////////CRIACAO DAS TABELAS

CREATE TABLE PRODUTO(
idProduto serial primary key,
nome varchar,
preco float,
quantidade int
);

create table MESA(
idMesa integer primary key
);

CREATE TABLE OCUPACAO(
idOcupacao Serial primary key,
idMesa integer references mesa(idMesa),
entrada timestamp,
saida timestamp
);

CREATE TABLE PRODUTOSCONSUMIDOS(
idProdutosConsumidos Serial primary key,
idOcupacao integer references ocupacao(idOcupacao),
idProduto integer references produto(idProduto),
quantidade integer,
total float



);

/////////POVOAMENTO
insert into mesa values (1);
insert into mesa values (2);
insert into mesa values (3);
insert into mesa values (4);
insert into mesa values (5);
insert into mesa values (6);
insert into mesa values (7);
insert into mesa values (8);
insert into mesa values (9);
insert into mesa values (10);
insert into mesa values (11);
insert into mesa values (12);
insert into mesa values (13);
insert into mesa values (14);
insert into mesa values (15);
insert into mesa values (16);
insert into mesa values (17);
insert into mesa values (18);
insert into mesa values (19);
insert into mesa values (20);

insert into produto (nome,preco,quantidade) values ('Trident',1.0,100);
insert into produto (nome,preco,quantidade) values ('Pao de queijo',1.0,100);
insert into produto (nome,preco,quantidade) values ('Salgadinho',1.0,100);
insert into produto (nome,preco,quantidade) values ('Mini Pizza',1.5,100);
insert into produto (nome,preco,quantidade) values ('Coxinha',1.25,100);
insert into produto (nome,preco,quantidade) values ('Mini Coca-Cola',1.0,100);
insert into produto (nome,preco,quantidade) values ('Skol Lata',1.5,100);
insert into produto (nome,preco,quantidade) values ('Brahma Lata',1.25,100);
insert into produto (nome,preco,quantidade) values ('Skol Litrao',3.0,100);
insert into produto (nome,preco,quantidade) values ('Ficha Sinuca',0.5,100);
insert into produto (nome,preco,quantidade) values ('Bala',0.10,100);
insert into produto (nome,preco,quantidade) values ('Nova Skin Garrafa',2.0,100);

insert into ocupacao (idMesa,entrada, saida) values (1, '29/05/2010 09:42', '29/05/2011 11:02');
insert into ocupacao (idMesa,entrada, saida) values (2, '11/01/2010 07:42', '11/01/2011 08:20');
insert into ocupacao (idMesa,entrada, saida) values (3, '09/02/2010 20:30', '09/02/2010 21:00');
insert into ocupacao (idMesa,entrada, saida) values (4, '12/05/2010 09:42', '12/05/2011 11:02');
insert into ocupacao (idMesa,entrada, saida) values (5, '15/04/2010 12:04', '15/04/2011 13:02');
insert into ocupacao (idMesa,entrada) values (1, '01/02/2011 22:40');
insert into ocupacao (idMesa,entrada) values (2, '01/02/2011 20:00');
insert into ocupacao (idMesa,entrada) values (3, '01/02/2011 17:30');
insert into ocupacao (idMesa,entrada) values (4, '01/02/2011 18:40');
insert into ocupacao (idMesa,entrada) values (5, '01/02/2011 09:42');

insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (1,1,2,2);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (2,2,2,2);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (3,3,2,2);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (4,4,2,3);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (5,5,2,2.5);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (6,6,4,4);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (7,7,4,6);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (8,8,4,5);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (9,9,4,12);
insert into produtosconsumidos (idOcupacao,idProduto,quantidade,total) values (10,10,4,2);


//Consultas

---> OCUPACOES
Selecionar todas as ocupações da mesa 5
     select * from ocupacao where idmesa = 5;

Todas as ocupações no ano tal
     select * from ocupacao where  EXTRACT(YEAR FROM entrada) = 2011;

Descobrir qual ocupacao ainda nao fechou efetuou a 'saida'
     select * from ocupacao where saida IS NULL

Descobrir todas ocupacoes fechadas
     select * from ocupacao where NOT(saida IS NULL)

qual ID da ocupacao da mesa ainda nao saiu
     select idocupacao from ocupacao where (saida IS NULL) AND idmesa = 1 

selecionar quantas ocupacoes teve cada mesa
     select count(*), idMesa from ocupacao group by idMesa


---> ESTOQUE
Selecionar produtos no estoque
     select * from produto where quantidade != 0

---> Vendas

selecionar o total de todos os produtos consumidos
     select total from produtosconsumidos

selecionar a SOMA do total de todos os produtos consumidos
     select SUM(total) from produtosconsumidos

selecionar a soma total consumida pela ocupacao
     select sum(total) from ProdutosConsumidos where idOcupacao = 4

selecionar a soma do total consumido pela MESA
     select sum(pc.total) from mesa m, ocupacao o, produtosconsumidos pc where m.idMesa = o.idMesa and o.idOcupacao = pc.idOcupacao and m.idMesa = 5

selecionar a soma das vendas de todas as mesas no MES X
     select sum(pc.total) from ocupacao o, produtosconsumidos pc where o.idOcupacao = pc.idOcupacao AND EXTRACT(YEAR FROM o.entrada) = 2011 AND EXTRACT(MONTH FROM o.entrada) = 02
Bruno_Ferreira1

Muito obrigado seu d34d_d3v1l (que nome é esse?) 8)
vou estudar seu modelo aqui

d34d_d3v1l

Bruno Ferreira:
Muito obrigado seu d34d_d3v1l (que nome é esse?) 8)
vou estudar seu modelo aqui

d34d = dead
d3v1l = devil

dead = morto
devil = demonio

Quando eu era criança eu brincava com invasão e coisas toscas do tipo e do nada eu dei esse apelido a um bot na minha botnet… Gostei do “jeito” que ficou, e esse virou meu apelido… Acabei carregando ele até hoje.

Coisas da vida…

Bom, de nada!
precisando estamos aí
abrazz

Criado 5 de junho de 2011
Ultima resposta 5 de jun. de 2011
Respostas 8
Participantes 2