que algien me ayude porfavo
hola soy de cd juarez y nesesito un programa en turbo c para hoy es muy sensillo solo que contenga un arreglo y una funcion
disculpe la molestia necesito saber el nombre de la instruccion o sentencia que se utiliza para obtener el largo de una cadena de caracteres en un programa elaborado en borlan c, por favor me urge su respuesta
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
#include <dos.h>
#include <string.h>
typedef struct datosAlumno
{
int legajo;
int dni;
char apellido [20];
char nombre [20];
char calle [30];
int numero;
char localidad [20];
int telefono;
}datosAlumno;
typedef struct nodoindice *punt;
typedef struct nodoindice
{
int legajo;
int direccion;
punt sig;
}nodoindice;
void ingreseEleccion ();
int buscaDireccion (int, char, int, punt*);
void imprimeArchivo(FILE*);
void actualizaRegistro (FILE*, punt*);
void agregaRegistro (FILE*, punt*);
void eliminaRegistro (FILE*, punt*);
void consultaRegistro (FILE*, punt*);
void cargarTablaIndices (punt* );
void guardarTablaIndices (punt* );
void listarArchivo(FILE *, punt*);
void limpiaArchivo(FILE *);
void top();
int cuentaAlumnos(punt*);
void main (void) // ----> main
{
textmode(64); // ---> EGA 43 filas o VGA 50 fialas
textbackground (1);
FILE *fdAlu;
char eleccion;
punt tablaIndices[100]; //DECLARACION DEL VECTOR PARA LA TABLA
for(int i=0; i<100; i++)
tablaIndices[i]= NULL; //INICIALIZAMOS LA TABLA EN NULL
if (access("alumnos.dat", 0)==0)//VERIFICA LA EXISTENCIA DEL ARCHIVO
fdAlu = fopen("alumnos.dat", "r+"); //SI EXISTE LO ABRE
else
fdAlu = fopen("alumnos.dat", "w+"); //SI NO EXISTE LO CREA
if (fdAlu == NULL) //VERIFICAMOS QUE EL ARCHIVO ABRE BIEN
{
textbackground (12);
cprintf ("No se puede abrir el archivo Alumnos.dat");
getch();
}
else
{
cargarTablaIndices(tablaIndices);//CARGAMOS LA TABLA
clrscr();
top();
textcolor(3);
gotoxy(5, 16); cprintf ("INTEGRANTES:");
gotoxy(8, 19); cprintf ("Gallardo Jorge");
gotoxy(8, 22); cprintf ("Sosa Victor");
gotoxy(5, 48); cprintf ("Presione una tecla para continuar...");
getch();
ingreseEleccion();
while ((eleccion= getche()) != '7')
{
switch (eleccion)
{
case '1': agregaRegistro (fdAlu, tablaIndices); break;
case '2': listarArchivo(fdAlu, tablaIndices);break;
case '3': actualizaRegistro (fdAlu, tablaIndices); break;
case '4': eliminaRegistro(fdAlu, tablaIndices); break;
case '5': consultaRegistro(fdAlu, tablaIndices); break;
case '6': imprimeArchivo (fdAlu); break;
default: {
gotoxy(5, 32);
cprintf ("Ingrese correctamente la opcion");
getch();
}
}
ingreseEleccion();
}
}
limpiaArchivo(fdAlu);
guardarTablaIndices(tablaIndices);
if((fclose(fdAlu))==0)
{
textcolor(6);
gotoxy(5, 48);
cprintf ("El archivo de alumnos cerro OK aaa");
getch();
}
if(cuentaAlumnos(tablaIndices) == 0)
{
unlink("alumnos.dat");
unlink("indice.dat");
}
}
void cargarTablaIndices(punt tablaIndices[100]) // ---> carga tabla
{
FILE *fdTabla;
nodoindice ni;
int leg=0;
if (access("indice.dat", 0)==0) //VERIFACAMOS SI EXISTE EL ARCHIVO PARA:
{
fdTabla = fopen("indice.dat", "r+"); //ABRIRLO
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
while(! feof(fdTabla))
{
fread(&ni, sizeof(nodoindice), 1, fdTabla);
if((ni.legajo>0)&(ni.legajo != leg))
{
buscaDireccion(ni.legajo,'a',ni.direccion, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
leg=ni.legajo;
}
}
fclose(fdTabla);
}
}
void ingreseEleccion (void) // -->> Funcion ingrese eleccion
{
clrscr();
top();
textcolor (6);
gotoxy(5, 14); cprintf ("Opciones:");
gotoxy(7, 18); cprintf ("1- Agregar un nuevo registro");
gotoxy(7, 20); cprintf ("2- Listar el Archivo");
gotoxy(7, 22); cprintf ("3- actualizaRegistro");
gotoxy(7, 24); cprintf ("4- Eliminar un registro");
gotoxy(7, 26); cprintf ("5- Consulta un registro");
gotoxy(7, 28); cprintf ("6- imprimeArchivo");
gotoxy(7, 30); cprintf ("7- Fin del programa");
gotoxy(5, 34); cprintf ("Ingrese opcion: ");
}
void top (void) // -->> Funcion top
{
textcolor(15);
gotoxy(22,5);
cprintf ("*************************************");
gotoxy(22,6);
cprintf ("FINAL DE PROGRAMACION ESTRUCTURADA II");
gotoxy(22,7);
cprintf ("*************************************");
}
void agregaRegistro (FILE *fdAlu, punt tablaIndices[100]) //---->>> agrega Registro
{
datosAlumno alumno;
int dir;
int pos;
int leg;
clrscr();
gotoxy(5, 14); cprintf ("Completar los siguientes datos del alumno:");
gotoxy(7, 17); cprintf ("Ingrese un nuevo numero de legajo(0001 0001-9999 9999): ");
cin>>leg;
if (buscaDireccion(leg, 'c', -1, tablaIndices) >= 0) //verifica
// que el registro no exista
{cout<<"El legajo numero: "<<leg<<" ya contiene informacion.n";
getch();
}
else
{
//SE CARGAN TODOS LOS DATOS DEL NUEVO ALUMNO
alumno.legajo=leg;
textcolor (8);
gotoxy(7, 19); cprintf ("Apellido: ");
cin>>alumno.apellido;
gotoxy(35, 19); cprintf ("Nombre: ");
cin>>alumno.nombre;
gotoxy(7, 23); cprintf ("DNI: ");
cin>>alumno.dni;
gotoxy(7, 25); cprintf ("Domicilio");
gotoxy(9, 27); cprintf ("Calle: ");
cin>>alumno.calle;
gotoxy(35, 27); cprintf ("Numero: ");
cin>>alumno.numero;
gotoxy(50, 27); cprintf ("Localidad: ");
cin>>alumno.localidad;
gotoxy(7, 28); cprintf ("Telefono: ");
cin>>alumno.telefono;
if(fseek(fdAlu, 0, 2)== 0) //BUSCAMOS EL FINAL DEL ARCHIVO ALUMNOS
{
pos = ftell(fdAlu); //GUARDAMOS LA DIRECCION EN QUE VAMOS A GRABAR
dir=pos/sizeof(datosAlumno);
if(fwrite(&alumno,sizeof(datosAlumno),1,fdAlu)>0)
buscaDireccion(alumno.legajo,'a',dir, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
else
cout<<"ERROR DE ESCRITURAn";
}
else
cout<<"ERROR DE BUSQUEDAn";
}
}
int buscaDireccion( int leg, char tipo, int dir, punt tablaIndices[100]) // ---> busca direccion
{
punt n, ant, aux;
int clave = leg % 100;
n= tablaIndices[clave];
if (tipo=='a') //PARA ALTAS CREAMOS UN NUEVO NODO Y LO CARGAMOS
{
aux=n;
punt r = new nodoindice;
r->legajo= leg;
r->direccion= dir;
tablaIndices[clave]=r;
r->sig =aux;
}
else //PARA EL RESTO DE LOS CASOS COMENZAMOS CON UNA RUTINA DE BUSQUEDA
//DEL NUMERO DE LEGAJO
{
while ((n!= NULL) && (n->legajo!=leg))
{
ant=n;
n=n->sig;
}
if (n!= NULL) //EN CASO DE HABER ENCONTRADO EL LEGAJO
{
if (tipo=='b') //PARA BAJAS DESENGANCHAMOS y ELIMINAMOS EL NODO
{
dir=n->direccion;
if (tablaIndices[clave] == n)
tablaIndices[clave] = n->sig;
else
ant->sig = n->sig;
delete n;
}
else
{
if (tipo=='o') //PARA ORDENAMIENTO EN CASO DE BAJAS LE CAMBIAMOS
//LA DIRECCION
n->direccion=dir;
else
{
if ((tipo =='c') || (tipo=='m')) //PARA CONSULTAS O MODIFICACION
dir=n->direccion;
}
}
}
else //PARA EL CASO EN QUE NO SE ENCUENTRE EL LEGAJO
dir=-1;
}
return(dir);
}
void listarArchivo(FILE *fdAlu, punt tablaIndices[100]) // ---->> listar archivo
{
if(cuentaAlumnos(tablaIndices)!=0)
{
datosAlumno alumno;
int leg=0;
cout<<"LISTADO DE ALUMNOS"<<endl;
cout<<"-------------------------------------n";
if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo!=0)&&(alumno.legajo !=leg))
{
leg=alumno.legajo;
cout<<"El legajo numero: "<< alumno.legajo<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<< alumno.apellido<<"n";
cout<<"Nombre: "<< alumno.nombre<<"n";
cout<<"DNI: "<< alumno.dni<<"n";
cout<<"Direccion: "<< alumno.calle<<" " << alumno.numero <<"n";
cout<<"Localidad: "<< alumno.localidad<<"n";
cout<<"Telefono: "<< alumno.telefono<<"n";
cout<<"----------------------------------n";
getch();
}
}
}
}
else
{
cout<<"vacio";
getch();
}
}
void actualizaRegistro(FILE *fdAlu, punt tablaIndices[100]) // --->> actualiza registro
{
datosAlumno alumno;
int leg;
int dir;
char resp;
cout<<"Ingrese el numero de legajo a modificar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'m',1, tablaIndices))< 0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
fseek(fdAlu,dir*sizeof(datosAlumno), 0);
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura
cout<<"Modifica Apellido (s/n):n";
cin>>resp;
if (resp== 's')
{
cout<<"Ingrese nuevo Apellido:n";
cin>>alumno.apellido;
}
cout<<"Modifica Nombre (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Nombre:n";
cin>>alumno.nombre;
}
cout<<"Modifica DNI (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo DNI:n";
cin>>alumno.dni;
}
cout<<"Modifica Domicilio (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Domicilio:n";
cin>>alumno.calle;
cin>>alumno.numero;
}
cout<<"Modifica Localidad (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Localidad:n";
cin>>alumno.localidad;
}
cout<<"Modifica Telefono (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Telefono:n";
cin >> alumno.telefono;
}
fseek(fdAlu,dir*sizeof(datosAlumno),SEEK_SET);
fwrite(&alumno,sizeof(datosAlumno),1,fdAlu);
}
}
void eliminaRegistro(FILE *fdAlu, punt tablaIndices[100] ) // ----> elimina registro
{
int leg;
int dir;
datosAlumno p;
datosAlumno alumno={0,0,"","","",0,"",0};
cout<<"Ingrese numero de legajo que desea dar de baja(0001 0001-9999 9999): ";
cin>>leg;
// alumno.dni=leg; //conservo el nro de legajo eliminado para la "limpieza"
if((dir=buscaDireccion( leg, 'b', -1, tablaIndices)) !=-1)
{
fseek(fdAlu, dir*sizeof(datosAlumno), SEEK_SET); //busco el registro a eliminar
fread(&p,sizeof(datosAlumno),1,fdAlu);
if(alumno.legajo == leg)
{
cout<<"tabien";
getch();
}
fwrite(&alumno, sizeof(datosAlumno),1,fdAlu); //sobrescribo el registro
cout<<"Legajo Eliminado "<<leg;
getch();
}
else
{
cout<<"Legajo Inexistente "<<leg;
getch();
}
// limpiaArchivo(fdAlu);
// guardarTablaIndices(tablaIndices);
// cargarTablaIndices(tablaIndices);
}
void consultaRegistro (FILE *fdAlu, punt tablaIndices[100]) // ----> consulta registro
{
datosAlumno alumno;
int leg;
int dir;
cout<<"Ingrese el numero de legajo a consultar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'c',-1, tablaIndices))<0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
if((fseek(fdAlu,dir*sizeof(datosAlumno), 0))==0)
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura
cout<<"El legajo numero: "<<leg<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<<alumno.apellido<<"n";
cout<<"Nombre: "<<alumno.nombre<<"n";
cout<<"DNI: "<<alumno.dni<<"n";
cout<<"Direccion: "<<alumno.calle<<" "<<alumno.numero<<"n";
cout<<"Localidad: "<<alumno.localidad<<"n";
cout<<"Telefono: "<<alumno.telefono<<"n";
getch();
}
}
}
void limpiaArchivo(FILE *fdAlu) // ----> limpia archivo
{
FILE *fdAuxiliar;
int leg=0;
datosAlumno alumno;
fdAuxiliar = fopen("auxiliar.dat", "w");
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo>0)&(alumno.legajo !=leg))
{
leg=alumno.legajo;
fwrite(&alumno,sizeof(datosAlumno), 1, fdAuxiliar);
}
}
fclose(fdAlu);
fclose(fdAuxiliar);
fdAuxiliar = fopen("auxiliar.dat", "r+");
fdAlu = fopen("alumnos.dat", "w"); //REESCRIBIMOS EL ARCHIVO
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);
while (!feof(fdAuxiliar))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAuxiliar);
fwrite(&alumno,sizeof(datosAlumno), 1, fdAlu);
}
fclose(fdAuxiliar);
unlink ("auxiliar.dat");
/* fdAuxiliar = fopen("auxiliar.dat", "w"); //le ponemos otro fopen w y volvemos a cerrarlo
//para que quede vacio y no ocupe lugar
fclose(fdAuxiliar); */
}
void guardarTablaIndices(punt tablaIndices[100]) //---------->>> guarda tabla indice
{
nodoindice ni; //NODO DEL TIPO QUE COMPONEN LA LISTA
punt r; //DECLARACION DE PUNTERO PARA RECORRER LAS LISTAS
FILE* fdTabla;
fdTabla = fopen("indice.dat", "w+"); //SOBREESCRIBIMOS
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
for(int i=0; i<100; i++) //RECORREMOS UNA A UNA LAS ENTRADAS DE LA TABLA
{
if(tablaIndices[i]!=NULL) //RECORREMOS LAS ENTRADAS
{
ni.legajo=tablaIndices[i]->legajo;
ni.direccion=tablaIndices[i]->direccion;
r =tablaIndices[i]->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
while (r!=NULL) //RECORREMOS LOS NODOS DE LA LISTA
{
ni.legajo=r->legajo;
ni.direccion=r->direccion;
ni.sig=NULL;
r =r->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
}
}
}
if((fclose(fdTabla))== 0)
{
textcolor(6);
gotoxy(5, 47);
cprintf ("El archivo tabla cerro OK");
}
}
void imprimeArchivo(FILE *fdAlu)
{
datosAlumno alumno;
int leg=0;
FILE *impresora;
impresora= fopen("LPT1", "w"); //abrimos el archivo LPT1 (impresora)
if (impresora==NULL)
cout<<"Error de impresión"<<endl;
else
{
fprintf(impresora, "--------------------------------------n"
"FINAL DE PROGRAMACION ESTRUCTURADA IIn"
"MARZO 2002n"
"----------------------------------------n"
"ARCHIVO ALUMNOSn"
"INTEGRANTES:n"
" LEGAJO DNI APELLIDO NOMBRE DIRECCIÓN LOCALIDAD TELEFONOn");
if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo >0)&(alumno.legajo !=leg))
{
fprintf(impresora," %-2d %-2d %-2s %-2s %-2s %-2d %-2s %-2dn",
alumno.legajo, alumno.dni, alumno.apellido, alumno.nombre,
alumno.calle, alumno.numero, alumno.localidad, alumno.telefono);
leg=alumno.legajo;
}
}
}
}}
int cuentaAlumnos(punt tablaIndices[100])
{
int cantalumnos=0;
for(int i=0; i<100; i++)
{ if (tablaIndices[i]!=NULL)
if (tablaIndices[i]->legajo!=0)
cantalumnos++;
}
return(cantalumnos);
}
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <io.h>
#include <dos.h>
#include <string.h>
typedef struct datosAlumno
{
int legajo;
int dni;
char apellido [20];
char nombre [20];
char calle [30];
int numero;
char localidad [20];
int telefono;
}datosAlumno;
typedef struct nodoindice *punt;
typedef struct nodoindice
{
int legajo;
int direccion;
punt sig;
}nodoindice;
void ingreseEleccion ();
int buscaDireccion (int, char, int, punt*);
void imprimeArchivo(FILE*);
void actualizaRegistro (FILE*, punt*);
void agregaRegistro (FILE*, punt*);
void eliminaRegistro (FILE*, punt*);
void consultaRegistro (FILE*, punt*);
void cargarTablaIndices (punt* );
void guardarTablaIndices (punt* );
void listarArchivo(FILE *, punt*);
void limpiaArchivo(FILE *);
void top();
int cuentaAlumnos(punt*);
void main (void) // ----> main
{
textmode(64); // ---> EGA 43 filas o VGA 50 fialas
textbackground (1);
FILE *fdAlu;
char eleccion;
punt tablaIndices[100]; //DECLARACION DEL VECTOR PARA LA TABLA
for(int i=0; i<100; i++)
tablaIndices[i]= NULL; //INICIALIZAMOS LA TABLA EN NULL
if (access("alumnos.dat", 0)==0)//VERIFICA LA EXISTENCIA DEL ARCHIVO
fdAlu = fopen("alumnos.dat", "r+"); //SI EXISTE LO ABRE
else
fdAlu = fopen("alumnos.dat", "w+"); //SI NO EXISTE LO CREA
if (fdAlu == NULL) //VERIFICAMOS QUE EL ARCHIVO ABRE BIEN
{
textbackground (12);
cprintf ("No se puede abrir el archivo Alumnos.dat");
getch();
}
else
{
cargarTablaIndices(tablaIndices);//CARGAMOS LA TABLA
clrscr();
top();
textcolor(3);
gotoxy(5, 16); cprintf ("INTEGRANTES:");
gotoxy(8, 19); cprintf ("Gallardo Jorge");
gotoxy(8, 22); cprintf ("Sosa Victor");
gotoxy(5, 48); cprintf ("Presione una tecla para continuar...");
getch();
ingreseEleccion();
while ((eleccion= getche()) != '7')
{
switch (eleccion)
{
case '1': agregaRegistro (fdAlu, tablaIndices); break;
case '2': listarArchivo(fdAlu, tablaIndices);break;
case '3': actualizaRegistro (fdAlu, tablaIndices); break;
case '4': eliminaRegistro(fdAlu, tablaIndices); break;
case '5': consultaRegistro(fdAlu, tablaIndices); break;
case '6': imprimeArchivo (fdAlu); break;
default: {
gotoxy(5, 32);
cprintf ("Ingrese correctamente la opcion");
getch();
}
}
ingreseEleccion();
}
}
limpiaArchivo(fdAlu);
guardarTablaIndices(tablaIndices);
if((fclose(fdAlu))==0)
{
textcolor(6);
gotoxy(5, 48);
cprintf ("El archivo de alumnos cerro OK aaa");
getch();
}
if(cuentaAlumnos(tablaIndices) == 0)
{
unlink("alumnos.dat");
unlink("indice.dat");
}
}
void cargarTablaIndices(punt tablaIndices[100]) // ---> carga tabla
{
FILE *fdTabla;
nodoindice ni;
int leg=0;
if (access("indice.dat", 0)==0) //VERIFACAMOS SI EXISTE EL ARCHIVO PARA:
{
fdTabla = fopen("indice.dat", "r+"); //ABRIRLO
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
while(! feof(fdTabla))
{
fread(&ni, sizeof(nodoindice), 1, fdTabla);
if((ni.legajo>0)&(ni.legajo != leg))
{
buscaDireccion(ni.legajo,'a',ni.direccion, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
leg=ni.legajo;
}
}
fclose(fdTabla);
}
}
void ingreseEleccion (void) // -->> Funcion ingrese eleccion
{
clrscr();
top();
textcolor (6);
gotoxy(5, 14); cprintf ("Opciones:");
gotoxy(7, 18); cprintf ("1- Agregar un nuevo registro");
gotoxy(7, 20); cprintf ("2- Listar el Archivo");
gotoxy(7, 22); cprintf ("3- actualizaRegistro");
gotoxy(7, 24); cprintf ("4- Eliminar un registro");
gotoxy(7, 26); cprintf ("5- Consulta un registro");
gotoxy(7, 28); cprintf ("6- imprimeArchivo");
gotoxy(7, 30); cprintf ("7- Fin del programa");
gotoxy(5, 34); cprintf ("Ingrese opcion: ");
}
void top (void) // -->> Funcion top
{
textcolor(15);
gotoxy(22,5);
cprintf ("*************************************");
gotoxy(22,6);
cprintf ("FINAL DE PROGRAMACION ESTRUCTURADA II");
gotoxy(22,7);
cprintf ("*************************************");
}
void agregaRegistro (FILE *fdAlu, punt tablaIndices[100]) //---->>> agrega Registro
{
datosAlumno alumno;
int dir;
int pos;
int leg;
clrscr();
gotoxy(5, 14); cprintf ("Completar los siguientes datos del alumno:");
gotoxy(7, 17); cprintf ("Ingrese un nuevo numero de legajo(0001 0001-9999 9999): ");
cin>>leg;
if (buscaDireccion(leg, 'c', -1, tablaIndices) >= 0) //verifica
// que el registro no exista
{cout<<"El legajo numero: "<<leg<<" ya contiene informacion.n";
getch();
}
else
{
//SE CARGAN TODOS LOS DATOS DEL NUEVO ALUMNO
alumno.legajo=leg;
textcolor (8);
gotoxy(7, 19); cprintf ("Apellido: ");
cin>>alumno.apellido;
gotoxy(35, 19); cprintf ("Nombre: ");
cin>>alumno.nombre;
gotoxy(7, 23); cprintf ("DNI: ");
cin>>alumno.dni;
gotoxy(7, 25); cprintf ("Domicilio");
gotoxy(9, 27); cprintf ("Calle: ");
cin>>alumno.calle;
gotoxy(35, 27); cprintf ("Numero: ");
cin>>alumno.numero;
gotoxy(50, 27); cprintf ("Localidad: ");
cin>>alumno.localidad;
gotoxy(7, 28); cprintf ("Telefono: ");
cin>>alumno.telefono;
if(fseek(fdAlu, 0, 2)== 0) //BUSCAMOS EL FINAL DEL ARCHIVO ALUMNOS
{
pos = ftell(fdAlu); //GUARDAMOS LA DIRECCION EN QUE VAMOS A GRABAR
dir=pos/sizeof(datosAlumno);
if(fwrite(&alumno,sizeof(datosAlumno),1,fdAlu)>0)
buscaDireccion(alumno.legajo,'a',dir, tablaIndices);
//LE DAMOS UNA ENTRADA EN LA TABLA
else
cout<<"ERROR DE ESCRITURAn";
}
else
cout<<"ERROR DE BUSQUEDAn";
}
}
int buscaDireccion( int leg, char tipo, int dir, punt tablaIndices[100]) // ---> busca direccion
{
punt n, ant, aux;
int clave = leg % 100;
n= tablaIndices[clave];
if (tipo=='a') //PARA ALTAS CREAMOS UN NUEVO NODO Y LO CARGAMOS
{
aux=n;
punt r = new nodoindice;
r->legajo= leg;
r->direccion= dir;
tablaIndices[clave]=r;
r->sig =aux;
}
else //PARA EL RESTO DE LOS CASOS COMENZAMOS CON UNA RUTINA DE BUSQUEDA
//DEL NUMERO DE LEGAJO
{
while ((n!= NULL) && (n->legajo!=leg))
{
ant=n;
n=n->sig;
}
if (n!= NULL) //EN CASO DE HABER ENCONTRADO EL LEGAJO
{
if (tipo=='b') //PARA BAJAS DESENGANCHAMOS y ELIMINAMOS EL NODO
{
dir=n->direccion;
if (tablaIndices[clave] == n)
tablaIndices[clave] = n->sig;
else
ant->sig = n->sig;
delete n;
}
else
{
if (tipo=='o') //PARA ORDENAMIENTO EN CASO DE BAJAS LE CAMBIAMOS
//LA DIRECCION
n->direccion=dir;
else
{
if ((tipo =='c') || (tipo=='m')) //PARA CONSULTAS O MODIFICACION
dir=n->direccion;
}
}
}
else //PARA EL CASO EN QUE NO SE ENCUENTRE EL LEGAJO
dir=-1;
}
return(dir);
}
void listarArchivo(FILE *fdAlu, punt tablaIndices[100]) // ---->> listar archivo
{
if(cuentaAlumnos(tablaIndices)!=0)
{
datosAlumno alumno;
int leg=0;
cout<<"LISTADO DE ALUMNOS"<<endl;
cout<<"-------------------------------------n";
if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo!=0)&&(alumno.legajo !=leg))
{
leg=alumno.legajo;
cout<<"El legajo numero: "<< alumno.legajo<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<< alumno.apellido<<"n";
cout<<"Nombre: "<< alumno.nombre<<"n";
cout<<"DNI: "<< alumno.dni<<"n";
cout<<"Direccion: "<< alumno.calle<<" " << alumno.numero <<"n";
cout<<"Localidad: "<< alumno.localidad<<"n";
cout<<"Telefono: "<< alumno.telefono<<"n";
cout<<"----------------------------------n";
getch();
}
}
}
}
else
{
cout<<"vacio";
getch();
}
}
void actualizaRegistro(FILE *fdAlu, punt tablaIndices[100]) // --->> actualiza registro
{
datosAlumno alumno;
int leg;
int dir;
char resp;
cout<<"Ingrese el numero de legajo a modificar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'m',1, tablaIndices))< 0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
fseek(fdAlu,dir*sizeof(datosAlumno), 0);
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura
cout<<"Modifica Apellido (s/n):n";
cin>>resp;
if (resp== 's')
{
cout<<"Ingrese nuevo Apellido:n";
cin>>alumno.apellido;
}
cout<<"Modifica Nombre (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Nombre:n";
cin>>alumno.nombre;
}
cout<<"Modifica DNI (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo DNI:n";
cin>>alumno.dni;
}
cout<<"Modifica Domicilio (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Domicilio:n";
cin>>alumno.calle;
cin>>alumno.numero;
}
cout<<"Modifica Localidad (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Localidad:n";
cin>>alumno.localidad;
}
cout<<"Modifica Telefono (s/n):n";
cin>>resp;
if (resp=='s')
{
cout<<"Ingrese nuevo Telefono:n";
cin >> alumno.telefono;
}
fseek(fdAlu,dir*sizeof(datosAlumno),SEEK_SET);
fwrite(&alumno,sizeof(datosAlumno),1,fdAlu);
}
}
void eliminaRegistro(FILE *fdAlu, punt tablaIndices[100] ) // ----> elimina registro
{
int leg;
int dir;
datosAlumno p;
datosAlumno alumno={0,0,"","","",0,"",0};
cout<<"Ingrese numero de legajo que desea dar de baja(0001 0001-9999 9999): ";
cin>>leg;
// alumno.dni=leg; //conservo el nro de legajo eliminado para la "limpieza"
if((dir=buscaDireccion( leg, 'b', -1, tablaIndices)) !=-1)
{
fseek(fdAlu, dir*sizeof(datosAlumno), SEEK_SET); //busco el registro a eliminar
fread(&p,sizeof(datosAlumno),1,fdAlu);
if(alumno.legajo == leg)
{
cout<<"tabien";
getch();
}
fwrite(&alumno, sizeof(datosAlumno),1,fdAlu); //sobrescribo el registro
cout<<"Legajo Eliminado "<<leg;
getch();
}
else
{
cout<<"Legajo Inexistente "<<leg;
getch();
}
// limpiaArchivo(fdAlu);
// guardarTablaIndices(tablaIndices);
// cargarTablaIndices(tablaIndices);
}
void consultaRegistro (FILE *fdAlu, punt tablaIndices[100]) // ----> consulta registro
{
datosAlumno alumno;
int leg;
int dir;
cout<<"Ingrese el numero de legajo a consultar(0001 0001-9999 9999):";
cin>>leg;
if ((dir = buscaDireccion(leg,'c',-1, tablaIndices))<0)
//verifica que el legajo exista
{
cout<<"El legajo numero: "<< leg <<" no contiene informacion.n";
getch();
}
else
{
if((fseek(fdAlu,dir*sizeof(datosAlumno), 0))==0)
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu); //hace una lectura
cout<<"El legajo numero: "<<leg<<" contiene la siguiente informacion:n";
cout<<"Apellido: "<<alumno.apellido<<"n";
cout<<"Nombre: "<<alumno.nombre<<"n";
cout<<"DNI: "<<alumno.dni<<"n";
cout<<"Direccion: "<<alumno.calle<<" "<<alumno.numero<<"n";
cout<<"Localidad: "<<alumno.localidad<<"n";
cout<<"Telefono: "<<alumno.telefono<<"n";
getch();
}
}
}
void limpiaArchivo(FILE *fdAlu) // ----> limpia archivo
{
FILE *fdAuxiliar;
int leg=0;
datosAlumno alumno;
fdAuxiliar = fopen("auxiliar.dat", "w");
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo>0)&(alumno.legajo !=leg))
{
leg=alumno.legajo;
fwrite(&alumno,sizeof(datosAlumno), 1, fdAuxiliar);
}
}
fclose(fdAlu);
fclose(fdAuxiliar);
fdAuxiliar = fopen("auxiliar.dat", "r+");
fdAlu = fopen("alumnos.dat", "w"); //REESCRIBIMOS EL ARCHIVO
fseek( fdAlu, 0, 0);
fseek( fdAuxiliar, 0, 0);
while (!feof(fdAuxiliar))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAuxiliar);
fwrite(&alumno,sizeof(datosAlumno), 1, fdAlu);
}
fclose(fdAuxiliar);
unlink ("auxiliar.dat");
/* fdAuxiliar = fopen("auxiliar.dat", "w"); //le ponemos otro fopen w y volvemos a cerrarlo
//para que quede vacio y no ocupe lugar
fclose(fdAuxiliar); */
}
void guardarTablaIndices(punt tablaIndices[100]) //---------->>> guarda tabla indice
{
nodoindice ni; //NODO DEL TIPO QUE COMPONEN LA LISTA
punt r; //DECLARACION DE PUNTERO PARA RECORRER LAS LISTAS
FILE* fdTabla;
fdTabla = fopen("indice.dat", "w+"); //SOBREESCRIBIMOS
fseek(fdTabla, 0, 0); //NOS POSICIONAMOS AL COMIENZO DEL ARCHIVO INDICES
for(int i=0; i<100; i++) //RECORREMOS UNA A UNA LAS ENTRADAS DE LA TABLA
{
if(tablaIndices[i]!=NULL) //RECORREMOS LAS ENTRADAS
{
ni.legajo=tablaIndices[i]->legajo;
ni.direccion=tablaIndices[i]->direccion;
r =tablaIndices[i]->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
while (r!=NULL) //RECORREMOS LOS NODOS DE LA LISTA
{
ni.legajo=r->legajo;
ni.direccion=r->direccion;
ni.sig=NULL;
r =r->sig;
fwrite(&ni, sizeof(nodoindice), 1, fdTabla);
}
}
}
if((fclose(fdTabla))== 0)
{
textcolor(6);
gotoxy(5, 47);
cprintf ("El archivo tabla cerro OK");
}
}
void imprimeArchivo(FILE *fdAlu)
{
datosAlumno alumno;
int leg=0;
FILE *impresora;
impresora= fopen("LPT1", "w"); //abrimos el archivo LPT1 (impresora)
if (impresora==NULL)
cout<<"Error de impresión"<<endl;
else
{
fprintf(impresora, "--------------------------------------n"
"FINAL DE PROGRAMACION ESTRUCTURADA IIn"
"MARZO 2002n"
"----------------------------------------n"
"ARCHIVO ALUMNOSn"
"INTEGRANTES:n"
" LEGAJO DNI APELLIDO NOMBRE DIRECCIÓN LOCALIDAD TELEFONOn");
if((fseek( fdAlu, 0, 0))==0)
{
while (!feof(fdAlu))
{
fread(&alumno, sizeof(datosAlumno), 1, fdAlu);
if((alumno.legajo >0)&(alumno.legajo !=leg))
{
fprintf(impresora," %-2d %-2d %-2s %-2s %-2s %-2d %-2s %-2dn",
alumno.legajo, alumno.dni, alumno.apellido, alumno.nombre,
alumno.calle, alumno.numero, alumno.localidad, alumno.telefono);
leg=alumno.legajo;
}
}
}
}}
int cuentaAlumnos(punt tablaIndices[100])
{
int cantalumnos=0;
for(int i=0; i<100; i++)
{ if (tablaIndices[i]!=NULL)
if (tablaIndices[i]->legajo!=0)
cantalumnos++;
}
return(cantalumnos);
}
