Advertisement
Guest User

Untitled

a guest
May 29th, 2016
66
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->nume_album);
  51.         free(q1);
  52.     }
  53.     return lista;
  54. }
  55.  
  56. artist *sterge_artist(char *nume, artist *lista){
  57.     artist *q1, *q2;
  58.     for(q1=q2=lista; q1!=NULL && strcmp(q1->nume_artist,nume)<0; q2=q1, q1=q1->urm_artist);
  59.     if(q1 != NULL && strcmp(q1->nume_artist, nume) == 0){
  60.         if(q1!=q2){
  61.             q2->urm_artist = q1->urm_artist;
  62.         }
  63.         else{
  64.             lista = lista->urm_artist;
  65.         }
  66.         free(q1->nume_artist);
  67.         free(q1->albume);
  68.         free(q1);
  69.     }
  70.     return lista;
  71. }
  72.  
  73. cd* introd_cd(cd* lista, cd *p){
  74.     cd *q1, *q2;
  75.     for(q1=q2=lista;q1!=NULL&&(p->pret_album <= q1->pret_album);q2=q1,q1=q1->urm_cd);
  76.     if(q1==q2){
  77.         p->urm_cd = lista;
  78.         return p;
  79.     }
  80.     else{
  81.         q2->urm_cd = p;
  82.         p->urm_cd = q1;
  83.         return lista;
  84.     }
  85.     return lista;
  86. }
  87.  
  88. artist *introd_artist(artist *lista, artist *p){
  89.     artist *q1, *q2;
  90.     for(q1=q2=lista;q1!=NULL&&strcmp(q1->nume_artist,p->nume_artist)<0;q2=q1,q1=q1->urm_artist);
  91.  
  92.     if(q1==q2){
  93.         p->urm_artist= lista;
  94.         return p;
  95.     }
  96.     else{
  97.         q2->urm_artist=p;
  98.         p->urm_artist=q1;
  99.         return lista;
  100.     }
  101.     return lista;
  102. }
  103.  
  104. artist *introd(artist *lista, char *numeArtist, char *numeAlbum, int ziLansare, int lunaLansare, int anLansare, float pretAlbum){
  105.     artist *a;
  106.     cd *c;
  107.     if(a=cauta_nume_artist(numeArtist,lista)){
  108.         if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
  109.             printf("\nNu este suficienta memorie!\n");
  110.         }
  111.         strcpy(c->nume_album,numeAlbum);
  112.         c->zi_lansare   = ziLansare;
  113.         c->luna_lansare = lunaLansare;
  114.         c->an_lansare   = anLansare;
  115.         c->pret_album   = pretAlbum;
  116.         c->urm_cd       = NULL;
  117.         a->albume       = introd_cd(a->albume,c);
  118.     }
  119.     else{
  120.         if((a=(artist*)malloc(sizeof(artist)))==NULL || (a->nume_artist = (char*)malloc(strlen(numeArtist)+1))==NULL){
  121.             printf("\nNu este suficienta memorie!\n");
  122.         }
  123.         strcpy(a->nume_artist, numeArtist);
  124.         a->albume = NULL;
  125.         lista = introd_artist(lista, a);
  126.         if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
  127.             printf("\nNu este suficienta memorie!\n");
  128.         }
  129.         strcpy(c->nume_album,numeAlbum);
  130.         c->zi_lansare   = ziLansare;
  131.         c->luna_lansare = lunaLansare;
  132.         c->an_lansare   = anLansare;
  133.         c->pret_album   = pretAlbum;
  134.         c->urm_cd       = NULL;
  135.         a->albume       = introd_cd(a->albume, c);
  136.     }
  137.     return lista;
  138. }
  139.  
  140. void citire(){
  141.     FILE *f;
  142.     if((f=fopen("muzica.txt", "rt")) == NULL){
  143.         printf("Nu exista fisierul muzica.txt.\nApasati orice tasta pentru a iesi din program ");
  144.         printf("...");
  145.         getch();
  146.         exit(1);
  147.     }
  148.     while(!feof(f)){
  149.         char numeArtist[30], numeAlbum[30];
  150.         int ziLansare, lunaLansare, anLansare;
  151.         float pretAlbum;
  152.         fscanf(f, "%s %s %d %d %d %f", numeArtist, numeAlbum, &ziLansare, &lunaLansare, &anLansare, &pretAlbum);
  153.         prim = introd(prim,numeArtist, numeAlbum, ziLansare, lunaLansare, anLansare, pretAlbum);
  154.     }
  155. }
  156.  
  157. void afisare(artist *lista){
  158.     system("cls");
  159.     artist *a;
  160.     cd *c;
  161.     printf("\nArtist          Nume album        Data lansarii       Pret album");
  162.     printf("\n--------------------------------------------------------------------------");
  163.     for(a=lista; a!=NULL; a=a->urm_artist){
  164.         printf("\n%s", a->nume_artist);
  165.         if(a->albume != NULL){
  166.             for(c=a->albume; c!=NULL; c=c->urm_cd){
  167.                 printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  168.             }
  169.         }
  170.         printf("\n\n");
  171.     }
  172. }
  173.  
  174. void afiseaza_dupa_nume(){
  175.     char nume[30];
  176.     artist *a;
  177.     cd *c;
  178.     printf("\nIntroduceti numele folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
  179.     scanf("%s", nume);
  180.     fflush(stdin);
  181.     if(a = cauta_nume_artist(nume,prim)){
  182.         system("cls");
  183.         printf("\nArtist          Nume album        Data lansarii       Pret album");
  184.         printf("\n--------------------------------------------------------------------------");
  185.         printf("\n%s", a->nume_artist);
  186.         for(c=a->albume; c!=NULL; c=c->urm_cd){
  187.             printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  188.         }
  189.     }
  190.     else{
  191.         printf("\nArtistul nu a fost gasit!\n");
  192.     }
  193. }
  194.  
  195. void albume_asemanatoare(){
  196.     artist *aux = NULL, *a;
  197.     cd *c;
  198.     char nume[30];
  199.     int gasit = 0;
  200.     printf("\nIntroduceti numele albumului folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
  201.     scanf("%s", nume);
  202.    
  203.     for(a=prim; a!=NULL; a=a->urm_artist){
  204.         for(c=a->albume; c != NULL;  c=c->urm_cd){
  205.             if(strcmp(c->nume_album, nume) == 0){
  206.                 gasit = 1;
  207.                 aux = introd(aux, a->nume_artist, c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  208.             }
  209.         }
  210.     }
  211.     if(gasit){
  212.         afisare(aux);
  213.     }
  214.     else{
  215.         printf("\nAlbumul '%s' nu exista!\n", nume);
  216.     }
  217. }
  218.  
  219. void stergere_album_dupa_nume(){
  220.     char nume[30];
  221.     artist *a;
  222.     cd *c;
  223.  
  224.     printf("\nIntroduceti umele albumului care doriti sa-l stergeti folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
  225.     scanf("%s", nume);
  226.     fflush(stdin);
  227.     for(a=prim; a!=NULL; a=a->urm_artist){
  228.         a->albume = stergere_album(nume, a->albume);
  229.         if(a->albume == NULL){
  230.             prim = sterge_artist(a->nume_artist, a);
  231.         }
  232.     }
  233.     afisare(prim);
  234. }
  235. void introd_tastatura(){
  236.     char numeArtist[30], numeAlbum[30];
  237.     int ziLansare, lunaLansare, anLansare;
  238.     float pretAlbum;   
  239.     printf("\nFolositi CamelCase in cazul titlurilor cu mai multe cuvinte!");
  240.     printf("\n____________________________________________________________");
  241.     do{
  242.         printf("\nNumele artistului: ");
  243.         fflush(stdin);
  244.         gets(numeArtist);
  245.     }while(!strcmp(numeArtist,""));
  246.  
  247.     do{
  248.         printf("\nNumele albumului: ");
  249.         fflush(stdin);
  250.         gets(numeAlbum);
  251.     }while(!strcmp(numeAlbum,""));
  252.  
  253.     do{
  254.         printf("\nZiua lansarii: ");
  255.         scanf("%d", &ziLansare);
  256.     }while(!ziLansare);
  257.  
  258.     do{
  259.         printf("\nLuna lansarii: ");
  260.         scanf("%d", &lunaLansare);
  261.     }while(!lunaLansare);
  262.  
  263.     do{
  264.         printf("\nAnul lansarii: ");
  265.         scanf("%d", &anLansare);
  266.     }while(!anLansare);
  267.  
  268.     do{
  269.         printf("\nPretul albumului: ");
  270.         scanf("%f", &pretAlbum);
  271.     }while(!pretAlbum);
  272.  
  273.     introd(prim, numeArtist, numeAlbum, ziLansare, lunaLansare, anLansare, pretAlbum);
  274.     afisare(prim);
  275. }
  276.  
  277. void perioada(){
  278.     artist *aux = NULL, *a;
  279.     cd *c;
  280.    
  281.     int ziLansare1, ziLansare2;
  282.     int lunaLansare1, lunaLansare2;
  283.     int anLansare1, anLansare2;
  284.  
  285.     printf("\nIntroduceti inceputul intervalului");
  286.     printf("\nZi lansare: ");
  287.     scanf("%d", &ziLansare1);
  288.     printf("\nLuna lansare: ");
  289.     scanf("%d", &lunaLansare1);
  290.     printf("\nAn lansare: ");
  291.     scanf("%d", &anLansare1);
  292.  
  293.     printf("\n___________________________");
  294.     printf("\nIntroduceti sfarsitul intervalului");
  295.     printf("\nZi lansare: ");
  296.     scanf("%d", &ziLansare2);
  297.     printf("\nLuna lansare: ");
  298.     scanf("%d", &lunaLansare2);
  299.     printf("\nAn lansare: ");
  300.     scanf("%d", &anLansare2);
  301.  
  302.     for(a=prim; a!=NULL; a=a->urm_artist){
  303.         for(c=a->albume; c != NULL;  c=c->urm_cd){
  304.             if( (c->zi_lansare      >  ziLansare1) &&
  305.                 (c->zi_lansare      <  ziLansare2) &&
  306.  
  307.                 (c->luna_lansare    > lunaLansare1) &&
  308.                 (c->luna_lansare    < lunaLansare2) &&
  309.  
  310.                 (c->an_lansare      > anLansare1) &&
  311.                 (c->an_lansare      < anLansare2)){
  312.  
  313.                 aux = introd(aux, a->nume_artist, c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
  314.             }
  315.         }
  316.     }
  317.     afisare(aux);
  318. }
  319.  
  320. void actualizare(){
  321.     FILE *f;
  322.     artist *a;
  323.     cd *c;
  324.     f = fopen("muzica.txt", "wt");
  325.     for(a=prim; a!=NULL; a=a->urm_artist){
  326.         for(c=a->albume; c!=NULL; c=c->urm_cd){
  327.             fprintf(f,"%s ",a->nume_artist);
  328.             fprintf(f,"%s ",c->nume_album);
  329.             fprintf(f,"%d ",c->zi_lansare);
  330.             fprintf(f,"%d ",c->luna_lansare);
  331.             fprintf(f,"%d ",c->an_lansare);
  332.             if(a->urm_artist == NULL && c->urm_cd == NULL){
  333.                 fprintf(f,"%f",c->pret_album);
  334.             }
  335.             else{
  336.                 fprintf(f,"%f\n",c->pret_album);
  337.             }
  338.         }
  339.     }
  340.     fclose(f);
  341. }
  342. void meniu(){
  343.     int optiune;
  344.     do{
  345.         printf("\n\n");
  346.         printf("\n1. Cautare artist dupa nume.");
  347.         printf("\n2. Cautare albume cu nume identic.");
  348.         printf("\n3. Stergere album dupa nume.");
  349.         printf("\n4. Introducere album.");
  350.         printf("\n5. Afisare dupa perioada data.");
  351.         printf("\n6. Actualizare.");
  352.         printf("\n0. Iesire din program");
  353.  
  354.         printf("\n>");
  355.         scanf("%d", &optiune);
  356.  
  357.         switch(optiune){
  358.             case 1:{
  359.                 afiseaza_dupa_nume();
  360.             }break;
  361.             case 2:{
  362.                 albume_asemanatoare();
  363.             }break;
  364.             case 3:{
  365.                 stergere_album_dupa_nume();
  366.             }break;
  367.             case 4:{
  368.                 introd_tastatura();
  369.             }break;
  370.             case 5:{
  371.                 perioada();
  372.             }break;
  373.             case 6:{
  374.                 actualizare();
  375.             }break;
  376.             default:{
  377.                 printf("\nOptiune invalida! Incercati din nou.\n");
  378.             }break;
  379.         }
  380.  
  381.     }while(optiune!=0);
  382. }
  383.  
  384. void main(){
  385.     printf("Citire in curs ...\n");
  386.     citire();
  387.     system("cls");
  388.     afisare(prim);
  389.     printf("\n\n");
  390.     meniu();
  391. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement