Trabalhando com Listas e C

Pessoal, após um exercíco de arquivos, lá vai um exercício de listas.

Faça uma lista ligada de funcionário
   codigo(int)
   nome (101 char)
   sexo(1 caracter – m/f)
   salario(float)

   Defina Funções
   a) inserir um funcionario na lista
   b) exibir os dados de todos os funcionários
   c) dado o codigo de um funcionário e uma porcentagem p, aumentar o salario deste funcionário em p%
   d) contar quantos funcionarios do sexo masculino e feminino ha na lista
   e) dado o codigo de um funcionario, remove-lo da lista
   f) somar o salario de todos os funcionario

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct no{
        int codigo;
        char nome[101];
        char sexo;
        float salario;
        struct no * prox;
}no;
void inserir (no ** lista, int cod, char nom[],char sex, float sal)
{
     no * aux;
     aux=(no*) malloc(sizeof(no));
     aux->codigo=cod; /* ->(seta) pq é enderço de mem.*/
     strcpy(aux->nome, nom);
     aux->sexo =sex;
     aux->salario=sal;
     aux->prox=*lista;
     *lista=aux;
}
void listar(no*lista)
{
     no * aux;
     aux=lista;
     while(aux!=NULL)
     {
         printf(" Cod: %d \n Nome: %s \n Sexo: %c \n Salario: %f \n\n", aux->codigo, aux->nome, aux->sexo, aux->salario);
         aux=aux->prox;       
     }
}
int porcentagem(no**lista)
{
    no* aux;
    aux=*lista;
    int p,c;
    if(aux==NULL)
    {
         printf("\nLista vazia");
         return(0);            
    }else{
          printf("\nDigite o codigo: ");
          scanf("%d",&c);
          printf("\nDigite a porcentagem: ");
          scanf("%d",&p);

          while(aux!=NULL){
              if(aux->codigo==c)
              {
                  aux->salario= aux->salario+(aux->salario*p/100);
                  free(aux);
                  return (1);
              }         
          }
    }   
}
void conta(no**lista)
{
     no*aux;
     aux=*lista;
     int fem=0, mas=0; 
     if(aux==NULL)
     {
          printf("\nLista vazia"); 
     }else{
           while(aux!=NULL)
           {
                 if((aux->sexo)=='f')
                 {
                       fem++;                  
                 }
                 if(aux->sexo=='m'){
                       mas++;
                 }     

                 aux=aux->prox;       
           }    
     }
     printf("\n Ha %d homen(s) e %d mulhere(s)\n\n", mas, fem);
}
void removeporcod(no**lista)
{
     no * ant=NULL;
     no * aux;
     aux=*lista;
     int cod;
     printf("Digite o codigo:");
     scanf("%d",&cod);
     if(aux==NULL){
         printf("Lista vazia");
     }else{
           while(aux!=NULL)
           {
               if(cod==aux->codigo)
               {
                   if(ant==NULL)
                   {
                        *lista=aux->prox;
                        free(aux);
                   }else{
                         ant->prox=aux->prox;
                         free(aux);
                   }
                   return;
               }else{               
                     ant=aux;
                     aux=aux->prox;             
               }                     
           }
     }   
}
void somasalario( no **lista ){
     no * aux;
     aux=*lista;
     float soma_salario=0;
     if(aux==NULL){
         printf("Lista vazia");
     }else{
          while(aux!=NULL){
                soma_salario=soma_salario+aux->salario; 
                aux=aux->prox;                     
          }
     }
     printf("A soma é: %f", soma_salario);
}
int main (){
    no*lista;
    int codigo;
    char nome[101];
    char sexo;
    float salario;

    int opcao, cod;
    lista=NULL; /*Null:define um end nulo, pois não cadastrei nada*/

    do{
        printf("\n Menu \n");
        printf("\n 1 - Inserir dados");
        printf("\n 2 - Listar dados");
        printf("\n 3 - Aumentar salario");
        printf("\n 4 - Contar por sexo");
        printf("\n 5 - Remove por codigo");
        printf("\n 6 - Somar salario");
        printf("\n 7 - Sair");
        printf("\n Digite a opcao desejada : ");
        scanf("\n %d",&opcao); 

        switch(opcao){
            case 1:
                printf("\n\n Digite o codigo: ");
                scanf("%d",&codigo);
                printf("\n Digite o nome: ");
                scanf("%s",&nome);
                printf("\n Digite o sexo (F/M): ");
                fflush(stdin);
                scanf("%c",&sexo);
                printf("\n Digite o salario: ");
                scanf("%f", &salario);               
                inserir(&lista,codigo,nome,sexo,salario);
                break;  
             case 2:
                listar(lista);
                break;
             case 3:
                porcentagem(&lista);
                break;
             case 4:
                conta(&lista);
                break;
             case 5:
                removeporcod(&lista);
                break;
             case 6:
                somasalario(&lista);
                break;
             }
     }while(opcao!=7);
}

Bons estudos a todos!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 155 other followers