C/Visual C - Ayuda con programa en C que muestra y guarda datos introducidos

 
Vista:
sin imagen de perfil

Ayuda con programa en C que muestra y guarda datos introducidos

Publicado por Herdo (1 intervención) el 06/04/2016 16:55:29
Hola, estoy haciendo trabajo y es un programa que te permite introducir datos de una especie en una cadena, y luego mostrarlos. Ya tengo hecha la parte de comprobar errores y que la cadena con los datos este correctamente introducida. Lo unico que me falta es mostrar distintos datos en pantalla, pero no se como hacerlo ya que no se si usar variables locales o globales. Dejo el codigo que tengo hasta ahora con imágenes de ejemplo de como se deberia ejecutar el programa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char nombre[30];
    int num_ejemplares;
    char seccion;
    int habitaculo;
    int dia;
    int mes;
    int anio;
}Especie;
 
int menu() {
 
    int op = 0;
 
    printf ("Prototipo de la Reserva natural.\n");
    printf ("1. Introducir una nueva especie.\n");
    printf ("2. Listar las especies alojadas.\n");
    printf ("3. Mostrar estadisticas.\n");
    printf ("4. Salir.\n");
    printf ("\nIntroduce una opcion: ");
    scanf ("%d", &op);
 
    return op;
}
 
void nuevo() {
 
    Especie e;
    int i, j;
    char especie[100];
    char aux[10];                   //variable auxiliar usada para reemplazar el valor de la cadena especie
    printf("Introduce los datos:\n");
    //Se hace un fflush para que no haya algun problema con el numero introducido en el menu
    fflush(stdin);
    gets (especie);
    //Mientras sea diferente del - leera el texto
    for (i = 0; especie[i] != '-'; i++) {
        e.nombre[i] = especie[i];
    }
    e.nombre[i] = '\0';
    i++;
    //Se le suma 1 a la posicion de i ya que terminaria en - y debe comenzar a leer desde lo siguiente
    for (j = 0; especie[i] != '-'; i++,j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.num_ejemplares = mi_atoi(aux);
    //Controlara que el numero de ejemplares sea un numero y no un caracter
    if (e.num_ejemplares <= 0 || e.num_ejemplares >= 100) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee el dia introducido
    for (j = 0; especie[i] != '/'; i++, j++) {
         aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.dia = mi_atoi(aux);
    //Controla que el formato del dia este bien introducido
    if (e.dia <= 0 || e.dia > 31) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee el mes introducido
    for (j = 0; especie[i] != '/'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.mes = mi_atoi(aux);
    //Controla que el formato del mes este bien introducido
    if (e.mes <= 0 || e.mes > 12) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee el año introducido
    for (j = 0; especie[i] != '-'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.anio = mi_atoi(aux);
    //Controla que el formato del aÒo este bien introducido
    if (e.anio < 1970 || e.anio > 2060) {
        printf ("--> Error en el formato de datos.\n");
    }
    i++;
    //Lee en que seccion esta introducido
    e.seccion = especie[i];
    //Controla que la seccion este introducida con mayusculas
    if (e.seccion < 'A' || e.seccion > 'Z') {
        printf ("--> Error en el formato de datos.\n");
    }
    //Al estar en el final tiene que encontrarse con el \0 para saber que es el habitaculo
    i+= 2;
    for (j = 0; especie[i] != '\0'; i++, j++) {
        aux[j] = especie[i];
    }
    aux[j] = '\0';
    e.habitaculo = mi_atoi(aux);
    if (e.habitaculo < 0 || e.habitaculo > 20) {
        printf ("--> Error en el formato de datos.\n");
    }
}
 
int mi_atoi(char cad[10]) {
    int r = 0;
    int i;
    for (i = 0; cad[i] != '\0'; i++) {
       r = r * 10;
       r += cad[i] - '0';
    }
    return r;
}
 
void listar () {
    //sentencia
    printf ("Nombre: %s\n", e.nombre);
    //sentencia
    printf ("Ejemplares: %d\n", e.num_ejemplares);
    printf ("Fecha de entrada: %d/%d/%d \n", e.dia, e.mes, e.anio);
    printf ("Seccion: %c \n", e.seccion);
    printf ("Habitaculo: %d \n", e.habitaculo);
}
 
void estadisticas() {
    //sentecnia
    printf ("-->Numero de especies: %s (%d)\n");
    //sentencia
    printf ("-->Especie con mas ejemplares: %s (%d)\n");
    printf ("-->Especie con menos ejemplares: %s (%d)\n");
    printf ("-->Seccion con mas ejemplares: Seccion %c (%d) \n");
    printf ("-->Especie mas antigua: %s (%d/%d/%d)\n");
}
 
void ejecutaOpcion(int op) {
 
    switch (op) {
        case 1:
            nuevo();
            break;
        case 2:
            listar();
            break;
        case 3:
            estadisticas();
            break;
        default:
            break;
    }
}
 
int main() {
 
    int op = 0;
 
    do {
        op = menu();
        ejecutaOpcion(op);
    } while (op != 4);
    return 0;
}
opcion-1
opcion-2
opcion-3

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Ayuda con programa en C que muestra y guarda datos introducidos

Publicado por agustin (272 intervenciones) el 06/04/2016 19:01:54
Si vas a usar listas simples lo puedes solucionar de dos maneras:
1. Poner un puntero global del tipo que has creado.
2. Ese puntero ponerlo local y iniciarlo en el inicio del main y luego usar ese puntero como parámetro para tus funciones.
El segundo para mi es más correcto aunque puedo entender que para los que empiezan es un pelin mas complejo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar