¿Cómo programar un "sistema de gestión de selección de cursos para estudiantes" usando C++?
Acabo de ver esto hace unos días. Tómalo y modifícalo
#include
#include
int N1,N2,kk1,kk2,kk3;
estructura curso * cabeza1;
estructura estudiante * cabeza2;
struct couse //Estructura de información del curso
{
int num1;
char nombre1[20];
int puntuación; p >
int nelepeo;//El número de personas seleccionadas para el curso
int Melepeo;//El límite superior del número de personas en el curso
struct couse * next;
};
estructura estudiante//Estructura de información del estudiante
{
int num2;
char name2[20];
int nelenum[50];//Número de curso seleccionado
int nelen;//Número de cursos seleccionados
struct Student * siguiente;
} ;
void Ms()
{
for(kk1=0;kk1<1100;kk1++)
for(kk2= 0;kk2<1200;kk2++)
for(kk3=0;kk3<1200;kk3++);
}
void keyboardc()//Subfunción de curso de entrada (entrada desde el teclado)
{
struct couse *p1,*p2;
N1=0;
p1 =p2=(struct couse*)malloc(sizeof(struct couse));
printf("Número de curso\tNombre del curso\tCréditos\tNúmero máximo de participantes del curso\n");
scanf("%d%s%d%d",&p1->num1,p1->nombre1,&p1->puntuación,&p1->Melepeo); p>
p1->nelepeo=0 ;
head1=NULL;
mientras(p1->num1!=0)
{ p>
N1=N1+1;
if(N1==1)head1=p1;
else p2->siguiente=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse));
scanf("%d%s%d%d",&p1- >num1,p1->nombre1,&p1->puntuación,&p1->Melepeo);
p1->nelepeo=0;
}
p2- >next=NULL;
}
void filec()//Subfunción de entrada del teclado (entrada desde archivo)
{
ARCHIVO * fp;
ruta de archivo char[20];
estructura couse *p1,*p2;
N1=0;
printf("Ingrese la ruta del archivo a leer:");
getchar();
gets(filepath
if((fp=fopen); (rutadelarchivo,"r"))==NULL)
{
printf("¡No se puede encontrar el archivo %s!\n",rutadelarchivo); exit(0);
}
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp, " %d%s%d%d%d",&p1->num1,p1->nombre1,&p1->puntuación,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp))
{
N1=N1+1;
if(N1==1) cabeza1 =p1;
else p2->next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse ) );
fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->nombre1,&p1->puntuación,&p1->nelepeo,&p1->Melepeo );
}
p2->next=NULL;
}
void inputc()//Ingrese la función principal del curso
{
int i;
printf("\t\t\tIngrese la información del curso\n");
printf (" \n1. Entrada desde el teclado\n");
printf("2. Entrada desde el archivo\n");
printf("3. Regresar al menú principal \n ");
printf("Seleccione (1~3):\n");
scanf("%d",&i);
cambiar(i)
{
case(1):keyboardc();break;
case(2):filec();break;
p>case(3):break;
}
}
void insertc(struct couse *incouse)//Curso subfunción de gestión (Agregar cursos)
{
struct couse *p0,*p1,*p2;
p1=head1;
p0=ingreso ;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
mientras ((p0->num1 > p1->num1) && (p1->siguiente!=NULL))
{
p2=p1;
p1 =p1->siguiente;
}
si(p0->num1 <= p1->num1)
{
si (cabeza1==p1) cabeza1=p0;
else p2->siguiente=p0;
p0->siguiente=p1;
}
else
{
p1->siguiente=p0;
p0->siguiente=NULL;
}
}
N1=N1+1;
}
void delc(int num1)//Subfunción de gestión de cursos (eliminar curso )
{
estructura curso *p1,*p2;
if(head1==NULL)
{
printf("\n¡No hay curso, no se puede eliminar!\n");
ir al final;
}
p1=head1;
p>while(num1!=p1->num1 && p1->siguiente!=NULL)
{
p2=p1;
p1 =p1->siguiente;
}
if(num1==p1->num1)
{
si (p1= =head1) head1=p1->siguiente;
else p2->next=p1->siguiente;
printf("¡El número del curso ha sido eliminado!\n ");
N1=N1-1;
}
else printf("¡No hay ningún curso con este número!\n"); p>
end ::;
}
gestión de vacíosc()//función principal de gestión del curso
{
estructura curso * incouse;
int i,num1;
printf("\t\t\tGestión del curso\n");
printf("1. Nuevo curso\n" );
printf("2.Eliminar curso\n");
printf("3.Volver al menú principal\n");
printf( "Por favor seleccione (1~3):\n");
scanf("%d",&i);
cambiar(i)
{
caso(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("Número de curso\tNombre del curso\tCréditos\tNúmero máximo de participantes del curso\n") ;
scanf("%d%s%d%d",&incouse->num1,incouse->nombre1,&incouse->puntuación,&incouse->Melepeo);
incouse - >nelepeo=0;
insertc(incouse);
break;
}
caso(2):
{
printf("Ingrese el número del curso que desea eliminar:\n");
scanf("%d",&num1);
delc(num1);
ruptura;
}
caso(3): ruptura;
} p>
}
void teclados()//Subfunción para ingresar información del estudiante (ingresar desde el teclado)
{
int i;
struct estudiante *p1,*p2;
N2=0;
p1=p2=(struct estudiante *)malloc(sizeof(struct estudiante));
printf("Número de identificación del estudiante\tNombre del estudiante\n");
scanf("%d%s",&p1->num2,p1->nombre2); p>
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
cabeza2= NULL;
mientras(p1->num2!=0)
{
N2=N2+1;
si(N2 ==1 )head2=p1;
else p2->next=p1;
p2=p1;
p1=(struct estudiante * )malloc( sizeof(struct estudiante));
scanf("%d%s",&p1->num2,p1->nombre2);
p1->nelen=0; p>
for(i=0;i<20;i++) p1->nelenum[i]=0;
}
p2->next=NULL;
}
archivos vacíos()/
/Ingresar subfunción de información del estudiante (ingresar desde archivo)
{
int i=0;
ARCHIVO * fp;
char filepath[20];
struct Student *p1,*p2;
N2=0;
printf("Ingrese la ruta del archivo a leer: " );
getchar();
obtiene(ruta de archivo);
if((fp=fopen(ruta de archivo,"r"))==NULL )
{
printf("¡No se puede encontrar el archivo %s!\n",ruta del archivo
exit(0); > }
p1=p2=(struct Student*)malloc(sizeof(struct Student));
fread(p1,sizeof(struct Student),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)head2=p1;
else p2->siguiente=p1;
p2=p1 ;
p1=(struct Student * )malloc(sizeof(struct Student));
fread(p1,sizeof(struct Student),1,fp);
}
p2->next=NULL;
}
void inputs()//Función principal para ingresar información del estudiante
{
int i;
printf("\t\t\tIngrese la información del estudiante\n");
printf("\n1.From Entrada de teclado\n");
printf("2. Entrada desde archivo\n");
printf("3. Volver al menú principal\n"); p >
printf("Por favor seleccione (1~3):\n");
scanf("%d",&i);
switch(i)< / p>
{
caso(1):teclados();romper;
caso(2):archivos();romper;
caso (3): descanso;
}
}
inserciones vacías (estructura estudiante * incouse) // Subfunción de gestión de información del estudiante (completar estudiante información)
{
struct Student *p0,*p1,*p2;
p1=head2;
p0=incouse;
p>
if(head2==NULL)
{
head2=p0;
p0->siguiente= NULO;
}<
/p>
else
{
while((p0->num2 > p1->num2) && (p1->siguiente!=NULL))
{
p2=p1;
p1=p1->siguiente;
}
si(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0; p>
p0->siguiente=p1;
}
else
{
p1->siguiente=p0;
p0->siguiente=NULL;
}
}
N2=N2+1;
}
void dels(int num2)//Subfunción de gestión de información del estudiante (eliminar información del estudiante)
{
struct Student *p1,*p2;
if(head2==NULL)
{
printf("\n¡No hay información sobre el estudiante y no se puede eliminar!\n");
ir al final;
}
p1=head2;
while(num2!=p1->num2 && p1->siguiente !=NULL)
{
p2=p1;
p1=p1->siguiente;
}
if( num2==p1->num2)
{
if(p1==head2) head2=p1->siguiente;
else p2 ->next= p1->next;
printf("¡Esta información del estudiante ha sido eliminada!\n");
N2=N2-1;
}
else printf("¡Estudiante sin este número de estudiante!\n");
end:;
}
void gerencias()/ /Función principal de gestión de información del estudiante
{
struct Student * incouse;
int i,num2;
printf ("\t \t\tGestión de información del estudiante\n");
printf("1.Agregar información del estudiante\n");
printf("2.Eliminar información del estudiante \n ");
printf("3. Regresar al menú principal\n");
printf("Por favor seleccione (1~3):\n");
scanf("%d",&i);
cambiar(
i)
{
caso(1):
{
incouse=(estructura estudiante *)malloc(sizeof(estructura estudiante ));
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("ID del estudiante\tNombre del estudiante\ n");
scanf("%d%s",&incouse->num2,incouse->nombre2);
inserts(incouse);
break;
}
case(2):
{
printf("Ingrese el número de estudiante del estudiante que será eliminado :\n");
scanf("%d",&num2);
dels(num2);
break;
}
case(3):break;
}
}
void elect(struct Student * s)// Selección de curso
{
struct couse * p;
int num1,i;
printf("Ingrese el número del curso curso que deseas elegir:\ n");
scanf("%d",&num1);
for(i=0;s->nelenum[i]!= 0;i++);
p>s->nelenum[i]=num1;
(s->nelen)++;
p=cabeza1 ;
while (p->num1!=num1) p=p->siguiente;
(p->nelepeo)++;
}
void cheak( )//Subfunción de selección de cursos del estudiante (consultar cursos disponibles)
{
char e;
struct couse * c;
struct Student * s;
int num2,i,j=0,t=0;
printf("Por favor ingresa tu número de estudiante :");
scanf("%d",&num2);
s=head2;
while(s->num2!=num2 && s ->siguiente!=NULL) s= s->siguiente;
if(s->num2!=num2)
{
printf("Tu la información no existe, por favor ingresa al menú principal ¡Ingresa tus datos!\n");
ir al final;
}
c=head1; p>
printf("Número de curso opcional:\n");
p>
while(c!=NULL)
{
for(t=0,i=0;s->nelenum[i]!=0;i++)
{
if(c->num1==s->nelenum[i]) t=1;
}
if(t==0 && (c->nelepeo!=c->Melepeo))
{
printf("%d\n",c->num1);
j++;
}
c=c->siguiente;
}
si(j= =0)
{
printf("¡Has seleccionado todos los cursos y no puedes seleccionar más!\n");
ir al final;
p>}
printf("Selección de curso (s/n)?:\n");
getchar();
e= getchar ();
i=0;
while(e=='y')
{
elegir(s)
printf("¿Continuar seleccionando cursos (y/n)?:\n");
getchar();
e=getchar();
p>
}
end:;
}
void back(struct Student * p)//retirar clase
{
struct couse * p1;
int num1,i,j;
printf("Ingrese el número del curso que desea desea retirar:\n" );
scanf("%d",&num1);
p1=head1;
while(p1->num1 !=num1) p1=p1 ->siguiente;
for(i=0;p->nelenum[i]!=num1;i++);
for(j=i ;p->nelenum[j ]!=0;j++) p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0 ;
(p1->nelepeo)--;
printf("¡Retiro de clase exitosamente!\n");
}
void hcheak()// Subfunción de selección de cursos para estudiantes (consultar cursos seleccionados)
{
char c;
struct couse * p0;
struct Student * p;
int num2,i,f=0;
printf("Ingrese el número de estudiante:\n");
scanf("%d ",&num2);
p=head2;
while(p->num2!=num2
&& p!=NULL) p=p->next;
if(p==NULL)
{
printf("Tu información no existe , regrese al menú principal para ingresar información:\n");
ir al final;
}
printf("Número de curso seleccionado:\n ") ;
if(p->nelenum[0]==0)
{
printf("¡Aún no has elegido un curso! \n");
ir al final;
}
for(i=0;p->nelenum[i]!=0;i++)
{
printf("%d\n",p->nelenum[i]);
p0=cabeza1;
while(p0->num1 !=p->nelenum[i]) p0=p0->siguiente;
f=f+p0->puntuación;
}
printf( "Créditos totales: %d\n",f);
printf("¿Quieres retirarte de la clase (s/n)?");
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("¿Continuar abandonando la clase (s/n)?");
getchar();
c =getchar();
( p->nelen)--;
}
fin:;
}
void elective()//función maestra de selección de cursos de estudiantes
{
int i;
printf("\t\t\tSelección de estudiantes \n");
printf ("1. Consultar cursos disponibles\n");
printf("2. Consultar cursos seleccionados\n");
printf("3. Regresar al menú principal\n" n");
printf("Por favor ingrese (1~3):\n");
scanf( "%d",&i);
switch(i)
{
case(1):cheak();break;
caso(2):hcheak();romper;
caso(3):romper;
}
}
void listc()//Salir información del curso
{
struct couse * p;
p=head1;
printf(" N.º de curso Nombre del curso Crédito Número de curso de números seleccionados Número máximo de números de curso\n ");
while(p!=NULL)
{
printf("%-8d%10s%6d%8d%12d\n", p->num1,p->nombre1,p->sc
mineral,p->nelepeo,p->Melepeo);
p=p->siguiente;
}
}
voidlists()//Salida de información del estudiante
{
struct Student * p;
p=head2;
printf(" Número de estudiante Nombre de estudiante Número de cursos seleccionados\n");
while(p!=NULL)
{
printf("%-4d % 10s %6d\n",p->num2,p->nombre2,p->nelen);
p=p->siguiente;
}
}
void intoc()//Almacenamiento de información del curso
{
ARCHIVO * fp;
struct couse * p; /p>
char filepath[30];
printf("Ingrese la ruta del archivo para guardar la información del curso:");
gets(rutadelarchivo);
if((fp=fopen(rutadelarchivo,"w"))==NULL)
{
printf( "\n¡Error al guardar!");
exit(0);
}
p=head1;
while(p ! =NULL)
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->nombre1,p- > puntuación,p->nelepeo,p->Melepeo);
p=p->siguiente;
}
fclose(fp); >
p>
printf("¡La información del curso se ha guardado en %s!\n", ruta de archivo
}
void intos()//Almacenamiento); información del estudiante p>
{
ARCHIVO * fp;
struct estudiante * p;
char filepath[30];
printf ("Ingrese la ruta del archivo para guardar la información del estudiante:");
getchar()
gets(filepath); (fp=fopen (ruta de archivo,"w"))==NULL)
{
printf("\n¡Error al guardar!"
exit( 0);
}
p=cabeza2;
mientras(p!=NULL)
{
fwrite( p,sizeof(struct estudiante),1,fp);
p=p->siguiente;
}
fclose(fp);
p
rintf("¡La información del estudiante se ha guardado en %s!\n", ruta de archivo
}
void into()//Información de almacenamiento
{
int i;
printf("1.Almacenamiento de información del curso\n");
printf("2.Almacenamiento de información del estudiante\n");
printf("3. Regresar al menú principal\n");
printf("Por favor ingrese (1~3)\n");
scanf ("%d",&i);
switch(i)
{
case(1):intoc();break; p>
caso(2):intos();romper;
caso(3):romper;
}
}
void store()//Función principal de información
{
int i;
printf("\t\tVisualización y almacenamiento de información del sistema\n " );
printf("1. Ver información del curso\n");
printf("2. Ver información del estudiante\n");
printf ("3. Almacenar información\n");
printf("4. Regresar al menú principal\n");
printf("Por favor ingrese (1~4 ):\ n");
scanf("%d",&i);
cambiar(i)
{
case(1 ):listc();break;
case(2):lists();break;
case(3):into();break;
case(4):break;
}
}
int main()//función principal
{
int i;
start:
printf("\n\t\t\t¡Bienvenido al sistema de selección de cursos para estudiantes!\n");
printf("Menú:\n");
printf("1.Ingrese la información del curso\n");
printf("2.Gestión del curso \n") ;
printf("3.Ingrese la información del estudiante\n");
printf("4.Gestión de la información del estudiante\n");
printf( "5. Los estudiantes eligen cursos\n");
printf("6. Visualización y almacenamiento de información del sistema\n");
printf("7. Salir el sistema\n") ;
printf("\nIngrese la opción de menú (1~7):\n");
scanf("%d",&i);
if(i<1 || i>7)
{
printf("Error de entrada, vuelva a ingresar:\n");
ir a inicio;
}
cambiar(i)
{
caso(1): p>
{
sistema("cls");
inputc();
ir a inicio;
romper;
}
caso(2):
{
sistema("cls");
gestiónc();
ir a inicio;
romper;
}
caso(3):
{
sistema("cls");
entradas(); p> p>
ir a inicio;
romper;
}
caso(4):
{
sistema("cls");
gerencias();
ir a inicio;
romper;
}
caso(5):
{
sistema("cls");
electivo();
ir a inicio;
romper;
}
caso(6):
{
sistema( "cls ");
store();
ir a inicio;
romper;
}
case( 7):
{
system("cls");
printf("¡Gracias por usar este sistema!\n\n¡Adiós!\n ") ;
}
}
retorno(0);
}