Sunteți pe pagina 1din 7

Text of the program in C language

//header file
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> //system("cls"); system("pause");
#include <string.h>

//country
typedef struct{
char nume[30]; //Nume
char capitala[30]; //Capitala
float aria; //Aria tarii
long pop; //Nr de oameni
float pib; //Produs intern brut
}country;

//Alocarea si realocarea memoriei


country* reloc(country *a,int n);
//Versiunea 1 de citire Manual
country* intro1(country *a,long *n);
//Versiunea 2 de citire(Fisier)
country* intro2(country *a,long *n,char *fil_name);
//Afisare simpla a datelor
void afisare (country *a,long n);
//Afisare dupa numarul populatiei introdus(cautare dupa populatie)
void afis_an(country *a, long n,long an);
//Functia pentru adaugarea
void add_coun(country *a,long *n,long nr);
//functia pentru stergere
void del_coun(country *a,long *n,long nd);
//functia de salvare
void save(country *a,long n,long *fname);
//afisarea tarilor in ordine descrescatoare dupa pibul lor
void ord_ds(country *a,long n);
//modificarea datelor
void coun_m(country *a,long nm);

//country.cpp
#include "header.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> //system("cls"); system("pause");
#include <string.h>

//alocarea si realocarea memoriei

country* reloc(country *a,int n){


a=(country*)realloc(a,n*sizeof(country));
if(!a){
printf("\a\nNu sa alocat memorie!\n");
system("pause");
exit(1);
}
return a;
}

//Versiunea 1 de citire Manual


country* intro1(country *a,long *n){
long i;
printf("Introdu numarul de tari: ");
scanf("%d",n);
if(*n<=100){ //memoria statica, numarul maxim de inregistrari
for(i=0;i<*n;i++){
printf("\n****************************************\n\n");
printf("Introdu datele tarii %d\n",i+1);
printf("Numele: ");
scanf("%s",&a[i].nume);
printf("Capitala: ");
scanf("%s",&a[i].capitala);
printf("Aria: ");
scanf("%f",&a[i].aria);
printf("Populatia: ");
scanf("%d",&a[i].pop);
printf("Produsul intern brut: ");
scanf("%f",&a[i].pib);
}
}else{
system("cls");
printf("\aNumarul introdus depaseste marimea maxim a tabloului\n");
system("pause");
}
return a;
}
//Versiunea 2 de citire(Fisier)
country* intro2(country *a,long *n,char *fil_name){
long i=0;
FILE *fil=fopen(fil_name,"rt"); //deschiderea fisierului din aceeasi
mapa, "r" read ,"t" text
if(fil==NULL){
printf("\aFisierul nu exista!\n");
system("pause");
exit(1);
}
while(!feof(fil)){
fscanf(fil,"%s%s%f%d
%f",&a[i].nume,&a[i].capitala,&a[i].aria,&a[i].pop,&a[i].pib);
i++;
}
*n=i;
fclose(fil);
return a;
}
//Afisare simpla a datelor
void afisare (country *a,long n){
long i;
system("cls");
for(i=0;i<n;i++){
printf("****************************************\n\n");
printf("Datele tarii: %d\n",i+1);
printf("Nume: %s\n",a[i].nume);
printf("Capitala: %s\n",a[i].capitala);
printf("Aria: %f\n",a[i].aria);
printf("Populatia: %d\n",a[i].pop);
printf("Pib-ul: %.2f\n\n",a[i].pib);
}
}
//Afisare dupa numarul populatiei introdus(cautare dupa populatie)
void afis_an(country *a, long n,long an){
long i,j=0;
printf("Tarile cu populatie : %d\n\n",an);
for(i=0;i<n;i++){
if(a[i].pop==an){
printf("****************************************\n\n");
printf("Nr. de ordine: %d\n",i+1);
printf("Nume: %s\n",a[i].nume);
printf("Capitala: %s\n",a[i].capitala);
printf("Aria: %.2f\n",a[i].aria);
printf("Populatia: %d\n",a[i].pop);
printf("Pib-ul: %.2f\n\n",a[i].pib);
j++;
}
}
if(!j){ //se verifica daca a fost gasit macar o tara din lista, daca
nu atunci afiseaza mesajul de jos
system("cls");
printf("Nu s-au gasit tari cu %d oameni.\n\n",an);
}
}
//Functia pentru adaugarea
void add_coun(country *a,long *n,long nr){
long i;
for(i=*n;i<*n+nr;i++){
printf("\n****************************************\n\n");
printf("Introdu datele tarii %d\n",i+1);
printf("Nume: ");
scanf("%s",&a[i].nume);
printf("Capitala: ");
scanf("%s",&a[i].capitala);
printf("Aria: ");
scanf("%f",&a[i].aria);
printf("Populatia: ");
scanf("%d",&a[i].pop);
printf("Pib-ul: ");
scanf("%f",&a[i].pib);
}
*n=*n+nr;
}
//functia pentru stergere
void del_coun(country *a,long *n,long nd){
long i;
*n=*n-1;
if(*n>0){//se verifica daca mai sunt inregistrari pentru stergere
for(i=nd-1;i<*n;i++)
a[i]=a[i+1];
}else{
system("cls");
printf("\nNu mai sunt tari!\a\n");
}
}
//functia de salvare
void save(country *a,long n,char *fname){
long i;
FILE *fil=fopen(fname,"wt");
for(i=0;i<n;i++){
fprintf(fil,"%s %s %.2f %d
%.2f",a[i].nume,a[i].capitala,a[i].aria,a[i].pop,a[i].pib);
if(i<n-1) //pentru o citire corecta a datelor din fisier pe urma
fprintf(fil,"\n");
}
fclose(fil);
}
//afisarea tarilor in ordine descrescatoare dupa pibul lor
void ord_ds(country *a,long n){
long i,j,p;
float max;
country t;
for(i=0;i<n;i++){
max=a[i].pib;
p=i;
for(j=i;j<n;j++){
if(max<a[j].pib){
max=a[j].pib;
p=j;
}
}
t=a[i];
a[i]=a[p];
a[p]=t;
}
afisare(a,n);
}
//modificarea datelor
void coun_m(country *a,long nm){
nm=nm-1;
printf("Nr. de ordine: %d\n",nm+1);
printf("Nume : %s\n",a[nm].nume);
printf("Capitala %s\n",a[nm].capitala);
printf("Aria: %.2f\n",a[nm].aria);
printf("Populatia: %d\n",a[nm].pop);
printf("Pib-ul: %.2f\n",a[nm].pib);
printf("\n****************************************\n\n");
printf("Introdu datele tarii pentru modificare:\n");
printf("Nume: ");
scanf("%s",&a[nm].nume);
printf("Capitala: ");
scanf("%s",&a[nm].capitala);
printf("Aria: ");
scanf("%f",&a[nm].aria);
printf("Populatia: ");
scanf("%d",&a[nm].pop);
printf("Pib-ul: ");
scanf("%f",&a[nm].pib);
}

//main.cpp
#include "country.cpp"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> //system("cls"); system("pause");
#include <string.h>

//main
int main(){
country a[111];
long n=0,an,nr,nd,nm;
long com,com1,m;
char fname[20],fil_name[10];
in: system("cls");
printf("Introduceti datele tarii
|\n-------------------------------\n");
printf("\n * Manual: 1\n * Fisier: 2\n\n * Exit: 0\n\nComanda:
");
scanf("%d",&com);
switch(com){
case 0:
exit(0);
break;
case 1:
system("cls");
intro1(a,&n);
save(a,n,"temp.txt");
break;
case 2:
system("cls");
printf("Introdu numele fisierului pentru citire:\n");
scanf("%s",&fil_name);
strcat(fil_name,".txt"); //adauga la numele fisierului
extensia .txt
intro2(a,&n,fil_name);
save(a,n,"temp.txt");
break;
default:
system("cls");
printf("\aAti introdus o comanda gresita!\n");
system("pause");
goto in;
break;
};
while(1){ //ciclu infinit
system("cls");
printf("Lista comenzilor |\n-----------------");
printf("\n\n -------------------------\n | Comenzi pentru afisarea
|\n -------------------------\n");
printf("\n * Lista cu tari: 1");
printf("\n * Cautare dupa nr. de oameni: 2");
printf("\n * Lista in ordine descrescatoare dupa pib: 3");
printf("\n\n ---------------------------\n | Comenzi pentru
modificare |\n ---------------------------\n");
printf("\n * Adauga tara in lista: 4");
printf("\n * Sterge tara din lista: 5");
printf("\n * Modifica datele tarii: 6");
printf("\n\n ------------------------\n | Comenzi pentru salvare |\n
------------------------\n");
printf("\n * Salveaza schimbarile in fisier: 7");
printf("\n * Starea initiala a datelor: 8");
printf("\n\n -------------------------\n | Comenzi pentru navigare
|\n -------------------------\n");
printf("\n * Meniu precedent: 11");
printf("\n * Exit: 0");
printf("\n\nComanda: ");
scanf("%d",&com1);
switch(com1){
case 0:
exit(0);
break;
case 1:
system("cls");
afisare(a,n);
break;
case 2:
system("cls");
printf("Introduceti nr. de oameni dorit: ");
scanf("%d",&an);
if(an>=0 && an<=2000000000){
system("cls");
afis_an(a,n,an);
} else{
system("cls");
printf("N introdus nu este corect!\a\n");
}
break;
case 3:
int com2;
system("cls");
printf("Lista in ordine descrescatoare dupa pret: \n");
ord_ds(a,n);
printf("\n\n * Revenire la starea initiala: 1\n * Salveaza
in fisier: 2\n * Salvarea listei in ordine descr.: 3");
printf("\n\nComanda: ");
scanf("%d",&com2);
switch(com2){
case 1:
system("cls");
printf("Revenirea la starea initiala a datelor sa
efectuat cu succes!\n");
intro2(a,&n,"temp.txt");
break;
case 2:
system("cls");
printf("Introdu numele fisierului pentru salvare:
");
scanf("%s",&fname);
strcat(fname,".txt");
save(a,n,fname);
printf("\nSalvarea a avut loc cu succes!\a\n\n");
intro2(a,&n,"temp.txt");
break;
case 3:
system("cls");
printf("\nSalvarea a avut loc cu succes!\a\n\n");
break;
default:
printf("\n\aAti introdus o comanda gresita!\n");
intro2(a,&n,"temp.txt");
break;
}
break;
case 4:
system("cls");
printf("Introdu numarul de tari pentru adaugare: ");
scanf("%d",&nr);
add_coun(a,&n,nr);
save(a,n,"temp.txt");
break;
case 5:
system("cls");
printf("Introdu numarul de ordine a tarii pentru stergere:
");
scanf("%d",&nd);
del_coun(a,&n,nd);
break;
case 6:
system("cls");
printf("Introdu numarul de ordine a tarii: ");
scanf("%d",&nm);
if(nm<=n && nm>0) //se verifica daca nr de ordine introdus
exista
coun_m(a,nm);
else
printf("\nNu exista tara cu asa numar de ordine\a\n");
break;
case 7:
system("cls");
printf("Introdu numele fisierului pentru salvare: ");
scanf("%s",&fname);
strcat(fname,".txt"); //adauga a denumirea fisierului
termintia ".txt" adica formatul fisierului
save(a,n,fname);
printf("\nSalvarea a avut loc cu succes!\a\n\n");
break;
case 8:
system("cls");
intro2(a,&n,"temp.txt");
printf("Reinoirea datelor sa efectuat cu succes!\n");
break;
case 11:
goto in; //intoarcerea la meniul de introducere a datelor
folosind goto catre eticheta in
break;
default:
system("cls");
printf("\aAti introdus o comanda gresita!\n");
break;
};
system("pause");
}
return 0;

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