Kezdőoldal » Számítástechnika » Programozás » Indextábla létrehozása?

Indextábla létrehozása?

Figyelt kérdés

"1. Az adateléréshez azonosítóra rendezett indextáblát kell használnia. Az indextáblát láncolt listában, dinamikus memóriában kell tárolnia!"


Beadandómba ez a feladat van és picit vakarom a fejem hogy még is ezt hogy csináljam meg vagyis hogy alakítsam át a programomat hogy az eleget tegyen ennek. Ugyebár van egy alap programom ami bináris adatbázist kezel.


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>


struct dbase{

int id;

char konyv[220];

int ar;

};


int keres(struct dbase t,FILE *fp,int az)

{

int i=0;

fseek(fp,0,SEEK_SET);

fread(&t,sizeof(dbase),1,fp);

while(!feof(fp)){

if(az==(t.id)) {

i=1;

printf("A konyv neve:%s\n",t.konyv);

printf("A konyv ara:%d\n",t.ar);

break;

}


fread(&t,sizeof(dbase),1,fp);


}

return i;


}


void feltolt(struct dbase t,FILE *fp)

{

int ujadat,n,az;



printf("Kerem adja meg az uj konyv azonositojat: ");

scanf("%d",&az);

ujadat=-1;

while(ujadat){

ujadat=0;

if(keres(t,fp,az))

{

printf("\n Van ilyen azonosito.Kerem adjon meg egy ujat: ");

scanf("%d",&az);

ujadat=-1;}


}



(t.id)=az;

printf("\nKerem a konyv cimet: ");scanf("%s",t.konyv);

fflush(stdin);

printf("\nKerem adja meg az arat ");scanf("%d",&(t.ar));

fwrite(&t,sizeof(dbase),1,fp);


}


void kiir(FILE *fp,dbase d){

fseek(fp,0,SEEK_SET);

fread(&d,sizeof(dbase),1,fp);

while(!feof(fp)){

if(d.id>-1)

{

printf("\n%-15d %-39s %-10d",d.id,d.konyv,d.ar);

}

fread(&d,sizeof(dbase),1,fp);


}

}


int main ()

{

struct dbase d;

int i,n,max=0;

int a=0;

int sch;

char c;


FILE *fp;

fp=fopen("adat.bin","r+b");

if (fp==NULL) fp=fopen("adat.bin","w+b");

else fseek(fp,0,SEEK_END);


while(a!=6) {

system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

printf("Menuk:\n");

printf("\t1. Uj adat \n");

printf("\t2. Kereses \n");

printf("\t3. Modositas \n");

printf("\t4. Torles \n");

printf("\t5. Listazas \n");

printf("\t6. Kilepes \n");

printf("\n Kerem adja meg melyik menupontot szeretne hasznalni:");

scanf("%d",&a);

switch(a){


case 1: system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

feltolt(d,fp);

break;


case 2: system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

printf("Kerem adja meg a keresendo konyv azonositojat: ");

scanf("%d",&sch);

if(!keres(d,fp,sch))

{

printf("\n Nincs ilyen: ");

}

system("pause");

break;

case 3:system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

printf("Kerem adja meg a modositando konyv azonositojat: ");

scanf("%d",&sch);

if(keres(d,fp,sch))

{

d.id=sch;

printf("Kerem az uj nevet : " ); scanf("%s",d.konyv);

fflush(stdin);

printf("Kerem az uj fizetest : " ); scanf("%d",&d.ar);

fseek(fp,-sizeof(dbase),SEEK_CUR);

fwrite(&d,sizeof(dbase),1,fp);

system("pause");

}

else printf("Nincs ilyen\n");

break;


case 4:system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

printf("Kerem adja meg a torlendo konyv azonositojat: ");

scanf("%d",&sch);

if(keres(d,fp,sch))

{

printf("\nBiztosan torolni akarja? (i/n)");

fflush(stdin);

c=getchar();

if(c=='i')

{

d.id=-1;

printf("\nAz adat torolve");

fseek(fp,-sizeof(dbase),SEEK_CUR);

fwrite(&d,sizeof(dbase),1,fp);

}

else printf("\nTorles megszakitva");


}

system("pause");

break;


case 5: system("cls");

printf("\t \t \tKonyvesbolt adatbazis\n\n\n");

printf("Azonosito\tKonyv cime\t\t\t\tAr\n");

kiir(fp,d);

printf("\n");

system("pause");

break;


}


}

fclose(fp);

system("cls");

system("pause");

}


ez ugye működik.van még egy bináris állományom pár elemmel feltöltve az is meg van. Az órai példából próbáltam kiindulni ami ez volt:


#include<stdio.h>

#include<stdlib.h>


struct rec {

int asd;

struct rec *kovetkezo;

};



int main (){

int adat;

struct rec *uj, *elso=NULL,*aktualis,*elozo;

printf("Kerem a kovetkezo azonositot: ");scanf("%d",&adat);

while(adat){

uj=(struct rec*) malloc (sizeof(struct rec));

if(!uj) {printf("hiba");}

uj->asd=adat;

elozo=NULL;

aktualis=elso;

while(aktualis && adat>aktualis->asd) { //helykereséses ciklus

elozo=aktualis;

aktualis=aktualis->kovetkezo;

}

if (!elozo) {elso=uj;}

else {elozo->kovetkezo=uj;}

uj->kovetkezo=aktualis;

printf("Kerem a szamot: ");scanf("%d",&adat);

}

aktualis=elso;

while (aktualis){

printf("%d\n",aktualis->asd);

aktualis=aktualis->kovetkezo;

}


//keresés

printf("Kerem a keresendo erteket: ");scanf("%d",&adat);

aktualis=elso;

while(aktualis){

if(aktualis->asd==adat){

printf("Megvan\n");

break;}

aktualis=aktualis->kovetkezo;

}

if(!aktualis) printf("nincs ilyen adat\n");


//törlés

printf("Kerem a torlendo erteket: ");scanf("%d",&adat);

aktualis=elso;

elozo=NULL;

while(aktualis){

if(adat==aktualis->asd){

if(!elozo)elso=aktualis->kovetkezo;

else elozo->kovetkezo=aktualis->kovetkezo;

free(aktualis);

break;

}

elozo=aktualis;

aktualis=aktualis->kovetkezo;

}

if(!aktualis) printf("nincs ilyen adat\n");


aktualis=elso;

while (aktualis){

printf("%d\n",aktualis->asd);

aktualis=aktualis->kovetkezo;

}



system("pause");

}


de ha ezeket megprobáltam bele írni "átformálni" a programomba (struktúrát megtoldtam egy kovetkezo elemmel) egyszerűen megkergült és a kiíratásnál problémák születtek így ebből gondolom a program nem egészen megfelelően működik.Nem azt szeretném valaki megírná helyettem mielőtt még valaki azt hinné hanem egy kis segítséget hogyan tudnám ezt beleintegrálni a programomba hogy eleget tegyen ennek a láncolt listának. Előre is köszönök egy kis segítséget.


2016. máj. 28. 17:34
Sajnos még nem érkezett válasz a kérdésre.
Te lehetsz az első, aki segít a kérdezőnek!

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!