Révision - Fichier

Voir le sujet précédent Voir le sujet suivant Aller en bas

Révision - Fichier

Message  Hanafi le Ven 17 Avr - 2:30

Problème

Un médecin veut informatiser la gestion de son cabinet. On se propose de l’aider à travers
un programme permettant d’effectuer les tâches suivantes :
· Ajouter un nouveau patient
· Modifier les informations relatives à un patient
· Attribuer un RDV pour un patient donné
· Afficher les informations relatives à un patient donné
· Afficher la liste des patients
· Afficher la liste des patients ayant un RDV à une date donnée
· Quitter l’application
Sachant qu’un patient est caractérisé par :
- Un numéro de dossier
- Un nom_prénom
- Une date de naissance (jour, mois, année)
- Une date du prochain RDV (jour, mois, année)

Questions
1) Quelles sont les structures de données adéquates à ce problème ? Justifier le choix
de chaque structure proposée.
2) Analyser et déduire l’algorithme du programme principal qui permet de réaliser le
traitement décrit précédemment en le décomposant en modules.
3) Analyser chacun des modules proposés précédemment et en déduire les algorithmes
correspondants.

Proposé par B.BEYA Hassen
avatar
Hanafi

Messages : 106
Date d'inscription : 25/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Prog Pascal

Message  Ilyes KHAILI le Mer 22 Avr - 20:36

Salut tout le monde lol!
voici le prog pascal de ce problème:

uses wincrt;
type
date=record
jour:1..31;
mois:1..12;
annee:word;
end;
patient=record
num:integer;
np:string[30];
dna:date;
drdv:date;
end;
fpat=file of patient;
var
f:fpat;
p:patient;
procedure ajpa;
function testdate(a,m,j:word):boolean;
var
test:boolean;
begin
test:=j in[1..31];
if (m=4)or(m=6)or(m=9)or(m=11)then
test:=test and(j in[1..30]);
if a mod 4 =0 then
if m=2 then
test:=test and (j in[1..29]);
if a mod 4 <>0 then
if m=2 then
test:=test and (j in[1..28]);
testdate:=test;
end;
begin
with p do
begin
write('. Le numéro de dossier du patient : ');readln(num);
write('. Le nom et le prénom du patient : ');readln(np);
writeln('. Date de naissance : ');
repeat write(' année : ');readln(dna.annee); until (dna.annee>=1900)and(dna.annee<=2009);
repeat write(' mois : ');readln(dna.mois); until dna.mois in[1..12];
repeat write(' Jour : ');readln(dna.jour); until testdate(dna.annee,dna.mois,dna.jour);
writeln('. Date du prochain RDV :');
repeat write(' année : ');readln(drdv.annee); until (drdv.annee>=2009);
repeat write(' mois : ');readln(drdv.mois); until drdv.mois in[1..12];
repeat write(' Jour : ');readln(drdv.jour); until testdate(drdv.annee,drdv.mois,dna.jour);
end;
end;

procedure ajout;
begin
ajpa;
seek(f,filesize(f));
write(f,p);
end;

function recherche(x:integer):boolean;
begin
reset(f);
read(f,p);
while (not eof(f))and(x<>p.num) do
read(f,p);
seek(f,filepos(f)-1);
recherche:= x=p.num;
end;

procedure modifier;
var
x:integer;
begin
write('Donner le numéro du patient a modifier : ');readln(x);
if recherche(x) then
begin
ajpa;
write(f,p);
end
else
write('Patient inexistant.');
readln;
end;

procedure rdv;
var
x:integer;
begin
write('Donner le numéro du patient : ');readln(x);
if recherche(x) then
begin
read(f,p);
seek(f,filepos(f)-1);
writeln('Donner la date du RDV :');
read(p.drdv.jour);write('/');read(p.drdv.mois);write('/');readln(p.drdv.annee);
write(f,p);
end
else
begin
write('Patient inexistant.');
readln;
end;
end;

procedure affinf;
var
x:integer;
begin
write('Donner le numéro du patient : ');readln(x);
if recherche(x) then
begin
read(f,p);
with p do
begin
writeln('.Numéro du dossier : ',num);
writeln('.Nom et prénom : ',np);
writeln('. Date de naissance :',dna.jour,'/',dna.mois,'/',dna.annee);
writeln('. Date du prochain RDV :',drdv.jour,'/',drdv.mois,'/',drdv.annee);
end;
end
else
write('Patient inexistant.');
readln;
end;

procedure afficher;
begin
reset(f);
while not eof(f) do
begin
read(f,p);
with p do
begin
writeln('.Numéro du dossier : ',num);
writeln('.Nom et prénom : ',np);
writeln('. Date de naissance :',dna.jour,'/',dna.mois,'/',dna.annee);
writeln('. Date du prochain RDV :',drdv.jour,'/',drdv.mois,'/',drdv.annee);
end;
readln;
end;
end;

procedure affrdv;
function condition(x,y:date):boolean;
begin
condition:=(x.jour=y.jour)and(x.mois=y.mois)and(x.annee=y.annee);
end;
var
x:date;
begin
reset(f);
writeln('Donner la date du RDV :');
read(x.jour);write('/');read(x.mois);write('/');readln(x.annee);
while not eof(f) do
begin
read(f,p);
if condition(x,p.drdv) then
begin
with p do
begin
writeln('.Numéro du dossier : ',num);
writeln('.Nom et prénom : ',np);
writeln('. Date de naissance :',dna.jour,'/',dna.mois,'/',dna.annee);
writeln('. Date du prochain RDV :',drdv.jour,'/',drdv.mois,'/',drdv.annee);
end;
readln;
end;
end;
end;

procedure menu;
var
choix:1..7;
begin
repeat
clrscr;
writeln;
writeln;
writeln(' · 1 Ajouter un nouveau patient');
writeln(' · 2 Modifier les informations relatives à un patient');
writeln(' · 3 Attribuer un RDV pour un patient donné');
writeln(' · 4 Afficher les informations relatives à un patient donné');
writeln(' · 5 Afficher la liste des patients');
writeln(' · 6 Afficher la liste des patients ayant un RDV à une date donnée');
writeln(' · 7 Quitter l’application');
readln(choix);
case choix of
1:ajout;
2:modifier;
3:rdv;
4:affinf;
5:afficher;
6:affrdv;
end;
until choix=7;
end;

begin
assign(f,'patients.dat');
{$i-}
reset(f);
{$i+}
if ioresult<>0 then
rewrite(f);
menu;
close(f);
writeln(' ILYES Copyright® 2009');
writeln(' tous droits réserver');
end.
king

Ilyes KHAILI

Messages : 24
Date d'inscription : 13/11/2008
Age : 27

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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