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");
}
}