From 947e867e8e8cf392719ad3ff8b2a20b1d4b61b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CKhaoula?= <“khaoula.arouissi@imt-atlantique.net”> Date: Tue, 22 Oct 2024 18:12:46 +0200 Subject: [PATCH] =?UTF-8?q?Petri=20Net=20corrig=C3=A9=20sans=20Test=20Main?= =?UTF-8?q?,=20sans=20Arcs=20videurs=20...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/checkstyle-idea.xml | 15 +++ .idea/misc.xml | 2 +- src/main/java/org/petriNet/Arc.java | 43 ++++---- src/main/java/org/petriNet/Arc_ENTRANT.java | 44 ++++++++- src/main/java/org/petriNet/Arc_SORTANT.java | 16 ++- .../java/org/petriNet/Arc_sortant_simple.java | 4 + src/main/java/org/petriNet/Arc_videur.java | 6 ++ src/main/java/org/petriNet/Arc_zero.java | 4 + .../java/org/petriNet/PetriNetService.java | 3 +- src/main/java/org/petriNet/Place.java | 8 +- src/main/java/org/petriNet/ReseauPerti.java | 99 ++++++++++++++++--- src/main/java/org/petriNet/Transition.java | 76 +++++++++----- 12 files changed, 254 insertions(+), 66 deletions(-) create mode 100644 .idea/checkstyle-idea.xml create mode 100644 src/main/java/org/petriNet/Arc_sortant_simple.java create mode 100644 src/main/java/org/petriNet/Arc_videur.java create mode 100644 src/main/java/org/petriNet/Arc_zero.java diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..0389c40 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="CheckStyle-IDEA" serialisationVersion="2"> + <checkstyleVersion>10.18.1</checkstyleVersion> + <scanScope>JavaOnly</scanScope> + <option name="thirdPartyClasspath" /> + <option name="activeLocationIds" /> + <option name="locations"> + <list> + <ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation> + <ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation> + </list> + </option> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ca0df7f..699a522 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,5 +11,5 @@ <component name="PDMPlugin"> <option name="skipTestSources" value="false" /> </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK" /> + <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" /> </project> \ No newline at end of file diff --git a/src/main/java/org/petriNet/Arc.java b/src/main/java/org/petriNet/Arc.java index d0c94fc..c9d30fa 100644 --- a/src/main/java/org/petriNet/Arc.java +++ b/src/main/java/org/petriNet/Arc.java @@ -1,29 +1,36 @@ package org.petriNet; -public class Arc { - protected int poid; - protected int id; - - public Arc(int poid,int id) { - this.poid = poid; +public abstract class Arc { + private int id; + private Place place; + private Transition transition; + private int poids; + + public Arc(Place place, Transition transition, int poids, int id) { + this.place = place; + this.transition = transition; + this.poids = poids; this.id = id; } - public void modifier_poid(int nouveauPoid) { - this.poid = nouveauPoid; - } - public boolean valider() { - return true; - } + public abstract void modifierPoids(int poids); - public int getPoid() { - return poid; - } + public abstract void valider(); - public void setPoid(int poid) { - this.poid = poid; - } + public abstract int getPoids() ; + + public abstract int getId(); + + public abstract void setId(int id); + + public abstract void setPoid(int poids); + + public abstract Place getPlace(); + + public abstract void setPlace(Place place); + + public abstract Transition getTransition(); } diff --git a/src/main/java/org/petriNet/Arc_ENTRANT.java b/src/main/java/org/petriNet/Arc_ENTRANT.java index ced769a..9d01607 100644 --- a/src/main/java/org/petriNet/Arc_ENTRANT.java +++ b/src/main/java/org/petriNet/Arc_ENTRANT.java @@ -2,6 +2,10 @@ package org.petriNet; public class Arc_ENTRANT extends Arc { + private Place place; + private Transition transition; + private int poids; + public Arc_ENTRANT(Place place, Transition transition, int poids) { super(place, transition, poids); } @@ -19,13 +23,49 @@ public class Arc_ENTRANT extends Arc { public void enleverJetons() { // On retire le nombre de jetons du poids de l'arc - this.place.enleverJetons(this.poids); + this.place.enlever_jeton(this.poids); + } + + public boolean verifier_tirable() { + if (this.place.get_nombre_jetons() >= this.poids) { + return true; + } + return false; } + @Override public void valider() { // On retire le nombre de jetons du poids de l'arc - this.place.enleverJetons(this.poids); + // prendre en cond la place choisie + this.place.enlever_jeton(this.poids); + } + + + + @Override + public int getPoids() { + return 0; + } + + @Override + public void setPoid(int poids) { + + } + + @Override + public Place getPlace() { + return null; + } + + @Override + public void setPlace(Place place) { + + } + + @Override + public Transition getTransition() { + return null; } } \ No newline at end of file diff --git a/src/main/java/org/petriNet/Arc_SORTANT.java b/src/main/java/org/petriNet/Arc_SORTANT.java index 4ce9113..f3bc1a7 100644 --- a/src/main/java/org/petriNet/Arc_SORTANT.java +++ b/src/main/java/org/petriNet/Arc_SORTANT.java @@ -1,8 +1,14 @@ package org.petriNet; public abstract class Arc_SORTANT extends Arc { - public Arc_SORTANT(Place place, Transition transition, int poids) { - super(place, transition, poids); + + private Place place; + private Transition transition; + private int poids; + private int id; + + public Arc_SORTANT(Place place, Transition transition, int poids, int id) { + super(place, transition, poids, id); } @Override @@ -10,10 +16,12 @@ public abstract class Arc_SORTANT extends Arc { this.poids = poids; } + + @Override public void valider() { // On ajoute le nombre de jetons du poids de l'arc - this.place.ajouterJetons(this.poids); + this.place.ajouter_jeton(this.poids); } /** @@ -25,7 +33,7 @@ public abstract class Arc_SORTANT extends Arc { public void ajouterJetons() { // On ajoute le nombre de jetons du poids de l'arc - this.place.ajouterJetons(this.poids); + this.place.ajouter_jeton(this.poids); } diff --git a/src/main/java/org/petriNet/Arc_sortant_simple.java b/src/main/java/org/petriNet/Arc_sortant_simple.java new file mode 100644 index 0000000..8b3d25b --- /dev/null +++ b/src/main/java/org/petriNet/Arc_sortant_simple.java @@ -0,0 +1,4 @@ +package org.petriNet; + +public class Arc_sortant_simple { +} diff --git a/src/main/java/org/petriNet/Arc_videur.java b/src/main/java/org/petriNet/Arc_videur.java new file mode 100644 index 0000000..6d07e27 --- /dev/null +++ b/src/main/java/org/petriNet/Arc_videur.java @@ -0,0 +1,6 @@ +package org.petriNet; + +public class Arc_videur { + + +} diff --git a/src/main/java/org/petriNet/Arc_zero.java b/src/main/java/org/petriNet/Arc_zero.java new file mode 100644 index 0000000..1f4d875 --- /dev/null +++ b/src/main/java/org/petriNet/Arc_zero.java @@ -0,0 +1,4 @@ +package org.petriNet; + +public class Arc_zero { +} diff --git a/src/main/java/org/petriNet/PetriNetService.java b/src/main/java/org/petriNet/PetriNetService.java index 223e536..95d8001 100644 --- a/src/main/java/org/petriNet/PetriNetService.java +++ b/src/main/java/org/petriNet/PetriNetService.java @@ -8,8 +8,6 @@ public interface PetriNetService { public void ajouterArc(Arc arc); - public void tirerTransition(Transition transition); - public void afficherEtat(); /** @@ -19,4 +17,5 @@ public interface PetriNetService { */ public void afficherReseau(); + public void tirer_transition(String id); } diff --git a/src/main/java/org/petriNet/Place.java b/src/main/java/org/petriNet/Place.java index 91b0559..0dd674b 100644 --- a/src/main/java/org/petriNet/Place.java +++ b/src/main/java/org/petriNet/Place.java @@ -9,13 +9,13 @@ public class Place { this.nombre_jeton = nombre_jeton; } - public void ajouter_jeton() { - this.nombre_jeton++; + public void ajouter_jeton(int jetons) { + this.nombre_jeton += jetons; } - public void enlever_jeton() { + public void enlever_jeton(int jetons) { if (this.nombre_jeton > 0) { - this.nombre_jeton--; + this.nombre_jeton -= jetons; } else { System.out.println("No more tokens to remove."); } diff --git a/src/main/java/org/petriNet/ReseauPerti.java b/src/main/java/org/petriNet/ReseauPerti.java index a68d7c9..6fc48a8 100644 --- a/src/main/java/org/petriNet/ReseauPerti.java +++ b/src/main/java/org/petriNet/ReseauPerti.java @@ -1,5 +1,9 @@ package org.petriNet; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + public class ReseauPerti implements PetriNetService { // Creat attributes as Lists of Places, Transitions and Arcs @@ -7,15 +11,40 @@ public class ReseauPerti implements PetriNetService { private List<Place> places; private List<Transition> transitions; private List<Arc> arcs; + private String etat_reseau = "Pas de transition tirée"; // Create a constructor public ReseauPerti() { // initialiser les listes vide - this.places = new ArrayList<Place>(); - this.transitions = new ArrayList<Transition>(); - this.arcs = new ArrayList<Arc>(); + this.places = new ArrayList<>(); + this.transitions = new ArrayList<>(); + this.arcs = new ArrayList<>(); + } + + // Create getters and setters + public List<Place> getPlaces() { + return places; } + public void setPlaces(List<Place> places) { + this.places = places; + } + + public List<Transition> getTransitions() { + return transitions; + } + + public void setTransitions(List<Transition> transitions) { + this.transitions = transitions; + } + + public List<Arc> getArcs() { + return this.arcs; + } + + public void setArcs(List<Arc> arcs) { + this.arcs = arcs; + } @Override @@ -37,28 +66,71 @@ public class ReseauPerti implements PetriNetService { } @Override - public void tirerTransition(Transition transition) { - // TODO Auto-generated method stub - // si la transition est tirable - if (transition.est_tirable()) { - // tirer la transition - transition.tirer(); + public void tirer_transition(String id) { + + // set the state of the network to "Transition en cours de verification" + this.etat_reseau = "Transition en cours de validation"; + + // Find the transition with the id + Transition transition_choisie = null; + for (Transition transition : this.transitions) { + if (transition.getId() == Integer.parseInt(id)) { + transition_choisie = transition; + } + } + + + // Check if the transition id is valid + if (transition_choisie == null) { + System.out.println("L'id de la transition n'est pas valide"); + return; + } else { + // Check if the transition is tirable + transition_choisie.est_tirable(); + } + + // Ask if the user wants to validate the firing of the transition + Scanner scanner = new Scanner(System.in); + System.out.println("Voulez-vous valider le tirage de la transition? (O/N)"); + String reponse = scanner.nextLine(); + if (reponse.equals("O")) { + transition_choisie.tirer(); } + + // set the state of the network to "Pas de transition tirée" + this.etat_reseau = "Pas de transition tirée"; + } @Override public void afficherEtat() { // TODO Auto-generated method stub - // afficher le nombre de jetons dans chaque place - for (Place place : places) { - System.out.println("Place " + place.getId() + " : " + place.getNbrJetons()); + if (this.etat_reseau.equals("Pas de transition tirée")) { + System.out.println("Pas de transition tirée"); + // Ask the user if they want to fire a transition + Scanner scanner = new Scanner(System.in); + System.out.println("Voulez-vous tirer une transition? (O/N)"); + String reponse = scanner.nextLine(); + if (reponse.equals("O")) { + // Show the Petri Net + afficherReseau(); + // Ask the user for the id of the transition to fire + System.out.println("Saisir l'id de la transition à tirer: "); + String id = scanner.nextLine(); + tirer_transition(id); + } + } else { + System.out.println("Transition en cours de validation"); } } + @Override - public void afficherReseauPetri() { + public void afficherReseau() { // TODO Auto-generated method stub + System.out.println(this.etat_reseau); + /** * afficher les places, les transitions et les arcs * comme un dessin du réseau de petri @@ -78,5 +150,6 @@ public class ReseauPerti implements PetriNetService { } + } } diff --git a/src/main/java/org/petriNet/Transition.java b/src/main/java/org/petriNet/Transition.java index 0782b7b..618e0dc 100644 --- a/src/main/java/org/petriNet/Transition.java +++ b/src/main/java/org/petriNet/Transition.java @@ -1,9 +1,14 @@ package org.petriNet; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + public class Transition { private int id; private List<Arc_SORTANT> arcs_SORTANTS; private List<Arc_ENTRANT> arcs_ENTRANTS; + private List<Arc_ENTRANT> arcs_ENTRANTS_TIRABLE = new ArrayList<Arc_ENTRANT>(); public Transition(int id, List<Arc_SORTANT> arcs_SORTANTS, List<Arc_ENTRANT> arcs_ENTRANTS) { this.id = id; @@ -17,6 +22,22 @@ public class Transition { * c'est une différence par rapport au diagramme de classe soumis */ + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public List<Arc_SORTANT> getArcs_SORTANTS() { + return arcs_SORTANTS; + } + + public void setArcs_SORTANTS(List<Arc_SORTANT> arcs_SORTANTS) { + this.arcs_SORTANTS = arcs_SORTANTS; + } + public void ajouterArc_SORTANT(Arc_SORTANT arc_SORTANT) { this.arcs_SORTANTS.add(arc_SORTANT); } @@ -25,41 +46,52 @@ public class Transition { this.arcs_ENTRANTS.add(arc_ENTRANT); } - public boolean est_tirable() { - // verifier si la transition est tirable à travers l'ARC_SORTANT - int n_jetons_necessaires; - int n_jetons_existant; - // pour chaque arc sortant de la transition - // n_jetons_necessaires += arc_SORTANT.getPoids(); - for (Arc_SORTANT arc_SORTANT : arcs_SORTANTS) { - n_jetons_necessaires += arc_SORTANT.getPoids(); - } + public void est_tirable() { + + // creer liste vide d'arcs + this.arcs_ENTRANTS_TIRABLE = new ArrayList<Arc_ENTRANT>(); - // pour chaque arc entrant de la transition - // n_jetons_existant += arc_ENTRANT.getPoids(); for (Arc_ENTRANT arc_ENTRANT : arcs_ENTRANTS) { - n_jetons_existant += arc_ENTRANT.getPoids(); + if (arc_ENTRANT.verifier_tirable()) { + arcs_ENTRANTS_TIRABLE.add(arc_ENTRANT); + } } - // si n_jetons_necessaires <= n_jetons_existant - // return true; - - if (n_jetons_necessaires <= n_jetons_existant) { - return true; + if(arcs_ENTRANTS_TIRABLE.isEmpty()){ + System.out.println("La transition n'est pas tirable"); + } + else { + System.out.println("La transition est tirable"); } - } + public void tirer(){ - // fait appel à valider() dans les classes Arc_SORTANT et - // Arc_ENTRANT pour modifier les jetons - for (Arc_ENTRANT arc_ENTRANT : arcs_ENTRANTS) { - arc_ENTRANT.valider(); + est_tirable(); + + // print the list of arcs entrants tirables + System.out.println("Arcs entrants tirable: " + this.arcs_ENTRANTS_TIRABLE + + "Saisir l'arc entrant à tirer: "); + + // copilot get input from user of the id of the arc entrant to tirer (java.util.Scanner) + Scanner scanner = new Scanner(System.in); + int id = scanner.nextInt(); + + // find the Arc_ENTRANT by id + Arc_ENTRANT arc_ENTRANT_toTirer = null; + for (Arc_ENTRANT arc_ENTRANT : this.arcs_ENTRANTS_TIRABLE) { + if (arc_ENTRANT.getId() == id) { + arc_ENTRANT_toTirer = arc_ENTRANT; + } } + // valider l'arc entrant + arc_ENTRANT_toTirer.valider(); + for (Arc_SORTANT arc_SORTANT : arcs_SORTANTS) { arc_SORTANT.valider(); } + } } -- GitLab