Skip to content
This repository has been archived by the owner on Dec 3, 2020. It is now read-only.

pBouillon/OpenFlightStatisticsAggregator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Projet S6

Partie I: normalisateur et injecteur de données

Installation

Se rendre dans le dossier du projet, et installer les dépendances:

~$ cd DatabaseNormalizer
~/DatabaseNormalizer$ sudo make install

Note: permission sudo indispensable pour le téléchargement de la librairie pathlib2 depuis pip3.

Tester le projet

Se rendre dans le dossier du projet, et lancer la directive de test:

~$ cd DatabaseNormalizer
~/DatabaseNormalizer$ make test

Note: la directive de test va automatiquement explorer tous les sous dossiers et fichiers de tests existants et les lancer à la suite.

Requetes de la base de données - Partie 1

Note: pour requeter la base de données, un simple script Python peut-être utilisé:

import sqlite3


def perform_request(country_name: str = 'Ireland'):
    conn = sqlite3.connect('ppii.db')
    curs = conn.cursor()

    sql = f'select * from airport, city, country ' \
          + 'where airport.id_city = city.id ' \
          + 'and city.id_country = country.id ' \
          + 'and country.name like "{country_name}"'

    curs.execute(sql)

    print('Liste des aéroports dans un pays donné:')
    for line in curs.fetchall():
        print(line)

    conn.close()


if __name__ == '__main__':
    perform_request()

Requête 1

But: Liste des aéroports dans un pays donné

Requête:

SELECT
    *
FROM
    airport,
    country,
    city
WHERE
    airport.id_city = city.id
    AND
    city.id_country = country.id
    AND
    country.name = "France";

Requête 2

But: Liste des aéroports situés à une certaine distance d'un autre aéroport donné en référence

Requête:

  • Version MySQL (avec opérateurs trigonométriques en utilisant le rayon de la Terre)
SELECT
    b.name
FROM
    airport a,
    airport b
WHERE
    a.name = 'Worms Airport'
    AND (
        ACOS(
            COS(a.latitude * PI() / 180)
            * COS(b.latitude * PI() / 180)
            * COS((b.longitude * PI() / 180)
            - (a.longitude * PI() / 180))
            + SIN(a.latitude * PI() / 180)
            * SIN(b.latitude * PI() / 180)
        ) * 6371
    ) < 100
    AND a.id != b.id;
  • Version SQL pure (en utilisant la norme du vecteur formé par les deux aéroports)
SELECT
    b.name
FROM
    airport a,
    airport b
WHERE
    a.name = 'Worms Airport'
    AND (
        ABS(a.latitude - b.latitude)
        - ABS(a.longitude - b.longitude)
    ) * 111.32 <= 100
    AND a.id != b.id;

Requête 3

But: La durée moyenne des vols à destination de Paris utilisant un A380

Requête:
Ne disposant d'aucune information sur la durée de vol ou la vitesse de chacun des appareils, cette requête n'est pas réalisable par simple requêtage de la base de données.

Requête 4

But: Le vol le plus court et le plus long à destination de New York

Requête:
N'ayant aucune information sur le distance des vols (comme dit précédement), cette requête n'était pas réalisable. De plus, le rôle d'une base et d'un sgbd n'est pas d'effectuer ce genre de traitements et algorithmes, il en relève du back office.

Requête 5

But: Le vol avec le plus d'escales dans un même pays

Requête:

SELECT
   a.id, co.name, COUNT(s.id)
FROM
    airway a,
    step_in s,
    airport ai,
    city ci,
    country co
WHERE
    s.id_airway = a.id
    AND
    s.id_airport = ai.id
    AND
    ai.id_city = ci.id
    AND
    ci.id_country = co.id
GROUP BY a.id, co.id
ORDER BY COUNT(s.id) DESC;

Requête 6

But: La liste ordonnées des paires de companies qui collaborent le plus sur les trajets avec escale

Requête:
Nous n'avons pas de moyens de suivre un vol à travers différentes escales s'il emprunte différentes compagnies. Ainsi, il nous est impossible de réaliser cette requête.

Requête 7

But: Par pays, la liste des compagnies qui sont présentes dans tous les aéroports ou à défaut la compagnie la plus présente

Requête:

Non réalisée

Partie II: communication C

Installation

Se rendre dans la partie du projet correspondante, et executer le Makefile.

Organisation du projet

  • main.c sert de point d'accès à cette partie du projet
  • dal/ regroupe les outils de communication avec la base de données
  • tcp/ regroupe des valeurs remarquables utilisées dans le projet (pour les erreurs par exemple)
  • log/ regroupe les outils permettant de logger des valeurs ou textes dans la console
  • client/ et server/ regroupent la logique propre à chaque membre destiné à communiquer sur le réseau
  • algorithms/ regroupe la structure de graph utilisée ainsi que les outils qui l'accompagne; mais aussi l'implémentation de a* et dijkstra

Partie III:

non communiquée