Olá
Gostaria de saber se alguém poderia me ajudar pois estou precisando de ajuda com meu projeto.
Dei início ao meu projeto pelo banco de dados e é justamente nele que estou há mais de 10 dias sem nenhuma evolução
significativa.
Como ainda sou leigo em Java resolvi iniciar meu projeto com a base de dados baseada em arquvo sequencial e
randômico. até então tudo esta funcionando: cadastro, consulta e alteração. a ALTERAÇÃO está me dando uma dor de
cabeça terrível porque não funciona do jeito que quero.
Em meu projeto há uma classe chamada Menu() a qual tem uma estrutura de repetição (while) para facilitar a escolha das
opções (cadastro, consulta e alteração) por parte do usuário.
Quando a opção 3 (Alterar) é escolhida, o método é chamado normalmente e efetua a alteração normalmente. Em seguida
o programa volta para o início devido sua estrutura de repetição. Apartir da segunda volta no while o método
AlteraMercadoria() começa a fazer um processo de alteração, porém acumulativo. De modo que na primeira volta do
while o registro escolhido para alteração é alterado (substituido) normalmente, porém nos seguintes o registro escolhido
para alteração TAMBÉM é alterado, mas o método grava no arquivo os resgistros já esxixtentes, ou seja, O NÚMERO DE
REGISTROS SÃO ELEVADOS AO QUADRADO.
Abaixo está um exemplo o qual eu alterei somente o ítem 1.
As alterações são feitas apenas nos ítens mercadoria, preço e quantidade.
REGISTROS EXISTENTE:
#1 ARROZ 10.00 2
#2 FRANGO 45.50 21
PRIMEIRA VOLTA (alteração)
#1 LEITE 5 4
#2 FRANGO 45.50 21
SEGUNDA VOLTA (sem o arquivo sofrer cadastros, somente alterações)
#1 SOJA 7 54
#2 FRANGO 45.50 21
#1 LEITE 5 4
#2 FRANGO 45.50 21
TERCEIRA VOLTA
#1 MILHO 33 2
#2 FRANGO 45.50 21
#1 LEITE 5 4
#2 FRANGO 45.50 21
#1 SOJA 7 54
#2 FRANGO 45.50 21
#1 LEITE 5 4
#2 FRANGO 45.50 21
while(escolhaInt != 0){
try{
System.out.println("[1] = Cadastro -- [2] = Consulta -- [3] = Alterar -- [0] = SAIR ");
System.out.print("Escolha a opcao: ");
String escolha = entrada.readLine();
escolhaInt = Integer.parseInt(escolha);
switch(escolhaInt){
case 1: Cadastro.CadastroMercadoria();
break;
case 2: Consulta.ConsultaMercadoria();
break;
case 3: Alterar.AlteraMercadoria();
break;
case 0: System.out.println(":::: Saindo do Programa :::: TCHAU - VOLTE
SEMPRE");
break;
default: System.out.println("Opcao incorreta!!!");
}
}catch (Exception erro){
System.out.println("ESCOLHA UMA OPCAO ACIMA OU [0] PARA SAIR");
}
}
SEGUE A CLASSE RESPONSAVEL POR TUDO ISSO:
Acredito eu que o problema esteja no objeto memória. acredito que ela deve acumular os registros e elevá-los ao quadrado
a cada ciclo do while.
enquanto fazia os teste percebi uma coisa: A primeira alteração sempre é feita de forma exata e sem erros, porém as
seguintes não posso dizer o mesmo. Sempre dá esse erro.
tentei utilizar o método FINALIZE() para tentar destruir o método AlteraMercadoria() e ver se o objeto MEMORIA
retornaria vazio mas não deu em nada.
ESPERO QUE POSSA ME AJUDAR. SE NÃO COM ESSA DÚVIDA PELO MENOS ME MOSTRE UM CAMINHO MENOS
ÁRDUO OU ÁRDUO PORÉM EFICAZ.
QUAL BANCO DE DADOS VOCES ME ACONSELHAM A USAR?
VALEU PESSOAL. MUITO OBRIGADO!!!
Leandro M.
import java.io.*;
class alteraVendaRandomico {
static StringBuffer memoria = new StringBuffer();
//int mostraMaisUmaVenda = 0;
//String vendaSimNao;
public void.AlteraMercadoria(){
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 linha = "";
while((linha = arqentrada.readLine()) != null){
memoria.append (linha + "\n");
}
System.out.print("Digite o Codigo: ");
String alteraCod_cli = entrada.readLine();
int primeiro = -1;
if (memoria.length() != 0){
primeiro = memoria.indexOf ("#" + alteraCod_cli);
if (primeiro != -1){
int fim = memoria.indexOf("\t", primeiro);
int Cod_cli = Integer.parseInt(ler (primeiro +=1, fim));
primeiro = fim + 1;
fim = memoria.indexOf("\t", primeiro);
String Nome = ler (primeiro, fim);
int inicio = fim + 1;
fim = memoria.indexOf("\t", inicio);
String Valor = ler (inicio, fim);
inicio = fim + 1;
fim = memoria.indexOf("\n", inicio);
String Quantidade = ler (inicio, fim);
System.out.println("NOME: " + Nome + " VALOR: " + Valor + "
QUANTIDADE: " + Quantidade);
//System.out.println(primeiro + " " + fim + " " + inicio + " " + memoria);
regAgendaRadomico regAg1 = new regAgendaRadomico(Cod_cli, Nome,
Valor, Quantidade);
System.out.print("Nome: ");
Nome = entrada.readLine();
System.out.print("Valor: ");
Valor = entrada.readLine();
System.out.print("Quantidade: ");
Quantidade = entrada.readLine();
regAg1.alteraNome(Nome);
regAg1.alteraQuant(Valor);
regAg1.alteraEmail(Quantidade);
memoria.replace(primeiro, fim, regAg1.mostraNome() + "\t" +
regAg1.mostraQuant() + "\t" + regAg1.mostraEmail());
gravar();
}else{
System.out.println("Codigo nao Encontrado");
}
}else{
System.out.println("O arquivo esta vazio");
}
arqentrada.close();
}catch(FileNotFoundException erro){
System.out.println("O arquivo nao foi encontrado");
}catch (Exception erro){
System.out.println("Erro de leitura");
}
}
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 void gravar (){
try{
BufferedWriter saida;
saida = new BufferedWriter (new FileWriter("C:\Documents and Settings\Leandro
Marques\Desktop\Restaurante\CadMercadoria.txt"));
saida.write(memoria.toString());
saida.flush();
saida.close();
}catch(Exception erro){
System.out.println("Erro de gravacao");
}
}
}
