Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <locale.h>
- #include <string.h>
- #include <stdbool.h>
- #define MEDIA 6.0
- #define ESC 27
- #define TOTAL_DISC 3
- struct Aluno {
- int id; // matricula
- char nome[50];
- int qtde_mat;
- };
- struct Aluno_Disciplina {
- int id_aluno, id_disc;
- int ano, semestre;
- int nota, aulas_assistidas;
- };
- struct Disciplina {
- int id;
- char nome[50];
- int total_aulas;
- };
- ////////////////////////////////////////////////////////////////////////////
- char Menu(){
- system("cls");
- printf("##### Bem vindo a consulta de histórico escolar! ##### \n");
- printf("\n[1] - Matricular aluno em uma nova disciplina");
- printf("\n[2] - Registrar nota e dados finais do aluno");
- printf("\n[3] - Disciplinas não concluidas.");
- printf("\n[4] - Disciplinas com Aprovação");
- printf("\n[5] - Disciplinas com Reprovação");
- printf("\n[6] - Média nas disciplinas aprovadas");
- printf("\n[7] - Disciplinas cursadas em Ano/Semestre");
- printf("\n[8] - Frequência total");
- printf("\n[ESC] - Sair");
- char op = getch();
- return op;
- }
- void Inicio(struct Aluno * aluno){
- printf("##### Bem vindo ao Sistema de Gerenciamento de Alunos! #####\n");
- printf("\nInforme os dados do aluno abaixo!");
- printf("\nMatricula: ");
- fflush(stdin);
- scanf("%i", &aluno->id);
- printf("\nNome: ");
- fflush(stdin);
- fgets (&aluno->nome, 100, stdin);
- printf("\n\n**** Dados recebidos com sucesso!: \n");
- system("pause");
- }
- char SelecionarDisciplina(struct Aluno *aluno, struct Disciplina disc[]){
- char op = "";
- do{
- system("cls");
- printf("##### Matricular aluno %s #####\n", aluno->nome);
- printf("\nSelecione a disciplina abaixo!");
- for(int i=0; i<TOTAL_DISC; i++)
- printf("\n[%i] - %s", i+1, disc[i].nome);
- printf("\n[ESC] - Sair");
- op=getch();
- }while(op != '1' && op != '2' && op != '3' && op != ESC);
- return op;
- }
- bool existeMatricula(struct Disciplina *d, struct Aluno *aluno, struct Aluno_Disciplina ad[]){
- if(aluno->qtde_mat == 0)
- return false;
- for(int i=0;i<aluno->qtde_mat; i++){
- if(ad[i].id_aluno == aluno->id && ad[i].id_disc == d->id)
- return true;
- }
- return false;
- }
- void Matricular(struct Aluno *aluno, struct Disciplina disc[], struct Aluno_Disciplina ad[]){
- char op = "";
- op = SelecionarDisciplina(aluno, disc);
- if(aluno->qtde_mat > 2)
- {
- printf("\n****** Quantidade de matriculas máximas realizadas! (3)");
- getch();
- }
- else
- {
- while(op != ESC && aluno->qtde_mat < 4){
- struct Disciplina *d = &disc[op];
- if(!existeMatricula(d, aluno, ad)){
- ad[aluno->qtde_mat].id_aluno = aluno->id;
- ad[aluno->qtde_mat].id_disc = d->id;
- system("cls");
- printf("##### Dados complementares da Matricula #####");
- printf("\nAno/Semestre (9999/99): ");
- scanf("%i/%i", &ad[aluno->qtde_mat].ano, &ad[aluno->qtde_mat].semestre);
- aluno->qtde_mat++;
- printf("\n****** MATRÍCULA REALIZADA COM SUCESSO!");
- }
- else
- printf("\n****** Matricula já nessa disciplina existe!");
- getch();
- op = SelecionarDisciplina(aluno, disc);
- }
- }
- }
- void Gerenciar(char op, struct Aluno *aluno, struct Disciplina disc[]){
- struct Aluno_Disciplina aluno_disc[TOTAL_DISC];
- switch(op)
- {
- case '1':
- Matricular(aluno, disc, aluno_disc);
- break;
- case '2':
- DadosFinais(aluno, disc, aluno_disc);
- break;
- case '3':
- ExibirNaoConcluidas(aluno, disc, aluno_disc);
- break;
- case '4':
- ExibirAprovadas(aluno, disc, aluno_disc);
- break;
- case '5':
- ExibirReprovadas(aluno, disc, aluno_disc);
- break;
- case '6':
- MediaAprovadas(aluno, disc, aluno_disc);
- break;
- case '7':
- ExibirDisciplinasAno(aluno, disc, aluno_disc);
- break;
- case '8':
- FrequenciaTotal(aluno, disc, aluno_disc);
- break;
- }
- }
- void CarregarDisciplinas(struct Disciplina disc[]){
- // TOTAL_DISC setado como 3 em #DEFINE ^
- disc[0].id = 1;
- strcpy(disc[0].nome, "Português");
- disc[0].total_aulas = 100;
- disc[1].id = 2;
- strcpy(disc[1].nome, "Matemática");
- disc[1].total_aulas = 300;
- disc[2].id = 3;
- strcpy(disc[2].nome, "Física");
- disc[2].total_aulas = 200;
- }
- void ExibirDisciplinas(struct Disciplina *disc){
- system("cls");
- printf("##### DISCIPLINAS CADASTRADAS #####\n");
- for(int i=0; i<TOTAL_DISC; i++){
- printf("\nID: %d", disc[i].id );
- printf("\nNome: %s", disc[i].nome );
- printf("\nTotal Aulas: %d", disc[i].total_aulas );
- printf("\n\n");
- }
- system("pause");
- }
- int main()
- {
- struct Aluno aluno;
- struct Disciplina disciplinas[TOTAL_DISC];
- char op = "";
- setlocale( LC_ALL, "Portuguese" );
- // coleta dados do aluno
- aluno.qtde_mat = 0;
- Inicio(&aluno);
- CarregarDisciplinas(disciplinas);
- ExibirDisciplinas(disciplinas);
- // exibe menu de ações e verifica o que deseja realizar
- do{
- op = Menu();
- Gerenciar(op, &aluno, disciplinas);
- }while(op != ESC);
- system("pause");
- return 0;
- }
RAW Paste Data