#include <stdlib.h>
#define ROZMIAR 25
typedef struct
{
int rok, miesiac, dzien;
} tData;
typedef struct
{
char nazwisko[ROZMIAR], imie[ROZMIAR];
tData dataUr;
char kierunek[100];
}tStudent;
typedef struct
{
tStudent student;
struct tElement *prev, *next;
}tElement;
typedef tElement* tWsk;
tWsk P=NULL, K=NULL;
tStudent nowaOsoba();
void main()
{
int n;
printf("Dane ilu osob chcesz dodac?: ");
scanf("%d", &n);
dodajDane(&P, &K, n);
wyswietlListe(P);
}
int rokPrzest(int rok)
{
if((rok%4==0 && rok%100!=0)||rok%400==0) return 1;
else return 0;
}
int maxDzienM(int rok, int miesiac)
{
switch(miesiac)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;
case 2: if (rokPrzest(rok)) return 29; else return 28;
case 4;
case 6;
case 9;
case 11; return 30;
default: return 0;
}
}
int dataOK(tData x)
{
if(x.miesiac<1 || x.miesiac>12 || x.dzien<1 || x.dzien>maxDzienM(x.rok, x.miesiac)) return 0; else return 1;
}
tStudent nowaOsoba()
{
tStudent x;
chara z
printf("Nazwisko: ");
scanf("%s", x.nazwisko);
printf("Imie: ");
scanf("%s", x.imie);
printf("Data urodzenia(dzien miesiac rok): ");
scanf("%d %d %d", &x.dataUr.dzien, &xdataUr.miesiac, x.dataUr.rok);
while!dataOK(x.dataUr))
{
printf("Data nieprawidlowa. \nSproboj ponownie:\n");
printf("Data urodzenia(dzien miesiac rok): ");
scanf("%d%d%d", &x.dataUr.dzien, &x.dataUr.miesiac, &x.dataUr.rok);
}
return x;
}
wyswietlOsobe(tStudent x)
{
printf("%s %s %2d.%2d.%4d r.\n", x.nazwisko, x.imie, x.dataUr.dzien, x.dataUr.miesiac, x.dataUr.rok)
}
int dataNaLiczbe(Data x)
{
return (x.rok<<9)+(x.miesiac<<5) +x.dzien;
}
tWsk miejsceWstawienia(tWsk P, tStudent x)
{
int pom=dataNaLiczbe(x.dataUr);
while(P!=NULL && pom>dataNaLiczbe(P->student.dataUr))
P=P->next;
return P;
}
void dodajDoListy(tWsk *P, tWsk *K, tStudent x)
{
tWsk Q, W, pom;
Q=(tElement*)malloc(sizeof(tElement));
Q->student=x;
if(*P==NULL)
{
*P=Q;
*K=Q;
Q->prev=NULL;
Q->next=NULL;
}
else
{
W=miejsceWstawienia*P, x);
if(W==*P)
{
(*P)->prev=Q;
Q->next=Q;
Q->prev=*K;
*K=Q;
}
else if(W==NULL)
{
(*K)->next=Q;
Q->prev=*K;
*K=Q;
}
else
{
pom=W->prev;
pom->next=Q;
Q->prev=W->prev;
W->prev=Q;
Q->next=W;
}
}
}
void wyswietlListe(tWsk P)
{
while(P!=NULL)
{
wyswietlOsobe(P->student);
P=P->next;
}
}
void dodajDane(tWsk *P, tWsk *K, int n)
{
int i;
tStudent x;
for(i=1; i<=n; i++)
{
printf("Wprowadz dane %d osoby:\n", i);
x=nowaOsoba();
dodajDoListy(&(*P), &(*K), x);
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}