Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <ctype.h>
- #include <stdbool.h>
- #include <time.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/stat.h>
- //PARA CORRER NO WINDOWS COM ACENTOS: CHCP 651001
- /*BUGS CONHECIDOS:
- */
- /*NOTAS*/
- /*ESTRUTURAS*/
- typedef struct aluno {
- int numero;
- char nome[60];
- int curso; //cada curso tem um numero, 1-LEI,2-LDM
- int ano; //1º,2º,....
- int regime; //= curso; regime(normal, trabalhador-estudante, atleta, dirigente associativo ou aluno de Erasmus).
- } Aluno;
- typedef struct lista_alunos *List;
- typedef struct lista_alunos {
- Aluno dados;
- List next;
- List previous;
- } Lista_dos_alunos;
- typedef struct sala *List_s;
- typedef struct sala {
- char sala[10];
- List_s next;
- } Sala;
- typedef struct data {
- int dia;
- int mes;
- int ano;
- } Data;
- typedef struct exame {
- int codigo;
- int disciplina;
- int tipo_exame; //epoca normal etc.
- List_s sala;
- Data data;
- char hora_inicio[10];
- char hora_fim[10];
- } Exame;
- typedef struct lista_exames *List_e;
- typedef struct lista_exames {
- Exame dados;
- List students;
- List_e next;
- List_e previous;
- } Lista_dos_exames;
- //typedef struct disciplina *List_disc;
- typedef struct disciplina {
- int codigo;
- char nome[60];
- int curso; //cada curso tem um numero, 1-LEI,2-LDM
- int semestre;
- int ano;
- char docente[60];
- } Disciplina;
- typedef struct lista_disciplinas *List_d;
- typedef struct lista_disciplinas {
- Disciplina dados;
- List students;
- List_d next;
- List_d previous;
- } Lista_das_disciplinas;
- /*FUNÇOES*/
- int compare_dates (Data d1, Data d2){
- if (d1.ano < d2.ano)
- return -1;
- else if (d1.ano > d2.ano)
- return 1;
- else{
- if (d1.mes<d2.mes)
- return -1;
- else if (d1.mes>d2.mes)
- return 1;
- else if (d1.dia<d2.dia)
- return -1;
- else if(d1.dia>d2.dia)
- return 1;
- else
- return 0;
- }
- }
- int verifica_se_numero(char *str, int tam) {
- int i;
- for(i = 0; i<tam; i++) {
- if(!isdigit(*(str+i))) {
- return 0;
- }
- }
- return 1;
- }
- int pot10(int numero, int pot) {
- int i;
- for (i=0; i<pot; i++) {
- numero *= 10;
- }
- return numero;
- }
- int doesFileExist(const char *filename) {
- struct stat st;
- int result = stat(filename, &st);
- return result == 0;
- }
- void apaga_ficheiro(int codigo){
- char nomefich[30];
- int i;
- sprintf(nomefich, "%d", codigo);
- i = strlen(nomefich);
- nomefich[i++] = 's';
- nomefich[i++] = '.';
- nomefich[i++] = 't';
- nomefich[i++] = 'x';
- nomefich[i++] = 't';
- nomefich[i++] = '\0';
- if(doesFileExist(nomefich)){
- printf("olaaaa1");
- remove(nomefich);
- }
- sprintf(nomefich, "%d", codigo);
- i = strlen(nomefich);
- nomefich[i++] = 'a';
- nomefich[i++] = '.';
- nomefich[i++] = 't';
- nomefich[i++] = 'x';
- nomefich[i++] = 't';
- nomefich[i++] = '\0';
- if(doesFileExist(nomefich)){
- printf("olaaaa2");
- remove(nomefich);
- }
- }
- float hora_decimal(int horas, int minutos) {
- float res=0;
- res+=horas;
- res+=minutos/60;
- return res;
- }
- int verifica_data(Data date) {
- int daysinmonth[12]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- int legit = 0;
- // leap year checking, if ok add 29 days to february
- if(date.ano % 400 == 0 || (date.ano % 100 != 0 && date.ano % 4 == 0))
- daysinmonth[1]=29;
- // days in month checking
- if (date.mes<13) {
- if( date.dia <= daysinmonth[(date.mes)-1] )
- legit=1;
- }
- if (legit==0)
- printf("It is not a legitimate date!\n");
- return legit;
- }
- int interseta(float a, float b, float c, float d) { //procura interseçao dos intervalos {a,b] e [c,d]
- if(((c<=b) && (c>=a)) || ((d<=b) && (d>=a)) || ((c<a) && (d>b)) || ((a<c) && (b>d))) {
- return 1; //interseta
- }
- else {
- return 0;
- }
- }
- /*FICHEIROS*/
- void le_ficheiros(List *lista_alunos,List_d *lista_disciplinas,List_e *lista_exames) {
- FILE *disciplinas;
- FILE *alunos;
- FILE *disc;
- FILE *exames;
- List temp, node;
- List_s temp_s,node_s;
- List_e node_e,temp_e;
- List_d temp2 = *lista_disciplinas, node2;
- char c, nome[60],linha[60], data[5];
- char linha1[20] = "ertyuiop";
- int i = 0, n, j, x;
- strcpy(linha, "wertyuio");
- if((alunos = fopen("alunos_mem.txt", "r"))) {
- while(!feof(alunos) && strlen(linha)>1) {
- strcpy(linha, "");
- fscanf(alunos,"%[^;]",linha);
- fseek(alunos,+1,SEEK_CUR);
- if(strlen(linha)>1) {
- node = malloc(sizeof(Lista_dos_alunos));
- j = 0;
- i = 0;
- c = linha[i];
- while(c!=',') {
- nome[j]=c; //nome na realidade é numero
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- (node->dados).numero = atoi(nome);
- i++;
- j = 0;
- c = linha[i];
- while(c!=',') {
- (node->dados).nome[j] = c;
- i++;
- j++;
- c = linha[i];
- }
- (node->dados).nome[j] = '\0';
- i++;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node->dados).curso = atoi(nome);
- i+=2;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node->dados).ano = atoi(nome);
- i+=2;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node->dados).regime = atoi(nome);
- node->previous = NULL;
- node->next = NULL;
- if(*lista_alunos == NULL) {
- *lista_alunos = node;
- }
- else {
- temp = *lista_alunos;
- while(temp->next != NULL) {
- temp = temp->next;
- }
- temp->next = node;
- node->previous = temp;
- }
- }
- }
- fclose(alunos);
- }
- char nome_fich[20];
- if(doesFileExist("disciplinas_mem.txt")) {
- disciplinas = fopen("disciplinas_mem.txt","r");
- strcpy(linha, "entrarnowhile");
- while(!feof(disciplinas) && strlen(linha)>1) {
- strcpy(linha, "");
- fscanf(disciplinas,"%[^;]",linha);
- fseek(disciplinas,+1,SEEK_CUR);
- if(strlen(linha)>1) {
- node2 = malloc(sizeof(Lista_das_disciplinas));
- j = 0;
- i = 0;
- c = linha[i];
- while(c!=',') {
- nome[j]=c; //nome na realidade é codigo
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- (node2->dados).codigo = atoi(nome);
- i++;
- j = 0;
- c = linha[i];
- while(c!=',') {
- (node2->dados).nome[j] = c;
- i++;
- j++;
- c = linha[i];
- }
- (node2->dados).nome[j] = '\0';
- i++;
- j = 0;
- c = linha[i];
- while(c!=',') {
- (node2->dados).docente[j] = c;
- i++;
- j++;
- c = linha[i];
- }
- (node2->dados).docente[j] = '\0';
- i++;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node2->dados).curso = atoi(nome);
- i+=2;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node2->dados).ano = atoi(nome);
- i+=2;
- nome[0] = linha[i];
- nome[1] = '\0';
- (node2->dados).semestre = atoi(nome);
- node2->students = NULL;
- node2->previous = NULL;
- node2->next = NULL;
- if(*lista_disciplinas == NULL) {
- *lista_disciplinas = node2;
- }
- else {
- temp2 = *lista_disciplinas;
- while(temp2->next != NULL) {
- temp2 = temp2->next;
- }
- temp2->next = node2;
- node2->previous = temp2;
- }
- strcpy(nome_fich,(node2->dados).nome);
- i=strlen(nome_fich);
- nome_fich[i++]='.';
- nome_fich[i++]='t';
- nome_fich[i++]='x';
- nome_fich[i++]='t';
- nome_fich[i++]='\0';
- if(doesFileExist(nome_fich)) {
- disc = fopen(nome_fich,"r");
- while(!feof(disc) && strlen(linha1) > 1) {
- strcpy(linha1,"");
- fscanf(disc,"%[^;]*c",linha1);
- fseek(disc,+1,SEEK_CUR);
- if(strlen(linha1) > 1) {
- n = atoi(linha1);
- node = malloc(sizeof(Lista_dos_alunos));
- temp = *lista_alunos;
- while(temp->next != NULL) {
- if ((temp->dados).numero == n) {
- (node->dados).numero = (temp->dados).numero;
- for (i = 0; i<strlen((temp->dados).nome); i++) {
- (node->dados).nome[i] = (temp->dados).nome[i];
- }
- (node->dados).nome[i] = '\0';
- (node->dados).regime = (temp->dados).regime;
- (node->dados).curso = (temp->dados).curso;
- (node->dados).ano = (temp->dados).ano;
- node->next = NULL;
- node->previous = NULL;
- }
- temp = temp->next;
- }
- if ((temp->dados).numero == n) {
- (node->dados).numero = (temp->dados).numero;
- for (i = 0; i<strlen((temp->dados).nome); i++) {
- (node->dados).nome[i] = (temp->dados).nome[i];
- }
- (node->dados).nome[i] = '\0';
- (node->dados).regime = (temp->dados).regime;
- (node->dados).curso = (temp->dados).curso;
- (node->dados).ano = (temp->dados).ano;
- node->next = NULL;
- node->previous = NULL;
- }
- if(node == NULL) {
- printf("Aluno %d da disciplina %s nao encontrado na base de dados\n",n,(node2->dados).nome);
- }
- else {
- if(node2->students == NULL) {
- node2->students = node;
- }
- else {
- temp = node2->students;
- while(temp->next != NULL) {
- temp = temp->next;
- }
- temp->next = node;
- node->previous = temp;
- }
- }
- }
- }
- fclose(disc);
- }
- }
- }
- fclose(disciplinas);
- }
- strcpy(linha, "wertyuio");
- if((exames = fopen("lista_exames.txt", "r"))) {
- FILE *exame_atual;
- while(!feof(exames) && strlen(linha)>1) {
- strcpy(linha, "");
- fscanf(exames,"%[^.]",linha);
- fseek(exames,+1,SEEK_CUR);
- if(strlen(linha)>1) {
- node_e = malloc(sizeof(Lista_dos_exames));
- j = 0;
- i = 0;
- c = linha[i];
- while(c!=',') {
- nome[j]=c; //nome na realidade é numero
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- (node_e->dados).codigo = atoi(nome);
- i++;
- j=0;
- c = linha[i];
- while(c!=',') {
- nome[j]=c; //nome na realidade é numero
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- (node_e->dados).disciplina = atoi(nome);
- i++;
- c = linha[i];
- nome[0] = linha[i];
- nome[1] = '\0';
- (node_e->dados).tipo_exame = atoi(nome);
- i+=2;
- j=0;
- for(x=0; x<2; x++) {
- c = linha[i];
- i++;
- data[x] = c;
- }
- data[x]='\0';
- (node_e->dados).data.dia=atoi(data);
- i++;
- for(x=0; x<2; x++) {
- c = linha[i];
- i++;
- data[x] = c;
- }
- data[x]='\0';
- (node_e->dados).data.mes=atoi(data);
- i++;
- for(x=0; x<4; x++) {
- c = linha[i];
- i++;
- data[x] = c;
- }
- data[x]='\0';
- (node_e->dados).data.ano=atoi(data);
- j=0;
- i++;
- c = linha[i];
- nome[j]='\0';
- sprintf(nome_fich, "%d", node_e->dados.codigo);
- j = strlen(nome_fich);
- (node_e->dados).sala = NULL;
- nome_fich[j++] = 's';
- nome_fich[j++] = '.';
- nome_fich[j++] = 't';
- nome_fich[j++] = 'x';
- nome_fich[j++] = 't';
- nome_fich[j++] = '\0';
- if((exame_atual = fopen(nome_fich, "r"))) {
- linha1[0] = 'a';
- linha1[1] = 'b';
- while(!feof(exame_atual) && strlen(linha1) > 1) {
- strcpy(linha1,"");
- fscanf(exame_atual,"%[^,]",linha1);
- fseek(exame_atual,+1,SEEK_CUR);
- if(strlen(linha1) > 1) {
- n = atoi(linha1);
- node_s = malloc(sizeof(Sala));
- strcpy((node_s)->sala,linha1);
- node_s->next = NULL;
- if((node_e->dados).sala == NULL) {
- (node_e->dados).sala = node_s;
- }
- else {
- temp_s = (node_e->dados).sala;
- while(temp_s->next != NULL) {
- temp_s = temp_s->next;
- }
- temp_s->next = node_s;
- }
- }
- }
- fclose(exame_atual);
- }
- sprintf(nome_fich, "%d", node_e->dados.codigo);
- j = strlen(nome_fich);
- nome_fich[j++] = 'a';
- nome_fich[j++] = '.';
- nome_fich[j++] = 't';
- nome_fich[j++] = 'x';
- nome_fich[j++] = 't';
- nome_fich[j++] = '\0';
- if(doesFileExist(nome_fich)) {
- disc = fopen(nome_fich,"r");
- strcpy(linha1, "entranowhile");
- while(!feof(disc) && strlen(linha1) > 1) {
- strcpy(linha1,"");
- fscanf(disc,"%[^,]*c",linha1);
- fseek(disc,+1,SEEK_CUR);
- if(strlen(linha1) > 1) {
- n = atoi(linha1);
- node = malloc(sizeof(Lista_dos_alunos));
- temp = *lista_alunos;
- while(temp->next != NULL) {
- if ((temp->dados).numero == n) {
- (node->dados).numero = (temp->dados).numero;
- strcpy((node->dados).nome,(temp->dados).nome);
- (node->dados).regime = (temp->dados).regime;
- (node->dados).curso = (temp->dados).curso;
- (node->dados).ano = (temp->dados).ano;
- node->next = NULL;
- node->previous = NULL;
- }
- temp = temp->next;
- }
- if ((temp->dados).numero == n) {
- (node->dados).numero = (temp->dados).numero;
- strcpy((node->dados).nome,(temp->dados).nome);
- (node->dados).regime = (temp->dados).regime;
- (node->dados).curso = (temp->dados).curso;
- (node->dados).ano = (temp->dados).ano;
- node->next = NULL;
- node->previous = NULL;
- }
- if(node == NULL) {
- printf("Aluno %d do exame %d nao encontrado na base de dados\n",n,(node_e->dados).codigo);
- }
- else {
- if(node_e->students == NULL) {
- node_e->students = node;
- }
- else {
- temp = node_e->students;
- while(temp->next != NULL) {
- temp = temp->next;
- }
- temp->next = node;
- node->previous = temp;
- }
- }
- }
- }
- fclose(disc);
- }
- c=linha[i];
- j = 0;
- while(c!=',') {
- nome[j]=c;
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- strcpy((node_e->dados).hora_inicio,nome);
- j=0;
- i++;
- c=linha[i];
- while(c!='\0') {
- nome[j]=c;
- i++;
- j++;
- c = linha[i];
- }
- nome[j] = '\0';
- strcpy((node_e->dados).hora_fim,nome);
- node_e->previous = NULL;
- node_e->next = NULL;
- if(*lista_exames == NULL) {
- *lista_exames = node_e;
- }
- else {
- temp_e = *lista_exames;
- while(temp_e->next != NULL) {
- temp_e = temp_e->next;
- }
- temp_e->next = node_e;
- node_e->previous = temp_e;
- }
- }
- }
- fclose(exames);
- }
- }
- void atualiza_ficheiros_alunos(List lista_alunos) {
- FILE *alunos1;
- FILE *alunos2;
- alunos1 = fopen("alunos_mem.txt", "w");
- alunos2 = fopen("alunos_show.txt", "w");
- List temp=lista_alunos;
- while(temp->next != NULL) {
- fprintf(alunos1,"%d,",(temp->dados).numero);
- fprintf(alunos2, "Numero: %d, ", (temp->dados).numero);
- fprintf(alunos1,"%s,", (temp->dados).nome);
- fprintf(alunos2,"Nome: %s, ", (temp->dados).nome);
- fprintf(alunos1, "%d,", (temp->dados).curso);
- switch((temp->dados).curso) {
- case 1:
- fprintf(alunos2,"Curso: LEI, ");
- break;
- case 2:
- fprintf(alunos2,"Curso: LDM, ");
- break;
- }
- fprintf(alunos1, "%d,", (temp->dados).ano);
- fprintf(alunos2, "%dº ano, ", (temp->dados).ano);
- fprintf(alunos1, "%d;", (temp->dados).regime);
- switch((temp->dados).regime) {
- case 1:
- fprintf(alunos2,"Regime: Normal;\n");
- break;
- case 2:
- fprintf(alunos2,"Regime: Trabalhador-Estudante;\n");
- break;
- case 3:
- fprintf(alunos2,"Regime: Atleta;\n");
- break;
- case 4:
- fprintf(alunos2,"Regime: Dirigente Associativo;\n");
- break;
- case 5:
- fprintf(alunos2,"Regime: Aluno em Erasmus;\n");
- break;
- case 6:
- fprintf(alunos2,"Regime: Outro;\n");
- break;
- }
- temp = temp->next;
- }
- fprintf(alunos1,"%d,",(temp->dados).numero);
- fprintf(alunos2, "Nunmero: %d, ", (temp->dados).numero);
- fprintf(alunos1,"%s,", (temp->dados).nome);
- fprintf(alunos2,"Nome: %s, ", (temp->dados).nome);
- fprintf(alunos1, "%d,", (temp->dados).curso);
- switch((temp->dados).curso) {
- case 1:
- fprintf(alunos2,"Curso: LEI, ");
- break;
- case 2:
- fprintf(alunos2,"Curso: LDM, ");
- break;
- }
- fprintf(alunos1, "%d,", (temp->dados).ano);
- fprintf(alunos2, "%dº ano, ", (temp->dados).ano);
- fprintf(alunos1, "%d;", (temp->dados).regime);
- switch((temp->dados).regime) {
- case 1:
- fprintf(alunos2,"Regime: Normal;\n");
- break;
- case 2:
- fprintf(alunos2,"Regime: Trabalhador-Estudante;\n");
- break;
- case 3:
- fprintf(alunos2,"Regime: Atleta;\n");
- break;
- case 4:
- fprintf(alunos2,"Regime: Dirigente Associativo;\n");
- break;
- case 5:
- fprintf(alunos2,"Regime: Aluno em Erasmus;\n");
- break;
- case 6:
- fprintf(alunos2,"Regime: Outro;\n");
- break;
- }
- fclose(alunos1);
- fclose(alunos2);
- }
- void atualiza_ficheiros_disciplinas(List_d lista_disciplinas) {
- FILE *disciplinas1;
- FILE *disciplinas2;
- List_d temp = lista_disciplinas;
- disciplinas1 = fopen("disciplinas_mem.txt", "w");
- disciplinas2 = fopen("disciplinas_show.txt", "w");
- while(temp->next != NULL) {
- fprintf(disciplinas1,"%d,",(temp->dados).codigo);
- fprintf(disciplinas2, "Codigo: %d, ", (temp->dados).codigo);
- fprintf(disciplinas1,"%s,", (temp->dados).nome);
- fprintf(disciplinas2,"Nome: %s, ", (temp->dados).nome);
- fprintf(disciplinas1,"%s,", (temp->dados).docente);
- fprintf(disciplinas2,"%s, ", (temp->dados).docente);
- fprintf(disciplinas1, "%d,", (temp->dados).curso);
- switch((temp->dados).curso) {
- case 1:
- fprintf(disciplinas2,"Curso: LEI, ");
- break;
- case 2:
- fprintf(disciplinas2,"Curso: LDM, ");
- break;
- }
- fprintf(disciplinas1, "%d,", (temp->dados).ano);
- fprintf(disciplinas2, "%dº ano, ", (temp->dados).ano);
- fprintf(disciplinas1, "%d\n", (temp->dados).semestre);
- fprintf(disciplinas2,"%dº semestre;\n", (temp->dados).semestre);
- temp = temp->next;
- }
- fprintf(disciplinas1,"%d,",(temp->dados).codigo);
- fprintf(disciplinas2, "Codigo: %d, ", (temp->dados).codigo);
- fprintf(disciplinas1,"%s,", (temp->dados).nome);
- fprintf(disciplinas2,"Nome: %s, ", (temp->dados).nome);
- fprintf(disciplinas1,"%s,", (temp->dados).docente);
- fprintf(disciplinas2,"%s, ", (temp->dados).docente);
- fprintf(disciplinas1, "%d,", (temp->dados).curso);
- switch((temp->dados).curso) {
- case 1:
- fprintf(disciplinas2,"Curso: LEI, ");
- break;
- case 2:
- fprintf(disciplinas2,"Curso: LDM, ");
- break;
- }
- fprintf(disciplinas1, "%d,", (temp->dados).ano);
- fprintf(disciplinas2, "%dº ano, ", (temp->dados).ano);
- fprintf(disciplinas1, "%d\n", (temp->dados).semestre);
- fprintf(disciplinas2,"%dº semestre;\n", (temp->dados).semestre);
- fclose(disciplinas1);
- fclose(disciplinas2);
- }
- void atualiza_ficheiros_exames(List_e lista_exames) {
- FILE *exames, *salas;
- int i;
- List_e temp = lista_exames;
- char nome_fich[50];
- if(lista_exames != NULL) {
- exames = fopen("lista_exames.txt", "w");
- while(temp->next != NULL) {
- fprintf(exames,"%d,",(temp->dados).codigo);
- fprintf(exames,"%d,", (temp->dados).disciplina);
- fprintf(exames, "%d,", (temp->dados).tipo_exame);
- if(((temp->dados).data).dia<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d/", ((temp->dados).data).dia);
- if(((temp->dados).data).mes<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d/",((temp->dados).data).mes);
- if(((temp->dados).data).ano<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d,",((temp->dados).data).ano);
- fprintf(exames, "%s,", (temp->dados).hora_inicio);
- fprintf(exames, "%s.", (temp->dados).hora_fim);
- sprintf(nome_fich, "%d", (temp->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 's';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- salas = fopen(nome_fich, "w");
- if(temp->dados.sala != NULL){
- while(temp->dados.sala->next != NULL){
- fprintf(salas,"%s,",(temp->dados).sala->sala);
- (temp->dados).sala = (temp->dados).sala->next;
- }
- fprintf(salas,"%s,",(temp->dados).sala->sala);
- fclose(salas);
- }
- temp = temp->next;
- }
- fprintf(exames,"%d,",(temp->dados).codigo);
- fprintf(exames,"%d,", (temp->dados).disciplina);
- fprintf(exames, "%d,", (temp->dados).tipo_exame);
- if(((temp->dados).data).dia<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d/", ((temp->dados).data).dia);
- if(((temp->dados).data).mes<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d/",((temp->dados).data).mes);
- if(((temp->dados).data).ano<10){
- fprintf(exames, "0");
- }
- fprintf(exames,"%d,",((temp->dados).data).ano);
- fprintf(exames, "%s,", (temp->dados).hora_inicio);
- fprintf(exames, "%s.", (temp->dados).hora_fim);
- sprintf(nome_fich, "%d", (temp->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 's';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- salas = fopen(nome_fich, "w");
- if(temp->dados.sala != NULL){
- while(temp->dados.sala->next != NULL){
- fprintf(salas,"%s,",(temp->dados).sala->sala);
- (temp->dados).sala = (temp->dados).sala->next;
- }
- fprintf(salas,"%s,",(temp->dados).sala->sala);
- fclose(salas);
- }
- fclose(exames);
- }
- else {
- remove("lista_exames.txt");
- }
- }
- void apaga_exames_passados(List_e *lista_exames) {
- time_t t = time(NULL);
- struct tm tm = *localtime(&t);
- Data hoje;
- hoje.dia = tm.tm_mday;
- hoje.mes = tm.tm_mon + 1;
- hoje.ano = tm.tm_year + 1900;
- printf("Bem vindo! Hoje é dia %d/%d/%d", hoje.dia, hoje.mes, hoje.ano);
- List_e temp, x =NULL;
- if(*lista_exames != NULL) {
- temp = *lista_exames;
- while(temp->next != NULL) {
- if(compare_dates(temp->dados.data, hoje)==-1) {
- if(temp->previous == NULL) {
- *lista_exames = temp->next;
- free(temp);
- temp = *lista_exames;
- }
- else {
- temp->previous->next = temp->next;
- temp->next->previous = temp->previous;
- x = temp;
- temp = temp->next;
- free(x);
- }
- }
- else {
- temp = temp->next;
- }
- }
- if(compare_dates(temp->dados.data, hoje)==-1) {
- printf("olaaaa1\n");
- if(temp->previous == NULL) {
- printf("olaaaa2\n");
- *lista_exames = temp->next;
- free(temp);
- temp = *lista_exames;
- }
- else {
- (temp->previous)->next = temp->next;
- free(temp);
- }
- }
- }
- atualiza_ficheiros_exames(*lista_exames);
- }
- /*ALUNOS*/
- void criar_aluno(List **lista_alunos) {
- Aluno student;
- List temp, ant, node;
- char c[60],numero[60];
- int i, n, boolean=0;
- printf("Insira numero de aluno: ");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- n = atoi(numero);
- temp = **lista_alunos;
- if (temp != NULL) {
- do {
- boolean =0;
- while (temp->next != NULL) {
- if ((temp->dados).numero==n) {
- printf("Aluno ja existente\n");
- boolean = 1;
- }
- temp = temp->next;
- }
- if ((temp->dados).numero == n) {
- printf("Aluno ja existente\n");
- boolean = 1;
- }
- if(boolean == 0)
- student.numero = n;
- else {
- scanf("%d", &n);
- }
- } while(boolean == 1);
- }
- else {
- student.numero=n;
- }
- printf("Insira nome do aluno: ");
- gets(c);
- gets(c);
- for (i=0; i<strlen(c); i++) {
- student.nome[i] = c[i];
- }
- student.nome[i] = '\0';
- printf("Curso?\n");
- n = 0;
- while(n != 1 && n != 2) {
- printf("1.LEI\n2.LDM\n");
- scanf("%d", &n);
- if (n==1 || n ==2) {
- student.curso = n;
- }
- else {
- printf("Escolha um dos seguintes cursos\n");
- }
- }
- printf("Ano? ");
- n=0;
- while(n != 1 && n != 2 && n!= 3) {
- printf("\n1o ano\n2o Ano\n3o Ano\n");
- scanf("%d", &n);
- if (n==1 || n ==2 || n ==3) {
- student.ano = n;
- }
- else {
- printf("Escolha um dos seguintes anos\n");
- }
- }
- printf("Estatuto?\n");
- n = 0;
- while(n != 1 && n != 2 && n != 3 && n != 4 && n != 5 && n != 6) {
- printf("1.Normal\n2.Trabalhador-Estudante\n3.Atleta\n4.Dirigente Associativo\n5.Aluno em Erasmus\n6.Outro\n");
- scanf("%d", &n);
- if (n==1 || n ==2 || n == 3 || n == 4 || n == 5 || n == 6) {
- student.regime = n;
- }
- else {
- printf("Escolha um dos seguintes Estatutos\n");
- }
- }
- node = malloc(sizeof(Lista_dos_alunos));
- node->dados = student;
- node->previous = NULL;
- node->next = NULL;
- if(**lista_alunos == NULL) {
- **lista_alunos = node;
- }
- else {
- temp = **lista_alunos;
- while(temp->next != NULL) {
- ant = temp;
- temp = temp->next;
- }
- temp->next = node;
- node->previous = ant;
- }
- atualiza_ficheiros_alunos(**lista_alunos);
- }
- void print_dados(List dados) {
- List temp;
- temp = dados;
- if(temp == NULL) {
- printf("----Nenhum aluno encontrado na base de dados---\n");
- }
- else {
- while(temp->next!=NULL) {
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- switch((temp->dados).curso) {
- case 1:
- printf("LEI,");
- break;
- case 2:
- printf("LDM,");
- break;
- }
- printf("%dº ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal\n");
- break;
- case 2:
- printf("Trabalhador-Estudante\n");
- break;
- case 3:
- printf("Atleta\n");
- break;
- case 4:
- printf("Dirigente Associativo\n");
- break;
- case 5:
- printf("Aluno em Erasmus\n");
- break;
- case 6:
- printf("Outro\n");
- break;
- }
- temp = temp->next;
- }
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- switch((temp->dados).curso) {
- case 1:
- printf("LEI, ");
- break;
- case 2:
- printf("LDM, ");
- break;
- }
- printf("%dº ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal\n");
- break;
- case 2:
- printf("Trabalhador-Estudante\n");
- break;
- case 3:
- printf("Atleta\n");
- break;
- case 4:
- printf("Dirigente Associativo\n");
- break;
- case 5:
- printf("Aluno em Erasmus\n");
- break;
- case 6:
- printf("Outro\n");
- break;
- }
- }
- }
- void print_LDM(List dados) {
- List temp;
- temp = dados;
- if(temp == NULL) {
- printf("nenhum aluno de LDM encontrado na base de dados\n");
- }
- else {
- while(temp->next!=NULL) {
- if ((temp->dados).curso == 2) {
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- printf("%d ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal");
- break;
- case 2:
- printf("Trabalhador-Estudante");
- break;
- case 3:
- printf("Atleta");
- break;
- case 4:
- printf("Dirigente Associativo");
- break;
- case 5:
- printf("Aluno em Erasmus");
- break;
- case 6:
- printf("Outro");
- break;
- }
- }
- temp = temp->next;
- }
- if ((temp->dados).curso == 2) {
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- printf("%d ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal");
- break;
- case 2:
- printf("Trabalhador-Estudante");
- break;
- case 3:
- printf("Atleta");
- break;
- case 4:
- printf("Dirigente Associativo");
- break;
- case 5:
- printf("Aluno em Erasmus");
- break;
- case 6:
- printf("Outro");
- break;
- }
- }
- }
- }
- void print_LEI(List dados) {
- List temp;
- temp = dados;
- if(temp == NULL) {
- printf("nenhum aluno de LEI encontrado na base de dados\n");
- }
- else {
- while(temp->next!=NULL) {
- if ((temp->dados).curso == 1) {
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- printf("%d ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal\n");
- break;
- case 2:
- printf("Trabalhador-Estudante");
- break;
- case 3:
- printf("Atleta");
- break;
- case 4:
- printf("Dirigente Associativo");
- break;
- case 5:
- printf("Aluno em Erasmus");
- break;
- case 6:
- printf("Outro");
- break;
- }
- }
- temp = temp->next;
- }
- if ((temp->dados).curso == 1) {
- printf(" ");
- printf("%d,", (temp->dados).numero);
- printf("%s,", (temp->dados).nome);
- printf("%d ano, ", (temp->dados).ano);
- switch((temp->dados).regime) {
- case 1:
- printf("Normal\n");
- break;
- case 2:
- printf("Trabalhador-Estudante");
- break;
- case 3:
- printf("Atleta");
- break;
- case 4:
- printf("Dirigente Associativo");
- break;
- case 5:
- printf("Aluno em Erasmus");
- break;
- case 6:
- printf("Outro");
- break;
- }
- }
- }
- }
- void editar_alunos(List **lista_alunos) {
- int num, i;
- List temp = NULL;
- List t = NULL;
- temp = **lista_alunos;
- char numero[30];
- while(t==NULL) {
- if (temp != NULL) {
- printf("Introduza o numero do estudante que pretende modificar: ");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- num = atoi(numero);
- while (temp->next != NULL) {
- if ((temp->dados).numero == num) {
- t = temp;
- }
- temp = temp->next;
- }
- if ((temp->dados).numero == num) {
- t = temp;
- }
- }
- if (t == NULL) {
- printf("Aluno nao encontrado na base de dados\n");
- }
- }
- char str[50];
- printf("%d\n", (t->dados).numero);
- printf("Novo numero (enter para nao alterar): ");
- gets(str);
- if (str[0] != '\0') {
- (t->dados).numero = 0;
- for (i = 0; i < strlen(str); i++) {
- (t->dados).numero += pot10((str[i] - '0'), (strlen(str) - i - 1));
- }
- printf("Novo numero: %d\n", (t->dados).numero);
- }
- else {
- printf("Numero %d nao alterado.\n", (t->dados).numero);
- }
- printf("%s\n", (t->dados).nome);
- printf("Novo nome (enter para nao alterar): ");
- gets(str);
- if (str[0] != '\0') {
- for (i = 0; i < strlen(str); i++) {
- (t->dados).nome[i] = str[i];
- }
- (t->dados).nome[i] = '\0';
- printf("Novo nome: %s\n", (t->dados).nome);
- } else {
- printf("Nome %s nao alterado.\n", (t->dados).nome);
- }
- char str_2;
- printf("Curso: ");
- switch ((t->dados).curso) {
- case 1:
- printf("LEI\n");
- break;
- case 2:
- printf("LDM\n");
- break;
- }
- while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
- printf("Insira o novo curso (enter para nao alterar): \n1:LEI\n2:LDM\n");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
- printf("Introduza 1 ou 2: ");
- }
- }
- if (str_2 != '\n') {
- (t->dados).curso = str_2 - '0';
- printf("Novo curso: ");
- switch ((t->dados).curso) {
- case 1:
- printf("LEI\n");
- break;
- case 2:
- printf("LDM\n");
- break;
- }
- }
- else {
- printf("Curso nao alterado.\n");
- }
- printf("%dº ano\n", (t->dados).ano);
- str_2='0';
- getchar();
- while (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- printf("Insira o novo ano (enter para nao alterar): ");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- printf("Ano invalido.\n");
- }
- }
- if (str_2 != '\n') {
- (t->dados).ano = str_2 - '0';
- printf("Novo ano: %dº ano\n", (t->dados).ano);
- }
- else {
- printf("Ano nao alterado.\n");
- }
- str_2 = '0';
- printf("Regime: ");
- getchar();
- switch ((t->dados).regime) {
- case 1:
- printf("Normal\n");
- break;
- case 2:
- printf("Trabalhador-Estudante");
- break;
- case 3:
- printf("Atleta");
- break;
- case 4:
- printf("Dirigente Associativo");
- break;
- case 5:
- printf("Aluno em Erasmus");
- break;
- case 6:
- printf("Outro");
- break;
- }
- while(str_2 !='1' && str_2 !='2' && str_2 !='3' && str_2 !='4' && str_2 !='5' && str_2 !='6' && str_2 != '\n') {
- printf("Introduza o novo regime (1.Normal,2.Trabalhador-Estudante,3.Atleta,4.Dirigente Associativo,5.Aluno em Erasmus,6.Outro) (enter para nao alterar): ");
- str_2=getchar();
- if(str_2 !='1' && str_2 !='2' && str_2 !='3' && str_2 !='4' && str_2 !='5' && str_2 !='6' && str_2 != '\n') {
- printf("Regime invalido.\n");
- }
- }
- if(str_2 !='\n') {
- (t->dados).regime=str_2 -'0';
- }
- else {
- printf("Regime nao alterado.\n");
- }
- atualiza_ficheiros_alunos(**lista_alunos);
- }
- void apaga_alunos(List **lista_alunos) {
- int num;
- printf("Desejar apagar que aluno? (introduzir nº de estudante)\n");
- scanf("%d",&num);
- List temp=NULL, t=NULL;
- List t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
- //printar a lista para ver os alunos
- temp = **lista_alunos;
- while(temp->next != NULL) {
- if((temp->dados).numero == num) {
- t = temp;
- }
- temp = temp->next;
- }
- if((temp->dados).numero == num) {
- t = temp;
- }
- if (t == NULL) {
- printf("aluno nao encontrado\n");
- apaga_alunos(lista_alunos);
- }
- else {
- if (t->previous == NULL) {
- **lista_alunos = t -> next;
- }
- else {
- t1 = t->previous;
- t1->next = t->next;
- }
- free(t);
- }
- atualiza_ficheiros_alunos(**lista_alunos);
- printf("\nAluno %d apagado.",num);
- }
- /*DISCIPLINAS*/
- void print_disciplinas(List_d dados) {
- List_d temp;
- temp = dados;
- if(temp == NULL) {
- printf("nenhuma disciplina encontrada na base de dados\n");
- }
- else {
- while(temp->next!=NULL) {
- printf(" ");
- printf("%d,", (temp->dados).codigo);
- printf("%s,", (temp->dados).nome);
- printf("docente: %s,",(temp->dados).docente);
- printf("curso: ");
- switch ((temp->dados).curso) {
- case 1:
- printf("LEI, ");
- break;
- case 2:
- printf("LDM, ");
- break;
- }
- printf("%dº ano, ", (temp->dados).ano);
- printf("%dº semestre \n", (temp->dados).semestre);
- printf("Alunos inscritos: \n");
- print_dados(temp->students);
- printf("---------------------------------");
- printf("\n");
- temp = temp->next;
- }
- printf(" ");
- printf("%d,", (temp->dados).codigo);
- printf("%s,", (temp->dados).nome);
- printf("docente: %s,",(temp->dados).docente);
- printf("curso: ");
- switch ((temp->dados).curso) {
- case 1:
- printf("LEI, ");
- break;
- case 2:
- printf("LDM, ");
- break;
- }
- printf("%dº ano, ", (temp->dados).ano);
- printf("%dº semestre \n", (temp->dados).semestre);
- printf("Alunos inscritos: \n");
- print_dados(temp->students);
- printf("---------------------------------");
- printf("\n");
- }
- }
- void criar_disciplinas(List_d **lista_disciplinas) {
- Disciplina subject;
- List_d temp, ant, node;
- char c[60],numero[30];
- int n,boolean=0;
- printf("Insira o código da disciplina:\n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- n = atoi(numero);
- temp = **lista_disciplinas;
- if (temp != NULL) {
- do {
- boolean =0;
- while (temp->next != NULL) {
- if ((temp->dados).codigo==n) {
- printf("Disciplina ja existente\n");
- boolean = 1;
- }
- temp = temp->next;
- }
- if ((temp->dados).codigo == n) {
- printf("Disciplina ja existente\n");
- boolean = 1;
- }
- if(boolean == 0)
- subject.codigo = n;
- else {
- scanf("%d", &n);
- }
- } while(boolean == 1);
- }
- else {
- subject.codigo=n;
- }
- printf("Insira nome da disciplina: ");
- gets(c);
- gets(c);
- strcpy(subject.nome,c);
- printf("Insira o nome do docente da disciplina: ");
- gets(c);
- strcpy(subject.docente,c);
- printf("Disciplina de que curso?\n");
- n = 0;
- while(n != 1 && n != 2) {
- printf("1.LEI\n2.LDM\n");
- scanf("%d", &n);
- if (n==1 || n ==2) {
- subject.curso=n;
- }
- else {
- printf("Escolha um dos seguintes cursos.\n");
- }
- }
- printf("Disciplina de que ano?\n");
- n=0;
- while(n != 1 && n != 2 && n!= 3) {
- printf("1o ano\n2o Ano\n3o Ano\n");
- scanf("%d", &n);
- if (n==1 || n ==2 || n ==3) {
- subject.ano = n;
- }
- else {
- printf("Escolha um dos seguintes anos\n");
- }
- }
- printf("Semestre?\n");
- scanf("%d" ,&n);
- while(n != 1 && n != 2) {
- printf("Escolha um dos seguintes cursos.\n");
- printf("1o semestre\n2o semestre\n");
- scanf("%d", &n);
- }
- subject.semestre=n;
- node = malloc(sizeof(Lista_das_disciplinas));
- node->dados = subject;
- node->students = NULL;
- node->previous = NULL;
- node->next = NULL;
- if(**lista_disciplinas == NULL) {
- **lista_disciplinas = node;
- }
- else {
- temp = **lista_disciplinas;
- while(temp->next != NULL) {
- ant = temp;
- temp = temp->next;
- }
- temp->next = node;
- node->previous = ant;
- }
- atualiza_ficheiros_disciplinas(**lista_disciplinas);
- }
- void edita_disciplinas(List_d **lista_disciplinas) {
- int num, x;
- char numero[20];
- List_d temp,t = NULL;
- temp = **lista_disciplinas;
- while(t== NULL) {
- printf("DISCIPLINAS:\n\n");
- print_disciplinas(**lista_disciplinas);
- printf("Introduza o código da disciplina que pretende modificar que pretende modificar: \n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("introduza um numero\n");
- gets(numero);
- }
- num = atoi(numero);
- if (temp != NULL) {
- while(temp->next != NULL) {
- if((temp->dados).codigo == num) {
- t = temp;
- }
- temp = temp->next;
- }
- if((temp->dados).codigo == num) {
- t = temp;
- }
- }
- if(t == NULL) {
- printf("Disciplina nao encontrado na base de dados\n");
- }
- }
- char str[50];
- printf("%s\n",(t->dados).nome);
- printf("Novo nome: (enter para nao alterar)");
- getchar();
- gets(str);
- if(str[0]!='\0') {
- strcpy((t->dados).nome,str);
- printf("Novo nome: %s\n",(t->dados).nome);
- }
- else {
- printf("Nome %s nao alterado \n",(t->dados).nome);
- }
- char str_2;
- printf("CURSO: ");
- switch ((t->dados).curso) {
- case 1:
- printf("LEI\n");
- break;
- case 2:
- printf("LDM\n");
- break;
- }
- x = 0;
- while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
- printf("Insira o novo curso:(enter para nao alterar)\n1:LEI\n2:LDM\n");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
- printf("introduza 1 ou 2\n");
- }
- }
- if (str_2 != '\n') {
- (t->dados).curso = str_2 - '0';
- printf("novo curso: ");
- switch ((t->dados).curso) {
- case 1:
- printf("LEI\n");
- break;
- case 2:
- printf("LDM\n");
- break;
- }
- }
- else {
- printf("Curso nao alterado\n");
- x = 1;
- }
- printf("%d ano\n", (t->dados).ano);
- str_2='0';
- while (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- if(x == 1)
- getchar();
- printf("Insira o novo ano:(enter para nao alterar)\n");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- printf("Ano invalido\n");
- }
- }
- x = 0;
- if (str_2 != '\n') {
- (t->dados).ano = str_2 - '0';
- printf("Novo ano: %d ano\n", (t->dados).ano);
- }
- else {
- x =1;
- printf("Ano nao alterado\n");
- }
- printf("%d semestre\n",(t->dados).semestre);
- str_2 = '0';
- while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
- if(x ==1)
- getchar();
- printf("Insira o novo semestre:(enter para nao alterar)\n");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- printf("Semestre invalido\n");
- }
- }
- if (str_2 != '\n') {
- (t->dados).semestre = str_2 - '0';
- printf("Novo Semestre: %do semestre\n", (t->dados).semestre);
- }
- else {
- printf("Semestre nao alterado\n");
- }
- printf("%s\n",(t->dados).docente);
- printf("Novo nome: (enter para nao alterar)");
- getchar();
- gets(str);
- if(str[0]!='\0') {
- strcpy((t->dados).docente,str);
- printf("Novo nome: %s\n",(t->dados).docente);
- }
- else {
- printf("Nome %s nao alterado \n",(t->dados).docente);
- }
- atualiza_ficheiros_disciplinas(**lista_disciplinas);
- }
- void elimina_disciplinas(List_d **lista_disciplinas) {
- int num;
- printf("Desejar apagar que disciplina? (introduzir código)\n");
- scanf("%d",&num);
- List_d temp=NULL, t=NULL;
- List_d t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
- //printar a lista para ver os alunos
- temp = **lista_disciplinas;
- while(temp->next != NULL) {
- if((temp->dados).codigo == num) {
- t = temp;
- }
- temp = temp->next;
- }
- if((temp->dados).codigo == num) {
- t = temp;
- }
- if (t == NULL) {
- printf("disciplina nao encontrada\n");
- elimina_disciplinas(lista_disciplinas);
- }
- else {
- if (t->previous == NULL) {
- **lista_disciplinas = t -> next;
- }
- else {
- t1 = t->previous;
- t1->next = t->next;
- }
- free(t);
- }
- atualiza_ficheiros_disciplinas(**lista_disciplinas);
- printf("\nDisciplina %d apagada.",num);
- }
- void inscrever_alunos_disciplinas(List lista_alunos, List_d **lista_disciplinas) {
- FILE *fich;
- char nome_fich[100];
- int opcao, i, n;
- List temp = NULL, escolhido, node;
- List_d temp2 = NULL, escolhida;
- if(lista_alunos == NULL || lista_disciplinas == NULL) {
- if(lista_alunos == NULL) {
- printf("nenhum aluno encontrado na base de dados");
- }
- if(lista_disciplinas == NULL) {
- printf("nenhuma disciplina encontrada na base de dados");
- }
- }
- else {
- printf("Escolha uma das opçoes:\n");
- printf("1: Inscrever aluno em várias disciplinas;\n");
- printf("2: Inscrever vários alunos numa disciplina\n");
- scanf("%d", &opcao);
- if(opcao ==1) {
- escolhido = NULL;
- while(escolhido == NULL) {
- printf("Introduza o numero do aluno que pretende inscrever:\n");
- scanf("%d", &n);
- temp = lista_alunos;
- while(temp->next != NULL) {
- if((temp->dados).numero == n) {
- escolhido = temp;
- }
- temp = temp->next;
- }
- if((temp->dados).numero == n) {
- escolhido = temp;
- }
- if(escolhido == NULL) {
- printf("aluno não encontrado");
- }
- }
- printf("Introduza os codigos das disciplinas a que pretende inscrever o aluno %s (0 para terminar):\n", (escolhido->dados).nome);
- n = 1;
- while(n!=0) {
- scanf("%d", &n);
- if(n!=0) {
- escolhida = NULL;
- while(escolhida == NULL) {
- temp2 = **lista_disciplinas;
- while(temp2->next != NULL) {
- if((temp2->dados).codigo == n) {
- escolhida = temp2;
- }
- temp2 = temp2->next;
- }
- if((temp2->dados).codigo == n) {
- escolhida = temp2;
- }
- if(escolhida == NULL) {
- printf ( "disciplina nao encontrada!");
- }
- }
- for (i = 0; i<strlen((escolhida->dados).nome); i++) {
- nome_fich[i] = (escolhida->dados).nome[i];
- }
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- fich = fopen(nome_fich, "a");
- fprintf(fich, "%d;", (escolhido->dados).numero);
- node = malloc(sizeof(Lista_dos_alunos));
- (node->dados).numero = (escolhido->dados).numero;
- for(i=0; i<strlen((escolhido->dados).nome); i++) {
- (node->dados).nome[i] = (escolhido->dados).nome[i];
- }
- (node->dados).curso = (escolhido->dados).curso;
- (node->dados).ano = (escolhido->dados).ano;
- (node->dados).regime = (escolhido->dados).regime;
- temp = (escolhida->students);
- node->next = NULL;
- if (escolhida->students == NULL) {
- escolhida->students = node;
- node->previous = NULL;
- }
- else {
- temp = (escolhida->students);
- while(temp->next != NULL) {
- temp = temp->next;
- }
- node->previous = temp;
- temp->next = node;
- }
- fclose(fich);
- }
- }
- }
- else if(opcao==2) {
- escolhida = NULL;
- while(escolhida ==NULL) {
- printf("Introduza o codigo da disciplina em que pretende inscrever os alunos\n");
- scanf("%d", &n);
- temp2 = **lista_disciplinas;
- while (temp2->next != NULL) {
- if ((temp2->dados).codigo == n) {
- escolhida = temp2;
- }
- temp2 = temp2->next;
- }
- if ((temp2->dados).codigo == n) {
- escolhida = temp2;
- }
- if(escolhida == NULL) {
- printf("disciplina nao encontrada");
- }
- }
- strcpy(nome_fich, (escolhida->dados).nome);
- i = strlen(escolhida->dados.nome);
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i++] = '\0';
- fich = fopen(nome_fich, "a");
- printf("Introduza os numeros dos estudantes que prende inscrever na disciplina %s (0 para terminar):\n", (escolhida->dados).nome);
- n=1;
- while (n != 0) {
- scanf("%d", &n);
- if (n!=0) {
- escolhido=NULL;
- temp = lista_alunos;
- while(temp->next != NULL) {
- if(n == (temp->dados).numero) {
- escolhido = temp;
- }
- temp = temp->next;
- }
- if(n == (temp->dados).numero) {
- escolhido = temp;
- }
- if(escolhido == NULL) {
- printf("aluno nao encontrado!");
- n =0;
- }
- else {
- fprintf(fich, "%d;", (escolhido->dados).numero);
- node = malloc(sizeof(Lista_dos_alunos));
- (node->dados).numero = (escolhido->dados).numero;
- strcpy((node->dados).nome, (escolhido->dados).nome);
- (node->dados).curso = (escolhido->dados).curso;
- (node->dados).ano = (escolhido->dados).ano;
- (node->dados).regime = (escolhido->dados).regime;
- node->next = NULL;
- node->previous = NULL;
- if (escolhida->students == NULL) {
- escolhida->students = node;
- }
- else {
- temp = (escolhida->students);
- while(temp->next != NULL) {
- temp = temp->next;
- }
- node->previous = temp;
- temp->next = node;
- }
- }
- }
- }
- fclose(fich);
- }
- }
- }
- /*EXAMES*/
- void print_exames(List_e dados) {
- List_e temp;
- temp = dados;
- List_s temp_s;
- if(temp == NULL) {
- printf("nenhum exame encontrado na base de dados\n");
- }
- else {
- while(temp->next != NULL) {
- printf("-->");
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial,");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- printf("alunos inscritos:\n");
- print_dados(temp->students);
- temp = temp->next;
- }
- printf("-->");
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial,");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- printf("alunos inscritos:\n");
- print_dados(temp->students);
- }
- }
- int verifica_sala(List_e lista_exames, List_e node, char c[], List_e *sobreposto) {
- List_s temp_sala = NULL;
- List_e temp = lista_exames;
- int verifica = 0, hora_i_t, minuto_i_t, hora_f_t, minuto_f_t, hora_i, minuto_i, hora_f, minuto_f;
- sscanf((node->dados).hora_inicio, "%d[^:]", &hora_i);
- sscanf((node->dados).hora_inicio, "%d", &minuto_i);
- sscanf((node->dados).hora_fim, "%d[^:]", &hora_f);
- sscanf((node->dados).hora_fim, "%d", &minuto_f);
- verifica = 0;
- while (temp->next != NULL) {
- temp_sala = (temp->dados).sala;
- while (temp_sala->next != NULL) {
- if (strcmp(temp_sala->sala, c) == 0) {
- if ((((temp->dados).data).ano == ((node->dados).data).ano) && (((temp->dados).data).mes == ((node->dados).data).mes) && (((temp->dados).data).dia == ((node->dados).data).dia)) {
- sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
- sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
- sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
- sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
- if (interseta(hora_decimal(hora_i, minuto_i), hora_decimal(hora_f, minuto_f),hora_decimal(hora_i_t, minuto_i_t), hora_decimal(hora_f_t, minuto_f_t))) {
- verifica = 1;
- *sobreposto = temp;
- }
- }
- }
- temp_sala = temp_sala->next;
- }
- if (strcmp(temp_sala->sala, c) == 0) {
- if ((((temp->dados).data).ano == ((node->dados).data).ano) && (((temp->dados).data).mes == ((node->dados).data).mes) && (((temp->dados).data).dia == ((node->dados).data).dia)) {
- sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
- sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
- sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
- sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
- if (interseta(hora_decimal(hora_i, minuto_i), hora_decimal(hora_f, minuto_f),hora_decimal(hora_i_t, minuto_i_t), hora_decimal(hora_f_t, minuto_f_t))) {
- verifica = 1;
- *sobreposto = temp;
- }
- }
- }
- temp = temp->next;
- }
- temp_sala = (temp->dados).sala;
- while (temp_sala->next != NULL) {
- if (strcmp(temp_sala->sala, c) == 0) {
- if ((((temp->dados).data).ano == ((node->dados).data).ano) && (((temp->dados).data).mes == ((node->dados).data).mes) && (((temp->dados).data).dia == ((node->dados).data).dia)) {
- sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
- sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
- sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
- sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
- if (interseta(hora_decimal(hora_i, minuto_i), hora_decimal(hora_f, minuto_f),hora_decimal(hora_i_t, minuto_i_t), hora_decimal(hora_f_t, minuto_f_t))) {
- verifica = 1;
- *sobreposto = temp;
- }
- }
- }
- temp_sala = temp_sala->next;
- }
- if (strcmp(temp_sala->sala, c) == 0) {
- if ((((temp->dados).data).ano == ((node->dados).data).ano) && (((temp->dados).data).mes == ((node->dados).data).mes) && (((temp->dados).data).dia == ((node->dados).data).dia)) {
- sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
- sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
- sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
- sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
- if (interseta(hora_decimal(hora_i, minuto_i), hora_decimal(hora_f, minuto_f),hora_decimal(hora_i_t, minuto_i_t), hora_decimal(hora_f_t, minuto_f_t))) {
- verifica = 1;
- *sobreposto = temp;
- }
- }
- }
- return verifica;
- }
- void inscrever_alunos_exames(List_e **lista_exames, List lista_alunos) {
- FILE *exame, *exame_a;
- char nome_fich[60], c[10];
- int i,n,num, verifica=0, verifica_aluno;
- List_e temp_exames, exame_escolhido = NULL, sobreposta;
- List node_alunos, temp_alunos, aluno_escolhido = NULL;
- List_s temp_sala, node_sala;
- temp_alunos = lista_alunos;
- temp_exames = **lista_exames;
- if(temp_alunos == NULL) {
- printf("Nenhum aluno encontrado na base de dados");
- }
- else if(temp_exames == NULL) {
- printf("Nenhum exame encontrado na base de dados");
- }
- //(aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3)
- // (exame_escolhido->dados).tipo_exame != 3)
- else {
- print_dados(lista_alunos);
- printf("Qual o aluno que deseja inscrever? (insira o número de aluno)\n");
- scanf("%d", &n);
- while(temp_alunos->next != NULL) {
- if(temp_alunos->dados.numero == n) {
- aluno_escolhido = temp_alunos;
- }
- temp_alunos = temp_alunos->next;
- }
- if(temp_alunos->dados.numero == n) {
- aluno_escolhido = temp_alunos;
- }
- if(aluno_escolhido == NULL) {
- printf("aluno nao encontrado na base de dados");
- }
- else {
- print_exames(**lista_exames);
- printf("Em que exame deseja inscrever o aluno %s?(insira o codigo)", (aluno_escolhido->dados).nome);
- scanf("%d", &n);
- while(temp_exames->next !=NULL) {
- if(temp_exames->dados.codigo == n) {
- if((temp_exames->dados).tipo_exame == 3) {
- if((aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3) {
- verifica=1;
- printf("nao pode inscrever aluno sem estatuto em epoca especial\n");
- }
- }
- else {
- exame_escolhido = temp_exames;
- }
- }
- temp_exames = temp_exames->next;
- }
- if(temp_exames->dados.codigo == n) {
- if((temp_exames->dados).tipo_exame == 3) {
- if((aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3) {
- verifica=1;
- printf("nao pode inscrever aluno sem estatuto em epoca especial\n\n");
- }
- }
- else {
- exame_escolhido = temp_exames;
- }
- }
- if(exame_escolhido == NULL && verifica ==0) {
- printf("exame nao encontrado na base de dados");
- }
- else if(verifica==1) {
- printf(" ");
- }
- else {
- node_alunos = malloc(sizeof(Lista_dos_alunos));
- node_alunos->dados.numero = aluno_escolhido->dados.numero;
- strcpy(node_alunos->dados.nome, aluno_escolhido->dados.nome);
- node_alunos->dados.ano = aluno_escolhido->dados.ano;
- node_alunos->dados.curso = aluno_escolhido->dados.curso;
- node_alunos->dados.regime = aluno_escolhido->dados.regime;
- node_alunos->next = NULL;
- node_alunos->previous = NULL;
- if(exame_escolhido->students == NULL) {
- exame_escolhido->students = node_alunos;
- }
- else {
- num = 0;
- temp_alunos = exame_escolhido->students;
- verifica_aluno = 0;
- if(temp_alunos == NULL) {
- temp_alunos->next = node_alunos;
- node_alunos->previous = temp_alunos;
- }
- else {
- while(temp_alunos->next != NULL) {
- if(temp_alunos->dados.numero == aluno_escolhido->dados.numero) {
- printf("aluno ja inscrito");
- verifica_aluno = 1;
- }
- num++;
- temp_alunos = temp_alunos->next;
- }
- if(temp_alunos->dados.numero == aluno_escolhido->dados.numero) {
- printf("aluno ja inscrito");
- verifica_aluno = 1;
- }
- num++;
- if(verifica_aluno == 0) {
- while(temp_alunos->next != NULL) {
- temp_alunos = temp_alunos->next;
- }
- temp_alunos->next = node_alunos;
- node_alunos->previous = temp_alunos;
- }
- }
- }
- sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 'a';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- exame_a = fopen(nome_fich, "w");
- temp_alunos = exame_escolhido->students;
- while(temp_alunos->next != NULL) {
- fprintf(exame_a, "%d,", temp_alunos->dados.numero);
- temp_alunos = temp_alunos->next;
- }
- fprintf(exame_a, "%d,", temp_alunos->dados.numero);
- fclose(exame_a);
- if((num)%5 == 0 && verifica_aluno == 0) {
- printf("terá de escolher uma nova sala");
- getchar();
- gets(c);
- verifica = verifica_sala(**lista_exames, exame_escolhido, c, &sobreposta);
- while(verifica == 1) {
- printf("SALA SOBREPOSTA COM O EXAME %d!\nterá de escolher uma nova sala", sobreposta->dados.codigo);
- gets(c);
- verifica = verifica_sala(**lista_exames, exame_escolhido, c, &sobreposta);
- }
- node_sala = malloc(sizeof(Sala));
- strcpy(node_sala->sala, c);
- node_sala->next = NULL;
- temp_sala = exame_escolhido->dados.sala;
- while(temp_sala->next!= NULL) {
- temp_sala = temp_sala->next;
- }
- temp_sala->next = node_sala;
- sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 's';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- exame = fopen(nome_fich, "w");
- temp_sala = exame_escolhido->dados.sala;
- while(temp_sala->next != NULL) {
- fprintf(exame, "%s,", temp_sala->sala);
- temp_sala = temp_sala->next;
- }
- fprintf(exame, "%s,", temp_sala->sala);
- fclose(exame);
- }
- }
- }
- }
- }
- void desinscrever_alunos_exames(List_e **lista_exames) {
- FILE *exame_a;
- char nome_fich[60];
- char opcao[20];
- int n, i;
- List_e temp_exames, exame_escolhido=NULL;
- List temp_alunos, aluno_escolhido=NULL;
- if(lista_exames == NULL) {
- printf("Nenhum exame encontrado na base de dados");
- }
- else {
- print_exames(**lista_exames);
- printf("introduza o código do exame: ");
- gets(opcao);
- while(!verifica_se_numero(opcao, strlen(opcao))) {
- printf("Introduza um número!\n");
- gets(opcao);
- }
- n = atoi(opcao);
- temp_exames = **lista_exames;
- while(temp_exames->next !=NULL) {
- if(temp_exames->dados.codigo == n) {
- exame_escolhido = temp_exames;
- }
- temp_exames = temp_exames->next;
- }
- if(temp_exames->dados.codigo == n) {
- exame_escolhido = temp_exames;
- }
- if(exame_escolhido == NULL) {
- printf("exame nao encontrado na base de dados");
- }
- else {
- if(exame_escolhido->students == NULL) {
- printf("Nenhum aluno inscrito!\n");
- }
- else {
- printf("Alunos inscritos:\n");
- print_dados(exame_escolhido->students);
- printf("Insira o número do aluno que pretende eliminar:\n");
- gets(opcao);
- while(!verifica_se_numero(opcao, strlen(opcao))) {
- printf("Introduza um número!\n");
- gets(opcao);
- }
- n = atoi(opcao);
- temp_alunos = exame_escolhido->students;
- while(temp_alunos->next!= NULL) {
- if(temp_alunos->dados.numero == n) {
- aluno_escolhido = temp_alunos;
- }
- temp_alunos = temp_alunos->next;
- }
- if(temp_alunos->dados.numero == n) {
- aluno_escolhido = temp_alunos;
- }
- if(aluno_escolhido == NULL) {
- }
- else if(aluno_escolhido->next != NULL) {
- aluno_escolhido->previous->next = aluno_escolhido->next;
- }
- else {
- exame_escolhido->students = aluno_escolhido->next;
- }
- free(aluno_escolhido);
- sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 'a';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- exame_a = fopen(nome_fich, "w");
- temp_alunos = exame_escolhido->students;
- if(temp_alunos != NULL) {
- while(temp_alunos->next != NULL) {
- fprintf(exame_a, "%d,", temp_alunos->dados.numero);
- temp_alunos = temp_alunos->next;
- }
- fprintf(exame_a, "%d,", temp_alunos->dados.numero);
- }
- }
- }
- }
- }
- void cria_exames(List_e **lista_exames, List_d lista_disciplinas) {
- List_e temp, node, sobreposto;
- FILE *fich, *exame;
- List_s node2;
- List_d temp3;
- int verifica, opcao;
- char c[60], nome_fich[60],numero[30];
- int boolean;
- int i;
- node = malloc(sizeof(Lista_dos_exames));
- temp = **lista_exames;
- fich = fopen("lista_exames.txt", "a");
- printf("Insira o codigo do exame (Identificacao)\n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- i = atoi(numero);
- temp = **lista_exames;
- if (temp != NULL) {
- do {
- boolean =0;
- while (temp->next != NULL) {
- if ((temp->dados).codigo==i) {
- printf("Exame ja existente\n");
- boolean = 1;
- }
- temp = temp->next;
- }
- if ((temp->dados).codigo == i) {
- printf("Exame ja existente\n");
- boolean = 1;
- }
- if(boolean == 0)
- (node->dados).codigo = i;
- else {
- scanf("%d", &i);
- }
- } while(boolean == 1);
- }
- else {
- (node->dados).codigo = i;
- }
- printf("Insira o codigo da disciplina\n");
- //getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- i = atoi(numero);
- verifica = 0;
- while(verifica == 0) {
- temp3 = lista_disciplinas;
- while(temp3->next != NULL) {
- if((temp3->dados).codigo == i) {
- verifica = 1;
- (node->dados).disciplina = i;
- }
- temp3 = temp3->next;
- }
- if((temp3->dados).codigo == i) {
- verifica = 1;
- (node->dados).disciplina = i;
- }
- if(verifica == 0) {
- printf("disciplina nao encontrada na base de dados. Insira uma disciplina válida.\n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- i = atoi(numero);
- }
- }
- numero[0]='0';
- printf("Insira o tipo de exame:(1-epoca normal,2-epoca recurso,3-epoca especial)\n");
- while (numero[0] != '1' && numero[0] != '2' && numero[0] != '3' && numero[0] != '\n') {
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- if (numero[0] != '1' && numero[0] != '2' && numero[0] != '3' && numero[0] != '\n') {
- printf("Introduza 1 ou 2 ou 3\n");
- }
- }
- i = atoi(numero);
- (node->dados).tipo_exame=i;
- // while((node->dados).tipo_exame != 1 && (node->dados).tipo_exame != 2 && (node->dados).tipo_exame != 3) {
- // printf("insira um numero valido:\n");
- // scanf("%d", &(node->dados).tipo_exame);
- // }
- printf("Insira a data do exame:(dia/mes/aaaa)\n");
- scanf("%d/%d/%d", &((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
- while (verifica_data((node->dados).data) == 0) {
- scanf("%d/%d/%d", &((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
- }
- getchar();
- printf("Hora de início do exame:(ex:00:00)\n");
- gets((node->dados).hora_inicio);
- printf("Hora de fim do exame:(ex:00:00)\n");
- gets((node->dados).hora_fim);
- printf("Introduza a sala em que irá decorrer o exame:\n");
- gets(c);
- if(**lista_exames != NULL) {
- verifica=verifica_sala(**lista_exames,node,c,&sobreposto);
- while(verifica == 1) {
- printf("Exame com sala sobreposta com o exame da disciplina %d, que se realizará das %s às %s\n",
- (sobreposto->dados).disciplina, (sobreposto->dados).hora_inicio, (sobreposto->dados).hora_fim);
- printf("Deseja:\n1.Mudar horário do exame\n2.Mudar sala do exame\n");
- scanf("%d", &opcao);
- while (opcao != 1 && opcao != 2) {
- printf("insira uma opção valida");
- scanf("%d", &opcao);
- }
- if (opcao == 1) {
- printf("Insira a data do exame:(dia/mes/ano)\n");
- scanf("%d/%d/%d",&((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
- while (verifica_data((node->dados).data) == 0) {
- scanf("%d/%d/%d",&((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
- }
- printf("Hora de início do exame:(ex:00:00)\n");
- gets((node->dados).hora_inicio);
- printf("Hora de fim do exame:(ex:00:00)\n");
- gets((node->dados).hora_fim);
- } else {
- printf("Introduza a sala em que irá decorrer o exame:\n");
- getchar();
- gets(c);
- }
- verifica=verifica_sala(**lista_exames,node,c, &sobreposto);
- }
- }
- node->students = NULL;
- node2=malloc(sizeof(Sala));
- strcpy(node2->sala, c);
- node2->next = NULL;
- (node->dados).sala = node2;
- node->next = NULL;
- node->previous = NULL;
- if(**lista_exames == NULL) {
- **lista_exames = node;
- }
- else {
- temp = **lista_exames;
- while(temp->next != NULL) {
- temp = temp->next;
- }
- temp->next = node;
- node->previous = temp;
- }
- sprintf(nome_fich, "%d", (node->dados).codigo);
- i = strlen(nome_fich);
- nome_fich[i++] = 's';
- nome_fich[i++] = '.';
- nome_fich[i++] = 't';
- nome_fich[i++] = 'x';
- nome_fich[i++] = 't';
- nome_fich[i] = '\0';
- exame = fopen(nome_fich, "w");
- fprintf(exame,"%s,",(node->dados).sala->sala);
- fclose(exame);
- fprintf(fich,"%d,",(node->dados).codigo);
- fprintf(fich,"%d,",(node->dados).disciplina);
- fprintf(fich,"%d,",(node->dados).tipo_exame);
- if((node->dados).data.dia <10) {
- fprintf(fich,"0%d/", ((node->dados).data).dia);
- }
- else {
- fprintf(fich,"%d/", ((node->dados).data).dia);
- }
- if((node->dados).data.mes <10) {
- fprintf(fich,"0%d/", ((node->dados).data).mes);
- }
- else {
- fprintf(fich,"%d/", ((node->dados).data).mes);
- }
- fprintf(fich,"%d,", ((node->dados).data).ano);
- fprintf(fich,"%s,",(node->dados).hora_inicio);
- fprintf(fich,"%s.",(node->dados).hora_fim);
- fclose(fich);
- }
- void edita_exames(List_e **lista_exames) {
- int verifica;
- List_e sobreposto;
- int num;
- List_s temp_s;
- List_e temp = NULL,t=NULL;
- temp = **lista_exames;
- char numero[60];
- while(t==NULL) {
- print_exames(**lista_exames);
- printf("\n");
- if (temp != NULL) {
- printf("Introduza o codigo do exame que pretende modificar: \n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- num = atoi(numero);
- while (temp->next != NULL) {
- if ((temp->dados).codigo== num) {
- t = temp;
- }
- temp = temp->next;
- }
- if ((temp->dados).codigo == num) {
- t = temp;
- }
- }
- if (t == NULL) {
- printf("Exame nao encontrado na base de dados\n");
- }
- }
- char str[50];
- getchar();
- char str_2;
- printf("Tipo de exame: \n");
- switch ((t->dados).tipo_exame) {
- case 1:
- printf("Epoca normal\n");
- break;
- case 2:
- printf("Epoca recurso\n");
- break;
- case 3:
- printf("Epoca especial\n");
- break;
- }
- while (str_2 != '1' && str_2 != '2' && str_2 != '3'&& str_2 != '\n') {
- printf("Insira o novo tipo de exame:(enter para nao alterar)\n1:normal;\n2:recurso\n3:especial\n");
- str_2 = getchar();
- if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
- printf("introduza 1 ou 2 ou 3\n");
- }
- }
- if (str_2 != '\n') {
- (t->dados).tipo_exame = str_2 - '0';
- printf("novo tipo de exame:\n");
- switch ((t->dados).tipo_exame) {
- case 1:
- printf("Epoca normal\n");
- break;
- case 2:
- printf("Epoca recurso\n");
- break;
- case 3:
- printf("Epoca especial\n");
- break;
- }
- }
- else {
- printf("Tipo de exame nao alterado\n");
- }
- temp_s = (t->dados).sala;
- while(temp_s->next != NULL) {
- printf("Sala %s\n",temp_s->sala);
- printf("nova sala(enter para nao alterar):\n");
- gets(str);
- if(str[0] != '\0') {
- verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
- while(verifica == 1 && str[0] != '\0') {
- printf("sala sobreposta com o exame %d! insira nova sala", sobreposto->dados.codigo);
- gets(str);
- verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
- }
- strcpy(temp_s->sala, str);
- printf("Nova sala: %s", temp_s->sala);
- }
- else {
- printf("sala nao alterada\n");
- }
- temp_s = temp_s->next;
- }
- printf("Sala %s\n",temp_s->sala);
- printf("nova sala(enter para nao alterar):\n");
- getchar();
- gets(str);
- if(str[0] != '\0') {
- verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
- while(verifica == 1 && str[0] != '\0') {
- printf("sala sobreposta com o exame %d! insira nova sala", sobreposto->dados.codigo);
- gets(str);
- verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
- }
- strcpy(temp_s->sala, str);
- printf("Nova sala: %s", temp_s->sala);
- }
- else {
- printf("sala nao alterada\n");
- }
- printf("%d/%d/%d",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
- printf("Nova data: (enter para nao alterar) \n");
- gets(str);
- if (str[0] != '\0') {
- scanf("%d/%d/%d", &((t->dados).data).dia, &((t->dados).data).mes, &((t->dados).data).ano);
- printf("nova data: %d/%d/%d",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
- }
- else {
- printf("data %d/%d/%d nao alterada\n",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
- }
- printf("%s\n", (t->dados).hora_inicio);
- printf("Nova hora de inicio: (enter para nao alterar) \n");
- gets(str);
- if (str[0] != '\0') {
- strcpy((t->dados).hora_inicio,str);
- printf("nova hora de inicio: %s",(t->dados).hora_inicio);
- }
- else {
- printf("hora de inicio %s nao alterada\n", (t->dados).hora_inicio);
- }
- printf("%s\n", (t->dados).hora_fim);
- printf("Nova hora final: (enter para nao alterar) \n");
- gets(str);
- if (str[0] != '\0') {
- strcpy((t->dados).hora_fim,str);
- printf("nova hora final: %s",(t->dados).hora_fim);
- }
- else {
- printf("hora de final %s nao alterada\n", (t->dados).hora_fim);
- }
- atualiza_ficheiros_exames(**lista_exames);
- }
- void elimina_exames(List_e **lista_exames) {
- char numero[50];
- int num;
- print_exames(**lista_exames);
- printf("Desejar apagar que exame? (introduzir código)\n");
- getchar();
- gets(numero);
- while(verifica_se_numero(numero, strlen(numero)) == 0) {
- printf("Introduza um numero\n");
- gets(numero);
- }
- num = atoi(numero); List_e temp=NULL, t=NULL,t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
- temp = **lista_exames;
- while(temp->next != NULL) {
- if((temp->dados).codigo == num) {
- t = temp;
- }
- temp = temp->next;
- }
- if((temp->dados).codigo == num) {
- t = temp;
- }
- if (t == NULL) {
- printf("Exame nao encontrado\n");
- }
- else {
- if (t->previous == NULL) {
- **lista_exames = t -> next;
- }
- else {
- t1 = t->previous;
- t1->next = t->next;
- if(t->next != NULL){
- t->next->previous = t1;
- }
- }
- free(t);
- apaga_ficheiro(t->dados.codigo);
- }
- atualiza_ficheiros_exames(**lista_exames);
- printf("\nExame %d apagado.",num);
- getchar();
- }
- void print_exames_s(List_e dados) {
- List_e temp;
- temp = dados;
- List_s temp_s;
- List temp_alun;
- printf("Introduza o aluno que pretende ver os exames: ");
- int n;
- scanf("%d",&n);
- if(temp == NULL) {
- printf("nenhum exame encontrado na base de dados\n");
- }
- else {
- while(temp->next != NULL) {
- temp_alun = temp->students;
- if(temp_alun != NULL){
- while(temp_alun->next != NULL) {
- if(temp_alun->dados.numero == n) {
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- }
- temp_alun = temp_alun->next;
- }
- if(temp_alun->dados.numero == n) {
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- }
- }
- temp = temp->next;
- }
- temp_alun = temp->students;
- if(temp_alun != NULL){
- while(temp_alun->next != NULL) {
- if(temp_alun->dados.numero == n) {
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- }
- temp_alun = temp_alun->next;
- }
- if(temp_alun->dados.numero == n) {
- printf("%d,", (temp->dados).codigo);
- printf("%d,", (temp->dados).disciplina);
- switch((temp->dados).tipo_exame) {
- case 1:
- printf("Epoca Normal,");
- break;
- case 2:
- printf("Epoca Recurso,");
- break;
- case 3:
- printf("Epoca Especial");
- break;
- }
- temp_s = (temp->dados).sala;
- while(temp_s->next != NULL) {
- printf("%s,",temp_s->sala);
- temp_s = temp_s->next;
- }
- printf("%s,",temp_s->sala);
- printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
- printf("%s,",(temp->dados).hora_inicio);
- printf("%s\n",(temp->dados).hora_fim);
- }
- }
- }
- }
- /*MENU*/
- void menu(List *lista_alunos,List_d *lista_disciplinas,List_e *lista_exames) {
- int curso = 0;
- char opcao;
- printf("\n------MENU PRINCIPAL------\n\nIntroduza uma das opções: \n");
- printf("\t1: Alunos\n"); //DONE
- printf("\t2: Disciplinas\n");
- printf("\t3: Exames\n");
- printf("::::::>");
- opcao = getchar();
- getchar();
- if(opcao=='1') {
- printf("\n--MENU ALUNOS--\n\nIntroduza uma das opções sobre os alunos: \n");
- printf("\t1: Adicionar alunos\n");
- printf("\t2: Editar dados de alunos\n");
- printf("\t3: Eliminar alunos\n");
- printf("\t4: Ver lista de alunos\n");
- printf("\t5: Voltar\n");
- printf("::::::>");
- opcao = getchar();
- if(opcao == '1') {
- criar_aluno(&lista_alunos);
- }
- else if(opcao == '2') {
- editar_alunos(&lista_alunos);
- }
- else if(opcao=='3') {
- printf("\nLista de alunos de LEI:\n");
- print_LEI(*lista_alunos);
- printf("\nLista de alunos de LDM:\n");
- print_LDM(*lista_alunos);
- printf("\n");
- apaga_alunos(&lista_alunos);
- }
- else if(opcao=='4') {
- curso = 0;
- printf("\nDeseja ver os alunos de que curso? (1-LEI,2-LDM, 3-todos)\n");
- while(curso != 1 && curso != 2 && curso != 3) {
- printf("::::::>");
- scanf("%d",&curso);
- if(curso==1) {
- print_LEI(*lista_alunos);
- }
- else if(curso==2) {
- print_LDM(*lista_alunos);
- }
- else if(curso==3) {
- print_dados(*lista_alunos);
- }
- else
- printf("\nEscolha um dos dois cursos");
- }
- }
- }
- else if(opcao=='2') {
- printf("\n--MENU DISCIPLINAS--\n\nIntroduza uma das opções sobre as disciplinas: \n");
- printf("\t1: Adicionar disciplinas\n");
- printf("\t2: Editar disciplinas\n");
- printf("\t3: Eliminar disciplinas\n");
- printf("\t4: Mostra disciplinas\n");
- printf("\t5: Inscrever alunos em disciplinas\n");
- printf("\t6: Voltar\n");
- printf("::::::>");
- opcao = getchar();
- if (opcao=='1')
- criar_disciplinas(&lista_disciplinas);
- else if(opcao=='2')
- edita_disciplinas(&lista_disciplinas);
- else if(opcao=='3')
- elimina_disciplinas(&lista_disciplinas);
- else if(opcao=='4') {
- print_disciplinas(*lista_disciplinas);
- getchar();
- }
- else if(opcao=='5')
- inscrever_alunos_disciplinas(*lista_alunos,&lista_disciplinas);
- }
- else if(opcao=='3') {
- printf("\n--MENU EXAMES--\n\nIntroduza uma das opções sobre os exames: \n");
- printf("\t1: Criar exame\n");
- printf("\t2: Editar exame\n");
- printf("\t3: Eliminar exame\n");
- printf("\t4: Printa exames\n");
- printf("\t5: Inscrever aluno em exame\n");
- printf("\t6: Desinscrever aluno de exame\n");
- printf("\t7: Ver exames de um aluno\n");
- printf("\tOutro: Voltar\n");
- printf("::::::>");
- opcao = getchar();
- if (opcao =='1') {
- cria_exames(&lista_exames, *lista_disciplinas);
- }
- else if(opcao=='2') {
- edita_exames(&lista_exames);
- }
- else if(opcao=='3') {
- elimina_exames(&lista_exames);
- }
- else if(opcao=='4') {
- print_exames(*lista_exames);
- getchar();
- }
- else if(opcao == '5') {
- inscrever_alunos_exames(&lista_exames, *lista_alunos);
- getchar();
- }
- else if(opcao == '6') {
- getchar();
- desinscrever_alunos_exames(&lista_exames);
- }
- else if(opcao == '7') {
- getchar();
- print_exames_s(*lista_exames);
- }
- }
- }
- int main() {
- List_d lista_disciplinas=NULL;
- List lista_alunos = NULL;
- List_e lista_exames = NULL;
- le_ficheiros(&lista_alunos, &lista_disciplinas,&lista_exames);
- apaga_exames_passados(&lista_exames);
- while(true) {
- menu(&lista_alunos,&lista_disciplinas,&lista_exames);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement