Erro ao criar agenda usando estrutura

Olá pessoal,
Preciso criar uma agenda usando qualquer estrutura em java. Deve permitir incluir, exibir, alterar e excluir os registros.
Olhei vários exemplos na net, mas não consegui resolver o problema.
ja tentei usar ArrayList, estou perdido no código. Meu código ta todo bagunçado.

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Vector;

public class Agenda {

    public static void main(String[] args) {

        int opcao = 1;
        Scanner sc = new Scanner(System.in);

        Dados ag = new Dados();

        //Vector v = new Vector();
        while (opcao != 0) {

            MenuP();
            opcao = sc.nextInt();
            switch(opcao){
                case 0:
                    System.out.println("\n\n Saindo do Programa .....");
                    break;
                case 1:
                    ag.Incluir();
                    break;
                case 2:
                    ag.Excluir();
                    break;
                case 3:
                    ag.Exibir();
                    break;
                default:
                    System.out.println("\n # # # Valor diferente de 1, 2 e 3 # # #");
                    break;
            }
        }
    }

    static void MenuP(){

        System.out.println("\n ******** Menu ********");
        System.out.println("1 - Incluir");
        System.out.println("2 - Excluir");
        System.out.println("3 - Mostrar");
        System.out.print("Informe sua opção :  ");
   }
}


class Dados{
    int codigo;
    String nome;
    String telefone;
    String e_Mail;

    Scanner scX = new Scanner(System.in);

    Vector v = new Vector(10, 5);
    

    Dados d = new Dados();

    //Pessoa p = new Pessoa(?joao?, ?joao@noemail.com?);
    //a.add(p);
    //a.add(new Pessoa(?maria silva?, ?msilva@lamesmo.com.br?));

    void Incluir(){
        System.out.println("\n &&&&& Incluir\n ");
        System.out.println("\t Codigo:  ");
        d.codigo = scX.nextInt();
        System.out.println("\t Nome:  ");
        d.nome = scX.next();
        System.out.println("\t Telefone:  ");
        d.telefone = scX.next();
        System.out.println("\t E-Mail:  ");
        d.e_Mail = scX.next();

        v.add(d);

    }

    void Excluir(){
        System.out.println("Excluir");
        //lista.remove(d);
    }

    void Exibir() {
        System.out.println(" ======== Mostrar ========");
        System.out.println("\t Codigo:  ");
        System.out.println( d.codigo );
        System.out.println("\t Nome:  ");
        System.out.println( d.nome );
        System.out.println("\t Telefone:  ");
        System.out.println( d.telefone );
        System.out.println("\t E-Mail:  ");
        System.out.println( d.e_Mail );
        //Dados d1 = (Dados)d1.get(0);
        //System.out.println( d1.nome );
        //System.out.println( ((Dados)d.get(0)).nome );
        //System.out.println(d.get(0).nome);

        
    }
}

Alguns exemplos somente com um dado, por exemplo nome, funcionou certinho, mas com vários dados como: codigo, nome; Telefone; e_Mail; não deu certo.

Aguardo ajuda

obrigado