Advertisement
charparodar

Trabalho Linguagem C - Estruturas e Ponteiros

May 28th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>
  4.  
  5. struct trabalhador
  6. {
  7.     int id_trabalhador;
  8.     char nome[50];
  9.     int idade;
  10.     char morada[30];
  11.     float salario_bruto;
  12.     float percentagem_irs;
  13.     float percentagem_tsu;
  14.     char departamento[50];
  15.     float valor_irs;
  16.     float valor_tsu;
  17.     float salario_liquido;
  18.  
  19. };
  20.  
  21. #define num_trabalhadores 100
  22.  
  23. struct trabalhador x[num_trabalhadores];
  24.  
  25. alterar_struct(int id_trab)
  26. {
  27.     printf("%d\n\n", id_trab);
  28.  
  29.     int idade2;
  30.     float salario_bruto2, salario_liquido2, percentagem_irs2, percentagem_tsu2, valor_tsu2, valor_irs2;
  31.     char nome2[50], morada2[30], departamento2[50];
  32.  
  33.     printf("ATENCAO: Quando pretender manter o valor anterior introduza 0!\n\n");
  34.  
  35. //-------------------------------------------------------------------------------------------------
  36.  
  37.     printf("Introduza o um novo nome para o trabalhador %d: ", id_trab);
  38.     scanf(" %s", &nome2);
  39.  
  40.     //printf("%s\n", nome2);
  41.  
  42.     if(nome2 == "0")
  43.     {
  44.         return;
  45.     }
  46.     else
  47.     {
  48.         strcpy((x+(id_trab-1))->nome,nome2);
  49.     }
  50.  
  51. //-------------------------------------------------------------------------------------------------
  52.  
  53.     printf("Introduza uma nova idade para o trabalhador %d: ", id_trab);
  54.     scanf("%d", &idade2);
  55.  
  56.     if(idade2 == 0)
  57.     {
  58.         return;
  59.     }
  60.     else
  61.     {
  62.         (x+(id_trab-1))->idade = idade2;
  63.     }
  64.  
  65. //-------------------------------------------------------------------------------------------------
  66.  
  67.     printf("Introduza uma nova morada para o trabalhador %d: ", id_trab);
  68.     scanf(" %s", &morada2);
  69.  
  70.     if(morada2 == "0")
  71.     {
  72.         return;
  73.     }
  74.     else
  75.     {
  76.         strcpy((x+(id_trab-1))->morada,morada2);
  77.     }
  78.  
  79. //-------------------------------------------------------------------------------------------------
  80.  
  81.     printf("Introduza um novo departamento para o trabalhador %d: ", id_trab);
  82.     scanf(" %s", &departamento2);
  83.  
  84.     if(departamento2 == "0")
  85.     {
  86.         return;
  87.     }
  88.     else
  89.     {
  90.         strcpy((x+(id_trab-1))->departamento,departamento2);
  91.     }
  92.  
  93. //-------------------------------------------------------------------------------------------------
  94.  
  95.     printf("Introduza uma nova percentagem de IRS para o trabalhador %d (ex: 10%c = 0.10): ", id_trab);
  96.     scanf("%f", &percentagem_irs2);
  97.  
  98.     if(percentagem_irs2 == 0)
  99.     {
  100.         return;
  101.     }
  102.     else
  103.     {
  104.         (x+(id_trab-1))->percentagem_irs = percentagem_irs2;
  105.     }
  106.  
  107. //-------------------------------------------------------------------------------------------------
  108.  
  109.     printf("Introduza uma nova percentagem de TSU para o trabalhador %d (ex: 10%c = 0.10): ", id_trab);
  110.     scanf("%f", &percentagem_tsu2);
  111.  
  112.     if(percentagem_tsu2 == 0)
  113.     {
  114.         return;
  115.     }
  116.     else
  117.     {
  118.         (x+(id_trab-1))->percentagem_tsu = percentagem_tsu2;
  119.     }
  120.  
  121. //-------------------------------------------------------------------------------------------------
  122.  
  123.     printf("Introduza um novo salario bruto para o trabalhador %d: ", id_trab);
  124.     scanf("%f", &salario_bruto2);
  125.  
  126.     if(salario_bruto2 == 0)
  127.     {
  128.         return;
  129.     }
  130.     else
  131.     {
  132.         (x+(id_trab-1))->salario_bruto = salario_bruto2;
  133.  
  134.         (x+(id_trab-1))->valor_irs = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_irs;
  135.  
  136.         (x+(id_trab-1))->valor_tsu = (x+(id_trab-1))->salario_bruto * (x+(id_trab-1))->percentagem_tsu;
  137.  
  138.         (x+(id_trab-1))->salario_liquido = (x+(id_trab-1))->salario_bruto - ((x+(id_trab-1))->valor_irs + (x+(id_trab-1))->valor_tsu);
  139.     }
  140.  
  141. //-------------------------------------------------------------------------------------------------
  142.  
  143.     printf("Trabalhador %d editado com sucesso!", id_trab);
  144. }
  145.  
  146. eliminar_dado(int id)
  147. {
  148.     strcpy((x+(id-1))->nome,"");
  149.  
  150.     (x+(id-1))->idade = 0;
  151.  
  152.     strcpy((x+(id-1))->morada,"");
  153.  
  154.     (x+(id-1))->salario_bruto = 0;
  155.  
  156.     (x+(id-1))->percentagem_irs = 0;
  157.  
  158.     (x+(id-1))->percentagem_tsu = 0;
  159.  
  160.     strcpy((x+(id-1))->departamento,"");
  161.  
  162.     (x+(id-1))->valor_irs = 0;
  163.  
  164.     (x+(id-1))->valor_tsu = 0;
  165.  
  166.     (x+(id-1))->salario_liquido = 0;
  167.  
  168.     (x+(id-1))->id_trabalhador = 0;
  169. }
  170.  
  171. main()
  172. {
  173.     int opcao, op, id, num_dados;
  174.     int i;
  175.  
  176.     do
  177.     {
  178.         printf("Menu:\n");
  179.         printf("1 - Inserir dados\n");
  180.         printf("2 - Listagem geral dos dados\n");
  181.         printf("3 - Consultar dados e alterar dados\n");
  182.         printf("4 - Alterar dados\n");
  183.         printf("5 - Eliminar dado\n");
  184.         printf("6 - Sair\n");
  185.         printf("Insira o numero da opcao: ");
  186.         scanf("%d",&opcao);
  187.         printf("\n");
  188.  
  189.         switch(opcao)
  190.         {
  191.             case 1:
  192.  
  193.                 printf("Quantos dados pretende inserir? ");
  194.                 scanf("%d",&num_dados);
  195.  
  196.                 if(num_dados <= 0 || num_dados > num_trabalhadores)
  197.                 {
  198.                     printf("So pode inserir valores entre 1 e %d", num_trabalhadores);
  199.                 }
  200.  
  201.                 else
  202.                 {
  203.                     for(i=0; i < num_dados; i++)
  204.                     {
  205.                         int id_trabalhador_antes;
  206.                         int *id_trabalhador_antes_ponteiro;
  207.  
  208.                         printf("\nInsira o id do trabalhador %d: ", i+1);
  209.                         scanf("%d",&id_trabalhador_antes);
  210.  
  211.                         id_trabalhador_antes_ponteiro = id_trabalhador_antes;
  212.  
  213.                         if(id_trabalhador_antes_ponteiro <= 0)
  214.                         {
  215.                             printf("Os valores tem de ser maiores que 0.");
  216.  
  217.                             getch();
  218.  
  219.                             break;
  220.                         }
  221.  
  222.                         int i2;
  223.  
  224.                         for(i2=0; i2 < num_trabalhadores; i2++)
  225.                         {
  226.                             if((x+i2)->id_trabalhador == id_trabalhador_antes_ponteiro)
  227.                             {
  228.                                 printf("Ja existe um trabalhador com esse id!");
  229.  
  230.                                 getch();
  231.  
  232.                                 system("cls");
  233.  
  234.                                 main();
  235.                             }
  236.                             else
  237.                             {
  238.                                 (x+i)->id_trabalhador=id_trabalhador_antes_ponteiro;
  239.                             }
  240.                         }
  241.  
  242.                         printf("Insira o nome do trabalhador %d: ", i+1);
  243.                         //scanf(" %s",&x[i].nome);
  244.                         scanf("%s",&(x+i)->nome);
  245.  
  246.                         printf("Insira a idade do trabalhador %d: ", i+1);
  247.                         scanf("%d",&(x+i)->idade);
  248.  
  249.                         printf("Insira a morada do trabalhador %d: ", i+1);
  250.                         scanf("%s",&(x+i)->morada);
  251.  
  252.                         printf("Insira o salario bruto do trabalhador %d: ", i+1);
  253.                         scanf("%f",&(x+i)->salario_bruto);
  254.  
  255.                         printf("Insira a percentagem de IRS do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37);
  256.                         scanf("%f",&(x+i)->percentagem_irs);
  257.  
  258.                         printf("Insira a percentagem de TSU do trabalhador %d (ex: 10%c = 0.10): ", i+1, 37);
  259.                         scanf("%f",&(x+i)->percentagem_tsu);
  260.  
  261.                         printf("Insira o nome do departamento do trabalhador %d: ", i+1);
  262.                         scanf("%s", &(x+i)->departamento);
  263.  
  264.                         (x+i)->valor_irs = (x+i)->salario_bruto * (x+i)->percentagem_irs;
  265.  
  266.                         (x+i)->valor_tsu = (x+i)->salario_bruto * (x+i)->percentagem_tsu;
  267.  
  268.                         (x+i)->salario_liquido = (x+i)->salario_bruto - ((x+i)->valor_irs + (x+i)->valor_tsu);
  269.  
  270.                         system("cls");
  271.                     }
  272.                 }
  273.  
  274.                 break;
  275.  
  276.             case 2:
  277.  
  278.                 if(num_dados <= 10)
  279.                 {
  280.                     for(i=0; i < num_dados; i++)
  281.                     {
  282.                         printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador);
  283.                         printf("Nome: %s\n", (x+i)->nome);
  284.                         printf("Idade: %d\n", (x+i)->idade);
  285.                         printf("Morada: %s\n", (x+i)->morada);
  286.                         printf("Departamento: %s\n", (x+i)->departamento);
  287.                         printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto);
  288.                         printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs);
  289.                         printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu);
  290.                         printf("Valor IRS: %.2f\n", (x+i)->valor_irs);
  291.                         printf("Valor TSU: %.2f\n", (x+i)->valor_tsu);
  292.                         printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido);
  293.                     }
  294.                 }
  295.  
  296.                 else if(num_dados > 10)
  297.                 {
  298.                     for(i=0; i < num_dados; i++)
  299.                     {
  300.                         if(i % 10 == 0)
  301.                         {
  302.                             getch();
  303.                         }
  304.  
  305.                         printf("ID Trabalhador: %d\n", (x+i)->id_trabalhador+1);
  306.                         printf("Nome: %s\n", (x+i)->nome);
  307.                         printf("Idade: %d\n", (x+i)->idade);
  308.                         printf("Morada: %s\n", (x+i)->morada);
  309.                         printf("Departamento: %s\n", (x+i)->departamento);
  310.                         printf("Salario Bruto: %.2f\n", (x+i)->salario_bruto);
  311.                         printf("Percentagem IRS: %.2f\n", (x+i)->percentagem_irs);
  312.                         printf("Percentagem TSU: %.2f\n", (x+i)->percentagem_tsu);
  313.                         printf("Valor IRS: %.2f\n", (x+i)->valor_irs);
  314.                         printf("Valor TSU: %.2f\n", (x+i)->valor_tsu);
  315.                         printf("Salario Liquido: %.2f\n\n", (x+i)->salario_liquido);
  316.                     }
  317.                 }
  318.  
  319.                 getch();
  320.  
  321.                 system("cls");
  322.  
  323.                 break;
  324.  
  325.             case 3:
  326.  
  327.                 printf("Introduza o id de trabalhador que pretende visualizar: ");
  328.                 scanf("%d",&id);
  329.  
  330.                 printf("ID Trabalhador: %d\n", (x+(id-1))->id_trabalhador);
  331.                 printf("Nome: %s\n", (x+(id-1))->nome);
  332.                 printf("Idade: %d\n",(x+(id-1))->idade);
  333.                 printf("Morada: %s\n", (x+(id-1))->morada);
  334.                 printf("Departamento: %s\n", (x+(id-1))->departamento);
  335.                 printf("Salario Bruto: %.2f\n", (x+(id-1))->salario_bruto);
  336.                 printf("Percentagem IRS: %.2f\n", (x+(id-1))->percentagem_irs);
  337.                 printf("Percentagem TSU: %.2f\n", (x+(id-1))->percentagem_tsu);
  338.                 printf("Valor IRS: %.2f\n", (x+(id-1))->valor_irs);
  339.                 printf("Valor TSU: %.2f\n", (x+(id-1))->valor_tsu);
  340.                 printf("Salario Liquido: %.2f\n\n", (x+(id-1))->salario_liquido);
  341.  
  342.                 getch();
  343.  
  344.                 printf("Pretende editar os dados do trabalhador?\n");
  345.                 printf("1 - Sim\n");
  346.                 printf("2 - Nao\n");
  347.                 scanf("%d",&op);
  348.  
  349.                 if(op == 1)
  350.                 {
  351.                     alterar_struct(id);
  352.                 }
  353.                 else if (op == 2)
  354.                 {
  355.                     system("cls");
  356.                 }
  357.                 else
  358.                 {
  359.                     printf("Opcao Invalida!");
  360.                 }
  361.  
  362.                 break;
  363.  
  364.             case 4:
  365.                 printf("Introduza o id de trabalhador que pretende alterar: ");
  366.                 scanf("%d",&id);
  367.  
  368.                 alterar_struct(id);
  369.  
  370.                 system("cls");
  371.  
  372.                 break;
  373.  
  374.             case 5:
  375.                 printf("Introduza o id de trabalhador que pretende remover: ");
  376.                 scanf("%d",&id);
  377.  
  378.                 eliminar_dado(id);
  379.  
  380.                 getch();
  381.  
  382.                 system("cls");
  383.  
  384.                 break;
  385.  
  386.             case 6:
  387.                 exit(0);
  388.  
  389.                 break;
  390.         }
  391.     } while(opcao != 6);
  392.  
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement