Web viewRapport de stage en développement . Informatique. Visualisation des h. oraires. Du...

34
Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg Page 12 Rapport de stage Rapport de stage en développement Informatique Visualisation des horaires https://www.eia-fr.ch/fr/

Transcript of Web viewRapport de stage en développement . Informatique. Visualisation des h. oraires. Du...

Rapport de stage

Rapport de stage en développement Informatique

Visualisation des horaires

https://www.eia-fr.ch/fr/

Du 21/05/2013 au 18/07/2013

Page 1Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Rapport de stage en développement informatiqueEcole de La Joliverie

Sujet

Visualisation des horaires

Romain GouzerhEtudiant BTS SIO 1er année

Promotion 2012 - 2013Préparant le diplôme de technicien supérieur de service informatique aux organisations

Option : Solutions Logicielles et Applications Métiers

Maitres de stage EIA de FribourgRichard Baltensperger

Nayla Sokhn([email protected][email protected])

Ecole d’ingénierie et d’architecture de Fribourg

Boulevard de Pérolles 80CP 32

1700 Fribourg026 429 66 11

Référent et correspondant à La JoliverieNicolas Bourgeois

([email protected])Ecole La Joliverie

141 route de ClissonBP 43229

44232 ST SEBASTIEN SUR LOIRE CEDEX02 40 80 25 80

Pour toute remarque, suggestion ou question, contact : [email protected]

Page 2Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Table des matièresIntroduction :......................................................................................................................................................5

- Résumé.......................................................................................................................................................5

- Présentation de l’école...............................................................................................................................5

- Contexte de la mission................................................................................................................................5

- Contraintes.................................................................................................................................................6

- Documents fournis.....................................................................................................................................6

Chapitre 1 : Matlab.............................................................................................................................................6

- Matlab........................................................................................................................................................6

- Les fichiers dBase........................................................................................................................................7

- Interfacer Matlab........................................................................................................................................8

Chapitre 2 : Code................................................................................................................................................8

- Restriction des données.............................................................................................................................8

- Conversion de types.................................................................................................................................11

Principe de l’application :.................................................................................................................................12

Chapitre 3 : Interface graphique.......................................................................................................................13

- Étude du visuel.........................................................................................................................................13

- Réalisation des maquettes........................................................................................................................13

- Choix du visuel..........................................................................................................................................13

- Création d’une interface graphique simple...............................................................................................13

- Création figure et tableau.........................................................................................................................14

- Gestion la largeur des colonnes................................................................................................................16

Chapitre 4: Gestion du projet...........................................................................................................................17

- Compte rendu journalier..........................................................................................................................17

- Compte rendu hebdomadaire..................................................................................................................17

- Gantt Project............................................................................................................................................17

- Réunions...................................................................................................................................................17

Chapitre 5 : Problèmes rencontrés...................................................................................................................18

Chapitre 6 : Ce que le projet m'a apporté........................................................................................................18

Chapitre 7 : Conclusion.....................................................................................................................................18

Annexe 1 : Maquettes application....................................................................................................................19

Annexe 2 : Code de l’application.......................................................................................................................19

Annexe 3: Fichier dBase....................................................................................................................................25

Page 3Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Introduction :

- Résumé Dans le cadre de ma formation de BTS SIO à l’école LA JOLIVERIE j’ai réalisé un stage dans l’école d’ingénieur et d’architecture de Fribourg, entre le 18 mai 2013 et 18 juillet 2013. Mon stage s’est déroulé au sein du service des horaires. Pendant ce stage, j’ai eu l’opportunité d’être immergé dans un contexte professionnel et m’a permis d’acquérir de nombreuses connaissances aussi bien dans le plan professionnel que personnel.

- Présentation de l’école

L’École d'ingénieurs et d'architectes de Fribourg (EIA-FR) est un établissement d’enseignement supérieur, qui appartient au réseau de la Haute École spécialisée de Suisse occidentale (HES-SO), et se situe à Fribourg, en Suisse. Fondée en 1896, à la pointe de la technologie, l'Ecole d'ingénieurs et d'architectes de Fribourg forme les ingénieur-e-s et architectes HES de demain, détenteurs et détentrices de bachelor HES-SO. Dans une cité universitaire, centre de culture et d'échanges économiques. ( Source  : https://www.eia-fr.ch/fr/eia-bref/mot)

- Contexte de la mission

La visualisation de l’horaire global est importante car cela peut faciliter la tâche de la personne qui confectionne l’horaire. Un cours donné par un professeur à une classe à un moment donné utilise plusieurs ressources :

1. Le professeur qui donne le cours

2. La classe pour laquelle le cours est donnée

3. Le local dans lequel le cours est donné

Un certain nombre de professeurs de l’Ecole d’ingénieurs et d’architectes de Fribourg donnent des cours sur deux sites différents (Pérolles et Beauregard) qui ne sont pas proches géographiquement (environ 15 minutes de déplacement entre les deux sites). L’idée de ce projet est de visualiser spécifiquement les données liées aux ressources classe et professeur. La visualisation de l’horaire va permettre à la personne qui confectionne l’horaire de mieux repérer les personnes qui enseignent sur deux sites. Ainsi l’horaire sera confectionné de façon à ce que les déplacements inconfortables soient minimisés pour les ressources classe et professeur.

Page 4Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

- Contraintes

Ce projet ayant pour but la visualisation de certaines données comporte plusieurs contraintes importantes :

L’utilisation de MatLab : L’utilisation de cet outil et langage de développement est nécessaire pour éviter un problème compatibilité. En effet l’application de gestion de l’horaire étant développée en MatLab il est préférable de développer cette application dans le même langage.

L’ergonomie : Cette application a pour but d’afficher un grand nombre d’informations pour visualiser différents horaires. Ainsi l’une des plus grande contrainte est d’afficher un maximum d’informations dans une fenêtre et de façon le plus clair possible pour l’utilisateur

La demande de l’utilisateur : Cette application ayant pour but finale d’être utilisé par un utilisateur, le client du projet, il faut s’adapter aux contraintes de ce dernier.

- Documents fournis

Pour mener à bien ce projet plusieurs documents papier m’ont été fournis :

Horaire : Ce fichier contient tous les chiffres important concernant les horaires. Soit les occupations des locaux, l’effectif des classes, les filières et les contraintes d’occupation des salles

Les emplois du temps professeurs (simple et détaillé)

Le détail d’occupation des salles

Guide d’introduction à Matlab

Et aussi deux fichiers DBF :

AHORAIRE.DBF : Qui regroupe toutes les informations concernant les emplois du temps (Profs, classes, cours, durée cours…etc.)

PROFS.DBF : Qui correspond à toutes les informations détaillées pour chaque professeur.

Chapitre 1 : Matlab

- Matlab

MATLAB, matrix laboratory, est un langage de développement de quatrième génération et un environnement de développement. Ce langage est dédié aux applications scientifique et pour développer des solutions nécessitant de très grande puissance de calcul. Il a été développé par la société The Mathworks, MATLAB permet la manipulation de matrices, création et affichage de courbes, création d’interface utilisateur…etc. De plus MATLAB peut s’interfacer avec d’autres langages comme le C, C++, Java et Fortran.

Page 5Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

1 Current Folder (Dossier courants) : Affiche le dossier où sont placés les scripts utilisés.

2 Command Window : Fenêtre qui permet l’exécution des commandes et l’affichage des résultats.

3 Workspace : Contient toute les variables crées.

4 Commande History : Affiche toute les commandes utilisées même ci ces dernières ont été supprimé ou si Matlab a été fermé

- Les fichiers dBase

Les fichiers utilisés dans ce projet ont pour extensions .DBF, cela correspond à un fichier dBase. C’est une base de données, SGBD, qui a pour but de partager des fichiers de données entre plusieurs utilisateurs.

Page 6Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

12

3

4

Rapport de stage

- Interfacer Matlab

Dès le début de mon projet il m’a fallu trouver le moyen d’interfacer MATLAB avec la documentation concernant les horaires afin de pouvoir utiliser les données qu’ils contiennent. Le problème a été que les fichiers utilisés ont pour extensions .DBF, j’ai tout d’abord commencé par ouvrir les fichiers DBF avec Excel. J’ai notamment utilisé la fonction xlsread afin de lire et récupéré les chaines de caractères contenues dans les cellules Excel, avec les arguments de sortie et d’entrées :

Il faut donc procéder de la même manière mais pour un .DBF :

Ainsi la liaison entre MATLAB et le fichier des horaires est établi et je peux récupérer les informations voulue.

Chapitre 2 : Code

- Restriction des données

Après avoir récupéré toutes les informations des fichiers DBF dans une matrice je dois récupérer uniquement les données voulue, soit les informations concernant les locaux de Beauregard (Figure 1). Sachant que les locaux commençaient par « BEA » il est nécessaire de trouver le moyen de rechercher ces 3 lettres et d’afficher les lignes correspondantes du fichier AHORAIRE.DBF :

Pseudo code 1 : 

Figure 1 : Matrice des données concernant les locaux Beauregard du fichier AHORAIRE.DBF

[Valeurs Texte] = xlsread('monFichier.xls');

Page 7Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

[raw, name] = dbfread('AHORAIRE.DBF');

Locaux = La colonne 9 correspondant aux locauxBeauregard = Recherche des caractères ‘BEA’ dans la colonne 9

Pour toutes les cellules correspondant à la recherche établie dans la variable Beauregard

Si la cellule contient ‘BEA’

Alors elle est = 1

FinFinDonnées Beauregard = Toutes les lignes ou il y a un ‘1’

Rapport de stage

Page 8Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Ainsi après avoir obtenu les lignes voulue j’ai récupérer les lignes qui correspondent aux profs et mis les informations aux bons endroits sur les 60 périodes que compte la semaine. En effet chaque journée correspond à 12 périodes de cours et donc 60 périodes sur une semaine.

Pseudo code 2 : 

Le même principe est repris pour l’affichage des horaires de classes, il y a juste les variables qui changent.

Page 9Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Profs Beauregard = colonne 11 des donnée concernant uniquement les données BeauregardIsprof BeauRegard = Recherche ligne par ligne des profs correspondant aux locaux Beauregard

Pour toutes les cellules ayant la taille de la variable isprofs BeauRegard

Si la cellule contient un resultat vrais pour la recherche isprof BeauRegard

Alors elle (l’indice) est = 1

FinFinSi l’indice existe

Données profs = informations dans les lignes qui ont pour indice 1

Si Données profs est remplis

Pour toutes les lignes

Heure début = a la colonne 6 de Données profs

Heure fin = (Heure début + la colonne 7 de données profs)-1

Classe = a la colonne 4 de Données profs

Cours = a la colonne 2 de Données profs

Locaux = a la colonne 9 de Données profs

Ligne = affichage variable Classe, Cours, Locaux

FinFin

Fin

Rapport de stage

Puis il faut enlever les lignes égales à 0, qui n’ont aucune valeur. Pour après pouvoir rattacher le tableau aux acronymes de professeur enseignant à Beauregard.

Pseudo code 3 :

- Conversion de typesLe problème de conversion est un point qui revient souvent car il faut manipuler plusieurs type : string, char, cell, double…etc.J’ai donc du convertir les variables grâce à différentes fonction :

Convertir un nombre en chaine de caractères :

Convertir un caractère en format cellule :$

Accéder aux valeurs d’une cellule :

Pour accéder à une cellule il faut utiliser des « () » mais pour avoir acces directement aux valeur qu’il y a dans une cellule il faut mettre des « {} »

Page 10Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Pour toutes les lignes du tableau

Si la ligne contient des nombres différents de 0

On garde

Sinon

On élimine la ligne

On élimine l’acronyme

FinFin

Matrice profs = Acronyme professeurs de Beauregard + tableau

dure=num2str(duree);

duree=char2cell(duree)';

cours = donnees_prof{i, 2};

Rapport de stage

Principe de l’application :

Pour visualiser le prince de l’application, je vais présenter les appels des différents codes sous forme de schéma :

Pour éviter d’avoir un code trop lourd j’ai séparé en différente partie :

gene_horaire : Qui correspond au script principal. Il affiche la première interface graphique de l’application, celui du choix des emplois du temps.

Pb_call : Qui correspond à la fonction qui choisira quelle fonction choisir en fonction de l’action faite par l’utilisateur sur la gene_horaire.

Horaire_Profs /Horaire_Classes : Qui correspond à la fonction qui va faire la restriction des informations voulu. Exemple : Récupérer toutes les lignes correspondant aux locaux Beauregard

Horaire_beau/horaireClass_beau : Qui correspond a la fonction qui va afficher les informations de certaines colonnes des fonction Horaire_Profs et Horaire_Classes. Et les afficher correctement sur les 60 périodes de cours que compte la semaine.

Page 11Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

pb_call

gene_horaire

Horaire_Profs Horaire_Classes

horaire_beau horaireClass_beau

OU

Rapport de stage

Chapitre 3 : Interface graphique

- Étude du visuel

Tout d’abord il fallait rechercher la meilleure façon d’afficher les informations, qui sont nombreuses. Afficher sous forme de tableau a été une évidence pour ce type d’application qu’est la visualisation des horaires. Apres il fallait que la visualisation sois claire pour l’utilisateur ainsi il a été question de placer des boutons pour faire la restriction des informations voulue. Et avoir ainsi le choix de ce que veut voir l’utilisateur.

- Réalisation des maquettes

La réalisation des maquettes est une étape importante du projet car c’est le moment ou le visuel final sera choisi. Ainsi deux maquettes en été créées :

Maquettes 1 : Voir page 18

La première étant une visualisation simple des horaires. Cette façon d’afficher avait été évoquée en réunion car elle est très proche de l’affichage papier des horaires.

Maquette 2 : Voir page 18

La deuxième est une visualisation plus différente car plus horizontale. Dans ce cas l’affichage des périodes de cours est mis dans la longueur.

- Choix du visuel

Après proposition des deux maquettes en réunion et au client c’est la deuxième qui a été choisie. En effet celle-ci propose plus d’opportunités pour rajouter des options pour les restrictions de visualisation.

- Création d’une interface graphique simple

Il existe deux méthodes de développement des interfaces graphiques sous MATLAB. La première utilise un outil graphique dédié et la seconde nécessite de programmer entièrement à la main. Pour ce projet j’ai préféré utiliser la deuxième pour une raison, la facilité de compréhension. En effet l’outil graphique dédié génère automatiquement du code qu’il n’est pas facile de comprendre, c’est pour cela que j’ai préféré tout faire à la main.

Page 12Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

duree=[1:60];%--Transformer en charduree=num2str(duree);%--Transformer char en cellduree=char2cell(duree)';%--Nom de colonnes columnnames =['Classes',duree];

Rapport de stage

- Création figure et tableau

Premièrement il m’a fallu créer une fenêtre, une figure pour afficher les résultats :

Pour pouvoir ouvrir la fenêtre en plein écran il faut utiliser la position : [0 0 1 1 ]

Puis la création du tableau :

dat = uitable(‘Parent’,f,’Data’,dat,… ‘Position’,[40 40 1500 920],… ‘ColumnName’,columnnames,… ‘Columnwidth’,’auto’,… ‘fontsize’,10,… ‘RowName’,[],… ‘tag’,’uitable’);

Pour gérer la position il faut modifier chaque chiffre qui correspondent à :

[Gauche, Bas, Largeur, Hauteur]

Il a fallu gérer aussi les noms de colonne. La première étant soit classe ou profs et les 61 autres étant les 60 périodes de la semaine. Et convertir les numéros en cellule (voir chapitre 2 : Conversion de types)

Page 13Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

f=figure( 'Units', 'Normalized', 'Position', [0 0 1 1]);

Rapport de stage

Page 14Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Périodes de cours allant de 1 à 60Informations emploi du temps Profs ou ClasseColonne des acronymes

professeurs ou numéro de classes

L’encadrement bleu : Représente la figure créée avec Matlab. C’est-à-dire la fenêtre de l’application.

L’encadrement rouge : Représente le tableau créé avec Matlab. C’est-à-dire l’emploi du temps de l’application.

Rapport de stage

- Gestion la largeur des colonnes

Les largeurs de colonnes ne s’ajustant pas automatiquement à la taille maximum de celle-ci il a fallu trouver une solution : Pseudo code 4 :

Puis après la création du tableau, il suffit de faire appel à la variable Maximum Taille :

CellMaxLen étant égale à Maximum Taille.

Page 15Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Taille Tableau = Trouve la taille de la variable Maximum taille = Tableau pour stocker les longueurs maximales trouvées

Pour toutes les lignes du tableau

Si une longueur maximale est trouvée

Longueur = conserve dans Maximum Taille que les données qui ont une longueur max

End

Si la colonne est égale à 0

Maximum taille = Maximum taille + 5

End

Si c’est la colonne 1

Maximum taille = Maximum taille + 7

EndEnd

set(dat, 'ColumnWidth', cellMaxLen);

Rapport de stage

Chapitre 4: Gestion du projet

- Compte rendu journalier

Afin de gérer au mieux le projet il m’a été demandé de réaliser un compte rendu journalier. Ce compte rendu a pour but de visualiser l’avancement dans la semaine, ainsi l’organisation et la planification du projet est facilitée. Ce compte rendu comprend :

La date et les horaires de la journée Les réalisations de la journée Les problèmes rencontrés durant cette journée Les taches prévues pour la journée suivante avec la date.

- Compte rendu hebdomadaire

Sur la demande de l’école La Joliverie il était demandé de rendre un compte rendu hebdomadaire. Ce compte rendu permet aux professeurs de suivre l’avancement du projet tout au long des 2 mois de stage. Le compte rendu comprenait :

Coordonnées importantes pour le stage Un rappel du contexte Compte rendu du travail effectué (liste des tâches avec leur description) Observations et compte rendu global Objectifs pour la semaine suivante

- Gantt Project

Pour faciliter la planification du projet nous avons choisi d’utiliser Gantt Project après l’essai de nombreux autres outils de planifications de projet. Nous avons utilisés utilisé Gantt Project car d’une part c’est une application gratuite mais c’est surtout une application que j’ai déjà eu l’occasion d’utiliser.

- Réunions

Chaque vendredi nous avions des réunions avec nos maitres de stage pour faire le point sur nos avancées de la semaine, problèmes rencontrés, demandes de détails sur certains points…etc. Ces réunions permettaient aussi de présenter des points importants du projet. Pour mon projet, il s’agissait de la présentation des maquettes, par exemple. Suite à ces réunions nous devions réaliser un PV faisant le compte rendu de ce qui a été évoquées durant la séance. Puis le faire valider par nos maitres de stage.

Page 16Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Chapitre 5 : Problèmes rencontrés

Le principal problème qui a fait que j’en ai rencontré d’autres par la suite est que je ne connaissais pas du tout MatLab et son environnement de développement avant mon arrivé à l’école de Fribourg. Du coup il m’a fallu un temps pour m’adapter à ce langage, le comprendre et l’utiliser. Il y aussi le fait que la documentation sur MatLab est très limitée, en Français, sur internet. Les cours, tutoriels, forums…etc. Sont presque uniquement en anglais et le problème de la langue s’est posé. Ne connaissant aucune fonction, n’ayant aucune expérience cela m’a donc ralenti dans mon projet. En rentrant plus dans le détail j’ai eu des soucis au niveau des différentes versions MatLab. En effet sur les anciennes versions il y avait possibilités de créer des interfaces plus complètes, comme par exemple modifier les couleurs des cellules. MatLab n’étant pas spécialisé dans la création d’interface graphique il a été compliqué de gérer l’affichage des tableaux et leur contenu. Mon projet étant de visualiser un emploi du temps dans une interface graphique il est difficile d’utiliser un langage, Matlab, qui n’est pas optimisé pour ce genre d’utilisation. Matlab étant un langage axé sur le développement d’application scientifique ne peut créer que des interfaces graphiques peu détaillées.

Chapitre 6 : Ce que le projet m'a apporté

Ce projet m’a apporté beaucoup de connaissance aussi bien au niveau gestion de projet en milieu professionnel qu’en connaissance informatique. J’ai pu voir et participer à la gestion d’un projet du début à la fin. Ce stage m’aura donnée plus d’assurance pour mes futures études, stages et emplois grâce aux connaissances acquises. En effet le contact fournisseur/client m’était inconnu, le fait de devoir faire face à de nouvelles contraintes en milieu de projet , gérer le temps de chaque parties de projet…etc. Est une expérience très importante. L’utilisation de MatLab m’a permis de développer ma logique de programmation et d’ajouter ce langage à mon portefeuille de langages informatiques. N’ayant jamais eu une tel expérience ce stage ne pouvait qu’être enrichissant à tous points vue.

Chapitre 7 : Conclusion

Ce projet m’a permis d’apprendre énormément tout au long de ces deux mois et ainsi être un réel plus pour ma poursuite d’étude. Réaliser un projet dans un cadre semi-professionnel est une expérience très important durant mes études, ainsi je peux me faire une idée de ce qu’est le monde du travail dans le milieu de l’informatique. Malgré les problèmes rencontrés j’ai pris énormément de plaisir à réaliser ce projet dans l’école d’ingénierie et d’architecture de Fribourg et restera une expérience importante pour mes étude.

De plus je remercie l’école d’ingénieur et d’architecte de Fribourg de nous avoir accueillies durant ces 2 mois et d’avoir organisé tout notre stage. Je remercie plus particulièrement M. Richard Baltensperger et Mme. Nayla Sokhn de nous avoir encadrés et guidés durant tout notre stage.

Page 17Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

Annexe 1 : Maquettes application

Première maquette :

Deuxième maquette, celle choisi pour le visuel final :

Annexe 2 : Code de l’application

gene_horaire.m :

%--Création figure de choix des emplois du tempsS.fh = figure('units','pixels',... 'position',[400 400 350 300],... 'menubar','none',... 'name','test',... 'numbertitle','off',... 'resize','off');%--Création du groupe de boutonS.bg = uibuttongroup('units','pix',... 'pos',[30 110 220 100]);%--Création boutons radios pour le choix des emplois du tempsS.rd(1) = uicontrol(S.bg,... 'style','rad',... 'unit','pix',... 'position',[20 50 70 30],... 'string','Horaire Classe');S.rd(2) = uicontrol(S.bg,... 'style','rad',... 'unit','pix',... 'position',[20 10 70 30],... 'string','Horaire Profs');%--Création du bouton pour générer les emplois du tempsS.pb = uicontrol('style','push',... 'unit','pix',... 'position',[75 20 100 30],... 'string','Obtenir horaire',... 'callback',{@pb_call,S});

Page 18Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Graph_test.xlsx

Graph_test2.xlsx

Rapport de stage

pb_call.m :

function [] = pb_call(varargin)S = varargin{3};%--Choisi la fonction a appeler suivant le bouton radio choisiswitch findobj(get(S.bg,'selectedobject')) case S.rd(1) Horaire_Profs(); case S.rd(2) Horaire_Classes();end

Horaires_Profs.m :

function Horaire_Profs()[donnees, name] = dbfread('PROFS.DBF');%--Lecture du fichier AHORAIRE.DBF[raw, name] = dbfread('AHORAIRE.DBF');%--Indexage logique pour récupérer les données commençant par 'BEA'% raw = raw(strncmp(raw, 'BEA',3));%--Récupération du tableauProf de meme taille que raw (1 pour BEA* , sinon 0)locaux = raw(:, 9);% Récupération des locaux BEAisBEA = strfind(locaux, 'BEA');for i = 1:length(isBEA) if ~isempty(isBEA{i}) idx(i) = 1; endendidx = idx';donnees_BEA = raw(find(idx), :);[n,m] = size(donnees);%--Récupération de la colonne des acronymestous_profs = donnees(:,2);%--Intialisation d'un tableauProf a 0tableauProf = cell(n, 60); %--Appel à la fonction horaire_beaufor i = 1:n [tableauProf(i,:)] = horaire_beau(donnees_BEA, tous_profs{i});end%--Initialisation de tableaux videstab = [];profs_bea = []; %--Enlève les lignes ayant que des '0'for i = 1: n aux = tableauProf(i,:); for j=1:length(aux) aux1=aux{j}; if isempty(aux1)==0 tab = [tab; tableauProf(i, :)]; profs_bea = [profs_bea; tous_profs(i)];

Page 19Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

break end end endmat_prof=[profs_bea,tab];%--Création de la figure et ouverture en pleine écranf=figure( 'Units', 'Normalized', 'Position', [0 0 1 1]);%--Variable contenant les valeur de la matrice mat_profdat=mat_prof;%--Création des noms de colonnes correspondant aux horairesduree=[1:60];%--Transformer en charduree=num2str(duree);%--Transformer char en cellduree=char2cell(duree)';%--Nom de colonnes columnnames =['PROFS',duree];%--Trouve la taille de la vraible 'dat'dataSize = size(dat);%--Créer un tableauProf pour stocker la longueur maximale des données pour chaque colonnemaxLen = zeros(1,dataSize(2));%--Trouve la longueur maximale des données pour chaque colonne ( pour toutes% les lignes et colonnes)for i=1:dataSize(2) %--Ignitialisation compteur K pour les colonnes égale à 0 k=1; for j=1:dataSize(1) len = length(dat{j,i}); %--Conserver dans maxLen que si lesdonnées qui ont une longueur max if(len > maxLen(1,i)) k=0; maxLen(1,i) = len; end %--Si la colonne est égale à 0 alors i+5 if k==1 maxLen(1,i) = 5; end %--la colonne 1 correspondant au acronyme prendra pour taille 3 %comme le columnname étant plus grand il faut rajouter +4 à i if i==1 maxLen(1,i) = len+4; end endend%--Calibration de la largeur des colonnes qui sont en pixelscellMaxLen = num2cell(maxLen*7); %--Centre la fenêtremovegui('center');%--Création du tableauProf avec les arguments voulusdat = uitable('Parent',f,'Data',dat,... 'Position',[40 40 1500 920],... 'ColumnName',columnnames,... 'Columnwidth','auto',... 'fontsize',10,... 'RowName',[],... 'tag','uitable');%--Régle la largeur de colonne de UILabelset(dat, 'ColumnWidth', cellMaxLen);

Page 20Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

end

Horaire_Classes.m:

function Horaire_Classes()[donnees, name] = dbfread('PROFS.DBF');%--Lecture du fichier AHORAIRE.DBF[raw, name] = dbfread('AHORAIRE.DBF');%--Indexage logique pour récupérer les données commençant par 'BEA'% raw = raw(strncmp(raw, 'BEA',3));%--Récupération du tableauProf de meme taille que raw (1 pour BEA* , sinon 0)locaux = raw(:, 9);% Récupération des locaux BEAisBEA = strfind(locaux, 'BEA');for i = 1:length(isBEA) if ~isempty(isBEA{i}) idx(i) = 1; endendidx = idx';donnees_BEA = raw(find(idx), :);[n,m] = size(donnees);%--Récupération de la colonne des classestout_classe=raw(:,4);tableauClasse = cell(n, 60); %--Appel à la fonction horaireClass_beau;for i = 1:n [tableauClasse(i,:)] = horaireClass_beau(donnees_BEA, tout_classe{i});end%--Initialisation de tableaux videstab1 = [];classe_bea = [];num_class= [];%--Enlève les lignes ayant que des '0'for i = 1: n aux2 = tableauClasse(i,:); for j=1:length(aux2) aux3=aux2{j}; if isempty(aux3)==0 tab1 = [tab1; tableauClasse(i, :)]; classe_bea = [classe_bea; tout_classe(i)]; break end end endmat_classe=[classe_bea,tab1];%--Création de la figure et ouverture en pleine écranf=figure( 'Units', 'Normalized', 'Position', [0 0 1 1]);%--Variable contenant les valeur de la matrice mat_profdat=mat_classe;%--Création des noms de colonnes correspondant aux horaires

Page 21Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

duree=[1:60];%--Transformer en charduree=num2str(duree);%--Transformer char en cellduree=char2cell(duree)';%--Nom de colonnes columnnames =['Classes',duree];%--Trouve la taille de la vraible 'dat'dataSize = size(dat);%--Créer un tableauProf pour stocker la longueur maximale des données pour chaque colonnemaxLen = zeros(1,dataSize(2));%--Trouve la longueur maximale des données pour chaque colonne ( pour toutes% les lignes et colonnes)for i=1:dataSize(2) %--Ignitialisation compteur K pour les colonnes égale à 0 k=1; for j=1:dataSize(1) len = length(dat{j,i}); %--Conserver dans maxLen que si lesdonnées qui ont une longueur max if(len > maxLen(1,i)) k=0; maxLen(1,i) = len; end %--Si la colonne est égale à 0 alors i+5 if k==1 maxLen(1,i) = 5; end %--la colonne 1 correspondant au acronyme prendra pour taille 3 %comme le columnname étant plus grand il faut rajouter +10 à i if i==1 maxLen(1,i) = len+10; end endend%--Calibration de la largeur des colonnes qui sont en pixelscellMaxLen = num2cell(maxLen*7); %--Centre la fenêtremovegui('center');%--Création du tableauProf avec les arguments voulusdat = uitable('Parent',f,'Data',dat,... 'Position',[40 40 1500 920],... 'ColumnName',columnnames,... 'Columnwidth','auto',... 'fontsize',10,... 'RowName',[],... 'tag','uitable');%--Régle la largeur de colonne de UILabelset(dat, 'ColumnWidth', cellMaxLen);end

Page 22Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

horaire_beau.m:

function [ligne] = horaire_beau(donnees, prof) profs_BEA = donnees(:, 11);ligne =cell(1, 60);%--Recherche locaux commençant par BEAisprof_BEA = strfind(profs_BEA, prof);%--Si un locaux correspond a la recherche il aura pour indice 1for i = 1:length(isprof_BEA) if ~isempty(isprof_BEA{i}) idx(i) = 1; endend%--Si il a un indice il faut alors le mettre a l'horizontale if exist('idx') idx = idx';%--Recherche des indice trouvés donnees_prof = donnees(find(idx), :); [n m] = size(donnees_prof); if ~isempty(donnees_prof) for i = 1:n heure_debut = donnees_prof{i, 6}; heure_fin = heure_debut + donnees_prof{i, 7} - 1; %--numéro classe class = donnees_prof{i, 4}; %--numéro cours cours = donnees_prof{i, 2}; %--locaux loc=donnees_prof{i,9}; c=num2str(cours); %--Affiche les variable ligne(heure_debut:heure_fin) = cellstr(strcat(class,{' '},c,{' '},loc)); endendend

Page 23Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg

Rapport de stage

horaireClass_beau.m:

function [ligne] = horaireClass_beau(donnees, prof) classe_BEA = donnees(:, 4);ligne =cell(1, 60);%--Recherche locaux commençant par BEAisprof_BEA = strfind(classe_BEA, prof);%--Si un locaux correspond a la recherche il aura pour indice 1for i = 1:length(isprof_BEA) if ~isempty(isprof_BEA{i}) idx(i) = 1; endend%--Si il a un indice il faut alors le mettre a l'horizontale if exist('idx') idx = idx';%--Recherche des indice trouvés donnees_prof = donnees(find(idx), :); [n m] = size(donnees_prof); if ~isempty(donnees_prof) for i = 1:n %--Heure de début du cour heure_debut = donnees_prof{i, 6}; %--Calcule de la durée du cours et placement sur la bonne période heure_fin = heure_debut + donnees_prof{i, 7} - 1; %--numéro classe profs = donnees_prof{i, 11}; %--numéro cours cours = donnees_prof{i, 2}; %--locaux loc=donnees_prof{i,9}; c=num2str(cours); %--Affiche les variable ligne(heure_debut:heure_fin) = cellstr(strcat(profs,{' '},c,{' '},loc)); endendend

Annexe 3: Fichier dBase

Fichier dBase AHORAIRE.DBF:

Fichier dBase PROFS.DBF:

Page 24Romain Gouzerh EIA-FR |Ecole d’ingénierie et d’architecture de Fribourg