Sistema de Gestión de Farmacia en C: Listas Enlazadas para Medicamentos

Informática y Telecomunicaciones10,83 KB

Sistema de Gestión de Farmacia en C

A continuación se presenta el código de un programa en lenguaje C que permite administrar el inventario de medicamentos de una farmacia mediante una lista simplemente enlazada. El programa incluye las operaciones básicas de mostrar, insertar, consultar, modificar, borrar, guardar y recuperar productos.

Funciones principales

  • mostrar(): muestra todos los medicamentos registrados.
  • insertar(): agrega nuevos medicamentos a la lista.
  • consultar(): busca un producto por su nombre.
  • modificar(): permite editar los datos de un producto existente.
  • borrar(): elimina un producto de la lista.
  • guardar(): almacena la lista en el archivo farmacia.dat.
  • recuperar(): carga la lista desde el archivo farmacia.dat.

Código fuente

//__________________________________________________________________________________________

int mostrar (void){

system("cls");

aux=primero;

if(aux==0)

{

printf("No hay ningún medicamento");

}else

{

do{

printf("\n");

printf("Nombre del laboratorio: %s\n",aux->datos.laboratorio);

printf("Nombre del producto: %s \n",aux->datos.nombre);

printf("Número de unidades disponibles: %d\n",aux->datos.cantidad);

printf("Precio de venta unitario: %f\n",aux->datos.precio);

printf("El medicamento %s tiene receta\n",aux->datos.receta);

aux=aux->sig;

}while(aux!=NULL);

}

};

//___________________________________________________________________________________________________

int insertar (void){

system("cls");

int bucle=1;

char re[30];

while(bucle!=0) {

nuevo=malloc(sizeof(struct nodo)); /*Crea un espacio en memoria y dirección*/

nuevo->sig=NULL;

printf("Nombre del laboratorio: \n");

fflush(stdin);

gets(nuevo->datos.laboratorio);

printf("Nombre del producto: \n");

fflush(stdin);

gets(nuevo->datos.nombre);

printf("Número de unidades disponibles: \n");

scanf("%d",&nuevo->datos.cantidad);

fflush(stdin);

printf("Precio de venta unitario: \n");

scanf("%f",&nuevo->datos.precio);

fflush(stdin);

printf("¿Seguridad social?: <sí> o <no>\n");

fflush(stdin);

gets(nuevo->datos.receta);

/*Primer elemento creado*/

if(primero == NULL)

{

primero=nuevo;

ultimo=nuevo;

}

else

{

ultimo->sig=nuevo;

ultimo=nuevo;

}

printf("¿Quieres insertar otro producto?: <sí> o <no>\n");

fflush(stdin);

gets(re);

if (strcmp(re,"no" )==0)

{

bucle=0;

}

}

};

//______________________________________________________________________________________

int consultar(void){

char consulta[50];

aux=primero;

fflush(stdin);

printf("\n");

printf("Nombre del producto que desea consultar: \n");

scanf("%s",&consulta);

do{

if (strcmp(consulta,aux->datos.nombre)==0)

{

printf("Nombre del laboratorio: %s \n",aux->datos.laboratorio);

printf("Nombre del producto: %s \n",aux->datos.nombre);

printf("Número de unidades disponibles: %d \n",aux->datos.cantidad);

printf("Precio de venta unitario: %f \n",aux->datos.precio);

printf("El medicamento %s tiene receta \n",aux->datos.receta);

break;

}

aux=aux->sig;

}while(aux!=NULL);

if(aux==NULL)

{

printf("No se ha encontrado el producto \n");

}

};

//________________________________________________________________________________________

void modificar(void){

int salir=0;

aux=primero;

fflush(stdin);

char nombre_modif[60];

int op;

printf("Escribe el nombre del producto que desea cambiar: ");

gets(nombre_modif);

do

{

if (strcmp(nombre_modif,aux->datos.nombre)==0 )

{

printf("¿Qué dato quieres modificar?\n1-Laboratorio \n2-Nombre \n3-Cantidad \n4-Precio \n5-Receta \n6-Terminar\n");

printf("¿Qué quieres modificar?: ");

scanf("%d",&op);

switch (op){

case 1:

fflush(stdin);

printf("Escribe el nombre del laboratorio: ");

gets(aux->datos.laboratorio);

break;

case 2:

fflush(stdin);

printf("Escribe el nombre del producto: ");

gets(aux->datos.nombre);

break;

case 3:

printf("Escribe la cantidad: ");

scanf("%d",&aux->datos.cantidad);

break;

case 4:

printf("Escribe el precio del producto: ");

scanf("%f",&aux->datos.precio);

break;

case 5:

fflush(stdin);

printf("¿Seguridad social?: <sí> o <no>\n");

gets(aux->datos.receta);

break;

case 6:

salir=1;

break;

}

}

aux=aux->sig;

}while(op!=6 && aux!=NULL);

};

//_____________________________________________________________________________-

int borrar(void){

system("cls");

struct nodo *aux2;

char borrar[50];

int c;

fflush(stdin);

aux=primero;

aux2=primero->sig;

printf("Nombre del producto que desea borrar: ");

gets(borrar);

for(c=0;1;c++){

if(strcmp(aux->datos.nombre,borrar)==0 && c==0)

{

primero=primero->sig;

break;

}

else

{

if(strcmp(aux2->datos.nombre,borrar)==0 && aux2->sig!=NULL)

{

aux->sig=aux2->sig;

break;

}

if(strcmp(ultimo->datos.nombre,borrar)==0 && aux2->sig==NULL)

{

ultimo=aux;

ultimo->sig=NULL;

break;

}

}

aux=aux->sig;

aux2=aux2->sig;

};

};

//_____________________________________________________________________________________

int guardar(void){

system("cls");

int c;

aux=primero;

if(fp=fopen("farmacia.dat","wb"))

{

for(c=0;aux!=NULL;c++){

fwrite(&aux->datos,sizeof(aux->datos),1,fp);

printf("Producto %d guardado\n",c+1);

aux=aux->sig;

};

}

else

{

printf("Error\n");

}

fclose(fp);

};

//____________________________________________________________________________

int recuperar(void){

system("cls");

int c;

struct nodo *nuevo;

FILE *fp;

fp=fopen("farmacia.dat","rb");

for(c=0;1;c++){

nuevo=malloc(sizeof(struct nodo));

fread(&ficha,sizeof(ficha),1,fp);

nuevo->datos=ficha;

nuevo->sig=NULL;

if(primero==NULL)

{

primero=nuevo;

ultimo=nuevo;

}

else

{

if(strcmp(ultimo->datos.nombre,nuevo->datos.nombre)==0){

break;

}

ultimo->sig=nuevo;

ultimo=nuevo;

}

}

fclose(fp);

printf("Su lista se ha recuperado\n");

}

//___________________________________________________________________________________________

int main(void){

int op;

int sal=0;

do{

op=menu();

switch(op){

case 1:

mostrar();

break;

case 2:

insertar();

break;

case 3:

consultar();

break;

case 4:

modificar();

break;

case 5:

borrar();

break;

case 6:

guardar();

break;

case 7:

recuperar();

break;

case 8:

sal=1;

printf("Pulse cualquier tecla para salir definitivamente del programa.\n");

break;

}

}while(sal==0);

}

Observaciones de corrección

  • Se corrigieron tildes y signos de apertura de interrogación ("Número", "¿Seguridad social?", "¿Quieres...?").
  • Se escaparon los caracteres < y > para que el HTML se muestre correctamente.
  • Se corrigió el encabezado de la función modificar y se mantuvo el resto del código tal como fue entregado.

Descargar

PDF Word HTML