Forum INFOMATH
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Exercice: Annuaire téléphonique, enresgitrements et fichiers

Aller en bas

Exercice: Annuaire téléphonique, enresgitrements et fichiers Empty Exercice: Annuaire téléphonique, enresgitrements et fichiers

Message par Napoléon Dim 11 Oct - 23:38

Exercice n°4 Annuaire téléphonique électronique

Un annuaire téléphonique regroupe la liste des abonnés au réseau de téléphonie fixe d’un pays ou d’une région. Un abonné est défini par un ensemble d’informations:

  • Nom et Prénom (non nul)


  • Numéro de téléphone (type numérique commençant ne commençant ni par '0' ni par '00')


  • Adresse (non nul)


  • Code Postal (type numérique compris entre 1000 et 9999)


  • Gouvernerat (non nul)


  • Date inscription (utiliser un type enregistrement T_DATE qui définit l'année, le mois et le jour d'inscription)
Questions :

  1. Identifier puis représenter (Algorithmique et Pascal) les structures de données indiquées dans l’exercice.
  2. Écrire un programme qui utiliser le fichier Annuaire nommé "C:\ANNUAIRE.DAT" s’il existe sinon il le crée et affiche un menu permettant de :


  • Ajouter des abonnés à l’annuaire sachant que deux abonnés ne peuvent pas avoir le même numéro de Tél. L'ajout des abonnés se répètera selon la réponse de l'utilisateur à la question "Ajouter d'autres abonnés O/N?".
  • Modifier l'adresse complète d'un abonné (accès par Numéro de Tél)
  • Supprimer un abonné de l'annuaire (accès par Numéro de Tél)
  • Afficher la liste de tous les abonnés
  • Afficher uniquement les abonnés dont le numéro de téléphone commence par ‘71’.
  • Copier dans un nouveau fichier tous les abonnés qui se sont inscrits en 2009. Le nouveau fichier sera nommé C:\Abonnes_2009.dat
  • Créer des fichiers nommés C:\Abonnes_{ANNEE}.dat qui contient chacun la liste des abonnés de l’année {ANNEE} avec {ANNEE} entre 2000 et 2009.


Dernière édition par nabiL le Lun 12 Oct - 0:02, édité 2 fois
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7672
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Exercice: Annuaire téléphonique, enresgitrements et fichiers Left_bar_bleue999/1000Exercice: Annuaire téléphonique, enresgitrements et fichiers Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Exercice: Annuaire téléphonique, enresgitrements et fichiers Empty Re: Exercice: Annuaire téléphonique, enresgitrements et fichiers

Message par Napoléon Dim 11 Oct - 23:39

Une solution incomplète :

Code:
program annuaire_tel;

uses wincrt;

const
  FICH_A = 'C:\Annuaire.dat';

type
  T_DATE = record
      Annee: 1980..4000;
      Mois : 1..12;
      Jours: 1..31;
  end;

  T_ABONNE = record
      Nom  : String[20];        {Nom}
      Pre  : String[20];        {Prénom}
      Tel  : Longint;          {N°Tél}
      Adr  : String;
      CodP : Word;              {Code Postal}
      Gouv : String[30];        {Gouvernerat}
      DatIn: T_DATE;
     
  end;
  F_ANNUAIRE = file of T_ABONNE;

(**********************************************)
VAR
  FA: F_ANNUAIRE;
  OPTION: 1..9;

(**********************************************)
procedure CREER_OUVRIR(var fa: F_ANNUAIRE);
begin
  Assign(fa,FICH_A);
  {$I-}
    Reset(fa);
  {$I+}
  if (IOResult <> 0) then
      Rewrite(fa)
  else
      Seek(fa, FilePos(fa));
end;

(**********************************************)
function EXISTE_TEL_FICHIER(numTel: Longint; nomfichier: String):boolean;
var
  fa: F_ANNUAIRE;
  abonne: T_ABONNE;
  existe: Boolean;
begin
  Assign(fa,nomfichier);
  Reset(fa);
  existe:= false;
  while (not EOF(fa)) and (not existe) do
  begin
    read(fa,abonne);
    existe := (abonne.Tel = numTel);
  end;
  Close(fa);
  EXISTE_TEL_FICHIER := existe;
end;

(**********************************************)
procedure SAISIE_ABONNE(var abonne: T_ABONNE);
begin
  with abonne do
  begin
    repeat
      write('Nom: '); readln(nom);
      write('Prénom: '); readln(pre);     
    until (length(Nom)>0) and (length(Pre)>0);

    {Vérifier l'unicité du N°Tel dans l'annuaire}
    repeat
      write('N°Tel: '); readln(Tel);
    until (Tel>0) and (Not EXISTE_TEL_FICHIER(Tel,FICH_A));

    write('Adresse: '); readln(Adr);
    write('Code Postal: '); readln(CodP);
    write('Gouvernerat: '); readln(Gouv);

    writeln('Date inscription ');
    write(' > Année inscription: '); readln(DatIn.Annee);
    write(' > Mois inscription: ') ; readln(DatIn.Mois);
    write(' > Jour inscription: ') ; readln(DatIn.Jours);           
  end;
end;

(**********************************************)
procedure AJOUTER_ABONNE(var fa: F_ANNUAIRE);
var
  reponse: char;
  abonne : T_ABONNE;
begin
  Writeln('**** AJOUTER DES ABONNES ***');
  repeat
    SAISIE_ABONNE(abonne);
    write(fa, abonne);
    write('Continuer(O/N)? ');
    readln(reponse);
    writeln('_______________');
  until (UPCASE(reponse) in ['n','N']);
end;

(**********************************************)
procedure AFFICHER_ABONNE(abonne: T_ABONNE);
begin
  writeln('---------------------------------');
  writeln('...... DETAILS D''UN ABONNE .....');
  writeln('---------------------------------');
  with abonne do
  begin
    Writeln('> Nom: ',Nom);
    Writeln('> Prénom: ',Pre);
    Writeln('> Num Tel: ',Tel);
    Writeln('> Adresse: ',Adr);
    Writeln('> Code Postal: ',CodP);
    Writeln('> Gouvernerat: ',Gouv);
    Writeln('> Date Inscription: ',DatIn.Jours,'/',
              DatIn.Mois,'/',DatIn.Annee);
  end; 
end;

(**********************************************)
procedure AFFICHER_ANNUAIRE(var fa: F_ANNUAIRE);
var
  abonne: T_ABONNE; 
begin
  Seek(fa, 0);
  while (not EOF(fa)) do
  begin
    read(fa, abonne);
    AFFICHER_ABONNE(abonne);
  end;
end;


(**********************************************)
(* PROGRAMME PRINCIPAL *)
(**********************************************)

BEGIN

  CREER_OUVRIR(FA);

  Repeat

    writeln('========================================* ');
    Writeln(' MENU PRINCIPAL - ANNUAIRE ELECTRONIQUE | ');
    writeln('========================================* ');

    Writeln(' 1. Ajouter des abonnés');
    Writeln(' 2. Afficher tous les abonnés');
    Writeln(' 9. Quitter');
    Writeln;
    Write(' >  Option: ');

    Readln(OPTION);

    Case (OPTION) of
      1:    AJOUTER_ABONNE(FA);
      2:    AFFICHER_ANNUAIRE(FA);
      9:    Begin
              Writeln('**** Fermeture de l''annuaire.');
              CLOSE(FA);
            End;
    end;

  until (OPTION = 9);

END.
Napoléon
Napoléon
Admin
Admin

Masculin
Nombre de messages : 2934
Localisation : Tunisie
Réputation : 122
Points : 7672
Date d'inscription : 19/03/2007

Feuille de personnage
Capacité linguistique:
Exercice: Annuaire téléphonique, enresgitrements et fichiers Left_bar_bleue999/1000Exercice: Annuaire téléphonique, enresgitrements et fichiers Empty_bar_bleue  (999/1000)

https://infomath.1fr1.net

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum