POssibiliter Grupe: Renomer, supprimer, créer, ajouter des Etudiant

This commit is contained in:
martins 2022-11-13 19:50:53 +01:00
parent e9fac29412
commit 323c6e43e2
13 changed files with 355 additions and 14 deletions

View File

@ -97,31 +97,45 @@ ${BUILD}/MNP/AbstractChangementFactoryNP.class : ${SRC}/MNP/AbstractChangementFa
## View ##
${BUILD}/Graphic/View/FenetreGroupe.class : ${SRC}/Graphic/View/FenetreGroupe.java \
${BUILD}/Graphic/Controller/ObservateurFenetre.class \
${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class
${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class \
${BUILD}/Graphic/Controller/ObservateurModifGroupe.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreGroupe.java
${BUILD}/Graphic/View/FenetreEtudiant.class :${SRC}/Graphic/View/FenetreEtudiant.java \
${BUILD}/Graphic/Controller/ObservateurFenetre.class \
${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class
${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class \
${BUILD}/Graphic/View/PanelEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreEtudiant.java
${BUILD}/Graphic/View/PanelEtudiant.class : ${SRC}/Graphic/View/PanelEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/PanelEtudiant.java
${BUILD}/Graphic/View/Chargement.class : ${SRC}/Graphic/View/Chargement.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/Chargement.java
${BUILD}/Graphic/Model.class : ${SRC}/Graphic/Model.java \
${BUILD}/Graphic/View/FenetreGroupe.class \
${BUILD}/Graphic/View/FenetreEtudiant.class \
${BUILD}/Graphic/View/Chargement.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Model.java
${BUILD}/Graphic/View/FenetreSelectionEtu.class : ${SRC}/Graphic/View/FenetreSelectionEtu.java \
${BUILD}/Graphic/Controller/SelecteurEtudiant.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/View/FenetreSelectionEtu.java
## Controller ##
${BUILD}/Graphic/Controller/ObservateurFenetre.class : ${SRC}/Graphic/Controller/ObservateurFenetre.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurFenetre.java
${BUILD}/Graphic/Controller/ObservateurModifGroupe.class : ${SRC}/Graphic/Controller/ObservateurModifGroupe.java \
${BUILD}/Graphic/View/FenetreSelectionEtu.class
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurModifGroupe.java
${BUILD}/Graphic/Controller/ObservateurChangeGroupe.class : ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/ObservateurChangeGroupe.java
${BUILD}/Graphic/Controller/SelecteurEtudiant.class : ${SRC}/Graphic/Controller/SelecteurEtudiant.java
${JAVAC} ${JAVAC_OPTIONS} ${SRC}/Graphic/Controller/SelecteurEtudiant.java
##....
## TEST ##

View File

@ -90,6 +90,13 @@ public interface Groupe extends MonPrint {
*/
public Set<Etudiant> getEtudiants();
/**
* Change le nom du groupe
* @param s le nouveau nom
*/
public void setName(String s);
/**
* @see MonPrint
* NB. On n'utilise le mécanisme des méthodes par défaut pour donner du code dans une interface. C'est un petit peu laid et à contre-emploi mais pratique ici.

View File

@ -0,0 +1,108 @@
package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller;
import java.awt.event.*;
import java.util.LinkedHashSet;
import fr.iutfbleau.projetIHM2022FI2.API.*;
import javax.swing.JOptionPane;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu;
import javax.swing.*;
import java.util.Set;
public class ObservateurModifGroupe implements ActionListener{
private Model m;
private Groupe groupe;
public ObservateurModifGroupe(Model m, Groupe g){
this.m=m;
this.groupe=g;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="suprimer ce groupe"){
Groupe pointpoint=this.groupe.getPointPoint();
this.m.delete(this.groupe);
this.m.showGroupe(pointpoint);
}
if(e.getActionCommand()=="créer un sous groupe"){
String g[]=new String[2];
g[0]="Partition";
g[1]="Free";
int rep=JOptionPane.showOptionDialog(m.getFenetre(), "Type du nouveau Groupe","Type", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, g, g[0]);
if(rep==JOptionPane.YES_OPTION){
try{
JPanel myPanel = new JPanel();
JTextField xField = new JTextField(5);
JTextField yField = new JTextField(20);
myPanel.add(new JLabel("Nombre:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("Nom:"));
myPanel.add(yField);
int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel,
"Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
int nb=Integer.parseInt(xField.getText());
if(nb>this.groupe.getEtudiants().size()){
JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE);
return;
}
m.partition(this.groupe, nb, yField.getText());
m.showGroupe(this.groupe);
}
}catch(NumberFormatException er){
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE);
}
}else{
try{
JPanel myPanel = new JPanel();
JTextField xField = new JTextField(5);
JTextField zField = new JTextField(5);
JTextField yField = new JTextField(20);
myPanel.add(new JLabel("Nom:"));
myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("Min:"));
myPanel.add(xField);
myPanel.add(new JLabel("Max:"));
myPanel.add(zField);
int result = JOptionPane.showConfirmDialog(m.getFenetre(), myPanel,
"Entrer le nombre et le nom des Partitions", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
int min=Integer.parseInt(xField.getText());
int max=Integer.parseInt(zField.getText());
if(min>this.groupe.getEtudiants().size() || max>this.groupe.getEtudiants().size()){
JOptionPane.showMessageDialog(m.getFenetre(), "nombre de partition trop grand", "erreur", JOptionPane.ERROR_MESSAGE);
return;
}
m.free(groupe, yField.getText(), min, max);
m.showGroupe(this.groupe);
}
}catch(NumberFormatException er){
JOptionPane.showMessageDialog(m.getFenetre(), "erreur dans le nombre de partition", "erreur", JOptionPane.ERROR_MESSAGE);
}
}
}
if(e.getActionCommand()=="renomer"){
String nouveau=JOptionPane.showInputDialog(m.getFenetre(), "Rentrer le nouveau Nom");
this.groupe.setName(nouveau);
m.showGroupe(this.groupe);
}
if(e.getActionCommand()=="ajouter"){
Set<Etudiant> ajout=new LinkedHashSet<>();
JPanel myPanel=new FenetreSelectionEtu(this.groupe.getPointPoint(), ajout);
if(JOptionPane.showConfirmDialog(m.getFenetre(), new JScrollPane(myPanel), "Selectionner les étudiant a ajouter", JOptionPane.OK_CANCEL_OPTION) ==JOptionPane.YES_OPTION){
if(this.groupe.getMax()<this.groupe.getEtudiants().size()+ajout.size()){
JOptionPane.showMessageDialog(m.getFenetre(), "Il y a trop d'etudiant pour le groupe", "erreur", JOptionPane.ERROR_MESSAGE);
}
for(Etudiant et:ajout){
this.groupe.addEtudiant(et);
}
m.showGroupe(this.groupe);
}
}
}
}

View File

@ -0,0 +1,46 @@
package fr.iutfbleau.projetIHM2022FI2.Graphic.Controller;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import fr.iutfbleau.projetIHM2022FI2.Graphic.View.FenetreSelectionEtu;
public class SelecteurEtudiant implements MouseListener{
private FenetreSelectionEtu pere;
private int index;
public SelecteurEtudiant(int index, FenetreSelectionEtu pere){
this.pere=pere;
this.index=index;
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getComponent().getBackground()!=Color.GREEN){
e.getComponent().setBackground(Color.GREEN);
this.pere.addList(this.index);
}else{
this.pere.removeList(this.index);
e.getComponent().setBackground(e.getComponent().getParent().getBackground());
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}

View File

@ -122,7 +122,6 @@ public class Model{
int nbsous=rs.getRow();
if(nbsous==0){
ch.addPourcent(pourcent);
System.out.println("add ce pourcentage: "+pourcent);
return;
}
rs=pst.executeQuery();
@ -149,7 +148,7 @@ public class Model{
private void addEtudiant(Groupe g, Connection cnx){
try{
PreparedStatement pst= cnx.prepareStatement(
"SELECT Etudiant.nom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? Group BY Etudiant.nom; ");
"SELECT Etudiant.nom, Etudiant.prenom, Etudiant.id FROM `CONTIENT` JOIN Etudiant on CONTIENT.idEt=Etudiant.id WHERE CONTIENT.idGroupe=? Group BY Etudiant.nom ORDER BY Etudiant.id ASC");
try{
pst.setInt(1, g.getId());
ResultSet rs=pst.executeQuery();
@ -166,7 +165,7 @@ public class Model{
}
//autrement on les crée
}else{
agf.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2)));
agf.addToGroupe(g, new EtudiantNP(rs.getString(1), rs.getString(2), rs.getInt(3)));
}
}
@ -192,4 +191,42 @@ public class Model{
this.fenetre.add(new JScrollPane(this.fenEtu));
this.fenetre.revalidate();
}
public JFrame getFenetre() {
return fenetre;
}
public void delete(Groupe g){
for(Groupe sous: this.promo){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(sous);
if(agf.knows(g)){
if(g==agf.getPromotion()){
JOptionPane.showMessageDialog(this.fenetre, "impossible de supprimer la promotion", "alerte", JOptionPane.ERROR_MESSAGE);
return;
}
LinkedList<Groupe> file=new LinkedList<>();
this.deleteRecursif(file, g);
for(Groupe sup:file){
agf.deleteGroupe(sup);
}
}
}
}
private void deleteRecursif(LinkedList<Groupe> file, Groupe bedelete){
for(Groupe g: bedelete.getSousGroupes()){
this.deleteRecursif(file, g);
}
file.add(bedelete);
}
public void partition(Groupe g, int n, String name){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g);
agf.createPartition(g, name, n);
}
public void free(Groupe g, String name, int min, int max){
AbstractGroupeFactory agf=new AbstractGroupeFactoryNP(g);
agf.createGroupe(g, name, min, max);
}
}

View File

@ -37,6 +37,7 @@ public class Chargement extends JComponent{
FontMetrics metrics = secondPinceau.getFontMetrics(secondPinceau.getFont());
secondPinceau.drawString("CHARGEMENT", (this.getWidth()/2-metrics.stringWidth("CHARGEMENT")/2), (this.getHeight()-metrics.getHeight())/3+metrics.getAscent());
secondPinceau.drawRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8, this.getHeight()/10);
secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*8/100*pourcentage, this.getHeight()/10);
float stat=(int) 8.F/100.F*(pourcentage);
secondPinceau.fillRect(this.getWidth()/10, this.getHeight()/2, this.getWidth()/10*((int) stat), this.getHeight()/10);
}
}

View File

@ -4,7 +4,7 @@ package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.*;
import java.util.Set;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
@ -16,10 +16,11 @@ public class FenetreEtudiant extends JPanel{
public FenetreEtudiant(Groupe g){
super();
if(g!=null){
this.setLayout(new GridLayout(57, 1));
this.etu=g.getEtudiants();
this.setLayout(new GridLayout(this.etu.size(), 1, 10, 0));
for(Etudiant e: this.etu){
this.add(new JLabel(e.monPrint()));
PanelEtudiant p=new PanelEtudiant(e);
this.add(p);
}
}else{
this.add(new JLabel("Il n'y a pas d'étudiant"));

View File

@ -6,8 +6,10 @@ import javax.swing.JPanel;
import java.awt.GridLayout;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.API.TypeGroupe;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Model;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurChangeGroupe;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.ObservateurModifGroupe;
public class FenetreGroupe extends JPanel{
@ -16,7 +18,7 @@ public class FenetreGroupe extends JPanel{
super();
this.g=g;
if(g!=null){
this.setLayout(new GridLayout(15, 1));
this.setLayout(new GridLayout(11+g.getSousGroupes().size(), 1));
JButton bout=new JButton("point point");
bout.addActionListener(new ObservateurChangeGroupe(m, this.g.getPointPoint()));
this.add(bout);
@ -24,12 +26,27 @@ public class FenetreGroupe extends JPanel{
this.add(new JLabel("id= "+String.valueOf(g.getId())));
this.add(new JLabel("min= "+String.valueOf(g.getMin())));
this.add(new JLabel("max= "+String.valueOf(g.getMax())));
this.add(new JLabel(g.getType().name()));
this.add(new JLabel("Sous groupe"));
for(Groupe gr: g.getSousGroupes()){
JButton b=new JButton(gr.getName());
b.addActionListener(new ObservateurChangeGroupe(m, gr));
this.add(b);
}
JButton supprimer=new JButton("suprimer ce groupe");
supprimer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(supprimer);
if(g.getType()!=TypeGroupe.PARTITION){
JButton creer=new JButton("créer un sous groupe");
creer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(creer);
}
JButton renomer=new JButton("renomer");
renomer.addActionListener(new ObservateurModifGroupe(m, g));
this.add(renomer);
JButton ajouter=new JButton("ajouter");
ajouter.addActionListener(new ObservateurModifGroupe(m, g));
this.add(ajouter);
}else{
this.add(new JLabel("Il n'y a pas encore de Groupe"));
}

View File

@ -0,0 +1,48 @@
package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import fr.iutfbleau.projetIHM2022FI2.API.Groupe;
import fr.iutfbleau.projetIHM2022FI2.Graphic.Controller.SelecteurEtudiant;
import java.util.Set;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class FenetreSelectionEtu extends JPanel{
private Set<Etudiant> liste;
private Groupe racine;
public FenetreSelectionEtu(Groupe g, Set<Etudiant> liste){
super(new GridLayout(g.getEtudiants().size()/3, 3));
this.racine=g;
this.liste=liste;
int index=0;
for(Etudiant e:g.getEtudiants()){
JButton lab=new JButton(e.getNom()+" "+e.getPrenom()+" "+e.getId());
lab.addMouseListener(new SelecteurEtudiant(index, this));
this.add(lab);
index++;
}
}
public void addList(int index){
int i=0;
for(Etudiant e:racine.getEtudiants()){
if(i==index){
this.liste.add(e);
return;
}
i++;
}
}
public void removeList(int index){
int i=0;
for(Etudiant e:racine.getEtudiants()){
if(i==index){
this.liste.remove(e);
return;
}
i++;
}
}
}

View File

@ -0,0 +1,41 @@
package fr.iutfbleau.projetIHM2022FI2.Graphic.View;
import javax.swing.JLabel;
import javax.swing.JPanel;
import fr.iutfbleau.projetIHM2022FI2.API.Etudiant;
import javax.swing.JButton;
import java.awt.*;
public class PanelEtudiant extends JPanel{
private JLabel nom;
private Etudiant e;
private JButton renomer;
private JButton supprimer;
private JButton deplacer;
public PanelEtudiant(Etudiant e){
super(new GridBagLayout());
this.nom=new JLabel(e.getNom()+" "+e.getPrenom()+" "+e.getId(), JLabel.LEFT);
this.renomer=new JButton("r");
this.supprimer=new JButton("-");
this.deplacer=new JButton("c");
GridBagConstraints cbg=new GridBagConstraints();
cbg.gridy=0;
cbg.anchor=GridBagConstraints.EAST;
cbg.fill=GridBagConstraints.BOTH;
this.add(this.nom, cbg);
cbg.gridwidth=0;
cbg.gridheight=0;
cbg.anchor=GridBagConstraints.EAST;
cbg.fill=GridBagConstraints.NONE;
this.add(this.renomer, cbg);
this.add(this.supprimer, cbg);
this.add(this.deplacer, cbg);
}
}

View File

@ -32,8 +32,8 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
* @param g le groupe (methode récursive)
*/
private void addSousGroupe(Groupe g){
this.brain.put(g.getId(), g);
for(Groupe s:g.getSousGroupes()){
this.brain.put(g.getId(), g);
this.addSousGroupe(s);
}
}
@ -84,7 +84,7 @@ public class AbstractGroupeFactoryNP implements AbstractGroupeFactory {
if (this.getPromotion().equals(g)){
throw new IllegalArgumentException("Impossible de détruire le groupe de toute la promotion");
}
if (g.getSize()>0){
if (g.getSousGroupes().size()>0){
throw new IllegalStateException("Impossible de détruire un groupe contenant un groupe");
}
g.getPointPoint().removeSousGroupe(g);

View File

@ -23,6 +23,19 @@ public class EtudiantNP implements Etudiant{
this.prenom=prenom;
}
/**
* Constructeur.
*/
public EtudiantNP(String nom, String prenom, int id){
Objects.requireNonNull(nom,"On ne peut pas créer un étudiant avec un nom null");
Objects.requireNonNull(prenom,"On ne peut pas créer un étudiant avec un nom null");
// auto incrément de l'id
this.id=id;
this.nextId++;
this.nom=nom;
this.prenom=prenom;
}
/**
* permet de récupérer l'identifiant de l'étudiant.
* @return l'identifiant.

View File

@ -208,5 +208,13 @@ public class GroupeNP implements Groupe {
return this.membresDuGroupe;
}
/**
* Change le nom du groupe
* @param s le nouveau nom
*/
@Override
public void setName(String s){
this.name=s;
}
}