Ir para conteúdo

POWERED BY:

Arquivado

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

eversonwolf

Arquivo

Recommended Posts

Estou com problema em abrir o arquivo, ele salva quando executa o programa pela primeira vez e depois que fecha o programa, ao abri-lo e cadastrar mais pessoas

ele não salva, as vezes salva e mostra nas pesquisas que o arquivo não foi encontrado e repete variaz vezes no relatório.

#include <stdio.h>    //Declara biblioteca funções de entrada e saida de dados!!!
#include <stdlib.h>   //Declara biblioteca para o uso dos comandos do dos "EM WINDONS"!!!
#include <string.h>
#include <conio.c>
#define TAMANHO 100
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
struct dados_funcionario
{
   int matricula,cargo;
   int vazio;
   char nome[50];
   unsigned long int rg;  // Estrutura para Armazenar os dados pessoais do funcionário!!!
   char cpf[12];
   unsigned long int cel,tel;
   float horas_trab,horas_ext,salario,bonif;
   float perc_bonif;
} funcionario[100]; // Endereçamento!!!
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Funções Utilizadas no Sistema!!!
int raiz=0;
void menu(); // Função para exibir o menu!!!
void cadastrar (); // Função para efetuar o cadastro!!!
void pesquisar_nome(char nome[50]); // Função para efetuar a pesquisa pelo nome!!!
void pesquisar_cod(); // Função para efetuar a pesquisa pelo código!!!
int verifica_pos();//Função para verificar posição do código no sistema!!!
int verifica_mat(int matricula); //Função para verificar a matricula do funcionario!!!
void relatorio(); // Função para exibir o relatorio!!!
void calc_salario(); // Função para efetuar o calculo do salario!!!
void imprim_master();//Função para imprimir o nome MASTER SISTEMAS!!!
void carregar();//Função para carregar os arquivos que foram salvos no sistema!!!
void salvar();//Função para salvar todos os dados em um arquivos binario

//DECLARAÇÃO DE VARIAVEL GLOBAL

int i,opcao;
int pos;

int main(void) // Inicio da função Main (Função Principal)!!!
{

   carregar();
   menu();


}//Final da Main (Função Principal)!!!
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void menu(void) // Função que Exibe o Menu Principal do Programa!!!
{
   char nome[50];
   int i, posicao, mataux, retorno; // Mensagem Inicial do Sistema!!!
   textcolor(11);
   printf("********************************************************************************");
   printf ("\n                  UNIVERSIDADE DO ESTADO DE MATRO GROSSO/UNEMAT\n\t\t   CAMPUS UNIVERSITARIO DO VALE DO TELES PIRES\n\t\t\tLICENCIATURA PLENA EM COMPUTACAO\n\t      ASPECTOS FORMAIS DA COMPUTACAO E ALGORITMOS II - AFCA-II\n");
   printf("********************************************************************************\n");
   printf("********************************************************************************");
   printf ("\n        PROGRAMA DESENVOLVIDO PARA A PRATICA DE ENSINO DE ALGORITMOS  II \n");
   printf("********************************************************************************\n");
   printf("ACADEMICOS:\t\t\t\tPROFESSOR:\n\t   Alexandro \t\t\t\t  Maicon A. Sartin\n\t   Douglas\n\t   Everson\n\t   Uanderson\n\t   Venerson\n");
   printf("********************************************************************************\n\n\n\n");
   textcolor(10);
   imprim_master();
   system("pause");
   system("cls");
   // Mensagem Inicial do Sistema!!!
   system("color 1F");
   //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
   //do
   while(opcao!=6)
   {
       // Menu principal!!!
       textcolor(10);
       printf("\t----------------------------------------------------------\n");
       printf("\t|                       Empresa ABC                      |\n");
       printf("\t----------------------------------------------------------\n");
       printf("\t----------------------------------------------------------\n");
       printf("\t\|***********   Sistema de Bonificacao Natalina  ***********|\n");
       printf("\t----------------------------------------------------------\n");
       textcolor(7);
       printf("\n\tMENU PRINCIPAL\n\n"); // Menu principal!!!
       printf("\t\t[1]--CADASTRAR\n\n\t\t[2]--PESQUISAR PELO NOME\n\n\t\t[3]--PESQUISAR PELO CODIGO\n\n\t\t[4]--RELATORIO\n\n\t\t[5]--SALVAR\n\n\t\t[6] --SAIR\n\n\tEscolha  uma Opcao.: ");
       //Variavel para receber a opção escolhida!!!
       scanf("%d",&opcao);
       system("cls");

       switch(opcao) // Switch para escolher as opções do menu principal!!!
       {
       case 1:   //CADASTRAR
           textcolor(10);
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\t\t\t\t  CADASTRAR\n\n");
           printf("--------------------------------------------------------------------------------\n");
           textcolor(11);
           posicao=verifica_pos();
           if (posicao!=-1)
           {
               do
               {
                   printf("\n\tINFORME A MATRICULA DO FUNCIONARIO (Somente numeros): ");
                   do
                   {
                       scanf("\t%d",&mataux);
                       //system("cls");
                       if(mataux<0)
                       {
                           printf("\n\tMATRICULA ERRADA!\n\n\tDIGITE A MATRICULA NOVAMENTE!(Somente numeros e Positivos): ");
                       }
                   }
                   while(mataux < 0);
                   fflush(stdin); //fflush(stdin) serve para limpar o buffer do teclado.
                   retorno=verifica_mat(mataux);
                   if (retorno==1)
                   {
                       cadastrar(mataux,posicao);
                       do
                       {
                           printf("\n\t\t         CADASTRO EFETUADO COM SUCESSO.\n\n\t---------------------------------------------------------------\n\n\tO QUE DESEJA FAZER AGORA?\n\n\t\t[1] - CADASTRAR OUTRO\n\n\t\t[2] - VOLTAR AO MENU PRINCIPAL\n\n");
                           scanf("%d",&opcao);
                           system("cls");
                           if(opcao<1 || opcao>2)
                           {
                               printf("OPCAO INVALIDA! DIGITE NOVAMENTE\n\n");
                           }
                       }
                       while (opcao<1 || opcao>2);
                   }
                   else
                       printf("\nCodigo ja existente\n");
               }
               while(opcao!=2);
           }
           else
               printf("\nNao e possivel realizar mais cadastros!\n");
           salvar();
           break;
       case 2:
           //system("color 0F");
           textcolor(10);
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\t\t\t\t  PESQUISAR PELO NOME\n\n");
           printf("--------------------------------------------------------------------------------\n");
           textcolor(11);
           pos=verifica_pos();
           pesquisar_nome(nome);
           break;

       case 3:
           textcolor(10);
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\t\t\t\t  PESQUISAR PELO CODIGO\n\n");
           printf("--------------------------------------------------------------------------------\n");
           textcolor(11);
           pos=verifica_pos();
           pesquisar_cod();
           break;

       case 4:
           //system("color 8F");
           textcolor(10);
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\t\t\t\t  RELATORIO\n\n");
           printf("--------------------------------------------------------------------------------\n");
           textcolor(11);
           relatorio();
           break;

           //    case 5: // Mensagem exibida ao finalizar o programa!!!

           //       salvar();
           //        break;

       case 6: // Mensagem exibida ao finalizar o programa!!!
           //    salvar();
           //   printf("\a");
           system("color FC");
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\nDADOS SALVOS COM SUCESSO!\n\nOBRIGADO POR ESCOLHER ESTE SOFTWARE!!!\n\n");
           printf("--------------------------------------------------------------------------------\n");
           getchar();
           break;
       }
       if(opcao<1 || opcao> 6)
       {
           printf("OPCAO INVALIDA! DIGITE NOVAMENTE\n\n");
       }

   }

}

void cadastrar (int matricula, int pos) // Função para Efetuar o Cadastro do Funcionário!!!
{


   pos=verifica_pos();
   funcionario[pos].matricula=matricula;
   //getchar();
   printf("\n\tNOME.: ");
   gets(funcionario[pos].nome);
   printf("\n\tCELULAR.: ");
   scanf("%ld",&funcionario[pos].cel);
   printf("\n\tTELEFONE.: ");
   scanf("%ld",&funcionario[pos].tel);
   printf("\n\tRG.: ");
   scanf("%ld",&funcionario[pos].rg);
   printf("\n\tCPF.: ");
   scanf("%s",&funcionario[pos].cpf);
   printf("\n\tTIPO DE CARGO:\n\n\t[1] - AUXILIAR [2] - SUPERVISOR - [3] - GERENTE\n");

   do
   {
       printf("\n\tINFORME O CARGO.: ");
       scanf("\t%d",&funcionario[pos].cargo);
       system("cls");
       if ( funcionario[pos].cargo < 1 || funcionario[pos].cargo >3 )
       {
           printf ("\nESCOLHA UMA OPCAO: \n\n\t[1] - AUXILIAR [2] - SUPERVISOR - [3] - GERENTE\n");
       }
   }
   while ( funcionario[pos].cargo < 1 || funcionario[pos].cargo >3 );
   printf("\n\t----------------------------------------------------------------------\n");
   if(funcionario[pos].cargo == 1)
   {
       funcionario[pos].cargo=15.00;
       funcionario[pos].perc_bonif=0.25;
       printf("\n\tAUXILIAR!\n\n");


   }
   if(funcionario[pos].cargo == 2)
   {
       funcionario[pos].cargo=35.00;
       funcionario[pos].perc_bonif=0.15;

       printf("\n\tSUPERVISOR!\n\n");


   }
   if(funcionario[pos].cargo == 3)
   {
       funcionario[pos].cargo=60.00;
       funcionario[pos].perc_bonif=0.10;
       printf("\n\tGERNETE!\n\n");

   }
   printf("\n\t----------------------------------------------------------------------\n");
   printf("\n\tHORAS TRABALHADAS.: ");
   scanf("%f",&funcionario[pos].horas_trab);
   printf("\n\tHORAS EXTRAS.: ");
   scanf("%f",&funcionario[pos].horas_ext);
   calc_salario();
   raiz=raiz+1;
   printf("\n%d",raiz);
   funcionario[pos].vazio=1;
   printf("\n--------------------------------------------------------------------------------\n\n");
   printf("\n--------------------------------------------------------------------------------\n\n");
   getchar();
}
//FUNÇÃO VERIFICA POSIÇÃO
int verifica_pos()
{
   int cont=0;
   while (cont<=100)
   {
       if (funcionario[cont].vazio==0)
           return(cont);
       cont++;
   }
   return(-1);
}

//FUNÇÃO VERIFICA CODIGO
int verifica_mat(int matricula)
{
   int cont=0;
   while (cont<=100)
   {
       if (funcionario[cont].matricula==matricula)
           return(0);
       cont++;
   }
   return(1);
}
void pesquisar_cod()// inicio da Função para efetuar a pesquisa pelo código!!!
{
   do
   {
       int cod, cont=0;
       printf(" INFORME A MATRICULA A SER PESQUISADO: ");
       scanf("%d",&cod);
       while (cont<=TAMANHO)
       {

           if(funcionario[cont].matricula == cod)
           {
               if (funcionario[cont].vazio==1)
               {
                   printf("\n--------------------------------------------------------------------------------\n\n");
                   printf("\nFUNCIONARIO ENCONTRADO \n");
                   printf("\n--------------------------------------------------------------------------------\n\n");
                   printf("\t MATRICULA     : %d\n",funcionario[cont].matricula);
                   printf("\t NOME          : %s\n",funcionario[cont].nome);
                   printf("\t CELULAR       : %ld\n",funcionario[cont].cel);
                   printf("\t TELEFONE      : %ld\n",funcionario[cont].tel);
                   printf("\t RG            : %ld\n",funcionario[cont].rg);
                   printf("\t CPF           : %s\n",funcionario[cont].cpf);
                   if(funcionario[cont].cargo==15)
                   {
                       printf("\t CARGO         : AUXILIAR\n");
                   }
                   else if(funcionario[cont].cargo==35)
                   {
                       printf("\t CARGO         : SUPERVISOR\n");
                   }
                   else
                   {
                       printf("\t CARGO         : GERENTE\n");
                   }
                   printf("\t HORAS TRAB    : %.2f\n",funcionario[cont].horas_trab);
                   printf("\t VAL HORAS TRAB: R$ %.2f\n",funcionario[cont].horas_trab*funcionario[cont].cargo);
                   printf("\t HORAS EXTRAS  : %.2f\n",funcionario[cont].horas_ext);
                   printf("\t VAL HORAS EXT : R$ %.2f\n",((funcionario[cont].horas_ext*funcionario[cont].cargo)+(funcionario[cont].horas_ext*funcionario[cont].cargo*50)/100));
                   printf("\t BONIFICACAO   : R$ %.2f\n",funcionario[cont].bonif);
                   printf("\t SALARIO TOTAL : R$ %.2f\n",funcionario[cont].salario+funcionario[cont].bonif);

                   getchar();
                   printf("\n");
                   break;
               }

           }
           cont++;
           if (cont>100)
               printf("\nMATRICULA NAO ENCONTRADA\n");
       }
       printf("\n--------------------------------------------------------------------------------\n\n");
       do
       {
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\n\t\t        PESQUIZA POR MATRICULA EFETUADA COM SUCESSO.\n\n\t---------------------------------------------------------------\n\n\tO QUE DESEJA FAZER AGORA?\n\n\t\t[1] - PESQUISAR OUTRO CODIGO\n\n\t\t[2] - VOLTAR AO MENU PRINCIPAL\n\n");
           scanf("%d",&opcao);
           system("cls");
           if(opcao < 1 || opcao > 2)
           {
               printf("OPCAO INVALIDA!\n\n");
           }
       }
       while(opcao < 1 || opcao > 2);
   }
   while(opcao!=2);
}

void pesquisar_nome(char nome [50])// inicio da Função para efetuar a pesquisa pelo código!!!
{
   do
   {
       int cont=0;
       printf(" INFORME O NOME A SER PESQUISADO: ");
       scanf("%s",nome);
       while (cont<=100)
       {
           if (strcmp(nome,funcionario[cont].nome)==0)
           {
               if (funcionario[cont].vazio==1)
               {
                   printf("\n--------------------------------------------------------------------------------\n\n");
                   printf("\nFUNCIONARIO ENCONTRADO \n");
                   printf("\n--------------------------------------------------------------------------------\n\n");
                   printf("\t MATRICULA     : %d\n",funcionario[cont].matricula);
                   printf("\t NOME          : %s\n",funcionario[cont].nome);
                   printf("\t CELULAR       : %ld\n",funcionario[cont].cel);
                   printf("\t TELEFONE      : %ld\n",funcionario[cont].tel);
                   printf("\t RG            : %ld\n",funcionario[cont].rg);
                   printf("\t CPF           : %s\n",funcionario[cont].cpf);
                   if(funcionario[cont].cargo==15)
                   {
                       printf("\t CARGO         : AUXILIAR\n");
                   }
                   else if(funcionario[cont].cargo==35)
                   {
                       printf("\t CARGO         : SUPERVISOR\n");
                   }
                   else
                   {
                       printf("\t CARGO         : GERENTE\n");
                   }
                   //printf("\t CARGO         : %d\n",funcionario[i].cargo);
                   printf("\t HORAS TRAB    : %.2f\n",funcionario[cont].horas_trab);
                   printf("\t VAL HORAS TRAB: R$ %.2f\n",funcionario[cont].horas_trab*funcionario[cont].cargo);
                   printf("\t HORAS EXTRAS  : %.2f\n",funcionario[cont].horas_ext);
                   printf("\t VAL HORAS EXT : R$ %.2f\n",((funcionario[cont].horas_ext*funcionario[cont].cargo)+(funcionario[cont].horas_ext*funcionario[cont].cargo*50)/100));
                   printf("\t BONIFICACAO   : R$ %.2f\n",funcionario[cont].bonif);
                   printf("\t SALARIO TOTAL : R$ %.2f\n",funcionario[cont].salario+funcionario[cont].bonif);
                   //cont = cont + 1;
                   getchar();
                   printf("\n");
                   break;
               }
           }
           cont++;
           if (cont>100)
               printf("\nFUNCIONARIO NAO ENCONTRADO\n");
       }
       printf("\n--------------------------------------------------------------------------------\n\n");
       do
       {
           printf("\n--------------------------------------------------------------------------------\n\n");
           printf("\n\t\t        PESQUIZA PELO NOME REALIZADA COM SUCESSO.\n\n\t---------------------------------------------------------------\n\n\tO QUE DESEJA FAZER AGORA?\n\n\t\t[1] - PESQUISAR OUTRO CODIGO\n\n\t\t[2] - VOLTAR AO MENU PRINCIPAL\n\n");
           scanf("%d",&opcao);
           system("cls");
           if(opcao < 1 || opcao > 2)
           {
               printf("OPCAO INVALIDA!\n\n");
           }
       }
       while (opcao < 1 || opcao > 2);
   }
   while(opcao!=2);
}

void relatorio()
{
   int cont=0;
   //if (funcionario[cont].vazio==1)
   //      {
   // if (raiz==0)
   // {
   //     printf("NAO EXISTE DADOS NO SISTEMA!\n");
   // }
   // else
   // {
   printf(" %d CADASTRO(S) NO REGISTRO\n",(raiz));
   printf("\nMATRICULA    NOME\t   CARGO\t SALARIO     BONIFICACAO      SAL TOTAL");
   printf("\n--------------------------------------------------------------------------------");
   for(cont=0; cont<raiz; cont++)
   {
       printf("\n %d\t   %s\t",funcionario[cont].matricula, funcionario[cont].nome);
       if(funcionario[cont].cargo==15)
       {
           printf("  AUXILIAR\t");
       }
       else if(funcionario[cont].cargo==35)
       {
           printf("  SUPERVISOR\t");
       }
       else
       {
           printf("  GERENTE\t");
       }
       printf("R$%.2f      R$%.2f\t      R$%.2f",funcionario[cont].salario,funcionario[cont].bonif,funcionario[cont].salario+funcionario[cont].bonif);
   }
   printf("\n--------------------------------------------------------------------------------");
   //}
   //}
   printf("\n--------------------------------------------------------------------------------\n\n");
   printf("\n--------------------------------------------------------------------------------\n\n");
   printf("\n\t\t        RELATORIO EXIBIDO COM SUCESSO.\n\n\t---------------------------------------------------------------\n\n\tPRESSIONE [2] PARA VOLTAR AO MENU PRINCIPAL: ");
   do
   {
       scanf("%d",&opcao);
       system("cls");
       if(opcao<2 || opcao>2)
           printf("\n\nDIGITE [2] PARA VOLTAR AO MENU PRINCIPAL: ");
   }
   while(opcao<2 || opcao>2);
}
void calc_salario() // inicio da Função para efetuar o calculo do salario!!!
{

   funcionario[pos].salario=((funcionario[pos].horas_trab*funcionario[pos].cargo)+((funcionario[pos].horas_ext*funcionario[pos].cargo)+(funcionario[pos].horas_ext*funcionario[pos].cargo*50)/100));
   printf("\n\tSALARIO: %.2f\n",funcionario[pos].salario);

   calc_bonif();
   printf("\n\n\tSALARIO MAIS BONIFICACAO: %.2f\n",funcionario[i].salario+funcionario[i].bonif);
   pos++;
}
void calc_bonif() // inicio da Função para efetuar o calculo da bonficiação!!!
{
   funcionario[pos].bonif=(funcionario[pos].salario*funcionario[pos].perc_bonif);
   printf("\n\tBONIFICACAO: %.2f",funcionario[pos].bonif);

}

void imprim_master()
{
   printf("\n\n\t\t\t\t\t\tDesenvolvimento MASTER SISTEMAS\n\n\n\n");
}
//FUNÇÃO PARA CARREGAR O ARQUIVO
void carregar(void)
{
   FILE *fp;
   int i;

   if ((fp=fopen("cadastro.txt", "r"))==NULL)
   {
       printf("O arquivo nao pode ser aberto.\n");
       return;
   }
   verifica_pos();
   for (i=0; i<TAMANHO; i++)
   {
       if (fread(&funcionario[i], sizeof(struct dados_funcionario), 1, fp)!=1)
       {
           if (feof(fp))
               break;
           printf("Erro de leitura no arquivo.\n");
       }
   }
   raiz=i-1;
   fclose(fp);
   printf("\n---------------------------------------------------------------------\n");
   printf("Dados carregados com sucesso!\n");
   //printf("Melhor visualizado em tela cheia.\n");
   printf("\n---------------------------------------------------------------------\n");
   system("pause");
   system("cls");
}
void salvar(void)
{
   FILE *fp;
   int i;

   if ((fp=fopen("cadastro.txt", "a"))==NULL)
   {
       printf("O arquivo nao pode ser aberto.\n");
       return;
   }
   for (i=0; i<raiz; i++)
   {
       if (funcionario[i].matricula>0)
       {
           if (fwrite(&funcionario[i], sizeof(struct dados_funcionario), 1, fp)!=1)
               printf("Erro de escrita no arquivo.\n");
       }
   }
   fclose(fp);
   printf("Arquivo Salvo.\n");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já usei o a+.

Eu exucuto o programa e cadastro uns dois ou três funcionarios, ele salva corretamente, mostra nas pesquisas

e no relatorio,mas depois de fechá-lo e abrir novamente ele carrega os arquivos, nas pesquisas funciona corretamente, porém no relatorio ele mostra só o primeiro cadastro e substitui os outros pelo primeiro, por exemplo se tem 3 cadastros, mostra os tres iguais ao primeiro digitado. E também se efetuar um novo cadastro, esse cadastro aparece nas pequisas, mas ao fechá-lo e executá-lo não aparece nas pesquisas "cadastro não encontrado" e no relatório dobra a quantidade de arquivo que estavam salvos, por exemplo se tinha 15 vai para 30 automaticamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.