J'ai un problème.
Attribuer 1 place libre à un moment donné.
Ca fait partie d'un projet que je dois rendre au plus tard lundi 07/05
Je pense pas le finir à temps, mais au moins si je pouvais bénéficier de votre aide pour m'aider à avancer.
Je viens tout juste de comprendre l'utilisation du Hashtable (enfin, je crois). Il me faudra sans doute utiliser aussi des Arraylist.
vous pouvez déjà jetter un oeil sur ce que j'ai déjà fait et éventuellement, m'indiquer les choses à modifier (je débute en java, donc c'est pas du code 'propre') et peut-être me proposer quelques méthodes qui me manquent.
Etant à une formation en cours du soir (je bosse la journée) je dispose de peu de loisirs. Donc ça ne va pas être évident de présenter un truc qui fonctionne à peu prêt en si peu de temps.
Merci de votre aide. Au moins sur ce que j'ai déjà écrit
En gros :
on dispose de 2 fichiers :
Trains.txt qui contient les données code train, type train :
ProgrammeCircules qui contient code Circule, heure, minute, ville, codeTrain
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ETR00120045 CORAIL-H667 HGD00150056 CORAIL-727 NJU12340001 TGV-TV56 POI00780012 TGV-A310 KDE00980032 CORAIL-747 ...
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 IT4444 13 10 RENNES ETR00120045 IT0056 15 00 TOULOUSE ETR00120045 IT1919 12 30 STRASBOURG EVE00012345 IT0985 16 15 STRASBOURG EVE00012345 IT3330 15 30 BORDEAUX GFD00150056 IT0411 17 30 BORDEAUX GFD00150056 IT7777 17 10 MARSEILLE RTG78945612 IT0650 18 40 MARSEILLE RTG78945612 etc ...
Des voies :
voie p1, p2, p3 ...
et pour les trains 'lourds', comme le TGV-TV56, des voies distantes
d1, d2, d3 ...
Il faut donc parquer les trains sur les voie libres durant les durées indiquées (arrivée, départ).
Par exemple, ETR00120045 arrive de Rennes à 13h10
et repart pour Toulouse à 15h (les 2 premières lignes du fichier ProgrammeCircule).
Quand c'est un TGV-TV56, le train doit se poser sur un voie distante.
Alors, rapidement, j'ai écrit quelques classes (ci-dessous) mais suis coincé et ne parviens pas encore à attribuer les trains à des voies.
Après, il faudra que je gère l'affichage pour chaque Hall (4 à 6 halls pour chaque voie) des arrivées et départs.
Ca, j'espère pouvoir m'en sortir, mais j'aurais par contre besoin d'aide pour l'attribution de voies en fonction des séjours.
Merci de m'aider.
Voici les fichiers créés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 // Initialiser.java import java.net.*; import java.io.*; import java.util.*; public class Initialiser { public static void main (String args[]) throws IOException { final int longNumLigne = 4 ; // nombre de caracteres utilises pour // afficher le numero de ligne final int nbCarParLigne = 60 ; String nomfich ; String ligne ; // ligne courante du fichier texte char charNumLigne[] = new char[longNumLigne] ; // pour les caracteres // du numero de ligne // // On initialise les trains a partir du fichier // nomfich="DonneesProjet/trains.txt"; BufferedReader entree = new BufferedReader (new FileReader (nomfich)) ; int numLigne = 0 ; Hashtable lesTrains=new Hashtable; do { /* lecture d'une ligne du fichier */ ligne = entree.readLine() ; if (ligne == null) break ; StringTokenizer tokenizer = new StringTokenizer(ligne); int count = tokenizer.countTokens(); while (tokenizer.hasMoreTokens()) { // on créer l'train, selon qu'il soit gros (TGV-TV56) ou pas String code = tokenizer.nextToken(); String type = tokenizer.nextToken(); if (type.equals("TGV-TV56")) new TrainGros(code,type); else new Train(code,type); } System.out.println () ; } while (ligne != null) ; entree.close () ; System.out.println ("*** fin de fichier Trains ***"); // // On initialise les circulations a partir du fichier // nomfich="DonneesProjet/ProgrammeCircules"; entree = new BufferedReader (new FileReader (nomfich)) ; numLigne = 0 ; do { // lecture et traitement circulation arrivee ligne = entree.readLine() ; if (ligne == null) break ; StringTokenizer tokenizer = new StringTokenizer(ligne); int count = tokenizer.countTokens(); while (tokenizer.hasMoreTokens()) { // on creer l' arrivee en fonction des donnees lues String nomCircule = tokenizer.nextToken(); int heure = tokenizer.nextToken(); int minute = tokenizer.nextToken(); String ville = tokenizer.nextToken(); String codeTrain = tokenizer.nextToken(); new CirculeArrivee(nomCircule,heure,minute,ville,codeTrain); // lecture et traitement du depart ligne = entree.readLine() ; if (ligne == null) break ; StringTokenizer tokenizer = new StringTokenizer(ligne); int count = tokenizer.countTokens(); while (tokenizer.hasMoreTokens()) { // on creer l'arrivee en fonction des donnees lues String nomCircule = tokenizer.nextToken(); int heure = tokenizer.nextToken(); int minute = tokenizer.nextToken(); String ville = tokenizer.nextToken(); String codeTrain = tokenizer.nextToken(); System.out.println () ; } while (ligne != null) ; entree.close () ; System.out.println ("*** fin liste fichier circulations ***"); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 // Train.java // // Projet Gare // Fichier : Train.java // import java.util.*; public class Train { private String codeTrain; private String typeTrain; private static Hashtable lesTrains; private static Hashtable lesSejours; private ArrayList lesCircules; public void Train(String code, String type) { codeTrain=code; typeTrain=type; lesTrains.put(code,this); } public void setTrain() { } public void getTrain() { } public void getCode() { } public void getType() { return this.typeTrain; } public void getPlace() { } // renvoie l'train en fonction du code public static Train getRefTrain(String code) { return (Train)lesTrains.get(code); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // TrainGros.java // // Projet Gare // Fichier : TrainGros.java // public class TrainGros extends Train { // la gestion de TGV-TV56 sera différente de celle des trains ordinaires public void setPlace() { } public void getPlace() { } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 // Circule.java // // Projet Gare // Fichier : Circule.java / public class Circule { private String nomCircule; private Int heure; private Int minute; private Horaire hh; private String ville; private String codeTrain; private Sejour vSejour; private String message; public Circule(String Circule,int h,int mn,String v,String train) { nomCircule=Circule; heure=h; minute=mn; ville=v; codeTrain=train; hh=getHoraire(h,mn); } public void SetCircule() { } public Circule getCircule() { } public void setHeure () { hh=Horaire(this.heure,this.minute); } public Horaire getHeure() { return(this.hh); } public void setRetard(int retard) { message = " mn de retard"; // verifie que le voie permet le retard // 1. attribuer un autre voie si pas possible // 2. si pas possible et pas d'autres attribution, retarder le train qui suit // prevoir repercussion en chaine } public String getRetard() { return message; } public void setAnnule() { message = "Annulé"; // liberer place voie } public void getAnnule() { } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 // CirculeArrivee.java // // Projet Gare // Fichier : CirculeArrivee.java // public class CirculeArrivee extends Circule { private String message; public String getRetard() { return message; } public void setAnnule() { message = "Annulé"; // liberer place voie } public void getAnnule() { } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 // CirculeDepart.java // // Projet Gare // Fichier : CirculeDepart.java // public class CirculeDepart extends Circule { private String message; public String getRetard() { return message; } public void setAnnule() { message = "Annulé"; // liberer place voie } public void getAnnule() { } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Paking.java // // Projet Gare // Fichier : voie.java // public class voie { private Object nomvoie; public Sejour pSejour; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // voieDistant.java public class voieDistant extends Pointvoie { private Int pPorte; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // Sejour.java // // Projet Gare // Fichier : Sejour.java // public class Sejour { private Train train; private Circule Arrivee; private Circule Depart; private TrancheHoraire horaire; private Pointvoie svoie; public Sejour() { } // public setHeureSejour() { } // parcours les voies jusqu'à en trouver un libre public Parkin trouvevoie() { new TrancheHoraire t1(this.heureArrivee, this.heureDepart) } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 // Horaire.java package gare; public class Horaire implements Comparable, Cloneable{ private int heures,minutes; public Horaire() { heures=0; minutes=0; } public Horaire(int h,int m) { heures=h; minutes=m; } public Horaire(int m){ m=m%1440; heures=m/60;minutes=m%60; } public int horaireEnMinutes(){ return heures*60+minutes; } public Horaire ajout(Duree d){ int h=horaireEnMinutes()+d.dureeEnMinutes(); if(h>=1440) h=h%1440; return new Horaire(horaireEnMinutes()+d.dureeEnMinutes()); } public Horaire retrait(Duree d){ int h=horaireEnMinutes()-d.dureeEnMinutes(); while(h<0) h=h+1440; return new Horaire(h); } public Duree retrait(Horaire h){ int m=this.horaireEnMinutes()-h.horaireEnMinutes(); if(m<0) m=-m; return new Duree(m); } public String toString(){ String tHeures=heures +" h "; String tMinutes=((minutes<10)?"0":"")+minutes; String info=tHeures+tMinutes; return info; } public void afficher(){ System.out.println(toString()); } public int compareTo(Object o){ Horaire h=(Horaire) o; return horaireEnMinutes()-h.horaireEnMinutes(); } public Object clone()throws CloneNotSupportedException{ Horaire h=(Horaire)super.clone(); return h; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 // TrancheHoraire.java package gare; public class TrancheHoraire { private Horaire debut; private Horaire fin; public TrancheHoraire(Horaire d, Horaire f) { debut=d;fin =f; } // accesseurs public Horaire getDebutTrancheHoraire(){ return debut; } public Horaire getFinTrancheHoraire(){ return fin; } // méthodes /** * indique si l'horaire h est dans la tranche horaire, objet receveur * @param h:Horaire * @return boolean */ public boolean contient(Horaire h){ return h.compareTo(debut)>=0 && h.compareTo(fin)<=0 ; } /** * indique si la tranche horaire objet receveur est contenue dans la tranche paramètre * @param t:TrancheHoraire * @return boolean */ public boolean dansTrancheHoraire(TrancheHoraire t){ return (debut.compareTo(t.debut)>=0)&&(fin.compareTo(t.fin)<=0); } public boolean equals(Object o){ TrancheHoraire t=(TrancheHoraire)o; return debut.equals(t.debut)&& fin.equals(t.fin); } public boolean contient (TrancheHoraire t){ return t.dansTrancheHoraire(this); } // calcule le nombre de partitions induites par la tranche t dans la tranche this // A n'utiliser que si this contient t public int nombrePartitions(TrancheHoraire t){ int n=0; if(this.equals(t)) n=0; else if((debut.equals(t.debut))||(fin.equals(t.fin))) n=1; else n=2; return n; } public boolean dansTrancheHoraire(Horaire d,Horaire f){ return (debut.compareTo(d)>=0)&&(fin.compareTo(f)<=0); } public TrancheHoraire intersection(TrancheHoraire t){ if(this.dansTrancheHoraire(t)){ return new TrancheHoraire(debut,fin); } else if(t.dansTrancheHoraire(this)) return new TrancheHoraire(t.debut,t.fin); else if(!this.contient(t.debut)&&!this.contient(t.fin)){ return null; } else if(this.contient(t.debut)){ return new TrancheHoraire(t.debut,fin); } else return new TrancheHoraire(debut,t.fin); } public Duree getDuree(){ return fin.retrait(debut); } public String toString(){ String info=" début:"+debut.toString()+ " fin:"+fin.toString(); return info; } }
Partager