Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Pessoal alguem pode me ajudar nesse problema, não estou conseguindo alterar uma conta é pra faculdade ajudem por favor

Bom dia galera! Estou com um projeto pra entregar segunda feira e não estou conseguindo alterar a conta.Vou deixar o codigo a baixo pra vê se vcs conseguem me ajudar.

Aqui é a classe de repositório, está faltando criar alguns metodos ainda mais o erro é na hora de altera a conta, quando vou listar novamente nem roda.

public class RepositorioConta implements RepositorioCadastroConta {
    private List<Conta> contaList = new ArrayList<>();

    public RepositorioConta(List<Conta> contaList) {
        this.contaList = contaList;
    }

    @Override
    public void cadastrarContaMembro(Conta conta) {
        contaList.add(conta);
    }

    @Override
    public void alterarContaIgreja(Conta conta) {
        for (Conta conta1 : contaList){
            if (conta1.getNumeroDaConta() == conta.getNumeroDaConta() && conta1.getSenha() == conta.getSenha()){
                contaList.remove(conta1);
                contaList.add(conta);
            }
        }
    }

    @Override
    public void alterarContaMembro(Conta conta) {

    }

    @Override
    public void removerContaIgreja(int numeroDaConta, int senha) {
        for (int i = 0; i < contaList.size(); i++) {
            Conta c = contaList.get(i);
            if (c instanceof ContaIgreja && c.getNumeroDaConta() == numeroDaConta && c.getSenha() == senha) {
                contaList.remove(i);
                return;
            }
        }
    }

    @Override
    public void removerContaMembro(int numeroDaConta, int senha) {

    }

    @Override
    public List<Conta> listarConta() {
        return contaList;
    }
}
2 respostas

Agora a classe serviço:

public class ServicoConta implements interfaceServico.ServicoConta {

    RepositorioConta repositorioConta = new RepositorioConta(new ArrayList<>());

    public ServicoConta(List<Conta> contaList) {
    }

    @Override
    public void cadastrarContaMembro() {
        String titularMembro = JOptionPane.showInputDialog("Nome: ");
        String cpfMembro = JOptionPane.showInputDialog("CPF: ");
        int numeroDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int senhaMembro = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        int saldoMembro = 0;

        ContaMembro contaMembro = new ContaMembro(numeroDaContaMembro,senhaMembro,saldoMembro,titularMembro,cpfMembro);
        repositorioConta.cadastrarContaMembro(contaMembro);
    }

    @Override
    public void cadastrarContaIgreja() {
        String titularIgreja = JOptionPane.showInputDialog("Nome: ");
        String cnpjIgreja = JOptionPane.showInputDialog("CNPJ: ");
        int numeroDaContaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int senhaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        int saldoIgreja = 0;

        ContaIgreja contaIgreja = new ContaIgreja(numeroDaContaIgreja,senhaIgreja,saldoIgreja,titularIgreja,cnpjIgreja);
        repositorioConta.cadastrarContaMembro(contaIgreja);
    }

    @Override
    public void alterarContaMembro() {
        int numeroAtualDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int senhaAtualDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        Conta conta = encontrarConta(numeroAtualDaContaMembro,senhaAtualDaContaMembro);
        if (conta != null){
            String novoTitularMembro = JOptionPane.showInputDialog("Nome: ");
            String novoCpf = JOptionPane.showInputDialog("CPF: ");
            int novoNumeroDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
            int novaSenhaMembro = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
            double novoSaldoMembro = 0;

            ContaMembro contaMembro = new ContaMembro(numeroAtualDaContaMembro,senhaAtualDaContaMembro,novoSaldoMembro,novoTitularMembro,novoCpf);
            repositorioConta.alterarContaMembro(contaMembro);
        }
    }

    @Override
    public void alterarContaIgreja() {
        int numeroAtualDaContaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int senhaAtualDaContaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        Conta conta = encontrarConta(numeroAtualDaContaIgreja,senhaAtualDaContaIgreja);
        if (conta != null){
            String novoTitularIgreja = JOptionPane.showInputDialog("Nome: ");
            String novoCnpj = JOptionPane.showInputDialog("CNPJ: ");
            int novoNumeroDaContaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
            int novaSenhaIgreja = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
            int novoSaldoDaIgreja = 0;

            ContaIgreja contaIgreja = new ContaIgreja(numeroAtualDaContaIgreja,senhaAtualDaContaIgreja,novoSaldoDaIgreja,novoTitularIgreja,novoCnpj);
            repositorioConta.alterarContaIgreja(contaIgreja);
        }
    }

    @Override
    public void removerContaIgreja() {
        repositorioConta.removerContaIgreja(Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: ")),
                Integer.parseInt(JOptionPane.showInputDialog("Senha: ")));
    }

    @Override
    public void removerContaMebro() {

    }

    @Override
    public void listarContas() {
        int numeroDaConta = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int senha = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        Conta conta = encontrarConta(numeroDaConta,senha);

        if (conta != null ){
            JOptionPane.showMessageDialog(null,conta.toString());
        }


    }

    private Conta encontrarConta(int numeroDaConta, int senha){
        List<Conta> contaList = repositorioConta.listarConta();
        for (Conta conta : contaList){
            if (conta.getNumeroDaConta() == numeroDaConta && conta.getSenha() == senha){
                return conta;
            }
        }
        return null;
    }
}
solução!

Olá Bruno, tudo bem?

ContaMembro contaMembro = new ContaMembro(numeroAtualDaContaMembro,senhaAtualDaContaMembro,novoSaldoMembro,novoTitularMembro,novoCpf);
repositorioConta.alterarContaMembro(contaMembro);

Você está criando uma nova instância da classe ContaMembro, mas está usando o número e a senha da conta atual. Isso fará com que a lista de contas não seja atualizada corretamente. Uma solução seria buscar a conta atual na lista de contas do repositório e atualizar seus valores diretamente, em vez de criar uma nova conta.

Algo assim:

@Override
public void alterarContaMembro() {
    int numeroAtualDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
    int senhaAtualDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
    Conta conta = encontrarConta(numeroAtualDaContaMembro,senhaAtualDaContaMembro);
    if (conta != null){
        String novoTitularMembro = JOptionPane.showInputDialog("Nome: ");
        String novoCpf = JOptionPane.showInputDialog("CPF: ");
        int novoNumeroDaContaMembro = Integer.parseInt(JOptionPane.showInputDialog("Numero da conta: "));
        int novaSenhaMembro = Integer.parseInt(JOptionPane.showInputDialog("Senha: "));
        double novoSaldoMembro = conta.getSaldo(); // usa o saldo atual da conta

        // atualiza a conta atual com os novos valores
        conta.setTitular(novoTitularMembro);
        conta.setCpf(novoCpf);
        conta.setNumeroDaConta(novoNumeroDaContaMembro);
        conta.setSenha(novaSenhaMembro);
        conta.setSaldo(novoSaldoMembro);

        // chama o método de alteração do repositório com a conta atualizada
        repositorioConta.alterarContaMembro(conta);
    }
}