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
|
import java.util.*;
/* ÉNONCÉ:
Le programme que vous devez réaliser doit effectuer la répartition des étudiants
dans les différentes classes pour la prochaine rentrée de la HEG,
puis afficher les classes d'une certaine filière et degré.
Toutes les données sont reprises du fichier "DonneesRentree.txt" puis stockées
dans l'ArrayList classes */
public class Rentree {
private static ArrayList classes = new ArrayList(); /* Données */
private static final String SepBloc = "/";
private static final String SepLigne = "\n\r";
private static final String SepChamps = ";";
/* Le String reçu contient tout le fichier "DonneesRentree.txt", qui est décomposé en 2 parties :
1) la 1ère partie spécifie le nombre de classes à créer pour chaque filière/degré :
- IGS;1;3 ==> indique que vous devez créer 3 classes d'IGS 1ère année (IGS1-1, IGS1-2 et IGS1-3)
- IGS;2;2 ==> indique que vous devez créer 2 classes d'IGS 2ème année (IGS2-1 et IGS2-2)
2) la 2ème partie spécifie la liste des étudiants à insérer dans les différentes classes selon
leur filière & degré :
- IGS;2;Baker Valentin ==> indique qu'il faut ajouter "Baker Valentin" dans une classe d'IGS 2ème
année.
Pour décider dans quelle classe l'ajouter (IGS2-1 ou IGS2-2), on regarde dans laquelle il y a le
MOINS d'étudiants.
Les 2 parties du fichier sont séparées par le délimiteur "/" en début de ligne */
private static void creerClasses (String str) {
StringTokenizer stBloc = new StringTokenizer (str, SepBloc);
while (stBloc.hasMoreTokens()) {
StringTokenizer stClasse = new StringTokenizer ( stBloc.nextToken() , SepLigne);
while (stClasse.hasMoreTokens()) {
StringTokenizer stClasseChamps = new StringTokenizer ( stClasse.nextToken(), SepChamps);
while (stClasseChamps.hasMoreTokens()) {
String filiere = stClasseChamps.nextToken();
int degre = Integer.parseInt(stClasseChamps.nextToken());
int numClasse = Integer.parseInt(stClasseChamps.nextToken());
for (int i=1; i < numClasse + 1 ; i++ ) {
Classe classe = new Classe(filiere, degre, i, ...);
}
}
}
StringTokenizer stEtudiants = new StringTokenizer (stBloc.nextToken(), SepLigne);
while (stEtudiants.hasMoreTokens()) {
StringTokenizer stEtudiantsChamps = new StringTokenizer ( stEtudiants.nextToken(), SepChamps);
while (stEtudiantsChamps.hasMoreTokens()) {
String filiere = stEtudiantsChamps.nextToken();
int degre = Integer.parseInt(stEtudiantsChamps.nextToken());
String nomPrenom = stEtudiantsChamps.nextToken();
Etudiant etudiant = new Etudiant(filiere, degre, nomPrenom);
}
}
}
} // creerClasses
/* Affiche les classes d'une certaine filière (1er paramètre reçu),
et éventuellement d'un certain degré (s'il y a un 2ème paramètre, c'est le degré).
Exemples :
- si on lance main() avec uniquement "IGS", affichera toutes les classes IGS: IGS1-1, IGS1-2, IGS1-3, IGS2-1, IGS2-2, IGS3-1, IGS4-1.
- si on lance main() avec "IGS 1", n'affichera que les classes de 1ère année d'IGS: IGS1-1, IGS1-2, IGS1-3.
À la fin de l'affichage, il faudra également indiquer le nombre total d'étudiants affichés.
L'affichage doit être conforme à celui qui est reproduit dans l'énoncé. */
public static void afficherClasses (String[] args) {
} // afficherClasses
public static void main (String[] args) {
if (args.length != 1 && args.length != 2) {
System.out.println("Vous devez indiquer la filière, et éventuellement le degré !");
} else {
creerClasses(FileToStr.read("DonneesRentree.txt"));
afficherClasses(args);
}
} // main
} // Rentree |
Partager