Boa noite galera, então, eu to com um exercicio no curso que o professor pediu o seguinte
1. Faça um programa de caixa de supermercado. O programa deverá realizar as vendas de produtos.
Os produtos deverão estar pré-cadastrados, em um arquivo chamado BDProdutos.txt.
Após finalizar o registro dos itens dos produtos, realize o registro de pagamento. Salve o valor de todos os pagamentos no arquivo BDPagamento.txt.
Crie um novo projeto
Crie 2 pacotes. Um Chamado View(telas) e outro com Control(controle)
Todas as telas(jframe) estarão em view.
Todas as classes controle, em control.
Telas: Pelo menos 3 telas. Uma para o caixa, um para o pagamento e outro para o cadastro de produtos.
Pelo menos 2 classes: um para produto e outro para pagamento.
(Obs:fazer cada método em sua respectiva classe)
Eu to tentando instanciar uma classe e salvar essa classe em uma List, e depois gravar no TXT, porém como vou fazer pra quando quiser localizar e recuperar as informaçoes dos produtos ? Sempre que o programa iniciar a List estará vazia…
Acredito que a ideia é que os dados dos arquivos txt sejam carregados quando o programa inicia. A lista só ficará vazia se nenhum produto tiver sido cadastrado anteriormente.
Abraço.
1 curtida
A ideia é essa mesmo, porém eu não sei carregar todos os dados do arquivo direto para cada classe na List. Quando eu inicio o programa de novo, os dados estao no arquivo, porem a lista vazia…
Você está salvando o objeto List inteiro, ou cada elemento da lista separadamente? Os dados do arquivos estão legíveis, ou você está gravando-os os objetos serializados?
Do mesmo modo que você gravou os arquivos, você precisa programar a leitura deles a partir do arquivo. O Java não faz isso sozinho. Veja por exemplo: https://www.mkyong.com/java/how-to-read-and-write-java-object-to-a-file/ .
Abraço.
1 curtida
Eu coloquei no botao “Salvar produto” assim, da uma olhada:
JButton btnSalvarnovoproduto = new JButton("Salvar Novo Produto");
btnSalvarnovoproduto.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Produto produto = new Produto(txtDescricao.getText(), String.valueOf(cbxMedida.getSelectedItem()),
Double.parseDouble(txtPreco.getText()));
if (listaProdutos.add(produto)) {
produto.cadastrarProduto();
JOptionPane.showMessageDialog(null, "Produto salvo!");
}
}
});
Esse metodo cadastrar da classe “Produto” está assim:
public void cadastrarProduto() {
Produto produto = new Produto();
String caminhoArquivo = "E:\\BDProdutos.txt";
int codigo = novoCodigo();
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(caminhoArquivo, true));
bw.write(codigo + "@" + descricao + "#" + medida + "$" + preco);
bw.newLine();
bw.close();
} catch (IOException e) {
System.out.println("Erro: " + e.getMessage());
}
}
Meu problema mesmo é com esse metodo aqui :
public int localizarProduto(int codigoProduto) {
String caminhoArquivo = "E:\\BDProdutos.txt";
int cont = 0,codigo;
String linha = null;
try {
BufferedReader br = new BufferedReader(new FileReader(caminhoArquivo));
while (br.ready()) {
linha = br.readLine();
codigo = Integer.parseInt(linha.substring(0, linha.indexOf("@")));
if (codigo==codigoProduto) {
this.codigo=codigo;
this.descricao=linha.substring(3, linha.indexOf("#"));
this.medida=linha.substring(linha.indexOf("#")+1, linha.indexOf("$"));
this.preco=Integer.parseInt(linha.substring(linha.indexOf("$"+1)));
cont++;
break;
} else {
}
}
br.close();
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
}
return cont;
}
Se entendi seu código, cada produto cadastrado está sendo gravado no mesmo arquivo, o que faz com que apenas 1 produto fique cadastrado. Não acho que é isso que você quer. Você tem que gravar cada registro numa nova linha do mesmo arquivo.
Além disso, você precisa debugar ou exibir no console a parte linha = br.readLine();, para garantir que algo está sendo lido. Sem saber se a linha está sendo lida corretamente, não adianta verificar o resto do código.
Por fim, você disse que precisa trabalha com listas. Não faz sentido a busca ir num arquivo, sendo que poderia ser feita a partir da lista já carregada.
No geral, seu algoritmo deveria ser algo assim:
- ao abrir o programa, crie um List chamado produtos;
- verifica se existe o “BDProdutos.txt”: se existir, carregar cada linha dele como um novo produto e adicione no List produtos;
- ao cadastrar um produto, adicioná-lo na lista produtos e salvar o conteúdo da lista no “BDProdutos.txt”;
- toda vez que for procurar um produto, buscar dentro do List produtos, não no arquivo "BDProdutos.txt;
- restante do programa (venda, etc);
Abraço.
1 curtida
Vou tentar implementar isso aqui, mas aquela parte linha = br.readLine() ela recebe a linha, analisa a condiçao, somente. Ja estava funcionando quando eu trabalhava direto com o arquivo sem lista, mais tarde digo se funcionou, valeuzao !