Indextábla létrehozása?
"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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!