/**------------------------------------------------------------- | Funcion: actualizarRuta | --------------------------------------------------------------- | Descripción: Muestra las opciones del menu principal: | | 1. Insertar parada | | 2. Eliminar parada | | 3. Eliminar tramo | | 0. Menu anterior | | Entradas: ninguna | | Retorno: seleccion del usuario. | --------------------------------------------------------------*/ void actualizarRuta(Tren tren) { int opcion; system("cls"); cabeceraTabla("Actualizar datos de la RUTA"); printf( "1 Insertar una nueva parada.\n"); printf( "2 Eliminar una parada.\n"); printf( "3. Eliminar todos los tramos.\n"); printf( "0. Menu anterior.\n\n"); printf("Selecciona opcion y pulsa <RETURN>: "); scanf("%d", &opcion); switch (opcion) { case 1: // Insertar una parada anadirUnTramo(tren); break; case 2: // Eliminar una parada eliminarUnTramo(tren); break; case 3: // Eliminar todo el tramo eliminarTramo(tren); case 0: // Menu anterior break; } }
/**------------------------------------------------------------- | Funcion: mostrarTodosTrenes | --------------------------------------------------------------- | Descripción: Lista todos los trenes registrados | | | | Entradas: vector de registros de tipo Tren | | Retorno: nada | --------------------------------------------------------------*/ void mostrarTodosTrenes(void) { char ID[8]; // Variables locales int np, j; char linea[255]; L_Trenes Trenes; int encontrado=0; // Compruebo existencia de archivo y nº de registros Trenes.num = NumRegArchivoBin(TRENES_BIN, sizeof(Tren)); if(!Trenes.num){ printf( "La lista de trenes esta vacia. \n"); Pausa(); return; // salimos de la función } // Cargamos los datos desde el archivo abrirArchivoTrenes(&Trenes); system("cls"); cabeceraTabla("Listado de Trenes"); comienzoTabla(); sprintf(linea, FMT_TRENX, 179, "ID", "Tren", "Tipo", "Origen", "Destino", "Hora Sal.", "Hora Lleg.", "Precio", 179); printf("%s", linea); linea[0] = (char)195; for(j=1;j<78;j++) linea[j] = (char)196; linea[78]=(char)180; linea[79]=0; printf("%s\n", linea); if (Trenes.num == 0) { printf("%c %-75s %c\n", 179, "La lista de trenes esta vacia.",179); } else { for (np=0; np < Trenes.num; np++) { mostrarTren(Trenes.lista[np]); } } finTabla(); printf("\n\nPresione <RETURN> para volver al menu anterior o bien introduzca la ID del \ntren del que desea mostrar la ruta: "); fflush(stdin); gets(ID); // compruebo si la cadena contiene algun codigo if(strlen(ID)==0) { return; } for(np=0;np<Trenes.num;np++) { if(strcmp(Trenes.lista[np].ID, ID) ==0) encontrado =1; //los ID coinciden encontrado=1, } if(!encontrado) {printf("\n\nEl ID NO es valido\n\n"); Pausa();} else mostrarTramo(ID); }
/**------------------------------------------------------------- | Funcion: mostrarTramo | --------------------------------------------------------------- | Descripción: Lista el tramo | | | | Entradas: nada | | Retorno: nada | --------------------------------------------------------------*/ void mostrarTramo(Tren ID) { // Variables locales int np, j,var1,var2; char linea[255]; L_Tramos Tramos; L_Estaciones estaciones; char archivo[50]; // Compruebo existencia de archivo y nº de registros sprintf(archivo, "../BaseDatos/Rutas/%s.ruta", ID); Tramos.num = NumRegArchivoBin(archivo, sizeof(TipoTramo)); if(!Tramos.num){ printf( "La lista de tramos esta vacia. \n"); Pausa(); return; // salimos de la función } // Cargamos los datos desde el archivo abrirArchivoRutasSinNumero(&Tramos, ID); abrirArchivoEstacionesSinNumero(&estaciones); printf("\n\n"); cabeceraTabla("Listado de Tramos"); comienzoTabla(); sprintf(linea, FMT_TRAMOX2, 179, "ID", "Origen", "Destino", "Inicio", "Fin", "Precio", 179); printf("%s", linea); linea[0] = (char)195; for(j=1;j<78;j++) linea[j] = (char)196; linea[78]=(char)180; linea[79]=0; printf("%s\n", linea); if (Tramos.num == 0) { printf("%c %-75s %c\n", 179, "La lista de tramos esta vacia.",179); } else { for (np=0; np < Tramos.num; np++) { var1 = comprobarNombre(Tramos.lista[np].IDorigen); var2 = comprobarNombre(Tramos.lista[np].IDdestino); printf(FMT_TRAMO2, 179, Tramos.lista[np].ID, estaciones.lista[var1].nombre, estaciones.lista[var2].nombre,Tramos.lista[np].inicio.horas, Tramos.lista[np].inicio.minutos,Tramos.lista[np].fin.horas, Tramos.lista[np].fin.minutos, Tramos.lista[np].precio, 179); } } finTabla(); Pausa(); }
/**------------------------------------------------------------- | Funcion: modificarUnTren | --------------------------------------------------------------- | Descripción: selecciona un tren y modifica uno de sus | | campos | | | | Entradas: ninguna | | Retorno: nada | --------------------------------------------------------------*/ void modificarUnTren() { int encontrado = 0, i=0; char cadena[80]=""; L_Trenes trenes; // Compruebo existencia de archivo y nº de registros trenes.num = NumRegArchivoBin(TRENES_BIN, sizeof(Tren)); if(!trenes.num){ printf( "La lista de trenes esta vacia. \n"); Pausa(); return; } // hay paradas registradas system("cls"); cabeceraTabla("Actualizar los datos de un tren"); abrirArchivoTrenes(&trenes); mostrarTodosTrenes_v2(); printf("Seleccione codigo del tren \na modificar (pulse <RETURN> para cancelar): "); fflush(stdin); gets(cadena); // compruebo si la cadena contiene algun codigo if(strlen(cadena)==0) { printf("Modificacion cancelada\n"); Pausa(); return; } // busqueda del tren correspondiente al codigo tecleado i=0; while(!encontrado && i<trenes.num) { if( strcmp(trenes.lista[i].ID, cadena) == 0) { encontrado = 1; } else i++; } if(encontrado) { // se ha encontrado la estacion modificarTren(&trenes.lista[i]); grabarArchivoTrenes(trenes); } else{ // no se ha encontrado la estacion printf("El tren de codigo %s no esta registrado\n", cadena); Pausa(); } }
/**-------------------------------------------------------- | Funcion: menuSesion | ---------------------------------------------------------- | Descripción: Muestra las opciones del menu: | | 1. Nuevo cliente | | 2. Cerrar sesión | | Entradas: ninguna | | Retorno: seleccion del usuario. | ---------------------------------------------------------*/ int menuSesion(void) { // Variables locales int eleccion; system("cls"); cabeceraTabla("Terminal Punto de Venta"); printf( "1. Nuevo cliente.\n"); printf( "0. Cierre de sesion.\n\n"); eleccion = leerOpcionValida("Seleccione opcion: ", '1'); return eleccion; }
/**------------------------------------------------------------- | Funcion: menuPrincipal | --------------------------------------------------------------- | Descripción: Muestra las opciones del menu principal: | | 1. Mantenimiento de artículos | | 2. Mantenimiento de Proveedores | | Entradas: ninguna | | Retorno: seleccion del usuario. | --------------------------------------------------------------*/ int menuPrincipal(void) { // Variables locales int eleccion; system("cls"); cabeceraTabla("Terminal Punto de Venta"); printf( "1. Identificaci\242n de empleado.\n"); printf( "0. Fin del Programa.\n\n"); eleccion = leerOpcionValida("Seleccione opcion: ", '1'); return eleccion; }
/**------------------------------------------------------------- | Funcion: menuPrincipal | --------------------------------------------------------------- | Descripción: Muestra las opciones del menu principal: | | 1. Mantenimiento de Estaciones | | 2. Mantenimiento de Trenes | | 3. Generacion de Tramos | | Entradas: ninguna | | Retorno: seleccion del usuario. | --------------------------------------------------------------*/ int menuPrincipal(void) { // Variables locales int eleccion; system("cls"); cabeceraTabla("Sistema de Planificacion de Viajes"); printf( "1 Mantenimiento de Estaciones.\n"); printf( "2 Mantenimiento de Trenes.\n"); printf( "3 Generacion de Tramos.\n"); printf( "0. Fin del Programa.\n\n"); eleccion = leerOpcionValida("Seleccione opcion: ", '3'); return eleccion; }
/**------------------------------------------------------------- | Funcion: menuMantenimientoTrenes | --------------------------------------------------------------- | Descripción: Muestra las opciones de mantenimiento: | | 1. Añadir un nuevo tren | | 2. Listar todos los trenes | | 3. Actualizar los datos de un tren | | 4. Eliminar un tren | | Entradas: ninguna | | Retorno: seleccion del usuario. | --------------------------------------------------------------*/ int menuMantenimientoTrenes(void) { // Variables locales int eleccion=0; system("cls"); cabeceraTabla("Mantenimiento de Trenes"); printf( "1 A\244adir un nuevo tren\n"); printf( "2 Listar todos los trenes\n"); printf( "3 Actualizar los datos de un tren\n"); printf( "4. Eliminar un tren\n"); printf( "0. Menu anterior.\n\n"); eleccion = leerOpcionValida("Seleccione opcion: ", '4'); return eleccion; }
/**------------------------------------------------------------- | Funcion: menuPrincipal | --------------------------------------------------------------- | Descripción: Muestra las opciones del menu principal: | | 1. Calcular ruta mas rapida | | 2. Calcular ruta mas corta | | 3. Calcular ruta mas economica | | Entradas: ninguna | | Retorno: seleccion del usuario. | --------------------------------------------------------------*/ int menuPrincipal(void) { // Variables locales int eleccion; system("cls"); cabeceraTabla("Sistema de Planificacion de Viajes"); printf( " 1. Calcular ruta mas rapida\n"); printf( " 2. Calcular ruta mas corta\n"); printf( " 3. Calcular la ruta mas economica.\n"); printf( " 4. Funcion ampliacion\n"); printf( " 0. Fin del Programa.\n\n"); eleccion = leerOpcionValida("Seleccione opcion: ", '4'); return eleccion; }
/**------------------------------------------------------------- | Funcion: mostrarTodosTrenes | --------------------------------------------------------------- | Descripción: Lista todos los trenes registrados | | | | Entradas: vector de registros de tipo Tren | | Retorno: nada | --------------------------------------------------------------*/ void mostrarTodosTrenes_v2(void) { char ID[8]; // Variables locales int np, j; char linea[255]; L_Trenes Trenes; int encontrado=0; // Compruebo existencia de archivo y nº de registros Trenes.num = NumRegArchivoBin(TRENES_BIN, sizeof(Tren)); if(!Trenes.num){ printf( "La lista de trenes esta vacia. \n"); Pausa(); return; // salimos de la función } // Cargamos los datos desde el archivo abrirArchivoTrenes(&Trenes); system("cls"); cabeceraTabla("Listado de Trenes"); comienzoTabla(); sprintf(linea, FMT_TRENX, 179, "ID", "Tren", "Tipo", "Origen", "Destino", "Hora Sal.", "Hora Lleg.", "Precio", 179); printf("%s", linea); linea[0] = (char)195; for(j=1;j<78;j++) linea[j] = (char)196; linea[78]=(char)180; linea[79]=0; printf("%s\n", linea); if (Trenes.num == 0) { printf("%c %-75s %c\n", 179, "La lista de trenes esta vacia.",179); } else { for (np=0; np < Trenes.num; np++) { mostrarTren(Trenes.lista[np]); } } finTabla(); Pausa(); }
void gestionMenuPrincipal(void) { int opcion, clave; while (( opcion = menuPrincipal() ) != 0) { switch (opcion) { case 1: // Identificacion usuario clave = identificacionEmpleado(); //clave = 1; // para probar menu Gerente clave = 3; // para probar menu Encargado //gestionSesion(clave); if(clave==3) gestionMenuSesion(); break; case 0: // Salida del programa break; } // fin switch } // fin while cabeceraTabla("Fin del programa"); }
/**------------------------------------------------------------- | Funcion: eliminarUnTramo | --------------------------------------------------------------- | Descripción: elimina un tramo de la lista | | | | Entradas: los datos se leen del archivo | | Retorno: nada | --------------------------------------------------------------*/ void eliminarUnTramo(Tren tren) { FILE *ptr; int i,i1, est1, est2,encontrado1,encontrado, duracionMin, duracionHor,np,var1,duracionTren; char cadena[10]; char archivo[50]; int eleccion; char opcion; L_Tramos tramos; L_Estaciones estaciones; // Compruebo existencia de archivo y nº de registros sprintf(archivo, "../BaseDatos/Rutas/%s.ruta", tren); tramos.num = NumRegArchivoBin(archivo, sizeof(TipoTramo)); if(!tramos.num){ printf( "La lista de tramos esta vacia. \n"); Pausa(); return; } // hay paradass registradas system("cls"); cabeceraTabla("Eliminar un tramo"); abrirArchivoRutas(&tramos,tren); mostrarTramo(tren); printf("Asociacion de nombre con su ID:\n"); abrirArchivoEstacionesSinNumero(&estaciones); for (np=0; np < tramos.num; np++) { var1 = comprobarNombre(tramos.lista[np].IDorigen); printf("\t%d. %s - (%s%)\n", np, estaciones.lista[var1].nombre,tramos.lista[np].IDorigen); } printf("\nEscriba la ID de la estacion de origen del tramo que quiere eliminar: "); gets(cadena); i= 0; encontrado = 0; while(i<tramos.num && !encontrado) { if( strcmp(tramos.lista[i].IDorigen, cadena) == 0) // si el codigo de la estacion coincide { encontrado = 1; // hemos encontrado la estacion a borrar } else i++; } if(encontrado) { eleccion = i; printf("Ha seleccionado el siguiente tramo:\n"); comienzoTabla(); mostrarUnTramo(tramos.lista[eleccion]); finTabla(); opcion = leerSiNo("Desea eliminarlo (S/N)?"); if(opcion == 'S') { // Recalculamos IDdestino de la anterior ID, la hora..precio..duracion..distancia.. tramos.lista[i-1].fin.horas = tramos.lista[i].fin.horas; tramos.lista[i-1].fin.minutos = tramos.lista[i].fin.minutos; strcpy(tramos.lista[i-1].IDdestino, tramos.lista[i+1].IDorigen); // Calculamos la duracion del tramo if(tramos.lista[i-1].inicio.minutos > tramos.lista[i-1].fin.minutos) { duracionHor = (((tramos.lista[i-1].fin.horas) - (tramos.lista[i-1].inicio.horas))-1)*60; duracionMin = ((60-tramos.lista[i-1].inicio.minutos)+tramos.lista[i-1].fin.minutos); } else { duracionHor = (tramos.lista[i-1].fin.horas - tramos.lista[i-1].inicio.horas)*60; // En minutos duracionMin = tramos.lista[i-1].fin.minutos - tramos.lista[i-1].inicio.minutos; if(duracionMin<0) duracionMin = -(duracionMin); // Cambiamos el signo si fuera negativo if(duracionHor<0) duracionHor = -(duracionHor); } tramos.lista[i-1].duracion = duracionMin + duracionHor; // Calculamos la duracion if(tren.salida.minutos > tren.llegada.minutos) { duracionHor = (((tren.llegada.horas) - (tren.salida.horas))-1)*60; duracionMin = ((60-tren.salida.minutos)+tren.llegada.minutos); } else { duracionHor = (tren.llegada.horas - tren.salida.horas)*60; // En minutos duracionMin = tren.llegada.minutos - tren.salida.minutos; if(duracionMin<0) duracionMin = -(duracionMin); // Cambiamos el signo si fuera negativo if(duracionHor<0) duracionHor = -(duracionHor); } duracionTren = duracionMin + duracionHor; //Recalculamos el precio tramos.lista[i-1].precio = ((tramos.lista[i-1].duracion) * (tren.precio/duracionTren)); // Calculamos la distancia, abriendo las estaciones abrirArchivoEstaciones(&estaciones); // aqui buscamos la estacion que corresponde con la ID encontrado1=0; i1=0; while(i1<estaciones.num && !encontrado1) { if(strcmp(estaciones.lista[i1].ID, tramos.lista[i-1].IDorigen)==0) encontrado1=1; //encontro else i1++; } est1 = i1; //copiamos i1=0; encontrado1=0; while(i1<estaciones.num && !encontrado1) { if(strcmp(estaciones.lista[i1].ID, tramos.lista[i-1].IDdestino)==0) encontrado1=1; else i1++; } est2 = i1; tramos.lista[i-1].distancia = distanciaGeodesica(estaciones.lista[est1].pos, estaciones.lista[est2].pos); for(i=eleccion;i<tramos.num;i++) tramos.lista[i] = tramos.lista[i+1]; // copio el tramo i+1 en la i tramos.num--; printf("El tramo ha sido borrado\n"); Pausa(); ptr = fopen(archivo, "wb"); fwrite((TipoTramo*)tramos.lista, sizeof(TipoTramo), tramos.num, ptr); fclose(ptr); imprimirTramos(tren); } else { printf("Eliminacion cancelada\n"); Pausa(); } } else // no existe esa estacion printf("El codigo seleccionado (%s) no corresponde a ningun tramo.\n", cadena); Pausa(); }
/**------------------------------------------------------------- | Funcion: eliminarTren | --------------------------------------------------------------- | Descripción: elimina un tren de la lista | | | | Entradas: los datos se leen del archivo | | Retorno: nada | --------------------------------------------------------------*/ void eliminarTren(void) { int i, encontrado; char codigo[10]; char archivo[50]; char archivo2[50]; int eleccion; char opcion; L_Trenes trenes; // Compruebo existencia de archivo y nº de registros trenes.num = NumRegArchivoBin(TRENES_BIN, sizeof(Tren)); if(!trenes.num){ printf( "La lista de trenes esta vacia. \n"); Pausa(); return; } // hay paradass registradas system("cls"); cabeceraTabla("Eliminar un tren"); abrirArchivoTrenes(&trenes); mostrarTodosTrenes_v2(); printf("Indique el codigo del tren que quiere eliminar: "); gets(codigo); i= 0; encontrado = 0; while(i<trenes.num && !encontrado) { if( strcmp(trenes.lista[i].ID, codigo) == 0) // si el codigo del tren coincide { encontrado = 1; // hemos encontrado el tren a borrar } else i++; } if(encontrado) { eleccion = i; printf("Ha seleccionado el siguiente tren:\n"); comienzoTabla(); mostrarTren(trenes.lista[eleccion]); finTabla(); opcion = leerSiNo("Desea eliminarlo (S/N)?"); if(opcion == 'S') { // borro el archivo ruta correspondiente sprintf(archivo, "../BaseDatos/Rutas/%s.ruta", trenes.lista[eleccion].ID); sprintf(archivo2, "../BaseDatos/Rutas/%s.lista", trenes.lista[eleccion].ID); remove(archivo); remove(archivo2); for(i=eleccion;i<trenes.num;i++) trenes.lista[i] = trenes.lista[i+1]; // copio el tren i+1 en la i trenes.num--; printf("El tren de codigo %s ha sido borrado\n", codigo); grabarArchivoTrenes(trenes); imprimirTrenes(); } else { printf("Eliminacion cancelada\n"); Pausa(); } } else // no existe esa estacion printf("El codigo seleccionado (%s) no corresponde a ningun tren.\n", codigo); Pausa(); }