Skip to content
This repository has been archived by the owner on Jul 10, 2019. It is now read-only.
Djunquera edited this page Jun 30, 2019 · 11 revisions

Objetivo

  • Ayudar al alumno a orientarse en la ETSIDI

Contenido del trabajo

  • Planos de la ETSIDI, con flecha interactiva mostrando el aula/despacho deseado.
  • Base de datos que almacena los datos de los alumnos inscritos.
  • Al final no conseguimos implementar las librerías necesarias para proyectar el plano en C.

Funcionalidades Implementadas

  • Tras compilar y ejecutar el programa, aparece un Menú de Inicio con 4 opciones:

1. Nuevo usuario : En caso de que el alumno no se haya registrado, podrá hacerlo pulsando la tecla 1. 2. Iniciar Sesión : En el caso de que ya se haya registrado, podrá iniciar su sesión pulsando la tecla 2. 3. En qué consiste : Si el alumno desea recibir mas información sobre la utilidad y funcionalidades del programa, podrá hacerlo pulsando la tecla 3 4. Exit : Finalmente si el usuario desea salir del programa podrá hacerlo simplemente pulsando la tecla 4

1.1 Nuevo usuario

Tras pulsar la opción de Nuevo usuario, el programa le pedirá al alumno su nombre, apellido, número de matrícula y grado. Después de rellenar los datos, el usuario será reconducido por el programa al menú de inicio donde podrá iniciar sesión con sus datos.

2.1 Iniciar Sesión

Al elegir la opción de Nuevo usuario, el programa pedirá el número de matrícula del alumno. Después de introducirlo, el alumno tendrá la opción de ver sus datos, preguntarle al programa dónde tiene clase, sus tutorías con sus profesores, preguntarle el día y la hora al programa y finalmente la opción de volver al menú principal.

3.1 En que consiste

Cuando el alumno elige esta opción, se desplegara en la pantalla un texto explicativo del programas y sus funcionalidades.

4.1 Exit

Esta opción permite al alumno cerrar el programa.

Tutorial

  • Al compilar y ejecutar el programa se abre este Menú Inicial:

  • Si el alumno elige la opción de nuevo usuario, aparece la siguiente ventana que podrá rellenar cómodamente con sus datos

  • A continuación, le aparecerá una nueva ventana preguntado al alumno su carrera, que deberá elegir pulsando el numero correspondiente a su carrera

  • Después de Registrarse, el alumno sera reconducido al menú de Inicio. Para acceder a su perfil tiene que iniciar sesión, pulsando en la tecla 2 y le aparecerá la siguiente ventana donde escribirá su numero de matricula

  • Tras introducir su numero de matricula, se desplegara su menú personal donde podrá acceder a diferentes funcionalidades:

  • Si el alumno desea ver su ficha con sus datos, tendrá que pulsar en la tecla 1, a continuación le aparecerá la siguiente ventana:

  • Si el alumno desea saber que clase tiene, y a que hora, tendrá que pulsar la tecla 2 y le aparecerá la siguiente ventana en función de su clase y matricula

  • Si el alumno desea saber que día y hora es, pulsará la tecla 4:

  • Volvemos al Menú Inicial, si un alumno desea iniciar sesión con un numero de matricula que no ha sido registrado, el programa no le deja avanzar y lo manda de vuelta al menú de inicio:

  • Todavía en el Menú Inicial si un alumno intenta crear un nuevo usuario con un numero de matricula ya registrado el programa no le deja avanzar y lo manda de vuelta al menú de inicio:

  • En el Menú Inicial, si el alumno, intrigado por el programa que esta utilizando, desea obtener mas información sobre este ultimo, tendrá que pulsar en la tecla 3 y le aparecerá una ventana con un mensaje explicativo:

Funciones Utilizadas

  • Esta función verifica si existe la matricula cuando creas un usuario
int verificamatricula(usuario a,contenido f,opciones m,int *h, FILE *pf){
int w=0;
		pf = fopen("C:/Users/Diego/Desktop/trabajo/matriculas.txt", "r");
if (pf == NULL)
{// Si el resultado es NULL mensaje de error
printf("Error al abrir el fichero.\n");
return -1;
}
else
{// Si ha funcionado, comienza escritura
//asociamos al usuario su nombre, apellidos, matricula, y carrera cursada
printf("Numero de matricula:");
scanf("%i",&a.matricula);
//recorre el vector matricula[100]
for(w;w<100;w++)
{
	

fscanf(pf,"%i,",&f.matricula[w]);
	/*Si dentro del vector recorrido el programa encuentra una matricula igual 
		a la que se desea registrar entonces el programa imprime que el registro ya existe*/
if (f.matricula[w]==a.matricula){
			printf("Ya existe registro con esta matricula");
			sleep(2);
			//Al entrar en el case 1 opcion es igual a 1,cambiamos dentro del "if" que opcion sea igual a 2
			m.opcion=2;
			
		}
	}
	fclose(pf); // Cerramos fichero	
}
*h=a.matricula;
return m.opcion;
}
  • Esta función guarda tu nombre y apellido en un documento de texto
int guarda_nomb_apelli(usuario a,FILE *pf1,FILE *pf2)
{
		pf1 = fopen("C:/Users/Diego/Desktop/trabajo/nombre.txt", "a");
	printf("Nombre:");
	scanf("%29s",a.nombre);
		if (pf1 == NULL)
		{// Si el resultado es NULL mensaje de error
		printf("Error al abrir el fichero.\n");
		return -1;
		}
		else
		{fprintf(pf1, "%s\t",a.nombre);
			fclose(pf1);
		}
		
	pf1 = fopen("C:/Users/Diego/Desktop/trabajo/nombre.txt", "a");
	printf("Apellidos:");
	scanf("%49s",a.apellido);
		if (pf1 == NULL)
		{// Si el resultado es NULL mensaje de error
		printf("Error al abrir el fichero.\n");
		return -1;
		}
		else
		{fprintf(pf1, "%s,",a.apellido);
			fclose(pf1);
		}
	
/*calcula la longitud de el apellido dentro de la cadena alumno.apellido y ese valor de 
longitud lo sumara al del nombre para luego meterlo en el fichero "longitudstrings"*/
a.longiapellido=strlen(a.nombre);
/*calcula la longitud de el nombre dentro de la cadena alumno.nombre y ese valor de 
longitud lo sumará al del apellido para luego meterlo en el fichero "longitudstrings"*/
a.longinombre=strlen(a.apellido);

a.sumalongi=(a.longinombre+a.longiapellido+1);//el +1 es contandole un espacio entre el nombre y el apellido

pf2 = fopen("C:/Users/Diego/Desktop/trabajo/longitudstrings.txt", "a");
		fprintf(pf2, "%i,",a.sumalongi);
			fclose(pf2);

}
  • Esta función guarda en otro fichero el numero correspondiente a la carrera que hayas elegido en el registro de usuario
int seleccioncarrera(usuario a,FILE *pf){

	//selección de la carrera cursada en la universidad(primer año solo)
	do{	
	system("cls");
	printf("Por ultimo, cual es tu carrera?\n\n\t\t(1)Electrica\t(2)Mecanica\t(3)Quimica Industrial\n\t\t(4)Diseno industrial y desarollo de producto\t(5)Electronica\n");
	scanf("%i",&a.carrera);
	/*bucle do while para que el usuario seleccione una de las opciones permitidas como carrera 
	(se queda pillado si se elige otra cosa que un entero)*/
}while((a.carrera!=1)&&(a.carrera!=2)&&(a.carrera!=3)&&(a.carrera!=4)&&(a.carrera!=5));

pf = fopen("C:/Users/Diego/Desktop/trabajo/carreras.txt", "a");
		fprintf(pf, "%i,",a.carrera);
			fclose(pf);
}
  • Esta función verifica si la matrícula ya existe cuando inicias sesión
int	matriculaexistente(usuario a,contenido f,opciones m,int *x,FILE *pf){

	/volvemos a poner posicion dentro de la función para que se entienda mejor/
		int j=0,n=0,posicion; 
	
	printf("Introduce tu numero de matricula\t");
	scanf("%i",&a.matricula);
	
		pf = fopen("C:/Users/Diego/Desktop/trabajo/matriculas.txt", "r");
if (pf == NULL)
{// Si el resultado es NULL mensaje de error
printf("Error al abrir el fichero.\n");
return -1;
}
else
{
	for(j;j<100;j++)
	{
		fscanf(pf,"%i,",&f.matricula[j]);
		
	if(f.matricula[j]!=a.matricula)
	{
		/*añadimos un n el cual se suma 1 a si mismo cada vez que la matricula de inicio de sesión
		 no concuerda con ninguna  matricula registrada y guardada en el vector matricula*/
		n++;
	}
	/*Este else solo puede repetirse una vez máximo por que no hay dos matriculas iguales,
	entonces la matricula correspondiente se haya en esta posición j y podremos determinar toda
	 la demás información del usuario gracias a esta posición*/
	else posicion=j;
		
	}
	if(n==100)
		{
			/*si la matricula no ha sido registrada el entero n sera igual a 100 porque en ningún momento 
			se habrá dado el caso del else posicion=j,n es 100 porque el vector matricula tiene dimensión 100*/
		printf("\n\t\tNo existe registro con esa matricula");

	//En ese caso cambiamos opción por 1 para que se salga de nuevo al menú principal sin pasar por el if de la linea 122
	m.opcion=1;
	//Simplemente para que al usuario le de tiempo a leer el mensaje
	sleep(3);
		}
	fclose(pf);
}
*x=posicion;
return m.opcion;
}
  • Imprime los datos del usuario cuando inicia sesión y le da a la opción mis datos
int imprimir_datos_usuario(contenido f,int posicion,FILE *pf1,FILE *pf2,FILE *pf3){
	
	int suma1=0,suma2=0;
			//usamos h para los siguientes "for"
			int h=0;
			pf2 = fopen("C:/Users/Diego/Desktop/trabajo/longitudstrings.txt", "r");
			
			
			for(h=0;h<(posicion);h++)
			{	
			fscanf(pf2,"%i,",&f.longiregistro[h]);
			/*suma1 es la suma de las longitudes de las cadenas 
			de caracteres de nombre y apellido hasta la del usuario NO INCLUIDO (nos va a servir para cortar 
			los nombres anteriores de manera que el programa solo imprima a partir de el nombre del usuario)*/
				suma1=suma1+f.longiregistro[h];
				
			}
		
			fscanf(pf2,"%i,",&f.longiregistro[posicion]);
			/*suma2 es la suma de las longitudes de las cadenas 
			de caracteres de nombre y apellido hasta la del usuario INCLUIDO (nos va a servir para cortar 
			los nombres posteriores de manera que el programa deje de imprimir tras el nombre del usuario)*/	
			suma2=suma1+f.longiregistro[posicion];
			
			fclose(pf2);
	
			pf1 = fopen("C:/Users/Diego/Desktop/trabajo/nombre.txt", "r");
				//Aquí es donde imprimimos uno por uno los caracteres del intervalo descrito anteriormente para el nombre del usuario
			if (pf1 == NULL)
	{// Si el resultado es NULL mensaje de error
	printf("Error al abrir el fichero.\n");
	return -1;
	}
	else
	{
				for(h=0;h<suma2;h++)
			{
					fscanf(pf1,"%c,",&f.registro[h]);
					if(h>=suma1&&h<suma2)
				printf("%c",f.registro[h]);
			}}
				fclose(pf1);
			//Aquí es donde imprimimos uno por uno los caracteres del intervalo descrito anteriormente para el apellido del usuario	
				printf("\n");
				
				
		//Aqui pf3 corresponde realmente a la direccion de puntero pf4 en el programa principal
		pf3 = fopen("C:/Users/Diego/Desktop/trabajo/carreras.txt", "r");
		//Debemos crear un bucle for que empiece desde 0 para que asigne a cada valor su posicion real en el fscanf 
		for(h=0;h<100;h++){
				fscanf(pf3, "%i,",&f.carrera[h]);	
			}
					/*teniendo la posición de la matricula elegida dentro del vector matricula,
					obtenemos al mismo tiempo la posición de la carrera elegida por dicho usuario en el vector carrera*/
					switch(f.carrera[posicion])
					{
					case 1: printf("Electrica");
						break;
					case 2: printf("Mecanica");
						break;
					case 3: printf("Quimica Industrial");
						break;
					case 4: printf("Disenho industrial y desarrollo de producto");
						break;
					case 5: printf("Electronica");               
						break;
					default: printf("NO ES POSIBLE");//No es posible llegar a este default
						break;
					}
							fclose(pf3);
					getch();
}
  • Esta función dice donde hay clase dependiendo de el día de la semana que es
clases(clase a,FILE *pf){
	int h,r=0;
	char lunes[10]="Monday",martes[10]="Tuesday",miercoles[10]="Wednesday",jueves[10]="Thursday",viernes[10]="Friday";


/* función time que recibe como parámetro un puntero nulo
--> devuelve el tiempo en una variable de tipo time_t*/
time_t t=time(0);
/*función localtime recibe como parámetro un puntero 
t de variable time_t --> devuelve un puntero (horalocal) hacia la estructura de tipo tm*/	
struct tm *local=localtime(&t);
//definimos una cadena de caracteres donde se va a almacenar la información final
char dia[10];
  
strftime(dia,9,"%A",local);

	pf = fopen("C:/Users/Diego/Desktop/trabajo/clase.txt","r");
				//Aquí es donde imprimimos uno por uno los caracteres del intervalo descrito anteriormente para el nombre del usuario
			if (pf == NULL)
	{// Si el resultado es NULL mensaje de error
	printf("Error al abrir el fichero.\n");
	return -1;
	}
	else
	{
			if ((strcmp(lunes,dia))==0){
		r=1;
				for(h=0;h<78;h++)
			{
					fscanf(pf,"%c,",&a.horario[h]);
			
				printf("%c",a.horario[h]);
			}}
			if ((strcmp(martes,dia))==0){
		r=1;
				for(h=0;h<158;h++)
			{
					fscanf(pf,"%c,",&a.horario[h]);
			if(h>=79&&h<135) printf("%c",a.horario[h]);
			}}
			if ((strcmp(miercoles,dia))==0){
		r=1;
				for(h=0;h<500;h++)
			{
					fscanf(pf,"%c,",&a.horario[h]);
			if(h>=135&&h<200) printf("%c",a.horario[h]);
			}}
				if ((strcmp(jueves,dia))==0){
		r=1;
				for(h=0;h<500;h++)
			{
					fscanf(pf,"%c,",&a.horario[h]);
			if(h>=200&&h<272) printf("%c",a.horario[h]);
			}}
			if ((strcmp(viernes,dia))==0){
		r=1;
				for(h=0;h<500;h++)
			{
					fscanf(pf,"%c,",&a.horario[h]);
			if(h>=272&&h<367) printf("%c",a.horario[h]);
			
			}}
			if(r=0)
			printf("Es fin de semana no tienes claseee!!!");

			fclose(pf);
			
		}
		getch();
}
Clone this wiki locally