0% ont trouvé ce document utile (0 vote)
9 vues12 pages

Algorithm Alert

Le document décrit un algorithme et ses implémentations pour un système d'alerte de résultats académiques. Il inclut des fonctions pour vérifier les nouveaux résultats, envoyer des notifications par email, SMS ou push selon les préférences des étudiants, et mettre à jour l'état des notifications dans la base de données. Des exemples d'implémentations en Java, Python, HTML et C sont fournis, ainsi qu'une architecture complémentaire pour le système.

Transféré par

simeonbazana8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues12 pages

Algorithm Alert

Le document décrit un algorithme et ses implémentations pour un système d'alerte de résultats académiques. Il inclut des fonctions pour vérifier les nouveaux résultats, envoyer des notifications par email, SMS ou push selon les préférences des étudiants, et mettre à jour l'état des notifications dans la base de données. Des exemples d'implémentations en Java, Python, HTML et C sont fournis, ainsi qu'une architecture complémentaire pour le système.

Transféré par

simeonbazana8
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd

# Algorithme et Implémentations pour un Système d'Alerte de Résultats

## Algorithme Principal

```

FONCTION EnvoyerAlertesPublicationResultats()

// 1. Vérifier les nouveaux résultats publiés

nouveaux_resultats = BDD.Requête("SELECT * FROM resultats WHERE date_publication = aujourdhui()


AND NOTifié = false")

// 2. Pour chaque nouvel résultat trouvé

POUR CHAQUE resultat IN nouveaux_resultats FAIRE

// 3. Récupérer l'étudiant concerné

etudiant = BDD.Requête("SELECT * FROM etudiants WHERE id = ?", resultat.etudiant_id)

// 4. Récupérer les préférences de notification

preferences = BDD.Requête("SELECT * FROM preferences_notification WHERE etudiant_id = ?",


etudiant.id)

// 5. Envoyer les notifications selon les préférences

SI preferences.email THEN

EnvoyerEmail(etudiant.email, "Nouveau résultat disponible", GenererMessageResultat(resultat))

FIN SI

SI preferences.sms THEN

EnvoyerSMS(etudiant.telephone, "Résultat disponible: " + resultat.cours)


FIN SI

SI preferences.push THEN

EnvoyerNotificationMobile(etudiant.device_token, "Nouveau résultat", resultat.cours)

FIN SI

// 6. Marquer comme notifié

BDD.Maj("UPDATE resultats SET notifié = true WHERE id = ?", resultat.id)

FIN POUR

FIN FONCTION

FONCTION GenererMessageResultat(resultat)

RETOURNER "Bonjour " + resultat.etudiant_nom +

", votre résultat pour " + resultat.cours +

" est maintenant disponible: " + resultat.note +

"\nAccédez à votre espace: " + URL_PORTAL

FIN FONCTION

```

## Implémentations

### 1. Java (Spring Boot)

```java

@Service
public class NotificationService {

@Autowired

private ResultatRepository resultatRepo;

@Autowired

private EtudiantRepository etudiantRepo;

@Autowired

private EmailService emailService;

@Autowired

private SMSService smsService;

@Scheduled(cron = "0 0 18 * * ?") // Tous les jours à 18h

public void envoyerAlertesResultats() {

List<Resultat> nouveauxResultats =
resultatRepo.findByNotifieFalseAndDatePublication(LocalDate.now());

nouveauxResultats.forEach(resultat -> {

Etudiant etudiant = etudiantRepo.findById(resultat.getEtudiantId()).orElseThrow();

if (etudiant.getPreferences().isEmail()) {

String message = String.format(

"Bonjour %s, votre résultat pour %s est maintenant disponible: %s",

etudiant.getNom(), resultat.getCours(), resultat.getNote());


emailService.envoyer(etudiant.getEmail(), "Nouveau résultat disponible", message);

if (etudiant.getPreferences().isSms()) {

smsService.envoyer(etudiant.getTelephone(),

"Résultat disponible: " + resultat.getCours());

resultat.setNotifie(true);

resultatRepo.save(resultat);

});

```

### 2. Python (Django)

```python

from django.core.mail import send_mail

from .models import Resultat, Etudiant

import requests # Pour les SMS

def envoyer_alertes():

nouveaux_resultats = Resultat.objects.filter(

date_publication=date.today(),
notifie=False

for resultat in nouveaux_resultats:

etudiant = Etudiant.objects.get(pk=resultat.etudiant_id)

if etudiant.preferences.email:

message = f"""Bonjour {etudiant.nom},

Votre résultat pour {resultat.cours} est disponible: {resultat.note}

Accédez à votre espace: https://votreecole.edu"""

send_mail(

'Nouveau résultat disponible',

message,

'[email protected]',

[etudiant.email],

fail_silently=False,

if etudiant.preferences.sms:

sms_data = {

'api_key': 'VOTRE_CLE_API',

'to': etudiant.telephone,

'message': f'Résultat {resultat.cours} disponible'

}
requests.post('https://api.sms-provider.com/send', data=sms_data)

resultat.notifie = True

resultat.save()

```

### 3. HTML (Page de Préférences)

```html

<!DOCTYPE html>

<html lang="fr">

<head>

<meta charset="UTF-8">

<title>Préférences de notification</title>

</head>

<body>

<h1>Gérer vos préférences de notification</h1>

<form id="preferencesForm">

<div>

<input type="checkbox" id="emailNotif" name="email" checked>

<label for="emailNotif">Recevoir les alertes par email</label>

</div>

<div>
<input type="checkbox" id="smsNotif" name="sms">

<label for="smsNotif">Recevoir les alertes par SMS</label>

<input type="tel" id="phoneNumber" name="phone" placeholder="Votre numéro">

</div>

<div>

<input type="checkbox" id="pushNotif" name="push" checked>

<label for="pushNotif">Notifications push sur mobile</label>

</div>

<button type="submit">Enregistrer les préférences</button>

</form>

<script>

document.getElementById('preferencesForm').addEventListener('submit', async (e) => {

e.preventDefault();

const formData = {

email: document.getElementById('emailNotif').checked,

sms: document.getElementById('smsNotif').checked,

phone: document.getElementById('phoneNumber').value,

push: document.getElementById('pushNotif').checked

};

try {
const response = await fetch('/api/preferences', {

method: 'POST',

headers: { 'Content-Type': 'application/json' },

body: JSON.stringify(formData)

});

if (response.ok) {

alert('Préférences enregistrées avec succès!');

} catch (error) {

console.error('Erreur:', error);

});

</script>

</body>

</html>

```

### 4. C (Version Simplifiée)

```c

#include <stdio.h>

#include <stdbool.h>

#include <string.h>
typedef struct {

int id;

char nom[100];

char email[100];

char telephone[20];

bool prefer_email;

bool prefer_sms;

} Etudiant;

typedef struct {

int id;

int etudiant_id;

char cours[50];

char note[10];

bool notifie;

} Resultat;

void envoyer_email(const char* email, const char* sujet, const char* message) {

printf("Envoi email à %s\nSujet: %s\nMessage: %s\n", email, sujet, message);

void envoyer_sms(const char* telephone, const char* message) {

printf("Envoi SMS à %s\nMessage: %s\n", telephone, message);

}
void notifier_resultats(Resultat resultats[], int nb_resultats, Etudiant etudiants[], int nb_etudiants) {

for (int i = 0; i < nb_resultats; i++) {

if (!resultats[i].notifie) {

for (int j = 0; j < nb_etudiants; j++) {

if (etudiants[j].id == resultats[i].etudiant_id) {

if (etudiants[j].prefer_email) {

char message[256];

snprintf(message, sizeof(message),

"Bonjour %s, votre résultat pour %s est %s",

etudiants[j].nom, resultats[i].cours, resultats[i].note);

envoyer_email(etudiants[j].email, "Nouveau résultat", message);

if (etudiants[j].prefer_sms) {

char sms[100];

snprintf(sms, sizeof(sms), "Résultat %s: %s",

resultats[i].cours, resultats[i].note);

envoyer_sms(etudiants[j].telephone, sms);

resultats[i].notifie = true;

break;

}
}

int main() {

// Exemple d'utilisation

Etudiant etudiants[2] = {

{1, "Jean Dupont", "[email protected]", "0612345678", true, false},

{2, "Marie Martin", "[email protected]", "0698765432", true, true}

};

Resultat resultats[3] = {

{1, 1, "Mathématiques", "A", false},

{2, 2, "Physique", "B+", false},

{3, 1, "Informatique", "A-", false}

};

notifier_resultats(resultats, 3, etudiants, 2);

return 0;

```

## Architecture Complémentaire

Pour un système complet, vous auriez besoin de :


1. **Base de données** avec tables :

- Etudiants (id, nom, email, telephone, etc.)

- Resultats (id, etudiant_id, cours, note, date_publication, notifié)

- Preferences_notification (etudiant_id, email, sms, push)

2. **API endpoints** (REST) pour :

- Publier de nouveaux résultats

- Gérer les préférences

- Consulter les résultats

3. **Services externes** pour :

- Envoi d'emails (SendGrid, Mailgun)

- Envoi de SMS (Twilio, Infobip)

- Notifications push (Firebase)

Vous aimerez peut-être aussi