Olá
Estou com uma dúvida há mais de 10 dias e só agora resolvi solicitar um help aos colegas do GUJ.
Como disse venho tentando fazer uma aplicação java com acesso a arquivos txt. A aplicação foi feita corretamente com
leitura, cadastro e alteração dos dados. todas funcionam, no entanto a alteração vem me dando dor de cabeça porque não
funciona do jeito que quero.
O que acontece é o seguinte: a classe principal (void main) possui um switch - case para que usuário possa escolher as
opções (CADASTRAR, CONSULTAR ou EFETUAR VENDA). A opção Efetuar Venda (representada pela classe
“alteracaoVenda”) recebe o código da mercadoria e a quantidade vendida, que por sua vez serão consultados e apenas
alterado o campo quantidade. Ou seja, toda vez que for feita uma venda, esta classe irá alterar a quantidade vendida,
somando o valor existente com o valor vendido de modo que haja controle do que esta sendo vendido. A classe
“alteracaoVenda” funciona coretamente somente no primeiro acesso ao arquivo txt. Nos próximo acessos a classe
“alteracaoVenda” efetua a alteração da quantidade de acordo com o código digitado, porém os registros são duplicados.
Por exemplo: estão cadastrados #1 ARROZ 10.00 2
#2 FRANGO 45.50 21
----- Como disse
a primeira alteração é feita normalmente, já na segunda o primeiro item é alterado porém fica assim:
#1 FEIJÃO 15.30 7
#2 FRANGO 45.50 21
#1 ARROZ 10.00 2
#2 FRANGO 45.50 21
Na próxima alteração esse número se transforma em 8 e depois em 16 e depois em 32 e assim sucessivamente. Se eu efetuar a venda de 8 mercadorias o meu banco de registros será duplicado 7 vezes por exemplo.
Como posso fazer com que esta classe funcione corretamente sem que ocorra este problema? ouvi dizer em uma possibilidade de destruição de método. Como posso fazer isso?
A Classe “alteracaoVenda” se encontra abaixo.
Muito obrigado e aguardo ajuda.
Leandro M.
[color=darkblue][code]import java.io.*;
class alteracaoVenda {
static StringBuffer memoria = new StringBuffer ();
public void incluindoVenda(String Cod, String QuantidadeII){
try{
BufferedReader entrada;
entrada = new BufferedReader (new InputStreamReader (System.in));
BufferedReader arqentrada;
arqentrada = new BufferedReader (new FileReader("C:\\Documents and
Settings\Leandro\Desktop\CadMercadoria.txt"));
String Quantidade = "";
String Valor = "";
String linha = "";
while ((linha = arqentrada.readLine()) != null){
memoria.append(linha + "\n");
}
int inicio = -1;
inicio = memoria.indexOf (Cod);
if(inicio != -1){
int ultimo = memoria.indexOf ("\t", inicio);
Cod = Ler (inicio, ultimo);
int primeiro = ultimo + 1;
ultimo = memoria.indexOf ("\t",primeiro);
Quantidade = Ler (primeiro, ultimo);
primeiro = ultimo + 1;
int fim = memoria.indexOf("\n", primeiro);
Valor = Ler (primeiro, fim);
// Classe que retorna o valor lido no arquivo txt regAgendaVenda regAg1 = new regAgendaVenda (Cod, Quantidade, Valor);
System.out.println(" Quantidade: " + regAg1.mostraQuantidade() + " :::: " +
"Valor: " + regAg1.mostraValor());
// transforma os valores retornado do arquivo txt e a quantidade vendida
referente a quantidade em int para que possa ser feito o calculo de soma entre o valor existente com a quantidade
vendida. int intQuant = Integer.parseInt(Quantidade);
int intQuantII = Integer.parseInt(QuantidadeII);
intQuantII = (intQuantII + intQuant);
QuantidadeII = Integer.toString(intQuantII);
regAg1.alteraQuantidade(QuantidadeII); // o valor já calculado é
disponibilizado para a alteração.
memoria.replace (inicio, fim, regAg1.mostraCodigo() + “\t” +
regAg1.mostraQuantidade() + “\t” + regAg1.mostraValor());
gravar();
arqentrada.close();
}else{
System.out.println(“Item nao encontrado”);
}
arqentrada.close();
}catch(FileNotFoundException erro){
System.out.println("Arquivo nao encontrado");
}catch(Exception erro){
System.out.println("Erro de leitura!");
}
System.gc();
}
public static String Ler (int primeiro, int ultimo){
String dados = "";
char [] destino = new char [ultimo - primeiro];
memoria.getChars (primeiro, ultimo, destino, 0);
for (int i = 0; i< destino.length; i++){
dados += destino[i];
}
return dados;
}
public static void gravar (){
try{
BufferedWriter saida;
saida = new BufferedWriter (new FileWriter("C:\\Documents and Settings\\Leandro
Marques\Desktop\Restaurante\CadMercadoriaII.txt"));
saida.write(memoria.toString());
saida.flush();
saida.close();
}catch(Exception erro){
System.out.println(“Erro de gravacao”);
}
}
}[/code][/color]