Ola tudo bom? preciso de uma sugestão de como poderia fazer o código
tipo no supermercado nós vamos pagar uma quantia em dinheiro e o resto no cartão por exemplo
geralmente o caixa digita o valor do dinheiro que a pessoa deu e ai esse valor diminui do total
depois ele digita o valor do que a pessoa ira pagar no cartão e diminui do total novamente
como poderia fazer isso?
sou iniciante estou aprimorando um sistema que ja tenho iria recomeçar do zero mas achei melhor mexer nesse que ja estava quase tudo pronto e tinha deixado pelo meio
e gostaria de uma ajuda de vocês obrigada
Digitar valor e diminuir do valor total depois digitar novamente e diminuir no total(Resolvido)
25 Respostas
Entendo que isso se refira ao processo de pagamento de uma compra efetuada, correto?
Em geral, uma compra pode ter um ou mais modos de pagamento.
Cada modo de pagamento será definido por seu tipo e valor pago, podendo ou não ter troco.
Assim sendo, você pode criar uma rotina que receba um tipo de pagamento (dinheiro, por exemplo). Com o dinheiro, você informa o valor recebido. Verifica se o valor é maior, igual ou menor que o valor da compra e procede conforme:
-
Maior: calcula a diferença, encerra a compra e dispõe troco
-
Igual: encerra a compra.
-
Menor: calcula a diferença, apresenta o valor faltante.
Obviamente, isso pode ser feito num laço do/while, em que a condição de saída seja o encerramento da compraboolean compraEncerrada = false;do { if(valorPago > valorCompra) { //TODO calcular diferença //TODO apresentar troco compraEncerrada = true; } else if(valorPago == valorCompra) { //TODO apresenta troco 0 compraEncerrada = true; } else { //TODO calcula diferença //TODO apresenta mensagem de valor faltante } } while(!compraEncerrada);
obrigada Darlan vou aplicar isso ai 
hem Darlan estou olhando aqui minha janela de venda na hora que eu gravar a venda no caso eu ia ter que chamar outra janela né pra escolher o tipo da forma da pagamento ou no gravar posso fazer isso diretao?
Você pode escolher qualquer abordagem.
Há sistemas que, sim, abrem um novo frame. Outros, você pressiona uma tecla ou combinação de teclas e a opção de pagamento é definida.
esta bem obrigada 
oi Darlan eu fiz aqui mas esta dando erro de string que sera que fiz de errado vou te mandar
Minha classe efetuar venda
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import datechooser.beans.DateChooserCombo;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import Modelo.VendaProduto;
//import controle.Utilitarios;
// Ctrl+Shift+F => Formata o código
// Ctrl+A e Ctrl+i => Formata a seleção
public class EfetuarVenda extends JFrame {
private JLabel rotulo1, rotulo2, rotulo3,rotulo4,rotulo5,rotulo6,rotulo7,rotulo8,rotulo9,rotulo10;
private JTextField caixa1, caixa2, caixa3,caixa4,caixa5,caixa6,caixa7,caixa8,caixa9,caixa10;
private JButton botao1, botao2,botao3,botao4,botao5,botao6;
private double total,valor,qtde,soma,valorrecebido,res = 0;
boolean compraEncerrada;
private static EntityManagerFactory fabricaDeEntidades = null;
private static EntityManager gerenciador = null;
DateChooserCombo f = new DateChooserCombo();
DecimalFormat df= new DecimalFormat(",##0,00");
ImageIcon icone;
ImageIcon icone1;
ImageIcon icone2;
ImageIcon icone3;
ImageIcon icone4;
//ImageIcon icone5;
public EfetuarVenda(EntityManagerFactory fabricaDeEntidades2, EntityManager gerenciador2) {
super("Vendas");
Container tela = getContentPane();
icone = new ImageIcon("006.gif");
icone1 = new ImageIcon("039.gif");
icone2 = new ImageIcon("017.gif");
icone3 = new ImageIcon("017.gif");
icone4 = new ImageIcon("041.gif");
//icone5 = new ImageIcon("100.gif");
botao1 = new JButton (icone);
botao2 = new JButton (icone1);
botao3 = new JButton (icone2);
botao4 = new JButton (icone3);
botao5 = new JButton (icone4);
//botao6 = new JButton (icone5);
tela.setLayout(null);
fabricaDeEntidades=fabricaDeEntidades2;
gerenciador=gerenciador2;
rotulo1 = new JLabel("Valor Recebido");
rotulo2 = new JLabel("Cliente:");
rotulo3 = new JLabel("Total:");
rotulo4 = new JLabel("Data:");
rotulo5 = new JLabel("Código:");
rotulo6 = new JLabel("Descrição:");
rotulo7 = new JLabel("Qtde:");
rotulo8 = new JLabel("Valor:");
rotulo9 = new JLabel("Total:");
rotulo10 = new JLabel("Nome do Vendedor:");
caixa1 = new JTextField();
caixa2 = new JTextField();
caixa3 = new JTextField();
caixa3.setText("0.00");
f = new DateChooserCombo();
caixa5 = new JTextField();
caixa6 = new JTextField();
caixa7 = new JTextField();
caixa8 = new JTextField();
caixa9 = new JTextField();
caixa10 = new JTextField();
// coluna, linha, largura, altura
rotulo1.setBounds(10, 19, 47, 20);
caixa1.setBounds(68, 19, 40, 20);
botao1.setBounds(630,100, 50, 20);
botao2.setBounds(21, 510, 200, 50);
botao3.setBounds(230, 510, 200, 50);
botao4.setBounds(440, 510, 200, 50);
botao5.setBounds(21, 570, 200, 50);
//botao6.setBounds(230, 570, 200, 50);
rotulo2.setBounds(140, 19, 100, 20);
caixa2.setBounds(190, 19, 232, 20);
rotulo3.setBounds(530, 50, 70, 60);
caixa3.setBounds(560, 50, 120, 40);
rotulo4.setBounds(10, 60, 100, 20);
f.setBounds(68, 60, 140, 20);
rotulo5.setBounds(10,100, 47, 20);
caixa5.setBounds(68,100, 40, 20);
rotulo6.setBounds(120, 100, 100, 20);
caixa6.setBounds(190, 100, 180, 20);
rotulo7.setBounds(370, 100, 80, 20);
caixa7.setBounds(410, 100, 50, 20);
rotulo8.setBounds(460, 100, 50, 20);
caixa8.setBounds(500,100, 50, 20);
rotulo9.setBounds(550, 100, 50, 20);
caixa9.setBounds(580, 100, 50, 20);
rotulo10.setBounds(220, 60, 150, 20);
caixa10.setBounds(340, 60, 150, 20);
tela.add(rotulo1);
tela.add(caixa1);
tela.add(rotulo2);
tela.add(caixa2);
tela.add(botao1);
tela.add(botao2);
tela.add(botao3);
tela.add(botao4);
tela.add(botao5);
//tela.add(botao6);
tela.add(rotulo3);
tela.add(caixa3);
tela.add(rotulo4);
tela.add(f);
tela.add(rotulo5);
tela.add(caixa5);
tela.add(rotulo6);
tela.add(caixa6);
tela.add(rotulo7);
tela.add(caixa7);
tela.add(rotulo8);
tela.add(caixa8);
tela.add(rotulo9);
tela.add(caixa9);
tela.add(rotulo10);
tela.add(caixa10);
final DefaultTableModel modelo;
modelo = new
DefaultTableModel();
// constrói a tabela
JTable tabela = new JTable(modelo);
// Cria duas colunas
modelo.addColumn("Código");
modelo.addColumn("Data");
modelo.addColumn("Nome do Vendedor");
modelo.addColumn("Descrição");
modelo.addColumn("Qtde");
modelo.addColumn("Valor");
modelo.addColumn("Total");
tabela.getColumnModel().getColumn(0).setPreferredWidth(5);
tabela.getColumnModel().getColumn(1).setPreferredWidth(40);
tabela.getColumnModel().getColumn(2).setPreferredWidth(100);
tabela.getColumnModel().getColumn(3).setPreferredWidth(100);
tabela.getColumnModel().getColumn(4).setPreferredWidth(10);
tabela.getColumnModel().getColumn(5).setPreferredWidth(50);
tabela.getColumnModel().getColumn(6).setPreferredWidth(50);
JScrollPane scrollPane = new JScrollPane(tabela);
scrollPane.setBounds(20, 150, 640, 350);
tela.add(scrollPane);
botao1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Persistir dados
// inclusão de um novo registro
//double total,valor,qtde,soma = 0;
valor=Double.parseDouble(caixa8.getText());
qtde=Double.parseDouble(caixa7.getText());
total=(qtde*valor);
soma+=(qtde*valor);
//Esse + (antes do igual) vai acumular os valores em soma.
caixa9.setText(""+total);
DecimalFormat fmt = new DecimalFormat("0.00");
caixa3.setText(fmt.format(soma));
modelo.addRow(new String [] {caixa5.getText(),f.getText(),caixa10.getText(),caixa6.getText(), caixa7.getText(), caixa8.getText(), caixa9.getText()} );
caixa2.setText("");
f.setText("");
caixa5.setText("");
caixa6.setText("");
caixa7.setText("");
caixa8.setText("");
caixa9.setText("");
caixa10.setText("");
}
});
botao2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO add your handling code here:
VendaProduto v = new VendaProduto();
do
if(v.getValorrecebido() > v.getTotal()) {
//TODO calcular diferença
//TODO apresentar troco
valorrecebido = Double.parseDouble(caixa1.getText());
valor = Double.parseDouble(caixa3.getText());
res = (valor - valorrecebido);
JOptionPane.showMessageDialog(null,
"o Troco é" + res);
compraEncerrada = true;
} else if(v.getValorrecebido() > v.getTotal()) {
//TODO apresenta troco 0
compraEncerrada = true;
} else {
//TODO calcula diferença
//TODO apresenta mensagem de valor faltante
valorrecebido = Double.parseDouble(caixa1.getText());
valor = Double.parseDouble(caixa3.getText());
res = (valor - valorrecebido);
JOptionPane.showMessageDialog(null,
"Falta Valor" + res);
}
while(!compraEncerrada);
for (int i = 0; i < modelo.getRowCount(); i ++ )
{
VendaProduto it = new VendaProduto();
it.setCodigodebarras(Integer.parseInt(String.valueOf(modelo.getValueAt(i, 0))));
it.setData(f.getSelectedDate());
it.setNomevendedor(String.valueOf(modelo.getValueAt(i, 2)));
it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));
gerenciador.getTransaction().begin();
gerenciador.persist(it);
gerenciador.getTransaction().commit();
}
}
});
botao3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fecha a janela
CalcularOrcamento c = new CalcularOrcamento(fabricaDeEntidades, gerenciador);
}
});
botao4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fecha a janela
CalcularPagamento c = new CalcularPagamento(fabricaDeEntidades, gerenciador);
}
});
botao5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// fecha a janela
ListarVendas v = new ListarVendas(fabricaDeEntidades, gerenciador);
}
});
//botao6.addActionListener(new ActionListener() {
//public void actionPerformed(ActionEvent e) {
// fecha a janela
// RelatorioVenda rep = new RelatorioVenda();
//JasperPrint relat;
// try{
// relat= rep.gerarRelatorioVenda();
// JasperViewer.viewReport(relat,false);
// }
// catch (Exception e1)
// { e1.printStackTrace(); }
// }
// });
// setSize(largura, altura);
setSize(700, 700);
setVisible(true);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
fabricaDeEntidades = Persistence
.createEntityManagerFactory("TurmaN40PostgreSQL");
gerenciador = fabricaDeEntidades.createEntityManager();
EfetuarVenda app = new EfetuarVenda(fabricaDeEntidades, gerenciador);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
VendaProduto
package Modelo;
import java.util.Calendar;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.swing.table.DefaultTableModel;
@Entity
public class VendaProduto {
@Id
private int codigodebarras;
private String descricao;
private int qtde;
private double valor;
private double total;
private double valorrecebido;
public double getValorrecebido() {
return valorrecebido;
}
public void setValorrecebido(double valorrecebido) {
this.valorrecebido = valorrecebido;
}
private int itens;
private String nomevendedor;
@Temporal(TemporalType.DATE)
private Calendar data;
public int getCodigodebarras() {
return codigodebarras;
}
public void setCodigodebarras(int codigodebarras) {
this.codigodebarras = codigodebarras;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String string) {
this.descricao = string;
}
public int getQtde() {
return qtde;
}
public void setQtde(int qtde) {
this.qtde = qtde;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public int getItens() {
return itens;
}
public void setItens(int itens) {
this.itens = itens;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public String getNomevendedor() {
return nomevendedor;
}
public void setNomevendedor(String nomevendedor) {
this.nomevendedor = nomevendedor;
}
}
erro
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “57,00”
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at EfetuarVenda$2.actionPerformed(EfetuarVenda.java:252)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
ele esta até pegando o total
A versão do jre onde o sistema está sendo executado não identifica um número decimal válido quando a separação é feita por vírgula (o padrão EN_US é separar decimais com ponto).
Logo, sugiro fazer a conversão após trocar a vírgula por ponto:
Ao invés de fazer isso, diretamente:
Faça algo como:
valor=Double.parseDouble(caixa8.getText().replace(",", ".");
Creio que isso resolva.
deu certo o replace só que agora ele nao esta entrando certinho no while
VendaProduto v = new VendaProduto();
do
if(v.getValorrecebido() > v.getTotal()) {
//TODO calcular diferença
//TODO apresentar troco
v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
res = v.getValorrecebido() - v.getTotal();
JOptionPane.showMessageDialog(null,
"o Troco é" + res);
compraEncerrada = true;
} else if(v.getValorrecebido() == v.getTotal()) {
JOptionPane.showMessageDialog(null,
"o Troco é" + res);
compraEncerrada = true;
} else {
//TODO calcula diferença
//TODO apresenta mensagem de valor faltante
v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
res = v.getValorrecebido() - v.getTotal();
JOptionPane.showMessageDialog(null,
"Falta Valor" + res);
}
while(!compraEncerrada);
por que sera ?
tipo fica so na primeira parte do troco fica so nessa mensagem
criei uma variavel local tipo boolean CompraEncerrada;
fica so o troco e nao vai no falta valor nem nada nao faz o looping certinho
só que insere o registro so não entra certinho no looping rs
Essa linha está antes dessas:
Porém, você precisa dessas informações (valor recebido e total) antes de fazer a primeira comparação, não?
viu deu certo agora a duvida agora é
como eu poderia fazer essa parte aqui do falta valor para pessoa pagar o restante
} else {
//TODO calcula diferença
//TODO apresenta mensagem de valor faltante
JOptionPane.showMessageDialog(null,
"Falta Valor" + res);
JOptionPane.showInputDialog(null,
"Digite Valor Faltante" + res);
pensei em por em show input dialog mas sera que consigo pegar o valor que falta?
É uma opção, porém, só vai aparecer se atender à condição do laço while.
então só que nao estou sabendo pegar o valor faltante agora nao sei se é o valor recebido ou total
agora\ toburra nessa parte kk
peguei o valor so que tem um porem so aceita string
v.setValorrecebido(JOptionPane.showInputDialog(null, “Digite o Valor Faltante”));
como poderia fazer a conversão?
consegui converter agora não sai do while rsrsrs
eu digito e nada
} else {
//TODO calcula diferença
//TODO apresenta mensagem de valor faltante
JOptionPane.showMessageDialog(null,
"Falta Valor" + res);
v.setValorrecebido(Double.parseDouble(JOptionPane.showInputDialog(null, "Digite o Valor Faltante")));
}
se voce puder me ajudar só nesse finalzinho te agradeço mto ai termina essa parte desculpa o incomodo.
Se ele não sai do while é por que a condição de parada não foi atingida.
Reveja os ifs, talvez haja algo a refinar neles.
mas se eu não sei o que é não vou conseguir saber o que esta errado por que pra mim esta certo pra mim é só a ultima parte que não sai do input mas eu vou ver esse final ai nao da pra fazer isso com case ?em vez de do while?
acho que é mais facil até pra sair do loop
e eu digito 60 que é o valor faltando mas ele continua la dentro
eu to pensando assim que teria que fazer mais um if
acredito para sair não é por que o valor acho que tinha que ser igual o que falta mas ja tem a condição de igual ali mas eu vou pensar aqui e te falo o que saiu kkk
Tudo no jeito Darlan Muito obrigada
agora vou postar pra ajudar outra pessoa agora é so aprimorar mais rsrs
botao2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO add your handling code here:
VendaProduto v = new VendaProduto();
//Produto p = new Produto();
// estoque = p.getQuantidade() - p.getEstoque();
v.setValorrecebido(Double.parseDouble(caixa1.getText().replace(",", ".")));
v.setTotal(Double.parseDouble(caixa9.getText().replace(",", ".")));
res = v.getValorrecebido() - v.getTotal();
do
if(v.getValorrecebido() > v.getTotal()) {
//TODO calcular diferença
//TODO apresentar troco
JOptionPane.showMessageDialog(null,
"o Troco é: " + res);
JOptionPane.showMessageDialog(null,
"Compra Finalizada com Sucesso");
compraEncerrada = true;
} else if(v.getValorrecebido() == v.getTotal()) {
JOptionPane.showMessageDialog(null,
"Compra Finalizada com Sucesso");
compraEncerrada = true;
}else if(v.getValorrecebido() < v.getTotal()) {
//TODO calcula diferença
//TODO apresenta mensagem de valor faltante
JOptionPane.showMessageDialog(null,
"Falta o Valor de: " + res);
v.setValorrecebido(Double.parseDouble(JOptionPane.showInputDialog(null, "Digite o Valor Faltante").replace(",", ".")));
JOptionPane.showMessageDialog(null,
"Venda Efetuada com Sucesso");
compraEncerrada = true;
}else {
JOptionPane.showMessageDialog(null,
"A Compra Não Pode Ser Finalizada");
compraEncerrada = false;
}
while(!compraEncerrada);
for (int i = 0; i < modelo.getRowCount(); i ++ )
{
VendaProduto it = new VendaProduto();
it.setCodigodebarras(Integer.parseInt(String.valueOf(modelo.getValueAt(i, 0))));
it.setData(f.getSelectedDate());
it.setNomevendedor(String.valueOf(modelo.getValueAt(i, 2)));
it.setDescricao(String.valueOf(modelo.getValueAt( i ,3)));
it.setQtde(Integer.parseInt(String.valueOf(modelo.getValueAt( i ,4))));
it.setValor(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,5))));
it.setTotal(Double.parseDouble(String.valueOf(modelo.getValueAt( i ,6))));
gerenciador.getTransaction().begin();
gerenciador.persist(it);
gerenciador.getTransaction().commit();
}
}
});
Eu sei que vocẽ está usando netbeans e nele pode ser um tanto complicado, mas, uma boa ideia é dar a cada elemento da tela um nome amigável. Principalmente para os que você vai interagir.
O que é o botao2? O que ele faz?
grava e faz esse calculo ai
e depois vou ter q diminuir estoque nele tb,