Advertisement
Guest User

Untitled

a guest
May 29th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 83.66 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <stdbool.h>
  4. #include <time.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <sys/stat.h>
  9.  
  10.  
  11.  
  12.  
  13. //PARA CORRER NO WINDOWS COM ACENTOS: CHCP 651001
  14.  
  15.  
  16. /*BUGS CONHECIDOS:
  17. */
  18.  
  19. /*NOTAS*/
  20.  
  21. /*ESTRUTURAS*/
  22.  
  23. typedef struct aluno {
  24. int numero;
  25. char nome[60];
  26. int curso; //cada curso tem um numero, 1-LEI,2-LDM
  27. int ano; //1º,2º,....
  28. int regime; //= curso; regime(normal, trabalhador-estudante, atleta, dirigente associativo ou aluno de Erasmus).
  29. } Aluno;
  30.  
  31. typedef struct lista_alunos *List;
  32. typedef struct lista_alunos {
  33. Aluno dados;
  34. List next;
  35. List previous;
  36. } Lista_dos_alunos;
  37.  
  38. typedef struct sala *List_s;
  39. typedef struct sala {
  40. char sala[10];
  41. List_s next;
  42. } Sala;
  43.  
  44. typedef struct data {
  45. int dia;
  46. int mes;
  47. int ano;
  48. } Data;
  49.  
  50. typedef struct exame {
  51. int codigo;
  52. int disciplina;
  53. int tipo_exame; //epoca normal etc.
  54. List_s sala;
  55. Data data;
  56. char hora_inicio[10];
  57. char hora_fim[10];
  58. } Exame;
  59.  
  60.  
  61.  
  62. typedef struct lista_exames *List_e;
  63. typedef struct lista_exames {
  64. Exame dados;
  65. List students;
  66. List_e next;
  67. List_e previous;
  68. } Lista_dos_exames;
  69.  
  70. //typedef struct disciplina *List_disc;
  71. typedef struct disciplina {
  72. int codigo;
  73. char nome[60];
  74. int curso; //cada curso tem um numero, 1-LEI,2-LDM
  75. int semestre;
  76. int ano;
  77. char docente[60];
  78. } Disciplina;
  79. typedef struct lista_disciplinas *List_d;
  80. typedef struct lista_disciplinas {
  81. Disciplina dados;
  82. List students;
  83. List_d next;
  84. List_d previous;
  85. } Lista_das_disciplinas;
  86.  
  87. /*FUNÇOES*/
  88. int compare_dates (Data d1, Data d2){
  89. if (d1.ano < d2.ano)
  90. return -1;
  91. else if (d1.ano > d2.ano)
  92. return 1;
  93. else{
  94. if (d1.mes<d2.mes)
  95. return -1;
  96. else if (d1.mes>d2.mes)
  97. return 1;
  98. else if (d1.dia<d2.dia)
  99. return -1;
  100. else if(d1.dia>d2.dia)
  101. return 1;
  102. else
  103. return 0;
  104. }
  105. }
  106.  
  107.  
  108. int verifica_se_numero(char *str, int tam) {
  109. int i;
  110. for(i = 0; i<tam; i++) {
  111. if(!isdigit(*(str+i))) {
  112. return 0;
  113. }
  114. }
  115. return 1;
  116. }
  117. int pot10(int numero, int pot) {
  118. int i;
  119. for (i=0; i<pot; i++) {
  120. numero *= 10;
  121. }
  122. return numero;
  123. }
  124. int doesFileExist(const char *filename) {
  125. struct stat st;
  126. int result = stat(filename, &st);
  127. return result == 0;
  128. }
  129. void apaga_ficheiro(int codigo){
  130. char nomefich[30];
  131. int i;
  132. sprintf(nomefich, "%d", codigo);
  133. i = strlen(nomefich);
  134. nomefich[i++] = 's';
  135. nomefich[i++] = '.';
  136. nomefich[i++] = 't';
  137. nomefich[i++] = 'x';
  138. nomefich[i++] = 't';
  139. nomefich[i++] = '\0';
  140. if(doesFileExist(nomefich)){
  141. printf("olaaaa1");
  142. remove(nomefich);
  143. }
  144. sprintf(nomefich, "%d", codigo);
  145. i = strlen(nomefich);
  146. nomefich[i++] = 'a';
  147. nomefich[i++] = '.';
  148. nomefich[i++] = 't';
  149. nomefich[i++] = 'x';
  150. nomefich[i++] = 't';
  151. nomefich[i++] = '\0';
  152. if(doesFileExist(nomefich)){
  153. printf("olaaaa2");
  154. remove(nomefich);
  155. }
  156. }
  157.  
  158. float hora_decimal(int horas, int minutos) {
  159. float res=0;
  160. res+=horas;
  161. res+=minutos/60;
  162. return res;
  163. }
  164. int verifica_data(Data date) {
  165. int daysinmonth[12]= {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  166. int legit = 0;
  167. // leap year checking, if ok add 29 days to february
  168. if(date.ano % 400 == 0 || (date.ano % 100 != 0 && date.ano % 4 == 0))
  169. daysinmonth[1]=29;
  170. // days in month checking
  171. if (date.mes<13) {
  172. if( date.dia <= daysinmonth[(date.mes)-1] )
  173. legit=1;
  174. }
  175. if (legit==0)
  176. printf("It is not a legitimate date!\n");
  177. return legit;
  178. }
  179.  
  180. int interseta(float a, float b, float c, float d) { //procura interseçao dos intervalos {a,b] e [c,d]
  181. if(((c<=b) && (c>=a)) || ((d<=b) && (d>=a)) || ((c<a) && (d>b)) || ((a<c) && (b>d))) {
  182. return 1; //interseta
  183. }
  184. else {
  185. return 0;
  186. }
  187. }
  188.  
  189. /*FICHEIROS*/
  190. void le_ficheiros(List *lista_alunos,List_d *lista_disciplinas,List_e *lista_exames) {
  191. FILE *disciplinas;
  192. FILE *alunos;
  193. FILE *disc;
  194. FILE *exames;
  195. List temp, node;
  196. List_s temp_s,node_s;
  197. List_e node_e,temp_e;
  198. List_d temp2 = *lista_disciplinas, node2;
  199. char c, nome[60],linha[60], data[5];
  200. char linha1[20] = "ertyuiop";
  201. int i = 0, n, j, x;
  202. strcpy(linha, "wertyuio");
  203. if((alunos = fopen("alunos_mem.txt", "r"))) {
  204. while(!feof(alunos) && strlen(linha)>1) {
  205. strcpy(linha, "");
  206. fscanf(alunos,"%[^;]",linha);
  207. fseek(alunos,+1,SEEK_CUR);
  208. if(strlen(linha)>1) {
  209. node = malloc(sizeof(Lista_dos_alunos));
  210. j = 0;
  211. i = 0;
  212. c = linha[i];
  213. while(c!=',') {
  214. nome[j]=c; //nome na realidade é numero
  215. i++;
  216. j++;
  217. c = linha[i];
  218. }
  219. nome[j] = '\0';
  220. (node->dados).numero = atoi(nome);
  221. i++;
  222. j = 0;
  223. c = linha[i];
  224. while(c!=',') {
  225. (node->dados).nome[j] = c;
  226. i++;
  227. j++;
  228. c = linha[i];
  229. }
  230. (node->dados).nome[j] = '\0';
  231. i++;
  232. nome[0] = linha[i];
  233. nome[1] = '\0';
  234. (node->dados).curso = atoi(nome);
  235. i+=2;
  236. nome[0] = linha[i];
  237. nome[1] = '\0';
  238. (node->dados).ano = atoi(nome);
  239. i+=2;
  240. nome[0] = linha[i];
  241. nome[1] = '\0';
  242. (node->dados).regime = atoi(nome);
  243. node->previous = NULL;
  244. node->next = NULL;
  245. if(*lista_alunos == NULL) {
  246. *lista_alunos = node;
  247. }
  248. else {
  249. temp = *lista_alunos;
  250. while(temp->next != NULL) {
  251. temp = temp->next;
  252. }
  253. temp->next = node;
  254. node->previous = temp;
  255. }
  256. }
  257. }
  258. fclose(alunos);
  259. }
  260. char nome_fich[20];
  261. if(doesFileExist("disciplinas_mem.txt")) {
  262. disciplinas = fopen("disciplinas_mem.txt","r");
  263. strcpy(linha, "entrarnowhile");
  264. while(!feof(disciplinas) && strlen(linha)>1) {
  265. strcpy(linha, "");
  266. fscanf(disciplinas,"%[^;]",linha);
  267. fseek(disciplinas,+1,SEEK_CUR);
  268. if(strlen(linha)>1) {
  269.  
  270. node2 = malloc(sizeof(Lista_das_disciplinas));
  271. j = 0;
  272. i = 0;
  273. c = linha[i];
  274. while(c!=',') {
  275. nome[j]=c; //nome na realidade é codigo
  276. i++;
  277. j++;
  278. c = linha[i];
  279. }
  280. nome[j] = '\0';
  281. (node2->dados).codigo = atoi(nome);
  282. i++;
  283. j = 0;
  284. c = linha[i];
  285. while(c!=',') {
  286. (node2->dados).nome[j] = c;
  287. i++;
  288. j++;
  289. c = linha[i];
  290. }
  291. (node2->dados).nome[j] = '\0';
  292. i++;
  293. j = 0;
  294. c = linha[i];
  295. while(c!=',') {
  296. (node2->dados).docente[j] = c;
  297. i++;
  298. j++;
  299. c = linha[i];
  300. }
  301. (node2->dados).docente[j] = '\0';
  302. i++;
  303. nome[0] = linha[i];
  304. nome[1] = '\0';
  305. (node2->dados).curso = atoi(nome);
  306. i+=2;
  307. nome[0] = linha[i];
  308. nome[1] = '\0';
  309. (node2->dados).ano = atoi(nome);
  310. i+=2;
  311. nome[0] = linha[i];
  312. nome[1] = '\0';
  313. (node2->dados).semestre = atoi(nome);
  314. node2->students = NULL;
  315. node2->previous = NULL;
  316. node2->next = NULL;
  317. if(*lista_disciplinas == NULL) {
  318. *lista_disciplinas = node2;
  319.  
  320. }
  321. else {
  322.  
  323. temp2 = *lista_disciplinas;
  324. while(temp2->next != NULL) {
  325. temp2 = temp2->next;
  326. }
  327. temp2->next = node2;
  328. node2->previous = temp2;
  329. }
  330. strcpy(nome_fich,(node2->dados).nome);
  331. i=strlen(nome_fich);
  332. nome_fich[i++]='.';
  333. nome_fich[i++]='t';
  334. nome_fich[i++]='x';
  335. nome_fich[i++]='t';
  336. nome_fich[i++]='\0';
  337. if(doesFileExist(nome_fich)) {
  338. disc = fopen(nome_fich,"r");
  339. while(!feof(disc) && strlen(linha1) > 1) {
  340. strcpy(linha1,"");
  341. fscanf(disc,"%[^;]*c",linha1);
  342. fseek(disc,+1,SEEK_CUR);
  343. if(strlen(linha1) > 1) {
  344. n = atoi(linha1);
  345. node = malloc(sizeof(Lista_dos_alunos));
  346. temp = *lista_alunos;
  347. while(temp->next != NULL) {
  348. if ((temp->dados).numero == n) {
  349. (node->dados).numero = (temp->dados).numero;
  350. for (i = 0; i<strlen((temp->dados).nome); i++) {
  351. (node->dados).nome[i] = (temp->dados).nome[i];
  352. }
  353. (node->dados).nome[i] = '\0';
  354. (node->dados).regime = (temp->dados).regime;
  355. (node->dados).curso = (temp->dados).curso;
  356. (node->dados).ano = (temp->dados).ano;
  357. node->next = NULL;
  358. node->previous = NULL;
  359. }
  360. temp = temp->next;
  361. }
  362. if ((temp->dados).numero == n) {
  363. (node->dados).numero = (temp->dados).numero;
  364. for (i = 0; i<strlen((temp->dados).nome); i++) {
  365. (node->dados).nome[i] = (temp->dados).nome[i];
  366. }
  367. (node->dados).nome[i] = '\0';
  368. (node->dados).regime = (temp->dados).regime;
  369. (node->dados).curso = (temp->dados).curso;
  370. (node->dados).ano = (temp->dados).ano;
  371. node->next = NULL;
  372. node->previous = NULL;
  373. }
  374. if(node == NULL) {
  375. printf("Aluno %d da disciplina %s nao encontrado na base de dados\n",n,(node2->dados).nome);
  376. }
  377. else {
  378. if(node2->students == NULL) {
  379. node2->students = node;
  380. }
  381. else {
  382. temp = node2->students;
  383. while(temp->next != NULL) {
  384. temp = temp->next;
  385. }
  386. temp->next = node;
  387. node->previous = temp;
  388. }
  389. }
  390. }
  391.  
  392. }
  393. fclose(disc);
  394. }
  395. }
  396. }
  397. fclose(disciplinas);
  398. }
  399. strcpy(linha, "wertyuio");
  400.  
  401. if((exames = fopen("lista_exames.txt", "r"))) {
  402. FILE *exame_atual;
  403. while(!feof(exames) && strlen(linha)>1) {
  404. strcpy(linha, "");
  405. fscanf(exames,"%[^.]",linha);
  406. fseek(exames,+1,SEEK_CUR);
  407. if(strlen(linha)>1) {
  408.  
  409. node_e = malloc(sizeof(Lista_dos_exames));
  410. j = 0;
  411. i = 0;
  412. c = linha[i];
  413. while(c!=',') {
  414. nome[j]=c; //nome na realidade é numero
  415. i++;
  416. j++;
  417. c = linha[i];
  418. }
  419. nome[j] = '\0';
  420.  
  421. (node_e->dados).codigo = atoi(nome);
  422.  
  423. i++;
  424. j=0;
  425. c = linha[i];
  426.  
  427. while(c!=',') {
  428. nome[j]=c; //nome na realidade é numero
  429. i++;
  430. j++;
  431. c = linha[i];
  432. }
  433. nome[j] = '\0';
  434.  
  435. (node_e->dados).disciplina = atoi(nome);
  436. i++;
  437. c = linha[i];
  438. nome[0] = linha[i];
  439. nome[1] = '\0';
  440. (node_e->dados).tipo_exame = atoi(nome);
  441. i+=2;
  442.  
  443. j=0;
  444. for(x=0; x<2; x++) {
  445. c = linha[i];
  446. i++;
  447. data[x] = c;
  448.  
  449. }
  450. data[x]='\0';
  451. (node_e->dados).data.dia=atoi(data);
  452. i++;
  453. for(x=0; x<2; x++) {
  454. c = linha[i];
  455. i++;
  456. data[x] = c;
  457. }
  458. data[x]='\0';
  459.  
  460. (node_e->dados).data.mes=atoi(data);
  461. i++;
  462. for(x=0; x<4; x++) {
  463. c = linha[i];
  464. i++;
  465. data[x] = c;
  466. }
  467. data[x]='\0';
  468. (node_e->dados).data.ano=atoi(data);
  469.  
  470. j=0;
  471. i++;
  472. c = linha[i];
  473. nome[j]='\0';
  474. sprintf(nome_fich, "%d", node_e->dados.codigo);
  475. j = strlen(nome_fich);
  476. (node_e->dados).sala = NULL;
  477. nome_fich[j++] = 's';
  478. nome_fich[j++] = '.';
  479. nome_fich[j++] = 't';
  480. nome_fich[j++] = 'x';
  481. nome_fich[j++] = 't';
  482. nome_fich[j++] = '\0';
  483. if((exame_atual = fopen(nome_fich, "r"))) {
  484.  
  485. linha1[0] = 'a';
  486. linha1[1] = 'b';
  487. while(!feof(exame_atual) && strlen(linha1) > 1) {
  488.  
  489. strcpy(linha1,"");
  490.  
  491. fscanf(exame_atual,"%[^,]",linha1);
  492.  
  493. fseek(exame_atual,+1,SEEK_CUR);
  494.  
  495. if(strlen(linha1) > 1) {
  496.  
  497. n = atoi(linha1);
  498.  
  499. node_s = malloc(sizeof(Sala));
  500. strcpy((node_s)->sala,linha1);
  501. node_s->next = NULL;
  502.  
  503. if((node_e->dados).sala == NULL) {
  504.  
  505. (node_e->dados).sala = node_s;
  506.  
  507. }
  508. else {
  509.  
  510. temp_s = (node_e->dados).sala;
  511. while(temp_s->next != NULL) {
  512. temp_s = temp_s->next;
  513. }
  514. temp_s->next = node_s;
  515. }
  516.  
  517. }
  518. }
  519. fclose(exame_atual);
  520. }
  521. sprintf(nome_fich, "%d", node_e->dados.codigo);
  522. j = strlen(nome_fich);
  523. nome_fich[j++] = 'a';
  524. nome_fich[j++] = '.';
  525. nome_fich[j++] = 't';
  526. nome_fich[j++] = 'x';
  527. nome_fich[j++] = 't';
  528. nome_fich[j++] = '\0';
  529. if(doesFileExist(nome_fich)) {
  530.  
  531. disc = fopen(nome_fich,"r");
  532. strcpy(linha1, "entranowhile");
  533. while(!feof(disc) && strlen(linha1) > 1) {
  534. strcpy(linha1,"");
  535. fscanf(disc,"%[^,]*c",linha1);
  536. fseek(disc,+1,SEEK_CUR);
  537. if(strlen(linha1) > 1) {
  538. n = atoi(linha1);
  539. node = malloc(sizeof(Lista_dos_alunos));
  540. temp = *lista_alunos;
  541. while(temp->next != NULL) {
  542. if ((temp->dados).numero == n) {
  543. (node->dados).numero = (temp->dados).numero;
  544. strcpy((node->dados).nome,(temp->dados).nome);
  545. (node->dados).regime = (temp->dados).regime;
  546. (node->dados).curso = (temp->dados).curso;
  547. (node->dados).ano = (temp->dados).ano;
  548. node->next = NULL;
  549. node->previous = NULL;
  550. }
  551. temp = temp->next;
  552. }
  553. if ((temp->dados).numero == n) {
  554. (node->dados).numero = (temp->dados).numero;
  555. strcpy((node->dados).nome,(temp->dados).nome);
  556. (node->dados).regime = (temp->dados).regime;
  557. (node->dados).curso = (temp->dados).curso;
  558. (node->dados).ano = (temp->dados).ano;
  559. node->next = NULL;
  560. node->previous = NULL;
  561. }
  562. if(node == NULL) {
  563. printf("Aluno %d do exame %d nao encontrado na base de dados\n",n,(node_e->dados).codigo);
  564. }
  565. else {
  566. if(node_e->students == NULL) {
  567. node_e->students = node;
  568. }
  569. else {
  570. temp = node_e->students;
  571. while(temp->next != NULL) {
  572. temp = temp->next;
  573. }
  574. temp->next = node;
  575. node->previous = temp;
  576. }
  577. }
  578. }
  579.  
  580. }
  581. fclose(disc);
  582.  
  583. }
  584.  
  585. c=linha[i];
  586. j = 0;
  587. while(c!=',') {
  588. nome[j]=c;
  589. i++;
  590. j++;
  591. c = linha[i];
  592. }
  593. nome[j] = '\0';
  594.  
  595.  
  596. strcpy((node_e->dados).hora_inicio,nome);
  597.  
  598. j=0;
  599. i++;
  600. c=linha[i];
  601.  
  602. while(c!='\0') {
  603. nome[j]=c;
  604. i++;
  605. j++;
  606. c = linha[i];
  607. }
  608. nome[j] = '\0';
  609. strcpy((node_e->dados).hora_fim,nome);
  610. node_e->previous = NULL;
  611. node_e->next = NULL;
  612. if(*lista_exames == NULL) {
  613. *lista_exames = node_e;
  614. }
  615. else {
  616. temp_e = *lista_exames;
  617. while(temp_e->next != NULL) {
  618. temp_e = temp_e->next;
  619. }
  620. temp_e->next = node_e;
  621. node_e->previous = temp_e;
  622.  
  623. }
  624. }
  625. }
  626. fclose(exames);
  627. }
  628. }
  629. void atualiza_ficheiros_alunos(List lista_alunos) {
  630. FILE *alunos1;
  631. FILE *alunos2;
  632. alunos1 = fopen("alunos_mem.txt", "w");
  633. alunos2 = fopen("alunos_show.txt", "w");
  634. List temp=lista_alunos;
  635. while(temp->next != NULL) {
  636. fprintf(alunos1,"%d,",(temp->dados).numero);
  637. fprintf(alunos2, "Numero: %d, ", (temp->dados).numero);
  638. fprintf(alunos1,"%s,", (temp->dados).nome);
  639. fprintf(alunos2,"Nome: %s, ", (temp->dados).nome);
  640. fprintf(alunos1, "%d,", (temp->dados).curso);
  641. switch((temp->dados).curso) {
  642. case 1:
  643. fprintf(alunos2,"Curso: LEI, ");
  644. break;
  645. case 2:
  646. fprintf(alunos2,"Curso: LDM, ");
  647. break;
  648. }
  649. fprintf(alunos1, "%d,", (temp->dados).ano);
  650. fprintf(alunos2, "%dº ano, ", (temp->dados).ano);
  651. fprintf(alunos1, "%d;", (temp->dados).regime);
  652. switch((temp->dados).regime) {
  653. case 1:
  654. fprintf(alunos2,"Regime: Normal;\n");
  655. break;
  656. case 2:
  657. fprintf(alunos2,"Regime: Trabalhador-Estudante;\n");
  658. break;
  659. case 3:
  660. fprintf(alunos2,"Regime: Atleta;\n");
  661. break;
  662. case 4:
  663. fprintf(alunos2,"Regime: Dirigente Associativo;\n");
  664. break;
  665. case 5:
  666. fprintf(alunos2,"Regime: Aluno em Erasmus;\n");
  667. break;
  668. case 6:
  669. fprintf(alunos2,"Regime: Outro;\n");
  670. break;
  671. }
  672. temp = temp->next;
  673. }
  674. fprintf(alunos1,"%d,",(temp->dados).numero);
  675. fprintf(alunos2, "Nunmero: %d, ", (temp->dados).numero);
  676. fprintf(alunos1,"%s,", (temp->dados).nome);
  677. fprintf(alunos2,"Nome: %s, ", (temp->dados).nome);
  678. fprintf(alunos1, "%d,", (temp->dados).curso);
  679. switch((temp->dados).curso) {
  680. case 1:
  681. fprintf(alunos2,"Curso: LEI, ");
  682. break;
  683. case 2:
  684. fprintf(alunos2,"Curso: LDM, ");
  685. break;
  686. }
  687. fprintf(alunos1, "%d,", (temp->dados).ano);
  688. fprintf(alunos2, "%dº ano, ", (temp->dados).ano);
  689. fprintf(alunos1, "%d;", (temp->dados).regime);
  690. switch((temp->dados).regime) {
  691. case 1:
  692. fprintf(alunos2,"Regime: Normal;\n");
  693. break;
  694. case 2:
  695. fprintf(alunos2,"Regime: Trabalhador-Estudante;\n");
  696. break;
  697. case 3:
  698. fprintf(alunos2,"Regime: Atleta;\n");
  699. break;
  700. case 4:
  701. fprintf(alunos2,"Regime: Dirigente Associativo;\n");
  702. break;
  703. case 5:
  704. fprintf(alunos2,"Regime: Aluno em Erasmus;\n");
  705. break;
  706. case 6:
  707. fprintf(alunos2,"Regime: Outro;\n");
  708. break;
  709. }
  710. fclose(alunos1);
  711. fclose(alunos2);
  712. }
  713. void atualiza_ficheiros_disciplinas(List_d lista_disciplinas) {
  714. FILE *disciplinas1;
  715. FILE *disciplinas2;
  716. List_d temp = lista_disciplinas;
  717. disciplinas1 = fopen("disciplinas_mem.txt", "w");
  718. disciplinas2 = fopen("disciplinas_show.txt", "w");
  719. while(temp->next != NULL) {
  720. fprintf(disciplinas1,"%d,",(temp->dados).codigo);
  721. fprintf(disciplinas2, "Codigo: %d, ", (temp->dados).codigo);
  722. fprintf(disciplinas1,"%s,", (temp->dados).nome);
  723. fprintf(disciplinas2,"Nome: %s, ", (temp->dados).nome);
  724. fprintf(disciplinas1,"%s,", (temp->dados).docente);
  725. fprintf(disciplinas2,"%s, ", (temp->dados).docente);
  726. fprintf(disciplinas1, "%d,", (temp->dados).curso);
  727. switch((temp->dados).curso) {
  728. case 1:
  729. fprintf(disciplinas2,"Curso: LEI, ");
  730. break;
  731. case 2:
  732. fprintf(disciplinas2,"Curso: LDM, ");
  733. break;
  734. }
  735. fprintf(disciplinas1, "%d,", (temp->dados).ano);
  736. fprintf(disciplinas2, "%dº ano, ", (temp->dados).ano);
  737. fprintf(disciplinas1, "%d\n", (temp->dados).semestre);
  738. fprintf(disciplinas2,"%dº semestre;\n", (temp->dados).semestre);
  739. temp = temp->next;
  740. }
  741. fprintf(disciplinas1,"%d,",(temp->dados).codigo);
  742. fprintf(disciplinas2, "Codigo: %d, ", (temp->dados).codigo);
  743. fprintf(disciplinas1,"%s,", (temp->dados).nome);
  744. fprintf(disciplinas2,"Nome: %s, ", (temp->dados).nome);
  745. fprintf(disciplinas1,"%s,", (temp->dados).docente);
  746. fprintf(disciplinas2,"%s, ", (temp->dados).docente);
  747. fprintf(disciplinas1, "%d,", (temp->dados).curso);
  748. switch((temp->dados).curso) {
  749. case 1:
  750. fprintf(disciplinas2,"Curso: LEI, ");
  751. break;
  752. case 2:
  753. fprintf(disciplinas2,"Curso: LDM, ");
  754. break;
  755. }
  756. fprintf(disciplinas1, "%d,", (temp->dados).ano);
  757. fprintf(disciplinas2, "%dº ano, ", (temp->dados).ano);
  758. fprintf(disciplinas1, "%d\n", (temp->dados).semestre);
  759. fprintf(disciplinas2,"%dº semestre;\n", (temp->dados).semestre);
  760.  
  761.  
  762. fclose(disciplinas1);
  763. fclose(disciplinas2);
  764. }
  765.  
  766. void atualiza_ficheiros_exames(List_e lista_exames) {
  767. FILE *exames, *salas;
  768. int i;
  769. List_e temp = lista_exames;
  770. char nome_fich[50];
  771. if(lista_exames != NULL) {
  772. exames = fopen("lista_exames.txt", "w");
  773. while(temp->next != NULL) {
  774. fprintf(exames,"%d,",(temp->dados).codigo);
  775. fprintf(exames,"%d,", (temp->dados).disciplina);
  776. fprintf(exames, "%d,", (temp->dados).tipo_exame);
  777. if(((temp->dados).data).dia<10){
  778. fprintf(exames, "0");
  779. }
  780. fprintf(exames,"%d/", ((temp->dados).data).dia);
  781.  
  782. if(((temp->dados).data).mes<10){
  783. fprintf(exames, "0");
  784. }
  785. fprintf(exames,"%d/",((temp->dados).data).mes);
  786.  
  787. if(((temp->dados).data).ano<10){
  788. fprintf(exames, "0");
  789. }
  790. fprintf(exames,"%d,",((temp->dados).data).ano);
  791.  
  792. fprintf(exames, "%s,", (temp->dados).hora_inicio);
  793. fprintf(exames, "%s.", (temp->dados).hora_fim);
  794. sprintf(nome_fich, "%d", (temp->dados).codigo);
  795. i = strlen(nome_fich);
  796. nome_fich[i++] = 's';
  797. nome_fich[i++] = '.';
  798. nome_fich[i++] = 't';
  799. nome_fich[i++] = 'x';
  800. nome_fich[i++] = 't';
  801. nome_fich[i] = '\0';
  802. salas = fopen(nome_fich, "w");
  803. if(temp->dados.sala != NULL){
  804. while(temp->dados.sala->next != NULL){
  805. fprintf(salas,"%s,",(temp->dados).sala->sala);
  806. (temp->dados).sala = (temp->dados).sala->next;
  807. }
  808. fprintf(salas,"%s,",(temp->dados).sala->sala);
  809. fclose(salas);
  810. }
  811. temp = temp->next;
  812. }
  813. fprintf(exames,"%d,",(temp->dados).codigo);
  814. fprintf(exames,"%d,", (temp->dados).disciplina);
  815. fprintf(exames, "%d,", (temp->dados).tipo_exame);
  816. if(((temp->dados).data).dia<10){
  817. fprintf(exames, "0");
  818. }
  819. fprintf(exames,"%d/", ((temp->dados).data).dia);
  820.  
  821. if(((temp->dados).data).mes<10){
  822. fprintf(exames, "0");
  823. }
  824. fprintf(exames,"%d/",((temp->dados).data).mes);
  825.  
  826. if(((temp->dados).data).ano<10){
  827. fprintf(exames, "0");
  828. }
  829. fprintf(exames,"%d,",((temp->dados).data).ano);
  830.  
  831. fprintf(exames, "%s,", (temp->dados).hora_inicio);
  832. fprintf(exames, "%s.", (temp->dados).hora_fim);
  833. sprintf(nome_fich, "%d", (temp->dados).codigo);
  834. i = strlen(nome_fich);
  835. nome_fich[i++] = 's';
  836. nome_fich[i++] = '.';
  837. nome_fich[i++] = 't';
  838. nome_fich[i++] = 'x';
  839. nome_fich[i++] = 't';
  840. nome_fich[i] = '\0';
  841. salas = fopen(nome_fich, "w");
  842. if(temp->dados.sala != NULL){
  843. while(temp->dados.sala->next != NULL){
  844. fprintf(salas,"%s,",(temp->dados).sala->sala);
  845. (temp->dados).sala = (temp->dados).sala->next;
  846. }
  847. fprintf(salas,"%s,",(temp->dados).sala->sala);
  848. fclose(salas);
  849. }
  850.  
  851. fclose(exames);
  852. }
  853. else {
  854. remove("lista_exames.txt");
  855. }
  856. }
  857. void apaga_exames_passados(List_e *lista_exames) {
  858. time_t t = time(NULL);
  859. struct tm tm = *localtime(&t);
  860. Data hoje;
  861. hoje.dia = tm.tm_mday;
  862. hoje.mes = tm.tm_mon + 1;
  863. hoje.ano = tm.tm_year + 1900;
  864. printf("Bem vindo! Hoje é dia %d/%d/%d", hoje.dia, hoje.mes, hoje.ano);
  865. List_e temp, x =NULL;
  866. if(*lista_exames != NULL) {
  867. temp = *lista_exames;
  868. while(temp->next != NULL) {
  869. if(compare_dates(temp->dados.data, hoje)==-1) {
  870. if(temp->previous == NULL) {
  871. *lista_exames = temp->next;
  872. free(temp);
  873. temp = *lista_exames;
  874. }
  875. else {
  876. temp->previous->next = temp->next;
  877. temp->next->previous = temp->previous;
  878. x = temp;
  879. temp = temp->next;
  880. free(x);
  881. }
  882. }
  883. else {
  884. temp = temp->next;
  885. }
  886. }
  887. if(compare_dates(temp->dados.data, hoje)==-1) {
  888. printf("olaaaa1\n");
  889. if(temp->previous == NULL) {
  890. printf("olaaaa2\n");
  891. *lista_exames = temp->next;
  892. free(temp);
  893. temp = *lista_exames;
  894. }
  895. else {
  896. (temp->previous)->next = temp->next;
  897. free(temp);
  898. }
  899. }
  900. }
  901. atualiza_ficheiros_exames(*lista_exames);
  902. }
  903.  
  904.  
  905. /*ALUNOS*/
  906.  
  907.  
  908. void criar_aluno(List **lista_alunos) {
  909. Aluno student;
  910. List temp, ant, node;
  911. char c[60],numero[60];
  912. int i, n, boolean=0;
  913. printf("Insira numero de aluno: ");
  914. getchar();
  915. gets(numero);
  916. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  917. printf("Introduza um numero\n");
  918. gets(numero);
  919. }
  920. n = atoi(numero);
  921. temp = **lista_alunos;
  922. if (temp != NULL) {
  923. do {
  924. boolean =0;
  925. while (temp->next != NULL) {
  926. if ((temp->dados).numero==n) {
  927. printf("Aluno ja existente\n");
  928. boolean = 1;
  929. }
  930. temp = temp->next;
  931. }
  932. if ((temp->dados).numero == n) {
  933. printf("Aluno ja existente\n");
  934. boolean = 1;
  935. }
  936. if(boolean == 0)
  937. student.numero = n;
  938. else {
  939. scanf("%d", &n);
  940. }
  941. } while(boolean == 1);
  942. }
  943. else {
  944. student.numero=n;
  945. }
  946. printf("Insira nome do aluno: ");
  947. gets(c);
  948. gets(c);
  949. for (i=0; i<strlen(c); i++) {
  950. student.nome[i] = c[i];
  951. }
  952. student.nome[i] = '\0';
  953.  
  954.  
  955. printf("Curso?\n");
  956. n = 0;
  957. while(n != 1 && n != 2) {
  958. printf("1.LEI\n2.LDM\n");
  959. scanf("%d", &n);
  960. if (n==1 || n ==2) {
  961. student.curso = n;
  962. }
  963. else {
  964. printf("Escolha um dos seguintes cursos\n");
  965. }
  966. }
  967. printf("Ano? ");
  968. n=0;
  969. while(n != 1 && n != 2 && n!= 3) {
  970. printf("\n1o ano\n2o Ano\n3o Ano\n");
  971. scanf("%d", &n);
  972. if (n==1 || n ==2 || n ==3) {
  973. student.ano = n;
  974. }
  975. else {
  976. printf("Escolha um dos seguintes anos\n");
  977. }
  978. }
  979.  
  980. printf("Estatuto?\n");
  981. n = 0;
  982. while(n != 1 && n != 2 && n != 3 && n != 4 && n != 5 && n != 6) {
  983. printf("1.Normal\n2.Trabalhador-Estudante\n3.Atleta\n4.Dirigente Associativo\n5.Aluno em Erasmus\n6.Outro\n");
  984. scanf("%d", &n);
  985. if (n==1 || n ==2 || n == 3 || n == 4 || n == 5 || n == 6) {
  986. student.regime = n;
  987. }
  988. else {
  989. printf("Escolha um dos seguintes Estatutos\n");
  990. }
  991. }
  992.  
  993. node = malloc(sizeof(Lista_dos_alunos));
  994. node->dados = student;
  995. node->previous = NULL;
  996. node->next = NULL;
  997. if(**lista_alunos == NULL) {
  998. **lista_alunos = node;
  999. }
  1000. else {
  1001. temp = **lista_alunos;
  1002. while(temp->next != NULL) {
  1003. ant = temp;
  1004. temp = temp->next;
  1005. }
  1006. temp->next = node;
  1007. node->previous = ant;
  1008. }
  1009. atualiza_ficheiros_alunos(**lista_alunos);
  1010. }
  1011. void print_dados(List dados) {
  1012. List temp;
  1013. temp = dados;
  1014. if(temp == NULL) {
  1015. printf("----Nenhum aluno encontrado na base de dados---\n");
  1016. }
  1017. else {
  1018. while(temp->next!=NULL) {
  1019. printf(" ");
  1020. printf("%d,", (temp->dados).numero);
  1021. printf("%s,", (temp->dados).nome);
  1022. switch((temp->dados).curso) {
  1023. case 1:
  1024. printf("LEI,");
  1025. break;
  1026. case 2:
  1027. printf("LDM,");
  1028. break;
  1029. }
  1030. printf("%dº ano, ", (temp->dados).ano);
  1031. switch((temp->dados).regime) {
  1032. case 1:
  1033. printf("Normal\n");
  1034. break;
  1035. case 2:
  1036. printf("Trabalhador-Estudante\n");
  1037. break;
  1038. case 3:
  1039. printf("Atleta\n");
  1040. break;
  1041. case 4:
  1042. printf("Dirigente Associativo\n");
  1043. break;
  1044. case 5:
  1045. printf("Aluno em Erasmus\n");
  1046. break;
  1047. case 6:
  1048. printf("Outro\n");
  1049. break;
  1050. }
  1051. temp = temp->next;
  1052. }
  1053. printf(" ");
  1054. printf("%d,", (temp->dados).numero);
  1055. printf("%s,", (temp->dados).nome);
  1056. switch((temp->dados).curso) {
  1057. case 1:
  1058. printf("LEI, ");
  1059. break;
  1060. case 2:
  1061. printf("LDM, ");
  1062. break;
  1063. }
  1064. printf("%dº ano, ", (temp->dados).ano);
  1065. switch((temp->dados).regime) {
  1066. case 1:
  1067. printf("Normal\n");
  1068. break;
  1069. case 2:
  1070. printf("Trabalhador-Estudante\n");
  1071. break;
  1072. case 3:
  1073. printf("Atleta\n");
  1074. break;
  1075. case 4:
  1076. printf("Dirigente Associativo\n");
  1077. break;
  1078. case 5:
  1079. printf("Aluno em Erasmus\n");
  1080. break;
  1081. case 6:
  1082. printf("Outro\n");
  1083. break;
  1084. }
  1085. }
  1086. }
  1087. void print_LDM(List dados) {
  1088. List temp;
  1089. temp = dados;
  1090. if(temp == NULL) {
  1091. printf("nenhum aluno de LDM encontrado na base de dados\n");
  1092. }
  1093. else {
  1094. while(temp->next!=NULL) {
  1095. if ((temp->dados).curso == 2) {
  1096. printf(" ");
  1097. printf("%d,", (temp->dados).numero);
  1098. printf("%s,", (temp->dados).nome);
  1099. printf("%d ano, ", (temp->dados).ano);
  1100. switch((temp->dados).regime) {
  1101. case 1:
  1102. printf("Normal");
  1103. break;
  1104. case 2:
  1105. printf("Trabalhador-Estudante");
  1106. break;
  1107. case 3:
  1108. printf("Atleta");
  1109. break;
  1110. case 4:
  1111. printf("Dirigente Associativo");
  1112. break;
  1113. case 5:
  1114. printf("Aluno em Erasmus");
  1115. break;
  1116. case 6:
  1117. printf("Outro");
  1118. break;
  1119. }
  1120. }
  1121. temp = temp->next;
  1122. }
  1123. if ((temp->dados).curso == 2) {
  1124. printf(" ");
  1125. printf("%d,", (temp->dados).numero);
  1126. printf("%s,", (temp->dados).nome);
  1127. printf("%d ano, ", (temp->dados).ano);
  1128. switch((temp->dados).regime) {
  1129. case 1:
  1130. printf("Normal");
  1131. break;
  1132. case 2:
  1133. printf("Trabalhador-Estudante");
  1134. break;
  1135. case 3:
  1136. printf("Atleta");
  1137. break;
  1138. case 4:
  1139. printf("Dirigente Associativo");
  1140. break;
  1141. case 5:
  1142. printf("Aluno em Erasmus");
  1143. break;
  1144. case 6:
  1145. printf("Outro");
  1146. break;
  1147. }
  1148. }
  1149. }
  1150. }
  1151. void print_LEI(List dados) {
  1152. List temp;
  1153. temp = dados;
  1154. if(temp == NULL) {
  1155. printf("nenhum aluno de LEI encontrado na base de dados\n");
  1156. }
  1157. else {
  1158. while(temp->next!=NULL) {
  1159. if ((temp->dados).curso == 1) {
  1160. printf(" ");
  1161. printf("%d,", (temp->dados).numero);
  1162. printf("%s,", (temp->dados).nome);
  1163. printf("%d ano, ", (temp->dados).ano);
  1164. switch((temp->dados).regime) {
  1165. case 1:
  1166. printf("Normal\n");
  1167. break;
  1168. case 2:
  1169. printf("Trabalhador-Estudante");
  1170. break;
  1171. case 3:
  1172. printf("Atleta");
  1173. break;
  1174. case 4:
  1175. printf("Dirigente Associativo");
  1176. break;
  1177. case 5:
  1178. printf("Aluno em Erasmus");
  1179. break;
  1180. case 6:
  1181. printf("Outro");
  1182. break;
  1183. }
  1184. }
  1185. temp = temp->next;
  1186. }
  1187. if ((temp->dados).curso == 1) {
  1188. printf(" ");
  1189. printf("%d,", (temp->dados).numero);
  1190. printf("%s,", (temp->dados).nome);
  1191. printf("%d ano, ", (temp->dados).ano);
  1192. switch((temp->dados).regime) {
  1193. case 1:
  1194. printf("Normal\n");
  1195. break;
  1196. case 2:
  1197. printf("Trabalhador-Estudante");
  1198. break;
  1199. case 3:
  1200. printf("Atleta");
  1201. break;
  1202. case 4:
  1203. printf("Dirigente Associativo");
  1204. break;
  1205. case 5:
  1206. printf("Aluno em Erasmus");
  1207. break;
  1208. case 6:
  1209. printf("Outro");
  1210. break;
  1211. }
  1212. }
  1213. }
  1214. }
  1215. void editar_alunos(List **lista_alunos) {
  1216. int num, i;
  1217. List temp = NULL;
  1218. List t = NULL;
  1219. temp = **lista_alunos;
  1220. char numero[30];
  1221. while(t==NULL) {
  1222. if (temp != NULL) {
  1223. printf("Introduza o numero do estudante que pretende modificar: ");
  1224. getchar();
  1225. gets(numero);
  1226. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  1227. printf("Introduza um numero\n");
  1228. gets(numero);
  1229. }
  1230. num = atoi(numero);
  1231. while (temp->next != NULL) {
  1232.  
  1233. if ((temp->dados).numero == num) {
  1234.  
  1235. t = temp;
  1236. }
  1237. temp = temp->next;
  1238. }
  1239. if ((temp->dados).numero == num) {
  1240. t = temp;
  1241. }
  1242. }
  1243. if (t == NULL) {
  1244. printf("Aluno nao encontrado na base de dados\n");
  1245. }
  1246. }
  1247. char str[50];
  1248. printf("%d\n", (t->dados).numero);
  1249. printf("Novo numero (enter para nao alterar): ");
  1250. gets(str);
  1251. if (str[0] != '\0') {
  1252. (t->dados).numero = 0;
  1253. for (i = 0; i < strlen(str); i++) {
  1254. (t->dados).numero += pot10((str[i] - '0'), (strlen(str) - i - 1));
  1255. }
  1256. printf("Novo numero: %d\n", (t->dados).numero);
  1257.  
  1258. }
  1259. else {
  1260. printf("Numero %d nao alterado.\n", (t->dados).numero);
  1261. }
  1262. printf("%s\n", (t->dados).nome);
  1263. printf("Novo nome (enter para nao alterar): ");
  1264. gets(str);
  1265. if (str[0] != '\0') {
  1266. for (i = 0; i < strlen(str); i++) {
  1267. (t->dados).nome[i] = str[i];
  1268. }
  1269. (t->dados).nome[i] = '\0';
  1270. printf("Novo nome: %s\n", (t->dados).nome);
  1271. } else {
  1272. printf("Nome %s nao alterado.\n", (t->dados).nome);
  1273. }
  1274. char str_2;
  1275. printf("Curso: ");
  1276. switch ((t->dados).curso) {
  1277. case 1:
  1278. printf("LEI\n");
  1279. break;
  1280. case 2:
  1281. printf("LDM\n");
  1282. break;
  1283. }
  1284. while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
  1285. printf("Insira o novo curso (enter para nao alterar): \n1:LEI\n2:LDM\n");
  1286. str_2 = getchar();
  1287. if (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
  1288. printf("Introduza 1 ou 2: ");
  1289. }
  1290. }
  1291. if (str_2 != '\n') {
  1292. (t->dados).curso = str_2 - '0';
  1293. printf("Novo curso: ");
  1294. switch ((t->dados).curso) {
  1295. case 1:
  1296. printf("LEI\n");
  1297. break;
  1298. case 2:
  1299. printf("LDM\n");
  1300. break;
  1301. }
  1302. }
  1303. else {
  1304. printf("Curso nao alterado.\n");
  1305. }
  1306. printf("%dº ano\n", (t->dados).ano);
  1307.  
  1308. str_2='0';
  1309. getchar();
  1310. while (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  1311. printf("Insira o novo ano (enter para nao alterar): ");
  1312. str_2 = getchar();
  1313. if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  1314. printf("Ano invalido.\n");
  1315. }
  1316. }
  1317. if (str_2 != '\n') {
  1318. (t->dados).ano = str_2 - '0';
  1319. printf("Novo ano: %dº ano\n", (t->dados).ano);
  1320. }
  1321. else {
  1322. printf("Ano nao alterado.\n");
  1323. }
  1324.  
  1325.  
  1326. str_2 = '0';
  1327. printf("Regime: ");
  1328. getchar();
  1329. switch ((t->dados).regime) {
  1330. case 1:
  1331. printf("Normal\n");
  1332. break;
  1333. case 2:
  1334. printf("Trabalhador-Estudante");
  1335. break;
  1336. case 3:
  1337. printf("Atleta");
  1338. break;
  1339. case 4:
  1340. printf("Dirigente Associativo");
  1341. break;
  1342. case 5:
  1343. printf("Aluno em Erasmus");
  1344. break;
  1345. case 6:
  1346. printf("Outro");
  1347. break;
  1348. }
  1349. while(str_2 !='1' && str_2 !='2' && str_2 !='3' && str_2 !='4' && str_2 !='5' && str_2 !='6' && str_2 != '\n') {
  1350. 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): ");
  1351. str_2=getchar();
  1352. if(str_2 !='1' && str_2 !='2' && str_2 !='3' && str_2 !='4' && str_2 !='5' && str_2 !='6' && str_2 != '\n') {
  1353. printf("Regime invalido.\n");
  1354. }
  1355. }
  1356. if(str_2 !='\n') {
  1357. (t->dados).regime=str_2 -'0';
  1358. }
  1359. else {
  1360. printf("Regime nao alterado.\n");
  1361. }
  1362. atualiza_ficheiros_alunos(**lista_alunos);
  1363. }
  1364. void apaga_alunos(List **lista_alunos) {
  1365. int num;
  1366. printf("Desejar apagar que aluno? (introduzir nº de estudante)\n");
  1367. scanf("%d",&num);
  1368. List temp=NULL, t=NULL;
  1369. List t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
  1370.  
  1371. //printar a lista para ver os alunos
  1372.  
  1373.  
  1374. temp = **lista_alunos;
  1375. while(temp->next != NULL) {
  1376. if((temp->dados).numero == num) {
  1377. t = temp;
  1378. }
  1379. temp = temp->next;
  1380. }
  1381. if((temp->dados).numero == num) {
  1382. t = temp;
  1383. }
  1384. if (t == NULL) {
  1385. printf("aluno nao encontrado\n");
  1386. apaga_alunos(lista_alunos);
  1387. }
  1388. else {
  1389. if (t->previous == NULL) {
  1390. **lista_alunos = t -> next;
  1391. }
  1392. else {
  1393. t1 = t->previous;
  1394. t1->next = t->next;
  1395. }
  1396. free(t);
  1397. }
  1398. atualiza_ficheiros_alunos(**lista_alunos);
  1399. printf("\nAluno %d apagado.",num);
  1400. }
  1401.  
  1402. /*DISCIPLINAS*/
  1403. void print_disciplinas(List_d dados) {
  1404. List_d temp;
  1405. temp = dados;
  1406. if(temp == NULL) {
  1407. printf("nenhuma disciplina encontrada na base de dados\n");
  1408. }
  1409. else {
  1410. while(temp->next!=NULL) {
  1411. printf(" ");
  1412. printf("%d,", (temp->dados).codigo);
  1413. printf("%s,", (temp->dados).nome);
  1414. printf("docente: %s,",(temp->dados).docente);
  1415. printf("curso: ");
  1416. switch ((temp->dados).curso) {
  1417. case 1:
  1418. printf("LEI, ");
  1419. break;
  1420. case 2:
  1421. printf("LDM, ");
  1422. break;
  1423. }
  1424. printf("%dº ano, ", (temp->dados).ano);
  1425. printf("%dº semestre \n", (temp->dados).semestre);
  1426. printf("Alunos inscritos: \n");
  1427. print_dados(temp->students);
  1428. printf("---------------------------------");
  1429. printf("\n");
  1430. temp = temp->next;
  1431. }
  1432. printf(" ");
  1433. printf("%d,", (temp->dados).codigo);
  1434. printf("%s,", (temp->dados).nome);
  1435. printf("docente: %s,",(temp->dados).docente);
  1436. printf("curso: ");
  1437. switch ((temp->dados).curso) {
  1438. case 1:
  1439. printf("LEI, ");
  1440. break;
  1441. case 2:
  1442. printf("LDM, ");
  1443. break;
  1444. }
  1445. printf("%dº ano, ", (temp->dados).ano);
  1446. printf("%dº semestre \n", (temp->dados).semestre);
  1447. printf("Alunos inscritos: \n");
  1448. print_dados(temp->students);
  1449. printf("---------------------------------");
  1450. printf("\n");
  1451. }
  1452. }
  1453. void criar_disciplinas(List_d **lista_disciplinas) {
  1454. Disciplina subject;
  1455. List_d temp, ant, node;
  1456. char c[60],numero[30];
  1457. int n,boolean=0;
  1458. printf("Insira o código da disciplina:\n");
  1459. getchar();
  1460. gets(numero);
  1461. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  1462. printf("Introduza um numero\n");
  1463. gets(numero);
  1464. }
  1465. n = atoi(numero);
  1466. temp = **lista_disciplinas;
  1467. if (temp != NULL) {
  1468. do {
  1469. boolean =0;
  1470. while (temp->next != NULL) {
  1471. if ((temp->dados).codigo==n) {
  1472. printf("Disciplina ja existente\n");
  1473. boolean = 1;
  1474. }
  1475. temp = temp->next;
  1476. }
  1477. if ((temp->dados).codigo == n) {
  1478. printf("Disciplina ja existente\n");
  1479. boolean = 1;
  1480. }
  1481. if(boolean == 0)
  1482. subject.codigo = n;
  1483. else {
  1484. scanf("%d", &n);
  1485. }
  1486. } while(boolean == 1);
  1487. }
  1488. else {
  1489. subject.codigo=n;
  1490. }
  1491. printf("Insira nome da disciplina: ");
  1492. gets(c);
  1493. gets(c);
  1494. strcpy(subject.nome,c);
  1495.  
  1496. printf("Insira o nome do docente da disciplina: ");
  1497. gets(c);
  1498. strcpy(subject.docente,c);
  1499.  
  1500. printf("Disciplina de que curso?\n");
  1501. n = 0;
  1502. while(n != 1 && n != 2) {
  1503. printf("1.LEI\n2.LDM\n");
  1504. scanf("%d", &n);
  1505. if (n==1 || n ==2) {
  1506. subject.curso=n;
  1507. }
  1508. else {
  1509. printf("Escolha um dos seguintes cursos.\n");
  1510. }
  1511. }
  1512. printf("Disciplina de que ano?\n");
  1513. n=0;
  1514. while(n != 1 && n != 2 && n!= 3) {
  1515. printf("1o ano\n2o Ano\n3o Ano\n");
  1516. scanf("%d", &n);
  1517. if (n==1 || n ==2 || n ==3) {
  1518. subject.ano = n;
  1519. }
  1520. else {
  1521. printf("Escolha um dos seguintes anos\n");
  1522. }
  1523. }
  1524. printf("Semestre?\n");
  1525. scanf("%d" ,&n);
  1526. while(n != 1 && n != 2) {
  1527. printf("Escolha um dos seguintes cursos.\n");
  1528. printf("1o semestre\n2o semestre\n");
  1529. scanf("%d", &n);
  1530.  
  1531. }
  1532. subject.semestre=n;
  1533.  
  1534. node = malloc(sizeof(Lista_das_disciplinas));
  1535. node->dados = subject;
  1536. node->students = NULL;
  1537. node->previous = NULL;
  1538. node->next = NULL;
  1539. if(**lista_disciplinas == NULL) {
  1540. **lista_disciplinas = node;
  1541. }
  1542. else {
  1543. temp = **lista_disciplinas;
  1544. while(temp->next != NULL) {
  1545. ant = temp;
  1546. temp = temp->next;
  1547. }
  1548. temp->next = node;
  1549. node->previous = ant;
  1550. }
  1551. atualiza_ficheiros_disciplinas(**lista_disciplinas);
  1552. }
  1553. void edita_disciplinas(List_d **lista_disciplinas) {
  1554. int num, x;
  1555. char numero[20];
  1556. List_d temp,t = NULL;
  1557. temp = **lista_disciplinas;
  1558. while(t== NULL) {
  1559. printf("DISCIPLINAS:\n\n");
  1560. print_disciplinas(**lista_disciplinas);
  1561. printf("Introduza o código da disciplina que pretende modificar que pretende modificar: \n");
  1562. getchar();
  1563. gets(numero);
  1564. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  1565. printf("introduza um numero\n");
  1566. gets(numero);
  1567. }
  1568. num = atoi(numero);
  1569. if (temp != NULL) {
  1570. while(temp->next != NULL) {
  1571. if((temp->dados).codigo == num) {
  1572. t = temp;
  1573. }
  1574. temp = temp->next;
  1575. }
  1576. if((temp->dados).codigo == num) {
  1577. t = temp;
  1578. }
  1579. }
  1580.  
  1581. if(t == NULL) {
  1582. printf("Disciplina nao encontrado na base de dados\n");
  1583. }
  1584. }
  1585.  
  1586. char str[50];
  1587. printf("%s\n",(t->dados).nome);
  1588. printf("Novo nome: (enter para nao alterar)");
  1589. getchar();
  1590. gets(str);
  1591. if(str[0]!='\0') {
  1592. strcpy((t->dados).nome,str);
  1593. printf("Novo nome: %s\n",(t->dados).nome);
  1594. }
  1595. else {
  1596. printf("Nome %s nao alterado \n",(t->dados).nome);
  1597. }
  1598. char str_2;
  1599. printf("CURSO: ");
  1600. switch ((t->dados).curso) {
  1601. case 1:
  1602. printf("LEI\n");
  1603. break;
  1604. case 2:
  1605. printf("LDM\n");
  1606. break;
  1607. }
  1608. x = 0;
  1609. while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
  1610. printf("Insira o novo curso:(enter para nao alterar)\n1:LEI\n2:LDM\n");
  1611. str_2 = getchar();
  1612. if (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
  1613. printf("introduza 1 ou 2\n");
  1614. }
  1615. }
  1616.  
  1617. if (str_2 != '\n') {
  1618. (t->dados).curso = str_2 - '0';
  1619. printf("novo curso: ");
  1620. switch ((t->dados).curso) {
  1621. case 1:
  1622. printf("LEI\n");
  1623. break;
  1624. case 2:
  1625. printf("LDM\n");
  1626. break;
  1627. }
  1628. }
  1629. else {
  1630. printf("Curso nao alterado\n");
  1631. x = 1;
  1632. }
  1633. printf("%d ano\n", (t->dados).ano);
  1634.  
  1635. str_2='0';
  1636. while (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  1637. if(x == 1)
  1638. getchar();
  1639. printf("Insira o novo ano:(enter para nao alterar)\n");
  1640. str_2 = getchar();
  1641. if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  1642. printf("Ano invalido\n");
  1643. }
  1644. }
  1645. x = 0;
  1646. if (str_2 != '\n') {
  1647. (t->dados).ano = str_2 - '0';
  1648. printf("Novo ano: %d ano\n", (t->dados).ano);
  1649. }
  1650. else {
  1651. x =1;
  1652. printf("Ano nao alterado\n");
  1653. }
  1654. printf("%d semestre\n",(t->dados).semestre);
  1655. str_2 = '0';
  1656. while (str_2 != '1' && str_2 != '2' && str_2 != '\n') {
  1657. if(x ==1)
  1658. getchar();
  1659. printf("Insira o novo semestre:(enter para nao alterar)\n");
  1660. str_2 = getchar();
  1661. if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  1662. printf("Semestre invalido\n");
  1663. }
  1664. }
  1665. if (str_2 != '\n') {
  1666. (t->dados).semestre = str_2 - '0';
  1667. printf("Novo Semestre: %do semestre\n", (t->dados).semestre);
  1668. }
  1669. else {
  1670. printf("Semestre nao alterado\n");
  1671. }
  1672. printf("%s\n",(t->dados).docente);
  1673. printf("Novo nome: (enter para nao alterar)");
  1674. getchar();
  1675. gets(str);
  1676. if(str[0]!='\0') {
  1677. strcpy((t->dados).docente,str);
  1678. printf("Novo nome: %s\n",(t->dados).docente);
  1679. }
  1680. else {
  1681. printf("Nome %s nao alterado \n",(t->dados).docente);
  1682. }
  1683. atualiza_ficheiros_disciplinas(**lista_disciplinas);
  1684. }
  1685.  
  1686.  
  1687. void elimina_disciplinas(List_d **lista_disciplinas) {
  1688. int num;
  1689. printf("Desejar apagar que disciplina? (introduzir código)\n");
  1690. scanf("%d",&num);
  1691. List_d temp=NULL, t=NULL;
  1692. List_d t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
  1693.  
  1694. //printar a lista para ver os alunos
  1695.  
  1696.  
  1697. temp = **lista_disciplinas;
  1698. while(temp->next != NULL) {
  1699. if((temp->dados).codigo == num) {
  1700. t = temp;
  1701. }
  1702. temp = temp->next;
  1703. }
  1704. if((temp->dados).codigo == num) {
  1705. t = temp;
  1706. }
  1707. if (t == NULL) {
  1708. printf("disciplina nao encontrada\n");
  1709. elimina_disciplinas(lista_disciplinas);
  1710. }
  1711. else {
  1712. if (t->previous == NULL) {
  1713. **lista_disciplinas = t -> next;
  1714. }
  1715. else {
  1716. t1 = t->previous;
  1717. t1->next = t->next;
  1718. }
  1719. free(t);
  1720. }
  1721.  
  1722. atualiza_ficheiros_disciplinas(**lista_disciplinas);
  1723. printf("\nDisciplina %d apagada.",num);
  1724. }
  1725.  
  1726. void inscrever_alunos_disciplinas(List lista_alunos, List_d **lista_disciplinas) {
  1727. FILE *fich;
  1728. char nome_fich[100];
  1729. int opcao, i, n;
  1730. List temp = NULL, escolhido, node;
  1731. List_d temp2 = NULL, escolhida;
  1732. if(lista_alunos == NULL || lista_disciplinas == NULL) {
  1733. if(lista_alunos == NULL) {
  1734. printf("nenhum aluno encontrado na base de dados");
  1735. }
  1736. if(lista_disciplinas == NULL) {
  1737. printf("nenhuma disciplina encontrada na base de dados");
  1738. }
  1739. }
  1740. else {
  1741. printf("Escolha uma das opçoes:\n");
  1742. printf("1: Inscrever aluno em várias disciplinas;\n");
  1743. printf("2: Inscrever vários alunos numa disciplina\n");
  1744. scanf("%d", &opcao);
  1745. if(opcao ==1) {
  1746. escolhido = NULL;
  1747. while(escolhido == NULL) {
  1748. printf("Introduza o numero do aluno que pretende inscrever:\n");
  1749. scanf("%d", &n);
  1750. temp = lista_alunos;
  1751. while(temp->next != NULL) {
  1752. if((temp->dados).numero == n) {
  1753. escolhido = temp;
  1754. }
  1755. temp = temp->next;
  1756. }
  1757. if((temp->dados).numero == n) {
  1758. escolhido = temp;
  1759. }
  1760. if(escolhido == NULL) {
  1761. printf("aluno não encontrado");
  1762. }
  1763. }
  1764. printf("Introduza os codigos das disciplinas a que pretende inscrever o aluno %s (0 para terminar):\n", (escolhido->dados).nome);
  1765. n = 1;
  1766. while(n!=0) {
  1767. scanf("%d", &n);
  1768. if(n!=0) {
  1769. escolhida = NULL;
  1770. while(escolhida == NULL) {
  1771. temp2 = **lista_disciplinas;
  1772. while(temp2->next != NULL) {
  1773. if((temp2->dados).codigo == n) {
  1774. escolhida = temp2;
  1775. }
  1776. temp2 = temp2->next;
  1777. }
  1778. if((temp2->dados).codigo == n) {
  1779. escolhida = temp2;
  1780. }
  1781. if(escolhida == NULL) {
  1782. printf ( "disciplina nao encontrada!");
  1783. }
  1784. }
  1785. for (i = 0; i<strlen((escolhida->dados).nome); i++) {
  1786. nome_fich[i] = (escolhida->dados).nome[i];
  1787. }
  1788. nome_fich[i++] = '.';
  1789. nome_fich[i++] = 't';
  1790. nome_fich[i++] = 'x';
  1791. nome_fich[i++] = 't';
  1792. nome_fich[i] = '\0';
  1793. fich = fopen(nome_fich, "a");
  1794. fprintf(fich, "%d;", (escolhido->dados).numero);
  1795. node = malloc(sizeof(Lista_dos_alunos));
  1796. (node->dados).numero = (escolhido->dados).numero;
  1797. for(i=0; i<strlen((escolhido->dados).nome); i++) {
  1798. (node->dados).nome[i] = (escolhido->dados).nome[i];
  1799. }
  1800. (node->dados).curso = (escolhido->dados).curso;
  1801. (node->dados).ano = (escolhido->dados).ano;
  1802. (node->dados).regime = (escolhido->dados).regime;
  1803. temp = (escolhida->students);
  1804. node->next = NULL;
  1805. if (escolhida->students == NULL) {
  1806. escolhida->students = node;
  1807. node->previous = NULL;
  1808. }
  1809. else {
  1810. temp = (escolhida->students);
  1811. while(temp->next != NULL) {
  1812. temp = temp->next;
  1813. }
  1814. node->previous = temp;
  1815. temp->next = node;
  1816. }
  1817. fclose(fich);
  1818. }
  1819. }
  1820. }
  1821.  
  1822. else if(opcao==2) {
  1823. escolhida = NULL;
  1824. while(escolhida ==NULL) {
  1825. printf("Introduza o codigo da disciplina em que pretende inscrever os alunos\n");
  1826. scanf("%d", &n);
  1827. temp2 = **lista_disciplinas;
  1828. while (temp2->next != NULL) {
  1829. if ((temp2->dados).codigo == n) {
  1830. escolhida = temp2;
  1831. }
  1832. temp2 = temp2->next;
  1833. }
  1834. if ((temp2->dados).codigo == n) {
  1835. escolhida = temp2;
  1836. }
  1837. if(escolhida == NULL) {
  1838. printf("disciplina nao encontrada");
  1839. }
  1840. }
  1841. strcpy(nome_fich, (escolhida->dados).nome);
  1842. i = strlen(escolhida->dados.nome);
  1843. nome_fich[i++] = '.';
  1844. nome_fich[i++] = 't';
  1845. nome_fich[i++] = 'x';
  1846. nome_fich[i++] = 't';
  1847. nome_fich[i++] = '\0';
  1848. fich = fopen(nome_fich, "a");
  1849. printf("Introduza os numeros dos estudantes que prende inscrever na disciplina %s (0 para terminar):\n", (escolhida->dados).nome);
  1850. n=1;
  1851. while (n != 0) {
  1852. scanf("%d", &n);
  1853. if (n!=0) {
  1854. escolhido=NULL;
  1855. temp = lista_alunos;
  1856. while(temp->next != NULL) {
  1857. if(n == (temp->dados).numero) {
  1858. escolhido = temp;
  1859. }
  1860. temp = temp->next;
  1861. }
  1862. if(n == (temp->dados).numero) {
  1863. escolhido = temp;
  1864. }
  1865. if(escolhido == NULL) {
  1866. printf("aluno nao encontrado!");
  1867. n =0;
  1868. }
  1869. else {
  1870. fprintf(fich, "%d;", (escolhido->dados).numero);
  1871. node = malloc(sizeof(Lista_dos_alunos));
  1872. (node->dados).numero = (escolhido->dados).numero;
  1873. strcpy((node->dados).nome, (escolhido->dados).nome);
  1874. (node->dados).curso = (escolhido->dados).curso;
  1875. (node->dados).ano = (escolhido->dados).ano;
  1876. (node->dados).regime = (escolhido->dados).regime;
  1877. node->next = NULL;
  1878. node->previous = NULL;
  1879. if (escolhida->students == NULL) {
  1880. escolhida->students = node;
  1881. }
  1882. else {
  1883. temp = (escolhida->students);
  1884. while(temp->next != NULL) {
  1885. temp = temp->next;
  1886. }
  1887. node->previous = temp;
  1888. temp->next = node;
  1889. }
  1890. }
  1891. }
  1892. }
  1893. fclose(fich);
  1894. }
  1895. }
  1896. }
  1897.  
  1898. /*EXAMES*/
  1899. void print_exames(List_e dados) {
  1900. List_e temp;
  1901. temp = dados;
  1902. List_s temp_s;
  1903. if(temp == NULL) {
  1904. printf("nenhum exame encontrado na base de dados\n");
  1905. }
  1906. else {
  1907. while(temp->next != NULL) {
  1908. printf("-->");
  1909. printf("%d,", (temp->dados).codigo);
  1910. printf("%d,", (temp->dados).disciplina);
  1911. switch((temp->dados).tipo_exame) {
  1912. case 1:
  1913. printf("Epoca Normal,");
  1914. break;
  1915. case 2:
  1916. printf("Epoca Recurso,");
  1917. break;
  1918. case 3:
  1919. printf("Epoca Especial,");
  1920. break;
  1921. }
  1922. temp_s = (temp->dados).sala;
  1923. while(temp_s->next != NULL) {
  1924. printf("%s,",temp_s->sala);
  1925. temp_s = temp_s->next;
  1926. }
  1927. printf("%s,",temp_s->sala);
  1928. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  1929. printf("%s,",(temp->dados).hora_inicio);
  1930. printf("%s\n",(temp->dados).hora_fim);
  1931. printf("alunos inscritos:\n");
  1932. print_dados(temp->students);
  1933. temp = temp->next;
  1934. }
  1935. printf("-->");
  1936. printf("%d,", (temp->dados).codigo);
  1937. printf("%d,", (temp->dados).disciplina);
  1938. switch((temp->dados).tipo_exame) {
  1939. case 1:
  1940. printf("Epoca Normal,");
  1941. break;
  1942. case 2:
  1943. printf("Epoca Recurso,");
  1944. break;
  1945. case 3:
  1946. printf("Epoca Especial,");
  1947. break;
  1948. }
  1949. temp_s = (temp->dados).sala;
  1950. while(temp_s->next != NULL) {
  1951. printf("%s,",temp_s->sala);
  1952. temp_s = temp_s->next;
  1953. }
  1954. printf("%s,",temp_s->sala);
  1955. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  1956. printf("%s,",(temp->dados).hora_inicio);
  1957. printf("%s\n",(temp->dados).hora_fim);
  1958. printf("alunos inscritos:\n");
  1959. print_dados(temp->students);
  1960.  
  1961. }
  1962. }
  1963.  
  1964. int verifica_sala(List_e lista_exames, List_e node, char c[], List_e *sobreposto) {
  1965. List_s temp_sala = NULL;
  1966. List_e temp = lista_exames;
  1967. int verifica = 0, hora_i_t, minuto_i_t, hora_f_t, minuto_f_t, hora_i, minuto_i, hora_f, minuto_f;
  1968. sscanf((node->dados).hora_inicio, "%d[^:]", &hora_i);
  1969. sscanf((node->dados).hora_inicio, "%d", &minuto_i);
  1970. sscanf((node->dados).hora_fim, "%d[^:]", &hora_f);
  1971. sscanf((node->dados).hora_fim, "%d", &minuto_f);
  1972. verifica = 0;
  1973. while (temp->next != NULL) {
  1974. temp_sala = (temp->dados).sala;
  1975. while (temp_sala->next != NULL) {
  1976. if (strcmp(temp_sala->sala, c) == 0) {
  1977. 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)) {
  1978. sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
  1979. sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
  1980. sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
  1981. sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
  1982. 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))) {
  1983. verifica = 1;
  1984. *sobreposto = temp;
  1985. }
  1986. }
  1987. }
  1988. temp_sala = temp_sala->next;
  1989. }
  1990. if (strcmp(temp_sala->sala, c) == 0) {
  1991. 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)) {
  1992. sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
  1993. sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
  1994. sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
  1995. sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
  1996. 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))) {
  1997. verifica = 1;
  1998. *sobreposto = temp;
  1999. }
  2000. }
  2001. }
  2002. temp = temp->next;
  2003. }
  2004. temp_sala = (temp->dados).sala;
  2005. while (temp_sala->next != NULL) {
  2006. if (strcmp(temp_sala->sala, c) == 0) {
  2007. 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)) {
  2008. sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
  2009. sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
  2010. sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
  2011. sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
  2012. 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))) {
  2013. verifica = 1;
  2014. *sobreposto = temp;
  2015. }
  2016. }
  2017. }
  2018. temp_sala = temp_sala->next;
  2019. }
  2020. if (strcmp(temp_sala->sala, c) == 0) {
  2021. 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)) {
  2022. sscanf((temp->dados).hora_inicio, "%d[^:]", &hora_i_t);
  2023. sscanf((temp->dados).hora_inicio, "%d", &minuto_i_t);
  2024. sscanf((temp->dados).hora_fim, "%d[^:]", &hora_f_t);
  2025. sscanf((temp->dados).hora_fim, "%d", &minuto_f_t);
  2026. 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))) {
  2027. verifica = 1;
  2028. *sobreposto = temp;
  2029. }
  2030. }
  2031. }
  2032. return verifica;
  2033. }
  2034. void inscrever_alunos_exames(List_e **lista_exames, List lista_alunos) {
  2035. FILE *exame, *exame_a;
  2036. char nome_fich[60], c[10];
  2037. int i,n,num, verifica=0, verifica_aluno;
  2038. List_e temp_exames, exame_escolhido = NULL, sobreposta;
  2039. List node_alunos, temp_alunos, aluno_escolhido = NULL;
  2040. List_s temp_sala, node_sala;
  2041. temp_alunos = lista_alunos;
  2042. temp_exames = **lista_exames;
  2043. if(temp_alunos == NULL) {
  2044. printf("Nenhum aluno encontrado na base de dados");
  2045. }
  2046. else if(temp_exames == NULL) {
  2047. printf("Nenhum exame encontrado na base de dados");
  2048. }
  2049. //(aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3)
  2050. // (exame_escolhido->dados).tipo_exame != 3)
  2051.  
  2052. else {
  2053. print_dados(lista_alunos);
  2054. printf("Qual o aluno que deseja inscrever? (insira o número de aluno)\n");
  2055. scanf("%d", &n);
  2056. while(temp_alunos->next != NULL) {
  2057. if(temp_alunos->dados.numero == n) {
  2058. aluno_escolhido = temp_alunos;
  2059. }
  2060. temp_alunos = temp_alunos->next;
  2061. }
  2062. if(temp_alunos->dados.numero == n) {
  2063. aluno_escolhido = temp_alunos;
  2064. }
  2065. if(aluno_escolhido == NULL) {
  2066. printf("aluno nao encontrado na base de dados");
  2067. }
  2068. else {
  2069. print_exames(**lista_exames);
  2070. printf("Em que exame deseja inscrever o aluno %s?(insira o codigo)", (aluno_escolhido->dados).nome);
  2071. scanf("%d", &n);
  2072. while(temp_exames->next !=NULL) {
  2073. if(temp_exames->dados.codigo == n) {
  2074. if((temp_exames->dados).tipo_exame == 3) {
  2075. if((aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3) {
  2076. verifica=1;
  2077. printf("nao pode inscrever aluno sem estatuto em epoca especial\n");
  2078. }
  2079. }
  2080. else {
  2081. exame_escolhido = temp_exames;
  2082. }
  2083. }
  2084. temp_exames = temp_exames->next;
  2085. }
  2086. if(temp_exames->dados.codigo == n) {
  2087. if((temp_exames->dados).tipo_exame == 3) {
  2088. if((aluno_escolhido->dados).regime != 2 || (aluno_escolhido->dados).regime != 3 || (aluno_escolhido->dados).regime != 4 || (aluno_escolhido->dados).ano != 3) {
  2089. verifica=1;
  2090. printf("nao pode inscrever aluno sem estatuto em epoca especial\n\n");
  2091. }
  2092. }
  2093. else {
  2094. exame_escolhido = temp_exames;
  2095. }
  2096. }
  2097. if(exame_escolhido == NULL && verifica ==0) {
  2098. printf("exame nao encontrado na base de dados");
  2099. }
  2100. else if(verifica==1) {
  2101. printf(" ");
  2102. }
  2103. else {
  2104. node_alunos = malloc(sizeof(Lista_dos_alunos));
  2105. node_alunos->dados.numero = aluno_escolhido->dados.numero;
  2106. strcpy(node_alunos->dados.nome, aluno_escolhido->dados.nome);
  2107. node_alunos->dados.ano = aluno_escolhido->dados.ano;
  2108. node_alunos->dados.curso = aluno_escolhido->dados.curso;
  2109. node_alunos->dados.regime = aluno_escolhido->dados.regime;
  2110. node_alunos->next = NULL;
  2111. node_alunos->previous = NULL;
  2112. if(exame_escolhido->students == NULL) {
  2113. exame_escolhido->students = node_alunos;
  2114. }
  2115. else {
  2116. num = 0;
  2117. temp_alunos = exame_escolhido->students;
  2118. verifica_aluno = 0;
  2119. if(temp_alunos == NULL) {
  2120. temp_alunos->next = node_alunos;
  2121. node_alunos->previous = temp_alunos;
  2122. }
  2123. else {
  2124. while(temp_alunos->next != NULL) {
  2125. if(temp_alunos->dados.numero == aluno_escolhido->dados.numero) {
  2126. printf("aluno ja inscrito");
  2127. verifica_aluno = 1;
  2128. }
  2129. num++;
  2130. temp_alunos = temp_alunos->next;
  2131. }
  2132. if(temp_alunos->dados.numero == aluno_escolhido->dados.numero) {
  2133. printf("aluno ja inscrito");
  2134. verifica_aluno = 1;
  2135. }
  2136. num++;
  2137. if(verifica_aluno == 0) {
  2138. while(temp_alunos->next != NULL) {
  2139. temp_alunos = temp_alunos->next;
  2140. }
  2141. temp_alunos->next = node_alunos;
  2142. node_alunos->previous = temp_alunos;
  2143. }
  2144. }
  2145. }
  2146.  
  2147. sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
  2148. i = strlen(nome_fich);
  2149. nome_fich[i++] = 'a';
  2150. nome_fich[i++] = '.';
  2151. nome_fich[i++] = 't';
  2152. nome_fich[i++] = 'x';
  2153. nome_fich[i++] = 't';
  2154. nome_fich[i] = '\0';
  2155. exame_a = fopen(nome_fich, "w");
  2156. temp_alunos = exame_escolhido->students;
  2157. while(temp_alunos->next != NULL) {
  2158. fprintf(exame_a, "%d,", temp_alunos->dados.numero);
  2159. temp_alunos = temp_alunos->next;
  2160. }
  2161. fprintf(exame_a, "%d,", temp_alunos->dados.numero);
  2162. fclose(exame_a);
  2163. if((num)%5 == 0 && verifica_aluno == 0) {
  2164. printf("terá de escolher uma nova sala");
  2165. getchar();
  2166. gets(c);
  2167. verifica = verifica_sala(**lista_exames, exame_escolhido, c, &sobreposta);
  2168. while(verifica == 1) {
  2169. printf("SALA SOBREPOSTA COM O EXAME %d!\nterá de escolher uma nova sala", sobreposta->dados.codigo);
  2170. gets(c);
  2171. verifica = verifica_sala(**lista_exames, exame_escolhido, c, &sobreposta);
  2172. }
  2173. node_sala = malloc(sizeof(Sala));
  2174. strcpy(node_sala->sala, c);
  2175. node_sala->next = NULL;
  2176. temp_sala = exame_escolhido->dados.sala;
  2177. while(temp_sala->next!= NULL) {
  2178. temp_sala = temp_sala->next;
  2179. }
  2180. temp_sala->next = node_sala;
  2181. sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
  2182. i = strlen(nome_fich);
  2183. nome_fich[i++] = 's';
  2184. nome_fich[i++] = '.';
  2185. nome_fich[i++] = 't';
  2186. nome_fich[i++] = 'x';
  2187. nome_fich[i++] = 't';
  2188. nome_fich[i] = '\0';
  2189. exame = fopen(nome_fich, "w");
  2190. temp_sala = exame_escolhido->dados.sala;
  2191. while(temp_sala->next != NULL) {
  2192. fprintf(exame, "%s,", temp_sala->sala);
  2193. temp_sala = temp_sala->next;
  2194. }
  2195. fprintf(exame, "%s,", temp_sala->sala);
  2196. fclose(exame);
  2197. }
  2198.  
  2199.  
  2200. }
  2201.  
  2202. }
  2203.  
  2204. }
  2205. }
  2206. void desinscrever_alunos_exames(List_e **lista_exames) {
  2207. FILE *exame_a;
  2208. char nome_fich[60];
  2209. char opcao[20];
  2210. int n, i;
  2211. List_e temp_exames, exame_escolhido=NULL;
  2212. List temp_alunos, aluno_escolhido=NULL;
  2213. if(lista_exames == NULL) {
  2214. printf("Nenhum exame encontrado na base de dados");
  2215. }
  2216. else {
  2217. print_exames(**lista_exames);
  2218. printf("introduza o código do exame: ");
  2219. gets(opcao);
  2220. while(!verifica_se_numero(opcao, strlen(opcao))) {
  2221. printf("Introduza um número!\n");
  2222. gets(opcao);
  2223. }
  2224. n = atoi(opcao);
  2225. temp_exames = **lista_exames;
  2226. while(temp_exames->next !=NULL) {
  2227. if(temp_exames->dados.codigo == n) {
  2228. exame_escolhido = temp_exames;
  2229. }
  2230. temp_exames = temp_exames->next;
  2231. }
  2232. if(temp_exames->dados.codigo == n) {
  2233. exame_escolhido = temp_exames;
  2234. }
  2235. if(exame_escolhido == NULL) {
  2236. printf("exame nao encontrado na base de dados");
  2237. }
  2238. else {
  2239. if(exame_escolhido->students == NULL) {
  2240. printf("Nenhum aluno inscrito!\n");
  2241. }
  2242. else {
  2243. printf("Alunos inscritos:\n");
  2244. print_dados(exame_escolhido->students);
  2245. printf("Insira o número do aluno que pretende eliminar:\n");
  2246. gets(opcao);
  2247. while(!verifica_se_numero(opcao, strlen(opcao))) {
  2248. printf("Introduza um número!\n");
  2249. gets(opcao);
  2250. }
  2251. n = atoi(opcao);
  2252. temp_alunos = exame_escolhido->students;
  2253. while(temp_alunos->next!= NULL) {
  2254. if(temp_alunos->dados.numero == n) {
  2255. aluno_escolhido = temp_alunos;
  2256. }
  2257. temp_alunos = temp_alunos->next;
  2258. }
  2259. if(temp_alunos->dados.numero == n) {
  2260. aluno_escolhido = temp_alunos;
  2261. }
  2262. if(aluno_escolhido == NULL) {
  2263.  
  2264. }
  2265. else if(aluno_escolhido->next != NULL) {
  2266. aluno_escolhido->previous->next = aluno_escolhido->next;
  2267. }
  2268. else {
  2269. exame_escolhido->students = aluno_escolhido->next;
  2270. }
  2271. free(aluno_escolhido);
  2272. sprintf(nome_fich, "%d", (exame_escolhido->dados).codigo);
  2273. i = strlen(nome_fich);
  2274. nome_fich[i++] = 'a';
  2275. nome_fich[i++] = '.';
  2276. nome_fich[i++] = 't';
  2277. nome_fich[i++] = 'x';
  2278. nome_fich[i++] = 't';
  2279. nome_fich[i] = '\0';
  2280. exame_a = fopen(nome_fich, "w");
  2281. temp_alunos = exame_escolhido->students;
  2282. if(temp_alunos != NULL) {
  2283. while(temp_alunos->next != NULL) {
  2284. fprintf(exame_a, "%d,", temp_alunos->dados.numero);
  2285. temp_alunos = temp_alunos->next;
  2286. }
  2287. fprintf(exame_a, "%d,", temp_alunos->dados.numero);
  2288. }
  2289. }
  2290. }
  2291. }
  2292. }
  2293. void cria_exames(List_e **lista_exames, List_d lista_disciplinas) {
  2294. List_e temp, node, sobreposto;
  2295. FILE *fich, *exame;
  2296. List_s node2;
  2297. List_d temp3;
  2298. int verifica, opcao;
  2299. char c[60], nome_fich[60],numero[30];
  2300. int boolean;
  2301. int i;
  2302. node = malloc(sizeof(Lista_dos_exames));
  2303. temp = **lista_exames;
  2304. fich = fopen("lista_exames.txt", "a");
  2305. printf("Insira o codigo do exame (Identificacao)\n");
  2306. getchar();
  2307. gets(numero);
  2308. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2309. printf("Introduza um numero\n");
  2310. gets(numero);
  2311. }
  2312. i = atoi(numero);
  2313. temp = **lista_exames;
  2314. if (temp != NULL) {
  2315. do {
  2316. boolean =0;
  2317. while (temp->next != NULL) {
  2318. if ((temp->dados).codigo==i) {
  2319. printf("Exame ja existente\n");
  2320. boolean = 1;
  2321. }
  2322. temp = temp->next;
  2323. }
  2324. if ((temp->dados).codigo == i) {
  2325. printf("Exame ja existente\n");
  2326. boolean = 1;
  2327. }
  2328. if(boolean == 0)
  2329. (node->dados).codigo = i;
  2330. else {
  2331. scanf("%d", &i);
  2332. }
  2333. } while(boolean == 1);
  2334. }
  2335. else {
  2336. (node->dados).codigo = i;
  2337. }
  2338. printf("Insira o codigo da disciplina\n");
  2339. //getchar();
  2340. gets(numero);
  2341. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2342. printf("Introduza um numero\n");
  2343. gets(numero);
  2344. }
  2345. i = atoi(numero);
  2346. verifica = 0;
  2347. while(verifica == 0) {
  2348. temp3 = lista_disciplinas;
  2349. while(temp3->next != NULL) {
  2350. if((temp3->dados).codigo == i) {
  2351. verifica = 1;
  2352. (node->dados).disciplina = i;
  2353. }
  2354. temp3 = temp3->next;
  2355. }
  2356. if((temp3->dados).codigo == i) {
  2357. verifica = 1;
  2358. (node->dados).disciplina = i;
  2359. }
  2360. if(verifica == 0) {
  2361. printf("disciplina nao encontrada na base de dados. Insira uma disciplina válida.\n");
  2362. getchar();
  2363. gets(numero);
  2364. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2365. printf("Introduza um numero\n");
  2366. gets(numero);
  2367. }
  2368. i = atoi(numero);
  2369. }
  2370. }
  2371. numero[0]='0';
  2372. printf("Insira o tipo de exame:(1-epoca normal,2-epoca recurso,3-epoca especial)\n");
  2373. while (numero[0] != '1' && numero[0] != '2' && numero[0] != '3' && numero[0] != '\n') {
  2374.  
  2375. gets(numero);
  2376. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2377. printf("Introduza um numero\n");
  2378. gets(numero);
  2379. }
  2380. if (numero[0] != '1' && numero[0] != '2' && numero[0] != '3' && numero[0] != '\n') {
  2381. printf("Introduza 1 ou 2 ou 3\n");
  2382. }
  2383. }
  2384. i = atoi(numero);
  2385. (node->dados).tipo_exame=i;
  2386. // while((node->dados).tipo_exame != 1 && (node->dados).tipo_exame != 2 && (node->dados).tipo_exame != 3) {
  2387. // printf("insira um numero valido:\n");
  2388. // scanf("%d", &(node->dados).tipo_exame);
  2389. // }
  2390. printf("Insira a data do exame:(dia/mes/aaaa)\n");
  2391. scanf("%d/%d/%d", &((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
  2392. while (verifica_data((node->dados).data) == 0) {
  2393. scanf("%d/%d/%d", &((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
  2394. }
  2395. getchar();
  2396. printf("Hora de início do exame:(ex:00:00)\n");
  2397. gets((node->dados).hora_inicio);
  2398. printf("Hora de fim do exame:(ex:00:00)\n");
  2399. gets((node->dados).hora_fim);
  2400. printf("Introduza a sala em que irá decorrer o exame:\n");
  2401. gets(c);
  2402. if(**lista_exames != NULL) {
  2403. verifica=verifica_sala(**lista_exames,node,c,&sobreposto);
  2404. while(verifica == 1) {
  2405. printf("Exame com sala sobreposta com o exame da disciplina %d, que se realizará das %s às %s\n",
  2406. (sobreposto->dados).disciplina, (sobreposto->dados).hora_inicio, (sobreposto->dados).hora_fim);
  2407. printf("Deseja:\n1.Mudar horário do exame\n2.Mudar sala do exame\n");
  2408. scanf("%d", &opcao);
  2409. while (opcao != 1 && opcao != 2) {
  2410. printf("insira uma opção valida");
  2411. scanf("%d", &opcao);
  2412. }
  2413. if (opcao == 1) {
  2414. printf("Insira a data do exame:(dia/mes/ano)\n");
  2415. scanf("%d/%d/%d",&((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
  2416. while (verifica_data((node->dados).data) == 0) {
  2417. scanf("%d/%d/%d",&((node->dados).data).dia, &((node->dados).data).mes, &((node->dados).data).ano);
  2418. }
  2419. printf("Hora de início do exame:(ex:00:00)\n");
  2420. gets((node->dados).hora_inicio);
  2421. printf("Hora de fim do exame:(ex:00:00)\n");
  2422. gets((node->dados).hora_fim);
  2423. } else {
  2424. printf("Introduza a sala em que irá decorrer o exame:\n");
  2425. getchar();
  2426. gets(c);
  2427. }
  2428. verifica=verifica_sala(**lista_exames,node,c, &sobreposto);
  2429. }
  2430. }
  2431. node->students = NULL;
  2432. node2=malloc(sizeof(Sala));
  2433. strcpy(node2->sala, c);
  2434. node2->next = NULL;
  2435. (node->dados).sala = node2;
  2436. node->next = NULL;
  2437. node->previous = NULL;
  2438. if(**lista_exames == NULL) {
  2439. **lista_exames = node;
  2440. }
  2441. else {
  2442. temp = **lista_exames;
  2443. while(temp->next != NULL) {
  2444. temp = temp->next;
  2445. }
  2446. temp->next = node;
  2447. node->previous = temp;
  2448. }
  2449. sprintf(nome_fich, "%d", (node->dados).codigo);
  2450. i = strlen(nome_fich);
  2451. nome_fich[i++] = 's';
  2452. nome_fich[i++] = '.';
  2453. nome_fich[i++] = 't';
  2454. nome_fich[i++] = 'x';
  2455. nome_fich[i++] = 't';
  2456. nome_fich[i] = '\0';
  2457. exame = fopen(nome_fich, "w");
  2458. fprintf(exame,"%s,",(node->dados).sala->sala);
  2459. fclose(exame);
  2460.  
  2461. fprintf(fich,"%d,",(node->dados).codigo);
  2462. fprintf(fich,"%d,",(node->dados).disciplina);
  2463. fprintf(fich,"%d,",(node->dados).tipo_exame);
  2464. if((node->dados).data.dia <10) {
  2465. fprintf(fich,"0%d/", ((node->dados).data).dia);
  2466. }
  2467. else {
  2468. fprintf(fich,"%d/", ((node->dados).data).dia);
  2469. }
  2470. if((node->dados).data.mes <10) {
  2471. fprintf(fich,"0%d/", ((node->dados).data).mes);
  2472. }
  2473. else {
  2474. fprintf(fich,"%d/", ((node->dados).data).mes);
  2475. }
  2476. fprintf(fich,"%d,", ((node->dados).data).ano);
  2477. fprintf(fich,"%s,",(node->dados).hora_inicio);
  2478. fprintf(fich,"%s.",(node->dados).hora_fim);
  2479. fclose(fich);
  2480. }
  2481.  
  2482.  
  2483.  
  2484.  
  2485. void edita_exames(List_e **lista_exames) {
  2486. int verifica;
  2487. List_e sobreposto;
  2488. int num;
  2489. List_s temp_s;
  2490. List_e temp = NULL,t=NULL;
  2491. temp = **lista_exames;
  2492. char numero[60];
  2493. while(t==NULL) {
  2494. print_exames(**lista_exames);
  2495. printf("\n");
  2496. if (temp != NULL) {
  2497. printf("Introduza o codigo do exame que pretende modificar: \n");
  2498. getchar();
  2499. gets(numero);
  2500. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2501. printf("Introduza um numero\n");
  2502. gets(numero);
  2503. }
  2504. num = atoi(numero);
  2505. while (temp->next != NULL) {
  2506.  
  2507. if ((temp->dados).codigo== num) {
  2508.  
  2509. t = temp;
  2510. }
  2511. temp = temp->next;
  2512. }
  2513. if ((temp->dados).codigo == num) {
  2514. t = temp;
  2515. }
  2516. }
  2517. if (t == NULL) {
  2518. printf("Exame nao encontrado na base de dados\n");
  2519. }
  2520. }
  2521. char str[50];
  2522. getchar();
  2523. char str_2;
  2524. printf("Tipo de exame: \n");
  2525. switch ((t->dados).tipo_exame) {
  2526. case 1:
  2527. printf("Epoca normal\n");
  2528. break;
  2529. case 2:
  2530. printf("Epoca recurso\n");
  2531. break;
  2532. case 3:
  2533. printf("Epoca especial\n");
  2534. break;
  2535. }
  2536. while (str_2 != '1' && str_2 != '2' && str_2 != '3'&& str_2 != '\n') {
  2537. printf("Insira o novo tipo de exame:(enter para nao alterar)\n1:normal;\n2:recurso\n3:especial\n");
  2538. str_2 = getchar();
  2539. if (str_2 != '1' && str_2 != '2' && str_2 != '3' && str_2 != '\n') {
  2540. printf("introduza 1 ou 2 ou 3\n");
  2541. }
  2542. }
  2543. if (str_2 != '\n') {
  2544. (t->dados).tipo_exame = str_2 - '0';
  2545. printf("novo tipo de exame:\n");
  2546. switch ((t->dados).tipo_exame) {
  2547. case 1:
  2548. printf("Epoca normal\n");
  2549. break;
  2550. case 2:
  2551. printf("Epoca recurso\n");
  2552. break;
  2553. case 3:
  2554. printf("Epoca especial\n");
  2555. break;
  2556. }
  2557. }
  2558. else {
  2559. printf("Tipo de exame nao alterado\n");
  2560. }
  2561. temp_s = (t->dados).sala;
  2562. while(temp_s->next != NULL) {
  2563. printf("Sala %s\n",temp_s->sala);
  2564. printf("nova sala(enter para nao alterar):\n");
  2565. gets(str);
  2566. if(str[0] != '\0') {
  2567. verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
  2568. while(verifica == 1 && str[0] != '\0') {
  2569. printf("sala sobreposta com o exame %d! insira nova sala", sobreposto->dados.codigo);
  2570. gets(str);
  2571. verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
  2572. }
  2573. strcpy(temp_s->sala, str);
  2574. printf("Nova sala: %s", temp_s->sala);
  2575. }
  2576. else {
  2577. printf("sala nao alterada\n");
  2578. }
  2579. temp_s = temp_s->next;
  2580. }
  2581. printf("Sala %s\n",temp_s->sala);
  2582. printf("nova sala(enter para nao alterar):\n");
  2583. getchar();
  2584. gets(str);
  2585. if(str[0] != '\0') {
  2586. verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
  2587. while(verifica == 1 && str[0] != '\0') {
  2588. printf("sala sobreposta com o exame %d! insira nova sala", sobreposto->dados.codigo);
  2589. gets(str);
  2590. verifica = verifica_sala(**lista_exames, t, str, &sobreposto);
  2591. }
  2592. strcpy(temp_s->sala, str);
  2593. printf("Nova sala: %s", temp_s->sala);
  2594. }
  2595. else {
  2596. printf("sala nao alterada\n");
  2597. }
  2598. printf("%d/%d/%d",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
  2599. printf("Nova data: (enter para nao alterar) \n");
  2600. gets(str);
  2601. if (str[0] != '\0') {
  2602. scanf("%d/%d/%d", &((t->dados).data).dia, &((t->dados).data).mes, &((t->dados).data).ano);
  2603. printf("nova data: %d/%d/%d",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
  2604. }
  2605. else {
  2606. printf("data %d/%d/%d nao alterada\n",((t->dados).data).dia,((t->dados).data).mes,((t->dados).data).ano);
  2607. }
  2608.  
  2609. printf("%s\n", (t->dados).hora_inicio);
  2610. printf("Nova hora de inicio: (enter para nao alterar) \n");
  2611. gets(str);
  2612. if (str[0] != '\0') {
  2613. strcpy((t->dados).hora_inicio,str);
  2614. printf("nova hora de inicio: %s",(t->dados).hora_inicio);
  2615. }
  2616. else {
  2617. printf("hora de inicio %s nao alterada\n", (t->dados).hora_inicio);
  2618. }
  2619. printf("%s\n", (t->dados).hora_fim);
  2620. printf("Nova hora final: (enter para nao alterar) \n");
  2621. gets(str);
  2622. if (str[0] != '\0') {
  2623. strcpy((t->dados).hora_fim,str);
  2624. printf("nova hora final: %s",(t->dados).hora_fim);
  2625. }
  2626. else {
  2627. printf("hora de final %s nao alterada\n", (t->dados).hora_fim);
  2628. }
  2629. atualiza_ficheiros_exames(**lista_exames);
  2630. }
  2631. void elimina_exames(List_e **lista_exames) {
  2632. char numero[50];
  2633. int num;
  2634. print_exames(**lista_exames);
  2635. printf("Desejar apagar que exame? (introduzir código)\n");
  2636. getchar();
  2637. gets(numero);
  2638. while(verifica_se_numero(numero, strlen(numero)) == 0) {
  2639. printf("Introduza um numero\n");
  2640. gets(numero);
  2641. }
  2642. num = atoi(numero); List_e temp=NULL, t=NULL,t1=NULL; //temporario para auxiliar na remoçao do elemento da lista
  2643. temp = **lista_exames;
  2644. while(temp->next != NULL) {
  2645. if((temp->dados).codigo == num) {
  2646. t = temp;
  2647. }
  2648. temp = temp->next;
  2649. }
  2650. if((temp->dados).codigo == num) {
  2651. t = temp;
  2652. }
  2653. if (t == NULL) {
  2654. printf("Exame nao encontrado\n");
  2655. }
  2656. else {
  2657. if (t->previous == NULL) {
  2658. **lista_exames = t -> next;
  2659. }
  2660. else {
  2661. t1 = t->previous;
  2662. t1->next = t->next;
  2663. if(t->next != NULL){
  2664. t->next->previous = t1;
  2665. }
  2666. }
  2667. free(t);
  2668. apaga_ficheiro(t->dados.codigo);
  2669. }
  2670. atualiza_ficheiros_exames(**lista_exames);
  2671. printf("\nExame %d apagado.",num);
  2672. getchar();
  2673. }
  2674.  
  2675. void print_exames_s(List_e dados) {
  2676. List_e temp;
  2677. temp = dados;
  2678. List_s temp_s;
  2679. List temp_alun;
  2680. printf("Introduza o aluno que pretende ver os exames: ");
  2681. int n;
  2682. scanf("%d",&n);
  2683. if(temp == NULL) {
  2684. printf("nenhum exame encontrado na base de dados\n");
  2685. }
  2686. else {
  2687. while(temp->next != NULL) {
  2688. temp_alun = temp->students;
  2689. if(temp_alun != NULL){
  2690. while(temp_alun->next != NULL) {
  2691. if(temp_alun->dados.numero == n) {
  2692. printf("%d,", (temp->dados).codigo);
  2693. printf("%d,", (temp->dados).disciplina);
  2694. switch((temp->dados).tipo_exame) {
  2695. case 1:
  2696. printf("Epoca Normal,");
  2697. break;
  2698. case 2:
  2699. printf("Epoca Recurso,");
  2700. break;
  2701. case 3:
  2702. printf("Epoca Especial");
  2703. break;
  2704. }
  2705. temp_s = (temp->dados).sala;
  2706. while(temp_s->next != NULL) {
  2707. printf("%s,",temp_s->sala);
  2708. temp_s = temp_s->next;
  2709. }
  2710. printf("%s,",temp_s->sala);
  2711. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  2712. printf("%s,",(temp->dados).hora_inicio);
  2713. printf("%s\n",(temp->dados).hora_fim);
  2714. }
  2715. temp_alun = temp_alun->next;
  2716. }
  2717. if(temp_alun->dados.numero == n) {
  2718. printf("%d,", (temp->dados).codigo);
  2719. printf("%d,", (temp->dados).disciplina);
  2720. switch((temp->dados).tipo_exame) {
  2721. case 1:
  2722. printf("Epoca Normal,");
  2723. break;
  2724. case 2:
  2725. printf("Epoca Recurso,");
  2726. break;
  2727. case 3:
  2728. printf("Epoca Especial");
  2729. break;
  2730. }
  2731. temp_s = (temp->dados).sala;
  2732. while(temp_s->next != NULL) {
  2733. printf("%s,",temp_s->sala);
  2734. temp_s = temp_s->next;
  2735. }
  2736. printf("%s,",temp_s->sala);
  2737. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  2738. printf("%s,",(temp->dados).hora_inicio);
  2739. printf("%s\n",(temp->dados).hora_fim);
  2740. }
  2741. }
  2742. temp = temp->next;
  2743. }
  2744. temp_alun = temp->students;
  2745. if(temp_alun != NULL){
  2746. while(temp_alun->next != NULL) {
  2747. if(temp_alun->dados.numero == n) {
  2748. printf("%d,", (temp->dados).codigo);
  2749. printf("%d,", (temp->dados).disciplina);
  2750. switch((temp->dados).tipo_exame) {
  2751. case 1:
  2752. printf("Epoca Normal,");
  2753. break;
  2754. case 2:
  2755. printf("Epoca Recurso,");
  2756. break;
  2757. case 3:
  2758. printf("Epoca Especial");
  2759. break;
  2760. }
  2761. temp_s = (temp->dados).sala;
  2762. while(temp_s->next != NULL) {
  2763. printf("%s,",temp_s->sala);
  2764. temp_s = temp_s->next;
  2765. }
  2766. printf("%s,",temp_s->sala);
  2767. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  2768. printf("%s,",(temp->dados).hora_inicio);
  2769. printf("%s\n",(temp->dados).hora_fim);
  2770. }
  2771. temp_alun = temp_alun->next;
  2772. }
  2773. if(temp_alun->dados.numero == n) {
  2774. printf("%d,", (temp->dados).codigo);
  2775. printf("%d,", (temp->dados).disciplina);
  2776. switch((temp->dados).tipo_exame) {
  2777. case 1:
  2778. printf("Epoca Normal,");
  2779. break;
  2780. case 2:
  2781. printf("Epoca Recurso,");
  2782. break;
  2783. case 3:
  2784. printf("Epoca Especial");
  2785. break;
  2786. }
  2787. temp_s = (temp->dados).sala;
  2788. while(temp_s->next != NULL) {
  2789. printf("%s,",temp_s->sala);
  2790. temp_s = temp_s->next;
  2791. }
  2792. printf("%s,",temp_s->sala);
  2793. printf("%d/%d/%d,", (temp->dados).data.dia,(temp->dados).data.mes,(temp->dados).data.ano);
  2794. printf("%s,",(temp->dados).hora_inicio);
  2795. printf("%s\n",(temp->dados).hora_fim);
  2796. }
  2797. }
  2798. }
  2799. }
  2800.  
  2801. /*MENU*/
  2802.  
  2803. void menu(List *lista_alunos,List_d *lista_disciplinas,List_e *lista_exames) {
  2804. int curso = 0;
  2805. char opcao;
  2806. printf("\n------MENU PRINCIPAL------\n\nIntroduza uma das opções: \n");
  2807. printf("\t1: Alunos\n"); //DONE
  2808. printf("\t2: Disciplinas\n");
  2809. printf("\t3: Exames\n");
  2810. printf("::::::>");
  2811. opcao = getchar();
  2812. getchar();
  2813. if(opcao=='1') {
  2814. printf("\n--MENU ALUNOS--\n\nIntroduza uma das opções sobre os alunos: \n");
  2815. printf("\t1: Adicionar alunos\n");
  2816. printf("\t2: Editar dados de alunos\n");
  2817. printf("\t3: Eliminar alunos\n");
  2818. printf("\t4: Ver lista de alunos\n");
  2819. printf("\t5: Voltar\n");
  2820. printf("::::::>");
  2821. opcao = getchar();
  2822. if(opcao == '1') {
  2823. criar_aluno(&lista_alunos);
  2824. }
  2825. else if(opcao == '2') {
  2826. editar_alunos(&lista_alunos);
  2827. }
  2828.  
  2829. else if(opcao=='3') {
  2830. printf("\nLista de alunos de LEI:\n");
  2831. print_LEI(*lista_alunos);
  2832. printf("\nLista de alunos de LDM:\n");
  2833. print_LDM(*lista_alunos);
  2834. printf("\n");
  2835. apaga_alunos(&lista_alunos);
  2836. }
  2837.  
  2838. else if(opcao=='4') {
  2839. curso = 0;
  2840. printf("\nDeseja ver os alunos de que curso? (1-LEI,2-LDM, 3-todos)\n");
  2841. while(curso != 1 && curso != 2 && curso != 3) {
  2842. printf("::::::>");
  2843. scanf("%d",&curso);
  2844. if(curso==1) {
  2845. print_LEI(*lista_alunos);
  2846. }
  2847. else if(curso==2) {
  2848. print_LDM(*lista_alunos);
  2849. }
  2850. else if(curso==3) {
  2851. print_dados(*lista_alunos);
  2852. }
  2853. else
  2854. printf("\nEscolha um dos dois cursos");
  2855. }
  2856. }
  2857. }
  2858. else if(opcao=='2') {
  2859. printf("\n--MENU DISCIPLINAS--\n\nIntroduza uma das opções sobre as disciplinas: \n");
  2860. printf("\t1: Adicionar disciplinas\n");
  2861. printf("\t2: Editar disciplinas\n");
  2862. printf("\t3: Eliminar disciplinas\n");
  2863. printf("\t4: Mostra disciplinas\n");
  2864. printf("\t5: Inscrever alunos em disciplinas\n");
  2865. printf("\t6: Voltar\n");
  2866. printf("::::::>");
  2867. opcao = getchar();
  2868. if (opcao=='1')
  2869. criar_disciplinas(&lista_disciplinas);
  2870. else if(opcao=='2')
  2871. edita_disciplinas(&lista_disciplinas);
  2872. else if(opcao=='3')
  2873. elimina_disciplinas(&lista_disciplinas);
  2874. else if(opcao=='4') {
  2875. print_disciplinas(*lista_disciplinas);
  2876. getchar();
  2877. }
  2878. else if(opcao=='5')
  2879. inscrever_alunos_disciplinas(*lista_alunos,&lista_disciplinas);
  2880. }
  2881. else if(opcao=='3') {
  2882. printf("\n--MENU EXAMES--\n\nIntroduza uma das opções sobre os exames: \n");
  2883. printf("\t1: Criar exame\n");
  2884. printf("\t2: Editar exame\n");
  2885. printf("\t3: Eliminar exame\n");
  2886. printf("\t4: Printa exames\n");
  2887. printf("\t5: Inscrever aluno em exame\n");
  2888. printf("\t6: Desinscrever aluno de exame\n");
  2889. printf("\t7: Ver exames de um aluno\n");
  2890. printf("\tOutro: Voltar\n");
  2891. printf("::::::>");
  2892. opcao = getchar();
  2893. if (opcao =='1') {
  2894. cria_exames(&lista_exames, *lista_disciplinas);
  2895. }
  2896. else if(opcao=='2') {
  2897. edita_exames(&lista_exames);
  2898. }
  2899. else if(opcao=='3') {
  2900. elimina_exames(&lista_exames);
  2901. }
  2902. else if(opcao=='4') {
  2903. print_exames(*lista_exames);
  2904. getchar();
  2905. }
  2906. else if(opcao == '5') {
  2907. inscrever_alunos_exames(&lista_exames, *lista_alunos);
  2908. getchar();
  2909. }
  2910. else if(opcao == '6') {
  2911. getchar();
  2912. desinscrever_alunos_exames(&lista_exames);
  2913. }
  2914. else if(opcao == '7') {
  2915. getchar();
  2916. print_exames_s(*lista_exames);
  2917. }
  2918. }
  2919. }
  2920. int main() {
  2921. List_d lista_disciplinas=NULL;
  2922. List lista_alunos = NULL;
  2923. List_e lista_exames = NULL;
  2924. le_ficheiros(&lista_alunos, &lista_disciplinas,&lista_exames);
  2925. apaga_exames_passados(&lista_exames);
  2926. while(true) {
  2927. menu(&lista_alunos,&lista_disciplinas,&lista_exames);
  2928. }
  2929. return 0;
  2930. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement