fpontesmorales

pratica09 - arquivos

Sep 28th, 2011
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.78 KB | None | 0 0
  1. /*6) Considerando o arquivo contendo registros gravados com os seguintes campos:
  2.     codmat  código do material - numérico inteiro
  3.     nomat nome do material
  4.     qtest quantidade em estoque - numérico inteiro
  5.     qtmin quantidade mínima - numérico inteiro
  6.     prunit preço unitário - numérico real.
  7.  
  8.     a) Fazer a alteração automática do preço unitário de todos os materiais. O usuário deverá fornecer o índice de reajuste.
  9.     b) Exibir na tela código e nome do material cuja quantidade em estoque seja inferior ou igual a quantidade mínima.*/
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #pragma pack (1)
  14.  
  15. typedef struct {
  16.     int codmat;         //codigo do material
  17.     char nomat[30];     //nome do material
  18.     int qtest;      //quantidade em estoque
  19.     int qtmin;      //quantidade mínima
  20.     float prunit;       //preço unitário
  21. } estrutura;
  22.  
  23. int main (void){
  24.    
  25. int escolha;
  26.     for (;;){
  27.  
  28.     system("clear");
  29.  
  30.     printf("____________________Cadastro de produtos___________________\n\n");
  31.     printf("\nDigite a opção desejada:\n\n");
  32.     printf("[1] Cadastrar produtos\n");
  33.     printf("[2] Reajustar valores\n");
  34.     printf("[3] Ver itens com estoque abaixo do mínimo\n");
  35.     printf("[4] Ver todos os ítens\n");
  36.     printf("[9] Sair\n\n");
  37.     printf("Opcao escolhida: ");
  38.     scanf("%d", &escolha);
  39.  
  40.     switch(escolha){
  41.  
  42.         case 1:
  43.             cadastrar();
  44.         break;
  45.  
  46.         case 2:
  47.             reajustar_valores();
  48.         break;
  49.  
  50.         case 3:
  51.             ver_estoque();
  52.         break;
  53.  
  54.     case 4:
  55.             ver_tudo();
  56.         break;
  57.  
  58.         case 9:
  59.         system("clear");
  60.                 exit(1);
  61.  
  62.         default :
  63.             system("clear");
  64.             printf("Digite uma opcao valida.");
  65.             sleep(3);
  66.             system("clear");
  67.             break;
  68.         }
  69.     }  
  70. }
  71.  
  72. cadastrar(){
  73.  
  74.     FILE *bd;
  75.     estrutura cadastro;
  76.  
  77.     system("clear");
  78.  
  79.     printf("\nCadastro de Material:\n\n");
  80.  
  81.     printf("Digite o CÓDIGO do material: ");
  82.     scanf("%d", &cadastro.codmat);
  83.     printf("Digite o NOME do material: ");
  84.     __fpurge(stdin);
  85.     gets(cadastro.nomat);
  86.     printf("Digite a quantidade ATUAL em ESTOQUE: ");
  87.     scanf("%d", &cadastro.qtest);
  88.     printf("Digite o a quantidade MINIMA para o material: ");
  89.     scanf("%d", &cadastro.qtmin);
  90.     printf("Digite o preço unitário do material: ");
  91.     scanf("%f", &cadastro.prunit);
  92.  
  93.     if((bd=fopen("cadastro.data", "a+b")) == NULL) {
  94.         printf("Erro ao abrir o arquivo. O programa foi abortado.\n");
  95.         exit(1);}
  96.  
  97.     fwrite(&cadastro,sizeof(cadastro),1,bd);
  98.     fclose(bd);
  99.  
  100. }
  101.  
  102. reajustar_valores(){
  103.  
  104.     FILE *bd, *temp;
  105.     estrutura cadastro, tempor;
  106.     float reajuste;
  107.     int n, aux;
  108.  
  109.     system("clear");
  110.     printf("\nDigite o valor da PORCENTAGEM reajuste desejado: ");
  111.     scanf("%f", &reajuste);
  112.  
  113.     printf("\n");
  114.  
  115.     if((bd=fopen("cadastro.data", "a+b")) == NULL) {
  116.         printf("Erro ao abrir o arquivo. O programa foi abortado.\n");
  117.         exit(1);}
  118.  
  119.     if((temp=fopen("temp.data", "w+b")) == NULL) {
  120.         printf("Erro ao abrir o arquivo. O programa foi abortado.\n");
  121.         exit(1);}
  122.  
  123.     n = n_registros(bd);
  124.  
  125.     for( aux=0 ; aux<n ; aux++ ){
  126.    
  127.         fread(&cadastro,sizeof(cadastro),1,bd);
  128.         if (feof(bd))break;
  129.  
  130.         else{
  131.         tempor.prunit = cadastro.prunit + ((cadastro.prunit/100) * reajuste);  
  132.         tempor.codmat = cadastro.codmat;
  133.         strcpy(tempor.nomat, cadastro.nomat);
  134.         tempor.qtest = cadastro.qtest;
  135.         tempor.qtmin = cadastro.qtmin;
  136.         fwrite(&tempor,sizeof(estrutura),1,temp);
  137.             printf("Item %d - Preço R$ %.2f atualizado para R$ %.2f \n" ,cadastro.codmat, cadastro.prunit ,tempor.prunit);
  138.         }
  139.     }
  140.     fclose(bd);
  141.     fclose(temp);
  142.     system("rm cadastro.data");
  143.     system("mv temp.data cadastro.data");
  144.     printf("\nAperte ENTER para continuar.");
  145.     __fpurge(stdin);
  146.     getchar();
  147.     system("clear");
  148. }
  149.  
  150. ver_estoque(){
  151.  
  152.     system("clear");
  153.  
  154.     FILE *bd;
  155.     estrutura cadastro;
  156.     int n , aux;
  157.  
  158.     if((bd=fopen("cadastro.data", "r+b")) == NULL) {
  159.         printf("Erro ao abrir o arquivo. O programa foi abortado.\n");
  160.         exit(1);}
  161.  
  162.     n = n_registros(bd);
  163.  
  164.     for( aux=0 ; aux<n ; aux++ ){
  165.    
  166.         fread(&cadastro,sizeof(cadastro),1,bd);
  167.         if (feof(bd))break;
  168.  
  169.         else if (cadastro.qtest<cadastro.qtmin){
  170.         printf("\n-----------------------------------------");
  171.         printf("\nCódigo do Material: %d ", cadastro.codmat);
  172.         printf("\nNome do Material: %s ", cadastro.nomat);
  173.         printf("\nQuantidade em estoque: %d ", cadastro.qtest);
  174.         printf("\nQuantidade Minima: %d ", cadastro.qtmin);
  175.         printf("\nPreço unitário: R$ %.2f ", cadastro.prunit);
  176.         }
  177.     }
  178.     fclose(bd);
  179.     printf("\n-----------------------------------------");
  180.     printf("\nAperte ENTER para continuar.");
  181.     __fpurge(stdin);
  182.     getchar();
  183. }
  184.  
  185. ver_tudo(){
  186.  
  187.     system("clear");
  188.  
  189.     FILE *bd;
  190.     estrutura cadastro;
  191.     int n , aux;
  192.  
  193.     if((bd=fopen("cadastro.data", "r+b")) == NULL) {
  194.         printf("Erro ao abrir o arquivo. O programa foi abortado.\n");
  195.         exit(1);}
  196.  
  197.     n = n_registros(bd);
  198.  
  199.     for( aux=0 ; aux<n ; aux++ ){
  200.    
  201.         fread(&cadastro,sizeof(cadastro),1,bd);
  202.         if (feof(bd))break;
  203.  
  204.         else{
  205.         printf("\n-----------------------------------------");
  206.         printf("\nCódigo do Material: %d ", cadastro.codmat);
  207.         printf("\nNome do Material: %s ", cadastro.nomat);
  208.         printf("\nQuantidade em estoque: %d ", cadastro.qtest);
  209.         printf("\nQuantidade Minima: %d ", cadastro.qtmin);
  210.         printf("\nPreço unitário: R$ %.2f ", cadastro.prunit);
  211.         }
  212.     }
  213.     fclose(bd);
  214.     printf("\n-----------------------------------------");
  215.     printf("\nAperte ENTER para continuar.");
  216.     __fpurge(stdin);
  217.     getchar();
  218.  
  219. }
  220.  
  221. n_registros(FILE *arquivo){
  222.  
  223.     long tamanho;
  224.     int registros;
  225.     if (arquivo != NULL) {
  226.         fseek(arquivo, 0, SEEK_END);
  227.         tamanho = ftell(arquivo);
  228.         registros=tamanho/sizeof(estrutura);
  229.         fseek(arquivo,0,SEEK_SET);
  230.             }
  231.         else {printf("Deu erro!");}
  232.     return registros;
  233.     }
  234.  
Advertisement
Add Comment
Please, Sign In to add comment