Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:laboratoare:lab12cb [2014/01/12 16:39]
bogdan.nicula [Cerinte Laborator]
programare:laboratoare:lab12cb [2014/01/13 20:38] (current)
bogdan.nicula [Tools]
Line 51: Line 51:
  
 ===== Enuntul laboratorului ===== ===== Enuntul laboratorului =====
- 
----- 
  
 Vom simula baza de date a unui laborator de analize. O parte din aceasta va fi deja implementata,​ iar voi trebuie doar sa aduceti imbunatatiri codului deja-existent. Vom simula baza de date a unui laborator de analize. O parte din aceasta va fi deja implementata,​ iar voi trebuie doar sa aduceti imbunatatiri codului deja-existent.
  
-==== Structura bazei de date ==== 
  
-----+Baza de date va avea urmatoarea structura:​ 
  
 Se dau urmatoarele 2 tipuri: Se dau urmatoarele 2 tipuri:
Line 65: Line 63:
  
 Reprezinta un pacient. Campurile acestei structuri sunt: Reprezinta un pacient. Campurile acestei structuri sunt:
-  * id - sir de forma  Nume, Prenume (de ex. Ion,Ion), alocat static (31 octeti) +  * nume - sir de forma  Nume, Prenume (de ex. Ion,Ion), alocat static (31 octeti) 
-  * ocup – reprezinta ocupatia persoanei (de ex. muncitor | student | casnica etc.), alocat static(21 octeti) +  * ocupatie ​– reprezinta ocupatia persoanei (de ex. muncitor | student | casnica etc.), alocat static(21 octeti) 
-  * cj – sir de 15 caractere :​ primele 13 - cnp, ultimele 2 – judetul de domiciliu (de ex. 1870120400423BV),​ alocat static +  * cod_identif ​– sir de 15 caractere :​ primele 13 - cnp, ultimele 2 – judetul de domiciliu (de ex. 1870120400423BV),​ alocat static 
-  * gs – grupa sanguina +  * grupa_sanguina ​– grupa sanguina 
-  * aa – adresa la care se vor memora valori intregi reprezentand rezultate analize medicale standard (este initializata de functia de alocare spatiu)+  * analize ​– adresa la care se vor memora valori intregi reprezentand rezultate analize medicale standard (este initializata de functia de alocare spatiu)
  
 <code c> <code c>
  
 typedef struct typedef struct
- { char id[30], ocup[21], cj[17]; +  ​{ char nume[30], ocupatie[14], cod_identif[16]; 
-   ​int gs, *aa;  /* adresa vector rez.analize */ +    int grupa_sanguina, *analize;  /* adresa vector rez.analize */ 
- } Pers, *APers;+  } Pers;
  
 </​code>​ </​code>​
Line 84: Line 82:
  
 Reprezinta baza de date. Campurile acestei structuri sunt: Reprezinta baza de date. Campurile acestei structuri sunt:
-  * a1 – adresa vector de elemente de tip Pers, alocat dinamic initial +  * vect_pers ​– adresa vector de elemente de tip Pers, alocat dinamic initial 
-  * a2 – adresa de sfarsit a spatiului alocat pt.vector +  * nr_pers_curent ​– numar curent persoane (<= cu nr.maxim de persoane ce pot exista in vector) 
-  * nc – numar curent persoane (<= cu nr.maxim de persoane ce pot exista in vector) +  * nr_analize ​– numar de analize medicale 
-  * na – numar de analize medicale +  * nr_pers_max ​- numar maxim de persoane 
-  * max_size ​- numar maxim de persoane +  * vect_analize ​– adresa unui vector in care sunt pastrate valorile intregi reprezentand rezultatele analizelor medicale standard pentru numarul maxim de persoane din grup 
-  * a3 – adresa unui vector in care sunt pastrate valorile intregi reprezentand rezultatele analizelor medicale standard pentru numarul maxim de persoane din grup +
  
-<​note>​adresa la care se gasesc analizele persoanei cu indice i (i >= 0) din grupul ​cu adresa x este (x->a3 + i * x->na)</​note>​+<​note>​adresa la care se gasesc analizele persoanei cu indice i (i >= 0) din DB-ul cu adresa x este (x->vect_analize ​+ i * x->nr_analize)</​note>​
  
 <code c> <code c>
  
 typedef struct typedef struct
- { Pers *a1, *a2; /* adrese vector pers */ +  ​{ Pers *vect_pers; /* adrese vector pers */ 
-   ​int ncna, *a3+    int nr_pers_curentnr_analize, *vect_analize
-   ​int max_size+    int nr_pers_max
- } DB, *ADB; +  } DB, *ADB;
 </​code>​ </​code>​
  
 +<​note>​ ADB este echivalent cu *DB </​note>​
  
 Aici aveti o imagine a structurii bazei de date: Aici aveti o imagine a structurii bazei de date:
 +
 +(am notat: a3-vect_analize,​ a1-vect_pers,​ aa-analize)
  
 {{:​programare:​laboratoare:​structura2.png?​nolink|}} {{:​programare:​laboratoare:​structura2.png?​nolink|}}
Line 116: Line 115:
 <code c> <code c>
 /* Elibereaza spatiul alocat pentru baza de date aflata la adresa aag.*/ /* Elibereaza spatiul alocat pentru baza de date aflata la adresa aag.*/
-void Elib(ADB* aag);+void elibereaza(ADB* aag);
  
 /* Afiseaza baza de date aflata la adresa ag */ /* Afiseaza baza de date aflata la adresa ag */
-void Afi(DB *ag);+void afiseaza(DB *ag);
  
 /* Aloca spatiu pentru o baza de date cu maximum MP persoane si NA analize. */ /* Aloca spatiu pentru o baza de date cu maximum MP persoane si NA analize. */
-ADB Aloc(int MP, int NA);+ADB aloca(int MP, int NA);
  
 /* Scrie baza de date aflata la adresa ag in fisierul binar filename. */ /* Scrie baza de date aflata la adresa ag in fisierul binar filename. */
Line 132: Line 131:
 </​code>​ </​code>​
  
-De aici {{:​programare:​laboratoare:​lab12cb.zip|}} puteti descarca scheletul laboratorului.+De aici {{:​programare:​laboratoare:​lab12_schelet.zip|}} puteti descarca scheletul laboratorului.
  
 El contine fisierele: El contine fisierele:
Line 140: Line 139:
   * in.txt : Fisier text de test   * in.txt : Fisier text de test
   * in.bin : Fisier binar de test   * in.bin : Fisier binar de test
 +  * Makefile
  
-<​note>​Este suficient sa compilati ​fisierul ​main.</​note>​+<​note>​Pentru compilare puteti rula make build. In urma acesteia va rezulta executabilul lab12. Acesta il puteti testa cu fisierul ​text in.txt: ​ "​./​lab12 in.txt"</​note>​
  
  
Line 150: Line 150:
  
   - [2p] Scrieti o functie de afisare selectiva a coloanelor din baza de date. Aceasta va interoga userul(stdin) cu privire la coloanele care trebuiesc afisate si ordinea lor, si apoi le va afisa doar pe acestea, in ordinea specificata.   - [2p] Scrieti o functie de afisare selectiva a coloanelor din baza de date. Aceasta va interoga userul(stdin) cu privire la coloanele care trebuiesc afisate si ordinea lor, si apoi le va afisa doar pe acestea, in ordinea specificata.
-  - [2.5p] Scrieti functiile: <code c>+  - [4p] Scrieti functiile: <code c>
 /*Citeste o baza de date dintr-un fisier binar. ​ /*Citeste o baza de date dintr-un fisier binar. ​
 Se ocupa si de alocarea spatiului pentru baza de date si vectorii de persoane si de analize. */ Se ocupa si de alocarea spatiului pentru baza de date si vectorii de persoane si de analize. */
Line 158: Line 158:
 int writeToText(char *filename, DB *ag) int writeToText(char *filename, DB *ag)
 </​code>​Folositi ca modele functiile **writeToBinary**,​ respectiv **readFromText**. Pentru functia **readFromBinary** tineti cont de faptul ca pentru fiecare persoana vectorul de analize(aa) va trebui sa pointeze catre o zona din vectorul a3 al bazei de date.  </​code>​Folositi ca modele functiile **writeToBinary**,​ respectiv **readFromText**. Pentru functia **readFromBinary** tineti cont de faptul ca pentru fiecare persoana vectorul de analize(aa) va trebui sa pointeze catre o zona din vectorul a3 al bazei de date. 
-  - [3.5p] Modificati functia main astfel incat programul vostru sa poata fi apelat astfel:<​code>​+  - [2p] Modificati functia main astfel incat programul vostru sa poata fi apelat astfel:<​code>​
  
 ./​executabil nume_fis_intrare nume_fis_iesire ./​executabil nume_fis_intrare nume_fis_iesire
programare/laboratoare/lab12cb.1389537580.txt.gz · Last modified: 2014/01/12 16:39 by bogdan.nicula
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0