
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.



Gracias
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;
}

Gracias
Valora esta pregunta


0