Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- typedef struct cd{
- char *nume_album;
- int zi_lansare;
- int luna_lansare;
- int an_lansare;
- float pret_album;
- struct cd *urm_cd;
- }cd;
- typedef struct artist{
- char *nume_artist;
- cd *albume;
- struct artist *urm_artist;
- }artist;
- artist *prim = NULL;
- artist *cauta_nume_artist(char *nume, artist *lista){
- artist *q;
- for(q=lista; q!=NULL && strcmp(q->nume_artist, nume)<0; q=q->urm_artist);
- if(q != NULL && strcmp(q->nume_artist, nume) == 0){
- return q;
- }
- return NULL;
- }
- cd *cauta_nume_album(char *nume, cd *lista){
- cd *q;
- for(q=lista; q!=NULL && strcmp(q->nume_album, nume)<0; q=q->urm_cd);
- if(q != NULL && strcmp(q->nume_album, nume) == 0){
- return q;
- }
- return NULL;
- }
- cd *stergere_album(char *nume, cd *lista){
- cd *q1, *q2;
- for(q1=q2=lista;q1!=NULL && strcmp(q1->nume_album,nume)<0;q2=q1,q1=q1->urm_cd);
- if(q1 != NULL && strcmp(q1->nume_album, nume)==0){
- if(q1!=q2){
- q2->urm_cd = q1->urm_cd;
- }
- else{
- lista = lista->urm_cd;
- }
- free(q1->nume_album);
- free(q1);
- }
- return lista;
- }
- artist *sterge_artist(char *nume, artist *lista){
- artist *q1, *q2;
- for(q1=q2=lista; q1!=NULL && strcmp(q1->nume_artist,nume)<0; q2=q1, q1=q1->urm_artist);
- if(q1 != NULL && strcmp(q1->nume_artist, nume) == 0){
- if(q1!=q2){
- q2->urm_artist = q1->urm_artist;
- }
- else{
- lista = lista->urm_artist;
- }
- free(q1->nume_artist);
- free(q1->albume);
- free(q1);
- }
- return lista;
- }
- cd* introd_cd(cd* lista, cd *p){
- cd *q1, *q2;
- for(q1=q2=lista;q1!=NULL&&(p->pret_album <= q1->pret_album);q2=q1,q1=q1->urm_cd);
- if(q1==q2){
- p->urm_cd = lista;
- return p;
- }
- else{
- q2->urm_cd = p;
- p->urm_cd = q1;
- return lista;
- }
- return lista;
- }
- artist *introd_artist(artist *lista, artist *p){
- artist *q1, *q2;
- for(q1=q2=lista;q1!=NULL&&strcmp(q1->nume_artist,p->nume_artist)<0;q2=q1,q1=q1->urm_artist);
- if(q1==q2){
- p->urm_artist= lista;
- return p;
- }
- else{
- q2->urm_artist=p;
- p->urm_artist=q1;
- return lista;
- }
- return lista;
- }
- artist *introd(artist *lista, char *numeArtist, char *numeAlbum, int ziLansare, int lunaLansare, int anLansare, float pretAlbum){
- artist *a;
- cd *c;
- if(a=cauta_nume_artist(numeArtist,lista)){
- if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
- printf("\nNu este suficienta memorie!\n");
- }
- strcpy(c->nume_album,numeAlbum);
- c->zi_lansare = ziLansare;
- c->luna_lansare = lunaLansare;
- c->an_lansare = anLansare;
- c->pret_album = pretAlbum;
- c->urm_cd = NULL;
- a->albume = introd_cd(a->albume,c);
- }
- else{
- if((a=(artist*)malloc(sizeof(artist)))==NULL || (a->nume_artist = (char*)malloc(strlen(numeArtist)+1))==NULL){
- printf("\nNu este suficienta memorie!\n");
- }
- strcpy(a->nume_artist, numeArtist);
- a->albume = NULL;
- lista = introd_artist(lista, a);
- if((c=(cd*)malloc(sizeof(cd)))==NULL || (c->nume_album = (char*)malloc(strlen(numeAlbum)+1))==NULL){
- printf("\nNu este suficienta memorie!\n");
- }
- strcpy(c->nume_album,numeAlbum);
- c->zi_lansare = ziLansare;
- c->luna_lansare = lunaLansare;
- c->an_lansare = anLansare;
- c->pret_album = pretAlbum;
- c->urm_cd = NULL;
- a->albume = introd_cd(a->albume, c);
- }
- return lista;
- }
- void citire(){
- FILE *f;
- if((f=fopen("muzica.txt", "rt")) == NULL){
- printf("Nu exista fisierul muzica.txt.\nApasati orice tasta pentru a iesi din program ");
- printf("...");
- getch();
- exit(1);
- }
- while(!feof(f)){
- char numeArtist[30], numeAlbum[30];
- int ziLansare, lunaLansare, anLansare;
- float pretAlbum;
- fscanf(f, "%s %s %d %d %d %f", numeArtist, numeAlbum, &ziLansare, &lunaLansare, &anLansare, &pretAlbum);
- prim = introd(prim,numeArtist, numeAlbum, ziLansare, lunaLansare, anLansare, pretAlbum);
- }
- }
- void afisare(artist *lista){
- system("cls");
- artist *a;
- cd *c;
- printf("\nArtist Nume album Data lansarii Pret album");
- printf("\n--------------------------------------------------------------------------");
- for(a=lista; a!=NULL; a=a->urm_artist){
- printf("\n%s", a->nume_artist);
- if(a->albume != NULL){
- for(c=a->albume; c!=NULL; c=c->urm_cd){
- printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
- }
- }
- printf("\n\n");
- }
- }
- void afiseaza_dupa_nume(){
- char nume[30];
- artist *a;
- cd *c;
- printf("\nIntroduceti numele folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
- scanf("%s", nume);
- fflush(stdin);
- if(a = cauta_nume_artist(nume,prim)){
- system("cls");
- printf("\nArtist Nume album Data lansarii Pret album");
- printf("\n--------------------------------------------------------------------------");
- printf("\n%s", a->nume_artist);
- for(c=a->albume; c!=NULL; c=c->urm_cd){
- printf("\n%30s%15d %2d %2d %20.2f", c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
- }
- }
- else{
- printf("\nArtistul nu a fost gasit!\n");
- }
- }
- void albume_asemanatoare(){
- artist *aux = NULL, *a;
- cd *c;
- char nume[30];
- int gasit = 0;
- printf("\nIntroduceti numele albumului folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
- scanf("%s", nume);
- for(a=prim; a!=NULL; a=a->urm_artist){
- for(c=a->albume; c != NULL; c=c->urm_cd){
- if(strcmp(c->nume_album, nume) == 0){
- gasit = 1;
- aux = introd(aux, a->nume_artist, c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
- }
- }
- }
- if(gasit){
- afisare(aux);
- }
- else{
- printf("\nAlbumul '%s' nu exista!\n", nume);
- }
- }
- void stergere_album_dupa_nume(){
- char nume[30];
- artist *a;
- cd *c;
- printf("\nIntroduceti umele albumului care doriti sa-l stergeti folosind CamelCase in cazul in care numele contine mai multe cuvinte.\n");
- scanf("%s", nume);
- fflush(stdin);
- for(a=prim; a!=NULL; a=a->urm_artist){
- a->albume = stergere_album(nume, a->albume);
- if(a->albume == NULL){
- prim = sterge_artist(a->nume_artist, a);
- }
- }
- afisare(prim);
- }
- void introd_tastatura(){
- char numeArtist[30], numeAlbum[30];
- int ziLansare, lunaLansare, anLansare;
- float pretAlbum;
- printf("\nFolositi CamelCase in cazul titlurilor cu mai multe cuvinte!");
- printf("\n____________________________________________________________");
- do{
- printf("\nNumele artistului: ");
- fflush(stdin);
- gets(numeArtist);
- }while(!strcmp(numeArtist,""));
- do{
- printf("\nNumele albumului: ");
- fflush(stdin);
- gets(numeAlbum);
- }while(!strcmp(numeAlbum,""));
- do{
- printf("\nZiua lansarii: ");
- scanf("%d", &ziLansare);
- }while(!ziLansare);
- do{
- printf("\nLuna lansarii: ");
- scanf("%d", &lunaLansare);
- }while(!lunaLansare);
- do{
- printf("\nAnul lansarii: ");
- scanf("%d", &anLansare);
- }while(!anLansare);
- do{
- printf("\nPretul albumului: ");
- scanf("%f", &pretAlbum);
- }while(!pretAlbum);
- introd(prim, numeArtist, numeAlbum, ziLansare, lunaLansare, anLansare, pretAlbum);
- afisare(prim);
- }
- void perioada(){
- artist *aux = NULL, *a;
- cd *c;
- int ziLansare1, ziLansare2;
- int lunaLansare1, lunaLansare2;
- int anLansare1, anLansare2;
- printf("\nIntroduceti inceputul intervalului");
- printf("\nZi lansare: ");
- scanf("%d", &ziLansare1);
- printf("\nLuna lansare: ");
- scanf("%d", &lunaLansare1);
- printf("\nAn lansare: ");
- scanf("%d", &anLansare1);
- printf("\n___________________________");
- printf("\nIntroduceti sfarsitul intervalului");
- printf("\nZi lansare: ");
- scanf("%d", &ziLansare2);
- printf("\nLuna lansare: ");
- scanf("%d", &lunaLansare2);
- printf("\nAn lansare: ");
- scanf("%d", &anLansare2);
- for(a=prim; a!=NULL; a=a->urm_artist){
- for(c=a->albume; c != NULL; c=c->urm_cd){
- if( (c->zi_lansare > ziLansare1) &&
- (c->zi_lansare < ziLansare2) &&
- (c->luna_lansare > lunaLansare1) &&
- (c->luna_lansare < lunaLansare2) &&
- (c->an_lansare > anLansare1) &&
- (c->an_lansare < anLansare2)){
- aux = introd(aux, a->nume_artist, c->nume_album, c->zi_lansare, c->luna_lansare, c->an_lansare, c->pret_album);
- }
- }
- }
- afisare(aux);
- }
- void actualizare(){
- FILE *f;
- artist *a;
- cd *c;
- f = fopen("muzica.txt", "wt");
- for(a=prim; a!=NULL; a=a->urm_artist){
- for(c=a->albume; c!=NULL; c=c->urm_cd){
- fprintf(f,"%s ",a->nume_artist);
- fprintf(f,"%s ",c->nume_album);
- fprintf(f,"%d ",c->zi_lansare);
- fprintf(f,"%d ",c->luna_lansare);
- fprintf(f,"%d ",c->an_lansare);
- if(a->urm_artist == NULL && c->urm_cd == NULL){
- fprintf(f,"%f",c->pret_album);
- }
- else{
- fprintf(f,"%f\n",c->pret_album);
- }
- }
- }
- fclose(f);
- }
- void meniu(){
- int optiune;
- do{
- printf("\n\n");
- printf("\n1. Cautare artist dupa nume.");
- printf("\n2. Cautare albume cu nume identic.");
- printf("\n3. Stergere album dupa nume.");
- printf("\n4. Introducere album.");
- printf("\n5. Afisare dupa perioada data.");
- printf("\n6. Actualizare.");
- printf("\n0. Iesire din program");
- printf("\n>");
- scanf("%d", &optiune);
- switch(optiune){
- case 1:{
- afiseaza_dupa_nume();
- }break;
- case 2:{
- albume_asemanatoare();
- }break;
- case 3:{
- stergere_album_dupa_nume();
- }break;
- case 4:{
- introd_tastatura();
- }break;
- case 5:{
- perioada();
- }break;
- case 6:{
- actualizare();
- }break;
- default:{
- printf("\nOptiune invalida! Incercati din nou.\n");
- }break;
- }
- }while(optiune!=0);
- }
- void main(){
- printf("Citire in curs ...\n");
- citire();
- system("cls");
- afisare(prim);
- printf("\n\n");
- meniu();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement