titolo, song->compositore); while (!feof(f)) { if (strcmp(comp, song->compositore) == 0) { printf("%s %s\n", song->titolo, song->compositore); } fscanf(f, "%s %s", song->titolo, song->compositore); } free(song); fclose(f); } void inserisci_canzone() { FILE *f; if ((f = fopen("synthpop80s.txt", "r")) == NULL) { printf("Il file non può essere aperto"> titolo, song->compositore); while (!feof(f)) { if (strcmp(comp, song->compositore) == 0) { printf("%s %s\n", song->titolo, song->compositore); } fscanf(f, "%s %s", song->titolo, song->compositore); } free(song); fclose(f); } void inserisci_canzone() { FILE *f; if ((f = fopen("synthpop80s.txt", "r")) == NULL) { printf("Il file non può essere aperto"> titolo, song->compositore); while (!feof(f)) { if (strcmp(comp, song->compositore) == 0) { printf("%s %s\n", song->titolo, song->compositore); } fscanf(f, "%s %s", song->titolo, song->compositore); } free(song); fclose(f); } void inserisci_canzone() { FILE *f; if ((f = fopen("synthpop80s.txt", "r")) == NULL) { printf("Il file non può essere aperto">
WOLD, una stazione radio locale, vuole costruire un database di canzoni, per automatizzare le ricerche
Si è creato un file in cui sono stati inseriti degli elementi composti dai titoli e dai compositori delle canzoni
Si intende dare al disk-jockey la possibilità di:
https://open.spotify.com/playlist/0xPxmDL8XvmZlDZYQ1yEBg?si=4e75569d538d40f7
Basi-di-Dati/1. file processing/database di canzoni at main · rarissimaavis/Basi-di-Dati
//db.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "db.h"
#define MAX_LEN 30
struct canzone
{
char titolo[MAX_LEN+1];
char compositore[MAX_LEN+1];
};
void cerca_compositore()
{
FILE *f;
if ((f = fopen("synthpop80s.txt", "r")) == NULL)
{
printf("Il file non può essere aperto");
exit(-1);
}
printf("1. Ricerca per compositore\\nInserisci il nome del compositore cercato: ");
char comp[MAX_LEN+1];
scanf("%s", comp);
canzone song = malloc(sizeof(*song));
fscanf(f, "%s %s", song->titolo, song->compositore);
while (!feof(f))
{
if (strcmp(comp, song->compositore) == 0)
{
printf("%s %s\\n", song->titolo, song->compositore);
}
fscanf(f, "%s %s", song->titolo, song->compositore);
}
free(song);
fclose(f);
}
void inserisci_canzone()
{
FILE *f;
if ((f = fopen("synthpop80s.txt", "r")) == NULL)
{
printf("Il file non può essere aperto\\n");
exit(-1);
}
printf("2. Inserimento di una canzone\\nInserisci titolo e compositore: ");
char titolo[MAX_LEN+1];
char compositore[MAX_LEN+1];
scanf("%s %s", titolo, compositore);
canzone song = malloc(sizeof(*song));
fscanf(f, "%s %s", song->titolo, song->compositore);
while (!feof(f))
{
if ((strcmp(titolo, song->titolo) == 0) && (strcmp(compositore, song->compositore) == 0))
{
printf("Canzone già presente nel database\\n");
fclose(f);
return;
}
fscanf(f, "%s %s", song->titolo, song->compositore);
}
if ((f = fopen("synthpop80s.txt", "a+")) == NULL)
{
printf("Il file non può essere aperto\\n");
exit(-1);
}
fprintf(f, "%s %s\\n", titolo, compositore);
free(song);
fclose(f);
}
void modifica_compositore()
{
FILE *f, *f_tmp;
if ((f = fopen("synthpop80s.txt", "r")) == NULL)
{
printf("Il file non può essere aperto\\n");
exit(-1);
}
if ((f_tmp = fopen("tmp.txt", "w")) == NULL)
{
printf("Il file non può essere creato/aperto\\n");
exit(-1);
}
printf("3. Modifica compositore\\nInserisci il nome del compositore da modificare: ");
char comp[MAX_LEN+1];
scanf("%s", comp);
printf("Inserisci il nuovo nome: ");
char comp_modificato[MAX_LEN+1];
scanf("%s", comp_modificato);
canzone song = malloc(sizeof(*song));
fscanf(f, "%s %s", song->titolo, song->compositore);
while (!feof(f))
{
if (strcmp(comp, song->compositore) == 0)
{
fprintf(f_tmp, "%s %s\\n", song->titolo, comp_modificato);
}
else
{
fprintf(f_tmp, "%s %s\\n", song->titolo, song->compositore);
}
fscanf(f, "%s %s", song->titolo, song->compositore);
}
free(song);
fclose(f);
fclose(f_tmp);
remove("synthpop80s.txt");
rename("tmp.txt", "synthpop80s.txt");
}
void cancella_compositore()
{
FILE *f, *f_tmp;
if ((f = fopen("synthpop80s.txt", "r")) == NULL)
{
printf("Il file non può essere aperto\\n");
exit(-1);
}
if ((f_tmp = fopen("tmp.txt", "w")) == NULL)
{
printf("Il file non può essere creato/aperto\\n");
exit(-1);
}
printf("4. Cancella compositore\\nInserisci il nome del compositore da cancellare: ");
char comp[MAX_LEN+1];
scanf("%s", comp);
canzone song = malloc(sizeof(*song));
fscanf(f, "%s %s", song->titolo, song->compositore);
while (!feof(f))
{
if (strcmp(comp, song->compositore) != 0)
{
fprintf(f_tmp, "%s %s\\n", song->titolo, song->compositore);
}
fscanf(f, "%s %s", song->titolo, song->compositore);
}
free(song);
fclose(f);
fclose(f_tmp);
remove("synthpop80s.txt");
rename("tmp.txt", "synthpop80s.txt");
}
//dj.c
#include <stdio.h>
#include <stdlib.h>
#include "db.h"
int main(void)
{
int a;
do
{
printf("1. cerca per compositore\\n2. inserisci canzone\\n3. modifica compositore\\n4. cancella compositore\\n(0 per uscire)\\n");
printf("Seleziona un'opzione: ");
scanf("%d", &a);
switch(a)
{
case 0:
a = 0;
break;
case 1:
cerca_compositore();
break;
case 2:
inserisci_canzone();
break;
case 3:
modifica_compositore();
break;
case 4:
cancella_compositore();
break;
}
} while (a != 0);
return 0;
}