Facebook
From asd, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 286
  1. #include <stdlib.h>
  2. #define ROZMIAR 25
  3.  
  4. typedef struct
  5. {
  6.     int rok, miesiac, dzien;
  7. } tData;
  8.  
  9. typedef struct
  10. {
  11.     char nazwisko[ROZMIAR], imie[ROZMIAR];
  12.     tData dataUr;
  13.     char kierunek[100];
  14. }tStudent;
  15.  
  16. typedef struct
  17. {
  18.     tStudent student;
  19.     struct tElement *prev, *next;
  20. }tElement;
  21.  
  22. typedef tElement* tWsk;
  23.  
  24. tWsk P=NULL, K=NULL;
  25.  
  26. tStudent nowaOsoba();
  27.  
  28. void main()
  29. {
  30.     int n;
  31.     printf("Dane ilu osob chcesz dodac?: ");
  32.     scanf("%d", &n);
  33.     dodajDane(&P, &K, n);
  34.     wyswietlListe(P);
  35. }
  36.  
  37. int rokPrzest(int rok)
  38. {
  39.     if((rok%4==0 && rok%100!=0)||rok%400==0) return 1;
  40.     else return 0;
  41. }
  42.  
  43. int maxDzienM(int rok, int miesiac)
  44. {
  45.     switch(miesiac)
  46.     {
  47.         case 1:
  48.         case 3:
  49.         case 5:
  50.         case 7:
  51.         case 8:
  52.         case 10:
  53.         case 12: return 31;
  54.         case 2: if (rokPrzest(rok)) return 29; else return 28;
  55.         case 4;
  56.         case 6;
  57.         case 9;
  58.         case 11; return 30;
  59.         default: return 0;
  60.  
  61.     }
  62. }
  63.  
  64. int dataOK(tData x)
  65. {
  66.     if(x.miesiac<1 || x.miesiac>12 || x.dzien<1 || x.dzien>maxDzienM(x.rok, x.miesiac)) return 0; else return 1;
  67. }
  68.  
  69. tStudent nowaOsoba()
  70. {
  71.     tStudent x;
  72.     chara z
  73.     printf("Nazwisko: ");
  74.     scanf("%s", x.nazwisko);
  75.     printf("Imie: ");
  76.     scanf("%s", x.imie);
  77.     printf("Data urodzenia(dzien miesiac rok): ");
  78.     scanf("%d %d %d", &x.dataUr.dzien, &xdataUr.miesiac, x.dataUr.rok);
  79.     while!dataOK(x.dataUr))
  80.     {
  81.         printf("Data nieprawidlowa. \nSproboj ponownie:\n");
  82.         printf("Data urodzenia(dzien miesiac rok): ");
  83.         scanf("%d%d%d", &x.dataUr.dzien, &x.dataUr.miesiac, &x.dataUr.rok);
  84.     }
  85.     return x;
  86. }
  87.  
  88. wyswietlOsobe(tStudent x)
  89. {
  90.     printf("%s %s %2d.%2d.%4d r.\n", x.nazwisko, x.imie, x.dataUr.dzien, x.dataUr.miesiac, x.dataUr.rok)
  91. }
  92.  
  93. int dataNaLiczbe(Data x)
  94. {
  95.     return (x.rok<<9)+(x.miesiac<<5) +x.dzien;
  96. }
  97.  
  98. tWsk miejsceWstawienia(tWsk P, tStudent x)
  99. {
  100.     int pom=dataNaLiczbe(x.dataUr);
  101.     while(P!=NULL && pom>dataNaLiczbe(P->student.dataUr))
  102.     P=P->next;
  103.     return P;
  104. }
  105.  
  106. void dodajDoListy(tWsk *P, tWsk *K, tStudent x)
  107. {
  108.     tWsk Q, W, pom;
  109.     Q=(tElement*)malloc(sizeof(tElement));
  110.     Q->student=x;
  111.     if(*P==NULL)
  112.     {
  113.         *P=Q;
  114.         *K=Q;
  115.         Q->prev=NULL;
  116.         Q->next=NULL;
  117.     }
  118.     else
  119.     {
  120.         W=miejsceWstawienia*P, x);
  121.         if(W==*P)
  122.         {
  123.             (*P)->prev=Q;
  124.             Q->next=Q;
  125.             Q->prev=*K;
  126.             *K=Q;
  127.         }
  128.         else if(W==NULL)
  129.         {
  130.             (*K)->next=Q;
  131.             Q->prev=*K;
  132.             *K=Q;
  133.         }
  134.         else
  135.         {
  136.             pom=W->prev;
  137.             pom->next=Q;
  138.             Q->prev=W->prev;
  139.             W->prev=Q;
  140.             Q->next=W;
  141.         }
  142.     }
  143. }
  144.  
  145. void wyswietlListe(tWsk P)
  146. {
  147.     while(P!=NULL)
  148.     {
  149.         wyswietlOsobe(P->student);
  150.         P=P->next;
  151.     }
  152. }
  153.  
  154. void dodajDane(tWsk *P, tWsk *K, int n)
  155. {
  156.  
  157.     int i;
  158.     tStudent x;
  159.     for(i=1; i<=n; i++)
  160.     {
  161.         printf("Wprowadz dane %d osoby:\n", i);
  162.         x=nowaOsoba();
  163.         dodajDoListy(&(*P), &(*K), x);
  164.     }
  165. }
  166.