TP-SI_POO2020-Corrigé – Maths BTS
Retour aux ressources
Corrigés

TP-SI_POO2020-Corrigé


MINISTERE DE L’ENSEIGNEMENT SUPERIEUR

MINISTRY OF HIGHER EDUCATION

COMMISSION NATIONALE D’ORGANISATION DE L’EXAMEN NATIONAL DU BREVET DE TECHNICIEN SUPERIEUR (BTS)

NATIONAL COMMISSION FOR THE ORGANIZATION OF BTS EXAM


Examen National Du Brevet De Technicien Supérieur - Session 2020


Epreuve: Travaux Pratiques – Systèmes Informatiques – Programme Orienté Objet

Spécialité: GL



BARÈME










Analyse et Base de données60 points
Programmation Orientée Objet40 points
TOTAL100 points


Introduction


Ce document présente une correction détaillée de l’épreuve de Travaux Pratiques de Systèmes Informatiques et Programmation Orientée Objet du Brevet de Technicien Supérieur, session 2020, spécialité GL. L’épreuve est composée de deux parties : analyse et base de données (60 points) et programmation orientée objet (40 points). Les réponses sont expliquées de manière pédagogique avec des extraits de code et des schémas.



1 Partie A : Cas pratique (60 points)



1.1 Section 1 : MERISE et modélisation (30 points)



1.1.1 1. Dictionnaire des données (5 points)

Le dictionnaire de données recense les données manipulées dans le système.



Dictionnaire des données





























Entité/RelationAttributTypeCommentaire
SoldatCodeSoldatEntierClé primaire, auto-incrément
SoldatNomSoldatChaîne (50)
SoldatPrenomSoldatChaîne (50)
SoldatDateNaissanceDate
SoldatDateDecesDatePeut être NULL
GradeCodeGradeEntierClé primaire, auto-incrément
GradeLibelleGradeChaîne (30)(Ex: Caporal, Sergent, …)
UniteCodeUniteEntierClé primaire, auto-incrément
UniteNomUniteChaîne (50)(Ex: 1ère Armée, 2ème Régiment, …)
BatailleCodeBatailleEntierClé primaire, auto-incrément
BatailleLieuChaîne (100)
BatailleDateDebutDate
BatailleDateFinDate
BlessureCodeBlessureEntierClé primaire, auto-incrément
BlessureTypeBlessureChaîne (100)(Ex: Balle, Éclat d’obus, …)
BlessureDateBlessureDate
BlessureCodeSoldatEntierClé étrangère vers Soldat
BlessureCodeBatailleEntierClé étrangère vers Bataille
SoldatGradeCodeSoldatEntierClé étrangère vers Soldat
SoldatGradeCodeGradeEntierClé étrangère vers Grade
SoldatGradeDateObtentionDate
AffectationCodeSoldatEntierClé étrangère vers Soldat
AffectationCodeUniteEntierClé étrangère vers Unite
AffectationDateAffectationDate


1.1.2 2. Modèle Conceptuel des Données (MCD) (8 points)

Le MCD représente les entités et les associations entre elles.



  • Entité Soldat : CodeSoldat (identifiant), NomSoldat, PrenomSoldat, DateNaissance, DateDeces.

  • Entité Grade : CodeGrade (identifiant), LibelleGrade.

  • Entité Unite : CodeUnite (identifiant), NomUnite.

  • Entité Bataille : CodeBataille (identifiant), Lieu, DateDebut, DateFin.

  • Entité Blessure : CodeBlessure (identifiant), TypeBlessure, DateBlessure.

  • Association OBTENIR (entre Soldat et Grade) : relation n,n. Attribut : DateObtention.

  • Association ÊTRE AFFECTÉ (entre Soldat et Unite) : relation n,n. Attribut : DateAffectation.

  • Association SUBIR (entre Soldat et Blessure) : relation 1,n. La blessure a un code soldat.

  • Association AVOIR LIEU (entre Blessure et Bataille) : relation 1,n. La blessure a un code bataille.


Représentation textuelle :



Soldat (CodeSoldat, NomSoldat, PrenomSoldat, DateNaissance, DateDeces)
Grade (CodeGrade, LibelleGrade)
Unite (CodeUnite, NomUnite)
Bataille (CodeBataille, Lieu, DateDebut, DateFin)
Blessure (CodeBlessure, TypeBlessure, DateBlessure, #CodeSoldat, #CodeBataille)
SoldatGrade (#CodeSoldat, #CodeGrade, DateObtention)
Affectation (#CodeSoldat, #CodeUnite, DateAffectation)


1.1.3 3. Utilisation de PowerAMC ou WinDesign pour dessiner le MCD (10 points)

Dans PowerAMC ou WinDesign, créer les entités avec leurs attributs et les associations comme décrit ci-dessus. Les associations n,n deviendront des entités-associations (ou des tables de liaison). Le diagramme doit être clair et lisible.



1.1.4 4. Schéma relationnel (MLDR) (7 points)

Le MLDR dérive du MCD en appliquant les règles de passage. Tables :



-- Table Soldat
CREATE TABLE Soldat (
CodeSoldat INT PRIMARY KEY AUTO_INCREMENT,
NomSoldat VARCHAR(50) NOT NULL,
PrenomSoldat VARCHAR(50) NOT NULL,
DateNaissance DATE NOT NULL,
DateDeces DATE
);

-- Table Grade
CREATE TABLE Grade (
CodeGrade INT PRIMARY KEY AUTO_INCREMENT,
LibelleGrade VARCHAR(30) NOT NULL
);

-- Table Unite
CREATE TABLE Unite (
CodeUnite INT PRIMARY KEY AUTO_INCREMENT,
NomUnite VARCHAR(50) NOT NULL
);

-- Table Bataille
CREATE TABLE Bataille (
CodeBataille INT PRIMARY KEY AUTO_INCREMENT,
Lieu VARCHAR(100) NOT NULL,
DateDebut DATE NOT NULL,
DateFin DATE NOT NULL
);

-- Table Blessure
CREATE TABLE Blessure (
CodeBlessure INT PRIMARY KEY AUTO_INCREMENT,
TypeBlessure VARCHAR(100) NOT NULL,
DateBlessure DATE NOT NULL,
CodeSoldat INT,
CodeBataille INT,
FOREIGN KEY (CodeSoldat) REFERENCES Soldat(CodeSoldat),
FOREIGN KEY (CodeBataille) REFERENCES Bataille(CodeBataille)
);

-- Table SoldatGrade (liaison)
CREATE TABLE SoldatGrade (
CodeSoldat INT,
CodeGrade INT,
DateObtention DATE,
PRIMARY KEY (CodeSoldat, CodeGrade, DateObtention),
FOREIGN KEY (CodeSoldat) REFERENCES Soldat(CodeSoldat),
FOREIGN KEY (CodeGrade) REFERENCES Grade(CodeGrade)
);

-- Table Affectation (liaison)
CREATE TABLE Affectation (
CodeSoldat INT,
CodeUnite INT,
DateAffectation DATE,
PRIMARY KEY (CodeSoldat, CodeUnite, DateAffectation),
FOREIGN KEY (CodeSoldat) REFERENCES Soldat(CodeSoldat),
FOREIGN KEY (CodeUnite) REFERENCES Unite(CodeUnite)
);


1.2 Section 2 : Manipulation des bases de données (30 points)



1.2.1 1. Création de la base de données avec MySQL (15 points)

Le code SQL de création des tables est celui donné ci-dessus. On ajoute la création de la base :



CREATE DATABASE IF NOT EXISTS guerre_1914;
USE guerre_1914;
-- puis les instructions CREATE TABLE précédentes


1.2.2 2. Requêtes SQL (15 points)

(a) La liste des soldats et leurs grades. (6 points)



SELECT s.NomSoldat, s.PrenomSoldat, g.LibelleGrade, sg.DateObtention
FROM Soldat s
INNER JOIN SoldatGrade sg ON s.CodeSoldat = sg.CodeSoldat
INNER JOIN Grade g ON sg.CodeGrade = g.CodeGrade
ORDER BY s.NomSoldat, sg.DateObtention;


(b) Le nombre de soldats par unité de rattachement. (4 points)



SELECT u.NomUnite, COUNT(DISTINCT a.CodeSoldat) AS NombreSoldats
FROM Unite u
LEFT JOIN Affectation a ON u.CodeUnite = a.CodeUnite
GROUP BY u.CodeUnite, u.NomUnite;


(c) La liste des soldats (nom et prénom) ayant reçu des blessures, préciser la date de la blessure et la bataille où elle a été infligée. (5 points)



SELECT s.NomSoldat, s.PrenomSoldat, b.TypeBlessure, b.DateBlessure, ba.Lieu
FROM Soldat s
INNER JOIN Blessure b ON s.CodeSoldat = b.CodeSoldat
INNER JOIN Bataille ba ON b.CodeBataille = ba.CodeBataille
ORDER BY s.NomSoldat, b.DateBlessure;


2 Partie B : Programmation Orientée Objet (40 points)



2.1 Diagramme de classes (5 points)


Le diagramme de classes reprend les entités du MCD en les transformant en classes, avec les associations traduites en attributs de type liste ou en classes de liaison.



  • Classe Soldat : attributs (codeSoldat, nomSoldat, prenomSoldat, dateNaissance, dateDeces) ; méthodes constructeurs, getters/setters.

  • Classe Grade : attributs (codeGrade, libelleGrade) ; méthodes.

  • Classe Unite : attributs (codeUnite, nomUnite) ; méthodes.

  • Classe Bataille : attributs (codeBataille, lieu, dateDebut, dateFin) ; méthodes.

  • Classe Blessure : attributs (codeBlessure, typeBlessure, dateBlessure, soldat, bataille) ; méthodes.

  • Classe SoldatGrade (liaison) : attributs (soldat, grade, dateObtention) ; méthodes.

  • Classe Affectation (liaison) : attributs (soldat, unite, dateAffectation) ; méthodes.



2.2 Conception des interfaces avec Netbeans ou Visual Studio (40 points)



2.2.1 (a) Interface pour l’enregistrement des soldats (8 points)

Cette interface permet d’ajouter un nouveau soldat.

Éléments :



  • Champs de saisie : nom, prénom, date de naissance (sélecteur), date de décès (optionnelle).

  • Bouton ‘Enregistrer’ qui insère le soldat dans la base.

  • Validation : nom et prénom obligatoires, date de naissance antérieure à aujourd’hui, date de décès postérieure à la naissance si renseignée.



2.2.2 (b) Interface pour l’enregistrement des unités d’affectation (7,5 points)

Cette interface permet d’ajouter une nouvelle unité.

Éléments :



  • Champ de saisie : nom de l’unité.

  • Bouton ‘Enregistrer’ qui insère l’unité dans la base.

  • Validation : nom obligatoire.



2.2.3 (c) Interface pour l’enregistrement des soldats dans leurs unités d’affectation (7 points)

Cette interface permet d’affecter un soldat à une unité à une date donnée.

Éléments :



  • Liste déroulante pour sélectionner un soldat (chargée depuis Soldat).

  • Liste déroulante pour sélectionner une unité (chargée depuis Unite).

  • Sélecteur de date pour la date d’affectation.

  • Bouton ‘Enregistrer’ qui insère l’affectation dans la table Affectation.

  • Validation : soldat, unité et date obligatoires.



2.2.4 (d) Interface pour afficher les soldats et leurs unités d’affectation (7,5 points)

Cette interface affiche la liste des soldats avec leurs unités d’affectation.

Éléments :



  • Tableau avec colonnes : Nom, Prénom, Unité, Date d’affectation.

  • Bouton ‘Rafraîchir’ pour mettre à jour la liste.

  • Optionnel : filtres par soldat ou par unité.



2.3 Exemple de code Java pour la connexion à la base



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnexionBD {
private static Connection conn = null;

public static Connection getConnection() {
if (conn == null) {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/guerre_1914";
String user = "root";
String password = "";
conn = DriverManager.getConnection(url, user, password);
System.out.println("Connexion établie");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
return conn;
}

public static void closeConnection() {
if (conn != null) {
try {
conn.close();
System.out.println("Connexion fermée");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}


2.4 Exemple de classe Soldat en Java



import java.util.Date;

public class Soldat {
private int codeSoldat;
private String nomSoldat;
private String prenomSoldat;
private Date dateNaissance;
private Date dateDeces;

public Soldat() {}

public Soldat(String nomSoldat, String prenomSoldat, Date dateNaissance) {
this.nomSoldat = nomSoldat;
this.prenomSoldat = prenomSoldat;
this.dateNaissance = dateNaissance;
}

// Getters et setters
public int getCodeSoldat() { return codeSoldat; }
public void setCodeSoldat(int codeSoldat) { this.codeSoldat = codeSoldat; }
public String getNomSoldat() { return nomSoldat; }
public void setNomSoldat(String nomSoldat) { this.nomSoldat = nomSoldat; }
public String getPrenomSoldat() { return prenomSoldat; }
public void setPrenomSoldat(String prenomSoldat) { this.prenomSoldat = prenomSoldat; }
public Date getDateNaissance() { return dateNaissance; }
public void setDateNaissance(Date dateNaissance) { this.dateNaissance = dateNaissance; }
public Date getDateDeces() { return dateDeces; }
public void setDateDeces(Date dateDeces) { this.dateDeces = dateDeces; }
}


Conclusion


Cette correction détaille les étapes de modélisation, de création de base de données et de programmation orientée objet pour le TP. Les candidats doivent veiller à la cohérence entre les différents modèles et à la robustesse du code (gestion des erreurs, validation des saisies, etc.). Les interfaces graphiques doivent être fonctionnelles et ergonomiques.






Résumé du document



Ce document est le corrigé de l’épreuve de Travaux Pratiques (Systèmes Informatiques et Programmation Orientée Objet) du BTS GL (session 2020). Il comporte deux grandes parties.



La Partie A (60 points) traite de l’analyse et de la base de données. Elle commence par un dictionnaire des données pour un historien étudiant les soldats de la Première Guerre mondiale. Le modèle conceptuel des données (MCD) est décrit avec les entités Soldat, Grade, Unite, Bataille, Blessure et les associations (n,n) via des tables de liaison. Le schéma relationnel (MLDR) est donné en SQL, ainsi que les scripts de création de la base MySQL et trois requêtes SQL : liste des soldats et grades, nombre de soldats par unité, et liste des blessures avec bataille.



La Partie B (40 points) est consacrée à la programmation orientée objet. On y trouve un diagramme de classes, la conception de quatre interfaces graphiques (enregistrement des soldats, des unités, des affectations, affichage des soldats avec leurs unités), ainsi que des exemples de code Java pour la connexion JDBC et la classe Soldat.



Le corrigé fournit des extraits de code SQL et Java, et des remarques sur l’ergonomie et la robustesse.


Pour plus de détails, consulter le PDF ci-joint.
Discuter sur le forum
Lien copié !