Implementación de Listas Enlazadas Dinámicas con Punteros en Lenguaje C

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 10,82 KB

CON PUNTEROS:

-> COMIENZO PROGRAMA


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXIMO 30

// Definición de la estructura moto
struct moto{
         char marca[MAXIMO];
         char modelo[MAXIMO];
         int cilindrada;
         int unidades;
         float precio;
};

// Definición de la estructura nodo
struct nodo{
        struct moto prod;
        struct nodo *sig;
};

// Variables globales
struct nodo *cabecera;
struct nodo *aux;
struct nodo *nuevo;
struct nodo *fin;
FILE *carpeta;

-> FUNCIÓN MOSTRAR


void Mostrar(){
         system("cls");
         if(cabecera == NULL){
                 printf("La lista esta vacia");
         }
         else{
                 aux = cabecera;
                 while(aux != NULL){
                         printf("\n Marca del producto: %s", aux->prod.marca);
                         printf("\n Nombre del modelo: %s", aux->prod.modelo);
                         printf("\n Cilindrada: %d", aux->prod.cilindrada); 
                         printf("\n Unidades disponibles: %d", aux->prod.unidades); 
                         printf("\n Precio de venta unitario: %.2f\n", aux->prod.precio); 
                         aux = aux->sig;
                 }
         }
         system("pause");
}

-> FUNCION INSERTAR


void Insertar(){
         int opcion;
         do{
                 system("cls");
                 nuevo = malloc(sizeof(struct nodo));
                 nuevo -> sig = NULL;
                 if(cabecera == NULL){
                            cabecera = nuevo;
                            fin = nuevo;
                 }
                 else{
                            fin -> sig = nuevo;
                           fin = nuevo;
                 }
                 printf("Inserte el nombre de la marca: \n");
                 scanf("%s", nuevo -> prod.marca);
                 printf("Inserte el nombre del modelo: \n");
                 scanf("%s", nuevo -> prod.modelo);
                 printf("Inserte la cilindrada: \n");
                 scanf("%d", &nuevo -> prod.cilindrada);
                 printf("Introducir el numero de unidades disponibles: \n");
                 scanf("%d", &nuevo -> prod.unidades);
                 printf("Inserte el precio de venta unitario: \n");
                 scanf("%f", &nuevo -> prod.precio);
                 printf("Desea introducir otro producto? (1=Si / 0=No): ");
                 scanf("%d", &opcion);
         }
         while(opcion == 1);
}

-> FUNCION CONSULTAR


void Consultar(){
         char nombre_modelo[MAXIMO];
         int opcion;
         system("cls");
         if(cabecera == NULL){
                 printf("La lista esta vacia.\n");
                 system("pause");
         }
         else{
                 do{
                            system("cls");
                            printf("Introduce el nombre del modelo: \n");
                            scanf("%s", nombre_modelo);
                            aux = cabecera;
                            
                            while((strcmp(nombre_modelo, aux -> prod.modelo) != 0) && (aux -> sig != NULL)){
                                      aux = aux -> sig;
                            }
                            system("cls");
                            if(strcmp(nombre_modelo, aux -> prod.modelo) == 0){
                                 printf("\n Marca del producto: %s", aux -> prod.marca);
                                 printf("\n Nombre del modelo: %s", aux -> prod.modelo);
                                 printf("\n Cilindrada: %d", aux -> prod.cilindrada);
                                 printf("\n Unidades disponibles: %d", aux -> prod.unidades);
                                 printf("\n Precio de venta unitario: %.2f\n", aux -> prod.precio);
                            }
                            else{
                                      printf("Producto no encontrado.\n");
                            }
                            printf("\n Si quiere buscar otro modelo pulse 1: ");
                            scanf("%d", &opcion);
                 }
                 while(opcion==1);
         }
}

-> FUNCION MODIFICAR


void modificar(){
         char nombre_modelo[MAXIMO];
         int opcion;
         int eleccion = 0;
         system("cls");
         if(cabecera == NULL){
                 printf("La lista esta vacia.\n");
                 system("pause");
         }
         else{
              do{
                  system("cls");
                  printf("Introduce el nombre del modelo a modificar:\n");
                  scanf("%s", nombre_modelo);
                  aux = cabecera;
                  while(strcmp(nombre_modelo, aux -> prod.modelo) != 0 && (aux -> sig != NULL)){
                      aux = aux -> sig;
                  }
                  system("cls");
                  if(strcmp(nombre_modelo, aux -> prod.modelo) == 0){
                       do{
                       printf("\n DATOS DEL PRODUCTO:\n");
                       printf("\t1: Nombre de la marca: %s\n", aux -> prod.marca);
                       printf("2: Nombre del modelo: %s\n", aux -> prod.modelo);
                       printf("3: Cilindrada: %d\n", aux -> prod.cilindrada);
                       printf("4: Unidades disponibles: %d\n", aux -> prod.unidades);
                       printf("5: Precio de venta unitario: %.2f\n", aux -> prod.precio);
                       printf("Introduce el numero del campo que desea modificar: "); 
                       scanf("%d", &eleccion);
                      }
                      while(eleccion < 1 || eleccion > 5);
                      switch(eleccion){
                          case 1:
                             printf("Introduce la nueva marca del producto:\n");
                             scanf("%s", aux -> prod.marca);
                             break;
                          case 2:
                             printf("Introduce el nuevo nombre del modelo:\n");
                             scanf("%s", aux -> prod.modelo);
                             break;
                          case 3:
                             printf("Introduce la nueva cilindrada:\n");
                             scanf("%d", &aux -> prod.cilindrada);
                             break;
                          case 4:
                             printf("Introduce las nuevas unidades disponibles:\n");
                             scanf("%d", &aux -> prod.unidades);
                             break;
                          case 5:
                             printf("Introduce el nuevo precio de venta unitario:\n");
                             scanf("%f", &aux -> prod.precio);
                             break;
                          default:
                             printf("La opcion pulsada no es valida.\n");
                       }
                       printf("\nProducto modificado correctamente.\n");
                  }
                  else{
                      printf("Modelo no encontrado.\n");
                  }
                  printf("\nDesea modificar otro producto? (1 = Si / 0 = No):");
                  scanf("%d", &opcion);
              }
              while(opcion == 1);
         }
}

-> FUNCION BORRAR


void borrar(){
     int opcion = 0;
     char nombre_modelo[MAXIMO];
     do{
        system("cls");
        if(cabecera != NULL){
           aux = cabecera;
           printf("Escribe el modelo que se desea eliminar:\n");
           scanf("%s", nombre_modelo);
           if(strcmp(nombre_modelo, aux -> prod.modelo) == 0){
              cabecera = cabecera -> sig;
              printf("El producto se ha borrado correctamente.\n");
           }
          else{
              while((aux -> sig != NULL) && (strcmp(nombre_modelo, aux -> sig -> prod.modelo) != 0)){
              aux = aux -> sig;
          }
          if((aux -> sig != NULL) && (strcmp(nombre_modelo, aux -> sig -> prod.modelo) == 0)){
              aux -> sig = aux -> sig -> sig;
              printf("El producto se ha borrado correctamente.\n");
          }
          else{
              printf("El modelo no existe.\n");
          }
      }
   }
   else{
       printf("La lista esta vacia.\n");
   }
   printf("\nDesea borrar otro producto? (1 = Si / 0 = No):");
   scanf("%d", &opcion);
 }
 while(opcion == 1);
}

-> FUNCION GUARDAR


void guardar(){
    system("cls");
    carpeta = fopen("ListaMotos.dat","wb");
    if(cabecera != NULL){
        aux = cabecera;
        for(aux; aux != NULL; aux = aux -> sig){
            fwrite(&aux -> prod, sizeof(struct moto), 1, carpeta);
        }
        fclose(carpeta);
        printf("Lista guardada correctamente.\n");
        system("pause");
    }
    else{
        printf("La lista esta vacia.\n"); 
        system("pause");
    }
}

-> FUNCION RECUPERAR


void recuperar(){
    system("cls");
    cabecera = NULL;
    fin = NULL;
    aux = NULL;
    carpeta = fopen("ListaMotos.dat","rb");
    if(carpeta == NULL){
        printf("No se pudo abrir el archivo.\n");
        system("pause");
        return;
    }
    while(!feof(carpeta)){
        nuevo = malloc(sizeof(struct nodo));
        fread(&nuevo -> prod, sizeof(struct moto), 1, carpeta);
        if(!feof(carpeta)){
            if(cabecera == NULL){
                cabecera = nuevo;
                fin = nuevo;
            }
            else{
                fin -> sig = nuevo;
                fin = nuevo;
            }
        }
    }
    if(fin != NULL){
        fin -> sig = NULL;
        fclose(carpeta);
        printf("La lista se ha recuperado correctamente.\n");
        system("pause");
    }
}

Entradas relacionadas: