Rattrapage 2013

Vous aimerez peut-être aussi

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

L3 SPI- Documents non autorisés

2 juillet 2013

Examen de Rattrapage
Programmation orientée objet sous Java

3 heures
Mohand-Yazid SAIDI

Rappels et conseils
– Documents non autorisés. Seuls les supports de cours et de TP sont autorisés.
– Il est strictement interdit d’utiliser vos téléphones portables. Éteignez-les et mettez-les loin (les por-
tables ne doivent pas être visibles, ni à portée de main). Toute personne manipulant son portable se
verra exclure de l’examen.
– Répondez aux questions d’une manière claire et concise.
– Soignez le code.

Cet examen comporte deux parties : (1) partie sur les classes et l’héritage et (2) partie sur les interfaces
graphiques (GUI).
Bien que les deux parties de cet examen soient indépendantes, il vous sera possible d’utiliser les classes
de la première partie dans la seconde et vice-versa.

Classes et héritage (11 points)


Nous disposons d’une interface java Article permettant de décrire des articles à vendre dans un magasin.
Chaque article possède deux propriétés : (1) son prix hors taxes et (2) sa catégorie (cosmétique, alimentaire,
etc.) qui permet de déterminer le taux de TVA qui devrait lui être appliqué. Ainsi, l’interface Article
déclare les deux méthodes double getPrixHT () et double getTauxTVA () qui permettant de retourner
les deux propriétés décrites ci-dessus.

Question 1 (6 points) Écrire une classe abstraite Produit implémentant l’interface Article (voir la fi-
gure 1). Cette classe doit définir :
1. Deux champs privés : denommination de type String et prixHT (correspondant au prix du produit
hors taxes) de type double.
2. Un constructeur public permettant d’initialiser les deux champs de la classe avec les valeurs de ses
deux paramètres.
3. double getPrixHT () déclarée dans l’interface implémentée Article. Cette méthode doit retourner
la valeur du champs prixHT. La méthode double getTauxTVA () ne sera pas implémentée dans la
classe Produit.

Documents non autorisés 1 Examen de Rattrapage


L3 SPI 2 juillet 2013

Figure 1 – Interface Article et classe Produit.

4. Un modificateur du champs prixHT.


5. Une méthode publique double getTVA () permettant de retourner le montant de la TVA associé au
produit. Ce montant est égal au prix hors taxes du produit multiplié par le taux de TVA associé au
produit (c’est à dire, égal à produit.prixHT × produit.getTauxTVA()).
6. Une méthode publique double getPrixTTC () retournant le prix TTC (toutes taxes comprises) du
produit. Le calcul de prix TTC est déterminé par la somme du prix hors taxes et le montant de la TVA
correspondant (produit.getPrixTTC () = produit.prixHT + produit.getTVA ()).
7. La méthode toString () (méthode de la classe Object). Cette méthode doit afficher les informations

Documents non autorisés 2 Examen de Rattrapage


L3 SPI 2 juillet 2013

Figure 2 – Classes ProduitCosmetique et ProduitAlimentaire.

concernant la denommination du produit, son prixHT (prix hors taxes), le taux de TVA qui lui est
appliqué, la partie TVA du prix total et le prix TTC. Ci-après un exemple d’affichage concernant un
produit Oranges dont le prix hors taxes est égal à 2 euro et dont le taux de TVA est de 0.055.
Produit Oranges [prixHT = 2.0, prixTTC = 2.11 dont TVA (0.055) = 0.11]

Question 2 (4 points) Définir deux sous-classes ProduitCosmetique et ProduitAlimentaire à la classe


abstraite Produit (remplir le code de la figure 2). La première classe ProduitCosmetique modélisera les
produits cosmétiques dont le taux de TVA est égal à 0.196. Par conséquent, vous inclurez dans la classe
ProduitCosmetique un constructeur à deux paramètres permettant d’initialiser les deux champs de la classe
mère et vous définirez la méthode double getTauxTVA () qui retournera 0.196. De même, vous inclurez
dans la classe ProduitAlimentaire un constructeur à deux paramètres permettant d’initialiser les deux
champs de la classe mère et vous définirez la méthode double getTauxTVA () qui retournera 0.055.

Question 3 (1 point) Qu’affiche le programme de test illustré sur la figure 3 ?

Interface Graphique (9 points)


Le but de cet exercice est de réaliser une interface graphique (voir figure 4) permettant de calculer le
prix TTC (toutes taxes comprises) d’un produit à partir de son prix HT (hors taxes) et de son type. Comme
pour la première partie de cet examen, il existe deux types de produits : produit cosmétique dont le taux de
TVA est égal à 0.196 et produit alimentaire dont le taux de TVA est égal à 0.055. Afin de vous aider dans
votre développement, du code est fourni en figure 5.
Votre interface graphique sera définie par une fenêtre (classe Fenetre de la figure 5) dont la taille est
égale à 400 × 200 et dont le titre est Calcul de la TVA. Cette fenêtre est constituée de trois panneaux :

Documents non autorisés 3 Examen de Rattrapage


L3 SPI 2 juillet 2013

Figure 3 – Test des classes ProduitCosmetique et ProduitAlimentaire.

1. panneau [0] situé en haut de la fenêtre et contenant une étiquette (JLabel jLabelPrixHT) et un
champs de saisie JTextField jTextPrixHT de 8 colonnes. L’étiquette jTextPrixHT affichera le texte
suivant : Prix Hors Taxes.
2. panneau [1] situé au milieu de la fenêtre et contenant deux boutons radio : le premier bouton
tauxTVARadio [0] affichera le texte suivant : Produit Cosmétique, le second bouton tauxTVARadio [1]
affichera le texte suivant : Produit Alimentaire. Évidemment, les deux boutons radio ne doivent ja-
mais être cochés tous les deux (ils doivent donc être ajoutés à un groupe de boutons java ButtonGroup).
A la création, seul le deuxième bouton radio est coché.
3. panneau [2] situé en bas de la fenêtre et contenant un bouton JButton calculprixTTC intitulé
Calcul prix TTC et un champs de saisie JTextField jTextPrixTTC de 8 colonnes. Le champs de
saisie jTextPrixTTC sert à afficher le prix TTC d’un produit dont le prix HT est déterminé par le
champs de saisie jTextPrixHT et dont le type (ou taux de TVA) est déterminé par les boutons radio
tauxTVARadio [0] et tauxTVARadio [1]. Le champs de saisie jTextPrixTTC ne doit pas être éditable.

Question 4 (5 points) Complétez le code de la classe Fenetre afin d’obtenir l’affichage illustré sur la
figure 4.

Question 5 (1.5 points) Nous voulons traiter les événements associés au bouton calculprixTTC dans la
classe Fenetre. Quelle(s) interface(s) la classe Fenetre doit-elle implémenter ?

Figure 4 – Interface graphique Calcul de la TVA.

Documents non autorisés 4 Examen de Rattrapage


L3 SPI 2 juillet 2013

Question 6 (2.5 points) Implementez la méthode public void actionPerformed(ActionEvent actionEv)


dans la classe Fenetre de telle sorte que l’action sur le bouton calculprixTTC provoque le calcul et l’affi-
chage dans le champs de saisie jTextPrixTTC du prix TTC d’un produit dont le prix HT est donné par le
champs de saisie jTextPrixHT et dont le type (ou taux de TVA) est déterminé par les boutons radio (si
tauxTVARadio [0] coché alors produit cosmétique (TVA=0.196) sinon produit alimentaire (Taux
TVA = 0.055)).
Comme pour la première partie de l’examen, le calcul du prix TTC correspond au produit du prix HT et
du taux de la TVA plus 1 (vous pourrez, si vous le voulez, utiliser les méthodes de la classe Produit pour
calculer le prix TTC ou sinon multiplier directement la valeur du champs de saisie par le taux de TVA +1).
Attention : les valeurs des champs de saisie jTextPrixHT sont de type String. Elles doivent donc être
transformées en type double pour réaliser les multiplications réelles. Pour ce faire, vous pourrez utiliser la
classe Double qui fournit la methode statique suivante : double Double.valueOf(String valeurDouble).
De même, pour afficher une valeur réelle dans un champs de saisie, il faut la transformer en String en
utilisant la méthode toString() de la classe Double (par exemple, (new Double (12.4)).toString()).

Documents non autorisés 5 Examen de Rattrapage


L3 SPI 2 juillet 2013

class Fenetre extends JFrame ... {


JPanel[] panneau = new JPanel [3] ;
JTextField jTextPrixHT, jTextPrixTTC ;
JRadioButton [] tauxTVARadio = new JRadioButton [2];
JButton calculprixTTC ;

public Fenetre () {
setTitle ... ; setBounds ...
panneau = new JPanel [3] ;
for (int i=0; i < panneau.length ; ++i) panneau[i] = new JPanel () ;
Container c = getContentPane() ;
c.add(panneau[0] ... ); c.add(panneau[1]... );
c.add(panneau[2]... );

JLabel jLabelPrixHT = new ... ;


panneau[0].add(jLabelPrixHT) ;
jTextPrixHT = new ... ; panneau[0].add...

ButtonGroup groupe = new ... ;


tauxTVARadio [0] = new JRadioButton ... ;
tauxTVARadio [1] = new JRadioButton ... ;

groupe.add ... ; panneau[1].add... ;


groupe.add... ; panneau[1].add... ;

calculprixTTC = new JButton... ;


calculprixTTC.addActionListener(this) ;
panneau[2].add...
jTextPrixTTC = new JTextField(8) ;
jTextPrixTTC.setEditable(...) ; panneau[2].add.... ;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
this.setVisible(true) ;
}

public void actionPerformed(ActionEvent actionEv) {


Object source = actionEv.getSource() ;
if (source == ...) { // si action sur le bouton "calculprixTTC"
double prixHT = Double.valueOf(...) ;
double prixTTC = 0. ;
if (tauxTVARadio[0].isSelected())
prixTTC = ... //calculez
else prixTTC = ... //calculez
jTextPrixTTC.setText ( (new Double (prixTTC)). toString() ) ;
}
}
}

Figure 5 – Code de l’interface graphique (à compléter).

Documents non autorisés 6 Examen de Rattrapage

Vous aimerez peut-être aussi