#include #include #include #include #include #include #include #define NO 0 #define SI 1 #define CLAVEVACIADO "ITS" #define TEMPORAL "temporal.bin" #define NOEXISTE "Codigo NO existe" #define ULTIMAFILA 24 //Archivo del Laboratorio #define LABORATORIO "lab.bin" struct reg_laboratorio{ int codigo; //Autonum‚rico char nombre[30]; char direccion[30]; char telefono[11]; } laboratorio,laboratorio_aux; //Archivo de los medicamentos #define MEDICAMENTOS "med.bin" struct reg_medicamentos{ int codigo; //Autonum‚rico char nombre[30]; int cod_laboratorio; float cantidad; float precio; } medicamento,medicamento_aux; //Definicion del arbol de medicamentos typedef struct nodo_medicamentos{ //Igual al registro medicamentos int codigo; char nombre[30]; int cod_laboratorio; float cantidad; float precio; //mas el puntero derecho e izquierdo struct nodo_medicamentos *izquierda, *derecha; }; typedef nodo_medicamentos *p_nodo_medicamentos; p_nodo_medicamentos arbol_med; //Archivo de las ventas #define BOLETAS "boletas.bin" struct reg_boletas{ int cod_boleta; int dia,mes,anio; int cod_medicamento; float cantidad; float p_unitario; //Se guarda el precio como hist¢rico // float p_total; //Es un atributo pero no es un campo } boleta; FILE *p_archivo; int c; void menu(), verificar(FILE *); void alta_laboratorios(), listado_laboratorios(), consulta_laboratorios(), modificacion_laboratorios(), menu_modificacion_laboratorios(), baja_laboratorios(), vaciado_laboratorios(), menu_laboratorios(); char *nombre_laboratorio(int cod); void alta_medicamentos(), listado_medicamentos(), consulta_medicamentos(), modificacion_medicamentos(), menu_modificacion_medicamentos(), baja_medicamentos(), vaciado_medicamentos(), menu_medicamentos(); void alta_boletas(), listado_boletas(), consulta_boletas(), menu_ventas(); void menu_listados(), medicamentos_caros(), lab_mayor_compra(), listar_arbol_med(nodo_medicamentos *a), insertar_arbol_med(p_nodo_medicamentos*,struct reg_medicamentos); //-------------------------------------------------------------------------- // Funci¢n principal void main(){ menu(); } //--------------------------------------------------------------------------- //Menu Principal void menu(){ int op_menu=1; while(op_menu!= '0'){ clrscr(); printf("\n*** MENU PRINCIPAL ***\n\n"); printf("1-Laboratorios\n"); printf("2-Medicamentos\n"); printf("3-Venta de Medicamentos\n"); printf("4-Listados\n"); printf("0-Salir\n\n"); printf("Elija una opci¢n :"); op_menu=getch(); switch(op_menu){ case '1': menu_laboratorios();break; case '2': menu_medicamentos();break; case '3': menu_ventas();break; case '4': menu_listados();break; case '0': break; default: printf("Opci¢n Inv lida"); getch(); break; } } } //--------------------------------------------------------------------------- //Menu de Laboratorios void menu_laboratorios(){ int opcion=1; while(opcion!= '0'){ clrscr(); printf("\n** LABORATORIOS **\n"); printf("\n1-Alta"); printf("\n2-Listado"); printf("\n3-Consulta"); printf("\n4-Modificacion"); printf("\n5-Vaciado"); printf("\n6-Baja"); printf("\n0-Salir"); printf("\n\nElija una opci¢n :"); opcion=getch(); switch(opcion){ case '1': alta_laboratorios();break; case '2': listado_laboratorios();break; case '3': consulta_laboratorios();break; case '4': modificacion_laboratorios();break; case '5': vaciado_laboratorios();break; case '6': baja_laboratorios();break; case '0':break; default: printf("Opci¢n Inv lida"); break; } } } //--------------------------------------------------------------------------- //Menu de medicamentos void menu_medicamentos(){ int opcion=1; while(opcion!= '0'){ clrscr(); printf("\n** medicamentos **\n"); printf("\n1-Alta"); printf("\n2-Listado"); printf("\n3-Consulta"); printf("\n4-Modificacion"); printf("\n5-Vaciado"); printf("\n6-Baja"); printf("\n0-Salir"); printf("\n\nElija una opci¢n :"); opcion=getch(); switch(opcion){ case '1': alta_medicamentos();break; case '2': listado_medicamentos();break; case '3': consulta_medicamentos();break; // case '4': modificacion_medicamentos();break; case '5': vaciado_medicamentos();break; // case '6': baja_medicamentos();break; case '0':break; default: printf("Opci¢n Inv lida"); break; } } } //--------------------------------------------------------------------------- //Menu de Ventas void menu_ventas(){ int opcion=1; while(opcion!= '0'){ clrscr(); printf("\n** VENTAS **\n"); printf("1-Ingresar una boleta\n"); printf("2-Listado\n"); printf("3-Consulta de una boleta\n"); printf("0-Salir\n"); printf("\nElija una opci¢n :"); opcion=getch(); switch(opcion){ case '1': alta_boletas();break; case '2': listado_boletas();break; // case '3': consulta_boletas();break; case '0':break; default: printf("Opci¢n Inv lida"); break; } } } //--------------------------------------------------------------------------- //Menu de Listados void menu_listados(){ int opcion=1; while(opcion!= '0'){ clrscr(); printf("\n** L I S T A D O S **\n"); printf("1-Los medicamentos mas caros\n"); printf("2-Laboratorio al que se le compra m s\n"); // printf("3-Consulta de una boleta\n"); printf("0-Salir\n"); printf("\nElija una opci¢n :"); opcion=getch(); switch(opcion){ case '1': medicamentos_caros();break; case '2': lab_mayor_compra();break; // case '3': consulta_boletas();break; case '0':break; default: printf("Opci¢n Inv lida"); break; } } } //--------------------------------------------------------------------------- // Alta de Laboratorios void alta_laboratorios(){ clrscr(); flushall(); printf("Ingrese el Nombre :"); gets(laboratorio.nombre); printf("Ingrese la Direccion :"); gets(laboratorio.direccion); printf("Ingrese el Tel‚fono :"); gets(laboratorio.telefono); p_archivo = fopen(LABORATORIO,"ab+"); verificar(p_archivo); //B£squeda del c¢digo autonum‚rico //Se empieza por el principio fseek(p_archivo,0,SEEK_SET); //Se busca el ultimo codigo while(fread(&laboratorio_aux, sizeof(laboratorio),1,p_archivo)!=NULL); //Sumarle 1 al ultimo codigo laboratorio.codigo=laboratorio_aux.codigo+1; //Grabar los datos fwrite(&laboratorio,sizeof(laboratorio),1,p_archivo); fclose(p_archivo); } //-------------------------------------------------------------------------- // Listado de Laboratorios void listado_laboratorios(){ clrscr(); p_archivo = fopen(LABORATORIO,"rb"); verificar(p_archivo); printf("...............:: LISTADO DE LABORATORIOS ::................\n"); printf("Cod Nombre Direccion Telefono\n"); printf("-------------------------------------------------------------\n"); while(fread(&laboratorio,sizeof(laboratorio),1,p_archivo)!=NULL) printf("%-3i %-20s %-20s %11s\n", laboratorio.codigo, laboratorio.nombre, laboratorio.direccion, laboratorio.telefono ); fclose(p_archivo); getch(); } //--------------------------------------------------------------------------- // Consulta de Laboratorios void consulta_laboratorios(){ int cod; clrscr(); gotoxy(10,2); printf("Ingrese el codigo del Laboratorio:"); flushall(); scanf("%i",&cod); p_archivo = fopen(LABORATORIO,"rb"); verificar(p_archivo); while(fread(&laboratorio,sizeof(laboratorio),1,p_archivo)!=NULL) if (laboratorio.codigo==cod){ gotoxy(15,5); printf("C¢digo :%2i ",laboratorio.codigo); gotoxy(15,7); printf("Nombre :%-15s ",laboratorio.nombre); gotoxy(15,9); printf("Direcci¢n :%-15s ",laboratorio.direccion); gotoxy(15,11); printf("Tel‚fono :%-11s ",laboratorio.telefono); getch(); } fclose(p_archivo); getch(); } void modificacion_laboratorios(){ int cod; c=0; clrscr(); gotoxy(10,2); printf("Ingrese el c¢digo a modificar:"); scanf("%i",&cod); p_archivo = fopen(LABORATORIO,"rb+"); verificar(p_archivo); while(fread(&laboratorio,sizeof(laboratorio),1,p_archivo)!=NULL){ c++; if (laboratorio.codigo==cod) menu_modificacion_laboratorios(); } fclose(p_archivo); } void menu_modificacion_laboratorios(){ char op=' '; while (op!='S'&&op!='G'){ clrscr(); gotoxy(15,5); printf("C¢digo :%2i",laboratorio.codigo); gotoxy(15,7); printf("1-Nombre :%-15s",laboratorio.nombre); gotoxy(15,9); printf("2-Direcci¢n :%-15s",laboratorio.direccion); gotoxy(15,11); printf("3-Tel‚fono :%-11s",laboratorio.telefono); gotoxy(15,13); printf("S-Salir sin grabar"); gotoxy(15,15); printf("G-Grabar y Salir "); op=toupper(getch()); gotoxy(15,17); switch(op){ case '1': printf("Ingrese el nuevo nombre :"); flushall(); gets(laboratorio.nombre); break; case '2': printf("Ingrese la nueva direcci¢n :"); flushall(); gets(laboratorio.direccion); break; case '3': printf("Ingrese el nuevo telefono :"); flushall(); gets(laboratorio.telefono); break; case 'G': fseek(p_archivo,sizeof(laboratorio)*(c-1),SEEK_SET); fwrite(&laboratorio,sizeof(laboratorio),1,p_archivo); break; case 'S': break; } } } //--------------------------------------------------------------------------- // Vaciado del archivo de Laboratorios void vaciado_laboratorios(){ char *clave; clrscr(); clave=getpass("Ingrese la clave para vaciado de laboratorios :"); if (strcmp(clave,CLAVEVACIADO)==NULL){ p_archivo=fopen(LABORATORIO,"wb"); fclose(p_archivo); printf("El archivo fue vaciado ..."); } else printf("Clave err¢nea"); getch(); } void baja_laboratorios(){ int cod; FILE *p_temporal; int encontrado = NO; clrscr(); gotoxy(10,2); printf("Ingrese el codigo eliminar :"); scanf("%i",&cod); p_archivo = fopen(LABORATORIO,"rb"); verificar(p_archivo); p_temporal = fopen(TEMPORAL,"wb"); verificar(p_temporal); while(fread(&laboratorio,sizeof(laboratorio),1,p_archivo)!=NULL){ if (laboratorio.codigo==cod) encontrado=SI; else fwrite(&laboratorio,sizeof(laboratorio),1,p_temporal); } fclose(p_archivo); fclose(p_temporal); remove(LABORATORIO); rename(TEMPORAL,LABORATORIO); if(encontrado) printf("\nSe elimin¢ el laboratorio buscado"); else printf("\nNo se encontr¢ el laboratorio"); getch(); } //--------------------------------------------------------------------------- // Alta de medicamentos void alta_medicamentos(){ char *nom; clrscr(); flushall(); printf("Ingrese el Nombre :"); gets(medicamento.nombre); //Control del codigo del Laboratorio while(SI){ printf("Ingrese C¢d Laboratorio (0-Salir):"); scanf("%i",&medicamento.cod_laboratorio); if(medicamento.cod_laboratorio==0) return; nom=nombre_laboratorio(medicamento.cod_laboratorio); printf("-->Laboratorio :%s\n",nom); if (strcmp(nom,NOEXISTE)!=NULL) break; } printf("Ingrese la Cantidad :"); scanf("%f",&medicamento.cantidad); printf("Ingrese el Precio :"); scanf("%f",&medicamento.precio); p_archivo = fopen(MEDICAMENTOS,"ab+"); verificar(p_archivo); //B£squeda del c¢digo autonum‚rico //Se empieza por el primer registro fseek(p_archivo,0,SEEK_SET); //Luego se busca el ultimo codigo while(fread(&medicamento_aux,sizeof(medicamento),1,p_archivo)!=NULL); //Sumarle 1 al ultimo codigo medicamento.codigo=medicamento_aux.codigo+1; //Grabar los datos fwrite(&medicamento,sizeof(medicamento),1,p_archivo); fclose(p_archivo); } //-------------------------------------------------------------------------- // Listado de medicamentos void listado_medicamentos(){ clrscr(); p_archivo = fopen(MEDICAMENTOS,"rb"); verificar(p_archivo); printf("...............:: LISTADO DE MEDICAMENTOS ::...................\n"); printf("Cod Medicamento Laboratorio Cantidad Precio\n"); printf("------------------------------------------------------------------\n"); while(fread(&medicamento,sizeof(medicamento),1,p_archivo)!=NULL) printf("%3i %-20s %-20s %9.2f %9.2f\n", medicamento.codigo, medicamento.nombre, nombre_laboratorio(medicamento.cod_laboratorio), medicamento.cantidad, medicamento.precio ); fclose(p_archivo); getch(); } //--------------------------------------------------------------------------- // Consulta de medicamentos void consulta_medicamentos(){ int cod; clrscr(); gotoxy(10,2); printf("Ingrese el codigo del medicamento:"); flushall(); scanf("%i",&cod); p_archivo = fopen(MEDICAMENTOS,"rb"); verificar(p_archivo); while(fread(&medicamento,sizeof(medicamento),1,p_archivo)!=NULL) if (medicamento.codigo==cod){ gotoxy(15,5); printf("C¢digo :%2i ",medicamento.codigo); gotoxy(15,wherey()+2); printf("Nombre :%-15s ",medicamento.nombre); gotoxy(15,wherey()+2); printf("Laboratorio :%i-%-15s ", medicamento.cod_laboratorio, nombre_laboratorio(medicamento.cod_laboratorio)); gotoxy(15,wherey()+2); printf("Cantidad :%-9.2f ",medicamento.cantidad); gotoxy(15,wherey()+2); printf("Precio :%-9.2f ",medicamento.precio); getch(); } fclose(p_archivo); } /* void modificacion_medicamentos(){ int cod; c=0; clrscr(); gotoxy(10,2); printf("Ingrese el c¢digo a modificar:"); scanf("%i",&cod); p_archivo = fopen(medicamento,"rb+"); verificar_apertura(); while(fread(&medicamento,sizeof(medicamento),1,p_archivo)!=NULL){ c++; if (medicamento.codigo==cod) menu_modificacion_medicamentos(); } fclose(p_archivo); } void menu_modificacion_medicamentos(){ char op=' '; while (op!='S'&&op!='G'){ clrscr(); gotoxy(15,5); printf("C¢digo :%2i",medicamento.codigo); gotoxy(15,7); printf("1-Nombre :%-15s",medicamento.nombre); gotoxy(15,9); printf("2-Direcci¢n :%-15s",medicamento.direccion); gotoxy(15,11); printf("3-Tel‚fono :%-11s",medicamento.telefono); gotoxy(15,13); printf("S-Salir sin grabar"); gotoxy(15,15); printf("G-Grabar y Salir "); op=toupper(getch()); gotoxy(15,17); switch(op){ case '1': printf("Ingrese el nuevo nombre :"); flushall(); gets(medicamento.nombre); break; case '2': printf("Ingrese la nueva direcci¢n :"); flushall(); gets(medicamento.direccion); break; case '3': printf("Ingrese el nuevo telefono :"); flushall(); gets(medicamento.telefono); break; case 'G': fseek(p_archivo,sizeof(medicamento)*(c-1),SEEK_SET); fwrite(&medicamento,sizeof(medicamento),1,p_archivo); break; case 'S': break; } } } */ //--------------------------------------------------------------------------- // Vaciado del archivo de medicamentos void vaciado_medicamentos(){ char *clave; clrscr(); clave=getpass("Ingrese la clave para vaciado de medicamentos :"); if (strcmp(clave,CLAVEVACIADO)==NULL){ p_archivo=fopen(MEDICAMENTOS,"wb"); fclose(p_archivo); printf("El archivo fue vaciado ..."); } else printf("Clave err¢nea"); getch(); } /* void baja_medicamentos(){ int cod; FILE *p_temporal; int encontrado = NO; clrscr(); gotoxy(10,2); printf("Ingrese el codigo eliminar :"); scanf("%i",&cod); p_archivo = fopen(medicamento,"rb"); p_temporal = fopen(TEMPORAL,"wb"); verificar_apertura(); while(fread(&medicamento,sizeof(medicamento),1,p_archivo)!=NULL){ if (medicamento.codigo==cod) encontrado=SI; else fwrite(&medicamento,sizeof(medicamento),1,p_temporal); } fclose(p_archivo); fclose(p_temporal); remove(medicamento); rename(TEMPORAL,medicamento); if(encontrado) printf("\nSe elimin¢ el medicamento buscado"); else printf("\nNo se encontr¢ el medicamento"); getch(); } */ //--------------------------------------------------------------------------- // Alta de Boletas void alta_boletas(){ int cod,sigue=SI; FILE *p_auxiliar; float total; struct date fecha; clrscr(); p_archivo = fopen(BOLETAS,"ab+"); verificar(p_archivo); while(sigue){ gotoxy(10,1); printf("Ingrese el n£mero de la Boleta (0-Salir):"); scanf("%i",&cod); clreol(); if (cod==0) return; rewind(p_archivo); sigue = NO; while(fread(&boleta,sizeof(boleta),1,p_archivo)!=NULL) if (cod==boleta.cod_boleta && !sigue) { printf("Codigo existente"); sigue=SI; } } boleta.cod_boleta = cod; total = 0; gotoxy(10,ULTIMAFILA); printf("Termina la boleta ingresando el càdigo 0"); gotoxy(01,03); printf("Cod Medicamento Laboratorio Precio Cantidad Total_$\n"); printf("-------------------------------------------------------------------------\n"); while(SI){ gotoxy(01,wherey()); scanf("%i",&boleta.cod_medicamento); if (boleta.cod_medicamento ==0) break; gotoxy(5,wherey()-1); verificar(p_auxiliar=fopen(MEDICAMENTOS,"rb")); int existe=NO; //Si existe el medicamento se muestran los datos while (fread(&medicamento,sizeof(medicamento),1,p_auxiliar)!=NULL) if (medicamento.codigo==boleta.cod_medicamento){ printf("%-20s %-15s %9.2f", medicamento.nombre, nombre_laboratorio(medicamento.cod_laboratorio), medicamento.precio ); existe=SI; break; } if (!existe){ printf(NOEXISTE); //gotoxy(1,wherey()-1); } else{ boleta.p_unitario = medicamento.precio; getdate(&fecha); boleta.dia = fecha.da_day; boleta.mes = fecha.da_mon; boleta.anio = fecha.da_year; gotoxy(55,wherey()); scanf("%f",&boleta.cantidad); gotoxy(51,wherey()-1); printf("%9.2f %9.2f", boleta.cantidad, boleta.cantidad*boleta.p_unitario); total += boleta.cantidad*boleta.p_unitario; gotoxy (60,wherey()+1); printf("$%9.2f",total); fwrite(&boleta,sizeof(boleta),1,p_archivo); } fclose(p_auxiliar); } fclose(p_archivo); } //--------------------------------------------------------------------------- // Listado de Boletas void listado_boletas(){ clrscr(); p_archivo = fopen(BOLETAS,"rb"); verificar(p_archivo); printf("Boleta Fecha Total_$\n"); printf("---------------------------\n"); while (fread(&boleta,sizeof(boleta),1,p_archivo)!=NULL) printf("%4i %2i/%2i/%4i %9.2f\n", boleta.cod_boleta, boleta.dia, boleta.mes, boleta.anio, boleta.p_unitario*boleta.cantidad ); fclose(p_archivo); getch(); } //--------------------------------------------------------------------------- void consulta_boletas(){} //--------------------------------------------------------------------------- // Listado de los medicamentos mas caros void medicamentos_caros(){ clrscr(); printf("LISTADO DE TODOS LOS MEDICAMENTOS\n"); printf("ordenados del m s caro al m s barato\n"); printf("------------------------------------\n"); p_archivo = fopen(MEDICAMENTOS,"rb"); verificar(p_archivo); arbol_med = NULL; while(fread(&medicamento,sizeof(medicamento),1,p_archivo)!=NULL){ insertar_arbol_med(&arbol_med,medicamento); } listar_arbol_med(arbol_med); fclose(p_archivo); getch(); } //Ordena el arbol de medicamentos por precio void insertar_arbol_med(p_nodo_medicamentos* a,struct reg_medicamentos d){ if (*a==NULL){ *a=(p_nodo_medicamentos) malloc(sizeof(nodo_medicamentos)); strcpy((*a)->nombre,d.nombre); (*a)->precio=d.precio; (*a)->izquierda = (*a)->derecha = NULL; } else if (d.precio<(*a)->precio) insertar_arbol_med(&(*a)->izquierda,d); else insertar_arbol_med(&(*a)->derecha,d); } //Lista el arbol de medicamentos de mayor a menor (PREORDEN) void listar_arbol_med(nodo_medicamentos *a){ if (a != NULL){ listar_arbol_med(a->derecha); printf("%-20s %9.2f\n",a->nombre,a->precio); listar_arbol_med(a->izquierda); } } void lab_mayor_compra(){ p_archivo = fopen(LABORATORIO,"rb"); verificar(p_archivo); //Valores iniciales float mayor_compra = -1; int lab_mayor_compra= -1; // 1§ se recorre el archivo de laboratorios while(fread(&laboratorio,sizeof(laboratorio),1,p_archivo)!=NULL){ //2§ para cada laboratorio se calcula el monto //que tenemos de sus medicamentos FILE *p_auxiliar = fopen(MEDICAMENTOS,"rb"); verificar(p_auxiliar); // Se suma en una variable todo el capital comprado float monto_lab = 0; while(fread(&medicamento,sizeof(medicamento),1,p_auxiliar)!=NULL) if (medicamento.cod_laboratorio==laboratorio.codigo) monto_lab += medicamento.cantidad*medicamento.precio; fclose(p_auxiliar); //Se verifica si es mayor que la compra a otro laboratorio if (monto_lab>mayor_compra){ mayor_compra = monto_lab; lab_mayor_compra=laboratorio.codigo; } printf("\nLab %i %-15s $ %9.2f",laboratorio.codigo, nombre_laboratorio(laboratorio.codigo),monto_lab); } fclose(p_archivo); //3§ Se informan los resultados printf("\n\nEl laboratorio al que se le compro m s fue %i %s\n", lab_mayor_compra,nombre_laboratorio(lab_mayor_compra)); printf("Se han comprado medicamentos por $ %9.2f\n", mayor_compra); getch(); } //--------------------------------------------------------------------------- //Esta funcion recibe el codigo del laboratorio //y devuelve el nombre del mismo char *nombre_laboratorio(int cod){ FILE *p_auxiliar = fopen(LABORATORIO,"rb"); verificar(p_auxiliar); while(fread(&laboratorio,sizeof(laboratorio),1,p_auxiliar)!=NULL){ if(cod==laboratorio.codigo){ fclose(p_auxiliar); return laboratorio.nombre; } } fclose(p_auxiliar); return NOEXISTE; } //--------------------------------------------------------------------------- // Verifica si el archivo tuvo alg£n error al abrir void verificar(FILE *p){ if (p==NULL){ printf("** El programa se cerrar  **\n\n"); perror("Ocurri¢ el siguiente error al abrir el archivo\n"); getch(); exit(1); } }