that_one_nigga_you_k

lista 5 pronta (1 struct)

Dec 16th, 2023 (edited)
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6.     int qtd;         // quantidade de playlists
  7.     int* id;         // ids, que tem o tamanho da quantidade
  8.     int* qtd_mus;    // quantidade de músicas em cada playlist
  9.     char*** nome_mus; // ponteiro triplo para alocar primeiro a quantidade de playlists, depois cada música em determinada playlist
  10. } playlist;
  11.  
  12. void CREATE(playlist** playlists) {
  13.     int id;
  14.     printf("digite o id da playlist: ");
  15.     scanf("%d", &id);
  16.  
  17.     (*playlists)->id = (int*)realloc((*playlists)->id, ((*playlists)->qtd + 1) * sizeof(int));
  18.     if ((*playlists)->id == NULL) {
  19.         fprintf(stderr, "erro alocando memoria para id, compre mais RAM\n");
  20.         exit(EXIT_FAILURE);
  21.     }
  22.  
  23.     (*playlists)->qtd_mus = (int*)realloc((*playlists)->qtd_mus, ((*playlists)->qtd + 1) * sizeof(int));
  24.     if ((*playlists)->qtd_mus == NULL) {
  25.         fprintf(stderr, "Erro alocando memoria para qtd_mus\n");
  26.         exit(EXIT_FAILURE);
  27.     }
  28.  
  29.     (*playlists)->qtd_mus[(*playlists)->qtd] = 0;
  30.  
  31.     (*playlists)->id[(*playlists)->qtd] = id;
  32.  
  33.     (*playlists)->qtd++;
  34.  
  35.     *playlists = (playlist*)realloc(*playlists, (*playlists)->qtd * sizeof(playlist));
  36.     if (*playlists == NULL) {
  37.         fprintf(stderr, "erro criando mais uma playlist\n");
  38.         exit(EXIT_FAILURE);
  39.     }
  40.  
  41.     // Allocate memory for nome_mus
  42.     (*playlists)->nome_mus = (char***)realloc((*playlists)->nome_mus, (*playlists)->qtd * sizeof(char**));
  43.     if ((*playlists)->nome_mus == NULL) {
  44.         fprintf(stderr, "Erro alocando memoria para nome_mus\n");
  45.         exit(EXIT_FAILURE);
  46.     }
  47.  
  48.     // inicializando mais um vetor para os nomes de musicas
  49.     (*playlists)->nome_mus[(*playlists)->qtd - 1] = NULL;
  50. }
  51.  
  52.  
  53. void ADD(playlist* playlists, char* nome) {
  54.     //char nome[40];
  55.     int id;
  56.  
  57.     playlists->qtd_mus = (int*)realloc(playlists->qtd_mus, (playlists->qtd + 1) * sizeof(int));
  58.  
  59.     printf("\nDigite o ID da playlist: ");
  60.     scanf("%d", &id);
  61.  
  62.     for (int i = 0; i < playlists->qtd; i++) {
  63.         if (playlists->id[i] == id) {
  64.             playlists->qtd_mus[i]++;
  65.             playlists->nome_mus[i] = (char**)realloc(playlists->nome_mus[i], playlists->qtd_mus[i] * sizeof(char*)); // realocando para mais uma musica
  66.             if (playlists->nome_mus[i] == NULL) {
  67.                 fprintf(stderr, "Erro alocando memoria para (mais uma) nome_mus[%d]\n", i);
  68.                 exit(EXIT_FAILURE);
  69.             }
  70.  
  71.             playlists->nome_mus[i][playlists->qtd_mus[i] - 1] = (char*)malloc(strlen(nome) + 1); // malocando para o nome da musica
  72.             if (playlists->nome_mus[i][playlists->qtd_mus[i] - 1] == NULL) {
  73.                 fprintf(stderr, "Erro alocando memoria para o nome_mus[%d][%d]\n", i, playlists->qtd_mus[i] - 1);
  74.                 exit(EXIT_FAILURE);
  75.             }
  76.  
  77.             strcpy(playlists->nome_mus[i][playlists->qtd_mus[i] - 1], nome);
  78.             break;
  79.         }
  80.     }
  81. }
  82.  
  83.  
  84. void FIM(playlist* playlists) {
  85.     for (int i = 0; i < playlists->qtd; i++) {
  86.         for (int j = 0; j < playlists->qtd_mus[i]; j++) {
  87.             free(playlists->nome_mus[i][j]);
  88.         }
  89.         free(playlists->nome_mus[i]);
  90.     }
  91.     free(playlists->nome_mus);
  92.     free(playlists->qtd_mus);
  93.     free(playlists->id);
  94.     free(playlists);
  95. }
  96.  
  97. void PRINT_ALL(playlist* playlists){
  98.     for(int i = 0; i < playlists->qtd ; i++){
  99.         printf("musicas da playlist_id %d: \n", playlists->id[i]);
  100.             for (int j = 0; j < playlists->qtd_mus[i]; j++){
  101.                 printf("%s\n", playlists->nome_mus[i][j]);
  102.             }
  103.     }
  104. }
  105.  
  106. void DEL(playlist* playlists, char* nome){
  107.     int id;
  108.     printf("diga o ID da playlist pra tirar a música\n");
  109.     scanf("%d", &id);
  110.  
  111.     for(int i = 0 ; i < playlists->qtd; i++){
  112.         if(id == playlists->id[i]){
  113.  
  114.             for(int j = 0 ; j < playlists->qtd_mus[i]; j++){
  115.                 if(strcmp(playlists->nome_mus[i][j], nome) == 0){
  116.                     printf("tirando a música %s em questão da playlist %d", nome, id);
  117.                     free(playlists->nome_mus[i][j]); // free maroto reio de guerra
  118.                     // preenchendo aquele lugar com as musicas posteriores
  119.                     for (int k = j; k < playlists->qtd_mus[i] - 1; k++) {
  120.                         playlists->nome_mus[i][k] = playlists->nome_mus[i][k + 1];
  121.                     }
  122.                     playlists->qtd_mus[i]--;
  123.                     break;
  124.                 }
  125.  
  126.                 else{
  127.                     printf("não achei essa musica na playlist\n");
  128.                 }
  129.             }
  130.         }
  131.  
  132.         else{
  133.             printf("não achei essa playlist\n");
  134.         }
  135.     }
  136. }
  137.  
  138. void BAN(playlist* playlists, char* nome) {
  139.     for (int i = 0; i < playlists->qtd; i++) {
  140.         for (int j = 0; j < playlists->qtd_mus[i]; j++) {
  141.             if (strcmp(nome, playlists->nome_mus[i][j]) == 0) {
  142.                 printf("Removendo a música %s de todas as playlists\n", nome);
  143.                 free(playlists->nome_mus[i][j]);
  144.  
  145.                 //deslocando as musicas
  146.                 for (int k = j; k < playlists->qtd_mus[i] - 1; k++) {
  147.                     playlists->nome_mus[i][k] = playlists->nome_mus[i][k + 1];
  148.                 }
  149.  
  150.                 //atualizando o numero de musicas
  151.                 playlists->qtd_mus[i]--;
  152.             }
  153.         }
  154.     }
  155. }
  156.  
  157. void PRINT_ONE(playlist* playlists, int id){
  158.  
  159.     for(int i = 0 ; i < playlists->qtd; i++){
  160.         if(id == playlists->id[i]){
  161.             printf("as musicas da playlist %d são: \n", playlists->id[i]);
  162.             for(int j = 0; j < playlists->qtd_mus[i]; j++){
  163.                 printf("%s\n", playlists->nome_mus[i][j]);
  164.             }
  165.  
  166.  
  167.            
  168.         }
  169.        
  170.  
  171.         else{
  172.             //printf("não achei essa playlist\n");
  173.         }
  174.     }
  175. }
  176.  
  177.  
  178. int main() {
  179.     playlist* playlists;
  180.  
  181.     playlists = (playlist*)malloc(1 * sizeof(playlist)); // criando a primeira playlist
  182.  
  183.     playlists->qtd = 0;
  184.     playlists->qtd_mus = NULL;
  185.     playlists->nome_mus = NULL;
  186.  
  187.     int acao = -1;
  188.     while(acao != 7){
  189.         printf("\n\ndigite 1 para criar playlist\ndigite 2 para adicionar musica em determinada playlist\ndigite 3 para tirar musica de determinada playlist\ndigite 4 para tirar musica de todas as playlists\ndigite 5 pra printar tudo\ndigite 6 para printar uma\ndigite 7 pra sair: ");
  190.         scanf("%d", &acao);
  191.        
  192.         if(acao == 1){
  193.             CREATE(&playlists);
  194.         }
  195.        
  196.         else if(acao == 2){
  197.             char nome[30];
  198.             printf("digite o nome da musica: ");
  199.             scanf(" %s", nome);
  200.            
  201.             ADD(playlists, nome);        
  202.         }      
  203.  
  204.         else if(acao == 3){
  205.             char nome[30];
  206.             printf("\ndigite o nome da musica para ser deletada: ");
  207.             scanf("%s", nome);
  208.             DEL(playlists, nome);
  209.  
  210.         }
  211.  
  212.         else if(acao == 4){
  213.             char nome[30];
  214.             printf("\ndigite o nome da musica para ser deletada de todas as playlists: ");
  215.             scanf("%s", nome);
  216.             BAN(playlists, nome);
  217.         }
  218.  
  219.         else if(acao == 5){
  220.             PRINT_ALL(playlists);
  221.         }
  222.  
  223.         else if(acao == 6){
  224.             int id;
  225.             printf("\ndigite o id da playlist: ");
  226.             scanf("%d", &id);
  227.             PRINT_ONE(playlists, id);
  228.         }
  229.  
  230.         else if(acao == 7){
  231.             printf("\n\naté mais...\n\n");
  232.             FIM(playlists);
  233.         }
  234.     }
  235.  
  236.     return 0;
  237.    
  238. }
Add Comment
Please, Sign In to add comment