Hola!
estoy haciendo un trabajo de la universidad en el cual gestionamos una "base de datos" con las empleadas que tenemos en una empresa. El programa lee el documento.txt donde está el listado de las empleadas y despues puedes borrar y dar de alta a empleadas.
El problema aparece cuando se ejecuta, indica que no puede abrir el documento.txt. Alguien sabe que puede ser? llevo más de 2h con el debuger y nada...
Muchas gracias!!!
Adjunto código:
Código PHP:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXP 80
#define MAXEMP 5
typedef char Tpalabra [MAXP];
//DEFINICION DE ESTRUCTURAS
typedef struct
{
int id; //Nº de empleada
Tpalabra nombre; //nombre empleada
}Templeada;
typedef struct{
int num_empleadas; //nº de empleadas
Templeada empleada[MAXEMP]; //Empleadas
}Tlista_empleadas;
//FIN DEFINICION DE ESTRUCTURAS
/*---------------------------------------------------------------------------------------------------------------*/
/*OPERACIONES DE LECTURA-ESCRITURA DE DATOS DEL FICHERO*/
int salva_empleadas (Tpalabra f, Tlista_empleadas *l)
{
int i=0;
FILE*datos;
datos = fopen (f, "w");
if (datos==NULL)
{
return -1;
}
while (i<l->num_empleadas)
{
fprintf(datos, "%d %s \n", l->empleada[i].id, l ->empleada[i].nombre);
i++;
}
fclose (datos);
return 0;
};
/*-----------------------------------------------------------------------------------------------------*/
//PARTE ADRIAN
int cargar_empleadas (Tpalabra f, Tlista_empleadas * l)
{
/* Carga en lista l información de las empleadas, qe está en el fichero de texto cuyo nombre está en f.
Devulve:
0 si la carga es correcta
-1 si no encuentra el fichero
-2 si los datos del fichero no están correctos
*/
int i=0;
int err;
int cod;
Tpalabra nom;
FILE *datos;
datos=fopen (f, "r");
if(datos==NULL)
return -1;
else
{
while(!feof(datos))
{
err=fscanf(datos, "%d %s%*", &cod, nom);
if(err!=2)
return -2;
else
{
l->empleada[i].id =cod;
strcpy (l->empleada[i].nombre,nom);
i++;
}
}
l->num_empleadas=i;
return 0;
}
}
/*---------------------------------------------------------------------------------------------------*/
//PARTE HIGINIO
//ALTA, BAJA, EDICION Y LISTA DE DATOS
int alta_empleada (Templeada emp, Tlista_empleadas * l)
{
/*Anade una empleada al final de la lista de empleada
Devuelve:
0 si la ha anadido correctamente
-1 si no la ha podido aÒadir */
if(l->num_empleadas==MAXEMP)
return (-1);
else
{
l->empleada[l->num_empleadas++]=emp;
return (0);
}
};
int busca_empleada(int codigoEmpleada, Tlista_empleadas * l)
{
/*Busca una empleada de la lista que tenga el codigo. Duevuelve:
i ( que es la posicion) si ha encontrado la empleada correctamente
-1 si no la ha encontrado */
int i = 0;
while (i < l ->num_empleadas)
{
if (l->empleada[i].id == codigoEmpleada)
return i;
else
i++;
}
return -1;
};
int baja_empleada (int numEmpleada, Tlista_empleadas * l)
{
/* Elimina una empleada de la lista de empleadas
Deuelve:
0 si la ha borrado correctamente
-1 si no la ha podido borrar */
int i,j;
i = busca_empleada (numEmpleada, l);
if (i != -1)
{
j=i;
while (j < l ->num_empleadas-1)
{
l ->empleada[j] = l ->empleada[j+1];
j++;
}
l ->num_empleadas --;
return 0;
}
else
return -1;
};
/*------------------------------------------------------------------------------------------------*/
//PARTE VICTOR
//PROGRAMA PRINCIPAL
int main ()
{
Tlista_empleadas mis_empleadas;
Templeada nueva_empleada;
Tpalabra fichero;
int err, op, codigo_baja;
/*cargmos el fichero empleadas*/
strcpy (fichero, "empl2.txt");
err = cargar_empleadas (fichero, &mis_empleadas);
if (err==-1)
printf("No se ha podido encontrar el fichero de empleadas '%s'. \n", fichero);
else if (err==-2)
printf("Los datos de las empleadas no estaban en el formato correcto '%s'. \n", fichero);
else
{
printf("Los datos de las empleadas se han cargado correctamente '%s'. \n", fichero);
op=-1;
while (op!=0)
{
printf("Escribe la opcion deseada:\n");
printf("0: Acabar \n");
printf("1: Dar de alta a una empleada \n");
printf("2: Dar de baja a una empleada \n");
printf("3: Ayuda \n");
scanf("%d", &op);
switch (op)
{
case 0: break; //Salir
case 1: printf("Escribe el código y nombre de la empleada a agregar: \n"); //Alta
scanf("%d %s", &nueva_empleada.id, nueva_empleada.nombre);
err = alta_empleada(nueva_empleada, &mis_empleadas);
if (err==0)
printf("La empleada '%s' se ha dado de alta. \n", nueva_empleada.nombre);
else{
printf("Error al da de alta a la empleada '%s' ya que no hay más sitio. \n", nueva_empleada.nombre);
}
break;
case 2: printf("Escribe el codigo de la empleada a eliminar: \n"); //Baja
scanf("%d", &codigo_baja);
err = baja_empleada (codigo_baja, &mis_empleadas);
if (err==0)
printf("La empleada numero '%d' se ha dado de baja correctamente. \n", codigo_baja);
else{
printf("Error al intentar dar de baja a la empleada '%d' ya que no se ha encontrado. \n", codigo_baja);}
break;
case 3: printf("Busca ayuda especializada ya que no entender dichas ordenes es de gente un poco lerda... \n"); //Ayuda
break;
default: printf("Codigo de operacion erroneo, necesitas ayuda? \n");
break;
}
printf("Gracias por usar el programa. \n");
}
//Guardamos el fichero de empleadas
strcpy (fichero, "empl3.txt");
err=salva_empleadas(fichero, &mis_empleadas);
if (err==0)
printf("Los datos de las emleadas se han guardado correctamente en '%s'. \n", fichero);
else if(err==-1)
printf("Error al abrir para escritura el fichero de empleadas '%s'. \n", fichero);
}
}