Sunteți pe pagina 1din 9

FISA DE LUCRU 3 – STRUCTURI DE DATE NEOMOGENE – PROIECTE INDIVIDUALE

Cuprins
DESCRIEREA PROIECTULUI. ORGANIZARE. INDICAȚII ............................................................................................................. 1
Exemplu de proiect: ............................................................................................................................................................ 2
Structura aplicației .......................................................................................................................................................... 2
Sursa C++: ....................................................................................................................................................................... 2
Model de fișier de intrare și de ieșire: ............................................................................................................................ 5
TEME PROIECT ........................................................................................................................................................................ 6
1. Concurs de programare ...................................................................................................................................................... 6
2. Gestiune farmacie ............................................................................................................................................................... 6
3. Buget de familie .................................................................................................................................................................. 6
4. Închiriere mașini ................................................................................................................................................................. 7
5. Gestiune cont bancar .......................................................................................................................................................... 7
6. Cofetărie ............................................................................................................................................................................. 7
7. Administrator imobil ........................................................................................................................................................... 8
8. Magazin electronice ............................................................................................................................................................ 8
9. Agenție de turism ............................................................................................................................................................... 9

DESCRIEREA PROIECTULUI. ORGANIZARE. INDICAȚII

Elevii din clasă vor fi împărțiți în grupe de câte 3 elevi pentru a gestiona o aplicație mai completă:
Sarcini de lucru în cadrul echipei:
 Elevul 1: rezolva cerința 1, 4, 7
 Elevul 2: rezolva cerința 2, 5, 8
 Elevul 3: rezolva cerința 3, 6, 9
 Împreună construiesc meniul de opțiuni și fișierul text cu datele de intrare(cu minim 10 elemente alese
astfel încât să existe răspunsuri pentru fiecare cerință) si accesează funcțiile scrise de fiecare.
 Membrii echipei vor da un nume aplicației scrise, vor realiza o sigla a firmei și o prezentare a proiectului
(funcții necesare, schema de apelare, parametri de intrare/ieșire, etc.)
 Fiecare funcție va avea o descriere generala, parametri de intrare si de ieșire .

Termen de lucru: 2 săptămâni


Proiectul va fi prezentat la tabla de fiecare membru al echipei
Exemplu de proiect:
Fie următoarea declarare:
struct elev {
char nume[35];
char prenume[50];
int nota1,nota2;
float media;
} ev[101];
int n,m;

Să se realizeze un meniu de operații după modelul din


figura alăturată:

Structura aplicației va cuprinde următoarele funcții:


functia main

elevi cu media ordonare lista elevilor care elevi cu nume


citire elevi afisare elevi elevi cu media m elevi corigenti membrii echipei
maxima crescatoare incep cu litera A dat

media maxima

Sursa C++:
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("elevi.in");
ofstream g("rezultate.out");

///declararea datelor
struct elev
{
char nume[35];
char prenume[50];
int nota1,nota2;
float media;
} ev[101];
int n,m;

///citirea datelor si construirea vectorului de elevi


void citire(elev ev[],int &n)
{
f>>n;
for(int i=1; i<=n; i++)
{
f.get();
f>>ev[i].nume;
f>>ev[i].prenume;
f>>ev[i].nota1;
f>>ev[i].nota2;
ev[i].media=(ev[i].nota1+ev[i].nota2)/2;
}
}

///afisare elevi
void afisare(elev ev[],int n)
{
g<<endl<<"\t\tLista elevilor este"<<endl;
g<<endl<<"Nume\t\tPrenume\t\tNota1\t\tNota2\t\tMedia";
for(int i=1; i<=n; i++)
{g<<endl<<ev[i].nume<<"\t\t"<<ev[i].prenume<<"\t\t"<<ev[i].nota1;
g<<"\t\t"<<ev[i].nota2<<"\t\t"<<ev[i].media;
}
}

///lista elevilor cu media egala cu o valoare m citita de la tastatura


void medieM(elev ev[],int n, float m)
{
g<<endl<<"\t\tLista elevilor cu media "<<m<<" este"<<endl;
g<<"\nNume\t\tPrenume\t\tMedia";
for(int i=1; i<=n; i++)
if((ev[i].nota1+ev[i].nota2)/2>=m)
g<<endl<<ev[i].nume<<"\t\t"<<ev[i].prenume<<"\t\t"<<ev[i].media;
}

///determinarea mediei maxime


float medieMaxima(elev ev[],int n)
{
float maxx=ev[1].media;
for(int i=2; i<=n; i++)
if(ev[i].media>maxx)
maxx=ev[i].media;
return maxx;
}

///afisarea elevilor cu media maxima


void afisareMedieMaxima(elev ev[],int n)
{
float maxx=medieMaxima(ev,n);
g<<endl<<endl<<"\t\tELEVII CU MEDIA MAXIMA" << endl;
cout<<"\nNume\t\tPrenume\t\tMedia"<<endl;
for(int i=1; i<=n; i++)
if(ev[i].media==maxx)
g<<ev[i].nume<<"\t\t"<<ev[i].prenume<<"\t\t"<<ev[i].media<<endl;

g<<endl;
}

///ordonare crescatoare dupa medii


void MedieSortare(elev ev[],int n)
{
for(int i=1; i<=n-1; i++)
for(int j=i+1; j<=n; j++)
if(ev[i].media>ev[j].media)
swap(ev[i],ev[j]);
}

///lista elevilor cu prima litera A


void NumeA(elev ev[],int n)
{ int ok=0;
g<<endl<<endl<<"\t\tLista elevilor care au prima litera din nume A:"<<endl;
g<<"Nume\t\tPrenume"<<endl;
for(int i=0; i<n; i++)
if(ev[i].nume[0]=='A')
{ g<<ev[i].nume<<"\t\t"<<ev[i].prenume<<endl;
ok=1;
}
if(ok==0)
g<<"Nu exista"<<endl;
g<<endl;
}
///lista elevilor corigenti
void corigenti(elev ev[],int n)
{
g<<endl<<endl<<"\t\tLista elevilor corigenti:"<<endl;
g<<"Nume\t\tPrenume\t\tMedia"<<endl;
int ok=0;
for(int i=1; i<=n; i++)
if(ev[i].media<5)
{
g<<ev[i].nume<<"\t\t"<<ev[i].prenume<<"\t\t"<<ev[i].media<<endl;
ok=1;
}
if(ok==0)
g<<"Nu exista elevi corigenti"<<endl;
}

///lista elevilor cu un nume dat de la tatstaura


void AfisareNumeDat(elev ev[],int n)
{
char S[20];
cout<<"Numele elevului cautat:";
cin>>S;
cout<<endl<<"\nNume\t\tPrenume\t\tNota1\t\tNota2\t\tMedia"<<endl;
int ok=0;
for(int i=0; i<n; i++)
if(strcmp(ev[i].nume,S)==0)
{
g<<endl<<ev[i].nume<<"\t\t"<<ev[i].prenume<<"\t\t";
g<<ev[i].nota1<<"\t\t"<<ev[i].nota2<<"\t\t"<<ev[i].media;
ok=1;
}
if(ok==0)
g<<"Elevul cautat nu exista!";
g<<endl;
}

///functia principala main


int main()
{
int optiune;
do
{
///afisare meniu pe ecran
cout << endl<<endl<<"****MENIU****" << endl;
cout << endl<<"1. Citire date ";
cout << endl<<"2. Afisare ";
cout << endl<<"3. Afisare elevi cu media >= m ";
cout << endl<<"4. Afisare elevi cu media maxima ";
cout << endl<<"5. Sortarea elevilor crescator in functie de medie ";
cout << endl<<"6. Afisare elevi care incep cu litera 'A' ";
cout << endl<<"7. Scriere elevi corigenti ";
cout << endl<<"8. Afisarea elevilor cu numele citit ";
cout << endl<<"9. Membrii echipei ";
cout<< endl<<"10. Iesire ";

///citire operatie dorita


cout<< endl<<"\t\tAlege operatia: ";
cin>>optiune;

///executie operatie dorita


switch(optiune)
{
case 1: citire(ev,n); break;
case 2: afisare(ev,n); break;
case 3:
cout<<"Afisarea elevilor cu medie mai mare decat :";
cin>>m;
medieM(ev,n,m);
break;
case 4: afisareMedieMaxima(ev,n); break;
case 5: MedieSortare(ev,n); afisare(ev,n); break;
case 6: NumeA(ev,n);break;
case 7: corigenti(ev,n); break;
case 8: AfisareNumeDat(ev,n); break;
case 9: g<<"\nProgram realizat de Ionescu Gabriel, Popescu Aura ";
break;
case 10: return 0;
default: cout<<"Optiune inexistenta!";
}
}
while(optiune!=10);
return 0;
}

Model de fișier de intrare și de ieșire:


elevi.in rezultate.out
5
Popescu Lista elevilor este
Vlad
5 7 Nume Prenume Nota1 Nota2 Media
Ionescu Popescu Vlad 5 7 6
Gabriel Ionescu Gabriel 9 10 9
9 10 Tudose Oana 7 3 5
Tudose Popa Valentina 10 10 10
Oana Blanaru Cristian 6 8 7
7 3
Popa Lista elevilor cu media 5 este
Valentina
10 10 Nume Prenume Media
Blanaru Popescu Vlad 6
Cristian Ionescu Gabriel 9
6 8 Tudose Oana 5
Popa Valentina 10
Blanaru Cristian 7

ELEVII CU MEDIA MAXIMA


Popa Valentina 10

Lista elevilor este

Nume Prenume Nota1 Nota2 Media


Tudose Oana 7 3 5
Popescu Vlad 5 7 6
Blanaru Cristian 6 8 7
Ionescu Gabriel 9 10 9
Popa Valentina 10 10 10

Lista elevilor care au prima litera din nume A:


Nume Prenume
Nu exista

Lista elevilor corigenti:


Nume Prenume Media
Nu exista elevi corigenti

Elevul cautat nu exista!

Program realizat de Ionescu Gabriel, Popescu Aura


TEME PROIECT

1. Concurs de programare
La concursul anual de programare, comitetul de evaluare înregistrează într-o lista scorul obținut de fiecare
participant. Despre fiecare participant se înregistrează următoarele informații: Nume, Prenume, Clasa, proba1,
proba2, Județ. Punctajul final se calculează ca fiind suma punctajelor fiecărui concurent la cele două probe de
concurs.
Creați o aplicație care permite organizatorilor să construiască o baza de date cu participanții la concurs
și să afișeze următoarele rezultate:
1. Citire participanți
2. Lista participanților
3. Lista participanților dintr-un județ cu numele citit de la tastatură
4. Ordonarea crescătoare elevilor pe clase, iar la clase egale ordonarea va fi descrescător după medie
5. Ștergerea concurentului cu numele și prenumele dat de la tastatură
6. Adăugarea unui nou concurent la sfârșitul listei
7. Afișarea numelui, prenumelui si punctajul total al concurenților cu premiul I la fiecare clasa(clasa va fi:
clasa 9, clasa 10, clasa 11 și clasa 12)
8. Afișați numele și prenumele concurentului cu cel mai mare punctaj din concurs.
9. Membrii echipei
10. Ieșire din program

2. Gestiune farmacie
Administratorul unei farmacii are nevoie de o aplicație care permite gestiunea stocului de medicamente
existent în depozitul farmaciei. Pentru fiecare medicament din stoc se va memora numele medicamentului,
cantitate disponibila in stoc, prețul de vânzare, recomandări de folosire.
Creați o aplicație care permite administratorului farmaciei să construiască o baza de date cu medicamentele
existente în depozitul farmaciei și să afișeze următoarele rezultate:
1. Citire medicamente
2. Lista medicamentelor
3. Lista medicamentelor cu stoc zero
4. Ordonarea medicamentelor după recomandările de folosire, alfabetic, iar la aceiași recomandare
descrescător după prețul de vânzare
5. Ștergerea unui medicament cu numele și concentrația citite de la tastatură
6. Adăugarea unui nou medicament la sfârșitul listei
7. Afișarea numelui, concentrației si prețul medicamentului cel mai ieftin pentru fiecare recomandare de
utilizare în parte(recomandări de utilizare pentru un medicament pot fi: gripă, imunitate, infecții,
tensiune)
8. Afișați valoarea totală a stocului de medicamente din depozit
9. Membrii echipei
10. Ieșire din program

3. Buget de familie
Creați o aplicație care permite gestiunea bugetului unei familie. Aplicația trebuie să stocheze cheltuielile
pe o luna. Fiecare cheltuiala are: zi (ziua in care s-a efectuat un număr 1-31),luna(număr 1-12) suma, tip (mâncare,
transport, îmbrăcăminte, facturi, altele)
Creați o aplicație care permite unui membru al familiei să construiască o baza de date cu toate cheltuielile
existente pe parcursul mai multor luni și să afișeze următoarele rezultate:
1. Citire cheltuieli
2. Lista cheltuielilor
3. În ce perioade s-au achitat facturi(se va afișa ziua, luna și suma
4. Ordonarea tuturor cheltuielilor alfabetic după tip, iar la aceiași tip descrescător după suma plătită
5. Ștergerea unei cheltuieli citite de la tastatură
6. Adăugarea unei noi facturi la sfârșitul listei
7. Afișarea zilei, lunii, si prețul medicamentului celei mai mici cheltuieli pentru fiecare lună în parte
8. Afișați valoarea totală a cheltuielilor realizate în perioada urmărită
9. Membrii echipei
10. Ieșire din program

4. Închiriere mașini
Administratorul unui salon auto are nevoie de o aplicație care permite gestiunea stocului de mașini existent
în depozitul firmei. Pentru fiecare mașină din stoc se va memora marca mașinii, anul de fabricație, prețul,
cantitate disponibila in stoc, prețul de vânzare, tip carburant.
Creați o aplicație care permite administratorului salonului auto să construiască o baza de date cu mașinile
existente în depozit și să afișeze următoarele rezultate:
1. Citire mașini
2. Lista mașinilor din depozitul firmei
3. Lista mașinilor electrice
4. Ordonarea mașinilor după marca, alfabetic, iar la aceiași marcă descrescător după prețul de vânzare
5. Ștergerea unui mașini cu numele, anul de fabricație și tipul de combustibil citite de la tastatură
6. Adăugarea unei noi mașini la sfârșitul listei
7. Afișarea marca mașinii cele mai ieftine și prețul de vânzare pentru fiecare tip de combustibil în parte (tip
combustibil poate fi: benzină, motorină, hibrid, electric)
8. Afișați valoarea totală a stocului de mașini din depozit
9. Membrii echipei
10. Ieșire din program

5. Gestiune cont bancar


Administratorul unei unități bancare are nevoie de o aplicație care permite gestiunea tranzacțiilor clienților
ei. Pentru fiecare client se va memora marca numele, prenumele, numărul contului, moneda(lei/euro/dolari/altă
monedă), soldul contului, operație(extragere/depunere/consultare sold).

Creați o aplicație care permite administratorului băncii să construiască o baza de date cu clienții șăi și să
afișeze următoarele rezultate:
1. Citire clienți
2. Lista clienților din depozitul firmei
3. Lista clienților care au conturi în lei
4. Ordonarea clienților alfabetic după moneda în care au contul, iar la aceiași monedă alfabetic după
numele clientului.
5. Ștergerea unui client, cu numele și prenumele citite de la tastatură
6. Adăugarea unui nou client la sfârșitul listei
7. Afișarea numelui clientului care are cel mai mare sold în cont pentru fiecare tip de monedă în (tip monedă
poate fi: lei, euro, dolari, alta moneda)
8. Afișați valoarea totală a stocului clienților băncii
9. Membrii echipei
10. Ieșire din program

6. Cofetărie
Administratorul unei cofetării are nevoie de o aplicație care permite gestiunea materiilor prime din depozitul
ei. Pentru fiecare sortiment se va memora numele produsului, cantitatea, prețul de achiziție, numele furnizorului.
Creați o aplicație care permite administratorului cofetăriei să construiască o baza de date cu materiile prime
existente în depozit și să afișeze următoarele rezultate:
1. Citire produse
2. Lista produselor din depozitul firmei
3. Lista produselor cumpărate de la furnizorul cu numele citit de la tastatură
4. Ordonarea produselor alfabetic după nume produsului, iar la aceiași nume descrescător după preț.
5. Ștergerea unui produs, cu numele denumirea furnizorului citite de la tastatură
6. Adăugarea unui nou produs la sfârșitul listei
7. Afișarea numelui furnizorului de la care a cumpărat cele mai multe produse
8. Afișați valoarea totală a stocului produselor din depozitul cofetăriei.
9. Membrii echipei
10. Ieșire din program

7. Administrator imobil
Creați o aplicație care permite unui administrator de bloc să gestioneze cheltuielile lunare a tuturor
apartamentelor unui bloc. Aplicația trebuie să stocheze cheltuielile pe o luna. Pentru fiecare apartament se
cunoaște: numărul apartamentului, numele proprietarului, numărul de persoane, valoare apa caldă, valoare apa
rece
Creați o aplicație care permite administratorului blocului să construiască o baza de date cu toate cheltuielile
existente și să afișeze următoarele rezultate:
1. Citire apartamente
2. Lista apartamente
3. Lista valorii de plată pentru fiecare apartament in parte.
4. Ordonarea tuturor proprietarilor după valoarea de plată, descrescător, iar la aceiași sumă alfabetic
după numele proprietarului.
5. Ștergerea unui proprietar cu numele citit de la tastatură
6. Adăugarea unui nou proprietar la sfârșitul listei
7. Afișarea numelui proprietarului cu cea mai mică sumă de plată.
8. Afișați valoarea totală a cheltuielilor tuturor apartamentelor în perioada urmărită
9. Membrii echipei
10. Ieșire din program

8. Magazin electronice
Administratorul unui magazin de electrocasnice are nevoie de o aplicație care permite gestiunea stocului de
marfă existent în depozitul firmei. Pentru fiecare produs din stoc se va memora producătorul produsului, tipul
acestuia(frigider, televizor, mașină de spălat rufe, aragaz, mașina de spălat vase, etc), anul de fabricație, prețul
de vânzare, și cantitate disponibila in stoc.
Creați o aplicație care permite administratorului magazinului să construiască o baza de date cu produsele
existente în depozit și să afișeze următoarele rezultate:
1. Citire produse
2. Lista produselor din depozitul firmei
3. Lista produselor furnizorului cu numele citit de la tastatură
4. Ordonarea produselor după tip, alfabetic, iar la aceiași tip descrescător după prețul de vânzare
5. Ștergerea unui produs cu numele producătorului, tipul acestuia citite de la tastatură
6. Adăugarea unui nou produs la sfârșitul listei
7. Afișarea denumirii produsului celui mai ieftin și prețul de vânzare pentru fiecare furnizor în parte (furnizor
poate fi: LG, Samsung, Beko, Bosh)
8. Afișați valoarea totală a stocului de produse din depozit
9. Membrii echipei
10. Ieșire din program
9. Agenție de turism
Administratorul unei agenții de turism are nevoie de o aplicație care permite gestiunea tuturor destinațiilor
de vacanță pe care le poate oferi clienților săi. Pentru fiecare tip de vacanță se va memora destinația vacanței,
tipul acesteia(munte, mare, City break), numărul de nopți de cazare, prețul vacanței .
Creați o aplicație care permite administratorului agenției să construiască o baza de date cu vacanțele pe care
le poate oferi clienților săi și să afișeze următoarele rezultate:
1. Citire vacanțe
2. Lista vacanțelor propuse clienților
3. Lista vacanțelor spre o destinație citită de la tastatură.
4. Ordonarea vacantelor după tip, alfabetic, iar la aceiași tip descrescător după prețul de vânzare
5. Ștergerea unei vacante de tip City break spre o destinație citită de la tastatură
6. Adăugarea unei noi vacanțe la sfârșitul listei
7. Afișarea vacanței cele mai ieftine și prețul acesteia pentru fiecare destinație în parte (destinație poate fi:
Italia, Spania, Turcia, Austria)
8. Afișați valoarea totală a stocului de produse de vacanță din firmă.
9. Membrii echipei
10. Ieșire din program