pacote controle
package controle;
public class AgendaVaziaException extends Exception{
private final String mensagem = "\nA agenda telefonica não possui contatos";
@Override
public String getMessage() {
return mensagem;
}
}
package controle;
public class RegistroDuplicadoException extends Exception {
public String getMessage(String contato) {
return "\nO contato " + contato + " já se encontra cadastrado na agenda\n" +
"Sendo assim o cadastro foi cancelado";
}
}
package controle;
public class CampoBrancoException extends Exception {
private final String mensagem = "\nPreencha o campo ";
public String getMessage(String campo) {
return mensagem + campo;
}
}
pacote modelo
package modelo;
public class Telefone {
private String telefone;
// construtor ja recebe como parametros os dados da classe
public Telefone(String telefone) {
setTelefone(telefone);
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String toString() {
return getTelefone();
}
}
package modelo;
import java.util.Map;
import java.util.Map.Entry;
public class Contato {
private String nome;
private String cidade;
private String email;
private Map<Integer, Telefone> listaTelefone;
// construtor ja recebe como parametros os dados da classe
public Contato(String nome, String cidade, String email,
Map<Integer, Telefone> listaTelefone) {
setNome(nome);
setCidade(cidade);
setEmail(email);
setListaTelefone(listaTelefone);
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getListaTelefone() {
StringBuilder lista = new StringBuilder();
int tam_max = listaTelefone.size() - 1;
int i = 0;
for (Entry<Integer, Telefone> entry : listaTelefone.entrySet()) {
lista.append(entry).append((i < tam_max) ? " --- " : " " );
i++;
}
return lista.toString();
}
public void setListaTelefone(Map<Integer, Telefone> listaTelefone) {
this.listaTelefone = listaTelefone;
}
}
pacote persistencia
package persistencia;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import modelo.Contato;
import visao.Alterar;
import visao.Excluir;
import visao.Inserir;
import visao.Pesquisar;
import controle.AgendaVaziaException;
import controle.CampoBrancoException;
import controle.RegistroDuplicadoException;
public class MapContato {
private Map<Integer, Contato> mapContato;
// construtor que criar o mapcontato ao criar a classe
public MapContato() {
mapContato = new HashMap<>();
}
public Map<Integer, Contato> getMapContato() {
return mapContato;
}
public void setMapContato(Map<Integer, Contato> mapContato) {
this.mapContato = mapContato;
}
// metodo para adicionar contato
public void adicionar() throws CampoBrancoException,
RegistroDuplicadoException {
new Inserir().inserir(getMapContato());
}
public void alterar() throws CampoBrancoException,
RegistroDuplicadoException, AgendaVaziaException {
new Alterar().alterar(getMapContato());
}
public void excluir() throws AgendaVaziaException {
new Excluir().excluirContato(getMapContato());
}
public void gravarAgenda() throws IOException, AgendaVaziaException {
new Gravar().gravarArquivo(getMapContato());
}
public void pesquisar() throws AgendaVaziaException {
new Pesquisar().pesquisar(getMapContato());
}
@Override
public String toString() {
StringBuilder lista = new StringBuilder();
String newline = "";
for (Integer keySet : mapContato.keySet()) {
Contato contato = mapContato.get(keySet);
lista.append(newline).append("Sequencial: " + keySet)
.append("\nNome: " + contato.getNome())
.append("\nCidade: " + contato.getCidade())
.append("\nFones: " + contato.getListaTelefone())
.append("\nEmail: " + contato.getEmail());
newline = " \n\n";
}
return lista.toString();
}
}
package persistencia;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Scanner;
import modelo.Contato;
import controle.AgendaVaziaException;
public class Gravar {
private final static String PATH = "C:/Agenda/agenda.txt";
private final static Charset CHARSET = StandardCharsets.UTF_8;
private static Scanner input = new Scanner(System.in);
public void gravarArquivo(Map<Integer, Contato> mapContato)
throws IOException, AgendaVaziaException {
try {
if (mapContato.isEmpty()) {
throw new AgendaVaziaException();
}
Path caminho = Paths.get(PATH);
if (!Files.exists(caminho)) {
Files.createFile(caminho);
escreverArquivo(mapContato);
} else {
System.out.print("Deseja reescreve o arquivo (S/N)?: ");
if (input.next().toUpperCase().equals("S")) {
escreverArquivo(mapContato);
}
}
} catch (AgendaVaziaException e) {
System.out.println(e.getMessage());
}
}
private void escreverArquivo(Map<Integer, Contato> mapContato)
throws IOException {
BufferedWriter w = Files.newBufferedWriter(Paths.get(PATH), CHARSET);
PrintWriter print = new PrintWriter(w);
for (Integer keySet : mapContato.keySet()) {
Contato c = mapContato.get(keySet);
print.println("Sequencial: " + keySet +
"\r\nNome: " + c.getNome() +
"\r\nCidade: " + c.getCidade() +
"\r\nFones: " + c.getListaTelefone() +
"\r\nEmail: " + c.getEmail() + "\r\n");
}
print.close();
w.close();
System.out.println("\nArquivo gerado com sucesso!");
}
}
pacote visao
package visao;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import modelo.Contato;
import modelo.Telefone;
import controle.CampoBrancoException;
import controle.RegistroDuplicadoException;
public class Dados {
public Contato dadosContato(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
return new DadosContato().setDados(mapContato);
}
}
class DadosContato {
private Scanner input = new Scanner(System.in);
protected Contato setDados(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
String nome = "";
String cidade = "";
String email = "";
try {
System.out.print("\nDigite o nome do contato: ");
nome = input.next();
if (isDuplicado(isEmpty(nome), getListaNomes(mapContato))) {
throw new RegistroDuplicadoException();
}
System.out.print("Digite a cidade do contato: ");
cidade = input.next();
System.out.print("Digite o email do contato: ");
email = input.next();
return new Contato(nome, cidade, email, new DadosTelefone().inserir());
} catch (RegistroDuplicadoException e) {
System.out.println(e.getMessage(nome));
}
return null;
}
private String isEmpty(String nome) {
try {
if (nome.isEmpty()) {
throw new CampoBrancoException();
}
} catch (CampoBrancoException e) {
System.out.println(e.getMessage("contato"));
e.printStackTrace();
}
return nome;
}
private Set<String> getListaNomes(Map<Integer, Contato> mapContato) {
Set<String> nomes = new HashSet<String>();
if (mapContato != null) {
for (Integer entry : mapContato.keySet()) {
nomes.add(mapContato.get(entry).getNome());
}
}
return nomes;
}
private boolean isDuplicado(String nome, Set<String> getListaNomes) {
Set<String> listaNome = getListaNomes;
boolean isduplicado = false;
if (!listaNome.add(nome)) {
isduplicado = true;
}
return isduplicado;
}
}
class DadosTelefone {
private Scanner input = new Scanner(System.in);
protected Map<Integer, Telefone> inserir() throws CampoBrancoException {
int cod = 0;
String op = "S";
Map<Integer, Telefone> mapTelefone = new HashMap<Integer, Telefone>();
System.out.print("Adicionar um telefone ao contato (S/N): ");
op = input.next();
while (op.toUpperCase().equals("S")) {
mapTelefone.put(new Integer(++cod), setTelefone());
System.out.println("Telefone adicionado");
System.out.print("Deseja adicionar outro telefone (S/N)?: ");
op = input.next();
}
return mapTelefone;
}
private String setDados() {
System.out.print("Digite o telefone do contato: ");
return (input.next());
}
private String isEmpty(String tel) {
try {
if (tel.isEmpty()) {
throw new CampoBrancoException();
}
} catch (CampoBrancoException e) {
System.out.println(e.getMessage("telefone"));
e.printStackTrace();
}
return tel;
}
private Telefone setTelefone() throws CampoBrancoException {
return new Telefone(isEmpty(setDados()));
}
}
package visao;
import java.util.Map;
import java.util.Scanner;
import modelo.Contato;
import controle.AgendaVaziaException;
import controle.CampoBrancoException;
import controle.RegistroDuplicadoException;
public class Alterar {
public void alterar(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
new AlteraContato().alterarContato(mapContato);
}
}
class AlteraContato extends Dados {
private static Scanner input = new Scanner(System.in);
public void alterarContato(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
try {
if (mapContato.isEmpty()) {
throw new AgendaVaziaException();
}
String op = "S";
int key = 0;
key = new Pesquisar().pesquisarIndice(mapContato);
if (key != 0) {
System.out.print("Deseja alterar o contato (S/N)?: ");
op = input.next();
if (op.toUpperCase().equals("S")) {
Contato contato = mapContato.get(key);
new Mostrar().mostrarFormatado(key, contato);
contato = dadosContato(mapContato);
if (contato != null) {
mapContato.remove(key);
mapContato.put(new Integer(key), contato);
System.out.println("Contato alterado");
}
}
} else {
System.out.println("Contato não localizado");
}
} catch (AgendaVaziaException e) {
System.out.println(e.getMessage());
}
}
}
package visao;
import java.util.Map;
import java.util.Scanner;
import modelo.Contato;
import controle.CampoBrancoException;
import controle.RegistroDuplicadoException;
public class Inserir {
public void inserir(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
new InsereContato().inserirNovo(mapContato);
}
}
class InsereContato extends Dados {
private Scanner input = new Scanner(System.in);
private static int cod = 0;
protected Map<Integer, Contato> inserirNovo(Map<Integer, Contato> mapContato)
throws CampoBrancoException, RegistroDuplicadoException {
String op = "S";
while (op.toUpperCase().equals("S")) {
Contato contato = dadosContato(mapContato);
if (contato != null){
mapContato.put(new Integer(++cod), contato);
System.out.println("Contato adicionado");
}
System.out.print("Deseja adicionar outro contato (S/N)?: ");
op = input.next();
}
return mapContato;
}
}
package visao;
import java.util.Map;
import modelo.Contato;
import controle.AgendaVaziaException;
public class Excluir {
public void excluirContato(Map<Integer, Contato> mapContato) {
try {
if (mapContato.isEmpty()) {
throw new AgendaVaziaException();
}
Contato contato = mapContato.remove(new Pesquisar().pesquisarIndice(mapContato));
System.out.println(contato != null ? "Contato removido" : "Contato não localizado");
} catch (AgendaVaziaException e) {
System.out.println(e.getMessage());
}
}
}
package visao;
import modelo.Contato;
public class Mostrar {
public void mostrarFormatado(int key, Contato contato) {
System.out.print("\nSequencial: " + key +
"\nNome: " + contato.getNome() +
"\nCidade: " + contato.getCidade() +
"\nFones: " + contato.getListaTelefone() +
"\nEmail: " + contato.getEmail() + "\n");
}
}
package visao;
import java.util.Map;
import java.util.Scanner;
import controle.AgendaVaziaException;
import modelo.Contato;
public class Pesquisar {
private static Scanner input = new Scanner(System.in);
public void pesquisar(Map<Integer, Contato> mapContato) {
try {
if (mapContato.isEmpty()) {
throw new AgendaVaziaException();
}
System.out.println("Digite algum dado referente ao contato: ");
String nome = input.next();
int i = 0;
for (Integer entrySet : mapContato.keySet()) {
Contato contato = mapContato.get(entrySet);
if (contato.getNome().equals(nome)
|| contato.getCidade().equals(nome)
|| contato.getEmail().equals(nome)) {
new Mostrar().mostrarFormatado(entrySet, contato);
i++;
}
}
System.out.println((i != 0) ? "Foram localizados " + i + " contato(s)": "Não foram localizados contato(s)");
} catch (AgendaVaziaException e) {
System.out.println(e.getMessage());
}
}
public int pesquisarIndice(Map<Integer, Contato> mapContato) {
System.out.print("Digite algum dado referente ao contato: ");
String nome = input.next();
for (Integer keySet : mapContato.keySet()) {
Contato contato = mapContato.get(keySet);
if (contato.getNome().equals(nome)
|| contato.getCidade().equals(nome)
|| contato.getEmail().equals(nome)) {
return keySet;
}
}
return 0;
}
}
package visao;
import java.util.Scanner;
public class Menu {
public static int menuAplicacao() {
Scanner input = new Scanner(System.in);
System.out.println("\nAgenda de contatos\n");
System.out.println("1 - Adicionar contato(s)");
System.out.println("2 - Alterar contato");
System.out.println("3 - Excluir contato");
System.out.println("4 - Mostrar contatos");
System.out.println("5 - Pesquisar");
System.out.println("6 - Gravar");
System.out.println("7 - Sair");
System.out.print("Digite a opção: ");
return input.nextInt();
}
}
package visao;
import java.io.IOException;
import persistencia.MapContato;
import controle.AgendaVaziaException;
import controle.CampoBrancoException;
import controle.RegistroDuplicadoException;
public class Principal {
public static void main(String[] args) throws CampoBrancoException,
RegistroDuplicadoException, IOException, AgendaVaziaException {
MapContato mapContato = new MapContato();
int op = -1;
while (op != 7) {
op = Menu.menuAplicacao();
switch (op) {
case 1:
mapContato.adicionar();
break;
case 2:
mapContato.alterar();
break;
case 3:
mapContato.excluir();
break;
case 4:
System.out.println("\n" + mapContato);
break;
case 5:
mapContato.pesquisar();
break;
case 6:
mapContato.gravarAgenda();
break;
case 7:
System.out.println("Programa finalizado");
break;
default:
System.out.println("Opção inválida");
break;
}
}
}
}
bom tentei refatorar as classes, deixar mais separadas e conversando metodos e classes…
é isso…