Duvida com programa de agendamento

22 respostas
P

galera to com três dúvidas bem bestas mas nao consigo sair do canto..

tenho que fazer um programa que oferece um menu inicial ao usuario, ele escolhe uma opçao para adicionar um compromisso na sua agenda,
porem após todo o processamento ele nao retorna ao menu principal, abaixo segue o codigo pra uma melhor visualizaçao..

public class RaQuelendar1{
	
	public static void main(String[] args) throws Exception{
		Agenda1 agenda = new Agenda1();
		
		Scanner input = new Scanner(System.in);
		
		System.out.println("	MENU INICIAL	\n" +
				"a) Adicionar um compromisso na agenda;\n" +
				"b) Remover um compromisso;\n" + //cancelar
				"c) Pegar o primeiro (de acordo com a data) comprimisso confirmado;\n" +
				"d) Listar todos os comprimissos de um certo tipo;\n" +
				"e) Listar todos os compromissos dessa semana.;\n" + //BONUS
				"f) Listar todos os compromissos;\n" +
				"g) Confirmar um compromisso;\n" +
				"h) Para sair.\n");
		System.out.print("Digite aqui a sua opção: ");
		String opcao = input.nextLine().toLowerCase();
		
		while (true){
			if (opcao.equals("a")){
				String descricao, local;
				int dia, mes, ano;
				Classificacao tipo;
				Prioridade prioridade;
			
				System.out.println("\na) Adicionar um compromisso na agenda.");
			
				while (true){
					System.out.print("Descricão: ");
					descricao = input.nextLine();
					if (!(descricao==null||descricao.equals("")))
						break;
					System.out.println("Descrição inválida");
				}	
			
				while (true){
					System.out.print("Local: ");
					local = input.nextLine();
					if (!(local==null||local.equals("")))
						break;
					System.out.println("Local inválido");
				}
			
				while (true){
					System.out.println("Classificação: 1 - AULA, 2 - CINEMA, 3 - REUNIAO");
					System.out.print("Digite aqui a sua opção: ");
					String alternativa = input.nextLine();
				
					if (alternativa.equals("1")){
						tipo = Classificacao.AULA;
						break;
					}
					else if (alternativa.equals("2")){
						tipo = Classificacao.CINEMA;
						break;
					}
					else if(alternativa.equals("3")){
						tipo = Classificacao.REUNIAO;
						break;
					}
					System.out.println("OPÇÃO INVÁLIDA, DIGITE APENAS 1, 2 OU 3.");
				}
			
				while (true){
					System.out.println("Prioridade: 1 - ALTA, 2 - MEDIA, 3 - BAIXA");
					System.out.print("Digite aqui a sua opção: ");
					String alternativa = input.nextLine();
				
					if (alternativa.equals("1")){
						prioridade = Prioridade.ALTA;
						break;
					}
					else if (alternativa.equals("2")){
						prioridade = Prioridade.MEDIA;
						break;
					}
					else if (alternativa.equals("3")){
						prioridade = Prioridade.BAIXA;
						break;
					}
					System.out.println("OPÇÃO INVÁLIDA, DIGITE APENAS 1, 2 OU 3.");
				}
				
				while (true){
					System.out.println("Digite abaixo as especificações da data.");
					
					while (true){
						System.out.print("Dia: ");
						dia = input.nextInt();
						if (!(dia<1 || dia>31))
							break;
						System.out.println("Dia inválido.");
					}
					
					while (true){
						System.out.print("Mês: ");
						mes = input.nextInt();
						mes--;
						if (!(mes<0 || mes>11))
							break;
						System.out.println("Mês inválido.");
					}
					
					while (true){
						System.out.println("Ano: ");
						ano = input.nextInt();
						break;
					}
					break;
				}
				
				Calendar data = new GregorianCalendar(dia, mes, ano);
				Compromisso compromisso = new Compromisso(descricao, local, data, tipo, prioridade);
				agenda.addCompromisso(compromisso);
				System.out.println(compromisso);
				System.out.println("Compromisso adicionado com sucesso!");
			}
			
			if (opcao.equals("h"))
				System.exit(1);
		}
	}

}

ele volta para o procedimento do item a e já imprime a mensagem de erro e logo depois o prompt, queria saber tambem como eliminar isso,
e por ultimo tem a data, até agora to empancado nisso, vou dar um exemplo da saída..

Digite abaixo as especificações da data.
Dia: 23
Mês: 4
Ano: 2010
aula, ufcg - 30/09/0028 00:00
Compromisso adicionado com sucesso!

queria ajeitar essa data e nao sei o que diabos está acontecendo, qualquer ajuda será bem vinda :)

22 Respostas

P

up

marcelo.bellissimo

Cara, não faz isso… logo mais começam á te xingar se você ficar dando “up”… aqui não é Orkut…

P

Cara, não faz isso… logo mais começam á te xingar se você ficar dando “up”… aqui não é Orkut…

concerteza meu nobre, mas na hora do desespero tomamos atitudes drásticas :frowning:

Gustavokt

paulosouto:
galera to com três dúvidas bem bestas mas nao consigo sair do canto…

tenho que fazer um programa que oferece um menu inicial ao usuario, ele escolhe uma opçao para adicionar um compromisso na sua agenda,
porem após todo o processamento ele nao retorna ao menu principal, abaixo segue o codigo pra uma melhor visualizaçao…

Veja a condição de saída… Você colocou um while(true) e nenhum if vai forçar você sair desse laço

paulosouto:

ele volta para o procedimento do item a e já imprime a mensagem de erro e logo depois o prompt, queria saber tambem como eliminar isso,
e por ultimo tem a data, até agora to empancado nisso, vou dar um exemplo da saída…

Digite abaixo as especificações da data.
Dia: 23
Mês: 4
Ano: 2010
aula, ufcg - 30/09/0028 00:00
Compromisso adicionado com sucesso!

queria ajeitar essa data e nao sei o que diabos está acontecendo, qualquer ajuda será bem vinda :slight_smile:

Não entendi o 2o. problema…

A data você pode arrumar com o String.format()

PS: Não cheguei a testar o seu código

P

Gustavokt:
paulosouto:
galera to com três dúvidas bem bestas mas nao consigo sair do canto…

tenho que fazer um programa que oferece um menu inicial ao usuario, ele escolhe uma opçao para adicionar um compromisso na sua agenda,
porem após todo o processamento ele nao retorna ao menu principal, abaixo segue o codigo pra uma melhor visualizaçao…

Veja a condição de saída… Você colocou um while(true) e nenhum if vai forçar você sair desse laço

paulosouto:

ele volta para o procedimento do item a e já imprime a mensagem de erro e logo depois o prompt, queria saber tambem como eliminar isso,
e por ultimo tem a data, até agora to empancado nisso, vou dar um exemplo da saída…

Digite abaixo as especificações da data.
Dia: 23
Mês: 4
Ano: 2010
aula, ufcg - 30/09/0028 00:00
Compromisso adicionado com sucesso!

queria ajeitar essa data e nao sei o que diabos está acontecendo, qualquer ajuda será bem vinda :slight_smile:

Não entendi o 2o. problema…

A data você pode arrumar com o String.format()

PS: Não cheguei a testar o seu código

broder. se nao for incomodo, será q rolava tu reescrever o trecho pra fazer ele voltar ao menu inicial?

Gustavokt
System.out.println("    MENU INICIAL    \n" +  
                "a) Adicionar um compromisso na agenda;\n" +  
                "b) Remover um compromisso;\n" + //cancelar  
                "c) Pegar o primeiro (de acordo com a data) comprimisso confirmado;\n" +  
                "d) Listar todos os comprimissos de um certo tipo;\n" +  
                "e) Listar todos os compromissos dessa semana.;\n" + //BONUS  
                "f) Listar todos os compromissos;\n" +  
                "g) Confirmar um compromisso;\n" +  
                "h) Para sair.\n");  
        System.out.print("Digite aqui a sua opção: ");  
        String opcao = input.nextLine().toLowerCase();

Joga isso dentro do laço

P

e a respeito da data,
como eu faria?

Gustavokt

paulosouto:
e a respeito da data,
como eu faria?

Aqui fala sobre formatação
http://www.guj.com.br/posts/list/65422.java

P

Gustavokt:
paulosouto:
e a respeito da data,
como eu faria?

Aqui fala sobre formatação
http://www.guj.com.br/posts/list/65422.java

isso nem serve pra mim pq o meu parametro data é do tipo calendar,
se eu usar o simpledateformat vai converter pra string…

Gustavokt

Mas isso você deve usar no public String toString() da sua classe.

P

agora que eu fui ver,
eu ja to usando o simpledateformat

porem nao sei como tá com essa saída louca =/

Calendar data = new GregorianCalendar(dia, mes, ano, hora, minuto);

to criando a data desse jeito ae,
acho que tem alguma coisa a ver com a classe gregoriancalendar e calendar

B

Qual o código do método toString da tua classe Compromisso?

P

public String toString(){ return getDescricao() + ", " + getLocal() + " - " + new SimpleDateFormat("dd/MM/yyyy HH:mm").format(getData().getTime()); }

P

e agora surgiu outro problema,.
vamos aos fatos

if (opcao.equals("b")){
				System.out.println("b) Remover um compromisso.");
				
				while (true){
					System.out.print("Descricão: ");
					descricao = input.nextLine();
					if (!(descricao==null||descricao.equals("")))
						break;
					System.out.println("Descrição inválida");
				}	
			
				while (true){
					System.out.print("Local: ");
					local = input.nextLine();
					if (!(local==null||local.equals("")))
						break;
					System.out.println("Local inválido");
				}
			
				while (true){
					System.out.println("Classificação: 1 - AULA, 2 - CINEMA, 3 - REUNIAO");
					System.out.print("Digite aqui a sua opção: ");
					String alternativa = input.nextLine();
				
					if (alternativa.equals("1")){
						tipo = Classificacao.AULA;
						break;
					}
					else if (alternativa.equals("2")){
						tipo = Classificacao.CINEMA;
						break;
					}
					else if(alternativa.equals("3")){
						tipo = Classificacao.REUNIAO;
						break;
					}
					System.out.println("OPÇÃO INVÁLIDA, DIGITE APENAS 1, 2 OU 3.");
				}
			
				while (true){
					System.out.println("Prioridade: 1 - ALTA, 2 - MEDIA, 3 - BAIXA");
					System.out.print("Digite aqui a sua opção: ");
					String alternativa = input.nextLine();
				
					if (alternativa.equals("1")){
						prioridade = Prioridade.ALTA;
						break;
					}
					else if (alternativa.equals("2")){
						prioridade = Prioridade.MEDIA;
						break;
					}
					else if (alternativa.equals("3")){
						prioridade = Prioridade.BAIXA;
						break;
					}
					System.out.println("OPÇÃO INVÁLIDA, DIGITE APENAS 1, 2 OU 3.");
				}
				
				while (true){
					System.out.println("Data:");
					
					while (true){
						System.out.print("Dia: ");
						dia = input.nextInt();
						if (!(dia<1 || dia>31))
							break;
						System.out.println("Dia inválido.");
					}
					
					while (true){
						System.out.print("Mês: ");
						mes = input.nextInt();
						mes--;
						if (!(mes<0 || mes>11))
							break;
						System.out.println("Mês inválido.");
					}
					
					while (true){
						System.out.print("Ano: ");
						ano = input.nextInt();
						if (!(ano<2010))
							break;
						System.out.println("Ano inválido.");
					}
					
					while (true){
						System.out.print("Horas: ");
						hora = input.nextInt();
						if (!(hora<0 || hora>23))
							break;
						System.out.println("Horário inválido.");
					}
					
					while (true){
						System.out.print("Minutos: ");
						hora = input.nextInt();
						if (!(minuto<0 || minuto>59))
							break;
						System.out.println("Horário inválido.");
					}
					
					break;
				}
				
				Calendar data = new GregorianCalendar(dia, mes, ano, hora, minuto);
				Compromisso compromisso = new Compromisso(descricao, local, data, tipo, prioridade);
				
				if (agenda.checaCompromisso(compromisso)==true){
					agenda.cancelaCompromisso(compromisso);  //REMOÇAO DO COMPROMISO
					System.out.println(compromisso);
					System.out.println("Compromisso removido com sucesso!\n");
				}
				else if(agenda.checaCompromisso(compromisso)==false)
					System.out.println("Compromisso não existente.");
			}

quando eu vou remover um compromisso já adicionado ele acusa que o compromisso nao existe, e o problema é que ele quebra na exceção do método
alguem tem idéia do que seja?

P

pra finalizar tem esse dilema da data,
eis a saida;

Data:
Dia: 23
Mês: 4
Ano: 2010
Horas: 14
Minutos: 00
aula, ufcg - 30/09/0028 00:00
Compromisso adicionado com sucesso!

caso ajude eu to criando a data desse jeito
Calendar data = new GregorianCalendar(dia, mes, ano, hora, minuto)

Gustavokt

Sobre a data, se você olhar a documentação, vai perceber que não é assim que se inicia um Calendar. Veja qual é a ordem correta dos parâmetros…

Sem o código da sua classe agenda, não podemos te ajudar…

P

eis a classe Agenda1

package lp2.lab08;

import java.util.ArrayList;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.List;
import lp2.lab08.Compromisso.Classificacao;
import lp2.lab08.Compromisso.Estado;

/*
 * Aluno - Paulo Andre B Souto, 20921049
 */

public class Agenda1{
	
	private List<Compromisso> agenda;
	
	public Agenda1(){
		this.agenda = new ArrayList<Compromisso>();
	}
	
	public boolean addCompromisso(Compromisso compromisso) throws Exception{
		if (compromisso==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");	
		for (Compromisso objeto : agenda){
			if (objeto!=null){
				if (objeto.equals(compromisso))
					return false;
			}
		}
		agenda.add(compromisso);
		Collections.sort(agenda);
		return true;
	}
	
	public boolean cancelaCompromisso(Compromisso compromisso) throws Exception{
		if (compromisso==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");
		if (!(agenda.contains(compromisso)))
			throw new Exception("O COMPROMISSO NÃO EXISTE.");
		if (compromisso.getEstado().equals(Estado.CANCELADO))
			return false;
		compromisso.setEstado(Estado.CANCELADO);
		return true;
	}
	
	public boolean confirmaCompromisso(Compromisso compromisso) throws Exception{
		if (compromisso==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");
		if (!(agenda.contains(compromisso)))
			throw new Exception("O COMPROMISSO NÃO EXISTE.");
		if (compromisso.getEstado().equals(Estado.CONFIRMADO))
			return false;
		compromisso.setEstado(Estado.CONFIRMADO);
		return true;
	}
	
	public List<Compromisso> listaCompromissos(Estado estado) throws Exception{
		if (estado==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");
		List<Compromisso> lista = new ArrayList<Compromisso>();
		for (Compromisso compromisso : agenda){
			if (compromisso!=null){
				if (compromisso.getEstado().equals(estado))
					lista.add(compromisso);
			}
		}
		Collections.sort(lista);
		return lista;
	}
	
	public List<Compromisso> listaCompromissosDoTipo(Classificacao tipo) throws Exception{
		if (tipo==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");
		List<Compromisso> lista = new ArrayList<Compromisso>();
		for (Compromisso compromisso : agenda){
			if (compromisso!=null){
				if (compromisso.getTipo().equals(tipo))
					lista.add(compromisso);
			}
		}
		return lista;
	}
	
	public List<Compromisso> listaCompromissosDaSemana(){
		List<Compromisso> lista = new ArrayList<Compromisso>();
		GregorianCalendar dataAtual = new GregorianCalendar();
		for (Compromisso compromisso : agenda){
			if (compromisso!=null){
				if (compromisso.getData().equals(dataAtual))
					lista.add(compromisso);
			}
		}
		return lista;
	}
	
	public Compromisso takeCompromisso(){
		for (Compromisso compromisso : agenda){
			if (compromisso!=null){
				if (compromisso.getEstado().equals(Estado.CONFIRMADO)){
					agenda.remove(compromisso);
					return compromisso;
				}
			}	
		}
		return null;
	}
	
	public boolean checaCompromisso(Compromisso objeto){
		for (Compromisso compromisso : agenda){
			if (compromisso!=null){
				if (compromisso.equals(objeto))
					return true;
			}
		}
		return false;
	}

}
Gustavokt

Provavelmente faltou o compareTo na sua classe Compromisso… Sem ele, o java não tem como comparar o seus elementos. O que ele tenta naturalmente é comparar com o endereço de memória, se não me engano…
Se você tiver certeza de que a inserção foi feita corretamente (e que deve ter mesmo), sugiro você procurar sobre o compareTo()…

P

Gustavokt:
Provavelmente faltou o compareTo na sua classe Compromisso… Sem ele, o java não tem como comparar o seus elementos. O que ele tenta naturalmente é comparar com o endereço de memória, se não me engano…
Se você tiver certeza de que a inserção foi feita corretamente (e que deve ter mesmo), sugiro você procurar sobre o compareTo()…

já fiz o compareTo() em na classe Compromisso :frowning:

Gustavokt

Manda a classe Compromisso…
Copnseguiu ajeitar a data?

P
Gustavokt:
Manda a classe Compromisso... Copnseguiu ajeitar a data?
a data eu consegui

se ligae no codigo da classe Compromisso

package lp2.lab08;

import java.text.SimpleDateFormat;
import java.util.Calendar;

/*
 * Aluno - Paulo Andre B Souto, 20921049
 */

public class Compromisso implements Comparable<Compromisso>{
	
	public static enum Classificacao{
		AULA, CINEMA, REUNIAO;
	}
	
	public static enum Estado{
		A_CONFIRMAR, CANCELADO, CONFIRMADO;
	}
	
	public static enum Prioridade{
		ALTA, BAIXA, MEDIA;
	}
	
	private String descricao, local;
	private Calendar data;
	private Classificacao tipo;
	private Prioridade prioridade;
	private Estado estadoAtual;
	
	public Compromisso(String descricao, String local, Calendar data, 
			Classificacao tipo, Prioridade prioridade) throws Exception{
		if (descricao==null || local==null || data==null)
			throw new IllegalArgumentException("VALOR INVÁLIDO.");
		this.local = local;
		this.descricao = descricao;
		this.data = data;
		this.tipo = tipo;
		this.prioridade = prioridade;
		estadoAtual = Estado.A_CONFIRMAR;
	}
	
	public Calendar getData(){
		return data;
	}
	
	public String getDescricao(){
		return descricao;
	}
	
	public Estado getEstado(){
		return estadoAtual;
	}
	
	public String getLocal(){
		return local;
	}
	
	public Prioridade getPrioridade(){
		return prioridade;
	}
	
	public Classificacao getTipo(){
		return tipo;
	}
	
	public void setData(Calendar data){
		this.data = data;
	}
	
	public void setDescricao(String descricao){
		this.descricao = descricao;
	}
	
	public void setEstado(Estado estado){
		estadoAtual = estado;
	}
	
	public void setLocal(String local){
		this.local = local;
	}
	
	public void setPrioridade(Prioridade prioridade){
		this.prioridade = prioridade;
	}
	
	public void setTipo(Classificacao tipo){
		this.tipo = tipo;
	}
	
	public String toString(){
		return getDescricao() + ", " + getLocal() + " - " + 
		new SimpleDateFormat("dd/MM/yyyy HH:mm").format(getData().getTime());
	}
	
	public boolean equals(Compromisso objeto){
		if (!(objeto instanceof Compromisso))
			return false;
		Compromisso outro = (Compromisso) objeto;
		return getData().equals(outro.getData()) && 
		getDescricao().equals(outro.getDescricao()) && 
		getLocal().equals(outro.getLocal()); 
	}
	
	public int compareTo(Compromisso outro){  
		return this.data.compareTo(outro.data);
	}
	
}
Gustavokt

Arrumou também quando você cria a instância antes de remover?
Aparentemente você está fazendo certo, mas tente verificar se os parâmetros realmente estão batendo… As vezes por cause de um espaço em branco mais, a verificação falha… Você não consegue fazer debugs?

Criado 22 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 22
Participantes 4