Vous êtes sur la page 1sur 12

Rapport du projet

d’Architecture et
programmation
répartie (RMI)

Application
de gestion
Médicaux
Institut Polytechnique Privé des Sciences
Avancées

Encadrée par : MR Sofiane chtourou


Réalisé par : Fathia zidi
I. Présentation :
Dans ce projet je vais créer une application distribuée de gestion de dossiers médicaux.

• Un patient peut accéder au contenu de son dossier à partir d’une clef. Cet accès n’a qu’un caractère consultatif.

• Un administratif peut créer un dossier en donnant le nom du patient et son numéro de sécurité sociale, il peut
récupérer un dossier en donnant le nom du patient, il peut modifier le nom ou le numéro de sécurité sociale.

• Un médecin peut récupérer un dossier en donnant le nom du patient, il peut créer une note, ajouter une note à un
dossier.

II. Modélisation du projet « Diagramme de Classe »

I. Réalisation
1) Développement
Les étapes sont :

 Ecriture des classes :


La classe Dossier_Medical contient les informations nécessaires pour un dossier médical tel que les
informations de patient et les note.
Un patient caractérise par un nom du patient, son numéro de sécurité.

Une note a un auteur, une date de rédaction et un descriptif qui est un texte.
 Ecriture d’une interface Java : ou on fait la déclaration des services accessibles à distance

 Déclaration d’une classe implémentant l’interface permet Définition du code du service

L’interface DossierMedical contient les méthodes suivantes:

 public void creerDossier(Patient p) : créer un dossier en donnant le nom du patient et son numéro de sécurité
sociale
 void modifierNomPatient(String nom)
 Dossier_Medical rechercherDossier(String Nom) : récupérer un dossier en donnant le nom du patient,
 public Dossier_Medical rechercherDossier(int id) :patient peut accéder au contenu de son dossier à partir d’une
clef
 void CreationNote(String auteur, String date, String desc) : créer une note
 public void addNote(Notes n,int id ) : ajouter une note à un dossier.
 public Vector<Notes> recupererNote(int id) : Récupérer la liste des notes d’un dossier
 public String lireDescriptionNote(int id, int note) : Lire le descriptif d’une note

package implementation;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
import dossier.*;
import exception.*;

public class DossierMedicalImpl extends UnicastRemoteObject implements DossierMedical {

public Patient patient;


private Medecin medecin;
private List<DossierMedicalImpl> dossierMedical;

public DossierMedicalImpl() throws RemoteException {


super();
dossierMedical = new ArrayList<DossierMedicalImpl>();
dossierMedical.add(new DossierMedicalImpl(new Patient("med", 1111)));
dossierMedical.add(new DossierMedicalImpl(new Patient("ali", 2222)));

public DossierMedicalImpl(Patient patient) throws RemoteException {

super();
this.patient = new Patient(patient.getNom(), patient.getNumeroSecurite());

@Override
public DossierMedical consulterDossier(String nom) throws RemoteException, Introuvable {
System.out.println("Recherche dossier par nom");
int index = -1;
for (int i = 0; i < dossierMedical.size(); i++) {
if (dossierMedical.get(i).getPatient().getNom().equalsIgnoreCase(nom)) {
index = i;
break;
}
}
if (index != -1) {
return dossierMedical.get(index);
} else {
throw new Introuvable();
}
}

public Patient getPatient() {


return patient;
}

public void setPatient(Patient patient) {


this.patient = patient;
}

@Override
public void creationDossier(String nom, int numeroSocial) throws RemoteException, ExistDeja {
patient = new Patient(nom, numeroSocial);
DossierMedicalImpl dossier = new DossierMedicalImpl(patient);
dossierMedical.add(dossier);
System.out.println("dossier patient est crée \n");
}

@Override
public void modifierNom(String nom, String nvNom) throws RemoteException {
for (DossierMedicalImpl dossier : dossierMedical) {
if (dossier.getPatient().getNom().equalsIgnoreCase(nom)) {
dossier.getPatient().setNom(nvNom);
}
}
System.out.println("Modifier du nom du patient\n");
}

@Override
public void modifierNumero(String nom, int numeroSocial) throws RemoteException {
for (DossierMedicalImpl dossier : dossierMedical) {
if (dossier.patient.getNom().equalsIgnoreCase(nom)) {
dossier.patient.setNumeroSecurite(numeroSocial);
}
}
System.out.println("modification du numero social du patient\n");
}

@Override
public List<Note> consulterNotes(String nom) throws RemoteException, Inexistant {
int index = 0;
for (int i = 0; i < dossierMedical.size(); i++) {
if ((dossierMedical.get(i).getPatient().getNom().equalsIgnoreCase(nom))) {
index = i;
System.out.println("Consultation note \n");
break;
}
}
if (index != 0) {
return dossierMedical.get(index).getPatient().getNotes();
} else {
throw new Inexistant();
}

@Override
public DossierMedicalImpl ajoutNote(Note note) throws RemoteException {
for (DossierMedicalImpl dossier : dossierMedical) {
if (dossier.getPatient().getNom().equalsIgnoreCase(note.getNomPatient())) {
dossier.getPatient().getNotes().add(note);
// notes.add(note);
System.out.println("Note est bien ajouté au dossier\n");
break;
}
}

return null;
}

@Override
public Note createNote(String nomPatient, String nomMedecin, String date, String noteMsg)
throws RemoteException, Introuvable {

Note note = new Note(nomPatient, nomMedecin, date, noteMsg);


System.out.println("Creation d'une Note ... \n");
return note;
}

public Medecin getMedecin() {


return medecin;
}

public void setMedecin(Medecin medecin) {


this.medecin = medecin;
}

}
 Ecriture du programme client permet :
 Interaction avec le serveur
 Invocation de méthodes distantes
package test;
import java.rmi.Naming;
import java.util.Scanner;
import java.util.Vector;
import cabinet.*;
public class Client {

public static void main(String[] args) {


// TODO Auto-generated method stub
try {

DossierMedical dm = (DossierMedical) Naming.lookup("CabinetMedical");


Scanner scanner = new Scanner(System.in);
String quiter = "n";
String reponse ="n";
while (quiter.equalsIgnoreCase("n")) {
System.out.print("Veuillez saisir votre role: [admin/patient/medecin] \n");
String role = scanner.nextLine();
switch (role.toLowerCase()) {

// espace admin
case "admin":
loop:while (reponse.equalsIgnoreCase("n")) {

System.out.print("Salut admin \n" + "Taper \n1: pour créer un dossier\n"


+ "2: pour Récupérer un dossier à partir d’un nom de
patient\n"
+ "3: pour Modifier le nom du patient \n");
int actionA = scanner.nextInt();
switch (actionA) {
case 1:
System.out.print("Donner le num du securité social \n");
int numss = scanner.nextInt();
System.out.print("Donner le nom du patient \n");
String nom = scanner.next();
Patient p = new Patient(numss, nom);
dm.creerDossier(p);
System.out.println("dossier patient est crée \n");

break;
case 2:
System.out.print("Donner le nom du patient\n");
String nomP = scanner.next();
Dossier_Medical dossier =null;
dossier=dm.rechercherDossier(nomP);

if(dossier!=null){
System.out.println("Nom
patient :"+dossier.getPatient().getNom().toString()+
"\n Numro
social :"+dossier.getPatient().getNumSS());
}
break;

case 3:
System.out.print("Donner le num ss du patient \n");
dm.modifierNomPatient(scanner.next());
System.out.print("Num ss du patient est modifié \n");
break;

default:

System.out.println("Role Action \n");


break loop;

}
System.out.println("Voulez vous quiter le mode admin ? [O/N] \n ");
reponse= scanner.next();
}

// espace patient
case "patient":
// code block
while (reponse.equalsIgnoreCase("n")) {
System.out.print("Taper:\n1: pour Récupérer un dossier en donnant la clef \\n"
+ "2: pour Récupérer la liste des notes d’un dossier\\n"
+ "3: pour Lire le descriptif d’une note\\n");
int actionP = scanner.nextInt();
while(reponse.equalsIgnoreCase("n"))
switch (actionP) {
case 1:
System.out.print("Donner le num ss du patient \n");

Dossier_Medical dossier =dm.rechercherDossier(scanner.nextInt());


if(dossier!=null)
{
System.out.println("Nom patient :"+
dossier.getPatient().getNom()+"\n Numro
social :"+dossier.getPatient().getNumSS());
}
else {
System.out.println("Dossier vide");
}
break;

case 2:
System.out.print("Donner le id du dossier \n");
Vector<Notes> vn=dm.recupererNote(scanner.nextInt());
for(int i=0;i<vn.size();i++)
System.out.print("Note "+i+" : "+vn.elementAt(i).getAuteur()+"
"
+vn.elementAt(i).getDateRed()+" "+vn.elementAt(i).getDescription());

break;
case 3:
System.out.println("Donner id du dossier et du note \n");
String descr=dm.lireDescriptionNote(scanner.nextInt(),
scanner.nextInt());
System.out.println("Description du note : \n"+descr);

break;
default:
System.out.println("Action invalide");
break;
}
System.out.println("Voulez vous quiter le mode patient ? [O/N] ");
reponse= scanner.next();
}
break;

/// espace medecin

case "medecin":
// code block
while (reponse.equalsIgnoreCase("n")) {
System.out.print("Taper: \n 1 pour Récupérer un dossier à partir d’un nom de
patient \n"
+ "2 pour Créer une note \n" + "3 pour Ajouter une note à un
dossier \n");
int action = scanner.nextInt();
switch (action) {
case 1:
dm.rechercherDossier(scanner.next());
break;

case 2:
String auteur = scanner.nextLine();
String date = scanner.nextLine();
System.out.println("donner la description \n");
String desc = scanner.nextLine();
Notes n = new Notes(auteur, date, desc);
System.out.println("Note crée avec Succeés \n");

break;
case 3:

int id = scanner.nextInt();
String auteur1 = scanner.nextLine();
String dateR = scanner.nextLine();
System.out.println("donner la description \n");
String descri = scanner.nextLine();
Notes n2 = new Notes(auteur1, dateR, descri);
dm.addNote(n2, id);
System.out.println("Note ajoutée Succeés \n");

break;
default:
System.out.println("Action invalide");
break;
}
System.out.println("Voulez vous quiter le mode medecin? [O/N] ");
reponse= scanner.next();
}

break;
default:
System.out.println("Role invalide");
break;

System.out.println("voulez vous changer le role ? [O/N] \n");


quiter = scanner.next();
}
}

catch (Exception e) {
}
}

 Ecriture d'un programme serveur permet de :


 Instanciation et enregistrement du servant
 Enregistrement de l’objet distant

On a enregistré l’objet DossierMedicalImp via un service de nommage à travers l’instruction Naming.rebind().


2) Exécution :
Interface Admin :
Interface Medecin :
Interface Patient