TP-programmation-orientee-o.../TP14/Main.java

119 lines
3.7 KiB
Java
Raw Normal View History

2023-06-20 19:02:09 +00:00
import java.util.*;
import java.util.stream.Collectors;
import java.io.*;
import java.util.zip.*;
import java.time.LocalDateTime;
/**
* La classe principale.
*
* Tous les traitements demandés sont faits dans la mêthode
* {@code repondreQuestions}.
* Il serait plus logique d'écrire des méthodes qui pemettraient d'améliorer
* la structuration et la réutilisation. Cependant l'objectif est ici la
* manipulation de l'API des collections, pas la structuration du code
* en sous-programmes.
*/
public class Main {
private static void repondreQuestions(Reader in) {
Iterable<PointDeVente> iterable = PointDeVenteUtils.fromXML(in);
// Construire un tableau associatif (pdvs) des points de vente avec un
// accès par identifiant
Map<Long, PointDeVente> pdvs = new HashMap<>();
for (PointDeVente pt_vente : iterable) {
pdvs.put(pt_vente.getIdentifiant(), pt_vente);
}
// // Nombre de point de vente
// int size_pdvs = pdvs.size();
// System.out.println(size_pdvs);
// // Afficher le nombre de services existants
// Set<String> services = new TreeSet<String>();
// for (PointDeVente pt_vente : pdvs.values()) {
// services.addAll(pt_vente.getServices());
// }
// int size_service = services.size();
// System.out.println(size_service);
// // Afficher les services fournis
// for (String service : services) {
// System.out.println(service);
// }
// Afficher la ville correspondant au point de vente d'identifiant 31075001
// PointDeVente pdv_id = pdvs.get(31075001L);
// System.out.println(pdv_id.getVille());
// // et le prix du gazole le 25 janvier 2018 à 10h.
// System.out.println(pdv_id.getPrix(Carburant.GAZOLE, LocalDateTime.parse("2018-01-25T10:00:00")));
// Afficher le nombre de villes offrant au moins un point de vente
// Set<String> ville_nbpdv = new TreeSet<String>();
// for (PointDeVente pointDeVente : pdvs.values()) {
// ville_nbpdv.add(pointDeVente.getVille());
// }
// System.out.println(ville_nbpdv.size());
// Afficher le nombre moyen de points de vente par ville
Map<String, Integer> ville_pdvmoyen = new HashMap<>();
for (PointDeVente pointDeVente : pdvs.values()) {
int count = ville_pdvmoyen.containsKey(pointDeVente.getVille()) ? ville_pdvmoyen.get(pointDeVente.getVille()) : 0;
ville_pdvmoyen.put(pointDeVente.getVille(), count + 1);
}
int total = 0;
for (Integer i : ville_pdvmoyen.values()) {
System.out.println(i);
total += i;
}
System.out.println(total/ville_pdvmoyen.size());
// A finir...
// le nombre de villes offrants un certain nombre de carburants
// Afficher le nombre et les points de vente dont le code postal est 31200
// Nombre de PDV de la ville de Toulouse qui proposent et du Gazole
// et du GPLc.
// Afficher le nom et le nombre de points de vente des villes qui ont au
// moins 20 points de vente
}
private static Reader ouvrir(String nomFichier)
throws FileNotFoundException, IOException
{
if (nomFichier.endsWith(".zip")) {
// On suppose que l'archive est bien formée :
// elle contient fichier XML !
ZipFile zfile = new ZipFile(nomFichier);
ZipEntry premiere = zfile.entries().nextElement();
return new InputStreamReader(zfile.getInputStream(premiere));
} else {
return new FileReader(nomFichier);
}
}
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("usage : java Main <fichier.xml ou fichier.zip>");
} else {
try (Reader in = ouvrir(args[0])) {
repondreQuestions(in);
} catch (FileNotFoundException e) {
System.out.println("Fichier non trouvé : " + args[0]);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
}