/**-------------------------------------------------------------
|  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();
	}

}
Exemple #5
0
/**--------------------------------------------------------
|  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;
}
Exemple #6
0
/**-------------------------------------------------------------
|  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();
}
Exemple #11
0
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();
}