Sunteți pe pagina 1din 14

UNIVERSITATEA POLITEHNICA TIMIOARA

FACULTATEA DE AUTOMATIC I CALCULATOARE


PROFIL INFORMATICA



Tema nr. 6
Magazin care nchiriaz jocuri pentru calculator


Proiect la disciplina Structuri de date i algoritmi






Student,
Luca Gabriela Ecaterina
Anul II Informatic, Grupa 1.2




An universitar 2013-2014, Semestrul II
Cuprins



Cerinele programului.........................................................pagina 3
Documentaia tehnic a aplicaiei.......................................pagina 4-9
Anexa .................................................................................pagina 10
4)Concluzii......................................pagina 10
5)Bibliografie .........................................................................pagina 10




















Cerinele programului
ntr-un magazin exist un raion care comercializeaz jocuri pe
calculator.
Jocurile sunt pstrate ntr-un fiier sub forma:
Productor, titlu_joc, categorie, pre, stoc

S se scrie un program care efectueaz urmatoarele operaii:
ncarc datele din fiierul cu jocuri ntr-o structur de list cu
subliste.
Afieaz lista de producatori in ordine alfabetica.
Afieaz lista de jocuri de la un producator in ordine alfabetica.
Afieaz toate jocurile aparinnd unei categorii citite de la
tastatur.
Modific/adaug un joc in list.
Calculeaz valoarea stocului.
Caut joc dup titlu i afieaz informaii.
Salvarea n fiier a informaiilor din lista cu subliste









Documentaia tehnic a aplicaiei
Implementarea bazei de date care conine datele despre jocurile
disponibile n magazin,aflate in raion, se va face utilizand structura de date lista
cu subliste.

Codul in Dev C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct joc {
char *titlu, *categorie;
int pret, stoc;
struct joc *next;
} joc;

typedef struct producator {
char *nume;
joc *jocuri;
struct producator *next;
} producator;

void citesteDate(FILE*, producator**);
producator *cautaProducator(producator*, char*);
joc *cautaJoc(joc*, char*);
producator *adaugaProducator(producator*, char*);
joc *adaugaJoc(joc*, char*, char*, int, int);
void afiseazaProducator(producator*);
void afiseazaJoc(joc*);

int main(void) {

producator *prod = NULL, *i, *aux2;
joc *j, *aux3;
FILE *fisier = fopen("jocuri.txt", "rw");
int opt, cat, val, pret, stoc;
char nume[100], titlu[100], categorie[100], producatorr[100];

while(1) {
printf("Luca Gabriela Ecaterina-Tema Nr.6");
printf("\n");
printf("\n1) Incarca datele din fisierul cu jocuri intr-o structura de
lista cu subliste");
printf("\n2) Afiseaza lista de producatori in ordine alfabetica");
printf("\n3) Afiseaza lista de jocuri de la un producator in ordine
alfabetica");
printf("\n4) Afiseaza toate jocurile apartinnd unei categorii citite
de la tastatura");
printf("\n5) Modifica/adauga un joc in lista");
printf("\n6) Calculeaza valoarea stocului");
printf("\n7) Cauta joc dupa titlu, si afiseaza informatiile despre
joc");
printf("\n8) Salvarea in fisier a informatiilor din lista cu subliste");
printf("\n9) Sfarsit program");

printf("\n\nOptiunea: "); scanf("%d", &opt);

switch(opt) {
case 1:
citesteDate(fisier, &prod);
printf("\nDate citite cu succes!\n");
break;
case 2:
for(i = prod; i != NULL; i = i -> next) {
afiseazaProducator(i);
for(j = i -> jocuri; j != NULL; j = j -> next) {
afiseazaJoc(j);
}
}
break;
case 3:
printf("\nNumele producatorului: "); scanf("%s",
nume);
if(cautaProducator(prod, nume) != NULL) {
for(i = prod; i != NULL; i = i -> next) {
if(strcmp(i -> nume, nume) == 0) {
for(j = i -> jocuri; j != NULL; j = j -
> next) {
afiseazaJoc(j);
}
break;
}
}
}
else {
printf("\nProducatorul %s nu exista!\n", nume);
}
break;
case 4:
printf("\nCategoria: "); scanf("%s", nume);
cat = 0;
for(i = prod; i != NULL; i = i -> next) {
for(j = i -> jocuri; j != NULL; j = j -> next) {
if(strcmp(nume, j -> categorie) == 0) {
afiseazaJoc(j);
cat = 1;
}
}
}
if(!cat) {
printf("\nNu exista jocuri din categoria %s!\n",
nume);
}
break;
case 5:
val = 0;
printf("\nTitlul jocului: "); scanf("%s", titlu);
for(i = prod; i != NULL; i = i -> next) {
if((aux3 = cautaJoc(i -> jocuri, titlu)) != NULL)
{
printf("\nDati noul titlu: "); scanf("%s",
titlu);
printf("Noua categorie: "); scanf("%s",
categorie);
printf("Noul pret: "); scanf("%d", &pret);
printf("Noul stoc: "); scanf("%d", &stoc);

strcpy(aux3 -> titlu, titlu);
strcpy(aux3 -> categorie, categorie);
aux3 -> pret = pret;
aux3 -> stoc = stoc;

val = 1;
break;
}
}
if(!val) {
printf("\n%s nu exista. Doriti sa-l adaugati? (1-
da, 0-nu): ", titlu);
scanf("%d", &opt);
if(opt) {
printf("Producatorul: "); scanf("%s",
producatorr);
printf("Categoria: "); scanf("%s",
categorie);
printf("Pretul: "); scanf("%d", &pret);
printf("Stocul: "); scanf("%d", &stoc);

if((aux2 = cautaProducator(prod,
producatorr)) != NULL) {
aux2 -> jocuri = adaugaJoc(aux2 ->
jocuri, titlu, categorie, pret, stoc);
printf("\nJoc adaugat cu succes!\n");
}
else {
printf("\nProducatorul %s nu
exista!\n", producatorr);
break;
}
}
else {
break;
}
}
else {
printf("\nJocul a fost actualizat cu succes!\n");
}
break;
case 6:
val = 0;
for(i = prod; i != NULL; i = i -> next) {
for(j = i -> jocuri; j != NULL; j = j -> next) {
val += (j -> pret) * (j -> stoc);
}
}
printf("\nValoarea intregului stoc este de: %d lei.\n",
val);
break;
case 7:
printf("\nTitlul: "); scanf("%s", nume);
cat = 0;
for(i = prod; i != NULL; i = i -> next) {
for(j = i -> jocuri; j != NULL; j = j -> next) {
if(strcmp(nume, j -> titlu) == 0) {
afiseazaJoc(j);
cat = 1;
}
}
}
if(!cat) {
printf("\nNu exista joc cu titlul %s.\n", nume);
}
break;
case 8:
fclose(fisier);
fisier = fopen("jocuri.txt", "w");

for(i = prod; i != NULL; i = i -> next) {
for(j = i -> jocuri; j != NULL; j = j -> next) {
fprintf(fisier, "%s %s %s %d %d\n", i ->
nume, j -> titlu, j -> categorie, j -> pret, j -> stoc);
}
}
printf("\nFisier actualizat cu succes!\n");
fclose(fisier);

break;
case 9:
free(prod);
fclose(fisier);
exit(0);
default:
break;
}

}

return 0;
}

void citesteDate(FILE *fisier, producator **producatori) {
char nume[100], titlu[100], categorie[100];
int pret, stoc;
producator *aux;
while(!feof(fisier)) {
fscanf(fisier, "%s%s%s%d%d", nume, titlu, categorie, &pret,
&stoc);
aux = cautaProducator(*producatori, nume);
if(aux == NULL) {
*producatori = adaugaProducator(*producatori, nume);
aux = cautaProducator(*producatori, nume);
}
aux -> jocuri = adaugaJoc(aux -> jocuri, titlu, categorie, pret, stoc);
}
}

producator *cautaProducator(producator *producatori, char *nume) {
producator *i;
for(i = producatori; i != NULL; i = i -> next) {
if(strcmp(nume, i -> nume) == 0) {
return i;
}
}
return NULL;
}

producator *adaugaProducator(producator *producatori, char *nume) {
int lungime = strlen(nume) + 1;
producator *aux = malloc(sizeof(producator)), *i, *j;

aux -> nume = malloc(sizeof(char) * lungime);
strcpy(aux -> nume, nume);
aux -> jocuri = NULL;

for(i = j = producatori; i != NULL && strcmp(i -> nume, aux -> nume) <
0; j = i, i = i -> next);
aux -> next = i;

if(i == j) {
return aux;
}
else {
j -> next = aux;
return producatori;
}
}

joc *adaugaJoc(joc *jocuri, char *titlu, char *categorie, int pret, int stoc) {
joc *i, *j, *aux = malloc(sizeof(joc));

aux -> titlu = malloc(sizeof(char) * strlen(titlu) + 1);
aux -> categorie = malloc(sizeof(char) * strlen(categorie) + 1);
strcpy(aux -> categorie, categorie);
strcpy(aux -> titlu, titlu);
aux -> pret = pret;
aux -> stoc = stoc;

for(i = j = jocuri; i != NULL && strcmp(i -> titlu, aux -> titlu) < 0; j = i, i
= i -> next);
aux -> next = i;

if(i == j) {
return aux;
}
else {
j -> next = aux;
return jocuri;
}
}

void afiseazaProducator(producator *producatori) {
printf("\n=============================================")
;
printf("\n|| Numele producatorului: %s", producatori -> nume);
printf("\n==============================================
\n");
}

void afiseazaJoc(joc *jocuri) {
printf("\n\t--------------------------------------");
printf("\n\t| Titlul jocului: %s", jocuri -> titlu);
printf("\n\t| Categorie: %s", jocuri -> categorie);
printf("\n\t| Pret: %d", jocuri -> pret);
printf("\n\t| Stoc: %d", jocuri -> stoc);
printf("\n\t--------------------------------------\n");
}

joc *cautaJoc(joc *jocuri, char *nume) {
joc *i;
for(i = jocuri; i != NULL; i = i -> next) {
if(strcmp(nume, i -> titlu) == 0) {
return i;
}
}
return NULL;
}



Probleme ntmpinate i modul lor de rezolvare
Problema fundamental aprut n cadrul aplicaiei a fost
eficientizarea alocrii memoriei pentru o derulare cat mai fluent a programului.
S-a rezolvat prin alocarea dinamic a memoriei dup fiecare funcie i totodat
eliberarea memoriei cu ajutorul funciei free().









Anex

Importarea datelor utilizate n execuia programului s-a facut din
fisierul "jocuri.txt", salvat in acelasi director cu codul sursa al
programului.























Concluzii


Programul a fost redactat n Dev C i salvat cu numele sda_project_6.C
Programul principal conine un meniu interactiv prin care utilizatorul alege
opiunea pe care o dorete. Acest meniu e implementat cu ajutorul instruciunii
switch case.
Funciile definite de programator sunt denumite sugestiv.
Eventualele comentarii n codul surs sunt exprimate cu ajutorul // sau cu
ajutorul /* */
Este un program complex, cu foarte multe funcii definite de programator.
Din punctul de vedere al gestionrii memorie, este eficient folosindu-se cu
success alocarea dinamic, iar dup uitlizare memoria s-a eliberat cu ajutorul
funciei free().
Programul interacioneaz cu uilizatorul dndu-i astfel ansa optrii
pentru una din variantele puse la dispoziie.












Bibliografie
Laboratoarele i cursurile de SDA din timpul semestrului II.

S-ar putea să vă placă și