//header file
#ifndef STRUCT_H_INCLUDED
#define STRUCT_H_INCLUDED
typedef struct curs_valutar
{
char nume[50];
float cursul;
struct curs_valutar* next;
struct curs_valutar* next2;
}curs_val;
curs_val *head=NULL;
int sc=0;
int n;
int creare(int n);
void introducere_date();
int citire_date_fisier(char nume_fisier[100]);
void afisare_date();
void eliberare_memorie();
int adaugare_date(char c_nume[100],float cursul);
void cautare_date(char sir[100]);
void cautare_date_in(int val1, int val2);
void interschimbare(curs_val *a, curs_val *b);
void sortare(int n);
void modificare_date(char c_nume[100]);
int salvare_date(char nume_fisier[100]);
#endif // STRUCT_H_INCLUDED
//function.
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "struct.h"
int creare(int n)
{ curs_val *valuta,*valuta2;
int i; float aux; char numele[100];
for(i=0; i<n; i++)
{valuta=(curs_val*)malloc(sizeof(curs_val));
if (valuta==NULL)
return 0;
if(i==0)
head=valuta;
else valuta2->next=valuta;
valuta2=valuta;}
valuta->next=NULL;}
void introducere_date()
{curs_val *c;
int i=0;
c=head;
while(c)
{printf("\nIntroduceti datele pentru valuta %d:\n", i+1);
printf("Nume:"); scanf("%s", &c->nume);
scanf("%f", &c->cursul);
printf("\n");
c=c->next;
if(c==head)
break;
i++;}
getch();
return;
}
// introducerea datelor
//functia de citire a datelor din fisier
int citire_date_fisier(char nume_fisier[100])
{curs_val*c;
FILE *fisier;
fisier=fopen(nume_fisier,"r");
if(fisier==NULL)
{printf("\nEroare la deschiderea fisierului!!!");
getch();
return 0;}
else
{c=head;
fscanf(fisier,"%i", &n);
if(n==0)
{printf("!!! Structura nu contine elemente.\n");
getch();}
else
{for(int i=0;i<n;i++)
{fscanf(fisier,"%s", &c->nume);
fscanf(fisier,"%f", &c->cursul);
c=c->next;
if(c==head)
break;}
fclose(fisier);
printf("\n\n Datele au fost citite cu succes.");}}
getch();
return 1;}
//functia de citire a datelor din fisier
void afisare_date()
{
curs_val *c;
int i=1;
c=head;
printf("\n\n\n\t ***** Baza initiala este *****\n\n");
printf("\t----------------------------------\n");
printf("\t| Numele Valutei| Cursul Valutei|\n\n");
while(c)
{printf("\t%12s", c->nume);
printf(" %14f", c->cursul);
printf("\n");
c=c->next; i++;
if(c==head)
break;}
printf("\t|--------------------------------|");
getch();
return;}
// afisarea datelor
//eliberare memorie
void eliberare_memorie()
{curs_val *c, *p;
c=head;
while(c)
{p=c;
c=c->next;
free(p);
if(c==head)
break;}
head=NULL;
n=0;
printf("\n\nEliberarea memoriei a fost executata cu succes.");
}
//eliberare memorie
//adaugare date
int adaugare_date(char c_nume[100],float cursul)
{curs_val *a, *c;
a=(curs_val*)malloc(sizeof(*a));
if(c==NULL)
return 0;
else
{c=head;
while(c->next!=NULL)
c=c->next;
c->next=a;}
strcpy(a->nume,c_nume);
a->cursul=cursul;
a->next=NULL;
n++;
return 1;}
//adaugare date
//cautare date
void cautare_date(char sir[100])
{curs_val *c;
c=head;
while(c)
{
if(strcmp(c->nume,sir)==0)
{
printf(" %s", c->nume); printf(" ");
printf("%f", c->cursul);printf("\t\n");}
c=c->next;
if(c==head)
break;}}
//cautare date
void cautare_date_in(int val1, int val2)
{curs_val *c;
c=head;
while(c)
{if(val1==3 && c->cursul==val2)
{
printf("%s", c->nume); printf(" ");
printf("%f", c->cursul);printf("\t\n");}
c=c->next;
if(c==head)
break;}}
//cautare date
// interschimbare
void interschimbare(curs_val *a, curs_val *b)
{
curs_val *na, *nb;
curs_val t;
na=a->next;
nb=b->next;
t=*a;
*a=*b;
*b=t;
a->next=na;
b->next=nb;
}
// interschimbare
//sortare date
void sortare(int n)
{int i,k;
curs_val *a,*b;
if(!head)
{puts("Nu este corect, incercati din nou!"); getch();
return;}
else
{if (sc==0)
{
for(i=0;i<n;i++)
{
a=head;
b=a->next;
for(k=0;k<n-1-i;k++)
{
if(strcmp(a->nume, b->nume)>0)
{
interschimbare(a,b);
}
a=a->next;
b=b->next;
}
}
}
else
{
for(i=0;i<n;i++)
{
a=head;
b=a->next;
for(k=0;k<n-1-i;k++)
{
if(strcmp(a->nume, b->nume)>0)
{
interschimbare(a,b);
}
a=a->next;
b=b->next;
}
}
}
}
puts("Sortarea a avut loc cu succes!");getch();
}
//sortare date
//modificare date
void modificare_date(char c_nume[100])
{
curs_val *c; c=head;
int den_k=0;
char optiune[2];
int confirmare;
printf("Doriti sa modificati numele unei valute?(1/0)?:");
scanf("%i",&confirmare);
if(confirmare==1)
{
while(c)
{ if(strcmp(c->nume,c_nume)==0)
{
den_k=1;
printf("\n\nDoriti sa modificati numele valutei (da/nu)?:");
scanf("%s", &optiune);
if(strcmp(optiune,"da")==0)
{
printf("\nIntroduceti denumirea noua a valutei:");
scanf("%s", &c->nume);
printf("\nModificarea numelui valutei a avut loc cu succes.");}
goto iesire;
}
c=c->next;
if(c==head)
break;
}
}
iesire:
getch();
}
//modificare date
//functia de salvare a datelor din structura
int salvare_date(char nume_fisier[100])
{ curs_val *c;
FILE *fisier;
if((fisier=fopen("baza.txt","w+b"))==NULL)
printf("\nEroare la deschiderea fisierului!!!");
else
{c=head;
fprintf(fisier,"%i", n); fprintf(fisier,"\n");
while(c)
{
fprintf(fisier,"%s", c->nume); fprintf(fisier," ");
fprintf(fisier,"%f", c->cursul); fprintf(fisier," ");
fprintf(fisier,"\n");
c=c->next;
if(c==head)
break;}
fclose(fisier);
printf("\n\n Datele au fost salvate su succes.");}
getch();
return 1;
}
//main
#include "coduri functie.c"
void main()
{ curs_val *cautat;
int i,n,lista,q;
do{
//afisam meniul
m0: system("cls");
printf("\n\t\t***MENIU***\n\n");
printf("\t1: Comletarea bazei de date.\n");
printf("\t11: Citirea bazei de date din fisier\n");
printf("\t2: Afisarea bazei de date\n");
printf("\t22: Eliberearea memorie\n");
printf("\t3: Introducerea unoi no inscrieri\n");
printf ("\t4: Cautarea cursului dupa denumirea valutei\n");
printf("\t5: Cautare valutei dupa curs\n");
printf("\t6: Sortare dupa nume\n");
printf("\t7: Sortare dupa curs\n");
printf("\t8: MOdificare valutei\n");
printf("\t9 Salvarea informatiei");
printf("\t10: Iesire\t\t");
scanf("%d",&q);
switch(q)
{
case 1:{
printf("Culegem nr de valute: ");
scanf("%d",&n);
lista=creare(n);
introducere_date();
printf("Pentru iesire tastati Enter");
getch();
break;}
case 11:{ system("cls");
char nume_fisier[100];
printf("\n\nIntroduceti denumirea fisierului de unde vor fi citite datele:");
scanf("%s",&nume_fisier);
FILE *fisier;
fisier=fopen("baza.txt","r+b");
fscanf(fisier,"%i", &n);
lista=creare(n);
fclose(fisier);
citire_date_fisier(nume_fisier);
getch();
break;}
case 2:{ system("cls");
afisare_date();
getch();break;}
case 22:{ system("cls");
eliberare_memorie();
getch();
break;}
case 3: {system("cls");
int adaug;
char nume[100];
float cursul;
printf("\n\nAdaugarea unei valute noi:\n");
printf("Nume:"); scanf("%s", &nume);
scanf("%f", &cursul);
adaug=adaugare_date(nume,cursul);
getch();break;}
case 4: {
system("cls");
char nume[100];
printf("\n\nCautare valuta dupa nume:\nNumele valutei ce va fi cautat: ");
scanf("%s",&nume);
cautare_date(nume);
getch();
break;}
case 5: {
system("cls");
float curs;
printf("\n\nCautare valutei dupa curs:\nIntroduceti cursul:");
scanf("%f",&curs);
cautare_date_in(2,curs);
getch();
break;}
case 6: { system("cls");
sortare(n);
getch();
break;}
case 8:{ system("cls");
char nume[100];
printf("\n\nModificare valuta dupa nume:\nNumele valutei ce va fi modificat:");
scanf("%s",&nume);
modificare_date(nume);
getch();
break;}
case 9: {system("cls");
char nume_fisier[100];
printf("\nSalvarea datelor...\nIntroduceti denumirea fisierului unde vor fi salvate datele:");
scanf("%s",&nume_fisier);
salvare_date(nume_fisier);
getch();
break;}
case 10: goto iesire; }
} while(q!=0);
iesire: getch();}