Casse-tête pour debutant

Ondin -  
kij_82 Messages postés 4260 Statut Contributeur -
Bonjour à tous,
je suis debutant en java et je tente de réaliser un petit projet.Je suis en train d'essayr les liste mais je suis coincé.
Regardez:
class Enregistrement: class Diagnostic class Reparation
1 ordi 00A130 HP 1 ordi 00f112 TI 1 ordi 00f112 TI
2 ordi 00f112 TI 2 ordi 00A130 HP 2 ordi 00A130 HP

Enregistrement est la premiere classe,et cè une liste d'ordinateur ce que j'arrive a faire sans problème. Comment arrivé maintenant à utilisé la même liste de Enregistrement dans Diagnostic qui se veut une liste et aussi les element de Diagnostic dans class Reparation?
Dois-je redefinir les attributs de Enregistrement dant Diagnostic,et ne serait-ce pas un double travail?
Je voudrais que mon repère soit les numero(1,2).A partir du 1 de Enregistrement,je puisse observé
ordi 00A130 HP dans Diagnostic . Et comment geré les numero(sans les répeter).j'attend vos reponse,et comme je l'ai dit,je suis debutant.Soyez beaucou explicite

7 réponses

kij_82 Messages postés 4260 Statut Contributeur 857
 
Bonjour,

Même principe quand dans me réponse à ton précédent post, il faut que tu fasse des getters / setters sur ta liste dans la classe Enregistrement.
Ensuite, il faut savoir quelle est ta classe principale ? Où est construit ton objet 'Enregistrement' qui contient la liste des ordinateurs ?

Le but est d'avoir cette liste et donc une référence sur ton objet Enregistrement dans ton objet Diagnostic. Conclusion : si ton objet Enregistrement est instancié en dehors de la classe Diagnostic, il faut passer au constructor de ta classe Diagnostic un paramètre de type liste (comme la propriété de ta classe Enregistrement).
Ainsi, lorsque tu instancie un objet Diagnostic, tu lui donne en paramètre la liste récupérée de l'objet Enregistrement.

Dans tous les cas, avant de te lancer plus dans la programmation, je te suggère vivement d'apprendre les fondements du langage objet, et donc de Java, à l'aide de tutoriel (google est ton ami)
0
Ondin
 
En fait j'ait fait getters/setters.je t'envois le code:


public class Machine {
/*declaration des identifiants de la machine */
private int numeroMachine;
private String typemachine;
private String marque; //marque de la machine
private String porteur; //Celui qui a apporter la machine
private String NumeroSerie; //Numero de Serie de la machine
private String date_entre; //Date d'entrée de la machine
private String Origine; //Origine de la machine
public static int nbreMachine; //compteur du nombre de machine
public ArrayList<Agent> Technicien;

/* CONSTRUCTEURS */

//n°1 constructeur sans paramètre
public Machine(){
Machine.nbreMachine++;
numeroMachine=0;
typemachine="";
marque="vide";
date_entre="pas_de_date";
NumeroSerie="vide";
Origine="";
porteur="";
Technicien=new ArrayList<Agent>();
}


//n°2 constructeur avec paramètre
public Machine(int numeroMachine,String marque,String NumeroSerie,
String typemachine,String date_entre,String Origine,String porteur,String enregistre){
Machine.nbreMachine++;
this.numeroMachine=numeroMachine;
this.typemachine=typemachine;
this.marque=marque;
this.NumeroSerie=NumeroSerie;
this.date_entre=date_entre;
this.Origine=Origine;
this.porteur=porteur;
Technicien=new ArrayList<Agent>();
//machines=new ArrayList<Machine>();
}

/*accesseur et modificateur de l'attribut numeroMachine*/
public int getNumeroMachine(){return numeroMachine;}
public void setNumeroMachine(int numeroMachine) {this.numeroMachine=numeroMachine;}

/*accesseur et modificateur de l'attribut typemachine*/
public String getTypemachine(){return typemachine;}
public void setTypemachine(String typemachine){this.typemachine=typemachine;}

//Accesseur et modificateur de l'attribut marque
public String getMarque(){return marque;}
public void setMarque(String marque){this.marque=marque;}

//Accesseur modificateur de l'attribut NumeroSerie
public String getNumeroSerie(){return NumeroSerie;}
public void SetNumeroSerie(String NumeroSerie){this.NumeroSerie=NumeroSerie;}

//Accesseur modificateur de l'attribut date_entre
public String getDate_entre(){return date_entre;}
public void SetDate_entre(String date_entre){this.date_entre=date_entre;}

//Accesseur et modificateur de l'attribut Origine
public String getOrigine(){return Origine;}
public void SetOrigine(String Origine){this.Origine=Origine;}

/*accesseur et modificateur de l'attribut porteur*/
public String getPorteur(){return porteur;}
public void SetPorteur(String porteur){this.porteur=porteur;}

public ArrayList<Agent> getAgent(){return Technicien;}


//Cette methode permet de saisir les données relative à une machine*/
public void saisieMachine(){
Scanner keyb =new Scanner(System.in);
System.out.println("Enregistrement N°:");
this.setNumeroMachine(Erreur.verifierEntier());
System.out.println("Type de machine:");
this.setTypemachine(keyb.next());
System.out.println("N° série :");
this.SetNumeroSerie(Erreur.verifierNumero());
Erreur.tou_Numero.add(this.getNumeroSerie());
System.out.println("Marque :");
this.setMarque(keyb.next());
System.out.println("Utilisateur :");
this.SetOrigine(keyb.next());
System.out.println("Arrivée le:");
this.SetDate_entre(Erreur.verifierDate());
System.out.println("Est parvenu par :");
this.SetPorteur(keyb.next());
System.out.println("****Agent receptionniste****");
System.out.println("----------------------------");
Agent nouvAgent=new Agent();
nouvAgent.saisirAgent();
}


public String toMachine(){
return this.getNumeroSerie()+" "+this.getMarque()+" "+this.getDate_entre()+" "+this.getOrigine()+" ";
}


/*la methode afficheDonnee permet d'afficher les données relatives à une machine*/
public void afficheDonnee(){
System.out.println("Type: "+this.getTypemachine());
System.out.println("N° de serie: "+this.getNumeroSerie());
System.out.println("De marque: "+this.getMarque());
System.out.println("Utilisateur: "+this.getOrigine());
System.out.println("Arrivée le "+this.getDate_entre());
System.out.println("Par: "+this.getPorteur());
System.out.println("");
}



public void affichedonnee(){
System.out.println("Type: "+this.getTypemachine());
System.out.println("Serie: "+this.getNumeroSerie());
System.out.println("Marque: "+this.getMarque());
//System.out.println("Date d'arrivée"+this.getDate_entre());
//System.out.println("Lieu de provenance"+this.getOrigine());
System.out.println("");
}


public void afficheUtilisateur(){
System.out.println(" "+this.getOrigine());
System.out.println("");

}


}



public class Diagnostique {
private String Numerodiag;
private String Panne;
private String Observationdiag;

// constructeur sans paramètres
public Diagnostique(){
Numerodiag="";
Panne="";
Observationdiag="";
}

public Diagnostique(String Numerodiag,String Panne,String Observationdiag){
Numerodiag=this.Numerodiag;
Panne=this.Panne;
Observationdiag=this.Observationdiag;
}


/*accesseur et modificateur */
public String getNumerodiag(){
return Numerodiag;
}
public void setNumerodiag(String Numerodiag){
this.Numerodiag=Numerodiag;
}

public String getPanne(){
return Panne;
}
public void setPanne(String Panne){
this.Panne=Panne;
}

public String getObservationdiag(){
return Observationdiag;
}
public void setObservationdiag(String Observationdiag){
this.Observationdiag=Observationdiag;
}


public void diagnostique(){
Scanner keyb=new Scanner(System.in);
System.out.println("Diagnostique numero:");
this.setNumerodiag(keyb.next());
Erreur.tou_Numero.add(this.getNumerodiag());

System.out.println("Libellé du diagnostique:");
this.setPanne(keyb.next());

System.out.println("Observations:");
this.setObservationdiag(keyb.next());
}


public class Reparer {
private int num_rep;
private String observation;
private String Date_rep;
public ArrayList<Machine> machines;
public ArrayList<Diagnostique> diag;
public ArrayList<Agent> Technicien;


/* CONSTRUCTEURS */
public Reparer(){
num_rep=0;
observation="";
Date_rep="";
machines=new ArrayList<Machine>();
diag=new ArrayList<Diagnostique>();
Technicien=new ArrayList<Agent> ();
}

public Reparer(int num_rep,String observation,String Date_rep){
num_rep=this.num_rep;
observation=this.observation;
Date_rep=this.Date_rep;
machines=new ArrayList<Machine>();
diag=new ArrayList<Diagnostique>();
Technicien=new ArrayList<Agent> ();
}

/*Accesseurs et modificateurs */
public int getNum_rep(){return num_rep;}
public void setNum_rep(int num_rep){this.num_rep=num_rep;}

public String getObservation(){return observation;}
public void setObservation(String observation){this.observation=observation;}

public String getDate_rep(){return Date_rep;}
public void setDate_rep(String Date_rep){this.Date_rep=Date_rep;}

public ArrayList<Machine> getMachine(){return machines;}

public ArrayList<Diagnostique> getDiagnostique(){return diag;}

public ArrayList<Agent> getAgent(){return Technicien;}



public void reparation(){
Scanner keyb =new Scanner(System.in);
System.out.println("****Agent reparateur****");
Agent nouvAgent=new Agent();
nouvAgent.saisirAgent();

System.out.println("Reparation N°:");
this.setNum_rep(Erreur.verifierEntier());
System.out.println("Date de Reparation:");
this.setDate_rep(Erreur.verifierDate());
System.out.println("Observation:");
this.setObservation(keyb.next());
System.out.println("Type de machine:");
System.out.println("Serie de la machine:");
System.out.println("Marque:");
System.out.println("Panne:");
}




}


Si je comprend bien,il faut que j'ajoute à cè trois classe une 4eme qui portera le main,c'est ça?
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
Alors,

Effectivement, tu as construis le coté fonctionnel de ton appli. Ce qu'il te manque désormais comme tu peux le remarquer, c'est l'aspect "information" : tu as ton programme, mais il est vide de donnée.

Il te faut une méthode qui initialise ton référentiel de données, afin que tu puisse t'en servir dans ton programme par la suite (par exemple pour une réparation)

Donc effectivement, le mieux c'est de faire une 4eme classe qui sera chargée de construire ton référentiel de données (création d'une liste de machine consultable / utilisable par la suite, idem pour les agents)
C'est cette même classe qui fera appel selon un menu utilisateur aux différentes classes pour créer / consulter des réparations, le profil des agents, les machines.

Tu n'es pas forcé de mettre tout ça dans un main, tu fais une nouvelle classe avec des méthodes qui le font.
Cette nouvelle classe qui sera ta classe d'entrée dans ton programme aura un main c'est certain, mais qui pourra se charger uniquement d'instancier un objet de cette nouvelle classe, puis lancer la méthode qui initialise le référentiel, et enfin celle qui intéragit avec l'utilisateur pour consulter / créer des réparations (si c'est bien ce que ton programme doit faire par la suite)
0
Ondin
 
Ok,je commence à percevoir un peu. Mais comment je gère l'unicité des numéro qu je saisi.un bout de code m'aiderait
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
Ha ça ^^

Généralement on passe par une base de données. L'unicité est gérée automatiquement par ton SGBD (base de données en vulgarisation) : pour ce faire il suffit de déclarer tes champs sensé être uniquement (généralement des entiers, en tant que clés primaire de ta table, avec un "auto increment" (auto incrémentation du numéro par le SGBD lui-même)

Bref, si vraiment tu souhaites garder tes données sur la durée, il faut que tu utilise une base de données pour l'enregistrement de ces dernières.
Ainsi, pour ce qui est de la phase d'initialisation de ce que j'appelais le référentiel, ça saute (plus besoin).
Tout ce que tu auras à faire c'est d'ajouter des fonctions d'ajouts de machine, agent, etc. dans ta base via ton programme, pour ensuite consulter / agencer (dans le cadre des réparations) ces données.

Si tu souhaites donc passer par cette solution, je te conseille de consulter des tutoriaux sur l'utilisation des base de données en Java, google est ton ami :)
0
Ondin
 
Dis donc tu me conseille d'utiliser quel base de données
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
Si tu débute je te conseille d'utiliser MySQL, gratuit, simple et efficace pour les petits projets, ou du moins pour s'entrainer lorsqu'on ne connait pas trop ce domaine.

Il faudra aussi apprendre le langage SQL (celui des requêtes sur une base de données) si tu ne le connais pas encore.
0
Ondin
 
OK,mais je suppose que j'ai mon code en java,je me connecte comment a la base?
0
Ondin
 
Comment est-ce que je gere l'espace avec java? J'utilise le type String t je peut saisir par exemple: je voudrais de l'eau. Il me retourne seulement "je"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4260 Statut Contributeur 857
 
??

Pour les bases je ne peux que te conseiller de regarder des tutoriaux sur JDBC (Java DataBase Conect je crois)

Pour ta seconde question j'ai du mal à comprendre, s'il s'agit d'un point fonctionnel de ton application, j'avoue que j'ai juste regardé le code d'un oeil technique et non fonctionnel, je ne sais que vaguement ce que fais ton appli.
0
Ondin
 
Bonjour,
En fait c'est general!!! Juste pour savoir si il n'y a pas en Java un type qui permet de saisir des phrases.
Jusque là je ne peut que saisir un mot a chaque execution de mes programmes. L'espace n'est pas reconnu. Comment remedier à cela ?
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
A la place de ce que tu as utilisé pour lire sur l'entrée standard (clavier), utilise ceci :
Reader reader = new inptuStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
System.out.print("Entrer votre prenom : ");
String prenom = input.readLine(); 


Il me semble que ça fonctionne et te permets de récupérer la ligne entière entrée par l'utilisateur.
0
Ondin
 
REGARDE:

public class Agent{
private String nom;

public Agent(){nom=null}
public Agent(String nom){this.nom=nom;}

public String getNom(){return nom;}
public void setNom(String nom){this.nom=nom;}

public void saisirAgent(){
Scanner.keyb =new Scanner(System.in);
System.out.println("votre nom:");
this.setNom(keyb.next());
}

public void affichAgent(){
System.out.println("Nom: "+this.getNom());
}

Cè le code que je possède.
Que deviennent alors les getters/setters avec le code que tu m'a donné?
Il est bon, mais j'ai des problèmes avec ma methode affichAgent(),puisque apparemment mes getters/setters ne serve pas.
Comment je recupère alors 'nom' avec ton code dans ma methode affichAgent()?
0
kij_82 Messages postés 4260 Statut Contributeur 857
 
Les getters / setters ne change pas, il s'agit des fonctions où tu lis le clavier.

Ca me semble pourtant simple non, tu remplace ta partie de code qui lis le clavier par celle que j'ai donné, ce qui te donne ceci :

public void saisirAgent(){
Reader reader = new inptuStreamReader(System.in);
BufferedReader input = new BufferedReader(reader);
System.out.print("votre nom : ");
this.setNom( input.readLine() );
} 


Je te laisse continuer tout seul, on apprends beaucoup mieux en persévérant qu'en demandant sans arrêt les solutions ;)
Avec tout ce que je t'ai dit tu devrais t'en sortir, et éventuellement si tu as des questions plus techniques par exemple lorsque tu tentera d'interroger ta base de données, tu pourras toujours faire une nouvelle discussion pour ton nouveau problème.

Bon courage.
0