Tengo que entregar un codigo para la universidad que me gestione los datos de una serie de canales dde television y los guarda en ficheros.
El programa debe realizar las siguientes opciones:
- Añadir un canal a la plataforma digital. No se permite que se duplique el código del canal.
- Borrar un canal de la plataforma digital.
- Mostrar los canales almacenados.
- Recuperar un canal.
El borrado del canal es tan solo sustituir en los datos un NO por un SI.
Tengo que usar struct por cojones.
Esta es la página del problema http://webpages.ull.es/users/lmmoreno/fi/practicas/prac9.pdf
El código que tengo hasta ahora (sin terminar) es este:
#include <stdio.h>
#include <string.h>
#define MAX 20
typedef struct{
int codigo;
char nombre[MAX];
int audiencia;
char borrado[2];
} Tcanales;
Tcanales datosCanal;
int BuscarCanal(int codigo, char fichero[]){
FILE *leerDatos;
leerDatos=fopen(fichero, "r");
if(leerDatos!=NULL){
while(fscanf(leerDatos, "%d %s %d %c\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado)!=EOF){
fscanf(leerDatos,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado);
if(codigo==datosCanal.codigo)
return 1;
else
return 0;
}
}
else
printf("Error de apertura del archivo");
fclose(leerDatos);
}
void AdicionCanal(void){
char fichero[MAX];
int encontrado=1;
FILE *introducirDatos;
printf("\n\nIntroduce el nombre del fichero en el que vas a guardar los datos: ");
scanf("%s", fichero);
introducirDatos=fopen(fichero, "a");
if(introducirDatos!=NULL){
printf("\nIntroduce el codigo del canal: ");
scanf("%d", datosCanal.codigo);
encontrado=BuscarCanal(datosCanal.codigo, fichero);
if(encontrado==1)
printf("\n\nEl codigo del canal ya existe.\n\n");
else{
printf("\nIntroduce el nombre del canal: ");
scanf("%s", datosCanal.nombre);
printf("\nIntroduce la audiencia del canal: ");
scanf("%d", &datosCanal.audiencia);
fprintf(introducirDatos, "%d %s %d N\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia);
printf("\n");
}
}
else
printf("Error de apertura del archivo.");
fclose(introducirDatos);
}
void BorradoCanal(void){
int encontrado, codigo;
char nombreFich[MAX];
FILE *fich;
FILE *temp;
printf("\nIntroduce el nombre del fichero en el que se encuentran los datos: ");
scanf("%s", nombreFich);
fich=fopen(nombreFich,"r+");
temp=fopen("Temporal.txt","w+");
if((fich!=NULL)&&(temp!=NULL)){
printf("\n\nIntroduzca el codigo del canal a buscar: ");
scanf("%d", &codigo);
encontrado=BuscarCanal(datosCanal.codigo, nombreFich);
if(encontrado==1){
while(fscanf(fich,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado)!=EOF){
fscanf(fich,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado);
if(codigo==datosCanal.codigo)
fprintf(temp,"%d %s %d S\n", datosCanal.codigo, datosCanal.nombre, datosCanal.audiencia);
else
fprintf(temp,"%d %s %d N\n", datosCanal.codigo, datosCanal.nombre, datosCanal.audiencia);
}
while(fscanf(temp,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado)!=EOF){
fscanf(temp,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado);
fprintf(temp,"%d %s %d %s\n", datosCanal.codigo, datosCanal.nombre, datosCanal.audiencia, datosCanal.borrado);
}
printf("\n\nEl canal ha sido borrado");
}
else
printf("El codigo no se ha encontrado en el archivo de datos.");
fclose(fich);
fclose(temp);
}
else
printf("Error de apertura del archivo.");
}
void MostrarCanal(void){
char nombreFich[MAX];
FILE *fich;
printf("Introduce el nombre del fichero en el que se encuentran los datos: ");
scanf("%s", nombreFich);
fich=fopen(nombreFich,"r");
if(fich!=NULL){
while(fscanf(fich,"%d %s %d %s\n", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado)!=EOF){
fscanf(fich,"%d %s %d %s", &datosCanal.codigo, datosCanal.nombre, &datosCanal.audiencia, datosCanal.borrado);
if(datosCanal.borrado=="N")
printf("Codigo: %d Nombre Canal: %s Audiencia: %d");
else;
}
}
fclose(fich);
}
void menu(void){
int menu;
while(menu!=6){
printf("Gestor de canales.\n1. Aniadir canal.\n2. Borrar canal.\n3. Mostrar canales\n4. Recuperar un canal.\n5. Borrado automatico de canales.\n6. Salir.\n\nOpcion: ");
scanf("%d", &menu);
switch(menu){
case 1:
AdicionCanal();
break;
case 2:
BorradoCanal();
break;
case 3:
MostrarCanal();
default:
printf("\n\nIntroduce una de las opciones disponibles.");
}
}
}
int main(void){
menu();
}
El tema es que no realiza las opciones que le pido que realice... En el fichero de datos no guarda el codigo del canal ni la audiencia y tampoco detecta si el codigo esta repetido.
Agradeceria cualquier tipo de ayuda.
Edito: Aqui esta mas claro