-- Code Ada du logiciel bilan -- with Gnat.Io; use Gnat.Io; procedure bilan_beta is -- Specifications -- {preconditions : - } -- {postconditions : - } type fiche_clients is record numero_client : integer; nom_client : integer; nombre_produit : integer; montant_total : integer; end record; type clients is array(1..10) of fiche_clients ; tab_clients : clients; n,i,choix : Integer; procedure affichage_donnees_clients(tab_clients : in clients; n : in integer ) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Les donnees (nom, numéro, nombre de produits achetés, --- montant total) de chaque clients sont affichées } begin put ("Liste des clients :"); new_line; new_line; for i in 1..n loop put("nom : "); put (tab_clients(i).nom_client); new_line; put("numero : "); put (tab_clients(i).numero_client); new_line; put ("Nombre de produits achetes : "); put (tab_clients(i).nombre_produit); new_line; put ("Montant total : "); put (tab_clients(i).montant_total); new_line; new_line; end loop; end; ---- procedure affichage_donnees_numero(tab_clients : in clients; n : in integer) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Le nombre de produit achetés et le montant total payé par le client ayant le numéro -- (donné par l'utilsateur) est affiché } numero,vide : integer; begin put ("Entrez le numéro du client : "); get (numero); new_line; vide := 1; for i in 1..n loop if tab_clients(i).numero_client = numero then vide := 0; put ("Le nombre de produit achetés par ce client est : "); put (tab_clients(i).nombre_produit); new_line; put ("Le montant total payé par ce client est : "); put (tab_clients(i).montant_total); new_line; new_line; end if; end loop; if vide = 1 then put ("Ce numéro n'est pas attribué."); new_line; new_line; end if; end; --- procedure produits(tab_clients : in clients; n : in integer ) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : le nom du client ayant acheté le plus / moins de produits est affiché} meilleur_i : integer; meilleur_nombre : integer; pire_i : integer; pire_nombre : integer; begin meilleur_nombre := tab_clients(1).nombre_produit; meilleur_i := 1; for i in 2..n loop if tab_clients(i).nombre_produit > meilleur_nombre then meilleur_nombre := tab_clients(i).nombre_produit; meilleur_i := i; end if; end loop; put ("Le client ayant achete le plus de produits est : "); put (tab_clients(meilleur_i).nom_client); new_line; pire_nombre := tab_clients(1).nombre_produit; pire_i := 1; for i in 2..n loop if tab_clients(i).nombre_produit < pire_nombre then pire_nombre := tab_clients(i).nombre_produit; pire_i := i; end if; end loop; put ("Le client ayant achete le moins de produits est : "); put (tab_clients(pire_i).nom_client); new_line; new_line; end; ---- procedure intervalle(tab_clients : in clients; n : in integer) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : La liste des clients ayant versé un montant compris entre a et --- b (donnés par l'utilisateur) à l'entreprise est affichée } a,b,vide : integer; begin vide := 1; put ("Afficher la liste des clients ayant paye entre (entrez le premier nombre) "); get(a); put(" et (entrez le second nombre) "); get(b); new_line; put("Les clients correspondants a vos criteres sont : "); new_line; new_line; for i in 1..n loop if tab_clients(i).montant_total >= a then if tab_clients(i).montant_total <= b then put (tab_clients(i).nom_client); vide := 0; new_line; end if; end if; end loop; if vide = 1 then put("Il n'existe aucun client répondant à vos criteres."); new_line; end if; new_line; end; ---- procedure moyenne_montant(tab_clients : in clients; n : integer) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : La somme moyenne versée à l'entreprise par un client est affichée } somme, moyenne : integer; begin somme := 0; for i in 1..n loop somme := somme + tab_clients(i).montant_total; end loop; moyenne := somme / n; put("La somme moyenne versee a l'entreprise par un client est : "); put(moyenne); new_line; new_line; end; ---- procedure paye(tab_clients : in clients; n : in integer ) is -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Le nom du client ayant versé la plus grosse / faible somme à l'entreprise et affiché } meilleur_i : integer; meilleur_montant : integer; pire_i : integer; pire_montant : integer; begin meilleur_montant := tab_clients(1).montant_total; meilleur_i := 1; for i in 2..n loop if tab_clients(i).montant_total > meilleur_montant then meilleur_montant := tab_clients(i).montant_total; meilleur_i := i; end if; end loop; put ("Le client ayant verse la plus grosse somme a l'entreprise est : "); put (tab_clients(meilleur_i).nom_client); new_line; pire_montant := tab_clients(1).montant_total; pire_i := 1; for i in 2..n loop if tab_clients(i).montant_total < pire_montant then pire_montant := tab_clients(i).montant_total; pire_i := i; end if; end loop; put ("Le client ayant verse la plus faible somme a l'entreprise est : "); put (tab_clients(pire_i).nom_client); new_line; new_line; end; --- Debut de la procedure principale Begin i:= 1; Put ("Bienvenue dans le programme de Bilan."); new_line; new_line; --- Debut de l'enregistrement des clients put ("Combien de client avez-vous ? "); get (n); new_line; for i in 1..n loop put ("Entrez le nom du client : "); get (tab_clients(i).nom_client); put ("Entrez le numero du client : "); get (tab_clients(i).numero_client); put ("Entrez le nombre total de produits achetes par le client : "); get (tab_clients(i).nombre_produit); put ("Entrez la somme totale que le client a paye : "); get (tab_clients(i).montant_total); put ("Client enregistre."); new_line; new_line; end loop; put ("Tous vos clients ont bien ete enregistres."); new_line; new_line; --- Affichage des choix utilisateurs while choix /= 0 loop put ("| 1 Afficher la liste des clients"); new_line; put ("| 2 Afficher le client ayant achete le plus / moins de produits"); new_line; put ("| 3 Afficher les clients dont le nombre de produits achetes est compris entre a et b"); new_line; put ("| 4 Afficher le client qui a paye la plus forte / faible sommme a l'entreprise"); new_line; put ("| 5 Afficher la somme moyenne versee par un client a l'entreprise"); new_line; put ("| 6 Afficher le nombre de produits achetés et le montant total payé pour un client donné"); new_line; put ("| 0 Quitter le programme"); new_line; new_line; put ("Choisissez l'operation a realiser : "); get(choix); new_line; new_line; --- Traitement des choix utilisateurs if choix = 1 then affichage_donnees_clients(tab_clients, n); end if; if choix = 2 then produits(tab_clients, n); end if; if choix = 3 then intervalle(tab_clients, n); end if; if choix = 4 then paye(tab_clients, n); end if; if choix = 5 then moyenne_montant(tab_clients, n); end if; if choix = 6 then affichage_donnees_numero(tab_clients, n); end if; end loop; put("Merci d'avoir utilise notre soft de Bilan."); new_line; new_line; end;
L'algorithme correspondant à ce petit programme est le suivant :
-- Algorithme du logiciel de bilan -- procedure bilan_beta -- Specifications -- {preconditions : - } -- {postconditions : - } type fiche_clients enregistrement numero_client : entier; nom_client : entier; nombre_produit : entier; montant_total : entier; fin; type clients tableau[1..10] de fiche_clients ; tab_clients : clients; n,i,choix : entier; procedure affichage_donnees_clients(tab_clients : clients; n : entier ) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Les donnees (nom, numéro, nombre de produits achetés, --- montant total) de chaque clients sont affichées } debut ecrire ("Liste des clients :"); pour i de 1..n faire ecrire("nom : "); ecrire (tab_clients(i).nom_client); ecrire("numero : "); ecrire (tab_clients(i).numero_client); ecrire ("Nombre de produits achetes : "); ecrire (tab_clients(i).nombre_produit); ecrire ("Montant total : "); ecrire (tab_clients(i).montant_total); fin pour; fin; ---- procedure affichage_donnees_numero(tab_clients : clients; n : entier) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Le nombre de produit achetés et le montant total payé par le client ayant le numéro -- (donné par l'utilsateur) est affiché } numero,vide : entier; debut ecrire ("Entrez le numéro du client : "); lire (numero); vide := 1; pour i de 1..n faire si tab_clients(i).numero_client = numero alors vide := 0; ecrire ("Le nombre de produit achetés par ce client est : "); ecrire (tab_clients(i).nombre_produit); ecrire ("Le montant total payé par ce client est : "); ecrire (tab_clients(i).montant_total); fin si; fin pour; si vide = 1 alors ecrire ("Ce numéro n'est pas attribué."); fin si; fin; --- procedure produits(tab_clients : de clients; n : de entier ) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : le nom du client ayant acheté le plus / modes de produits est affiché} meilleur_i : entier; meilleur_nombre : entier; pire_i : entier; pire_nombre : entier; debut meilleur_nombre := tab_clients(1).nombre_produit; meilleur_i := 1; pour i de 2..n faire si tab_clients(i).nombre_produit > meilleur_nombre alors meilleur_nombre := tab_clients(i).nombre_produit; meilleur_i := i; fin si; fin pour; ecrire ("Le client ayant achete le plus de produits est : "); ecrire (tab_clients(meilleur_i).nom_client); pire_nombre := tab_clients(1).nombre_produit; pire_i := 1; pour i de 2..n faire si tab_clients(i).nombre_produit < pire_nombre alors pire_nombre := tab_clients(i).nombre_produit; pire_i := i; fin si; fin pour; ecrire ("Le client ayant achete le modes de produits est : "); ecrire (tab_clients(pire_i).nom_client); fin; ---- procedure intervalle(tab_clients : de clients; n : de entier) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : La lte des clients ayant versé un montant compr entre a et --- b (donnés par l'utilateur) à l'entreprise est affichée } a,b,vide : entier; debut vide := 1; ecrire ("Afficher la lte des clients ayant paye entre (entrez le premier nombre) "); lire(a); ecrire(" et (entrez le second nombre) "); lire(b); ecrire("Les clients correspondants a vos criteres sont : "); pour i de 1..n faire si tab_clients(i).montant_total >= a alors si tab_clients(i).montant_total <= b alors ecrire (tab_clients(i).nom_client); vide := 0; fin si; fin si; fin pour; si vide = 1 alors ecrire("Il n'exte aucun client répondant à vos criteres."); fin si; fin; ---- procedure moyenne_montant(tab_clients : de clients; n : entier) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : La somme moyenne versée à l'entreprise par un client est affichée } somme, moyenne : entier; debut somme := 0; pour i de 1..n faire somme := somme + tab_clients(i).montant_total; fin pour; moyenne := somme / n; ecrire("La somme moyenne versee a l'entreprise par un client est : "); ecrire(moyenne); fin; ---- procedure paye(tab_clients : de clients; n : de entier ) -- Specifications -- {preconditions : tab_clients, un tableau comportant les donnees des clients, n le nombre de clients } -- {postconditions : Le nom du client ayant versé la plus grosse / faible somme à l'entreprise et affiché } meilleur_i : entier; meilleur_montant : entier; pire_i : entier; pire_montant : entier; debut meilleur_montant := tab_clients(1).montant_total; meilleur_i := 1; pour i de 2..n faire si tab_clients(i).montant_total > meilleur_montant alors meilleur_montant := tab_clients(i).montant_total; meilleur_i := i; fin si; fin pour; ecrire ("Le client ayant verse la plus grosse somme a l'entreprise est : "); ecrire (tab_clients(meilleur_i).nom_client); pire_montant := tab_clients(1).montant_total; pire_i := 1; pour i de 2..n faire si tab_clients(i).montant_total < pire_montant alors pire_montant := tab_clients(i).montant_total; pire_i := i; fin si; fin pour; ecrire ("Le client ayant verse la plus faible somme a l'entreprise est : "); ecrire (tab_clients(pire_i).nom_client); fin; --- Debut de la procedure principale debut i:= 1; ecrire ("Bienvenue dans le programme de Bilan."); --- Debut de l'enregistrement des clients ecrire ("Combien de client avez-vous ? "); lire (n); pour i de 1..n faire ecrire ("Entrez le nom du client : "); lire (tab_clients(i).nom_client); ecrire ("Entrez le numero du client : "); lire (tab_clients(i).numero_client); ecrire ("Entrez le nombre total de produits achetes par le client : "); lire (tab_clients(i).nombre_produit); ecrire ("Entrez la somme totale que le client a paye : "); lire (tab_clients(i).montant_total); ecrire ("Client enregistre."); fin pour; ecrire ("Tous vos clients ont bien ete enregistres."); --- Affichage des choix utilateurs tantque choix /= 0 faire ecrire ("| 1 Afficher la liste des clients"); ecrire ("| 2 Afficher le client ayant achete le plus / moins de produits"); ecrire ("| 3 Afficher les clients dont le nombre de produits achetes est compris entre a et b"); ecrire ("| 4 Afficher le client qui a paye la plus pourte / faible sommme a l'entreprise"); ecrire ("| 5 Afficher la somme moyenne versee par un client a l'entreprise"); ecrire ("| 6 Afficher le nombre de produits achetés et le montant total payé pour un client donné"); ecrire ("| 0 Quitter le programme"); ecrire ("Chosez l'operation a realiser : "); lire(choix); --- Traitement des choix utilateurs si choix = 1 alors affichage_donnees_clients(tab_clients, n); fin si; si choix = 2 alors produits(tab_clients, n); fin si; si choix = 3 alors intervalle(tab_clients, n); fin si; si choix = 4 alors paye(tab_clients, n); fin si; si choix = 5 alors moyenne_montant(tab_clients, n); fin si; si choix = 6 alors affichage_donnees_numero(tab_clients, n); fin si; fin pour; ecrire("Merci d'avoir utile notre soft de Bilan."); fin;