DYNAMICKE vs. STATICKE pole smernikov !!!SUUURNE!!!

Programovacie jazyky, rady, poradňa...
Mimo
Amateur
Amateur
Príspevky: 10
Registrovaný: 06 dec 2005, 13:37

DYNAMICKE vs. STATICKE pole smernikov !!!SUUURNE!!!

Príspevok od používateľa Mimo »

ahoy

Vedel by prosim vas niekto zmenit tento program, aby na reprezentáciu zoznamu zákazníkov bolo použite DYNAMICKE pole smerníkov ???

Kód: Vybrať všetko

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct Zakaznik{
         char *Meno;
         char *Priezvisko;
         char *ID;
         char *Adresa;
         char *Rok;
         char *Tel;
         char *Tovar;
         int Cena;
        }ZAKAZNIK;
        
#define MAX_POLOZIEK 500
#define STRUCT_SIZE  sizeof(ZAKAZNIK)

ZAKAZNIK **Polozka;
int Pocet=0;

void UvolniPamat(void)
{ int i;

 for(i=0;i<Pocet;i++){
  free(Polozka[i]->Meno);
  free(Polozka[i]->Priezvisko);
  free(Polozka[i]->Adresa);
  free(Polozka[i]->ID);
  free(Polozka[i]->Tel);
  free(Polozka[i]->Rok);
  free(Polozka[i]->Tovar);
  free(Polozka[i]);
 }
 free(Polozka);
 Pocet = 0;
}

int Menu()
{ char akcia;

    printf("\n\nZADANIE Z PROGRAMOVANIA\n\n");
    printf(" 1. Pridaj zakaznika\n 2. Odober zakaznika\n 3. Usporiadaj podla ceny\n");
    printf(" 4. Usporiadaj podla priezviska\n 5. Vypis zoznamu\n 6. Uloz do suboru\n");
    printf(" 7. Nacitaj zo suboru\n 8. Ukonci program\n");
     printf("\nZadaj cislo pozadovanej akcie: ");
     do{
     akcia = getchar();
    }while(akcia > '8' || akcia < '1');
    
    return (akcia);
}

char flushkbd(void)
{ char key;
 do{}while((key = getchar()) == '\n');
 return key;
}

char *fgetstr(FILE *fp)
{ char pom[1000], ch, *ret;
  int i=0;
     
 do{
  ch = fgetc(fp);
  pom[i] = ch;
  i++;
 }while(ch != '\n');
 pom[i-1] = '\0';
 ret = (char *)malloc(strlen(pom)+1);
 strcpy(ret, pom);
 return ret;
}

char *ReadStr()
{ char pom[1000]="", ch, *ret;
  int index=1;
  pom[0] = flushkbd();
   do{
    ch = getc(stdin);
    if(ch != '\n') pom[index] = ch; else pom[index] = '\0';
    index++;
   }while(ch != '\n');
 ret = (char *)malloc(strlen(pom)+1);  
 strcpy(ret, pom);
 return ret;
}

void Pridaj()
{  char ch;
   int len,i;

  if(Pocet < MAX_POLOZIEK){
   Polozka = (ZAKAZNIK **)realloc(Polozka, (Pocet+1)*8);        
   Polozka[Pocet] = (ZAKAZNIK *)malloc(STRUCT_SIZE);
   printf("\nMeno: ");        
   Polozka[Pocet]->Meno = ReadStr();
   printf("\nPriezvisko: ");
   Polozka[Pocet]->Priezvisko = ReadStr();
   printf("\nID Cislo: ");
   Polozka[Pocet]->ID = ReadStr();
   printf("\nAdresa: ");
   Polozka[Pocet]->Adresa = ReadStr();
   printf("\nTelefon: ");
   Polozka[Pocet]->Tel = ReadStr();
   printf("Rok posledneho odberu: ");
   Polozka[Pocet]->Rok = ReadStr();
   printf("\nNazov Tovaru: ");
   Polozka[Pocet]->Tovar = ReadStr(); 
   printf("\nCena: ");
   scanf("%d", &Polozka[Pocet]->Cena);
   Pocet++;
  }
}

void Odober(int Index)
{ int i;
 if(Index < Pocet){
  free(Polozka[Index]->Meno);
  free(Polozka[Index]->Priezvisko);
  free(Polozka[Index]->Adresa);
  free(Polozka[Index]->ID);
  free(Polozka[Index]->Tel);
  free(Polozka[Index]->Rok);
  free(Polozka[Index]->Tovar);
  free(Polozka[Index]);
  for(i=Index;i<Pocet-1;i++) Polozka[i] = Polozka[i+1];
  Pocet--;
  Polozka = (ZAKAZNIK **)realloc(Polozka, Pocet*8);
 }
}

void Uloz(const char *Nazov)
{ FILE *fp;
  int i;

 if((fp = fopen(Nazov,"w+")) != NULL){
  fprintf(fp,"%d\n", Pocet);
  for(i=0;i<Pocet;i++){
   fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n", Polozka[i]->Meno, Polozka[i]->Priezvisko, Polozka[i]->Adresa,
                                           Polozka[i]->ID, Polozka[i]->Tel,
                                           Polozka[i]->Rok, Polozka[i]->Tovar,
                                           Polozka[i]->Cena);
  }
  fclose(fp);
 }
}

void Nacitaj(const char *Nazov)
{ FILE *fp;
  char *pom;
  int i;

 if((fp = fopen(Nazov,"r")) != NULL){
  Pocet = 0;
  fscanf(fp,"%d\n", &Pocet);
  Polozka = (ZAKAZNIK **)realloc(Polozka, Pocet*8);
  for(i=0;i<Pocet;i++){
   Polozka[i] = (ZAKAZNIK *)malloc(STRUCT_SIZE);
   Polozka[i]->Meno = fgetstr(fp);
   Polozka[i]->Priezvisko = fgetstr(fp);
   Polozka[i]->ID = fgetstr(fp);
   Polozka[i]->Adresa = fgetstr(fp);
   Polozka[i]->Tel = fgetstr(fp);
   Polozka[i]->Rok = fgetstr(fp);
   Polozka[i]->Tovar = fgetstr(fp);
   fscanf(fp,"%d\n", &Polozka[i]->Cena);
  }
  fclose(fp);
 }
}

// podla = 1 (Priezv)    2 = (Cena)
void Tried(int podla)
{ int i,j,vymen=0;
  ZAKAZNIK *Pom;
  
  for(i=0;i<Pocet-1;i++){
   for(j=0;j<Pocet-1;j++){
    if(podla == 1){ 
     if(strcmp(Polozka[j]->Priezvisko, Polozka[j+1]->Priezvisko) > 0) vymen = 1; else vymen = 0;
    }else if(podla == 2){
     if(Polozka[j]->Cena > Polozka[j+1]->Cena ) vymen = 1; else vymen = 0;
    }
    if(vymen){
     Pom = Polozka[j];
     Polozka[j] = Polozka[j+1];
     Polozka[j+1] = Pom;
    }
   }
  }
}

void Vypis(void)
{ int i;

 for(i=0;i<Pocet;i++){
  printf("--------------------------%3d -----------------------------", i+1);                    
  printf("\nMeno zakaznika:        %s %s", Polozka[i]->Meno, Polozka[i]->Priezvisko);
  printf("\nIdentifikacne cislo:   %s", Polozka[i]->ID);
  printf("\nAdresa zakaznika:      %s", Polozka[i]->Adresa);
  printf("\nTelefon zakaznika:     %s", Polozka[i]->Tel);
  printf("\nRok posledneho odberu: %s", Polozka[i]->Rok);
  printf("\nNazov tovaru:          %s", Polozka[i]->Tovar);
  printf("\nCena tovaru:           %d\n", Polozka[i]->Cena);
  if((i+1)%3 == 0){
   printf("\n");
   getchar();
  }
 }
 printf("-----------------------------------------------------------\n");
 printf("\n");
 getchar();
}

int main(int argc, char *argv[])
{ char Volba, fname[500];
  int idx;

   while((Volba = Menu()) != '8'){
    switch(Volba){
     case '1': Pridaj();
               break;               
     case '2': printf("\nZadaj index zakaznika: ");
               scanf("%d", &idx);
               Odober(idx-1);
               break;               
     case '3': Tried(2);
               break;               
     case '4': Tried(1);
               break;               
     case '5': Vypis();
               break;                                                                           
     case '6': printf("\nZadaj nazov suboru do ktoreho sa ma ulozt obsah zoznamu: ");
               scanf("%s", &fname);
               Uloz(fname);
               break;
     case '7': printf("\nZadaj nazov suboru z ktoreho sa ma nacitat obsah zoznamu: ");
               scanf("%s", &fname);
               Nacitaj(fname);
               break;          
    }
   }
    UvolniPamat();
    printf("\n");
    return EXIT_SUCCESS;
}




DAKUJEM
Mimo
Amateur
Amateur
Príspevky: 10
Registrovaný: 06 dec 2005, 13:37

Re: DYNAMICKE vs. STATICKE pole smernikov !!!SUUURNE!!!

Príspevok od používateľa Mimo »

A ak treba,tu je cele znenie ZADANIA:
Dik


Zostavte program na evidenciu zákazníkov internetového obchodu. O každom zákazníkovi sa evidujú tieto údaje: priezvisko, meno (prípadne meno firmy), identifikačné číslo zákazníka, rok poslednej objednávky, dodacia adresa (ulica_číslo, mesto_PSČ, krajina) a telefónne číslo, názov tovaru, cena. Program nech umožňuje pridanie zákazníka, odobratie zákazníka, usporiadanie podľa priezviska (firmy), ceny objednávky, výpis zoznamu zákazníkov. Položky zoznamu nech sú v tvare:

Hrasko Janko, F253, 1994, Jahodna_25, Zibawe_05802, Kongo, 052698741, Mys, 400

Na reprezentáciu zoznamu zákazníkov použite dynamické pole smerníkov a nech jednotlivé informačné položky záznamu majú dynamickú veľkosť. Záznamy reprezentujte štruktúrami a zoznam nech je uložený v súbore. Použite vlastné funkcie s parametrami
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Veď to je také, aké to potrebuješ mať (aspoň si to myslím).
programator
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 18 apr 2005, 8:31
Bydlisko: Papua new Guinea
Kontaktovať používateľa:

Príspevok od používateľa programator »

Neviem posudit, je to akesi necitatelne, skus mi to poslat na e-mail : [email protected] a ja sa ti na to pozriem.Nic zlozite...
Mimo
Amateur
Amateur
Príspevky: 10
Registrovaný: 06 dec 2005, 13:37

Príspevok od používateľa Mimo »

chrono napísal:Veď to je také, aké to potrebuješ mať (aspoň si to myslím).
Dakujem...
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

chrono napísal:Veď to je také, aké to potrebuješ mať (aspoň si to myslím).
Nie je. :wink:
Je tam pouzite staticke pole smernikov a dynamicke zlozky struktury.

Inac pozdravujem kolegu prvaka z FEI TU. :D
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

ppt napísal:Nie je. :wink:
Je tam pouzite staticke pole smernikov a dynamicke zlozky struktury.

Inac pozdravujem kolegu prvaka z FEI TU. :D
A čo je napr. toto?:

Kód: Vybrať všetko

Polozka = (ZAKAZNIK **)realloc(Polozka, Pocet*8); 
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

:slap: Ups, beriem spat. Nic som nepovedal.. :weep:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

ppt napísal::slap: Ups, beriem spat. Nic som nepovedal.. :weep:
Neviem prečo nie je ten program v

Kód: Vybrať všetko

. Je to maximálne neprehľadné (a do toho ešte aj smajlík), takže sa ti nečudujem, že si to tam nevidel (aj ja som to tam hľadal dosť dlho). :wink:

[color=green]//audiotrack: upravené[/color]
Napísať odpoveď