public class Agenda{
  
  public static final int CODIGO = 0;
  public static final int NOME = 1;
  public static final int ENDERECO = 2;
  public static final int TELEFONE = 3;
  
  public static final int MAX = 100;
  public static String dados[][] = new String[MAX][4];
  
  public static void limpaTela(){
    for(int i=0; i<25; i++){
      System.out.println();
    }
  }
  
  public static void zeraDados(){
    for(int i=0;i<MAX; i++){
      for(int x=0; x<4; x ++ ){
        dados[i][x]="0";
      }
    }
  }
  
  public static int buscaDados(String info, int coluna){
    int posicao = 0;
    while(posicao < MAX && !dados[posicao][coluna].equals(info)){
      posicao++;
    }
    return posicao;
  }
  
  public static void mostraDados(int posicao) {
    System.out.println("Codigo____: " + dados[posicao][CODIGO]);
    System.out.println("Nome______: " + dados[posicao][NOME]);
    System.out.println("Endereco__: " + dados[posicao][ENDERECO]);
    System.out.println("Telefone__: " + dados[posicao][TELEFONE]);
  }
  
  public static void pausa(String mens){    
    Entrada.leiaString(mens+ "\nPressione <enter> para continuar...");
  }
  
  public static boolean confirma(String mens){
    char resp = Entrada.leiaChar(mens + " (S/N) ? ");
    return resp == 's' || resp == 'S';
  }
  
  public static int mostraMenu(){
    System.out.println("======================== Agenda XYZ ========================");
    System.out.println("\n\nMENU PRINCIPAL");
    System.out.println("1 - Incluir");
    System.out.println("2 - Alterar");
    System.out.println("3 - Excluir");
    System.out.println("4 - Buscar");
    System.out.println("5 - Listar");
    System.out.println("6 - Sair");
    
    return Entrada.leiaInt("Entre com a sua opção: ");    
  }
  
  public static void incluir(){
    int livre = buscaDados("0", CODIGO);   
    String codigo = Entrada.leiaString("Codigo___: ");
    if(buscaDados(codigo, CODIGO)!=MAX){
      pausa("Codigo já existente!!!");
    }else{
      String nome = Entrada.leiaString("Nome_____: ");
      String endereco = Entrada.leiaString("Endereco_: ");
      String telefone = Entrada.leiaString("Telefone_: ");
      if(confirma("Confirma a Inclusão")) {
        dados[livre][CODIGO] = codigo;
        dados[livre][NOME] = nome;
        dados[livre][ENDERECO] = endereco;
        dados[livre][TELEFONE] = telefone;
        pausa("Cadastro realizado com Sucesso !!!");
      }
    }
  }
  
  public static void alterar(){
    String codigo = Entrada.leiaString("Codigo___: ");
    int ocupado = buscaDados(codigo, CODIGO);   
    if(ocupado == MAX){
      pausa("Código Inexistente !!!");
    }else{
      mostraDados(ocupado);
      if(confirma("Deseja modificar estes dados")){
        String nome = Entrada.leiaString("Nome_____: ");
        String endereco = Entrada.leiaString("Endereco_: ");
        String telefone = Entrada.leiaString("Telefone_: ");    
        if(confirma("Confirma a Alteração")) {
          dados[ocupado][NOME] = nome;
          dados[ocupado][ENDERECO] = endereco;
          dados[ocupado][TELEFONE] = telefone;
          pausa("Atualização realizada com Sucesso !!!");
        }
      }
    }
  }
  
  public static void excluir(){
    String codigo = Entrada.leiaString("Codigo___: ");
    int ocupado = buscaDados(codigo, CODIGO);   
    if(ocupado == MAX){
      pausa("Código Inexistente !!!");
    }else{
      mostraDados(ocupado);
      if(confirma("Deseja excluir este registro")){
        if(confirma("Confirma a Alteração")) {
          dados[ocupado][CODIGO] = "0";
          pausa("Exclusao realizada com Sucesso !!!");
        }
      }
    }
  }
  
  public static void buscar(){
    char tipo = Entrada.leiaChar("Buscar por Codigo (c) ou Nome (N)");
    String codigo = Entrada.leiaString("Dado___: ");
    int ocupado = 0;
    if(tipo == 'C' || tipo == 'c' ){      
      ocupado = buscaDados(codigo, CODIGO);
    }else{
      ocupado = buscaDados(codigo, NOME);
    }
    if(ocupado == MAX){
      pausa("Dado Inexistente !!!");
    }else{
      mostraDados(ocupado);
      pausa("");
    }
  }
  
  public static void listar(){
    for(int i=0; i<MAX; i++){
      if(!dados[i][0].equals("0")){
        mostraDados(i);
      }
    }
  }
  
  public static void main(String args[]){
    zeraDados();
    int opcao = 0;
    while(opcao != 6 ) {
      opcao = mostraMenu();
      switch(opcao){
        case 1:
          incluir();
          break;
        case 2:
          alterar();
          break;
        case 3:
          excluir();
          break;
        case 4:
          buscar();
          break;
        case 5:
          listar();
          break;
      }
    }
  }
}