Advertisement
anotender

drzewo_genealogiczne

Jan 12th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct osoba
  6. {
  7.     char *imie;
  8.     char *nazwisko;
  9.     int wciecie;
  10.     int liczba_dzieci;
  11.     struct osoba *rodzic;
  12.     struct osoba **dziecko;
  13. };
  14.  
  15. char *przyjmij_wyraz()
  16. {
  17.     char bufor[256];
  18.     char *wyraz;
  19.     scanf("%s",bufor);
  20.     getchar();
  21.     wyraz=malloc(sizeof(char)*(strlen(bufor)+1));
  22.     strcpy(wyraz,bufor);
  23.     return wyraz;
  24. }
  25.  
  26. struct osoba *dodaj_osobe(struct osoba *glowa,int wciecie)
  27. {
  28.     struct osoba *nowy=malloc(sizeof(struct osoba));
  29.     system("clear");
  30.     if(glowa!=NULL) printf("Rodzic: %s %s\n",glowa->imie,glowa->nazwisko);
  31.     printf("Podaj imie: ");
  32.     nowy->imie=przyjmij_wyraz();
  33.     printf("Podaj nazwisko: ");
  34.     nowy->nazwisko=przyjmij_wyraz();
  35.     printf("Podaj liczbe dzieci: ");
  36.     scanf("%d",&nowy->liczba_dzieci);
  37.     nowy->rodzic=glowa;
  38.     nowy->dziecko=malloc(sizeof(struct osoba)*nowy->liczba_dzieci);
  39.     nowy->wciecie=wciecie+1;
  40.     int i;
  41.     for(i=0; i<nowy->liczba_dzieci; i++)
  42.     {
  43.         nowy->dziecko[i]=dodaj_osobe(nowy,nowy->wciecie);
  44.     }
  45.     return nowy;
  46. }
  47.  
  48. void wypisz(struct osoba *glowa,FILE *plik)
  49. {
  50.     int i;
  51.  
  52.     for(i=0;i<glowa->wciecie;i++)
  53.     {
  54.         if (i==0)
  55.         {
  56.             printf("|");
  57.             fprintf(plik,"|");
  58.         }
  59.         else
  60.         {
  61.             printf("  |");
  62.             fprintf(plik,"  |");
  63.         }
  64.     }
  65.  
  66.     if (glowa->wciecie>0)
  67.     {
  68.         printf("\n|");
  69.         fprintf(plik,"\n|");
  70.     }
  71.  
  72.     for(i=1;i<glowa->wciecie;i++)
  73.     {
  74.         printf("  |");
  75.         fprintf(plik,"  |");
  76.     }
  77.  
  78.     if (glowa->wciecie>1)
  79.     {
  80.         printf("--%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  81.         fprintf(plik,"--%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  82.     }
  83.     else if (glowa->wciecie>0)
  84.     {
  85.         printf("--%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  86.         fprintf(plik,"--%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  87.     }
  88.     else
  89.     {
  90.         printf("%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  91.         fprintf(plik,"%s %s %d\n",glowa->imie,glowa->nazwisko,glowa->wciecie);
  92.     }
  93.  
  94.     for(i=0; i<glowa->liczba_dzieci; i++)
  95.     {
  96.         wypisz(glowa->dziecko[i],plik);
  97.     }
  98. }
  99.  
  100. int main()
  101. {
  102.     struct osoba *glowa=NULL;
  103.     FILE *plik=fopen("drzewo.txt","wt");
  104.     if (!plik)
  105.     {
  106.         printf("Blad z plikiem.");
  107.         return 1;
  108.     }
  109.     glowa=dodaj_osobe(glowa,-1);
  110.     system("clear");
  111.     wypisz(glowa,plik);
  112.     fclose(plik);
  113.     return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement