Une entreprise utilise des codes produit normalisés. Avant d’enregistrer un produit, il faut vérifier que son code respecte plusieurs règles métier précises. Ce TP permet de manipuler les chaînes de caractères, les conditions, les sous-chaînes, les conversions et la gestion d’erreur.
ValidationCodeProduit
Le programme doit analyser plusieurs codes produit et indiquer s’ils sont valides ou non.
Chaque code doit respecter le modèle :
avec :
PRD- : préfixe obligatoire
AAAA : année comprise entre 2020 et 2030
C : catégorie autorisée parmi A, B, C
XXX : numéro séquentiel
Créer un tableau de chaînes contenant plusieurs codes :
Pour faciliter le test de votre code, voici un tableau avec toutes les combinaisons possibles :
String[] codesTest = { "PRD-2024-A123", // VALIDE "PRD-2024-B456", // VALIDE "PRD-2024-C789", // VALIDE "PRD-2019-A123", // INVALIDE (année < 2020) "PRD-2031-A123", // INVALIDE (année > 2030) "PRD-2024-D123", // INVALIDE (catégorie D) "PROD-2024-A123", // INVALIDE (mauvais préfixe) "PRD-2024-A12", // INVALIDE (trop court) "PRD-2024-A12345", // VALIDE (plus long OK) "PRD-2024", // INVALIDE (trop court) "ABC-2024-A123" // INVALIDE (mauvais préfixe) };
Pour chaque code, vérifier les règles dans l’ordre. Dès qu’une règle échoue : le code est considéré invalide et un message d’erreur explicite doit être affiché. Par conséquent, si un code échoue, il n’est pas nécessaire d’effectuer les vérifications qui suivent.
Le code doit contenir entre 10 et 20 caractères.
Le code doit commencer par PRD-.
PRD-
L’année doit être extraite du code puis convertie en entier. Elle doit être numérique et comprise entre 2020 et 2030
La catégorie doit être l’un des caractères suivants : A, B ou C
A
B
C
Pour chaque code valide, afficher :
Utiliser un switch case pour afficher :
si A alors “Standard”
si B alors “Premium”
si C alros “Luxe”
À la fin du programme, afficher :
Créer une génération simple à partir :
substring()
startsWith()
charAt()
try/catch
Pour extraire l’année : String anneeStr = code.substring(4, 8);
String anneeStr = code.substring(4, 8);
Pour convertir en entier : int annee = Integer.parseInt(anneeString);
int annee = Integer.parseInt(anneeString);
Pour la conversion de l’année en entier, le plus simple est la méthode ci-dessus qui nécessite toutefois la gestion d’une exception que nous n’avons pas encore abordée (semaine 2). Donc voici le bout de code pour tester l’année en la transformant :
if (estValide && codeProduit.length() >= 8) { try { String anneeString = codeProduit.substring(4, 8); int annee = Integer.parseInt(anneeString); //int annee = (int) anneeString; // cette écriture est impossible ! if (annee < 2020 || annee > 2030) { estValide = false; messageErreur = "Année invalide (" + annee + ", attendu 2020-2030)"; } } catch (NumberFormatException e) { estValide = false; messageErreur = "Année non numérique"; } }
Apparemment, l’IDE et Java ne vous demande pas d’ajouter le try/catch et du coup, les années qui contiendront autre chose que des chiffres généreront une interruption. Il toujours préférable de gérer les Exceptions pour éviter une interuption de programme !
Pour récupérer la catégorie : char categorie = code.charAt(9);
char categorie = code.charAt(9);
estCodeValide(String code)