Ayuda Con Un Programa!

Iniciado por McCartney, 25 Febrero 2013, 00:06 AM

0 Miembros y 1 Visitante están viendo este tema.

McCartney

Hola compañeros, soy nuevo en esto de la programación y quería pedirles su ayuda para completar esta tarea, la verdad ya estoy desesperado... De Antemano Gracias

Hacer un programa que emule un registro de alumnos y tenga las siguientes características:
Debe contener el menú siguiente:
A> Altas de Alumno
B> Bajas de Alunmo
C> Consulta de Alumnos
S> Salir

Donde en "Altas" se deberá capturar la siguiente información:
Matrícula del Alumno (Buscarla, y si ya está, avisar y regresar al menú)
Nombre y Apellidos
Años en la Escuela
Número de Créditos Aprobados
(Deberá regresar al menú automáticamente después de finalizar algún registro)

En "Bajas" se deberá pedir la matrícula y buscarla. Si existe sólo se pondrá una marca en el campo de matrícula, indicando que este alumno se dio de baja. Si no existe se deberá mostrar un mensaje y regresar al menú.

En "Consultas" se deberá mostará el siguiente sub-menú y cada opción realizará lo que se indica:
M> Por Matrícula
N> Por Nombre
(Buscar al alumno, mostrar sus datos y decir si el alumno esta aprobando o no los créditos mínimos de 93 por año)
T> Todos
(Mostar todos los alumnos)
R> Regresar al menú

***NOTA: Se debe usar un arreglo de tipo struct.

------------------------------------------------------------------------------------------------------------------------


Ahora: esto es lo que llevo hasta el momento:



#include <stdio.h>
#include <ctype.h>
int main()
{
int rep=0,i=0,band,cont=0,b=0,j=0;
long int busq;
char op,nomb[15];
struct general
{
long int mat;
char nom[15];
char ap_pat[15];
char ap_mat[15];
int anos;
int creditos;
}alumno[50];
while (rep>=0)
{
printf("***PROGRAMA QUE EMULA UN REGISTRO DE ALUMNOS DE LA BUAP***\n");
printf("Elija Una Opcion\n");
printf("A > Alta De Alumno\n");
printf("B > Baja De Alumno\n");
printf("C > Consultas De Alumnos\n");
printf("S > Salir\n");
op=getchar();
op=toupper(op);
switch(op)
{
case 'S':
{
rep=-1;
band=0;
printf("Decidio salir\n");
break;
}
case 'A':
{
band=1;
for (i=cont;i<=cont;i++)
{
printf("Da la matricula del alumno %d\n",i+1);
scanf("%ld",&alumno[i].mat);
busq=alumno[i].mat;
j=0;
while(j<=i-1 && b!=1)
{
if(busq==alumno[j].mat)
{
b=1;
}
else
{
j++;
}
}
if (b==1)
{
printf("Alumno ya inscrito\n");
cont=cont-2;
}
else
{
printf("Dame su nombre\n");
alumno[i].nom=gets(nomb);
printf("%s",alumno[i].nom);
}
}
cont++;
break;
}
default:
{
band=0;
printf("Opción inválida\n");
break;
}
}
if (band!=0)
{
printf("Pulsa cualquier número para que te enseñe de nuevo el menú\n");
scanf("%d",&rep);
getchar();
}
}
}



Mi principal duda es... Al momento de compilar el pedacito que llevo, me aparece error en la sección que contiene:

alumno[i].nom=gets(nomb);

Me podrían indicar como hacerlo correctamente?


Muchas gracias de antemano :)
Saludos!!

rir3760

El error en la linea:
alumno[i].nom=gets(nomb);
Se genera porque no es valido utilizar el operador "=" con arrays, tampoco necesitas la variable auxiliar "nomb". Para leer el nombre de la entrada estándar debes cambiar la sentencia a:
gets(alumno[i].nom);
Así ya no se generara el mensaje de error.

Sin embargo el uso de la función gets no es recomendable, el porque de ello (junto con alternativas) se describe en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language