Advertisement
Guest User

Untitled

a guest
Jun 14th, 2012
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct func{
  6.    
  7.     int codigo;
  8.     char nome[50];
  9.     char endereco[100];
  10.     int cpf;
  11.     int numVendas;
  12.     int ativo;
  13.  
  14.  
  15. } strFunc;
  16.  
  17. int retornaIndice(codigo){
  18.  
  19.     int i=0;
  20.     strFunc tmpFunc;
  21.     FILE *ptFile;
  22.    
  23.     ptFile = fopen("funcionarios.dat", "rb+");
  24.    
  25.     while(!feof(ptFile)){
  26.    
  27.         fseek(ptFile, sizeof(strFunc)*i, SEEK_SET);
  28.         fread(&tmpFunc, sizeof(strFunc), 1, ptFile);          
  29.        
  30.         if(codigo != 0 && tmpFunc.ativo){                  
  31.            if(tmpFunc.codigo == codigo){
  32.               return i;                              
  33.            }                  
  34.         }
  35.                    
  36.         i++;          
  37.                    
  38.     }
  39.  
  40.     fclose(ptFile);
  41.  
  42.     return i;
  43.    
  44. }
  45.  
  46. int existeFuncionario(int opcao, int chaveInt, char chaveChar[100]){
  47.  
  48.     int i=0;
  49.     strFunc tmpFunc;
  50.     FILE *ptFile;
  51.    
  52.     ptFile = fopen("funcionarios.dat", "rb+");
  53.    
  54.     while(!feof(ptFile)){
  55.    
  56.         fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
  57.         fread(&tmpFunc, sizeof(strFunc), 1, ptFile);
  58.        
  59.         if(opcao == 1){ //busca pelo código
  60.             if(tmpFunc.codigo == chaveInt){
  61.                 fclose(ptFile);              
  62.                 return 1;
  63.             }
  64.         } else { //busca pelo nome
  65.             if(strcmp(chaveChar, tmpFunc.nome) == 0){
  66.                 return 1;
  67.             }
  68.         }
  69.        
  70.         i++;
  71.                          
  72.     }
  73.  
  74.     fclose(ptFile);
  75.    
  76.     return 0;
  77.    
  78. }
  79.  
  80. strFunc infoFuncionario(codigo){
  81.  
  82.     int i=0;
  83.     strFunc funcionario;
  84.     FILE *ptFile;
  85.    
  86.     ptFile = fopen("funcionarios.dat", "rb+");
  87.    
  88.     if(!ptFile){
  89.         printf("declarar erro");            
  90.     }
  91.    
  92.     while(!feof(ptFile)){
  93.    
  94.         fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
  95.         fread(&funcionario, sizeof(strFunc), 1, ptFile);
  96.        
  97.         if(funcionario.codigo == codigo){
  98.             return funcionario;
  99.         }
  100.        
  101.         i++;
  102.                          
  103.     }
  104.    
  105.     fclose(ptFile);
  106.    
  107.     return funcionario;
  108.        
  109. }
  110.  
  111. void fazAlteracao(strFunc novoFunc, int indice){
  112.      
  113.      int i=0, total;
  114.      strFunc tmp;
  115.      FILE *ptFile;
  116.  
  117.      ptFile = fopen("funcionarios.dat", "r+");
  118.      
  119.      if(!ptFile){
  120.          printf("Erro");            
  121.      }
  122.      
  123.      fseek(ptFile, indice*sizeof(strFunc), SEEK_SET);
  124.      if(fwrite(&novoFunc, sizeof(strFunc), 1, ptFile)){
  125.          printf("\nAlteracao concluida\n");                      
  126.      } else {
  127.          printf("\nErro ao alterar funcionario\n");      
  128.      }
  129.      
  130.      fclose(ptFile);
  131.      
  132. }
  133.  
  134. void cadastraFuncionario(){
  135.    
  136.     strFunc tmpFunc;
  137.     int ultimoCodigo, prosseguir, cpf, i, total = 100, ehRepetido = 0;
  138.     char tmpNome;
  139.     FILE *ptFile;
  140.    
  141.     ptFile = fopen("funcionarios.dat", "ab+");
  142.     ultimoCodigo = retornaIndice();
  143.  
  144.     if(ultimoCodigo == 100){
  145.         printf("Máximo de funcionários cadasatrados");
  146.     } else {
  147.        
  148.         tmpFunc.codigo = ultimoCodigo;
  149.         tmpFunc.numVendas = 0;
  150.         tmpFunc.ativo = 1;
  151.  
  152.         printf("\n Nome: ");
  153.         scanf("%s", tmpFunc.nome);
  154.         fflush(stdin);
  155.         printf(" Endereco: ");
  156.         scanf("%s", tmpFunc.endereco);
  157.         fflush(stdin);
  158.         printf(" CPF (numeros somente): ");
  159.         scanf("%d", &tmpFunc.cpf);
  160.         fflush(stdin);
  161.        
  162.         printf("\nAdicionar funcionário com as seguintes características: \n\n Codigo: %d\n Nome: %s\n Endereço: %s\n CPF: %d\n\n", tmpFunc.codigo, &tmpFunc.nome, &tmpFunc.endereco, tmpFunc.cpf);
  163.         printf("\nDigite 1 para efetuar o cadastro ou 0 para corrigir: ");
  164.         scanf("%d", &prosseguir);
  165.        
  166.         if(!prosseguir){
  167.             fclose(ptFile);
  168.             cadastraFuncionario();
  169.         }
  170.        
  171.        
  172.         if(existeFuncionario(2, 0, tmpFunc.nome)){
  173.             ehRepetido = 1;
  174.         }
  175.        
  176.         if(ehRepetido){
  177.             printf("\nEsse funcionário já está cadastrado\n\n");
  178.         } else {
  179.            
  180.             ptFile = fopen("funcionarios.dat", "r+w");
  181.             fseek(ptFile, 0, SEEK_END);
  182.            
  183.             if(fwrite(&tmpFunc, sizeof(strFunc), 1, ptFile) == 1){
  184.                 printf("\nFuncionário cadastrado com sucesso\n");
  185.             } else {
  186.                 printf("\nFalha ao cadastrar funcionário\n");
  187.             }
  188.            
  189.         }
  190.        
  191.         fclose(ptFile);
  192.        
  193.     }
  194.    
  195.    
  196. }
  197.  
  198. void alteraFuncionario(strFunc funcionario, int tipo){
  199.    
  200.     int i=0, opcao, indice, alteracao;
  201.     FILE *ptFile;
  202.     strFunc tmpFunc;
  203.     char charAlteracao[100];
  204.    
  205.     indice = retornaIndice(funcionario.codigo);  
  206.      
  207.     switch(tipo){
  208.    
  209.         case 0: //ainda nao sei o que o usuario quer alterar
  210.              
  211.              printf("\nEditar: \n\n [1] - Nome\n [2] - Endereco\n [3] - CPF \n [4] - Numero de vendas\n [5] - Recadastrar (alterar TUTO)\n [0] - Retornar ao menu principal\n\nEscolha: ");
  212.              scanf("%d", &opcao);
  213.              
  214.              switch(opcao){
  215.              
  216.                  case 0:
  217.                       opcao = 9;
  218.                  case 1:
  219.                  case 2:
  220.                  case 3:
  221.                  case 4:
  222.                  case 5:    
  223.                       alteraFuncionario(funcionario, opcao);                                    
  224.                       break;          
  225.                            
  226.              }
  227.              
  228.              break;
  229.         case 1: //alterar o nome
  230.        
  231.              printf("\nAntigo nome: %s\n Novo nome: ", funcionario.nome);
  232.              scanf("%s", funcionario.nome);
  233.              fflush(stdin);
  234.              
  235.              alteracao = 1;
  236.              
  237.              break;
  238.         case 2: //alterar o endereco
  239.        
  240.              printf("\nAntigo endereco: %s\n Novo endereco: ", funcionario.endereco);
  241.              scanf("%s", funcionario.endereco);
  242.              fflush(stdin);
  243.              
  244.              alteracao = 1;
  245.              
  246.              break;
  247.         case 3: //alterar o cpf
  248.        
  249.              printf("\nAntigo CPF: %d\n Novo CPF: ", funcionario.cpf);
  250.              scanf("%d", &funcionario.cpf);
  251.              fflush(stdin);
  252.              
  253.              alteracao = 1;
  254.              
  255.              break;
  256.         case 4: //alterar o num vendas
  257.        
  258.              printf("\nAntigo numero de vendas: %d\n Novo numero de vendas: ", funcionario.numVendas);
  259.              scanf("%d", &funcionario.numVendas);
  260.              fflush(stdin);
  261.              
  262.              alteracao = 1;
  263.              
  264.              break;
  265.         case 5: //alterar tuto
  266.        
  267.              printf("Antigo nome: %s\n Novo nome: ", funcionario.nome);
  268.              scanf("%s", funcionario.nome);
  269.              fflush(stdin);
  270.              printf("Antigo endereco: %s\n Novo endereco: ", funcionario.endereco);
  271.              scanf("%s", funcionario.endereco);
  272.              fflush(stdin);
  273.              printf("Antigo CPF: %d\n Novo CPF: ", funcionario.cpf);
  274.              scanf("%d", &funcionario.cpf);
  275.              fflush(stdin);
  276.              printf("Antigo numero de vendas: %d\n Novo numero de vendas: ", funcionario.numVendas);
  277.              scanf("%d", &funcionario.numVendas);
  278.              fflush(stdin);
  279.              
  280.              alteracao = 1;
  281.              
  282.              break;
  283.         case 8: //deletar esse funcionario
  284.  
  285.              funcionario.ativo = 0;
  286.              alteracao = 1;
  287.              
  288.              break;                                    
  289.                  
  290.     }
  291.    
  292.     if(alteracao){
  293.    
  294.         fazAlteracao(funcionario, indice);
  295.                  
  296.     }
  297.    
  298. }
  299.  
  300. void exibeFuncionario(){
  301.      
  302.     strFunc funcionario;
  303.     int codigo, existe=0, posicao, i=0, prosseguir=1, opcao=0;
  304.     FILE *ptFile;
  305.    
  306.     ptFile = fopen("funcionarios.dat", "rb+");
  307.    
  308.     if(!ptFile){
  309.        printf("Errrr tratar");        
  310.     }
  311.    
  312.     printf("\nDigite o codigo do funcionario: ");
  313.     scanf("%d", &codigo);
  314.    
  315.     if(existeFuncionario(1, codigo, 0)){
  316.  
  317.         funcionario = infoFuncionario(codigo);                            
  318.                            
  319.         printf("\n Codigo: %d\n Nome: %s \n Endereco: %s \n CPF: %d\n Numero de vendas: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas);          
  320.         printf("\nOpcoes: \n\n [1] - Editar dados \n [2] - Deletar funcionario \n [0] - Voltar ao menu principal\n\nEscolha: ");
  321.         scanf("%d", &opcao);
  322.        
  323.         switch(opcao){
  324.             case 1:
  325.                  alteraFuncionario(infoFuncionario(codigo), 0);
  326.                  break;
  327.             case 2: //deletar
  328.                  alteraFuncionario(infoFuncionario(codigo), 8);
  329.                  break;
  330.             case 0:
  331.                  break;
  332.             default:
  333.                  printf("Opcao invalida!");
  334.                  break;
  335.         }
  336.  
  337.     } else {
  338.         printf("\nFuncionario nao encontrado!! \n\n [1] - Fazer outra pesquisa\n [0] - Voltar ao menu principal\n");
  339.         scanf("%d", &prosseguir);  
  340.         if(prosseguir){
  341.             exibeFuncionario();                
  342.         }
  343.     }
  344.    
  345.     fclose(ptFile);
  346.    
  347. }
  348.  
  349. void listaFuncionarios(tipo){
  350.  
  351.     int i, total, entrada;
  352.     strFunc funcionario;
  353.     FILE *ptFile;
  354.  
  355.     ptFile = fopen("funcionarios.dat", "rb+");
  356.    
  357.     total = retornaIndice();
  358.     printf("\n");
  359.    
  360.     switch(tipo){
  361.  
  362.        case 0:
  363.             break;
  364.        case 1: //exibe funcionarios ativos somente
  365.        
  366.             if(total == 1){
  367.                 printf("Nao existem funcionarios cadastrados\n");        
  368.             }
  369.  
  370.             for(i=1;i<total;i++){
  371.  
  372.                 fseek(ptFile, (i-1)*sizeof(strFunc), SEEK_SET);
  373.                 fread(&funcionario, sizeof(strFunc), 1, ptFile);
  374.  
  375.                 if(funcionario.codigo != 0 && funcionario.ativo){
  376.  
  377.                     printf("Codigo: %d; Nome: %s; Endereco: %s; CPF: %d; Vendas: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas);
  378.  
  379.                 }
  380.  
  381.             }
  382.            
  383.             break;
  384.        case 2: //exibe todos funcionarios
  385.        
  386.             if(total == 1){
  387.                 printf("\nNao existem funcionarios cadastrados\n");        
  388.             }
  389.  
  390.             for(i=0;i<total;i++){
  391.  
  392.                 fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
  393.                 fread(&funcionario, sizeof(strFunc), 1, ptFile);
  394.  
  395.                 if(funcionario.codigo != 0){
  396.  
  397.                     printf("Codigo: %d; Nome: %s; Endereco: %s; CPF: %d; Vendas: %d; Ativo: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas, funcionario.ativo);
  398.  
  399.                 }
  400.  
  401.             }
  402.            
  403.             break;        
  404.         default:
  405.            
  406.             printf(" [1] - Exibir os funcionarios ativos\n [2] - Exibir todos os funcionarios\n [0] - Voltar ao menu principal\n\nEscolha: ");
  407.             scanf("%d", &entrada);
  408.            
  409.             switch(entrada){
  410.            
  411.                 case 1:
  412.                      listaFuncionarios(1);
  413.                      break;
  414.                 case 2:
  415.                      listaFuncionarios(2);
  416.                      break;    
  417.                            
  418.             }
  419.                
  420.             break;        
  421.                  
  422.     }
  423.  
  424. }
  425.  
  426. int main(){
  427.    
  428.     int menuController = 1, mainInput;
  429.     int cadastrosAlterados = 0, cadastrosFeitos = 0;
  430.     int i, total=100;
  431.     FILE *ptFile;
  432.     strFunc funcionario[total];
  433.  
  434.     while(menuController){
  435.    
  436.         printf("\nEscolha uma opcao:\n\n [1] - Cadastrar novo funcionário \n [2] - Procurar funcionario \n [3] - Listar todos os funcionarios\n [0] - Sair do menu\n\nEscolha: ");
  437.         scanf("%d", &mainInput);
  438.  
  439.         ptFile = fopen("funcionarios.dat", "ab+");
  440.  
  441.         if(!ptFile) {
  442.             printf("Arquivo nao pode ser lido\n");
  443.             mainInput = 0;
  444.            
  445.         }
  446.        
  447.         switch(mainInput){
  448.  
  449.             case 1:
  450.                 cadastraFuncionario();
  451.                 break;
  452.             case 2:
  453.                 exibeFuncionario();
  454.                 break;
  455.             case 3 :
  456.                 listaFuncionarios();
  457.                 break;
  458.             case 0:
  459.                 menuController = 0;
  460.                 break;
  461.             default:
  462.                 printf("Opção inválida\n");
  463.                 break;
  464.  
  465.         }
  466.  
  467.     }
  468.    
  469.     fclose(ptFile);
  470.  
  471.     printf("Sessão terminada, %d cadastros alterados e %d cadastros feitos", cadastrosAlterados, cadastrosFeitos);
  472.  
  473.    
  474.     return 0;
  475.    
  476. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement