http://gyazo.com/9100e1eabb55b59b4d50adfc6f436e7e
Tengo la estructura en general aunque ando bastante perdido en como hacer que el programa me cambie la fecha de la recolección y la ultima cantidad recolectada la cambie y la sume a la cantidad recolectada desde la plantación.
Os voy a dejar el problema entero,rodeando las partes en las que no se como hacerlas funcionar con ??????.Espero que podáis arrojarme algo de luz.
Código:
#include <stdio.h>
#include <stdlib.h>
typedef char texto10[10];
typedef char texto20[20];
typedef struct{
int dia;
int mes;
int anno;
} fecha;
typedef struct{
texto10 codigo;
texto20 nombre;
fecha plant_fecha;
fecha rec_fecha;
float cantidadrec;
float cantidadacc;
} cultivo;
char menu (void);
void datos_cultivo(cultivo *cult);
int leer_num(int c);
void modif_nombre(texto20 nom);
/*??????????????????????????????????????????????????*/
void recolectar (int recfecha,float cantidadr);
/*??????????????????????????????????????????????????*/
void imprime (cultivo *cult);
int main (void)
{
cultivo catalogo[14];
char opcion;
int numero, control = -1;
do
{
opcion=menu();
switch (opcion)
{
case 'a':if (control < 14){
control++;
datos_cultivo(&catalogo[control]);
}
else
printf("Catalogo completo no se pueden introducir más datos\n");
break;
case 'b':if (control != -1){
numero=leer_num(control);
modif_nombre(catalogo[numero].nombre);
}
else
printf("No se puede modificar pues no se han introducido datos\n");
break;
/*??????????????????????????????????????????????????*/
case 'c':if (control != -1){
numero=leer_num(control);
recolectar(catalogo[numero].rec_fecha);
}
else
printf("No se puede modificar la fecha pues no se han introducido datos\n");
break;
/*??????????????????????????????????????????????????*/
case 'e':if (control != -1){
numero=leer_num(control);
imprime(catalogo[numero]);
}
else
prinft("No se pueden mostrar los datos pues no se han introducido\n");
break;
case 'f': printf ("Fin del programa\n");
system("PAUSE");
break;
default: printf("Opcion incorrecta\n");
};
}while (opcion != 'f');
return (0);
}
char menu (void)
{
char op;
printf("Pulsa a para leer los datos del cultivo\n");
printf("Pulsa b para modificar el nombre al cultivo\n");
printf("Pulsa c para modificar la fecha de la ultima recoleccion\n");
printf("Pulsa d para modificar la cantidad de kilos recogidos en la ultima recoleccion\n");
printf("Pulsa e para mostrar los datos del cultivo\n");
printf("Pulsa f para terminar\n");
scanf("%c",&op);
fflush(stdin);
return (op);
}
void datos_cultivo(cultivo *cult)
{
printf("Dame el codigo: ");
gets((*cult).codigo);
fflush(stdin);
printf("Dame el nombre: ");
gets((*cult).nombre);
fflush(stdin);
printf("Dame los kilos recogidos en la ultima recoleccion: ");
scanf("%f", &((*cult).cantidadrec));
fflush(stdin);
printf("Dame los kilos recogidos desde la plantacion: ");
scanf("%f", &((*cult).cantidadacc));
fflush(stdin);
printf("Dame el año de plantacion: ");
scanf("%d", &((*cult).plant_fecha));
fflush(stdin);
printf("Dame el año de recolecion: ");
scanf("%d", &((*cult).rec_fecha));
fflush(stdin);
}
int leer_num(int c)
{
int num;
do {
printf("Dame el numero de finca entre 0 y %d: ",c);
scanf("%d", &num);
fflush(stdin);
}
while ((num<0)||(num>c));
return(num);
}
void modif_nombre(texto20 nom)
{
printf("La finca %s va a cambiar de nombre.\n", nom);
printf("Dame el nuevo nombre: ");
gets(nom);
fflush(stdin);
}
/*??????????????????????????????????????????????????*/
void recolectar (int recfecha,float cantidadr)
{
printf("La fecha antigua de recolecion es: %d\n", recfecha);
printf("Dame la nueva fecha: ");
scanf("%d", &recfecha);
fflush(stdin);
printf("La cantidad de kilos recogidad en la ultima recolecion es: %f\n", cantidadr);
scanf("%f", &cantidadr);
fflush(stdin);
}
/*??????????????????????????????????????????????????*/
void imprime (cultivo *cult)
{
printf("El codigo del invernadero es: %s\n",cult.codigo);
printf("El nombre del cultivo es: %s\n",cult.nombre);
printf("La cantidad de kilos recogidos en la ultima recolecion es: %f\n",cult.cantidadrec);
printf("La cantidad de kilos recogidos desde la plantacion es: %f\n",cult.cantidadacc);
printf("La fecha de recolecion es: %d\n",cult.rec_fecha);
printf("La fecha de plantacion es: %d\n",cult.plant_fecha);
system("PAUSE");
}
He intentado cambiar el void recolectar.Pero en la estructura switch me salta error cuando intento insertar un caso con el modif_recfecha.
Código:
char menu (void);
void datos_cultivo(cultivo *cult);
int leer_num(int c);
void modif_nombre(texto20 nom);
int modif_recfecha(int fechare);
float modif_cantidadr(float cantidadrecol);
void imprime (cultivo *cult);
Pero en la estructura switch me salta error cuando intento insertar un caso con el modif_recfecha.
Código:
case 'c':if (control != -1){
numero=leer_num(control);
modif_recfecha(catalogo[numero].rec_fecha);
}
else
printf("No se puede modificar la fecha pues no se han introducido datos\n");
break;
Gracias de antemano por las molestias.