codice:
/*
programma palinsesto partite
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 3000
//creo la struttura
typedef struct {
char programma[MAX];
char reti[MAX];
char ora[MAX];
} palinsesto ;
// dichiarazioni delle funzioni
void wpalinsesto();
void rpalinsesto();
int ordina_pal(const void *p1, const void *p2);
void cancella_pal();
void modificadesiderato();
void pausa();
void cancella_tutto();
//main()
int main() {
int scelta;
palinsesto p;
for( ; ; ) //for infinito per il menu
{
printf("###MENU PALINSESTO PARTITE###\n");
printf("1 Inserisci Programma nel Palinsesto\n");
printf("2 Leggi Palinsesto\n");
printf("3 Ordina Palinsesto\n");
printf("4 Modifica Palinsesto desiderato\n");
printf("5 Cancella Palinsesto desidetato\n");
printf("7 Cancella tutto\n");
printf("6 Esci\n");
printf("##############################\n");
printf("Inserisci la tua scelta\n");
scanf("%i", &scelta);
scelta = (int)scelta;
// guarda se eventualmente sostituire con uno switch
if ( scelta == 1 ) {
wpalinsesto();
}
else if ( scelta == 2 ) {
rpalinsesto();
}
else if ( scelta == 3 ) {
qsort(&p,1,sizeof(palinsesto),ordina_pal);
}
else if ( scelta == 4 ) {
modificadesiderato();
}
else if ( scelta == 5 ) {
cancella_pal();
}
else if ( scelta == 6 ) {
// esci dal loop
// exit (1) identifica una uscita non corretta
break ;
}
else if ( scelta == 7 ) {
system("cls");
}
else
// la scelta non è corretta, eventualmente gestiscilo
;
} //chiusura for
// deve esserci sempre
return ( 0 );
}//chiusura main
//funzioni
/* wpalinsesto: scrivi sul file di testo palinsesto.dat i dati
delle partite
*/
void wpalinsesto()
{
palinsesto p;
FILE *fp;
if ( !( fp = fopen("./palinsesto.txt","a") ) ) {
printf("Impossibile scrivere sul file\n");
pausa();
}
else {
fflush(stdin);
printf("Inserisci il Programma\n");
scanf("%s", p.programma);
printf("Inserisci la rete\n");
scanf("%s", p.reti);
printf("Inserisci l'ora\n");
scanf("%s",p.ora);
fprintf(fp,"%s\t%s\t%s\n",p.programma, p.reti,p.ora);
printf("Scrittura avvenuta con successo\n");
fclose(fp);
} //chiusura if...else
// il commento "chiusura if...else" è inutile, i commenti servono
// per scrivere cosa si ha intenzione di fare
} //end
/*
rpalinsesto: leggi il file palinsesto.dat
*/
void rpalinsesto()
{
palinsesto p;
FILE *fp;
if( !( fp = fopen("./palinsesto.txt","r") ) ) {
printf("Impossibile leggere il file\n");
pausa();
} else {
while(fscanf(fp,"%s\t%s\t%s\n",p.programma, p.reti,p.ora) > 0) {
printf("Programma > %s\n", p.programma);
printf("Rete > %s\n", p.reti);
printf("Ora > %s\n",p.ora);
}
}
fclose(fp);
}//end
/*
ordina: ordina le partite del palinsesto in base all'ora
*/
int ordina_pal(const void *p1,const void *p2)
{
palinsesto *s1 = (palinsesto *) p1;
palinsesto *s2 = (palinsesto *) p2;
// così gestisci anche l'==
return ( s2->ora - s1->ora );
}
/*
restituiscidesiderato : restituisce il palinsesto desiderato in base al programma
*/
void modificadesiderato()
{
palinsesto p;
FILE *fp;
char prog[MAX];
int pos;
if(!(fp=fopen("./palinsesto.txt","r+"))) {
printf("Impossibile proseguire\n");
pausa();
}
else {
rewind(fp);
printf("%i\n", pos);
printf("Inserisci il programma che vuoi modificare\n");
scanf("%s",&prog);
while(feof(fp) != 0) {
if( strcmp ( prog, p.programma) == 0 ) {
printf("Hai scelto il programma: %s", prog);
printf("\n");
fflush(stdin);
printf("Inserisci il nome del programma\n");
scanf("%s", p.programma);
printf("Inserisci la rete\n");
scanf("%s", p.reti);
printf("Inserisci l'ora\n");
scanf("%s",p.ora);
pos = ftell(fp);
fseek(fp,pos,SEEK_CUR);
if(fprintf(fp,"%s\t%s\t%s\n", p.programma,p.reti,p.ora) > 0) {
printf("Programma modificato\n");
return ;
}
else {
printf("Programma non modificato");
pausa();
}
} else {
printf("Programma non trovato\n");
pausa();
}
}
}
fclose(fp);
}//end
/*
cancella_pal: cancella palinsesto desiderato
*/
void cancella_pal()
{
palinsesto p;
FILE *fp;
FILE *fp1;
char prog[MAX];
if( !( fp = fopen("./palinsesto.txt", "r+") ) ) {
printf("Impossibile accedere al file\n");
pausa();
}
else {
printf("Inserisci il programma da cancellare\n");
scanf("%s",&prog);
fseek ( fp,1,SEEK_SET );
//se prog è diverso dal programma desiderato
if ( strcmp(prog, p.programma) == 0 ) {
//apri il file temp
fp1 = fopen("./temp.txt","w+");
//scrivi sul file temp i programmi
fprintf(fp1,"%s\t%s\t%s\n",p.programma, p.reti,p.ora);
printf("Scrittura avvenuta con successo\n");
//chiude i due file
fclose(fp);
fclose(fp1);
//rimuove il palinsesto
remove("./palinsesto.txt");
//rinomina il file temp
rename("./temp.txt", "./palinsesto.txt");
remove("./temp.txt");
}
else {
printf("Programma non trovato\n");
pausa();
}
}
}
/*
pausa: ferma lo schermo finchè non si preme il tasto invio
*/
void pausa()
{
char invio;
printf("Premere INVIO per continuare\n");
invio = getchar();
return;
}
/*
cancella tutto il file
*/
void cancella_tutto()
{
FILE *fp;
fp = fopen("./palinsesto.txt","r");
if( remove( "./palinsesto.txt" ) != 0 )
perror( "Error deleting file" );
else
puts( "File successfully deleted" );
return;
}
ciao