oregonyuky / UNOESTE

1 stars 2 forks source link

struct 2 #7

Open oregonyuky opened 1 month ago

oregonyuky commented 1 month ago
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#define TF 10
struct Aluno{
    char ra[30], nome[30];
};
struct Disciplina{
    int codDis;
    char disciplina[30];
};
struct AlunoDisciplina{
    char ra[30];
    int codDis;
    float nota;
};
struct Reprovados{
    char ra[30], nome[30];
};
struct Media{
    char ra[30];
};
int buscaExaustiva(Aluno vetAgenda[TF], int TL, char reg[30]){
    int pos=0;
    while(pos<TL && strcmp(vetAgenda[pos].ra, reg)!=0)
        pos++;
    if(pos<TL)
        return pos;
    return -1;
}
void bubblesort(Aluno vetAgenda[TF], int TL){
    Aluno aux;
    int flag=1, i;
    while(i>0 && flag){
        flag=0;
        for(int i=0;i<TL-1;i++){
            if(strcmp(vetAgenda[i].nome, vetAgenda[i+1].nome)>0){
                aux = vetAgenda[i];
                vetAgenda[i] = vetAgenda[i+1];
                vetAgenda[i+1] = aux;
                flag=1;
            }
        }
        TL--;
    }
}
char menu(){
    system("cls");
    printf("[A] Cadastrar\n");
    printf("[B] Excluir\n");
    printf("[C] Exibir\n");
    return toupper(getch());
}
char Cadastrar(){
    system("cls");
    printf("[A] Cadastrar nome e RA:\n");
    printf("[B] Cadastrar o codigo e a disciplina:\n");
    printf("[C] Cadastrar nota:\n");
    return toupper(getch());
}
char Excluir(){
    system("cls");
    printf("[A] Excluir cadastro de nome e RA\n");
    printf("[B] Excluir cadastro de codigo e disciplina\n");
    printf("[C] Excluir cadastro de nota\n");
    return toupper(getch());
}
char Exibir(){
    system("cls");
    printf("[A] Exibir nome e RA\n");
    printf("[B] Exibir codigo e disciplina\n");
    printf("[C] Exibir relatorio\n");
    printf("[D] Exibir alunos reprovados\n");
    printf("[E] Exibir alunos que comecam come essa letra\n");
    printf("[F] Exibir alunos com media abaixo de 6\n");
    return toupper(getch());
}
void CadastroNome(Aluno vetAgenda[TF], int &TL){
    system("cls");
    Aluno aux;
    int pos;
    printf("Digite o seu ra:\n");
    gets(aux.ra);
    while(TL<TF && strcmp(aux.ra, "\0")!=0){
        pos = buscaExaustiva(vetAgenda, TL, aux.ra);
        if(pos==-1){
            printf("Digite o seu nome:\n");
            gets(aux.nome);
            vetAgenda[TL++] = aux;
        }
        else{
            printf("Ja esta cadastrado\n");
        }
        if(TL<TF){
            printf("\nDigite o seu ra:\n");
            gets(aux.ra);
        }
    }
    if(TL==TF){
        printf("nao tem mais espaco\n");
    }
    bubblesort(vetAgenda, TL);
    getch();
}
int buscaExaustivaNum(Disciplina vetAgenda1[TF], int TP, int n){
    int pos=0;
    while(pos<TP && vetAgenda1[pos].codDis!=n)
        pos++;
    if(pos<TP)
        return pos;
    return -1;
}
void CodigoDisciplina(Disciplina vetAgenda1[TF], int &TP){
    system("cls");
    Disciplina aux;
    int pos;
    printf("Digite o codigo:(pressione 0 para sair)\n");
    scanf("%d", &aux.codDis);
    while(TP<TF && aux.codDis!=0){
        pos = buscaExaustivaNum(vetAgenda1, TP, aux.codDis);   
        if(pos==-1){
            printf("Digite a disciplina:\n");
            getchar();
            gets(aux.disciplina);
            vetAgenda1[TP++] = aux;
        }
        else{
            printf("ja esta cadastrado\n");
        }
        if(TP<TF){
            printf("\nDigite o codigo:(pressione 0 para sair)\n");
            scanf("%d", &aux.codDis);
        }
    }
    if(TP==TF)
        printf("Ja nao tem mais espaco\n");
    getch();
}
void CadastroNota(Aluno vetAgenda[TF], Disciplina vetAgenda1[TF], AlunoDisciplina vetAgenda2[TF], int TL, int TP, int &TQ) {
    system("cls");
    Aluno aux;
    Disciplina aux1;
    AlunoDisciplina aux2;
    int pos;  
    printf("Digite o RA:\n");
    getchar();
    gets(aux.ra); 
    while (TQ<TF && strcmp(aux.ra, "\0") != 0){
        pos = buscaExaustiva(vetAgenda, TL, aux.ra);
        if(pos!=-1){
            printf("Digite o codigo da disciplina:\n");
            scanf("%d", &aux1.codDis);
            pos = buscaExaustivaNum(vetAgenda1, TP, aux1.codDis);
            if(pos!=-1){
                strcpy(vetAgenda2[TQ].ra, aux.ra);
                vetAgenda2[TQ].codDis = aux1.codDis;
                pos=0;
                while(pos<TQ && (strcmp(vetAgenda2[pos].ra, vetAgenda2[TQ].ra) != 0 || vetAgenda2[pos].codDis != vetAgenda2[TQ].codDis)){
                    pos++;
                }
                if (pos<TQ){
                    printf("Nao pode cadastrar novamente\n");
                }
                else{
                    printf("Digite a nota:\n");
                    scanf("%f", &aux2.nota);
                    vetAgenda2[TQ++].nota = aux2.nota;
                }
            }
            else{
                printf("Disciplina nao encontrada\n");
            }
        } 
        else{
            printf("Aluno nao encontrado\n"); 
        }
        if (TQ < TF){
            printf("\nDigite o RA:\n");
            getchar();
            gets(aux.ra);
        }
    }
    if (TQ==TF){
        printf("Nao ha mais espaco\n");
    } 
    getch();
}

void Exibir0(Aluno vetAgenda[TF], int TL){
    system("cls");
    for(int i=0;i<TL;i++){
        printf("nome: %s\n", vetAgenda[i].nome);
        printf("Ra: %s\n\n", vetAgenda[i].ra);
    }
    getch();
}
void Exibir1(Disciplina vetAgenda1[TF], int TP){
    system("cls");
    for(int i=0;i<TP;i++){
        printf("Codigo: %d\n", vetAgenda1[i].codDis);
        printf("Disciplina: %s\n\n", vetAgenda1[i].disciplina);
    }
    getch();
}
void Exibir2(Aluno vetAgenda[TF], Disciplina vetAgenda1[TF], AlunoDisciplina vetAgenda2[TF], int TL, int TP, int TQ){
    system("cls");
    char cod[30]="", aux[30];
    int reprovado=0,qtd=0;
    float total_nota=0;
    for(int i=0;i<TQ;i++){
        if(strcmp(cod, vetAgenda2[i].ra)!=0){
            strcpy(cod, vetAgenda2[i].ra);
            printf("\nRA: %s \t", vetAgenda2[i].ra);
            for(int j=0;j<TL;j++){
                if(strcmp(vetAgenda2[i].ra,vetAgenda[j].ra)==0){
                    strcpy(aux, vetAgenda[j].nome);
                    printf("Nome: %s\n", vetAgenda[j].nome);
                }
            }
        }
        printf("Disciplina: %d - ", vetAgenda2[i].codDis);
        for(int j=0;j<TP;j++){
            if(vetAgenda2[i].codDis==vetAgenda1[j].codDis)
                printf("%s \t", vetAgenda1[j].disciplina);
        }
        printf("Nota: %.1f \t Situacao: %s\n", vetAgenda2[i].nota, (vetAgenda2[i].nota>=6.0 ? "aprovado" : "reprovado"));
    }
    getch();
}
void DeterminadaLetra(Aluno vetAgenda[TF], int TL){
    system("cls");
    char letra;
    printf("digite a letra para exibir todos os nomes que comecam com essa letra:\n");
    letra = toupper(getch());
    for(int i=0;i<TL;i++){
        if(toupper(vetAgenda[i].nome[0])==letra){
            printf("Nome: %s\n", vetAgenda[i].nome);
        }
    }
    getch();
} 
void ExibirReprovado(Aluno vetAgenda[TF], AlunoDisciplina vetAgenda2[TF], Reprovados vetReprovado[TF], int TL, int TM, int TQ, int &TG){
    system("cls");
    int reprovado=0;
    for(int i=0;i<TQ;i++){
        if(vetAgenda2[i].nota<6.0)
            reprovado++;
        if(i==TQ-1 || strcmp(vetAgenda2[i+1].ra, vetAgenda2[i].ra)!=0){
            if(reprovado>=2){
                strcpy(vetReprovado[TG++].ra, vetAgenda2[i].ra);
            }
            reprovado=0;
        }
    }
    for(int i=0;i<TG;i++){
        for(int j=0;j<TL;j++){
            if(strcmp(vetAgenda[j].ra, vetReprovado[i].ra)==0){
                printf("Nome: %s\n", vetAgenda[j].nome);
                strcpy(vetReprovado[i].ra, "");
            }
        }
    }
    getch();
}
void ExibirMedia(Aluno vetAgenda[TF], AlunoDisciplina vetAgenda2[TF], Media vetMedia6[TF], int TQ, int &TM, int TL) {
    system("cls");
    char cod[30] = "";
    int total_nota = 0, qtd = 0;
    for (int i = 0; i < TQ; i++) {
        total_nota += vetAgenda2[i].nota;
        qtd++;
        if (i == TQ - 1 || strcmp(vetAgenda2[i + 1].ra, vetAgenda2[i].ra) != 0) {
            if (total_nota / qtd < 6)
                strcpy(vetMedia6[TM++].ra, vetAgenda2[i].ra);
            total_nota = 0;
            qtd = 0;
        }
    }
    for (int i = 0; i < TM; i++) {
        for (int j = 0; j < TL; j++) {
            if (strcmp(vetAgenda[j].ra, vetMedia6[i].ra) == 0) {
                printf("Nome: %s\n", vetAgenda[j].nome);
                strcpy(vetMedia6[i].ra, "");
            }
        }
    }

    getch();
}
void ExcluirCadastroNome(Aluno vetAgenda[TF], int &TL){
    system("cls");
    Aluno aux;
    char tecla;
    int pos;
    if(TL!=0){
        do{
            printf("digite o Ra para exluir:\n");
            getchar();
            gets(aux.ra);
            pos = buscaExaustiva(vetAgenda, TL, aux.ra);
            if(pos==-1){
                for(int i=pos;i<TL-1;i++){
                    vetAgenda[i] = vetAgenda[i+1];
                }
                TL--;
            }
            else{
                printf("Nao existe esse Ra que voce digitou\n");
            }
            printf("Deseja continuar? <s/n>\n");
            tecla = toupper(getch());
        }while(tecla=='S' && TL>0);
    }
    else
        printf("Nao tem ra para exluir\n");
    getch();
}
void ExcluirCodigoDisciplina(Disciplina vetAgenda1[TF], int &TP){
    system("cls");
    Disciplina aux;
    char tecla;
    int pos;
    if(TP!=0){
        do{
            printf("Digite o codigo da disciplina para excluir:\n");
            scanf("%d", &aux.codDis);
            pos = buscaExaustivaNum(vetAgenda1, TP, aux.codDis);
            if(pos==-1){
                for(int i=pos;i<TP-1;i++){
                    vetAgenda1[i] = vetAgenda1[i+1];
                }
                TP--;
            }
            printf("Deseja continuar? <s/n>");
            tecla = toupper(getch());
        }while(tecla=='S' && TP>0);
    }
    else
        printf("Nao tem codigo da disciplina para excluir:\n");
    getch();
}
void ExcluirCadastroNota(Aluno vetAgenda[TF], Disciplina vetAgenda1[TF], AlunoDisciplina vetAgenda2[TF], int TL, int TP, int &TQ){
    system("cls");
    Aluno aux;
    Disciplina aux1;
    AlunoDisciplina aux2;
    char tecla;
    int pos;
    if(TQ>0){
        do{
            printf("Digite o ra para excluir:\n");
            getchar();
            gets(aux.ra);
            pos = buscaExaustiva(vetAgenda, TL, aux.ra);
            if(pos==-1){
                printf("Digite o codigo para excluir:\n");
                scanf("%d", &aux1.codDis);
                pos = buscaExaustivaNum(vetAgenda1, TP, aux1.codDis);
                if(pos==-1){
                    for(int i=pos;i<TQ-1;i++){
                        vetAgenda2[i] = vetAgenda2[i+1];
                    }
                    TQ--;
                }
            }
            printf("Deseja continuar? <s/n>\n");
            tecla=toupper(getch());
        }while(tecla=='S' && TQ>0);
    }
    else
        printf("Nao tem ra, codigo e nota para exluir\n");
    getch();
}
int main(){
    char tecla, tecla1;
    AlunoDisciplina vetAgenda2[TF];
    Disciplina vetAgenda1[TF];
    Aluno vetAgenda[TF];
    Reprovados vetReprovados[TF];
    Media vetMedia6[TF];
    int TL=0, TP=0, TQ=0, TG=0, TM=0;
    do{
        tecla = menu();
        if(tecla=='A'){
            tecla1 = Cadastrar();
            switch(tecla1){
                case 'A':CadastroNome(vetAgenda, TL);break;
                case 'B':CodigoDisciplina(vetAgenda1, TP);break;
                case 'C':CadastroNota(vetAgenda, vetAgenda1, vetAgenda2, TL, TP, TQ);break;
            }
            getch();
        }
        else if(tecla=='B'){
            tecla1 = Excluir();
            switch(tecla1){
                case 'A':ExcluirCadastroNome(vetAgenda, TL);break;
                case 'B':ExcluirCodigoDisciplina(vetAgenda1, TP);break;
                case 'C':ExcluirCadastroNota(vetAgenda, vetAgenda1, vetAgenda2, TL, TP, TQ);break;
            }
            getch();
        }
        else{
            tecla1 = Exibir();
            switch(tecla1){
                case 'A':Exibir0(vetAgenda, TL);break;
                case 'B':Exibir1(vetAgenda1, TP);break;
                case 'C':Exibir2(vetAgenda, vetAgenda1, vetAgenda2,TL, TP, TQ);break;
                case 'D':ExibirReprovado(vetAgenda, vetAgenda2, vetReprovados, TL, TM, TQ, TG);break;
                case 'E':DeterminadaLetra(vetAgenda, TL);break;
                case 'F':ExibirMedia(vetAgenda, vetAgenda2, vetMedia6, TQ, TM, TL);break;
            }
            getch();
        }
    }while(tecla!=27);
}