//-----------------------------------------------------------------------------
// Ex3.java
// sujet TD : objets et fonctions
// Rem : C'est l'exercice Ex1.java du partiel avec fonctions. Ces fonctions 
// sont exactement... celles de l'exercice Ex2.java du partiel, adaptees a deux
// objets, a la place des tableaux et non en champs de classe. 
//-----------------------------------------------------------------------------
class Billet {

    static double prixKm;
    static int nbBillets = 0;

    String client;
    String destination; 
    int kilometrage; 
    int nbPlaces;

    Billet(String c, String d, int k, int n) {
	this.client = c;
	this.destination = d;
	this.kilometrage = k;
	this.nbPlaces = n;
	nbBillets++;
    }

    static double prix(Billet b) {
	return b.kilometrage*prixKm*b.nbPlaces; 
    }

    static void afficherPrixKm() {
    	System.out.println("prix km : "+prixKm);
    }

    static void saisirPrixKm(String[] args) {
	prixKm = Double.parseDouble(args[args.length-1]);
    }

    static void afficherNbBillets() {
	System.out.println("nb billets : "+nbBillets);
    }

    static void afficher(Billet b) {
	System.out.println(b.client+" va a "+b.destination+", "
			   +b.kilometrage+" km, "+b.nbPlaces+" places, "
			   +prix(b)+" euros");
    }

    static Billet saisir(String[] args, int i) {
	return new Billet(args[4*i], args[4*i+2], Integer.parseInt(args[4*i+3]),
                          Integer.parseInt(args[4*i+1]));
    }

    static void afficherPlusLoinEtModifier(Billet b1, Billet b2) {
	Billet plusLoin, moinsLoin;
	if (b1.kilometrage > b2.kilometrage) {
	    plusLoin = b1;
	    moinsLoin = b2;
	}
	else {
	    plusLoin = b2;
	    moinsLoin = b1;
	}
	System.out.println(plusLoin.client);

	moinsLoin.destination = plusLoin.destination; 
	moinsLoin.kilometrage = plusLoin.kilometrage; 
    }
}

//-----------------------------------------------------------------------------
class Ex3 {
    public static void main(String[] args) {

	Billet b1, b2;
	b1 = Billet.saisir(args, 0);
	b2 = Billet.saisir(args, 1);
	Billet.saisirPrixKm(args);

	Billet.afficherNbBillets();
	Billet.afficherPrixKm();
	Billet.afficher(b1);
	Billet.afficher(b2);

	Billet.afficherPlusLoinEtModifier(b1, b2);

	Billet.afficher(b1);
	Billet.afficher(b2);
    }
}

//-----------------------------------------------------------------------------
/*
java Ex3 Riton 2 NewYork 5000 Rita 3 Rio 8000 0.11
nb billets : 2
prix km : 0.11
Riton va a NewYork, 5000 km, 2 places, 1100.0 euros
Rita va a Rio, 8000 km, 3 places, 2640.0 euros
Rita
Riton va a Rio, 8000 km, 2 places, 1760.0 euros
Rita va a Rio, 8000 km, 3 places, 2640.0 euros
 */
//-----------------------------------------------------------------------------
