Advertisement
Guest User

Untitled

a guest
May 29th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. typedef struct cd{
  7.     char *nume_album;
  8.     int zi_lansare;
  9.     int luna_lansare;
  10.     int an_lansare;
  11.     float pret_album;
  12.     struct cd *urm_cd;
  13. }cd;
  14.  
  15. typedef struct artist{
  16.     char *nume_artist;
  17.     cd *albume;
  18.     struct artist *urm_artist;
  19. }artist;   
  20.  
  21. artist *prim = NULL;
  22.  
  23. artist *cauta_nume_artist(char *nume, artist *lista){
  24.     artist *q;
  25.     for(q=lista; q!=NULL && strcmp(q->nume_artist, nume)<0; q=q->urm_artist);
  26.     if(q != NULL && strcmp(q->nume_artist, nume) == 0){
  27.         return q;
  28.     }      
  29.     return NULL;
  30. }
  31.  
  32. cd *cauta_nume_album(char *nume, cd *lista){
  33.     cd *q;
  34.     for(q=lista; q!=NULL && strcmp(q->nume_album, nume)<0; q=q->urm_cd);
  35.     if(q != NULL && strcmp(q->nume_album, nume) == 0){
  36.         return q;
  37.     }
  38.     return NULL;
  39. }
  40. cd *stergere_album(char *nume, cd *lista){
  41.     cd *q1, *q2;
  42.     for(q1=q2=lista;q1!=NULL&&strcmp(q1->nume_album,nume)<0;q2=q1,q1=q1->urm_cd);
  43.     if(q1 != NULL && strcmp(q1->nume_album, nume)==0){
  44.         if(q1!=q2){
  45.             q2->urm_cd = q1->urm_cd;
  46.         }
  47.         else{
  48.             lista = lista->urm_cd;
  49.         }
  50.         free(q1);
  51.     }
  52.     return lista;
  53. }
  54.  
  55. cd* introd_cd(cd* lista, cd *p){
  56.     cd *q1, *q2;
  57.     for(q1=q2=lista;q1!=NULL&&(p->pret_album <= q1->pret_album);q2=q1,q1=q1->urm_cd);
  58.     p->urm_cd=q1;
  59.     if(q1==q2){
  60.         return p;
  61.     }
  62.     else{
  63.         q2->urm_cd=p;
  64.     }
  65.     return lista;
  66. }
  67.  
  68. artist *introd_artist(artist *lista, artist *p){
  69.     artist *q1, *q2;
  70.     for(q1=q2=lista;q1!=NULL&&strcmp(q1->nume_artist,p->nume_artist)<0;q2=q1,q1=q1->urm_artist);
  71.     p->urm_artist=q1;
  72.     if(q1==q2){
  73.         return p;
  74.     }
  75.     else{
  76.         q2->urm_artist=p;
  77.     }
  78.     return lista;
  79. }
  80.  
  81. artist *introd(artist *lista, char *numeArtist, char *numeAlbum, int ziLansare, int lunaLansare, int anLansare, float pretAlbum){
  82.     artist *a;
  83.     cd *c;
  84.     if(a=cauta_nume_artist(numeArtist,lista)){
  85.         if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
  86.             printf("\nNu este suficienta memorie!\n");
  87.         }
  88.         strcpy(c->nume_album,numeAlbum);
  89.         c->zi_lansare   = ziLansare;
  90.         c->luna_lansare = lunaLansare;
  91.         c->an_lansare   = anLansare;
  92.         c->pret_album   = pretAlbum;
  93.         c->urm_cd       = NULL;
  94.         a->albume       = introd_cd(a->albume,c);
  95.     }
  96.     else{
  97.         if((a=(artist*)malloc(sizeof(artist)))==NULL || (a->nume_artist = (char*)malloc(strlen(numeArtist)+1))==NULL){
  98.             printf("\nNu este suficienta memorie!\n");
  99.         }
  100.         strcpy(a->nume_artist, numeArtist);
  101.         a->albume = NULL;
  102.         lista = introd_artist(lista, a);
  103.         if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
  104.             printf("\nNu este suficienta memorie!\n");
  105.         }
  106.         strcpy(c->nume_album,numeAlbum);
  107.         c->zi_lansare   = ziLansare;
  108.         c->luna_lansare = lunaLansare;
  109.         c->an_lansare   = anLansare;
  110.         c->pret_album   = pretAlbum;
  111.         c->urm_cd       = NULL;
  112.         a->albume       = introd_cd(a->albume, c);
  113.     }
  114.     return lista;
  115. }
  116.  
  117. void citire(){
  118.     FILE *f;
  119.     if((f=fopen("muzica.txt", "rt")) == NULL){
  120.         printf("Nu exista fisierul muzica.txt.\nApasati orice tasta pentru a iesi din program ");
  121.         printf("...");
  122.         getch();
  123.         exit(1);
  124.     }
  125.     while(!feof(f)){
  126.         char numeArtist[30], numeAlbum[30];
  127.         int ziLansare, lunaLansare, anLansare;
  128.         float pretAlbum;
  129.         fscanf(f, "%s %s %d %d %d %f", numeArtist, numeAlbum, &ziLansare, &lunaLansare, &anLansare, &pretAlbum);
  130.         prim = introd(prim,numeArtist, numeAlbum, ziLansare, lunaLansare, anLansare, pretAlbum);
  131.     }
  132. }
  133.  
  134. void afisare(artist *lista){
  135.     system("cls");
  136.     artist *a;
  137.     cd *c;
  138.     printf("\nArtist          Nume album        Data lansarii       Pret album");
  139.     printf("\n--------------------------------------------------------------------------");
  140.     for(a=lista; a!=NULL; a=a->urm_artist){
  141.         printf("\n%s", a->nume_artist);
  142.         if(a->albume != NULL){
  143.             for(c=a->albume; c!=NULL; c=c->urm_cd){
  144.                 printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  145.             }
  146.         }
  147.         printf("\n\n");
  148.     }
  149. }
  150.  
  151. void afiseaza_dupa_nume(){
  152.     system("cls");
  153.     char nume[30];
  154.     artist *a;
  155.     cd *c;
  156.     printf("\nIntroduceti numele folosind camelCase in cazul in care numele contine mai multe cuvinte.\n");
  157.     scanf("%s", nume);
  158.     fflush(stdin);
  159.     if(a = cauta_nume_artist(nume,prim)){
  160.         system("cls");
  161.         printf("\nArtist          Nume album        Data lansarii       Pret album");
  162.         printf("\n--------------------------------------------------------------------------");
  163.         printf("\n%s", a->nume_artist);
  164.         for(c=a->albume; c!=NULL; c=c->urm_cd){
  165.             printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  166.         }
  167.     }
  168.     else{
  169.         printf("\nArtistul nu a fost gasit!\n");
  170.     }
  171. }
  172.  
  173. void albume_asemanatoare(){
  174.     artist *aux = NULL, *a;
  175.     cd *c;
  176.     char nume[30];
  177.     int gasit = 0;
  178.     printf("\nIntroduceti numele albumului folosind camelCase in cazul in care numele contine mai multe cuvinte.\n");
  179.     scanf("%s", nume);
  180.    
  181.     for(a=prim; a!=NULL; a=a->urm_artist){
  182.         for(c=a->albume; c != NULL;  c=c->urm_cd){
  183.             if(strcmp(c->nume_album, nume) == 0){
  184.                 gasit = 1;
  185.                 aux = introd(aux, a->nume_artist, c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  186.             }//end if strcmp
  187.         }//end for cd
  188.     }//end for artist
  189.     if(gasit){
  190.         afisare(aux);
  191.     }
  192.     else{
  193.         printf("\nAlbumul '%s' nu exista!\n", nume);
  194.     }
  195. }
  196.  
  197. void stergere_album_dupa_nume(){
  198.     char nume[30];
  199.     artist *a;
  200.     cd *c;
  201.  
  202.     printf("\nIntroduceti umele albumului care doriti sa-l stergeti folosind camelCase in cazul in care numele contine mai multe cuvinte.\n");
  203.     scanf("%s", nume);
  204.     fflush(stdin);
  205.     for(a=prim; a!=NULL; a=a->urm_artist){
  206.         a->albume = stergere_album(nume, a->albume);
  207.     }
  208.  
  209.     afisare(prim);
  210. }
  211. void meniu(){
  212.     int optiune;
  213.     do{
  214.         printf("\n\n");
  215.         printf("\n1. Cautare artist dupa nume.");
  216.         printf("\n2. Cautare albume cu nume identic.");
  217.         printf("\n3. Stergere album dupa nume.");
  218.  
  219.         printf("\n0. Iesire");
  220.  
  221.         printf("\n>");
  222.         scanf("%d", &optiune);
  223.         switch(optiune){
  224.             case 1:{
  225.                 afiseaza_dupa_nume();
  226.             }break;
  227.             case 2:{
  228.                 albume_asemanatoare();
  229.             }break;
  230.             case 3:{
  231.                 stergere_album_dupa_nume();
  232.             }break;
  233.             default:{
  234.  
  235.             }break;
  236.         }
  237.     }while(optiune!=0);
  238. }
  239.  
  240. void main(){
  241.     printf("Citire in curs ...\n");
  242.     citire();
  243.     system("cls");
  244.     afisare(prim);
  245.     printf("\n\n");
  246.     meniu();
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement