Programa C para el sistema de selección de cursos de estudiantes.
#include
#include
int N1,N2,kk1 ,kk2,kk3;
estructura curso * cabeza1;
estructura estudiante * cabeza2
estructura curso //estructura de información del curso
{
int num1;
char nombre1[20];
int puntuación;
int nelepeo;// Ya registrado para esto curso Número de personas
int Melepeo;
struct couse * next;
};
struct estudiante//estructura de información del estudiante
{
int num2;
char nombre2[20];
int nelenum[50];//número de curso seleccionado p>
int nelen;
struct Student * next;
};
void Ms()
{ p>
para(kk1=0;kk1<1100;kk1++)
para(kk2=0;kk2<1200;kk2++)
para(kk3=0;kk3 <1200 ;kk3++);
}
void tecladoc()//subfunción de grabar curso (grabar desde el teclado)
{
struct couse *p1,*p2;
N1=0;
p1=p2=(struct couse*)malloc(sizeof(struct couse));
printf ("Número de curso\t nombre del curso\t créditos\t límite de personal del curso\n");
scanf("%d%s%d%d%d",&p1-> num1, p1- > nombre1,&p1->puntuación,&p1->.Melepeo);
p1->nelepeo=0;
cabeza1=NULL;
mientras (p1 ->núm1! =0)
{
N1=N1+1;
si(N1==1)cabeza1=p1;
más p2->next=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 teclado de grabación (f
rom)
{
ARCHIVO * fp;
char filepath[20];
struct couse *p1,*p2;
N1=0;
printf("Ingrese la ruta del archivo que se va a leer en la ruta del archivo:");
getchar();
obtiene(rutadelarchivo);
if((fp=fopen(rutadelarchivo, "r"))==NULL)
{
printf("¡No se puede encontrar el archivo %s!\n",filepath
exit(0
}
p1
p1=p2=(struct couse*)malloc(sizeof(struct couse));
fscanf(fp,"%d%s%d%d%d%d",&p1- >num1,p1->nombre1,&p1->puntuación,&p1->nelepeo,&p1->Melepeo);
head1=NULL;
while(!feof(fp) )
{
N1=N1+1;
si(N1==1)cabeza1=p1;
si no p2- >next=p1;
p2=p1;
p1=(struct couse * )malloc(sizeof(struct couse)) ;
fscanf(fp, "%d%s%d%d%d%d",&p1->num1,p1->nombre1,&p1->puntuación,&p1->nlepeo,&p1->Melepeo);
}
p2->next=NULL;
}
void inputc()//Ingrese la función principal del curso
{
int i;
printf("/t\t ingresa la información del curso\n");
printf("/n1.Ingresa /n" desde el teclado);
printf("2. Entrada /n" del archivo);
printf("3.volver al menú principal\n");
printf( " Seleccione (1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):keyboardc();break;
case(2):filec();break;
case(3): break;
}
}
void insertc(struct couse *incouse)//subfunción de gestión del curso (agregar curso)
{ p >
estructura couse *p0,*p1,*p2;
p1=head1;
p0=incouse;
if(hea
d1 ==NULL)
{
head1=p0;
p0->siguiente=NULL;
}
}
else
{
while((p0->num1 > p1->num1) && amp; (p1->siguiente!= NULL))
{
p2=p1;
p1=p1->siguiente;
}
if(p0->num1 <= p1->num1)
{
if (head1==p1) head1=p0;
else p2- >siguiente=p0;
p0->siguiente=p1;
}
más
{
p1->siguiente=p0;
p0-> ; siguiente=NULL;
}
}
N1=N1+1 ;
}
void delc(int num1)//subfunción de gestión de cursos (eliminar cursos)
{
struct couse *p1 ,*p2;
if(head1==NULL)
{
printf("\n no tiene cursos, ¡no se puede eliminar!\n" );
ir al final;
}
p1=head1;
while(num1!=p1->num1 && p1- >siguiente! =NULL)
{
p2=p1;
p1=p1->siguiente;
}
if(num1==p1->num1)
{
if(p1==cabeza1) cabeza1=p1->siguiente;
else p2->next=p1-> next;
printf("¡Eliminó este curso numerado!\n");
N1=N1-1;
}
else printf("¡No hay cursos con ese número! \n");
end:;
}
gestión de vacíosc()//función principal de gestión del curso
{ p>
struct couse * incouse;
int i,num1;
printf("\t\t gestión del curso\n");
printf("1.Agregar curso\n");
printf("2. Eliminar curso\n");
printf("3.Volver al menú principal \n" );
printf("Seleccione (1~3):\n");
scanf ("%d",&i);
cambiar (i)
{
caso(1):
{
incouse=(struct couse *)malloc(sizeof(struct couse));
printf("Número de curso\t nombre del curso\t créditos\t límite de personal del curso \n ");
scanf("%d%s%d%d",&incouse->num1,incouse->nombre1,&incouse->puntuación,&.incouse->Melepeo);
incouse->nelepeo=0;
insertc(incouse);
break;
}
case(2) :
{
printf("Ingrese el número del curso que desea eliminar:\n");
scanf("%d",&num1
delc(num1);
romper
}
caso(3): romper;
}
}
void teclados()//ingresar la subfunción de información del estudiante (desde el teclado)
{
int i;
struct estudiante *p1,*p2;
N2=0;
p1=p2=(struct estudiante *) malloc(sizeof(struct estudiante)) ;
printf("número de estudiante\t nombre de estudiante\n");
scanf("%d%s",&p1->num2,p1->nombre2);
p1->nelen =0;
for(i=0;i<20;i++) p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!=0)
{
N2=N2+1;
si ( N2==1)head2=p1;
else p2->next=p1;
p2=p1;
p1=(estructura estudiante * ) malloc(sizeof(struct Student));
scanf("%d%s", &p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++) p1->nelenum[i]=0
}
p2->siguiente= NULL; ;
}
void files()//subfunción de entrada de información del estudiante (desde archivo)
{
int i=0;
ARCHIVO * fp;
ruta de archivo char[20];
estructura estudiante *p1,*p2;
N2=0;
printf("
Introduzca la ruta al archivo que se va a leer: ");
getchar();
gets(filepath);
if((fp=fopen( ruta de archivo, "r"))==NULL)
{
printf("¡%s archivo no encontrado!\n",ruta de archivo
);salir(0);
}
p1
p1=p2=(struct estudiante*)malloc(sizeof(struct estudiante));
fread(p1,sizeof(struct estudiante),1,fp);
head2=NULL;
while(!feof(fp))
{
i=0;
N2=N2+1;
si(N2==1)cabeza2=p1;
else p2-& gt;next=p1;
p2=p1;
p1=(struct Student * )malloc(sizeof(struct Student)); p>
fread(p1,sizeof(struct Student),1,fp);
}
p2->next=NULL;
}
void inputs()//ingresar la información del estudiante función principal
{
int i;
printf("/t\t ingrese la información del estudiante\n");
printf("/n1. Ingrese desde el teclado\n");
printf("2. Ingrese desde el archivo\n");
printf("3.Volver al menú principal\n");
printf("Seleccione (1~3):\n");
scanf("%d",&i);
switch(i)
{
case(1):teclados();break;
caso(2):archivos();romper;
caso(3): romper;
}
}
void inserts(struct Student * incouse)//subfunción de gestión de información del estudiante (completar la información del estudiante)
{
struct Student *p0,*p1,*p2; p> p>
p1=cabeza2;
p0=incouse;
if(cabeza2==NULL)
{
head2 =p0;
p0->next=NULL;
}
más
{
while( (p0->num2 > p1->num2 ) && (p1->siguiente! =NULL))
{
p2=p1;
p1=p1->siguiente;
}
if(p0->num2 <= p1->num2)
{
if(head2==p1) head2=p0;
else p2->next=p0;
p0->next=p1;
} p>
else
{
p1->siguiente=p0;
{
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 tiene información sobre este estudiante, ¡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==cabeza2) cabeza2=p1->siguiente;
else p2->next=p1-> next;
printf("¡La información sobre este estudiante ha sido eliminada!\n");
N2=N2-1; p> p>
}
else printf("¡No hay estudiantes con este número de estudiante!\n");
end:;
}
void Managements()//función principal de gestión de información del estudiante
{
struct Student * incouse;
int i,num2;
printf("/t\t gestió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. Volver al menú principal/n");
printf("Por favor elija (1~3) :\n" );
scanf("%d",&i);
cambiar(i)
{
caso (1):
{
incouse=(struct estudiante *)malloc(sizeof(struct estudiante) );
incouse->nelen=0;
incouse->nelenum[0]=0;
printf("St
número de estudiante\t nombre del estudiante\n");
scanf("%d%s",&incouse-> num2,incouse->nombre2);
inserts(incouse);
break;
}
case(2):
{
printf("Por favor, introduzca el número del estudiante que se va a eliminar:\n");
scanf("%d",&num2);
dels(num2);
break;
}
caso(3): descanso;
}
}
}
void elect(struct Student * s)//elegir clase
{
struct couse * p;
int num1,i;
printf("Ingrese el número de la clase a seleccionar:\n");
Escanee f("%d",&num1);
for(i =0;s-& gt;nelenum[i]! =0;i++);
s-& gt;nelenum[i]=num1;
(s-& gt ;nelen)++;
p=head1;
while(p-& gt;num1!=num1) p=p-& gt;siguiente;
(p-& gt;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("Ingrese su número de estudiante: ");
scanf("%d",&num2);
s= cabeza2;
while(s->num2! =num2 && s-& gt;siguiente!=NULL) s=s->siguiente;
if(s->num2!=num2)
{
printf("Su información no existe, ¡vaya al menú principal e ingrese su información!\n");
ir al final;
}
c=head1;
printf("Su número de curso opcional:\n");
while(c!=NULL)
{ p> p>
for(t=0,i=0;s->.nelenum[i]! =0;i++)
{
if(c- >num1 ==s->nelenum[i]) t=1;
}
if(t==0 &a
mp;& (c->nelenum!= c->nelenum[i]))
{
printf("%d\n",c-> num1);
j++;
}
c=c->siguiente;
}
si (j==0)
{
printf("¡Has tomado todos los cursos y no puedes seleccionar más!\n");
ir al final;
}
printf("¿Seleccionando curso (y/n)?:\n");
getchar();
e=getchar();
e=getchar();
i=0;
while(e=='y')
{
elect(s);
printf("¿Continuar con elect(s/n)?:\n");
getchar();
e=getchar();
}
fin:;
}
void back(struct Student * p)//retiro de clase
{
struct couse * p1;
int num1,i,j; p> p>
printf("Ingrese el número del curso que desea abandonar:\n");
Escanear f("%d",&num1);
p1=cabeza1;
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->nelenum)--;
printf("Retiro exitoso de la clase ! \n");
}
void hcheak()//subfunción de selección de 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, por favor regrese al menú principal para ingresar su información:\n");
ir al final;
}
printf("Número de curso seleccionado:\n");
if( p->nelenum[0]==0)
{
printf("¡No has tomado ningún 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("¿El retiro (y/n ) en progreso?") ;
getchar();
c=getchar();
while(c=='y')
{
back(p);
printf("¿Continuando con abandono(s/n)?")
getchar();
c=getchar();
(p->nelen)--;
}
fin:
}
void elective()//función principal electiva del estudiante
{
int i;
printf("1 .Consultar cursos disponibles \n");
printf("2. Consultar cursos seleccionados \n");
printf("3.volver al menú principal \n" );
printf("Por favor ingrese (1~3):\n");
scanf("%d",&i);
switch( i )
{
caso(1):cheak();romper;
caso(2):hcheak();romper
case(3): break;
}
}
void listc()//Información del curso de salida
{
struct couse * p;
p=head1;
printf("número del curso Nombre del curso Créditos Número del curso inscrito Límite del número del curso\n");< / p>
mientras(p! =NULL)
{
printf("%-8d%10s%6d%8d%12d\n",p->num1,p->nombre1,p->puntuación ,p->.nelepeo,p->Melepeo);
p=p->siguiente;
}
}
listas vacías()//generar información del estudiante
>{
struct Student * p;
p=head2 ;
printf("Número de estudiante Nombre del estudiante Número de cursos tomados\n"); p> p>
while(p!=NULL)
{
printf("%-4d %10s %6d\n",p->num2,p- >nombre2 ,p->nelen);
p=p->siguiente;
}
}
void intoc() // almacenar información del curso
{
ARCHIVO * fp;
struct couse * p; /p >
printf("Ingrese la ruta al archivo donde se guardará la información del curso:");
getchar();
gets(filepath);
p>if((fp=fopen(filepath, "w"))==NULL)
{
printf("\n ¡Error al guardar! ") ;
salir(0);
}
p=head1;
mientras(p!=NULL) p>
{
fprintf(fp,"%d %s %d %d %d\n",p->num1,p->nombre1,p->.score,p- >nelepeo,p ->Melepeo);
p=p->siguiente;
}
fclose(fp); printf("¡La información del curso se guarda en %s! \n",filepath);
}
void intos()//almacenar información del estudiante
{
ARCHIVO * fp;
struct Student * p;
char filepath[30]
printf("Ingrese la ruta del archivo de información del estudiante que se guardará:");
getchar();
gets(filepath);
if((fp= fopen(filepath, "w"))==NULL)
{
printf("\ n ¡falló al guardar! ") ;
salir(0);
}
p=head2;
mientras(p!=NULL) p>
{
fwrite(p,sizeof(struct Student),1,fp);
p=p-> siguiente;
}
fclose(fp);
printf("¡Información del estudiante guardada en %s!\n",filepath);
}
void into()//almacenar información
{
int i;
printf("1. Almacenar información del curso/n");
printf ("2. Almacenar información del estudiante/n");
printf ("3. Regresar al menú principal/n"); (1 ~3)/n");
scanf("%d",&i);
cambiar(i)
{
caso(1):intoc();romper;
caso(2):intos();romper;
caso(3):romper;
}
}
void store()//función principal del mensaje
{
int i;
printf("/t\t sistema Ver y almacenar información\n");
printf("1. Ver información del curso\n");
printf(" 2. Ver información del estudiante\n");
printf("3. Guardar información\n");
printf("4.Volver al menú principal\n");
p>printf("Ingrese (1~4):\n");
scanf("%d",&i);
cambiar (i)
{
case(1):listc();break;
case(2):lists();break
caso(3):into();romper;
caso(4):romper;
}
}
int main ()//función principal
{
int i;
inicio:
printf("\n\ t\t\ t ¡Bienvenido al sistema de selección de cursos para estudiantes! printf("1.Entrada de información del curso\n");
printf("2.Gestión de cursos\n");
printf("3.Ingreso de información del estudiante\n");
printf("4.Gestión de información del estudiante\n");
printf("5.Estudiante Gestión de la información\n ");
printf("6.Gestión de la información del estudiante\n");
printf("7.Gestión de la información del estudiante\n");
printf("8.Gestión de información del estudiante");
printf("5.Selección de estudiante");
printf("6.Visualización y almacenamiento de información del sistema" );
p>
printf("7.Salir del sistema\n");
printf("\nPor favor ingrese la opción de menú
(1~7):\n");
scanf("%d",&i);
if(i<1 || i>7)
{
printf("Error de entrada, vuelva a escribir:\n");
ir a inicio;
}
switch(i)
{
printf("Error de entrada, vuelva a escribir:\n");
geto start;
}
cambiar(i)
{
caso(1):
{
sistema(" cls");
inputc();
ir a inicio;
romper;
}
caso (2):
{
{
Esta es la primera vez que intento usar esta función p> system("cls");
gestiónc();
ir a inicio;
romper;
}
caso(3):
{
system("cls");
inputs();
ir a inicio;
romper;
p>}
caso(4):
{
sistema("cls");
gestiones() ;
ir a inicio;<
romper;
}
caso(5):
{
sistema("cls");
electivo();
ir a inicio;
romper;
}
caso(6):
{
sistema("cls");
tienda();
ir a inicio;
romper;
}
caso(7):
{
system("cls");
printf("¡Gracias por usar este sistema! \n\n¡Adiós! \n");
}
}
}
return(0);
}