eoliTH
2004-02-11 22:22:12 UTC
Hola, tengo una pequeña práctica para clase (aún sin acabar) pero ya
tengo una parte completa que debería funcionar y no funciona...La cosa
es que compila con el compilador de Borland (el de las herramientas en
línea de comandos que se pueden descargar gratuitamente de
community.borland.com) pero no funciona muy bien que digamos. Da algunos
errores "de memoria", como por ejemplo en la función NuevoEmp() que se
encuentra en el fichero bd.h, más concretamente al introducir el campo
"nombre". Por favor si veis fallos o si tenéis comentarios o consejos,
os agradecería que los pusierais. Aquí va el programa:
/*********** Empieza el archivo bdejempl.c *****************/
#include "bd.h"
void menu(empleado *emp1,dpto *dpto1,zona *zona1,lleva_zonas *lleva_zonas1);
int main () {
empleado *emp1=NULL;
dpto *dpto1=NULL;
zona *zona1=NULL;
lleva_zonas *lleva_zonas1=NULL;
menu(emp1,dpto1,zona1,lleva_zonas1);
getch();
return 0;
}
/*********** Termina el archivo bdejempl.c *****************/
/*********** Empieza el archivo bd.h ******************/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
/*************** Estructuras ****************/
typedef struct emp {
unsigned int code,codd;
float tlf;
char *nombre,*puesto;
struct emp *sig;
} empleado;
typedef struct dpt {
unsigned int codd;
char *desc,*ubic;
struct dpt *sig;
} dpto;
typedef struct zonas {
unsigned int codz;
char *desc;
struct zonas *sig;
} zona;
typedef struct lleva {
unsigned int codz,code;
struct lleva *sig;
} lleva_zonas;
/**************** Funciones *****************/
void NuevoEmp(empleado *emp1) {
unsigned int code=0;
empleado *aux;
aux=emp1;
while (aux!=NULL) {
code=aux->code;
aux=aux->sig;
}
aux=malloc(sizeof(empleado));
aux->code=code+1;
puts("Nombre:");gets(aux->nombre);
puts("Puesto:");gets(aux->puesto);
puts("Teléfono:");scanf("%g",&(aux->tlf));
puts("Código de dpto.:");scanf("%d",&(aux->codd));
aux->sig=NULL;
}
void NuevoDpto(dpto *dpto1) {
unsigned int codd=0;
dpto *aux;
aux=dpto1;
while (aux!=NULL) {
codd=aux->codd;
aux=aux->sig;
}
aux=malloc(sizeof(dpto));
aux->codd=codd+1;
puts("Descripción:");gets(aux->desc);
puts("Ubicación:");gets(aux->ubic);
aux->sig=NULL;
}
void NuevaZona(zona *zona1) {
zona *aux;
aux=zona1;
while (aux!=NULL) {
aux=aux->sig;
}
aux=malloc(sizeof(zona));
puts("Código de zona:");scanf("%d",&(aux->codz));
puts("Descripción:");gets(aux->desc);
aux->sig=NULL;
}
void NuevoLleva(lleva_zonas *lleva_zonas1,unsigned int codz,unsigned int
code) {
lleva_zonas *aux;
aux=lleva_zonas1;
while (aux!=NULL) {
aux=aux->sig;
}
aux=malloc(sizeof(lleva_zonas));
aux->codz=codz;
aux->code=code;
aux->sig=NULL;
}
/* Empiezan las funciones para ver la tabla Empleados */
void VerEmp1(void) {
printf("%-10s %-20s %-15s %-10s %-10s
\n","Cód.Emp.","Nombre","Puesto","Cód.Dpto","Teléfono");
puts("--------------------------------------------------------------------------------");
}
void VerEmp(empleado *aux) {
printf("%-10d %-20s %-15s %-10d %-10g
\n",aux->code,aux->nombre,aux->puesto,aux->codd,aux->tlf);
}
void VerTablaEmp(empleado *emp1) {
empleado *aux;
aux=emp1;
VerEmp1();
while (aux!=NULL) {
VerEmp(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Empleados. */
/* Empiezan las funciones para ver la tabla Dptos. */
void VerDpto1(void) {
printf("%-10s %-30s %-30s\n","Cód.Dpto","Descripción","Ubicación");
puts("--------------------------------------------------------------------------------");
}
void VerDpto(dpto *aux) {
printf("%-10d %-30s %-30s\n",aux->codd,aux->desc,aux->ubic);
}
void VerTablaDpto(dpto *dpto1) {
dpto *aux;
aux=dpto1;
VerDpto1();
while (aux!=NULL) {
VerDpto(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Dptos. */
/* Empiezan las funciones para ver la tabla Zonas */
void VerZona1(void) {
printf("%-10s %-30s\n","Cód.Zona","Descripción");
puts("--------------------------------------------------------------------------------");
}
void VerZona(zona *aux) {
printf("%-10d %-30s\n",aux->codz,aux->desc);
}
void VerTablaZonas(zona *zona1) {
zona *aux;
aux=zona1;
VerZona1();
while (aux!=NULL) {
VerZona(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Zonas */
/* Empiezan las funciones para ver la tabla LlevaZonas */
void VerLlevaZonas1(void) {
printf("%-12s %-12s\n","Cód.Zona","Cod.Empleado");
puts("--------------------------------------------------------------------------------");
}
void VerLlevaZonas(lleva_zonas *aux) {
printf("%-12d %-12d\n",aux->codz,aux->code);
}
void VerTablaLlevaZonas(lleva_zonas *lleva_zonas1) {
lleva_zonas *aux;
aux=lleva_zonas1;
VerLlevaZonas1();
while (aux!=NULL) {
VerLlevaZonas(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla LlevaZonas */
/* Empieza el menú principal */
void menu(empleado *emp1,dpto *dpto1,zona *zona1,lleva_zonas
*lleva_zonas1) {
char opcion;
do {
do {
puts("Introduce una opción:\n");
puts("A. Introducir un registro en tabla Empleados.");
puts("B. Introducir un registro en tabla Departamentos.");
puts("C. Introducir un registro en tabla Zonas.");
puts("D. Ver tabla Empleados.");
puts("E. Ver tabla Departamentos.");
puts("F. Ver tabla Zonas.");
puts("G. Ver tabla LlevaZonas.");
puts("H. Salir.\n");
opcion=getch();
} while (opcion<'A' && opcion>'H' && opcion<'a' && opcion>'h');
switch (opcion) {
case 'a':case 'A':
NuevoEmp(emp1);
break;
case 'b':case 'B':
NuevoDpto(dpto1);
break;
case 'c':case 'C':
NuevaZona(zona1);
break;
case 'd':case 'D':
VerTablaEmp(emp1);
break;
case 'e':case 'E':
VerTablaDpto(dpto1);
break;
case 'f':case 'F':
VerTablaZonas(zona1);
break;
case 'g':case 'G':
VerTablaLlevaZonas(lleva_zonas1);
break;
}
} while (opcion!='H' && opcion!='h');
}
/********************termina el bd.h***********************/
Muchas gracias por los comentarios.
tengo una parte completa que debería funcionar y no funciona...La cosa
es que compila con el compilador de Borland (el de las herramientas en
línea de comandos que se pueden descargar gratuitamente de
community.borland.com) pero no funciona muy bien que digamos. Da algunos
errores "de memoria", como por ejemplo en la función NuevoEmp() que se
encuentra en el fichero bd.h, más concretamente al introducir el campo
"nombre". Por favor si veis fallos o si tenéis comentarios o consejos,
os agradecería que los pusierais. Aquí va el programa:
/*********** Empieza el archivo bdejempl.c *****************/
#include "bd.h"
void menu(empleado *emp1,dpto *dpto1,zona *zona1,lleva_zonas *lleva_zonas1);
int main () {
empleado *emp1=NULL;
dpto *dpto1=NULL;
zona *zona1=NULL;
lleva_zonas *lleva_zonas1=NULL;
menu(emp1,dpto1,zona1,lleva_zonas1);
getch();
return 0;
}
/*********** Termina el archivo bdejempl.c *****************/
/*********** Empieza el archivo bd.h ******************/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
/*************** Estructuras ****************/
typedef struct emp {
unsigned int code,codd;
float tlf;
char *nombre,*puesto;
struct emp *sig;
} empleado;
typedef struct dpt {
unsigned int codd;
char *desc,*ubic;
struct dpt *sig;
} dpto;
typedef struct zonas {
unsigned int codz;
char *desc;
struct zonas *sig;
} zona;
typedef struct lleva {
unsigned int codz,code;
struct lleva *sig;
} lleva_zonas;
/**************** Funciones *****************/
void NuevoEmp(empleado *emp1) {
unsigned int code=0;
empleado *aux;
aux=emp1;
while (aux!=NULL) {
code=aux->code;
aux=aux->sig;
}
aux=malloc(sizeof(empleado));
aux->code=code+1;
puts("Nombre:");gets(aux->nombre);
puts("Puesto:");gets(aux->puesto);
puts("Teléfono:");scanf("%g",&(aux->tlf));
puts("Código de dpto.:");scanf("%d",&(aux->codd));
aux->sig=NULL;
}
void NuevoDpto(dpto *dpto1) {
unsigned int codd=0;
dpto *aux;
aux=dpto1;
while (aux!=NULL) {
codd=aux->codd;
aux=aux->sig;
}
aux=malloc(sizeof(dpto));
aux->codd=codd+1;
puts("Descripción:");gets(aux->desc);
puts("Ubicación:");gets(aux->ubic);
aux->sig=NULL;
}
void NuevaZona(zona *zona1) {
zona *aux;
aux=zona1;
while (aux!=NULL) {
aux=aux->sig;
}
aux=malloc(sizeof(zona));
puts("Código de zona:");scanf("%d",&(aux->codz));
puts("Descripción:");gets(aux->desc);
aux->sig=NULL;
}
void NuevoLleva(lleva_zonas *lleva_zonas1,unsigned int codz,unsigned int
code) {
lleva_zonas *aux;
aux=lleva_zonas1;
while (aux!=NULL) {
aux=aux->sig;
}
aux=malloc(sizeof(lleva_zonas));
aux->codz=codz;
aux->code=code;
aux->sig=NULL;
}
/* Empiezan las funciones para ver la tabla Empleados */
void VerEmp1(void) {
printf("%-10s %-20s %-15s %-10s %-10s
\n","Cód.Emp.","Nombre","Puesto","Cód.Dpto","Teléfono");
puts("--------------------------------------------------------------------------------");
}
void VerEmp(empleado *aux) {
printf("%-10d %-20s %-15s %-10d %-10g
\n",aux->code,aux->nombre,aux->puesto,aux->codd,aux->tlf);
}
void VerTablaEmp(empleado *emp1) {
empleado *aux;
aux=emp1;
VerEmp1();
while (aux!=NULL) {
VerEmp(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Empleados. */
/* Empiezan las funciones para ver la tabla Dptos. */
void VerDpto1(void) {
printf("%-10s %-30s %-30s\n","Cód.Dpto","Descripción","Ubicación");
puts("--------------------------------------------------------------------------------");
}
void VerDpto(dpto *aux) {
printf("%-10d %-30s %-30s\n",aux->codd,aux->desc,aux->ubic);
}
void VerTablaDpto(dpto *dpto1) {
dpto *aux;
aux=dpto1;
VerDpto1();
while (aux!=NULL) {
VerDpto(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Dptos. */
/* Empiezan las funciones para ver la tabla Zonas */
void VerZona1(void) {
printf("%-10s %-30s\n","Cód.Zona","Descripción");
puts("--------------------------------------------------------------------------------");
}
void VerZona(zona *aux) {
printf("%-10d %-30s\n",aux->codz,aux->desc);
}
void VerTablaZonas(zona *zona1) {
zona *aux;
aux=zona1;
VerZona1();
while (aux!=NULL) {
VerZona(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla Zonas */
/* Empiezan las funciones para ver la tabla LlevaZonas */
void VerLlevaZonas1(void) {
printf("%-12s %-12s\n","Cód.Zona","Cod.Empleado");
puts("--------------------------------------------------------------------------------");
}
void VerLlevaZonas(lleva_zonas *aux) {
printf("%-12d %-12d\n",aux->codz,aux->code);
}
void VerTablaLlevaZonas(lleva_zonas *lleva_zonas1) {
lleva_zonas *aux;
aux=lleva_zonas1;
VerLlevaZonas1();
while (aux!=NULL) {
VerLlevaZonas(aux);
aux=aux->sig;
}
}
/* Terminan las funciones para ver la tabla LlevaZonas */
/* Empieza el menú principal */
void menu(empleado *emp1,dpto *dpto1,zona *zona1,lleva_zonas
*lleva_zonas1) {
char opcion;
do {
do {
puts("Introduce una opción:\n");
puts("A. Introducir un registro en tabla Empleados.");
puts("B. Introducir un registro en tabla Departamentos.");
puts("C. Introducir un registro en tabla Zonas.");
puts("D. Ver tabla Empleados.");
puts("E. Ver tabla Departamentos.");
puts("F. Ver tabla Zonas.");
puts("G. Ver tabla LlevaZonas.");
puts("H. Salir.\n");
opcion=getch();
} while (opcion<'A' && opcion>'H' && opcion<'a' && opcion>'h');
switch (opcion) {
case 'a':case 'A':
NuevoEmp(emp1);
break;
case 'b':case 'B':
NuevoDpto(dpto1);
break;
case 'c':case 'C':
NuevaZona(zona1);
break;
case 'd':case 'D':
VerTablaEmp(emp1);
break;
case 'e':case 'E':
VerTablaDpto(dpto1);
break;
case 'f':case 'F':
VerTablaZonas(zona1);
break;
case 'g':case 'G':
VerTablaLlevaZonas(lleva_zonas1);
break;
}
} while (opcion!='H' && opcion!='h');
}
/********************termina el bd.h***********************/
Muchas gracias por los comentarios.