You are on page 1of 14

#include<stdio.

h>
#include<iostream>
#include<string.h>
using namespace std;
FILE *fd,*ft;// fichero de datos , fichero de temporal
struct encabezado
{
int NRS;
int PR;
int URE;
}e,et;

struct registro
{
int NR;
char nom[15];
int SR;
int ARE;

}r,s,a,elim,rt;

int

le=sizeof(struct encabezado);

int

lr=sizeof(struct registro);

void escribir()
{ char rpt,band;
int pos,sgte;
if((fd=fopen("Lista2.txt","w+"))==NULL)
{
return;
}

fseek(fd,le,0);
e.NRS=0;e.PR=-1;e.URE=-1;
do{
fflush(stdin);
band='v';
r.NR=++e.NRS;//1,2
cout<<"\nNombre:";gets(r.nom);r.ARE=0;
if(e.PR==-1)
{

r.SR=e.PR;
e.PR=r.NR; }

else//comparamos el nuevo registro con la lista existente


{ sgte=e.PR;
while(sgte!=-1)//1
{ pos=(sgte-1)*lr+le;
fseek(fd,pos,0);
fread(&s,lr,1,fd);
if(strcmp(r.nom,s.nom)>0)
{ a=s; sgte=s.SR; band='f' , continue;
}break;
}
if(band=='v'){r.SR=e.PR; e.PR=r.NR;}
if(band=='f')
{
r.SR=a.SR; a.SR=r.NR;
pos=(a.NR-1)*lr+le;
fseek(fd,pos,0);
fwrite(&a,lr,1,fd);
}
fseek(fd,0,2);
}

fwrite(&r,lr,1,fd);
cout<<"Desea usted mas registros:";
cin>>rpt;
}while(rpt!='n');
fseek(fd,0,0);
fwrite(&e,le,1,fd);
fclose(fd);
}

void Insertar()
{
char rpt,band;

int pos,sgte;
if((fd=fopen("Lista2.txt","ra+"))==NULL)// r=leer ,a/applend = agregar ,+=modificar
{
return;
}

fread(&e,le,1,fd);

do{
fflush(stdin);
band='v';
r.NR=++e.NRS;//1,2
cout<<"\nNombre:";
gets(r.nom);
r.ARE=0;
if(e.PR==-1)
{

r.SR=e.PR;
e.PR=r.NR;
}
else//comparamos el nuevo registro con la lista existente
{
sgte=e.PR;
while(sgte!=-1)//1
{
pos=(sgte-1)*lr+le;
fseek(fd,pos,0);
fread(&s,lr,1,fd);
if(strcmp(r.nom,s.nom)>0)
{
a=s; sgte=s.SR; band='f';
continue;

}break;
}
if(band=='v'){r.SR=e.PR; e.PR=r.NR;}
if(band=='f')
{
r.SR=a.SR; a.SR=r.NR;
pos=(a.NR-1)*lr+le;
fseek(fd,pos,0);
fwrite(&a,lr,1,fd);
}
fseek(fd,0,2);
}

fwrite(&r,lr,1,fd);
cout<<"Desea usted mas registros:";

cin>>rpt;
}while(rpt!='n');
fseek(fd,0,0);
fwrite(&e,le,1,fd);
fclose(fd);
}

void leer_Ordenado()
{ int sgte,pos;
if((fd=fopen("Lista2.txt","rt"))==NULL)
{
return;
}

fread(&e,le,1,fd);
cout<<"NRS:"<<e.NRS<<endl<<"PR:"<<e.PR<<"URE:"<<e.URE<<endl;
cout<<"-------------------"<<endl;
cout<<"NR"<<"\t"<<"Nombre"<<"\t"<<"SR"<<"\t"<<"ARE"<<endl;
cout<<"-------------------"<<endl;
sgte=e.PR;
while(sgte!=-1)
{
pos=(sgte-1)*lr+le;
fseek(fd,pos,0);
fread(&s,lr,1,fd);

// if(strcmp(s.nom,"m")>=0)
cout<<s.NR<<"\t"<<s.nom<<"\t"<<s.SR<<"\t"<<s.ARE<<endl;
sgte=s.SR;
}
fclose(fd);

void leer_todo()//Imprimir desordenado


{
if((fd=fopen("Lista2.txt","rt"))==NULL)
{
return;
}

fread(&e,le,1,fd);
cout<<"NRS:"<<e.NRS<<endl <<"PR:"<<e.PR<<"URE:"<<e.URE<<endl;
cout<<"-------------------"<<endl;
cout<<"NR:"<<"\t"<<"Nombre:"<<"\t"<<"SR:"<<"\t"<<"ARE"<<endl;
cout<<"-------------------"<<endl;
while(!feof(fd))
{
if(fread(&r,lr,1,fd)!=0)
cout<<r.NR<<"\t"<<r.nom<<"\t"<<r.SR<<"\t"<<r.ARE<<endl;
}
fclose(fd);
}

void eliminar_logica(){
int pos,sgte;
char nom_elim[15],band='v';//s, se actualiza la cabecera
char flag ='f';//nombre no existe
if((fd=fopen("Lista2.txt","r+t"))==NULL)
{
return;
}
fflush(stdin);

fread(&e,le,1,fd);
cout<<"nombre a eliminar:"; gets(nom_elim);
//busca el nombre a eliminar
sgte=e.PR;
while(sgte!=-1)
{
pos=(sgte-1)*lr+le;
fseek(fd,pos,0);
fread(&elim,lr,1,fd);//"s" contiene al registro a eliminar
if(strcmp(nom_elim,elim.nom)!=0){a=elim; band='f';sgte=elim.SR; continue;}
flag='v';break;
}
if(flag=='f'){cout<<"no existe nombre";return;}
if(band=='v'){elim.ARE=e.URE;e.URE=elim.NR;e.PR=elim.SR;}
if(band=='f'){elim.ARE=e.URE;e.URE=elim.NR;a.SR=elim.SR;
pos=(a.NR-1)*lr+le;fseek(fd,pos,0);
fwrite(&a,lr,1,fd);
}
pos=(elim.NR-1)*lr+le;
fseek(fd,pos,0);
fwrite(&elim,lr,1,fd);
fseek(fd,0,0);
fwrite(&e,le,1,fd);
fclose(fd);
}

void eliminar_Fisica()
{
int pos,sgte;

if((fd=fopen("Lista2.txt","rt"))==NULL)

{
return;
}

if((ft=fopen("Temp.txt","wt"))==NULL)
{
return;
}

fflush(stdin);
fread(&e,le,1,fd);
fseek(ft,le,0);
//busca el nombre a eliminar
sgte=e.PR;
et.NRS=0;et.PR=-1;et.URE=-1;
while(sgte!=-1)
{
pos=(sgte-1)*lr+le;
fseek(fd,pos,0);
fread(&r,lr,1,fd);
rt=r;et.PR=1;
rt.NR=++et.NRS;

if(r.SR!=-1)
{
rt.SR=rt.NR+1;
}

fwrite(&rt,lr,1,ft);
sgte=r.SR;
}

fseek(ft,0,0);
fwrite(&et,le,1,ft);
fclose(fd);fclose(ft);
remove("Lista2.txt");
rename("Temp.txt","Lista2.txt") }
int main ()
{ int opc;
do{
cout<<endl;
cout<<"\t ****OPCIONES****\n\n";
cout<<"\t 1.Escribir"<<endl ;
cout<<"\t 2.Leer Ordenado"<<endl;
cout<<"\t 3.Leer todo"<<endl;
cout<<"\t 4.Elimacion logica "<<endl;
cout<<"\t 5.Elimacion Fisica "<<endl;
cout<<"\t 6.Insertar"<<endl ;
cout<<"\t 7.salir"<<endl;
cout<<endl<<"Elegir opcion: ";
cin>>opc;
switch(opc)
{
case 1: escribir(); break;
case 2: leer_Ordenado();break;
case 3: leer_todo(); break;
case 4: eliminar_logica();break;
case 5: eliminar_Fisica();break;
case 6: Insertar();break;
case 7 : break;
}
}while(opc!=7); }

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define tam 10
using namespace std;
struct encabezado{
int NRS;
}ed,ec;
struct registro{
char nombre[20];
int NR;
int SR;
}r,s;
FILE *fd,*fc;
int lr=sizeof(struct encabezado);
int le=sizeof(struct registro);
int fh(char *clave){
int s=0;
for(int i = 0;i<strlen(clave);i++){
s+=clave[i]-64;
}
return s%tam + 1;
}
void escribir(){
char opc;
int band,sgte,flag,pos;
if((fd=fopen("disperso.txt","w+t"))==NULL){
return;
}
if((fc=fopen("colision.txt","w+t"))==NULL) return; }

fseek(fd,le,0);
fseek(fc,le,0);
ed.NRS=0;
ec.NRS=0;
do{fflush(stdin);
cout<<"nombre:";gets(r.nombre);
r.NR=fh(r.nombre);r.SR=-1; band=0;
sgte=r.NR;//sgt es el primer registro de la L.ENLAZADA
while(sgte!=-1){
if(band==0)//busca disperso
{
pos=(sgte-1)*lr+le;fseek(fd,pos,0);
fread(&s,1,lr,fd);
if(strcmp(s.nombre,"")==0)//no hya colision
{fseek(fd,pos,0);fwrite(&r,1,lr,fd);
ed.NRS++;break;}
else{
band=1;flag=0;sgte=s.SR;
continue;}
}
if(band==1){
pos=(sgte-1)*lr+le;fseek(fc,pos,0);
fread(&s,1,lr,fc);flag=1;sgte=s.SR;
}
}
if(flag==0){
r.NR=++ec.NRS;fseek(fc,0,2);fwrite(&r,1,lr,fc);
s.SR=r.NR;pos=(s.NR-1)*lr+le;fseek(fd,pos,0);
fwrite(&s,1,lr,fd);
}
if(flag==1){

r.NR=++ec.NRS;fseek(fc,0,2);fwrite(&r,1,lr,fc);
s.SR=r.NR;pos=(s.NR-1)*lr+le;fseek(fc,pos,0);
fwrite(&s,1,lr,fc);
}
cout<<"desea mas registros?:";cin>>opc;
}while(opc!='n');
fseek(fd,0,0);fwrite(&ed,1,le,fd);
fseek(fc,0,0);fwrite(&ec,1,le,fc);
fclose(fd);fclose(fc);
}
void buscar(){
char encontrado = 'f',clave[20];
int band,sgte,pos;
if((fd=fopen("disperso.txt","rt"))==NULL){return;}
if((fc=fopen("colision.txt","rt"))==NULL){return;}
fread(&ed,1,le,fd);fread(&ec,1,le,fc);
cout<<"CLAVE:"; fflush(stdin);gets(clave);
band=0;
int nr=fh(clave);
//algoritmo de recorrido en lista enlazada
sgte=nr;
while(sgte!=-1){

if(band==0){
pos=(sgte-1)*lr+le;fseek(fd,pos,0);
fread(&s,1,lr,fd);
if(strcmp(s.nombre,clave)==0){encontrado='v';

}
if(band==1){

cout<<"nombre"<<s.nombre;break;

else{band=1;sgte=s.SR;continue;

pos=(sgte-1)*lr+le;fseek(fc,pos,0);
fread(&s,1,lr,fc);
if(strcmp(s.nombre,clave)==0){encontrado='v';
cout<<"nombre"<<s.nombre;break;

else{sgte=s.SR; }
}
}
if(encontrado=='f'){cout<<"NO EXISTE";}
fclose(fd);fclose(fc);
}
void leer_todo()//Imprimir desordenado
{
if((fd=fopen("disperso.txt","rt"))==NULL){return;}
if((fc=fopen("colision.txt","rt"))==NULL){return;}
fread(&ed,le,1,fd);
cout<<"NRS:"<<ed.NRS<<endl;
cout<<"-------------------"<<endl;
cout<<"NR:"<<"\t"<<"Nombre:"<<"\t"<<"SR:"<<"\t"<<endl;
cout<<"-------------------"<<endl;
fflush(stdin);
while(!feof(fd))
{
if(fread(&r,lr,1,fd)!=0)
cout<<r.NR<<"\t"<<r.nombre<<"\t"<<r.SR<<"\t"<<endl;
}
fclose(fd);
fread(&ec,le,1,fc);
cout<<"NRS:"<<ec.NRS<<endl ;
cout<<"-------------------"<<endl;
cout<<"NR:"<<"\t"<<"Nombre:"<<"\t"<<"SR:"<<"\t"<<endl;
cout<<"-------------------"<<endl;

while(!feof(fc))
{
if(fread(&r,lr,1,fc)!=0)
cout<<r.NR<<"\t"<<r.nombre<<"\t"<<r.SR<<"\t"<<endl;
}
fclose(fc);
}
int main ()
{
int opc;
do{
cout<<endl;
cout<<"\t ****MENU****\n\n";
cout<<"\t 1.Escribir"<<endl ;
cout<<"\t 2.buscar"<<endl;
cout<<"\t 3.Leer todo"<<endl;
cout<<"\t 4.Salir"<<endl;
cout<<endl<<"OPCION : ";
cin>>opc;
switch(opc)
{
case 1: escribir(); break;
case 2: buscar();break;
case 3: leer_todo();break;
case 4 : break;

}
}while(opc!=4);
}

You might also like