-
Notifications
You must be signed in to change notification settings - Fork 0
/
sistema.h
211 lines (173 loc) · 7.44 KB
/
sistema.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#ifndef SISTEMA
#define SISTEMA
#include <stdio.h>
// Estrutura de cabeçalho do arquivo
typedef struct {
int pos_cabeca; // posição do início da lista
int pos_topo; // 1a posição não usada no fim do arquivo
int pos_livre; // posição de início da lista de nós livres
} Cabecalho;
// Estrutura para Disciplina
typedef struct {
int codigo;
char nome[50];
int codcurso;
int serie;
int prox;
} Disciplina;
// Estrutura para Curso
typedef struct {
int codigo;
char nome[50];
char area; // Exatas, Humanas, Biológicas
int prox;
} Curso;
// Estrutura para Cadastro de Professor
typedef struct {
int codigo;
char nome[50];
int prox;
} CadastroProfessor;
// Estrutura para Cadastro de Professor-Disciplina
typedef struct {
int codigo;
int coddisciplina;
int codcurso; // variável auxiliar para facilitar consulta
int anoletivo;
int codprofessor;
int prox;
} CadastroProfessorDisciplina;
// ---------------------------- ARQUIVO ----------------------------
// OK
// Verifica se o cabeçalho (a lista) é vazia
// Entrada: cabeçalho
// Saída: é vazia (1) ou não é vazia (0)
int vazia(Cabecalho *cab);
// OK
// Cria uma lista nova em arquivo, podendo ser de Curso, Disciplina,
// CadastroProfessor ou CadastroProfessorDisciplina
// Pré-condição: arquivo aberto para leitura/escrita
// Pós-condição: arquivo é inicializado com uma lista vazia
void criar_cabecalho_vazio(FILE* arq);
// OK
// Lê o cabeçalho do arquivo contendo as informações da lista
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: retorna o ponteiro para o cabeçalho lido
Cabecalho* ler_cabecalho(FILE *arq);
// OK
// Escreve no arquivo o cabeçalho contendo as informações da lista
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: cabeçalho escrito no arquivo
void escrever_cabecalho(FILE *arq, Cabecalho *cab);
// Abre arquivo
// Pré-condição: string contendo o nome do arquivo.extensão
// Pós-condição: retorna arquivo aberto
FILE* open_arq(char *str);
// --------------------------- Sistema ---------------------------
// OK
// Cria uma Disciplina contendo os dados fornecidos
// Pré-condição: o código fornecido deve ser diferente para o mesmo curso
// Pós-condição: retorna ponteiro para Disciplina
Disciplina* criar_disciplina(int codigo, char *nome, int codcurso, int serie);
// OK
// Cria um Curso contendo os dados fornecidos
// Pré-condição: o código fornecido deve ser diferente de outro curso,
// area deve ser 'E' (Exatas), 'H' (Humanas) ou 'B' (Biológicas)
// Pós-condição: retorna ponteiro para Curso
Curso* criar_curso(int codigo, char *nome, char area);
// OK
// Cria um CadastroProfessor contendo os dados fornecidos
// Pré-condição: o código fornecido deve ser diferente de outro professor
// Pós-condição: retorna ponteiro para CadastroProfessor
CadastroProfessor* criar_cadastro_professor(int codigo, char *nome);
// OK
// Cria um CadastroProfessorDisciplina contendo os dados fornecidos
// Pré-condição: os códigos fornecidos devem ser válidos
// Pós-condição: retorna ponteiro para CadastroProfessorDisciplina
CadastroProfessorDisciplina* criar_cadastro_professor_disciplina(int codigo, int coddisciplina, int anoletivo, int codprofessor);
// OK
// Insere o nó na lista do arquivo
// Pré-condição: arquivo deve estar aberto para escrita
// Pós-condição: arquivo com novo nó
void inserir_disciplina(FILE *arq, Disciplina *d);
// OK
// Insere o nó na lista do arquivo
// Pré-condição: arquivo deve estar aberto para escrita
// Pós-condição: arquivo com novo nó
void inserir_curso(FILE *arq, Curso *c);
// OK
// Insere o nó na lista do arquivo
// Pré-condição: arquivo deve estar aberto para escrita
// Pós-condição: arquivo com novo nó
void inserir_cadastro_professor(FILE *arq, CadastroProfessor *cp);
// OK
// Insere o nó na lista do arquivo
// Pré-condição: arquivo deve estar aberto para escrita
// Pós-condição: arquivo com novo nó
void inserir_cadastro_professor_disciplina(FILE *arq_professores_disciplinas, FILE *arq_disciplinas, CadastroProfessorDisciplina *cpd);
// OK
// Busca por uma disciplina através do seu código
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: ponteiro para nó lido é retornado
Disciplina* buscar_disciplina(FILE* arq, int codigo);
// OK
// Busca por um curso através do seu código
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: ponteiro para nó lido é retornado
Curso* buscar_curso(FILE* arq, int codigo);
// OK
// Busca por um cadastro de professor através do seu código
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: ponteiro para nó lido é retornado
CadastroProfessor* buscar_cadastro_professor(FILE* arq, int codigo);
// OK
// Busca por um cadastro de distribuição de disciplina através do seu código
// Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// Pós-condição: ponteiro para nó lido é retornado
CadastroProfessorDisciplina* buscar_cadastro_professor_disciplina(FILE* arq, int codigo);
// OK
// Imprime a lista de disciplinas
// Pré-condição: arquivo aberto para leitura
// Pós-condição: nenhuma
void imprimir_disciplinas(FILE *arq);
// OK
// Imprime a lista de cursos
// Pré-condição: arquivo aberto para leitura
// Pós-condição: nenhuma
void imprimir_cursos(FILE *arq);
// OK
// Imprime a lista de cadastro de professores
// Pré-condição: arquivo aberto para leitura
// Pós-condição: nenhuma
void imprimir_cadastros_professor(FILE *arq);
// OK
// Imprime a lista de cadastros de distribuições de disciplina
// Pré-condição: arquivo aberto para leitura
// Pós-condição: nenhuma
void imprimir_cadastros_professor_disciplina(FILE *arq);
// Imprime a lista de distribuição de disciplinas organizada por cursos
// Pré-condição: arquivos de distribuição de disciplinas e de cursos abertos para leitura
// Pós-condição: nenhuma
void imprimir_distribuicao_ordenada2(FILE *arq_professores_disciplinas, FILE *arq_cursos);
// Imprime a lista de distribuição de disciplinas organizada por cursos
// Pré-condição: arquivos de distribuição de disciplinas e de cursos abertos para leitura
// Pós-condição: nenhuma
void imprimir_distribuicao_ordenada(FILE *arq_professores_disciplinas, FILE *arq_cursos);
//Escreve um nó em uma determinada posição do arquivo
//Pré-condição: arquivo deve estar aberto e ser um arquivo de lista
// pos deve ser uma posição válida do arquivo
//Pós-condição: nó escrito no arquivo
void escrever_cpd(FILE* arq, CadastroProfessorDisciplina *cpd, int pos);
// Busca por uma distribuição de disciplina dada uma posição
// Pré-condição: arquivo de professores_disciplinas aberto para leitura
// Pós-condição: nó encontrado é retornado, caso não encontre, retorna NULL
CadastroProfessorDisciplina* ler_cpd(FILE* arq, int pos);
// Remove uma distribuição de disciplina dado seu código e seu ano letivo
// Pré-condição: arquivo de professores_disciplinas deve estar aberto para escrita
// Pós-condição: nó removido
void remover_distribuicao_disciplina(FILE *arq, int codigo, int ano_letivo);
// Gera um novo código para distribuição de disciplina
// Pré-condição: arquivo de professores_disciplinas aberto para leitura
// Pós-condição: retorna o novo código
int gerar_codigo_distribuicao(FILE *arq);
#endif