Ir ao conteúdo
  • Cadastre-se

relógioponto


mauzec3

Posts recomendados

não consigo resolver o código abaixo. Fiz algumas tentativas. Não tive sucesso. Peço ajuda. Obrigado.

//Bibliotecas utilizadas
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Estrutura utilizada para armazenar o ponto de um dia (turnos da manhã e noite)
typedef struct sPontoDia
{
int iManha;
int iTarde;
}
stPontoDia;

//Estrutura utilizada para armazenar os dados de um funcionário (nome e informações sobre os pontos)
typedef struct sDadosPonto
{
char sNome[50];
stPontoDia* vPontoDia;
}
stDadosPonto;

//Variáveis globais
// Registros de ponto dos funcionários
stDadosPonto* prDadosPonto = NULL;
// Quantidade de funcionários da empresa
int iQtdFuncionarios = 0;
// Total de dias trabalhados na empresa
int iTotalDiasTrabalhados = 0;
// Mês e Ano de um determinado período de trabalho
char sMes[20];
int iAno = 0;

//Protótipos das funções
void leArquivo(void);
void alocaMemoria(void);
void inicializa(void);
int insereRegistro(char*);
void geraRelatorio(void);
void desalocaMemoria(void);

/***********************************************************
*Nome: main()
*Descrição: função principal da aplicação
*Parametros: int, int**
*Retorno: int
************************************************************/
int main(int argc, int* argv[])
{
leArquivo();
geraRelatorio();
desalocaMemoria();
return 0;
}

/***********************************************************
*Nome: leArquivo()
*Descrição: função utilizada para leitura de dados do arquivo
*Parametros: void
*Retorno: void
************************************************************/
void leArquivo(void)
{
//Variáveis locais
FILE* prArquivo = NULL;
char sTempNome[50];
char sLinha[100];
int iDia = 0;
int iFuncionario = 0;
int iContador = 0;

//Realiza abertura do arquivo
prArquivo = fopen("ArquivoPonto.txt","r");

//Verifica se o arquivo foi aberto com sucesso
if (!prArquivo)
{
printf("Erro ao tentar abrir o arquivo ponto!");
exit(1);
}

//Le a primeira linha do arquivo e quebra os tokens (mes e ano)
fgets(sLinha,100,prArquivo);
strcpy(sMes,strtok(sLinha,";"));
iAno = atoi(strtok(NULL,";"));

//Le a segunda e terceira linha do arquivo linha do arquivo (quantidade de dias do mês que foram trabalhados na empresa e a quantidade de funcionários da empresa)
fgets(sLinha,100,prArquivo);
iTotalDiasTrabalhados = atoi(sLinha);
fgets(sLinha,100,prArquivo);
iQtdFuncionarios = atoi(sLinha);

//Aloca a memória para a estrutura
alocaMemoria();

//Verifica se a memória foi alocada
if (!prDadosPonto)
{
printf("Memoria nao alocada!");
exit(0);
}

//Inicializa a estrutura
inicializa();

//Realiza a leitura das linhas restantes do arquivo que representam o total de dias trabalhados na empresa * total de funcionarios
for(iContador = 0; iContador< (iTotalDiasTrabalhados * iQtdFuncionarios); iContador++)
{
//Le a linha do arquivo e quebra os tokens
fgets(sLinha,100,prArquivo);

//Quebra os tokens da linha
strcpy(sTempNome,strtok(sLinha,";"));

//Verifica a posicao de onde o registro será inserido
iFuncionario = insereRegistro(sTempNome);

//Verifica se do funcionário já foi cadastrado no vetor
if (strcmp(prDadosPonto[iFuncionario].sNome,"")==0)
{
strcpy(prDadosPonto[iFuncionario].sNome,sTempNome);
}

//Realiza a leitura do dia e valores de ponto para manhã e tarde
iDia = atoi(strtok(NULL,";"));
prDadosPonto[iFuncionario].vPontoDia[iDia-1].iManha= atoi(strtok(NULL,";"));
prDadosPonto[iFuncionario].vPontoDia[iDia-1].iTarde= atoi(strtok(NULL,";"));
}

//Fecha o arquivo
fclose(prArquivo);
}

/***********************************************************
*Nome: alocaMemoria()
*Descrição: função utilizada para alocar memória para armazenar os registros de ponto dos funcionários
*Parametros: void
*Retorno: void
************************************************************/
void alocaMemoria(void)
{
// IMPLEMENTE AQUI
}

/***********************************************************
*Nome: inicializa()
*Descrição: inicializa a estrutura de armazenamento dos registros de ponto dos funcionários
*Parametros: void
*Retorno: void
************************************************************/
void inicializa(void)
{
//Variáveis locais
int iFuncionario=0, iDia=0;

for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
{
strcpy(prDadosPonto[iFuncionario].sNome,"");
for (iDia = 0; iDia < iTotalDiasTrabalhados; iDia++)
{
prDadosPonto[iFuncionario].vPontoDia[iDia].iManha = 0;
prDadosPonto[iFuncionario].vPontoDia[iDia].iTarde = 0;
}
}
}


/***********************************************************
*Nome: desalocaMemoria()
*Descrição: função utilizada para liberar a memória alocada
*Parametros: void
*Retorno: void
************************************************************/
void desalocaMemoria(void)
{
//Variáveis locais
int iFuncionario = 0;

//Libera o vetor de dias para cada funcionario
for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
{
free(prDadosPonto[iFuncionario].vPontoDia);
}

//Libera o vetor de pontos
free(prDadosPonto);
}

/***********************************************************
*Nome: insereRegistro()
*Descrição: função que verifica em que posição o registro contendo as informações do funcionario será inserido
*Parametros: char*
*Retorno: void
************************************************************/
int insereRegistro(char* sNome)
{
//Variáveis locais
int iFuncionario = 0;

//Percorre o vetor de funcionários para avaliar a posição de insersao
for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
{
if (strcmp(prDadosPonto[iFuncionario].sNome,sNome) == 0 || strcmp(prDadosPonto[iFuncionario].sNome,"")==0)
{
return iFuncionario;
}
}
return -1;
}

/***********************************************************
*Nome: geraRelatorio()
*Descrição: função utilizada para gerar relatório mensal de ponto dos funcionários (relatorio.txt)
*Parametros: void
*Retorno: void
************************************************************/
void geraRelatorio(void)
{
// IMPLEMENTE AQUI
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!