Gera Relatório

Pessoal! se alguém puder me ajudar ficarei grato, não consigo implentar na linha // IMPLEMENTE AQUI, não consigo desenvolver esse código alguém pode me ajudar.

Obs.: o ArquivoPonto.txt já está criado e o relatorio.txt também já está criado…

se alguém pode me ajudar ficarei grato…


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;


public class CJPontoTads 
{
	//Atributos da classe
	private CDadosPontoFuncionario[] vetFuncionarios = null;
	private int iAno = 0;
	private String sMes = "";
	private int iTotalDiasTrabalhados = 0;
	private int iQtdFuncionarios = 0;
	
	/***********************************************************
	*Nome: CJPontoTads()
	*Descrição: construtor da classe
	*Parametros: Nenhum
	*Retorno: Nenhum
	************************************************************/
	public CJPontoTads()
	{
		leArquivo();
		geraRelatorio();
	}
	
	/***********************************************************
	*Nome: leArquivo()
	*Descrição: realiza a leitura do arquivo de entrada
	*Parametros: Nenhum
	*Retorno: Nenhum
	************************************************************/
	public void leArquivo()
	{
		//Variáveis locais utilizadas para a abertura do arquivo
		File prArquivo = null;
		FileReader prLeitorArquivo = null;
		BufferedReader prBufferLeitura = null;
		
		try
		{
			//Abertura do arquivo
			prArquivo = new File(getClass().getResource("ArquivoPonto.txt").toURI());
			
			//Verifica se o arquivo existe
			if (!prArquivo.exists())
			{
				System.out.println("Nao foi possivel abrir o arquivo");
				System.exit(1);
			}
			
			//Cria os objetos de leitura
			prLeitorArquivo = new FileReader(prArquivo);
			prBufferLeitura = new BufferedReader(prLeitorArquivo);
			
			//Extrai a primeira linha do arquivo contendo mês e ano
			StringTokenizer stQuebra = new StringTokenizer(prBufferLeitura.readLine(),";");
			sMes = stQuebra.nextToken();
			iAno = Integer.parseInt(stQuebra.nextToken());
			
			//Extrai a segunda e terceira linhas contendo o total de dias trabalhados e número de funcionários
			iTotalDiasTrabalhados = Integer.parseInt(prBufferLeitura.readLine()); 
			iQtdFuncionarios = Integer.parseInt(prBufferLeitura.readLine()); 
			
			//Aloca recursos com base nos dados lidos
			alocaMemoria();

			//Verifica se a memória foi alocada
			if(vetFuncionarios == null)
			{
				System.out.println("Memória não alocada");
				System.exit(1);
			}
			
			//Realiza a leitura dos dados de ponto do mês para os funcionários
			for (int iIndice=0; iIndice < (iTotalDiasTrabalhados * iQtdFuncionarios); iIndice++)
			{
				stQuebra = new StringTokenizer(prBufferLeitura.readLine(),";");
				
				//Obtem os tokens da linha (nome, dia, ponto manha, ponto tarde)
				String sTempNome = stQuebra.nextToken();
				
				//Obtem o indice a ser inserido
				int iPosicao = insereRegistro(sTempNome);
				
				//Verifica se o funcionário já foi cadastrado no vetor
				if (vetFuncionarios[iPosicao].getNome().equals(""))
				{
					vetFuncionarios[iPosicao].setNome(sTempNome);
				}
				
				//Obtém o dia do ponto
				int iDia = Integer.parseInt(stQuebra.nextToken());
				
				//Insere os demais dados do funcionario
				vetFuncionarios[iPosicao].setPontoManhaDia(iDia-1, Integer.parseInt(stQuebra.nextToken()));
				vetFuncionarios[iPosicao].setPontoTardeDia(iDia-1, Integer.parseInt(stQuebra.nextToken()));
			}
			
			//Fecha os objetos de leitura
			prBufferLeitura.close();
			prLeitorArquivo.close();
		}
		catch(Exception e)
		{
			System.out.println("Erro durante a leitura do arquivo");
		}
	}
	
	/***********************************************************
	*Nome: alocaMemoria()
	*Descrição: responsável por alocar a memória para os objetos de classe
	*Parametros: Nenhum
	*Retorno: Nenhum
	************************************************************/
	public void alocaMemoria()
	{
		// IMPLEMENTE AQUI
	}
	
	/***********************************************************
	*Nome: insereRegistro()
	*Descrição: responsável por verificar a posição em que o funcionnário será inserido
	*Parametros: String
	*Retorno: int
	************************************************************/
	public int insereRegistro(String sNome)
	{
		//Percorre o vetor de funcionários para avaliar a posição de insersao
		for (int iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
		{
			if (vetFuncionarios[iFuncionario].getNome().equals(sNome) || vetFuncionarios[iFuncionario].getNome().equals(""))
			{
				return iFuncionario;
			}
		}
		return -1;
	}
	
	/***********************************************************
	*Nome: geraRelatorio()
	*Descrição: realiza a escrita do arquivo de saida
	*Parametros: Nenhum
	*Retorno: Nenhum
	************************************************************/
	public void geraRelatorio()
	{
		// IMPLEMENTE AQUI
	}
	
	/***********************************************************
	*Nome: main()
	*Descrição: método principal de um programa Java
	*Parametros: String[]
	*Retorno: Nenhum
	************************************************************/
	public static void main(String args[])
	{
		new CJPontoTads();
	}
}

Pra mim não faz nenhum sentido aquilo, como assim alocar memória para os objetos? Não necessitamos disso em java (pelo menos não que eu saiba, e já trabalho com java há 6 anos e nunca precisei de algo parecido).

Poderia explicar do que se trata?

Olá javer.

O trabalho desse colega é igual ao meu. Ele não foi claro no pedido.
O projeto é formado por 3 classes, faltam 2. Trata-se de um programa que lê o ArquivoPontos.txt com esse formato:
Novembro;2010
20
5
João Paulo;1;1;1
Paula Miranda;1;1;1
Fernando Dias;1;1;1
Ana Paula;1;1;1
Lucas Silva;1;1;1
Ana Paula;2;1;1
Lucas Silva;2;1;1
João Paulo;2;0;1
Paula Miranda;2;1;1
Fernando Dias;2;1;1
Ana Paula;3;1;1
João Paulo;3;1;1
Paula Miranda;3;1;1
Lucas Silva;3;1;1
Fernando Dias;3;1;1
Fernando Dias;4;1;1
João Paulo;4;1;0
Paula Miranda;4;1;1
Ana Paula;4;1;1
Lucas Silva;4;1;1
João Paulo;5;1;1
Ana Paula;5;1;1
Lucas Silva;5;1;1
Fernando Dias;5;1;1
Paula Miranda;5;1;1
João Paulo;6;0;1
Paula Miranda;6;1;1
Ana Paula;6;1;1
Lucas Silva;6;1;1 (está incompleto).

esta classe:

public class CDadosPontoFuncionario
{
//Atributos da classe
private String sNome = null;
private CPonto[] vetPonto = null;

/***********************************************************
*Nome: CDadosPontoFuncionario()
*Descrição: Construtor da classe
*Parametros: Nenhum
*Retorno: Nenhum
************************************************************/
public CDadosPontoFuncionario()
{
	sNome = "";
}

/***********************************************************
*Nome: alocaVetorPonto()
*Descrição: método que aloca o vetor de pontos
*Parametros: int
*Retorno: Nenhum
************************************************************/
public void alocaVetorPonto(int iTotalDias)
{
	vetPonto = new CPonto[iTotalDias];
	for (int iIndice = 0; iIndice < iTotalDias; iIndice++)
	{
		vetPonto[iIndice] = new CPonto();
	}
}

/***********************************************************
*Nome: setPontoManhaDia()
*Descrição: permite alterar o ponto do turno da manhã para o dia especificado
*Parametros: int, int
*Retorno: Nenhum
************************************************************/
public void setPontoManhaDia(int iDia, int iPonto)
{
	vetPonto[iDia].setManha(iPonto);
}

/***********************************************************
*Nome: setPontoTardeDia()
*Descrição: permite alterar o ponto do turno da tarde para o dia especificado
*Parametros: int,int
*Retorno: Nenhum
************************************************************/
public void setPontoTardeDia(int iDia, int iPonto)
{
	vetPonto[iDia].setTarde(iPonto);
}

/***********************************************************
*Nome: getPontoManhaDia()
*Descrição: permite obter o ponto do turno da manhã para o dia especificado
*Parametros: int
*Retorno: int
************************************************************/
public int getPontoManhaDia(int iDia)
{
	return vetPonto[iDia].getManha();
}

/***********************************************************
*Nome: getPontoTardeDia()
*Descrição: permite obter o ponto do turno da manha para o dia especificado
*Parametros: int
*Retorno: int
************************************************************/
public int getPontoTardeDia(int iDia)
{
	return vetPonto[iDia].getTarde();
}

/***********************************************************
*Nome: getNome()
*Descrição: permite obter nome do funcionario
*Parametros: void
*Retorno: String
************************************************************/
public String getNome()
{
	return sNome;
}

/***********************************************************
*Nome: setNome()
*Descrição: permite configurar o nome do funcionario
*Parametros: String
*Retorno: void
************************************************************/
public void setNome(String sNome)
{
	this.sNome = sNome;
}

}

e esta última:

public class CPonto
{
//Atributos da classe
private int iManha;
private int iTarde;

/***********************************************************
*Nome: CPonto()
*Descrição: Construtor da classe
*Parametros: Nenhum
*Retorno: Nenhum
************************************************************/
public CPonto()
{
	iManha = 0;
	iTarde = 0;
}

/***********************************************************
*Nome: getManha()
*Descrição: retorna o valor do ponto para o turno da manha
*Parametros: Nenhum
*Retorno: int
************************************************************/
public int getManha()
{
	return iManha;
}

/***********************************************************
*Nome: setManha()
*Descrição: permite configurar o valor do ponto para o turno da manha
*Parametros: int
*Retorno: Nenhum
************************************************************/
public void setManha(int iManha)
{
	this.iManha = iManha;
}

/***********************************************************
*Nome: getTarde()
*Descrição: retorna o valor do ponto para o turno da tarde
*Parametros: Nenhum
*Retorno: int
************************************************************/
public int getTarde()
{
	return iTarde;
}

/***********************************************************
*Nome: setTarde()
*Descrição: permite configurar o valor do ponto para o turno da tarde
*Parametros: Nenhum
*Retorno: int
************************************************************/
public void setTarde(int iTarde)
{
	this.iTarde = iTarde;
}

}

O programa após o desenvolvimento deve gerar o relatório neste formato:

Relatório mensal de ponto: Novembro de 2010
Total de dias trabalhados na empresa: 20

Nome do funcionário: João Paulo
Dias e turnos não trabalhados: 2 M 4 T 6 M 9 T 11 T
Total de turnos não trabalhados: 5
Porcentagem de turnos trabalhados: 88 %

Nome do funcionário: Paula Miranda
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Fernando Dias
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Ana Paula
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Lucas Silva
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Isso também serve para o BEIJAMEK que está mais envolvido que você.

Em alocaMemoria(), faça isso:

int iFuncionario = 0;
vetFuncionarios = new CDadosPontoFuncionario[iQtdFuncionarios];
for( iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++ )
{
vetPontoDia = new CPonto[iTotalDiasTrabalhados];
vetFuncionarios[iFuncionario].alocaVetorPonto(iTotalDiasTrabalhados);
}

em geraRelatorio() isso:

	int j = 0;
	int i = 0;
	int totalTurnos = ( iTotalDiasTrabalhados * iQtdFuncionarios );
	double iTaxa = 0;
	String iNome;		

	try
	{
		//Abertura do arquivo
		FileWriter relatorio = new FileWriter( new File("relatorio.txt"));
		
        relatorio.write("Relatório mensal de ponto: "+sMes+" de "+iAno+"\r\n");
        relatorio.write("Total de dias trabalhados na empresa: " + iTotalDiasTrabalhados + "\n" +"\r\n");
        relatorio.write("\r\n");
		while( j < iQtdFuncionarios )
		{
			//relatorio.write("Nome do funcionário: "+ vetFuncionarios[j].getNome() +"\r\n" );
			relatorio.write("Nome do funcionário: " + "\r\n" );
			for( i=0; i < iTotalDiasTrabalhados; i++ ){
				//relatorio.write("Dia: " + iDia +"\r\n" );
				relatorio.write("Manhã: " + (i+1) + "\r\n" );
			}
			relatorio.write("Dias e turnos não trabalhados: " +"\r\n" );
			relatorio.write("Total de turnos não trabalhados: " +"\r\n" );
			j++;
			iTaxa = (17.5 / iTotalDiasTrabalhados);
			iTaxa = iTaxa * 100;
			relatorio.write("Porcentagem de turnos trabalhados: "+ Math.round(iTaxa) + " %" + "\r\n");
			relatorio.write("\r\n");
		}
		//relatorio.write("Total de turnos: "+ totalTurnos +"\r\n" );
		//relatorio.write("\nTotal de funcionarios: "+j +"\r\n" );
	    relatorio.close();
	}
	catch(Exception ex)
	{
		System.out.println( "Erro ao criar o arquivo relatorio.txt: "+ex.getMessage() );
	}
}

e verá que as coisas começam acontecer, mais ainda não está concluído. A alocação de memória ou ionstaciação do objeto é para acessar os dados dos pontos dos funcionários ( ± isso).

Até+

[quote=javer]Pra mim não faz nenhum sentido aquilo, como assim alocar memória para os objetos? Não necessitamos disso em java (pelo menos não que eu saiba, e já trabalho com java há 6 anos e nunca precisei de algo parecido).

Poderia explicar do que se trata?[/quote]
Pelo que eu estudei, quando você digita

String[] array = new String[10];

Você está alocando a memória para o array :stuck_out_tongue:

Mas fora isso eu também não sei de nada que seja necessário ‘alocar memória’ em Java…

[edit]Na verdade quando você digita isso você está programando, mas deu pra entender né rsrs[/edit]

O programa depois de concluído fará a leitura destes dados de um arquivo-texto (no nosso ArquivoPonto.txt).
Novembro;2010
20
5
João Paulo;1;1;1
Paula Miranda;1;1;1
Fernando Dias;1;1;1
Ana Paula;1;1;1
Lucas Silva;1;1;1
Ana Paula;2;1;1
Lucas Silva;2;1;1
João Paulo;2;0;1
Paula Miranda;2;1;1
Fernando Dias;2;1;1
Ana Paula;3;1;1
João Paulo;3;1;1
Paula Miranda;3;1;1
Lucas Silva;3;1;1
Fernando Dias;3;1;1
Fernando Dias;4;1;1
João Paulo;4;1;0
Paula Miranda;4;1;1
Ana Paula;4;1;1
Lucas Silva;4;1;1
João Paulo;5;1;1
Ana Paula;5;1;1
Lucas Silva;5;1;1
Fernando Dias;5;1;1
Paula Miranda;5;1;1
João Paulo;6;0;1
Paula Miranda;6;1;1
Ana Paula;6;1;1
Lucas Silva;6;1;1
Fernando Dias;6;1;1
João Paulo;7;1;1
Ana Paula;7;1;1
Lucas Silva;7;1;1
Paula Miranda;7;1;1
Fernando Dias;7;1;1
João Paulo;8;1;1
Ana Paula;8;1;1
Lucas Silva;8;1;1
Fernando Dias;8;1;1
Paula Miranda;8;1;1
João Paulo;9;1;0
Fernando Dias;9;1;1
Paula Miranda;9;1;1
Ana Paula;9;1;1
Lucas Silva;9;1;1
Lucas Silva;10;1;1
João Paulo;10;1;1
Paula Miranda;10;1;1
Ana Paula;10;1;1
Fernando Dias;10;1;1
Paula Miranda;11;1;1
João Paulo;11;1;0
Ana Paula;11;1;1
Lucas Silva;11;1;1
Fernando Dias;11;1;1
Ana Paula;12;1;1
Lucas Silva;12;1;1
João Paulo;12;1;1
Paula Miranda;12;1;1
Fernando Dias;12;1;1
João Paulo;13;1;1
Paula Miranda;13;1;1
Ana Paula;13;1;1
Lucas Silva;13;1;1
Fernando Dias;13;1;1
João Paulo;14;1;1
Lucas Silva;14;1;1
Paula Miranda;14;1;1
Ana Paula;14;1;1
Fernando Dias;14;1;1
João Paulo;15;1;1
Paula Miranda;15;1;1
Ana Paula;15;1;1
Lucas Silva;15;1;1
Fernando Dias;15;1;1
Lucas Silva;16;1;1
João Paulo;16;1;1
Paula Miranda;16;1;1
Ana Paula;16;1;1
Fernando Dias;16;1;1
João Paulo;17;1;1
Paula Miranda;17;1;1
Ana Paula;17;1;1
Lucas Silva;17;1;1
Fernando Dias;17;1;1
Ana Paula;18;1;1
Lucas Silva;18;1;1
Fernando Dias;18;1;1
João Paulo;18;1;1
Paula Miranda;18;1;1
João Paulo;19;1;1
Paula Miranda;19;1;1
Ana Paula;19;1;1
Lucas Silva;19;1;1
Fernando Dias;19;1;1
João Paulo;20;1;1
Paula Miranda;20;1;1
Ana Paula;20;1;1
Lucas Silva;20;1;1
Fernando Dias;20;1;1

e gera outro arquivo (no nosso caso relatorio.txt) , não necessariamente, com este contéudo.

Relatório mensal de ponto: Novembro de 2010
Total de dias trabalhados na empresa: 20

Nome do funcionário: João Paulo
Dias e turnos não trabalhados: 2 M 4 T 6 M 9 T 11 T
Total de turnos não trabalhados: 5
Porcentagem de turnos trabalhados: 88 %

Nome do funcionário: Paula Miranda
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Fernando Dias
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Ana Paula
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Nome do funcionário: Lucas Silva
Dias e turnos não trabalhados:
Total de turnos não trabalhados: 0
Porcentagem de turnos trabalhados: 100 %

Se não desenvolver o código do método alocaMemoria(), o relatório não será gerado. Inclusive essa é a nossa tarefa, pois se trata de um trabalho da faculdade.

Então é melhor esse professor rever os conceitos, posso estar enganado mas esse conceito de alocar memória não se aplica nesse contexto.

Mas como eu disse, posso estar enganado, tem muita gente aqui que deve entender mais que eu e opinar também sobre isso.