Vous êtes sur la page 1sur 18

/**

* Etagere qui peut contenir un certain nombre de livres.


*/
public class Etagere {
private Livre[] livres;
private int nbLivres = 0; // nbre de livres qu'il y a dans l'étagère

public Etagere(int nb) {


livres = new Livre[nb];
}

public int getNbLivres() {


return nbLivres;
}

public int getNbLivresMax() {


return livres.length;
}

public void ajouter(Livre l) {


if (nbLivres < livres.length) {
livres[nbLivres++] = l;
}
else {
System.err.println("Etagere pleine");
}
}

/**
* Renvoie le livre placé sur l'étagère dans la position indiquée.
* @param position : La position du 1er livre est 1 (pas 0).
* @return le livre trouvée à cette position (<code>null</code>
* s'il n'y a pas de livre à cette position)
*/
public Livre getLivre(int position) {
if (position > 0 && position <= nbLivres) {
return livres[position - 1];
}
else {
return null;
}
}

/**
* Cherche la position du premier livre de l'étagère avec un auteur
* et un titre donné.
* @param titre : le titre du livre
* @param auteur : l'auteur du livre
* @return la position du livre cherché sur l'étagère
* ou 0 si le livre n'y est pas.
* Remarque : la position du 1er livre est 1 (pas 0)
*/
public int chercher(String titre, String auteur) {
for (int i=0; i < nbLivres; i++) {
if (livres[i].getTitre().equals(titre)
&& livres[i].getAuteur().equals(auteur)) {
return i + 1;
}
}
return 0;
}
/**
* Cherche les positions de tous les livres de l'étagère avec un auteur
* et un titre donné.
* @param titre : le titre du livre
* @param auteur : l'auteur du livre
* @return un tableau d'entiers contenant les position des livres
cherchés
* sur l'étagère ; le tableau a pour taille le nombre de livres trouvés.
* Remarque : la position du 1er livre est 1 (pas 0)
*/
public int[] chercherLivres(String titre, String auteur) {
int[] livresCherches = new int[nbLivres];
int nbLivresTrouves = 0;
for (int i=0; i < nbLivres; i++) {
if (livres[i].getTitre().equals(titre)
&& livres[i].getAuteur().equals(auteur)) {
livresCherches[nbLivresTrouves++] = i + 1;
}
}
int[] result = new int[nbLivresTrouves];
System.arraycopy(livresCherches, 0, result, 0, nbLivresTrouves);
return result;
}

/**
* Cherche tous les livres d'un auteur sur l'étagère.
* @param auteur : l'auteur des livres
* @return un tableau de livres contenant les livres cherchés ;
* le tableau a pour taille le nombre de livres trouvés.
*/
public Livre[] chercherAuteur(String auteur) {
Livre[] livresCherches = new Livre[nbLivres];
int nbLivresTrouves = 0;
for (int i=0; i < nbLivres; i++) {
if (livres[i].getAuteur().equals(auteur)) {
livresCherches[nbLivresTrouves++] = livres[i];
}
}
Livre[] result = new Livre[nbLivresTrouves];
System.arraycopy(livresCherches, 0, result, 0, nbLivresTrouves);
return result;
}

/**
* Cherche tous les livres d'un auteur sur l'étagère.
* @param auteur : l'auteur des livres
* @return un tableau contenant les livres cherchés.
*/
public Livre[] chercherTitre(String titre) {
Livre[] livresCherches = new Livre[nbLivres];
int nbLivresTrouves = 0;
for (int i=0; i < nbLivres; i++) {
if (livres[i].getTitre().equals(titre)) {
livresCherches[nbLivresTrouves++] = livres[i];
}
}
Livre[] result = new Livre[nbLivresTrouves];
System.arraycopy(livresCherches, 0, result, 0, nbLivresTrouves);
return result;
}
/**
* Enlever un livre "en tassant".
* @param position du livre à enlever
* (position 1 pour le 1er livre).
* @return le livre enlevé
* (null si pas de livre à la position indiquée).
*/
public Livre enleverLivre(int position) {
if (position <= 0 || position> nbLivres) {
return null;
}
int i = position - 1;
Livre livreEnleve = livres[i];
nbLivres--;
// On tasse les livres
for ( ; i < nbLivres; i++) {
livres[i] = livres[i + 1];
}
return livreEnleve;
}

/**
* Enlever un livre en remplaçant par le dernier livre.
* @param position du livre à enlever
* (position 1 pour le 1er livre).
* @return le livre enlevé
* (null si pas de livre à la position indiquée).
*/
public Livre enlever(int position) {
if (position <= 0 || position> nbLivres) {
return null;
}
int i = position - 1;
Livre livreEnleve = livres[i];
nbLivres--;
// On met le dernier livre à la place de celui que l'on vient d'enlever
livres[i] = livres[nbLivres];
return livreEnleve;
}

public Livre enlever(String titre, String auteur) {


return enlever(chercher(titre, auteur));
}

public Livre enleverLivre(String titre, String auteur) {


return enleverLivre(chercher(titre, auteur));
}

public String toString() {


StringBuffer sb = new StringBuffer("Etagere [nbLivres=");
sb.append(nbLivres).append(",livres=[");
for (int i = 0; i < livres.length; i++) {
if (livres[i] != null) {
sb.append(livres[i]);
}
else {
sb.append("null");
}
if (i != livres.length - 1) {
sb.append(", ");
}
}
return sb.append("]]").toString();
}

// toString plus simple en utilisant Arrays.toString :


// public String toString() {
// return "Etagere [nbLivres=" + nbLivres + ", livres=" +
Arrays.toString(livres) + "]";
// }

public static void main(String[] args) {


Livre l1 = new Livre("a1", "t1");
l1.setNbPages(200);
l1.setPrix(239.50);
Livre l2 = new Livre("a2", "t2");
l2.setNbPages(250);
l2.setPrix(140);
Livre l3 = new Livre("a3", "t3");
l1.setNbPages(300);
l1.setPrix(159.50);
Livre l4 = new Livre("a1", "t4");
Livre l5 = new Livre("a1", "t1");
Livre l6 = new Livre("a2", "t5");
Etagere etagere1 = new Etagere(2);
Etagere etagere2 = new Etagere(3);
etagere1.ajouter(l1);
etagere1.ajouter(l2);
etagere1.ajouter(l3);
etagere2.ajouter(l1);
etagere2.ajouter(l4);
etagere2.ajouter(l5);
System.out.println(etagere1);
System.out.println(etagere2);
// Recherche et suppression
String auteur = "a1", titre = "t1";
int position = etagere1.chercher(titre, auteur);
if (position != 0) {
System.out.println(etagere1.getLivre(position));
System.out.println("L'étagère avant d'avoir enlevé ce livre : \n"
+ etagere1);
Livre livreEnleve = etagere1.enlever(titre, auteur);
System.out.println("L'étagère après avoir enlevé ce livre : \n"
+ etagere1);
System.out.println("Pour vérification :\n"
+ "Le livre enlevé est :\n"
+ livreEnleve);
}
else {
System.out.println("Livre d'auteur " + auteur
+ " et de titre " + titre + " pas trouvé");
}
// Différentes recherches
Livre[] livresCherches = etagere2.chercherAuteur("a1");
System.out.println("Livres écrits par a1 :");
for (int i = 0; i < livresCherches.length; i++) {
System.out.println(livresCherches[i]);
}

livresCherches = etagere2.chercherAuteur("a10");
System.out.println("Livres écrits par a10 :");
for (int i = 0; i < livresCherches.length; i++) {
System.out.println(livresCherches[i]);
}
}
}

package fr.unice.toto.bibliotheque;
public class Livre {
// Variables
private String titre, auteur;
private int nbPages;
private double prix;

// Constructeurs
public Livre(String unAuteur, String unTitre) {
auteur = unAuteur;
titre = unTitre;
}

// Accesseur
public String getAuteur() {
return auteur;
}
public String getTitre() {
return titre;
}
public int getNbPages() {
return nbPages;
}

public double getPrix() {


return prix;
}

// Modificateur
public void setAuteur(String unAuteur) {
auteur = unAuteur;
}
public void setTitre(String unTitre) {
titre = unTitre;
}
public void setNbPages(int n) {
if (n > 0) {
nbPages = n;
}
else {
System.err.println("Erreur : nombre de pages négatif !");
}
}

public void setPrix(double unPrix) {


if (unPrix >= 0.0) {
prix = unPrix;
}
else {
System.err.println("Erreur : prix négatif !");
}
}

public String toString() {


return "Livre [titre=" + getTitre() + ",auteur="
+ getAuteur() + ",nbPages=" + getNbPages() + ",prix="
+ getPrix() + "]";
}

public static void main(String[] args) {


Livre l1 = new Livre("Victor Hugo", "Notre Dame de Paris");
l1.setNbPages(150);
l1.setPrix(80.0);
Livre l2 = new Livre("Emile Zola", "La bête humaine");
l2.setNbPages(170);
l2.setPrix(150.0);
System.out.print("Livre de " + l1.getAuteur());
System.out.println(" avec " + l1.getNbPages() + " pages.");
System.out.print("Livre de " + l2.getAuteur());
System.out.println(" avec " + l2.getNbPages() + " pages.");
System.out.println(l1);
System.out.println(l2);
}
}
import fr.unice.toto.bibliotheque.*;

public class Librairie {

public static void main(String[] args) {


Livre l1 = new Livre("a1", "t1");
l1.setNbPages(200);
l1.setPrix(239.50);
Livre l2 = new Livre("a2", "t2");
l2.setNbPages(250);
l2.setPrix(140);
Livre l3 = new Livre("a3", "t3");
l1.setNbPages(300);
l1.setPrix(159.50);
Livre l4 = new Livre("a1", "t4");
Livre l5 = new Livre("a1", "t1");
Livre l6 = new Livre("a2", "t5");
Etagere etagere1 = new Etagere(2);
Etagere etagere2 = new Etagere(3);
etagere1.ajouter(l1);
etagere1.ajouter(l2);
etagere1.ajouter(l3);
etagere2.ajouter(l1);
etagere2.ajouter(l4);
etagere2.ajouter(l5);
System.out.println(etagere1);
System.out.println(etagere2);
// Recherche et suppression
String auteur, titre;
if (args.length == 2) {
auteur = args[0];
titre = args[1];
}
else {
auteur = "a2";
titre = "t2";
}
int position = etagere1.cherche(titre, auteur);
if (position != 0) {
System.out.println("Livre d'auteur " + auteur
+ " et de titre " + titre + " trouvé"
+ " en position " + position + " sur l'étagère");
System.out.println("Vérification ; le livre est : " + "\n"
+ etagere1.getLivre(position));
System.out.println("L'étagère avant d'avoir enlevé ce livre : \n"
+ etagere1);
Livre livreEnleve = etagere1.enlever(titre, auteur);
System.out.println("L'étagère après avoir enlevé ce livre : \n"
+ etagere1);
System.out.println("Pour vérification :\n"
+ "Le livre enlevé est :\n"
+ livreEnleve);
}
else {
System.out.println("Livre d'auteur " + auteur
+ " et de titre " + titre + " pas trouvé");
}
}
}
public class Livre {
// Variables
private String titre, auteur;
private int nbPages;
private double prix = -1.0;
private boolean prixFixe = false;

// Constructeurs
public Livre(String unAuteur, String unTitre) {
this(unAuteur, unTitre, 0, 0.0);
}

public Livre(String unAuteur, String unTitre, int nbPages) {


this(unAuteur, unTitre, nbPages, 0.0);
}

public Livre(String unAuteur, String unTitre, int nbPages, double prix) {


auteur = unAuteur;
titre = unTitre;
// l'appel au modificateur est plus sûr
setNbPages(nbPages);
setPrix(prix);
}

// Accesseur
public String getAuteur() {
return auteur;
}

public String getTitre() {


return titre;
}

public int getNbPages() {


return nbPages;
}

public double getPrix() {


return prix;
}

// Dans le contexte de l'exercice, pas de méthode setPrixFixe


public boolean isPrixFixe() {
return prixFixe;
}

// Modificateur
public void setAuteur(String unAuteur) {
auteur = unAuteur;
}

public void setTitre(String unTitre) {


titre = unTitre;
}

public void setNbPages(int n) {


if (n > 0) {
nbPages = n;
}
else {
System.err.println("Erreur : nombre de pages négatif !");
}
}

public void setPrix(double unPrix) {


if (prixFixe) {
System.err.println("Prix fixé !");
}
else if (unPrix >= 0.0) {
prix = unPrix;
prixFixe = true;
}
else {
System.err.println("Erreur : prix négatif !");
}
}

public void afficheToi() {


System.out.print(toString());
}

public String toString() {


return
"Livre [titre=" + titre + ",auteur=" + auteur + ",nbPages="
+ nbPages + "prixFixe=" + prixFixe + ",prix=" + prix + "]";
}
}
public class TestLivre {
public static void main(String[] args) {
Livre l1 = new Livre("Victor Hugo", "Notre Dame de Paris", 150, 50.90);
Livre l2 = new Livre("Emile Zola", "La bête humaine");
l2.setNbPages(17);
l1.setPrix(60.0); // on essaie une augmentation !
System.out.println(l1);
l2.setPrix(30.0);
l2.afficheToi();
}
}
public class Livre {
// Variables
private String titre, auteur;
private int nbPages;
private double prix = -1.0;
// C'est plus lisible que de laisser l'initialisation par défaut
private boolean prixFixe = false;

public int compare(Livre l) {


// On a accès aux variables des autres livres
// (protection d'accès par classe et pas par objet en Java)
if (nbPages == l.nbPages) {
return 0;
}
else if (nbPages > l.nbPages) {
return +1;
}
else {
return -1;
}
}

// Constructeurs
public Livre(String auteur, String titre) {
this(auteur, titre, 0, 0.0);
}

public Livre(String auteur, String titre, int nbPages) {


this(auteur, titre, nbPages, 0.0);
}

public Livre(String auteur, String titre, int nbPages, double prix) {


this.auteur = auteur;
this.titre = titre;
setNbPages(nbPages);
setPrix(prix);
}

// Accesseur
public String getAuteur() {
return auteur;
}

public String getTitre() {


return titre;
}

public int getNbPages() {


return nbPages;
}

public double getPrix() {


return prix;
}

// Modificateur
public void setAuteur(String auteur) {
this.auteur = auteur;
}

public void setTitre(String titre) {


this.titre = titre;
}

public void setNbPages(int n) {


if (n >= 0) {
nbPages = n;
}
else {
System.err.println("Erreur : nombre de pages négatif !");
}
}

public void setPrix(double unPrix) {


if (prixFixe) {
System.err.println("Prix déjà fixé !");
}
else if (unPrix >= 0.0) {
prix = unPrix;
prixFixe = true;
}
else {
System.err.println("Erreur : prix négatif !");
}
}

public void afficheToi() {


System.out.print(toString());
}

public String toString() {


return
"Livre [titre=" + titre + ",auteur=" + auteur + ",nbPages="
+ nbPages + "prixFixe=" + prixFixe + ",prix=" + prix + "]";
}
}
public class TestLivre {
public static void main(String[] args) {
Livre l1 = new Livre("Victor Hugo", "Notre Dame de Paris", 150,
250.90);
Livre l2 = new Livre("Emile Zola", "La bête humaine");
l2.setNbPages(170);

System.out.print("L'auteur du plus gros livre est ");


String plusGros = "";
if (l1.compare(l2) == 0) {
plusGros = "Personne";
}
else if (l1.compare(l2) == 1) {
plusGros = l1.getAuteur();
}
else {
plusGros = l2.getAuteur();
}
System.out.println(plusGros);

// Version avec switch


switch(l1.compare(l2)) {
case 0 :
plusGros = "Personne";
break; // à ne pas oublier !!
case 1:
plusGros = l1.getAuteur();
break;
case -1:
plusGros = l2.getAuteur();
}
System.out.println(plusGros);
}
}
public class Livre {
// Variables
private String titre, auteur;
private int nbPages;
private double prix = -1.0;
// C'est plus lisible que de laisser l'initialisation par défaut
private boolean prixFixe = false;

// Constructeurs
public Livre(String unAuteur, String unTitre) {
auteur = unAuteur;
titre = unTitre;
}

public Livre(String unAuteur, String unTitre, int nbPages) {


auteur = unAuteur;
titre = unTitre;
// l'appel au modificateur est plus sûr
setNbPages(nbPages);
}

public Livre(String unAuteur, String unTitre, int nbPages, double prix) {


auteur = unAuteur;
titre = unTitre;
// l'appel au modificateur est plus sûr
setNbPages(nbPages);
setPrix(prix);
}

// Accesseur
public String getAuteur() {
return auteur;
}

public String getTitre() {


return titre;
}

public int getNbPages() {


return nbPages;
}

public double getPrix() {


return prix;
}

// Modificateur
public void setAuteur(String unAuteur) {
auteur = unAuteur;
}

public void setTitre(String unTitre) {


titre = unTitre;
}

public void setNbPages(int n) {


if (n > 0) {
nbPages = n;
}
else {
System.err.println("Erreur : nombre de pages négatif !");
}
}

public void setPrix(double unPrix) {


if (prixFixe) {
System.err.println("Prix déjà fixé !");
}
else if (unPrix >= 0.0) {
prix = unPrix;
prixFixe = true;
}
else {
System.err.println("Erreur : prix négatif !");
}
}

public void afficheToi() {


System.out.print(toString());
}

public String toString() {


return
"Livre [titre=" + titre + ",auteur=" + auteur + ",nbPages="
+ nbPages + "prixFixe=" + prixFixe + ",prix=" + prix + "]";
}

public int compare(Livre l) {


// On a accès aux variables des autres livres
// (protection d'accès par classe et pas par objet en Java)
if (nbPages == l.nbPages) {
return 0;
}
else if (nbPages > l.nbPages) {
return +1;
}
else {
return -1;
}
}

public static int compare2(Livre l1, Livre l2) {


// On a accès aux variables des autres livres
// (protection d'accès par classe et pas par objet en Java)
if (l1.nbPages == l2.nbPages) {
return 0;
}
else if (l1.nbPages > l2.nbPages) {
return +1;
}
else {
return -1;
}
}

public static void main(String[] args) {


Livre l1 = new Livre("Victor Hugo", "Notre Dame de Paris", 150,
250.90);
Livre l2 = new Livre("Emile Zola", "La bête humaine");
l2.setNbPages(170);
l1.setPrix(260.0); // on essaie une augmentation !
System.out.println(l1);
l2.setPrix(300.0);
l2.afficheToi();
System.out.println();

System.out.print("L'auteur du plus gros livre est ");


String plusGros = "";
switch(compare2(l1, l2)) {
case 0 :
plusGros = "Personne";
break;
case 1:
plusGros = l1.getAuteur();
break;
case -1:
plusGros = l2.getAuteur();
};
System.out.print(plusGros);
}
}

Vous aimerez peut-être aussi