Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define max_chars 20
- #define max_exp 200
- #define max_asig 25
- typedef struct{
- int num;
- char lletra;
- }tdni; //DNI
- typedef struct{
- char nomas[max_chars+1]; //Nom Assignatura (max. 20 chars)
- float numcred; //Numero de Crèdits
- float nota; //Nota de l'assignatura
- }tasign; //ASIGNATURES
- typedef struct{
- char nom[max_chars+1]; //Nom i Cognom (max. 20 chars)
- tdni dni; //DNI
- int any; //Any d'ingres
- int numas; //Numero assignatures cursades
- tasign asig[max_asig];
- }texpedient; //EXPEDIENT PER PERSONA
- typedef struct{
- int num_exp;
- texpedient expedient[max_exp];
- }tlista_exp; //GUARDA INFORMACIO (max. 200) EXPEDIENTS
- texpedient leer_alumno();
- tlista_exp leer_alumnos();
- tasign leer_asignatura();
- texpedient leer_asignaturas();
- void mostrar_alumno(texpedient exp);
- void mostrar_asignaturas(tasign asig);
- void mostrar_lista_alumnos(tlista_exp lista);
- int comparar_nomas(texpedient exp, int n); //Compara les n-1 primeres asignatures amb l'assignatura numero n, 1 si hi ha alguna igual, 0 si no.
- int comparar_dnis(tdni dni1, tdni dni2); //dni1 va variant, dni2 ha de ser constant
- int comparar_nomass(tasign ass1, tasign ass2); //ass1 va variant, ass2 ha de ser constant
- int main(){
- tlista_exp list_exp;
- tdni daux;
- list_exp.num_exp = 0;
- int op, i, j, q;
- do{
- printf("1-Introducir los datos de los expedientes\n");
- printf("2-Mostrar todos los datos de los expedientes\n");
- printf("3-Listar todos los alumnos (nombre, DNI y fecha de ingreso)\n");
- printf("4-Anyadir o modificar el expediente de un alumno\n");
- printf("5-Eliminar el expediente de un alumno a partir de su DNI\n");
- printf("6-Mostrar los datos (Nombre, DNI y fecha de Ingreso) de los alumnos que mas tiempo llevan en la escuela\n");
- printf("7-Mostrar el expediente de un alumno a partir de su DNI\n");
- printf("8-Calcular la nota media del expediente de un alumno a partir de su DNI\n");
- printf("9-Anyadir o modificar una asignatura al expediente de un alumno a partir de su DNI\n");
- printf("10-Mostrar los alumnos ordenados por nota media de expediente\n");
- printf("11-Mostrar los alumnos con nota mayor que una dada en una determinada asignatura\n");
- printf("12-Mostrar el alumno con mayor nota en una asignatura dada\n");
- printf("13-Salir del programa\n\n");
- printf("Opción:");
- scanf("%d", &op);
- switch(op){
- case 1: list_exp = leer_alumnos();
- printf("\n");
- break;
- case 2: if (list_exp.num_exp != 0) {
- for (i = 0; i < list_exp.num_exp; i++) {
- mostrar_alumno(list_exp.expedient[i]);
- printf("%d\n", list_exp.expedient[i].numas);
- for (j = 0; j < list_exp.expedient[i].numas; j++){
- mostrar_asignaturas(list_exp.expedient[i].asig[j]);
- }
- printf("\n");
- }
- }
- else printf("La lista de expedientes esta vacia\n");
- printf("\n");
- break;
- case 3: if (list_exp.num_exp != 0) {
- for (i = 0; i < list_exp.num_exp; i++) mostrar_alumno(list_exp.expedient[i]);
- }
- else printf("La lista de expedientes esta vacia\n");
- printf("\n");
- break;
- case 4:
- break;
- case 5:
- break;
- case 6:
- break;
- case 7: if (list_exp.num_exp != 0) {
- printf("Introduce DNI del alumno que quieres ver su expediente: ");
- scanf("%d%c", &daux.num, &daux.lletra);
- q = 0;
- for (i = 0; i < list_exp.num_exp && q != 1; i++){
- q = comparar_dnis(list_exp.expedient[i].dni, daux);
- }
- if (q == 1) {
- mostrar_alumno(list_exp.expedient[i-1]);
- printf("%d\n", list_exp.expedient[i-1].numas);
- for (j = 0; j < list_exp.expedient[i-1].numas; j++){
- mostrar_asignaturas(list_exp.expedient[i-1].asig[j]);
- }
- }
- else printf("No se ha encontrado el alumno\n");
- }
- else printf("La lista de expedientes esta vacia\n");
- printf("\n");
- break;
- case 8:
- break;
- case 9:
- break;
- case 10:
- break;
- case 11:
- break;
- case 12:
- break;
- case 13: break;
- default: printf("Opción Incorrecta\n");
- }
- } while(op != 13);
- }
- texpedient leer_alumno(){
- texpedient exp;
- int i = 0;
- char caux;
- do {
- scanf("%c", &caux);
- exp.nom[i] = caux;
- i++;
- } while(caux != ':' && i < 20); //NOM
- scanf("%d", &exp.dni.num); //DNI NUM
- scanf("%c:", &exp.dni.lletra); //DNI LLETRA
- scanf("%d%*c", &exp.any); //ANY INGRES
- return exp;
- }
- tlista_exp leer_alumnos(){
- tlista_exp lexp;
- int i, j, q;
- printf("Introduce el numero de alumnos que quieres cargar: ");
- scanf("%d%*c", &lexp.num_exp);
- for (i = 0; i < lexp.num_exp; i++){
- printf("ALUMNO %d\n", i+1);
- printf("Introduce información con el siguiente formato (Nombre_apellidos:DNI:anyo_ingreso): ");
- lexp.expedient[i] = leer_alumno();
- q = 0;
- for (j = 0; j < i && q != 1; j++){
- q = comparar_dnis(lexp.expedient[j].dni, lexp.expedient[i].dni);
- }
- if (q == 1) {
- printf("Este alumno ya existe. Vuelve a introducir los datos del alumno\n");
- i--;
- }
- else lexp.expedient[i] = leer_asignaturas(lexp.expedient[i]);
- }
- return lexp;
- }
- tasign leer_asignatura(){
- tasign as;
- char caux;
- int i = 0;
- do {
- scanf("%c", &caux);
- as.nomas[i] = caux;
- i++;
- } while(caux != ':' && i < 20); //NOM ASSIGNATURA
- scanf("%f:", &as.numcred); // NUM CREDITS ASSIGNATURA
- scanf("%f%*c", &as.nota); //NOTA ASIGNATURA
- return as;
- }
- texpedient leer_asignaturas(texpedient exp){
- int j, n;
- printf("Introduce el numero de asignaturas: ");
- scanf("%d%*c", &exp.numas);
- for (j = 0; j < exp.numas; j++){
- printf("Introduce ASIGNATURA %d con el siguiente formato (nombre_asginatura:creditos:calificacion: ", j+1);
- exp.asig[j] = leer_asignatura();
- n = 0;
- if (j > 0){ //Perque no compari la primera asignatura que posem.
- n = comparar_nomas(exp, j);
- }
- if (n == 1) {
- printf("Esta asignatura ya existe. Vuelve a introducir los datos de la asignatura\n");
- j--;
- }
- }
- return exp;
- }
- int comparar_nomas(texpedient exp, int n){
- int j, i, aux;
- for (j = 0; j < n; j++){
- aux = 0;
- for (i = 0; i < 20 && exp.asig[n].nomas[i] != ':'; i++){
- if (exp.asig[j].nomas[i] == exp.asig[n].nomas[i]) aux++;
- }
- if (aux == i) return 1;
- }
- return 0;
- }
- int comparar_dnis(tdni dni1, tdni dni2) { //dni1 va variant, dni2 ha de ser constant
- int i;
- if (dni1.num == dni2.num && dni1.lletra == dni2.lletra) return 1;
- return 0;
- }
- int comparar_nomass(tasign ass1, tasign ass2); //ass1 va variant, ass2 ha de ser constan
- void mostrar_alumno(texpedient exp){
- int i;
- for (i = 0; i < max_chars+1 && exp.nom[i] != ':'; i++){
- printf("%c", exp.nom[i]);
- }
- printf(":");
- printf("%d%c:", exp.dni.num, exp.dni.lletra);
- printf("%d\n", exp.any);
- }
- void mostrar_asignaturas(tasign asig);
- void mostrar_lista_alumnos(tlista_exp lista);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement