// Version 1 : Gestionnaire d'agenda /////////////////////////////////////////////////////INCLUSIONS INCLUDE "Macro\macro_date.hdl"; // MACRO INCLUDE "DECLARATIONS\declarations.hdl"; // TYPES INCLUDE "CONVERSIONS\conv_date_et_nombre.hdl"; // CONVERSIONS INCLUDE "CONVERSIONS\conv_erreur.hdl"; INCLUDE "CONVERSIONS\conv_mess.hdl"; ////////////////////////////////////////////////////////////////////////////////// DIALOG MAIN SETTINGS FILLER_PENALTY 0.07; RULE_FACTOR -1.0; CONCEPT_FACTOR -1.0; CONCEPT_OVERFLOW 5000; END SETTINGS; /////////////////////////////////////////////////// COMPREHENSION /////////////////////////////////////////////////// RULES //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT REPONSE OUI BOOLEAN : 'oui' { TRUE; } | 'ok' { TRUE; } | 'oui' 'c' 'est' 'cela' { TRUE; } | 'exactement' { TRUE; } | 'oui' 'c' 'est' 'ca' { TRUE; } | 'c' 'est' 'bien' 'ca' { TRUE; } ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT REPONSE NON BOOLEAN : 'non' { TRUE; } | 'non' 'merci' { TRUE; } ; //;;;;;;;;;;;;;;;;;;;;;;;; PARTIE SIGNIFICATIVE NE DOIT PAS ETRE CONSIDERE COMME BRUIT : 'je' 'voudrais' | 'je' 'souhaiterais' | 'consulter' | 'verifier' | 'voir' | 'connaitre' | 'un' 'rendez-vous' | 'le' 'rendez-vous' | 'les' 'rendez-vous' | 'mes' 'rendez-vous' | 'rendez-vous' | 'mon' 'agenda' ; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //;;;;;;;;; CLASSE DE MOTS PERMETTANT DE TRAITER LES NOMBRES //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots CHIFFRE INTEGER nb : 'un' { nb := 1; } | 'une' { nb := 1; } ; INTEGER nb, DATE date : 'dix' { nb := 10; date := $,,10,,; } ; INTEGER nb, DATE date : 'onze' {nb := 11; date := $,,11,,;} ; INTEGER nb, DATE date : 'deux' { nb := 2; date := $,,2,,;} | 'trois' { nb := 3; date := $,,3,,;} | 'quatre' { nb := 4; date := $,,4,,;} | 'cinq' { nb := 5; date := $,,5,,;} | 'six' { nb := 6; date := $,,6,,;} | 'sept' { nb := 7; date := $,,7,,;} | 'huit' { nb := 8; date := $,,8,,;} | 'neuf' { nb := 9; date := $,,9,,;} ; INTEGER nb, DATE date : 'douze' {nb := 12; date := $,,12,,;} | 'treize' {nb := 13; date := $,,13,,;} | 'quatorze' {nb := 14; date := $,,14,,;} | 'quinze' {nb := 15; date := $,,15,,;} | 'seize' {nb := 16; date := $,,16,,;} | 'dix-sept' {nb := 17; date := $,,17,,;} | 'dix-huit' {nb := 18; date := $,,18,,;} | 'dix-neuf' {nb := 19; date := $,,19,,;} ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots DIZAINE_UNITE INTEGER nb : 'vingt' 'et' 'un' {nb:= 21; } | 'trente' 'et' 'un' {nb:= 31; } | 'quarante' 'et' 'un' {nb:= 41; } | 'cinquante' 'et' 'un' {nb:= 51; } | 'soixante' 'et' 'un' {nb:= 61; } | 'soixante' 'et' 'onze' {nb:= 71; } | 'quatre-vingt' 'un' {nb:= 81; } | 'quatre-vingt' 'onze' {nb:= 91; } ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots DIZAINE INTEGER nb : 'vingt' {nb:= 20; } | 'trente' {nb:= 30; } | 'quarante' {nb:= 40; } | 'cinquante' {nb:= 50; } | 'soixante' {nb:= 60; } | 'soixante-dix' {nb:= 70; } | 'quatre-vingt' {nb:= 80; } | 'quatre-vingt-dix' {nb:= 90; } ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots DIZAINE_AUX1 INTEGER nb : 'vingt' {nb:= 20; } | 'trente' {nb:= 30; } | 'quarante' {nb:= 40; } | 'cinquante' {nb:= 50; } | 'soixante' {nb:= 60; } | 'quatre-vingt' {nb:= 80; } ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots DIZAINE_AUX2 INTEGER nb : 'soixante' {nb:= 60;} | 'quatre-vingt' {nb:= 80;} ; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Classe de Mots CHIFFRE_ET_DIZAINES INTEGER nb : { nb := #1.nb; } // 1 | { nb := #1.nb; } // 2-9 | { nb := #1.nb; } // 10 | { nb := #1.nb; } // 11 | { nb := #1.nb; } // 12-19 | { nb := #1.nb; } // 21-31..91 | { nb := #1.nb; } // 20-30..90 | { nb := #1.nb + #2.nb; } // 22-69/82-89 | { nb := #1.nb + #2.nb; } // 72-79/92-99 ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots CENTAINE INTEGER nb : 'cent' {nb:= 100;} // 100 | 'cent' {nb := 100 + #2.nb; } // 101-199 | 'cents' {nb := #1.nb * 100; } //200-300...900 | 'cent' {nb := (#1.nb * 100) + #3.nb; } //201-999 ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots MILLIER INTEGER nb : 'mille' { nb := 1000; } //1000 | 'mille' { nb := 1000 + #2.nb; } //1001-1099 | 'mille' { nb := 1000 + #2.nb; } //1100-1199 | 'mille' { nb := #1.nb * 1000; } //2000-9000 | 'mille' { nb := (#1.nb * 1000) + #3.nb; } //2001-9099 | 'mille' { nb := (#1.nb * 1000) + #3.nb; } //2100-9199 ; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT NOMBRE INTEGER nb : { nb := #1.nb; } // 1-99 | { nb := #1.nb; } // 100 - 199 | { nb := #1.nb; } // 1000 - 1099 ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots JOUR_SEMAINE DATE date : 'lundi' {date := $,,,1,1 ;} | 'mardi' {date := $,,,2,1 ;} | 'mercredi' {date := $,,,3,1 ;} | 'jeudi' {date := $,,,4,1 ;} | 'vendredi' {date := $,,,5,1 ;} | 'samedi' {date := $,,,6,1 ;} | 'dimanche' {date := $,,,7,1 ;} ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots NUMERO DE JOUR DATE date : 'premier' { date := $,,1,, ; } // 1 | { date := #1.date ; } // 2 a 9 | { date := #1.date; } // 10 | { date := #1.date ;} // 11 | { date := #1.date ;} // 12 a 19 | 'vingt' { date := $,,20,, ;} // 20 | 'vingt' 'et' 'un' { date := $,,21,,; } // 21 | 'vingt' 'deux' { date := $,,22,,; } // 22 | 'vingt' 'trois' { date := $,,23,,; } // 22 | 'vingt' 'quatre' { date := $,,24,,; } // 22 | 'vingt' 'cinq' { date := $,,25,,; } // 22 | 'vingt' 'six' { date := $,,26,,; } // 22 | 'vingt' 'sept' { date := $,,27,,; } // 22 | 'vingt' 'huit' { date := $,,28,,; } // 22 | 'vingt' 'neuf' { date := $,,29,,; } // 22 | 'trente' { date := $,,30,,; } // 30 | 'trente' 'et' 'un' { date := $,,31,,; } // 31 ; //;;;;;;;;;;;;;;;;;;;;;;;; Classe de mots MOIS DATE date : 'janvier' {date := $,1,,, ;} | 'fevrier' {date := $,2,,, ;} | 'mars' {date := $,3,,, ;} | 'avril' {date := $,4,,, ;} | 'mai' {date := $,5,,, ;} | 'juin' {date := $,6,,, ;} | 'juillet' {date := $,7,,, ;} | 'aout' {date := $,8,,, ;} | 'septembre' {date := $,9,,, ;} | 'octobre' {date := $,10,,, ;} | 'novembre' {date := $,11,,, ;} | 'decembre' {date := $,12,,, ;} ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT DATE DATE date : 'aujourd' 'hui' {date := CURRENT_DATE; } // date du jour | 'dans' 'la' 'journee' {date := CURRENT_DATE;} // date du jour | {date := #1.date += CURRENT_DATE; } // lundi | 'prochain' {date := #1.date += CURRENT_DATE; } // lundi prochain | 'demain' {date := CURRENT_DATE + 1;} // lendemain | 'apres' 'demain' {date := CURRENT_DATE + 2;} // surlendemain | 'dans' 'deux' 'jours' {date := CURRENT_DATE + 2;} // surlendemain | 'dans' 'jours' {date := CURRENT_DATE + #2.nb;} // un nombre x de jours | {date := (#1.date ?= #2.date)+= CURRENT_DATE ;} // pour lundi 13 | {date := (#1.date ?= (#2.date ?= #3.date)) ?= CURRENT_DATE;} // du lundi 13 novembre | {date := (#1.date ?= #2.date) += CURRENT_DATE;} // du 13 novembre ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT CRENEAU STRING periode : 'le' 'matin' {periode := "matin";} | 'avant' 'midi' {periode := "matin";} | 'l' 'apres-midi' {periode := "apres-midi";} | 'apres' 'midi' {periode := "apres-midi";} ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT HORAIRE Type_heure heureminutes : 'heure' {heureminutes := STRUCT Type_heure (#1.nb, #3.nb); } | 'heures' {heureminutes := STRUCT Type_heure (#1.nb, #3.nb); } | 'heure' {heureminutes := STRUCT Type_heure (#1.nb, 0); } | 'heures' {heureminutes := STRUCT Type_heure (#1.nb, 0); } ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT NUMERO ABONNE INTEGER num_ab : {num_ab := #1.nb ;} ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT CHOIX ACTION STRING t_action : 'consulter' {t_action := "consulter";} | 'ajouter' {t_action := "ajouter";} | 'supprimer' {t_action := "supprimer";} | 'modifier' {t_action := "modifier";} | 'personnes' {t_action := "personnes";} ; //;;;;;;;;;;;;;;;;;;;;;;;; CONCEPT CHOIX personne STRING nomp : 'alexandre' {nomp := "alexandre";} | 'pierre' {nomp := "pierre";} | 'jean' {nomp := "jean";} | 'paul' {nomp := "paul";} | 'jacques' {nomp := "jacques";} ; END RULES; /////////////////////////////////////////////////// VARIABLE VARIABLES MEANINGFUL_FILLER { <- }; YES { <- // lie au concept OUI }; NO { <- // lie au concept NON }; DATE JOUR_RDV // DEFAULT CURRENT_DATE { <- // lie au concept DATE }; DATE JOUR_NOUVEAU // DEFAULT CURRENT_DATE { <- // lie au concept DATE }; INTEGER NUM_ABONNE { <- .num_ab // lie au concept NUMERO dans le cas ou il s'agit d'un numero d'abonne }; STRING CHOIXACTION { <- .t_action // lie au concept CHOIXACTION }; STRING CRENEAU { <- .periode // lie au concept CRENEAU }; Type_heure HORAIRE { <- .heureminutes //lie au concept HORAIRE }; Type_heure HORAIRE_NOUVEAU { <- .heureminutes //lie au concept HORAIRE }; STRING PERSONNE { <- .nomp }; END VARIABLES; ///////////////////////////////////////////////////// KNOWLEDGE KNOWLEDGE COND( !(JOUR_RDV[a].DAY <= 31)) { ERASE JOUR_RDV[a]; } COND(JOUR_RDV[a].MONTH == 2 && ((JOUR_RDV[a].DAY == 29 && JOUR_RDV[a].YEAR % 4 != 0) || (JOUR_RDV[a].DAY > 28))) { ERASE JOUR_RDV[a]; } COND(JOUR_RDV[a].DAY == 31 && (JOUR_RDV[a].MONTH == 4 || JOUR_RDV[a].MONTH == 6 || JOUR_RDV[a].MONTH == 9 || JOUR_RDV[a].MONTH == 11)) { ERASE JOUR_RDV[a]; } COND((HORAIRE[a].heure>24) || (HORAIRE[a].minute>=60)) { ERASE HORAIRE[a]; } END KNOWLEDGE; ///////////////////////////////////////////////////// EVENT HANDLERS //// au niveau de l'application EVENT HANDLER NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } TOO_LONG { CONVERSIONS relance; "ph_relance"; } END EVENT HANDLER; //////////////////////////////////////////////////// VERIFICATION // pour strategie de controle VERIFICATION JOUR_RDV { // reconstruction de la chaine de caracteres correspondant // au jour donne par l'utilisateur CONVERSIONS jour_semaine; CONVERSIONS numero; CONVERSIONS mois; CONVERSIONS annee; "w_" ~AS_STRING(JOUR_RDV.WEEKDAY); IF(JOUR_RDV.DAY == 1) { "n_1e"; } ELSE { "n_" ~AS_STRING(JOUR_RDV.DAY); } "m_" ~AS_STRING(JOUR_RDV.MONTH); "y_" ~AS_STRING(JOUR_RDV.YEAR); } JOUR_NOUVEAU { // reconstruction de la chaine de caracteres correspondant // au jour donne par l'utilisateur CONVERSIONS jour_semaine; CONVERSIONS numero; CONVERSIONS mois; CONVERSIONS annee; "w_" ~AS_STRING(JOUR_NOUVEAU.WEEKDAY); IF(JOUR_NOUVEAU.DAY == 1) { "n_1e"; } ELSE { "n_" ~AS_STRING(JOUR_NOUVEAU.DAY); } "m_" ~AS_STRING(JOUR_NOUVEAU.MONTH); "y_" ~AS_STRING(JOUR_NOUVEAU.YEAR); } NUM_ABONNE { // reconstruction de la chaine de caracteres correspondant au numero donne par l'utilisateur CONVERSIONS numero; "n_" ~AS_STRING(NUM_ABONNE); } CHOIXACTION { CHOIXACTION; } PERSONNE { PERSONNE; } CRENEAU { // reconstruction de la chaine de caracteres correspondant a la periode de la journee IF(CRENEAU == "matin") { "le "~CRENEAU;} ELSE { "l' "~CRENEAU;} } HORAIRE {// reconstruction de la chaine de caracteres correspondant à l'horaire CONVERSIONS numero; "à "; "n_" ~AS_STRING(HORAIRE.heure); " heures "; "n_" ~AS_STRING(HORAIRE.minute); } END VERIFICATION; /////////////////////////////////////////// CONTROLE DU DIALOGUE ACTIONS ////////////////// Comportement en Debut du dialogue (=Priorite Max) COND (ONCE) { LANGUAGE <- "French"; // Determination des ressources linguistiques // necessaires (modeles acoustico-phonetiques // pour la reconnaissance de la langue francaise // lexique) OUTPUT { "Bienvenue sur le serveur de gestion des agendas"; } QUESTION { INIT { "Quel est votre numero d'abonne ?"; } } } ////////////////// Comportement du systeme lorsque le numero d'abonne est indetermine COND (UNDEFINED(NUM_ABONNE)) { QUESTION { INIT { "Veuillez preciser votre numero d'abonne, s'il vous plait?"; } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_numero_abonne; "new_numero"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } ////////////////// Comportement du systeme lors de la confirmation du numero d'abonne COND(VERIFIABLE(NUM_ABONNE)) { QUESTION(YES, NO) { INIT { "Voulez-vous acceder a l'agenda de l'abonne numero "; CONFIRMATION(NUM_ABONNE); } } } COND (UNDEFINED(CHOIXACTION)) { QUESTION { INIT { "Que souhaitez vous faire ? (personnes,consulter,ajouter,supprimer,modifier)"; } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_choixaction; "new_choixaction"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } COND (VERIFIABLE(CHOIXACTION)) { IF(CHOIXACTION == "personnes") { JOUR_RDV := Nouvel_an; JOUR_RDV <- VERIFIED; JOUR_NOUVEAU := Nouvel_an; JOUR_NOUVEAU <- VERIFIED; HORAIRE := STRUCT Type_heure (0, 0); HORAIRE <- VERIFIED; CRENEAU := "indefini"; CRENEAU <- VERIFIED; PERSONNE := UNDEFINED; PERSONNE <- NOT_VERIFIED; } ELSE IF(CHOIXACTION == "consulter") //on demande le jour et la plage horaire { JOUR_RDV := UNDEFINED; JOUR_RDV <- NOT_VERIFIED; JOUR_NOUVEAU := Nouvel_an; JOUR_NOUVEAU <- VERIFIED; HORAIRE := STRUCT Type_heure (0, 0); HORAIRE <- VERIFIED; CRENEAU := UNDEFINED; CRENEAU <- NOT_VERIFIED; PERSONNE := "indefini"; PERSONNE <- VERIFIED; } ELSE IF(CHOIXACTION == "ajouter") //on ne demande que le jour et l'horaire { JOUR_RDV := UNDEFINED; JOUR_RDV <- NOT_VERIFIED; JOUR_NOUVEAU := Nouvel_an; JOUR_NOUVEAU <- VERIFIED; HORAIRE := UNDEFINED; HORAIRE <- NOT_VERIFIED; CRENEAU := "indefini"; CRENEAU <- VERIFIED; PERSONNE := "indefini"; PERSONNE <- VERIFIED; } ELSE IF(CHOIXACTION == "supprimer") //on ne demande que le jour et l'horaire { JOUR_RDV := UNDEFINED; JOUR_RDV <- NOT_VERIFIED; JOUR_NOUVEAU := Nouvel_an; JOUR_NOUVEAU <- VERIFIED; HORAIRE := UNDEFINED; HORAIRE <- NOT_VERIFIED; CRENEAU := "indefini"; CRENEAU <- VERIFIED; PERSONNE := "indefini"; PERSONNE <- VERIFIED; } ELSE IF(CHOIXACTION == "modifier") //on demande le jour et l'horaire, et le nouveau jour { //ne gère pas le nouvel horaire, mais même principe JOUR_RDV := UNDEFINED; JOUR_RDV <- NOT_VERIFIED; JOUR_NOUVEAU := UNDEFINED; JOUR_NOUVEAU <- NOT_VERIFIED; HORAIRE := UNDEFINED; HORAIRE <- NOT_VERIFIED; CRENEAU := "indefini"; CRENEAU <- VERIFIED; PERSONNE := "indefini"; PERSONNE <- VERIFIED; } QUESTION(YES, NO) { INIT { "Souhaitez-vous faire l'action "; CONFIRMATION(CHOIXACTION); } } } ////////////////// Comportement du systeme lorsque le jour du rdv est indetermine COND (UNDEFINED(PERSONNE)) { QUESTION { INIT { "A quelle personne voulez-vous accéder ?"; } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_personne; "new_choixpersonne"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } COND(VERIFIABLE(PERSONNE)) { QUESTION(YES, NO) { INIT { "Vous souhaitez voir tous vos rendez-vous avec "~PERSONNE; CONFIRMATION(PERSONNE); } } } ////////////////// Comportement du systeme lorsque le jour du rdv est indetermine COND (UNDEFINED(JOUR_RDV)) { QUESTION { INIT { IF(CHOIXACTION == "consulter") { "Quel jour souhaitez-vous consulter"; } ELSE IF(CHOIXACTION == "modifier" || CHOIXACTION == "ajouter" || CHOIXACTION == "supprimer") { "Quel jour souhaitez-vous modifier"; } } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_date; "new_date"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } ////////////////// Comportement du systeme lors de la confirmation du jour de rdv COND(VERIFIABLE(JOUR_RDV)) { BOOLEAN RAZ_DATE := FALSE; // Booleen d'annulation de la date IF(JOUR_RDV.WEEKDAY == 6 || JOUR_RDV.WEEKDAY == 7) { // Week-end = pas de rendez-vous => annuler la date // pour pouvoir en redemander une autre OUTPUT { CONVERSIONS week_end; "message_wk"; } RAZ_DATE := TRUE; } ELSE IF( JOUR_RDV == Armistice_14_18 || JOUR_RDV == Noel || JOUR_RDV == Nouvel_an || JOUR_RDV == Premier_mai || JOUR_RDV == Huit_mai || JOUR_RDV == Quatorze_juillet || JOUR_RDV == Quinze_aout ) { // Jour ferie = pas d'emploi du temps => annuler la date // pour pouvoir en redemander une autre OUTPUT { CONVERSIONS ferie; "f_"~AS_STRING(JOUR_RDV.DAY)~"_"~AS_STRING(JOUR_RDV.MONTH); CONVERSIONS Jour_ferie; "message_ferie" ; } RAZ_DATE := TRUE; } // La date reconnue est annulee car aucun rendez-vous ne peut etre pris // Inutile de faire une requete aupres de la BD IF(RAZ_DATE) { // Annulation de la date reconnue JOUR_RDV := UNDEFINED; QUESTION (JOUR_RDV) { INIT { "Veuiller indiquer un autre jour, SVP"; } } } ELSE { // La date donnee est valide = Le systeme demande confirmation // de la date donnee par l'utilisateur QUESTION(YES, NO) { INIT { "Souhaitez-vous acceder l'agenda pour la date du "~AS_STRING(JOUR_RDV.WEEKDAY); CONFIRMATION(JOUR_RDV); JOUR_NOUVEAU := UNDEFINED; JOUR_NOUVEAU <- NOT_VERIFIED; } } } } ////////////////// nouveau jour COND (UNDEFINED(JOUR_NOUVEAU)) { QUESTION { INIT { "Quelle est le jour du nouveau rendez-vous"; } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_date; "new_date"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } ////////////////// Comportement du systeme lors de la confirmation du jour de rdv COND(VERIFIABLE(JOUR_NOUVEAU)) { BOOLEAN RAZ_DATE := FALSE; // Booleen d'annulation de la date IF(JOUR_NOUVEAU.WEEKDAY == 6 || JOUR_NOUVEAU.WEEKDAY == 7) { // Week-end = pas de rendez-vous => annuler la date // pour pouvoir en redemander une autre OUTPUT { CONVERSIONS week_end; "message_wk"; } RAZ_DATE := TRUE; } ELSE IF( JOUR_NOUVEAU == Armistice_14_18 || JOUR_NOUVEAU == Noel || JOUR_NOUVEAU == Nouvel_an || JOUR_NOUVEAU == Premier_mai || JOUR_NOUVEAU == Huit_mai || JOUR_NOUVEAU == Quatorze_juillet || JOUR_NOUVEAU == Quinze_aout ) { // Jour ferie = pas d'emploi du temps => annuler la date // pour pouvoir en redemander une autre OUTPUT { CONVERSIONS ferie; "f_"~AS_STRING(JOUR_NOUVEAU.DAY)~"_"~AS_STRING(JOUR_NOUVEAU.MONTH); CONVERSIONS Jour_ferie; "message_ferie" ; } RAZ_DATE := TRUE; } // La date reconnue est annulee car aucun rendez-vous ne peut etre pris // Inutile de faire une requete aupres de la BD IF(RAZ_DATE) { // Annulation de la date reconnue JOUR_NOUVEAU := UNDEFINED; QUESTION (JOUR_NOUVEAU) { INIT { "Veuiller indiquer un autre jour, SVP"; } } } ELSE { // La date donnee est valide = Le systeme demande confirmation // de la date donnee par l'utilisateur QUESTION(YES, NO) { INIT { "Souhaitez-vous que votre rendez-vous soit le "; CONFIRMATION(JOUR_NOUVEAU); } } } } ////////////////// Comportement du systeme lorsque la periode est indeterminee COND (UNDEFINED(CRENEAU)) { QUESTION { INIT { "Quelle periode de la journee vous interesse ?"; } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_periode; "new_periode"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } ////////////////// Comportement du systeme lors de la confirmation de la periode COND(VERIFIABLE(CRENEAU)) { QUESTION(YES, NO) { INIT { "Vous souhaitez des informations concernant vos rendez-vous prevus "; CONFIRMATION(CRENEAU); } } } COND(UNDEFINED(HORAIRE)) { QUESTION { INIT { IF(CHOIXACTION == "consulter") { "Quel horaire de la journee vous interesse ?"; } ELSE IF(CHOIXACTION == "modifier") { "Donnez l'heure du rendez-vous a modifier"; } ELSE IF(CHOIXACTION == "ajouter") { "Donnez l'heure du nouveau rendez-vous"; } ELSE IF(CHOIXACTION == "supprimer") { "Donnez l'heure du rendez-vous a supprimer"; } } NOTHING_UNDERSTOOD { CONVERSIONS erreur_sur_horaire; "new_horaire"; } NOTHING_RECORDED { CONVERSIONS relance; "ph_relance"; } } } COND(VERIFIABLE(HORAIRE)) { QUESTION(YES, NO) { INIT { "Vous souhaitez acceder a votre rendez-vous prevu "; CONFIRMATION(HORAIRE); } } } ////////////////// Comportement lorsque les elements indispensables a la ////////////////// requete ont ete determines COND (TRUE) { // avant de proceder a la requete aupres de la OUTPUT { CONVERSIONS recherche_info; "ph_recherche"; } IF(CHOIXACTION == "personnes") { OUTPUT { "Voici vos rendez-vous avec "~PERSONNE; } } IF(CHOIXACTION == "consulter") { OUTPUT { "Voici vos rendez-vous.................."; } } ELSE IF(CHOIXACTION == "modifier") { OUTPUT { "Votre rendez-vous a ete modifie"; } } ELSE IF(CHOIXACTION == "ajouter") { OUTPUT { "Votre rendez-vous a ete ajoute"; } } ELSE IF(CHOIXACTION == "supprimer") { OUTPUT { "Votre rendez-vous a ete supprime"; } } OUTPUT // Cloture du dialogue { CONVERSIONS au_revoir; "ph_au_revoir"; } BYE; } END ACTIONS; END DIALOG MAIN.