/*Queremos idear un programa que permita:
1. Generar un fichero de texto para guardar una lista de platos de un
restaurante, el numero de calorias y el precio y guardarlo en un txt
2. Recuperar los platos del fichero txt y ordenarlos por su precio de mayor a
menor guardando la lista ordenada en un fichero con formato propio que incluya
el nombre del plato y el precio mas iva*/
#include<stdio.h>
#include<stdlib.h>
typedef struct{
char nombre[80];
int calorias;
float precio;
}plato;
int mostrar_menu(){
int opcion;
system("cls");
printf("\n******MENU*****");
printf("\n0. Salir del programa.");
printf("\n1. Introducir los platos en un fichero .txt.");
printf("\n2. Mostrar el contenido del fichero.");
printf("\n3. Volcar los datos del fichero .txt en un fichero .mdd ordenados.");
printf("\n4. Mostramos el .mdd.");
printf("\nElige una opcion: ");
scanf("%d",&opcion);
return(opcion);
}
void leer_platos(){
FILE *fichero;
plato plato_leido;
char ruta[80];
char seguir='s';
int cont=1;
printf("\nIntroduce la ruta: ");
scanf(" %[^\n]",ruta);
fichero=fopen(ruta,"w");
do{
printf("\nPLATO %d",cont);
printf("\nNombre del plato: ");
scanf(" %[^\n]",plato_leido.nombre);
printf("\nCalorias: ");
scanf("%d",&plato_leido.calorias);
printf("\nPrecio: ");
scanf("%f",&plato_leido.precio);
fprintf(fichero,"%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);
printf("\nDesearias introducir un nuevo plato (s/n): ");
scanf(" %c",&seguir);
cont++;
}while(seguir=='s');
fclose(fichero);
}
void mostrar_fichero(){
FILE *fichero;
plato plato_leido;
char ruta[80];
char seguir='s';
int cont=1;
printf("\nIntroduce la ruta: ");
scanf(" %[^\n]",ruta);
fichero=fopen(ruta,"r");
printf("\nCONTENIDO DEL FICHERO: %s",ruta);
printf("\nPLATO\tCalorias\tPrecio\n");
do{
fscanf(fichero,"%[^\t]\t%d\t%f\n",plato_leido.nombre,&plato_leido.calorias,&plato_leido.precio);
printf("%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);
}while(feof(fichero)==0);
printf("\nPara continuar presiona cualquier tecla: ");
fflush(stdin);
getchar();
return;
}
int leer_datos(FILE *fichero_origen,plato *plato_leido[]){
int cont=0;
do{
plato_leido[cont]=(plato *) malloc(1*sizeof(plato));
fscanf(fichero_origen,"%[^\t]\t%d\t%f\n",plato_leido[cont]->nombre,&plato_leido[cont]->calorias,&plato_leido[cont]->precio);
//Añadimos el IVA al precio del plato
plato_leido[cont]->nombre=(plato_leido[cont]->precio*1.18);
cont++;
}while(feof(fichero_origen)==0);
return(cont);
}
void mostrar_platos_leidos(plato *plato_leido[],int nplatos){
int cont;
printf("\nPLATOS LEIDOS");
for(cont=0;cont<nplatos;cont++){
printf("\nNombre del plato=%s",plato_leido[cont]->nombre);
printf("\nCalorias= %d",plato_leido[cont]->calorias);
printf("\nPrecio= %.2f",plato_leido[cont]->precio);
printf("\n*****************************");
}
getchar();
getchar();
return;
}
void ordeno_datos(plato *plato_leido[],int nplatos){
int veces,cont;
plato *aux;
for(veces=1;veces<nplatos;veces++)
for(cont=0;cont<nplatos-1;cont++)
if(plato_leido[cont]->precio<plato_leido[cont+1]->precio){
aux=plato_leido[cont];
plato_leido[cont]=plato_leido[cont+1];
plato_leido[cont+1]=aux;
}
return;
}
void grabo_datos(FILE *fichero_destino,plato *plato_leido[],int nplatos){
char ruta[80];
int cont;
printf("\nIntroduce la ruta en la que quieres guardar el fichero .mdd: ");
scanf(" %[^\n]",ruta);
fichero_destino=fopen(ruta,"w");
if(fichero_destino==0)
printf("\nError en la ruta.");
else{
for(cont=0;cont<nplatos;cont++)
fwrite(plato_leido[cont],sizeof(plato),1,fichero_destino);
fclose(fichero_destino);
}
return;
}
void pasar_txt_format_ordenado(){
char ruta[80];
plato *plato_leido[50];
int nplatos;
FILE *fichero_origen,*fichero_destino;
printf("\nIntroduce la ruta: ");
scanf(" %[^\n]",ruta);
fichero_origen=fopen(ruta,"r");
nplatos=leer_datos(fichero_origen,plato_leido);
mostrar_platos_leidos(plato_leido,nplatos);
ordeno_datos(plato_leido,nplatos);
printf("\nDespues de ordenar los platos: \n");
mostrar_platos_leidos(plato_leido,nplatos);
grabo_datos(fichero_destino,plato_leido,nplatos);
return;
}
void mostrar_mdd(){
FILE *fichero_destino;
char ruta[80];
plato plato_leido;
printf("\nIntroduce la ruta: ");
scanf(" %[^\n]",ruta);
fichero_destino=fopen(ruta,"r");
printf("\nCONTENIDO DEL FICHERO: %s",ruta);
printf("\nPLATO\tCalorias\tPrecio\n");
do{
fscanf(fichero_destino,"%[^\t]\t%d\t%f\n",plato_leido.nombre,&plato_leido.calorias,&plato_leido.precio);
printf("%s\t%d\t%.2f\n",plato_leido.nombre,plato_leido.calorias,plato_leido.precio);
}while(feof(fichero_destino)==0);
return;
}
main(){
int opcion;
do{
opcion=mostrar_menu();
switch(opcion){
case 0:
printf("\nPrograma finalizado");
break;
case 1:
system("cls");
leer_platos();
break;
case 2:
system("cls");
mostrar_fichero();
break;
case 3:
system("cls");
pasar_txt_format_ordenado();
break;
case 4:
system("cls");
mostrar_mdd();
break;
default:
printf("\nEsa opcion no existe.Presione cualquier tecla para continuar: ");
getchar();
}
}while(opcion!=0);
}
No hay comentarios:
Publicar un comentario