/* 
   Laboratorium Praktyki Programowania  
   Program przykładowy 
*/


/* Należy pozostawić definicję tylko jednej ze stałych : */

/* dla nowszych kompilatorów */
#define ANSI

/* dla starszych kompilatorów */
//#define ARM


#ifdef ANSI
#include <iostream>
#include <cstring>
using namespace std;
#endif

#ifdef ARM
#include <iostream.h>
#include <string.h>
#endif

struct pracownik{
  char nazwisko[15];
  unsigned int pensja;
};

// funkcja porównujacą pensje
int porpensje(const void*w1, const void *w2){
  const struct pracownik *p1=(const struct pracownik*)w1,
    *p2=(const struct pracownik*)w2;

  if ( p1->pensja > p2->pensja )
    return 1;
  else if ( p1->pensja < p2->pensja )
    return -1;
  else return 0;
}

// funkcja porównująca nazwiska
int pornazw(const void*w1, const void *w2){
  const struct pracownik *p1=(const struct pracownik*)w1,
    *p2=(const struct pracownik*)w2;

  return strcmp(p1->nazwisko,p2->nazwisko);
}

int main(){
  int n,i;
  char znak;
  struct pracownik *T;

  cout << "Ilu proacownikow wprowadzisz ? " ;
  cin >> n;

  T=new struct pracownik[n];

  for ( i=0 ; i<n ; i++ ){
    cout << "Podaj nazwisko pracownika " << i+1 <<" : ";
    cin >> T[i].nazwisko;
    
    cout << "Podaj pensje pracownika " << i+1 << " : ";
    cin >> T[i].pensja;
  }

  cout << " posortowac wzgledem pensji(P) czy nazwiska(N) (podaj P lub N) : ";
  cin >> znak;

  switch ( znak ){
  case 'N': case 'n':
    qsort(T,n,sizeof(struct pracownik),pornazw);
    break;
  case 'P': case 'p':
    qsort(T,n,sizeof(struct pracownik),porpensje);
  }

  cout << " Po posortowaniu : "<< endl;
  for ( i=0 ; i<n ; i++ )
    cout << T[i].nazwisko <<"\t" << T[i].pensja<< endl;

  return 0;
}
  

