FRIHOSTFORUMSSEARCHFAQTOSBLOGSDIRECTORY
You are invited to Log in or Register a Frihost Account!

[help]Ejercicio en lenguaje C

 


Caxius
Hola!!! querias preguntaros si alguien sabe programar en c?
Vereis, tengo que entregar una practica en clase, pero resulta que una de las funciones de mi programa no sé como hacerla...
Os cuanto de que va la cosa.
Es un programa de venta de billetes de tren, y utilizo ficheros. Una funcion me inserta las ventas, otra puede modificarlas, mostrarlas, buscar una venta determinada, borrar una venta determinada....
Pero tengo que crear una funcion que me borre todo el fichero, y no se como hacerlo...
Me podriais sugerir algo?
Muchas gracias Wink
Jimi_Hendrix
Este es un programa que hice en 1º de carrera en metodos informaticos que hace todo eso que acabas de decir pero con datos de empleados, se hace con listas doblemente enlazadas (asignacion de punteros para asignacion dinamica de memoria hacia delante y hacia atras para poder poner la opcion de borrar datos). Probablemente puedes aprovechar trozos , solo tienes que cambiar el nombre a las variables.

La pega esta en que cada persona tiene su caracteristica forma de programar y posiblemente haya funciones que no las entiendas pero lo dicho, por mandartelo no se pierde nada. De nada salada. Por cierto, puedes probar a compilarlo y ejecutarlo

/*Librerias utilizadas en el programa*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
#include <stdlib.h>

/*Declaracion de las dos estructuras doblemente enlazadas empleadas en el
programa, una se refiere a los datos de empleados y la otra a los datos
de departamentos*/

struct trabajador
{
int codigo_emp;
int codigo_dep;
char nombre[20];
char apellidos[40];
char sexo;
int ano_nac;
int mes_nac;
int dia_nac;
int ano_ing;
int mes_ing;
int dia_ing;
float sueldo_mensual;
char telefono1[15];
char telefono2[15];
char dni[15];
char direccion[25];
long cp;
char provincia[25];
struct trabajador*siguiente;
struct trabajador*anterior;
};

struct departamento
{
int codigo_departamento;
char nombre_departamento[20];
char tipo[20];
float presupuesto;
char ubicacion[20];
struct departamento *next;
struct departamento *back;
};

/*Declaracion de variables globales*/
int i=0,j=0;
/*Punteros a ficheros*/
FILE*pf;
FILE*pf1;
FILE*uno;
FILE*dos;

/*Declaracion de funciones empleadas en el programa*/
struct departamento *insertar_departamento(struct departamento*last);
struct trabajador*insertar(struct trabajador*ultimo);
struct trabajador*crea(struct trabajador*);
struct trabajador*cambiar_empleado(struct trabajador*actual);
struct departamento* creador(struct departamento*);
struct departamento*modificar_departamento(struct departamento*actual);
void menu1();
void empleado();
void submenu();
void submenu2();
void visualizar();
void visualizarx();
void departamento();
void mirarlo();
void borrar(struct trabajador*actual);
void eliminar(struct departamento*now);
struct trabajador *primero,*actual,*ultimo;
struct departamento *first,*now,*last;


main()
{
/*Declaracion de variables locales*/

int fin,w,esteano,temporal,edad,laedad,modifica,modificar;
char nom_fich[50],nombre_fichero[50],confirmar;
char fich_emp[50],fich_dep[50],elcodigo,opcionp;
float tolfin,tolfin2,tolfin3,sueldo_minimo,sueldo_maximo;
int opcion,eleccion,modifica_departamento;
int opcionx,variable,antiguedad,codigo_depart;
char respuesta,opcionz,confirma;

/*Se crean los primeros registros tanto de empleados como de
departamentos,el primero de los cuales se dejara invalido para
el almacenamiento de los datos*/

primero=crea(NULL);
ultimo=primero;
ultimo->siguiente=crea(ultimo);
ultimo=ultimo->siguiente;

first=creador(NULL);
last=first;
last->next=creador(last);
last=last->next;

/*Aplicamos un color personalizado en el programa*/

textbackground(1);
textcolor(10);

/*El bucle que comienza aqui garantiza que el programa no se finalizara a no
ser que el usuario lo indique en la opcion destinada al efecto*/
do
{
/*Menu de inicio del programa*/
clrscr();
menu1();
fflush(stdin);
scanf("%d",&opcion);
switch(opcion)
{

/*Si la opcion marcada no se refleja en el menu, aparecera una
advertencia*/

default:
clrscr();
printf(" ***************Opcion Incorrecta***************");
getch();
break;

/*cargar ficheros con registros*/
case 1:
clrscr();
printf("Introduzca Path y Nombre del fichero:\n");
printf("-------->");
fflush(stdin);
scanf("%s",fich_emp);

/*Se abren los ficheros con los datos, si ocurriera algun percance en
su apertura aparecera una advertencia*/
strcpy(fich_dep,fich_emp);
strcat(fich_dep,".dep");
strcat(fich_emp,".per");

uno=fopen(fich_emp,"r");
dos=fopen(fich_dep,"r");

if(uno==NULL||dos==NULL)
{
printf("Error en la apertura de ficheros\n Compruebe si el nombre y/o la ruta es valida");
getch();
break;
}

else
{
printf("Ficheros:%s\n",fich_emp);
printf(" %s\n",fich_dep);
printf("Ya existentes\n Desea cargar los datos del personal almacenado?(S/N)");
fflush(stdin);
scanf("%c",&respuesta);
}
if(respuesta=='s'||respuesta=='S')
{
/*Los datos de los ficheros se cargan directamente a la lista enlazada*/
actual=primero->siguiente;
/*Cuando fin sea igual a -1 significara que ya se han cargado todos los
datos del fichero*/
while(fin!=-1)
{
fin=0;
fin=fscanf(uno,"%d",&(actual->codigo_emp));
fin=fscanf(uno,"%d",&(actual->codigo_dep));
fin=fscanf(uno,"%s",(actual->nombre));
fin=fscanf(uno,"%s",(actual->apellidos));
fin=fscanf(uno,"%c",&(actual->sexo));
fin=fscanf(uno,"%d",&(actual->ano_nac));
fin=fscanf(uno,"%d",&(actual->mes_nac));
fin=fscanf(uno,"%d",&(actual->dia_nac));
fin=fscanf(uno,"%d",&(actual->ano_ing));
fin=fscanf(uno,"%d",&(actual->mes_ing));
fin=fscanf(uno,"%d",&(actual->dia_ing));
tolfin=0;
fin=fscanf(uno,"%f",&tolfin);
actual->sueldo_mensual=tolfin;
fin=fscanf(uno,"%s",(actual->telefono1));
fin=fscanf(uno,"%s",(actual->telefono2));
fin=fscanf(uno,"%s",(actual->dni));
fin=fscanf(uno,"%s",(actual->direccion));
fin=fscanf(uno,"%ld",&(actual->cp));
fin=fscanf(uno,"%s",(actual->provincia));
if(fin!=-1)
{
actual->siguiente=crea(actual);
actual=actual->siguiente;
i++;
}
}
fclose(uno);

fin=0;
last=first->next;
while(fin!=-1)
{
fin=fscanf(dos,"%d",&(last->codigo_departamento));
fin=fscanf(dos,"%s",(last->nombre_departamento));
fin=fscanf(dos,"%s",(last->tipo));
fin=fscanf(dos,"%f",&tolfin3);
last->presupuesto=tolfin3;
fin=fscanf(dos,"%s",(last->ubicacion));
if(fin!=-1)
{
last->next=creador(last);
last=last->next;
j++;
}
}
fclose(dos);
break;
}
else
break;


/*Listados de informacion*/
case 2:
clrscr();
printf("Introduzca el A¤o actual------>");
fflush(stdin);
scanf("%d",&esteano);
do
{
clrscr();
submenu2();
printf("\nPulse 1-2-3-4-5-6-7-8-9-0----->");
fflush(stdin);
scanf("%d",&opcionx);
switch(opcionx)
{
default:
clrscr();
printf(" ********Opcion Incorrecta********");
getch();
break;
case 1:
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}
w=0;
clrscr();
actual=primero->siguiente;
do
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}while(actual->siguiente!=NULL);
clrscr();
printf("\n *********Fin del Listado*********");
getch();
break;
case 0:
break;
case 2:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}
printf("Introduzca la edad minima requerida al empleado--->");
fflush(stdin);
scanf("%d",&laedad);

w=0;
actual=primero->siguiente;
do
{
edad=0;
edad=esteano-(actual->ano_nac);
if(edad>laedad)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;
case 3:
laedad=0;
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}

printf("Introduzca la edad maxima requerida al empleado--->");
fflush(stdin);
scanf("%d",&laedad);

w=0;
actual=primero->siguiente;
do
{
edad=0;
edad=esteano-(actual->ano_nac);
if(edad<laedad)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;
case 4:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}
printf("Introducir la antiguedad minima requerida al empleado:");
fflush(stdin);
scanf("%d",&variable);
actual=primero->siguiente;
w=0;
do
{
antiguedad=0;
antiguedad=esteano-(actual->ano_ing);
if(antiguedad>variable)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
case 5:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}
printf("Introducir la antiguedad maxima requerida al empleado:");
fflush(stdin);
scanf("%d",&variable);
actual=primero->siguiente;
w=0;
do
{
antiguedad=0;
antiguedad=esteano-(actual->ano_ing);
if(antiguedad<variable)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
case 6:
if(j==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de departamento**********");
getch();
break;
}
w=0;
clrscr();
now=first->next;
do
{
clrscr();
mirarlo();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
now=now->next;
}while(now->next!=NULL);
clrscr();
printf("\n *********Fin del Listado*********");
getch();
break;
case 7:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}
if(j==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de departamento**********");
getch();
break;
}

printf("Introduzca el codigo del departamento:");
fflush(stdin);
scanf("%s",elcodigo);
now=first->next;
actual=primero->siguiente;
w=0;
do
{
if(actual->codigo_dep==now->codigo_departamento)
{
clrscr();
visualizarx();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
now=now->next;
}
else
{
actual=actual->siguiente;
now=now->next;
}
}while((actual->siguiente)!=NULL||(now->next)!=NULL);
case 8:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}

printf("Introducir el sueldo minimo requerido al empleado:");
fflush(stdin);
scanf("%f",&sueldo_minimo);
actual=primero->siguiente;
w=0;
do
{
if(sueldo_minimo<actual->sueldo_mensual)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;
case 9:
clrscr();
if(i==0)
{
clrscr();
printf(" ***********Inserte antes al menos un registro de empleado**********");
getch();
break;
}

printf("Introducir el sueldo maximo requerido al empleado:");
fflush(stdin);
scanf("%f",&sueldo_maximo);
actual=primero->siguiente;
w=0;
do
{
if(sueldo_maximo>actual->sueldo_mensual)
{
clrscr();
visualizar();
w++;
printf("\nREGISTRO NUMERO--->%d",w);
printf("\nPulse cualquier tecla para continuar...");
getch();
actual=actual->siguiente;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;



}


}while(opcionx!=0);
break;

/*Guardar datos en fichero*/
case 4:
respuesta=0;
clrscr();
printf("Introduzca Path y Nombre del fichero:\n ");
printf("--------->");
fflush(stdin);
scanf("%s",nombre_fichero);

/*Se crean los ficheros en los que se almacenaran los datos*/

strcpy(nom_fich,nombre_fichero);
strcat(nombre_fichero,".per");
strcat(nom_fich,".dep");

printf("Se van a crear los Ficheros:%s",nombre_fichero);
printf("\n %s",nom_fich);
printf("\nDesea continuar?(S/N)\n");
fflush(stdin);
scanf("%c",&respuesta);
if(respuesta=='s'||respuesta=='S')
{
pf=fopen(nombre_fichero,"w");
pf1=fopen(nom_fich,"w");
}
else
break;
/*Al mismo tiempo que se va recorriendo la lista enlazada, los datos
de esta se van almacenando en un fichero creado anteriormente*/
actual=primero->siguiente;
do
{
fprintf(pf,"\n %d",actual->codigo_emp);
fprintf(pf," %d",actual->codigo_dep);
fprintf(pf," %s",actual->nombre);
fprintf(pf," %s",actual->apellidos);
fprintf(pf," %c",actual->sexo);
fprintf(pf," %d",actual->ano_nac);
fprintf(pf," %d",actual->mes_nac);
fprintf(pf," %d",actual->dia_nac);
fprintf(pf," %d",actual->ano_ing);
fprintf(pf," %d",actual->mes_ing);
fprintf(pf," %d",actual->dia_ing);
fprintf(pf," %f",actual->sueldo_mensual);
fprintf(pf," %s",actual->telefono1);
fprintf(pf," %s",actual->telefono2);
fprintf(pf," %s",actual->dni);
fprintf(pf," %s",actual->direccion);
fprintf(pf," %ld",actual->cp);
fprintf(pf," %s",actual->provincia);
actual=actual->siguiente;

} while(actual->siguiente!=NULL);
fclose(pf);

now=first->next;
do
{
fprintf(pf1,"\n %d",now->codigo_departamento);
fprintf(pf1," %s",now->nombre_departamento);
fprintf(pf1," %s",now->tipo);
fprintf(pf1," %f",now->presupuesto);
fprintf(pf1," %s",now->ubicacion);
now=now->next;
} while(now->next!=NULL);
fclose(pf1);

printf("Archivos guardados correctamente...");
getch();
break;


case 5:
clrscr();

printf("\n ***************************GRACIAS******************************");
printf("\n ********POR UTILIZAR EL AUTENTICO DAVIDïs STORAGE MEDIA*********");
printf("\n **********************RECHACE IMITACIONES***********************");
getch();
exit(0);

case 3:


clrscr();
submenu();
fflush(stdin);
scanf("%d",&eleccion);



switch (eleccion)
{

case 1:
clrscr();
ultimo=insertar(ultimo);
i++;
ultimo->siguiente=crea(ultimo);
ultimo=ultimo->siguiente;
getch();
break;

case 2:
/*Opcion que permite eliminar registros con datos de empleados*/
temporal=0;
if(i==0)
{
clrscr();
printf(" *********No hay registros de empleados********");
getch();
break;
}

actual=primero->siguiente;
clrscr();
printf("Introduzca el Codigo del Empleado que desea eliminar:");
fflush(stdin);
scanf("%d",&temporal);
do
{
if(temporal==actual->codigo_emp)
{
printf("Borrar empleado %s\n Desea continuar?(S/N)",actual->nombre);
fflush(stdin);
scanf("%c",&opcionz);
if(opcionz=='s'||opcionz=='S')
{
borrar(actual);
printf("Registro borrado");
i--;
getch();
break;
}
else
break;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;

case 5:
/*Esta opcion permite eliminar un registro ya introducido anteriormente*/
clrscr();
now=first->next;
if(j==0)
{
clrscr();
printf(" **********No hay registros de departamentos**********");
getch();
break;
}

printf("Introducir el nombre del departamento que desea eliminar:");
fflush(stdin);
scanf("%d",&codigo_depart);

do
{
if(codigo_depart==now->codigo_departamento)
{
printf("Borrar departamento %s\n Desea continuar?(S/N)",now->nombre_departamento);
fflush(stdin);
scanf("%c",&opcionp);
if(opcionp=='s'|| opcionp=='S')
{
eliminar(now);
printf("Registro borrado");
j--;
getch();
break;
}
else
break;
}

else
{
now=now->next;
}
}while(now->next!=NULL);
break;

/*Crea un registro de departamento con sus respectivos datos*/
case 4:
clrscr();
last=insertar_departamento(last);
j++;
last->next=creador(last);
last=last->next;
getch();
break;

case 3:
/*Esta opcion permite modificar los datos de un registro de empleado
ya introducido anteriormente, para ello va recorriendo la lista enla-
zada hasta encontrar el registro indicado. Una vez encontrado, si el
usuario lo indica se podran modificar los datos del registro, lo cual
supone la eliminacion de los datos anteriores*/
modifica=0;
clrscr();
if(i==0)
{
clrscr();
printf(" *********No hay registros de empleados********");
getch();
break;
}
printf("Introduzca el codigo del empleado para modificar su registro-----> ");
fflush(stdin);
scanf("%d",&modifica);
actual=primero->siguiente;
do
{
if(modifica==actual->codigo_emp)
{
printf("Modificar registro del empleado %s %s",actual->nombre,actual->apellidos);
printf("\nDesea continuar?(S/N)");
fflush(stdin);
scanf("%c",&confirma);
if(confirma=='s'||confirma=='S')
{
actual=cambiar_empleado(actual);
break;
}
else
break;
}
else
{
actual=actual->siguiente;
}
}while(actual->siguiente!=NULL);
break;

/*Realiza el mismo servicio que el caso anterior pero con los datos
de departamentos*/
case 6:
clrscr();
now=first->next;
modifica_departamento=0;
if(j==0)
{
printf(" **********No hay registros de departamentos**********");
getch();
break;
}
printf("Introduzca el codigo del departamendo para modificar su registro--->");
fflush(stdin);
scanf("%d",&modifica_departamento);
do
{
if(modifica_departamento==now->codigo_departamento)
{
printf("Modificar registro del departamento %s",now->nombre_departamento);
printf("\nDesea continuar?(S/N)");
fflush(stdin);
scanf("%c",&confirmar);
if(confirmar=='s'||confirmar=='S')
{
now=modificar_departamento(now);
break;
}
else
break;
}
else
now=now->next;
}while(now->next!=NULL);
break;



case 7:
break;

default:
printf("Opcion Incorrecta\n");
getch();
break;
}

}
}while(opcion!=5);
}






/*-------------FUNCIONES UTILIZADAS EN ESTE PROGRAMA------------------------*/


/*Las siguientes dos funciones eliminan un registro de empleado y departamento
enlazando a sus registros anterior y posterior mediante la asignacion de
punteros*/
void borrar(struct trabajador*actual)
{
(actual->siguiente)->anterior=actual->anterior;
(actual->anterior)->siguiente=actual->siguiente;
free(actual);
}

void eliminar(struct departamento*now)
{
(now->next)->back=now->back;
(now->back)->next=now->next;
free(now);
}

/*Introduce datos de un empleado en el ultimo registro de la lista*/
struct trabajador*insertar(struct trabajador*ultimo)
{
float talegos=0;
printf("Introduzca CODIGO del Empleado=");
fflush(stdin);
scanf("%d",&(ultimo->codigo_emp));

printf("Introduzca CODIGO del Departamento=");
fflush(stdin);
scanf("%d",&(ultimo->codigo_dep));

printf("Introduzca Nombre del empleado(sin espacios)=");
fflush(stdin);
scanf("%s",(ultimo->nombre));

printf("Introduzca Apellidos del Empleado(sin espacios)=");
fflush(stdin);
scanf("%s",(ultimo->apellidos));

printf("Introduzca (H) Hombre - (M)Mujer=");
fflush(stdin);
scanf("%c",&(ultimo->sexo));

printf("Introduzca A¤o de nacimiento=");
fflush(stdin);
scanf("%d",&(ultimo->ano_nac));

printf("Introduzca Mes de nacimiento=");
fflush(stdin);
scanf("%d",&(ultimo->mes_nac));

printf("Introduzca Dia de nacimiento=");
fflush(stdin);
scanf("%d",&(ultimo->dia_nac));

printf("Introduzca A¤o de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(ultimo->ano_ing));

printf("Introduzca Mes de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(ultimo->mes_ing));

printf("Introduzca Dia de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(ultimo->dia_ing));

printf("Introduzca sueldo mensual del empleado=");
fflush(stdin);
scanf("%f",&talegos);
ultimo->sueldo_mensual=talegos;

printf("Introduzca DNI del Empleado (sin espacios)=");
fflush(stdin);
scanf("%s",(ultimo->dni));

printf("Introduzca Telefono1 del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(ultimo->telefono1));

printf("Introduzca Telefono2 del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(ultimo->telefono2));

printf("Introduzca Direccion del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(ultimo->direccion));

printf("Introduzca Codigo Postal de la direccion= \n");
fflush(stdin);
scanf("%ld",&(ultimo->cp));

printf("Introduzca Provincia(sin espacios)=");
fflush(stdin);
scanf("%s",(ultimo->provincia));

printf("\n\n\n");

printf("REGISTRO INSERTADO\n\n Pulse cualquier tecla (menos el power) para continuar...");
getch();

return(ultimo);

}
/*Modifica los datos de un empleado*/
struct trabajador*cambiar_empleado(struct trabajador*actual)
{
float talegos=0;
printf("Introduzca CODIGO del Empleado=");
fflush(stdin);
scanf("%d",&(actual->codigo_emp));

printf("Introduzca CODIGO del Departamento=");
fflush(stdin);
scanf("%d",&(actual->codigo_dep));

printf("Introduzca Nombre del empleado(sin espacios)=");
fflush(stdin);
scanf("%s",(actual->nombre));

printf("Introduzca Apellidos del Empleado(sin espacios)=");
fflush(stdin);
scanf("%s",(actual->apellidos));

printf("Introduzca (H) Hombre - (M)Mujer=");
fflush(stdin);
scanf("%c",&(actual->sexo));

printf("Introduzca A¤o de nacimiento=");
fflush(stdin);
scanf("%d",&(actual->ano_nac));

printf("Introduzca Mes de nacimiento=");
fflush(stdin);
scanf("%d",&(actual->mes_nac));

printf("Introduzca Dia de nacimiento=");
fflush(stdin);
scanf("%d",&(actual->dia_nac));

printf("Introduzca A¤o de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(actual->ano_ing));

printf("Introduzca Mes de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(actual->mes_ing));

printf("Introduzca Dia de ingreso en Empresa=");
fflush(stdin);
scanf("%d",&(actual->dia_ing));

printf("Introduzca sueldo mensual del empleado=");
fflush(stdin);
scanf("%f",&talegos);
actual->sueldo_mensual=talegos;

printf("Introduzca DNI del Empleado (sin espacios)=");
fflush(stdin);
scanf("%s",(actual->dni));

printf("Introduzca Telefono1 del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(actual->telefono1));

printf("Introduzca Telefono2 del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(actual->telefono2));

printf("Introduzca Direccion del Empleado(sin espacios)= \n");
fflush(stdin);
scanf("%s",(actual->direccion));

printf("Introduzca Codigo Postal de la direccion= \n");
fflush(stdin);
scanf("%ld",&(actual->cp));

printf("Introduzca Provincia(sin espacios)=");
fflush(stdin);
scanf("%s",(actual->provincia));

printf("\n\n\n");

printf("REGISTRO MODIFICADO\n Pulse cualquier tecla (menos el power) para continuar...");
getch();

return(actual);

}




/*Introduce datos en el ultimo registro de la lista enlazada*/
struct departamento*insertar_departamento(struct departamento*last)
{
float money=0;
printf("Introduzca CODIGO del departamento= ");
fflush(stdin);
scanf("%d",&(last->codigo_departamento));

printf("Introduzca Nombre del Departamento (sin espacios)= ");
fflush(stdin);
scanf("%s",(last->nombre_departamento));

printf("Introduzca el Tipo de Departamento (sin espacios)= ");
fflush(stdin);
scanf("%s",(last->tipo));

printf("Introduzca Presupuesto= ");
fflush(stdin);
scanf("%f",&money);
last->presupuesto=money;

printf("Introduzca Ubicacion (sin espacios)= ");
fflush(stdin);
scanf("%s",(last->ubicacion));

printf("REGISTRO INSERTADO...\n");
printf("Pulse cualquier tecla (menos el power) para continuar...");
getch();
return(last);

}
/*funcion similar a la de insertar departamento que permite modificar un
registro ya introducido*/

struct departamento*modificar_departamento(struct departamento*now)
{
float money=0;
printf("Introduzca CODIGO del departamento= ");
fflush(stdin);
scanf("%d",&(now->codigo_departamento));

printf("Introduzca Nombre del Departamento (sin espacios)= ");
fflush(stdin);
scanf("%s",(now->nombre_departamento));

printf("Introduzca el Tipo de Departamento (sin espacios)= ");
fflush(stdin);
scanf("%s",(now->tipo));

printf("Introduzca Presupuesto= ");
fflush(stdin);
scanf("%f",&money);
now->presupuesto=money;

printf("Introduzca Ubicacion (sin espacios)= ");
fflush(stdin);
scanf("%s",(now->ubicacion));

printf("REGISTRO MODIFICADO...\n");
printf("Pulse cualquier tecla (menos el power) para continuar...");
getch();
return(now);

}

/*Las dos funciones siguientes crearan un nuevo registro en la lista enlazada
y este registro ocupara el ultimo lugar en dicha lista*/

struct trabajador* crea(struct trabajador*ultimo)
{
struct trabajador*nuevo;
nuevo=(struct trabajador*)malloc(sizeof(struct trabajador));
nuevo->siguiente=NULL;
nuevo->anterior=ultimo;
return(nuevo);
}
/*Lo mismo para el departamento*/
struct departamento *creador(struct departamento*last)
{
struct departamento*neo;
neo=(struct departamento*)malloc(sizeof(struct departamento));
neo->next=NULL;
neo->back=last;
return(neo);
}


void menu1()
{
printf("ASIGNATURA: METODOS INFORMATICOS\n");
printf("PRACTICA: GESTION DE EMPLEADOS\n");
printf(" ---------------------------------\n");
printf(" FICHERO:\n");
printf(" ---------------------------------\n");
printf(" Numero de empleados =%d \n",i);
printf(" Numero de departamentos =%d \n",j);

printf(" OPCIONES:\n");
printf(" *******************************************************************\n");
printf(" * 1.-Leer Datos de Empleados y Departamentos de Fichero *\n");
printf(" * 2.-Listado de informacion *\n");
printf(" * 3.-Incluir, Eliminar o Modificar Datos *\n");
printf(" * 4.-Guardas Empleados y Departamentos en Fichero *\n");
printf(" * 5.-Salir del Programa *\n");
printf(" *******************************************************************\n");
printf("\n");
printf(" Pulse 1-2-3-4-5=");
}

void submenu()
{

printf("OPCIONES DEL SUBMENU:\n ");

printf(" *******************************************************************\n");
printf(" * 1.-INSERTAR un empleado NUEVO *\n");
printf(" * 2.-ELIMINAR un empleado existente *\n");
printf(" * 3.-MODIFICAR un empleado existente *\n");
printf(" * 4.-INSERTAR un departamento nuevo *\n");
printf(" * 5.-ELIMINAR un departamento existente *\n");
printf(" * 6.-MODIFICAR un departamento existente *\n");
printf(" * 7.-Salir del Submenu *\n");
printf(" *******************************************************************\n");
printf(" Pulse 1-2-3-4-5-6-7= ");

}
void submenu2()
{
printf("OPCIONES:");
printf("\n ****************************************************************");
printf("\n * 1.-Listado de empleados en la empresa *");
printf("\n * 2.-Listado de empleados mayores de una cierta edad *");
printf("\n * 3.-Listado de empleados menores de una cierta edad *");
printf("\n * 4.-Listado de empleados con mas de una cierta antiguedad *");
printf("\n * 5.-Listado de empleados con menos de una cierta antiguedad *");
printf("\n * 6.-Listado de departamentos *");
printf("\n * 7.-Listado de empleados en un determinado departamento *");
printf("\n * 8.-Listado de empleados con mas de un cierto sueldo anual *");
printf("\n * 9.-Listado de empleados con menos de un sueldo anual *");
printf("\n * 0.-Volver al Menu Principal *");
printf("\n ****************************************************************");
}

void visualizar()
{
printf("LISTADO DE EMPLEADOS_____________________________________________");
printf("\n\nCODIGO DE EMPLEADO:%d",actual->codigo_emp);
printf("\nCODIGO DEL DEPARTAMENTO:%d",actual->codigo_dep);
printf("\nNOMBRE:%s",actual->nombre);
printf("\nAPELLIDOS:%s",actual->apellidos);
printf("\nA¥O DE NACIMIENTO:%d",actual->ano_nac);
printf("\nMES DE NACIMIENTO:%d",actual->mes_nac);
printf("\nDIA DE NACIMIENTO:%d",actual->dia_nac);
printf("\nA¥O DE INGRESO:%d",actual->ano_ing);
printf("\nMES DE INGRESO:%d",actual->mes_ing);
printf("\nDIA DE INGRESO:%d",actual->dia_ing);
printf("\nSUELDO MENSUAL:%f",actual->sueldo_mensual);
printf("\nTELEFONO:%s",actual->telefono1);
printf("\nTELEFONO 2:%s",actual->telefono2);
printf("\nDNI:%s",actual->dni);
printf("\nDIRECCION:%s",actual->direccion);
printf("\nCODIGO POSTAL:%ld",actual->cp);
printf("\nPROVINCIA:%s",actual->provincia);
}

void mirarlo()
{
printf("\nLISTADO DE DEPARTAMENTOS______________________________________________");
printf("\nCODIGO DEL DEPARTAMENTO:%d",now->codigo_departamento);
printf("\nNOMBRE:%s",now->nombre_departamento);
printf("\nTIPO:%s",now->tipo);
printf("\nPRESUPUESTO:%f",now->presupuesto);
printf("\nUBICACION:%s",now->ubicacion);
}


void visualizarx()
{
printf("LISTADO DE EMPLEADOS_____________________________________________");
printf("\n\nCODIGO DE EMPLEADO:%d",actual->codigo_emp);
printf("\nCODIGO DEL DEPARTAMENTO:%d",actual->codigo_dep);
printf("\nNOMBRE DEL DEPARTAMENTO:%s",now->nombre_departamento);
printf("\nNOMBRE:%s",actual->nombre);
printf("\nAPELLIDOS:%s",actual->apellidos);
printf("\nA¥O DE NACIMIENTO:%d",actual->ano_nac);
printf("\nMES DE NACIMIENTO:%d",actual->mes_nac);
printf("\nDIA DE NACIMIENTO:%d",actual->dia_nac);
printf("\nA¥O DE INGRESO:%d",actual->ano_ing);
printf("\nMES DE INGRESO:%d",actual->mes_ing);
printf("\nDIA DE INGRESO:%d",actual->dia_ing);
printf("\nSUELDO MENSUAL:%f",actual->sueldo_mensual);
printf("\nTELEFONO:%s",actual->telefono1);
printf("\nTELEFONO 2:%s",actual->telefono2);
printf("\nDNI:%s",actual->dni);
printf("\nDIRECCION:%s",actual->direccion);
printf("\nCODIGO POSTAL:%ld",actual->cp);
printf("\nPROVINCIA:%s",actual->provincia);
}
risuarez
Valla!!!! yo mataría por saber programar así como tu Jimi!!! Siempre he querido aprender a programar y me he comprado muchos libros desde "programación para tontos" hasta "la enciclopedia de C++". Y nunca he terminado ninguno. No se, como que pierdo el interés y me desanimo.
luismv
Ke tal!! Caxuis asi o mas claro Wink
Caxius
ajá!!! pero jimi, usas listas y colas y todo eso verdad?
es que el ejerciciio yo tan solo lo hago con ficheros, luego eso de las listas y demas no lo haria.. entoncs ya no se como hacer para borrar el fichero totalemente...
con listas y demas si se liberar un archivo o una lista...
es tan solo con el uso de los ficheros, a lo que yo me referia[/quote]
Jimi_Hendrix
Pero eso es mas sencillo todavía, en mi programa lo que pasa es que con ficheros lo unico que hago es crearlos para guardar las estructuras de datos y cargarlos para actuar sobre las listas . No recuerdo muy bien cual es la orden para borrar un fichero pero lo tienes en cualquier manual, lo que si esta en el programa es la forma de crear los ficheros y cargarlos en listas con las ordenes fopen y fclose:

*Se abren los ficheros con los datos, si ocurriera algun percance en
su apertura aparecera una advertencia*/

strcpy(fich_dep,fich_emp);
strcat(fich_dep,".dep");
strcat(fich_emp,".per");

uno=fopen(fich_emp,"r");
dos=fopen(fich_dep,"r");

if(uno==NULL||dos==NULL)
{

printf("Error en la apertura de ficheros\n Compruebe si el nombre y/o la ruta es valida");
getch();
break;
}

else
{
printf("Ficheros:%s\n",fich_emp);
printf(" %s\n",fich_dep);
printf("Ya existentes\n Desea cargar los datos del personal almacenado?(S/N)");
fflush(stdin);
scanf("%c",&respuesta);
}
if(respuesta=='s'||respuesta=='S')
{
/*Los datos de los ficheros se cargan directamente a la lista enlazada*/
actual=primero->siguiente;
/*Cuando fin sea igual a -1 significara que ya se han cargado todos los
datos del fichero*/
while(fin!=-1)
{
fin=0;
fin=fscanf(uno,"%d",&(actual->codigo_emp));
fin=fscanf(uno,"%d",&(actual->codigo_dep));
fin=fscanf(uno,"%s",(actual->nombre));
fin=fscanf(uno,"%s",(actual->apellidos));
fin=fscanf(uno,"%c",&(actual->sexo));
fin=fscanf(uno,"%d",&(actual->ano_nac));
fin=fscanf(uno,"%d",&(actual->mes_nac));
fin=fscanf(uno,"%d",&(actual->dia_nac));
fin=fscanf(uno,"%d",&(actual->ano_ing));
fin=fscanf(uno,"%d",&(actual->mes_ing));
fin=fscanf(uno,"%d",&(actual->dia_ing));
tolfin=0;
fin=fscanf(uno,"%f",&tolfin);
actual->sueldo_mensual=tolfin;
fin=fscanf(uno,"%s",(actual->telefono1));
fin=fscanf(uno,"%s",(actual->telefono2));
fin=fscanf(uno,"%s",(actual->dni));
fin=fscanf(uno,"%s",(actual->direccion));
fin=fscanf(uno,"%ld",&(actual->cp));
fin=fscanf(uno,"%s",(actual->provincia));
if(fin!=-1)
{
actual->siguiente=crea(actual);
actual=actual->siguiente;
i++;
}
}
fclose(uno);

fin=0;
last=first->next;
while(fin!=-1)
{
fin=fscanf(dos,"%d",&(last->codigo_departamento));
fin=fscanf(dos,"%s",(last->nombre_departamento));
fin=fscanf(dos,"%s",(last->tipo));
fin=fscanf(dos,"%f",&tolfin3);
last->presupuesto=tolfin3;
fin=fscanf(dos,"%s",(last->ubicacion));
if(fin!=-1)
{
last->next=creador(last);
last=last->next;
j++;
}
}
fclose(dos);
break;
}
else
break;
Jimi_Hendrix
Por cierto risuarez, aprender a programar con un manual es casi peor que una penitencia de satanas, ya que mi experiencia es que son o muy basicos o muy dificiles de comprender. La mejor forma de aprender es con un profesor al que le puedas preguntar tus dudas cuando te ataskes que es la forma con la que yo tuve la suerte (o la mala suerte pues el profesor era un cabronazo) de aprender, y sobre todo si es una asignatura de la carrera te sueles aplicar bastante
Caxius
ya tengo el programa terminado
muchas gracias por tus sugerencias, jimi Wink
-close-
Related topics

[help]Que conviene aprender PHP, DOT NET ASP?
[Help] Compilando en C
[VAR][SOFT] Que pueden hacer lo Hackers?
une petite question
Translate this documents to English

[soft]Mejor Programa para crear programas
[help] Blogs en Frihost
Démarrer en Flash
[Help] Ayuda en tarea
[SOFT] El mejor lenguaje de programación

[inf ] base basica de la programacion
Quel est votre FAI ?
c++
¿Cómo puedo hacer mi propio ejecutable?
Sarko serait un mauvais président
This topic is locked: you cannot edit posts or make replies.    Frihost Forum Index -> Language Forums -> Spanish

FRIHOST HOME | FAQ | TOS | ABOUT US | CONTACT US | SITE MAP
© 2005-2007 Frihost, forums powered by phpBB.