Gerenciamento de alunos com dados armazenados em arquivo

Publicado por luiz eduardo da rocha oliveira (última atualização em 23/02/2017)

[ Hits: 2.019 ]

Download 6571.main.c




Acredito que vá ajudar a entender melhor como se trabalha com arquivos em C. Perdoem qualquer erro pois também sou iniciante na programação.

  



Esconder código-fonte

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <string.h>


/*Projetado por: Luiz Eduardo Da Rocha Oliveira
  Facol Faculdade Escritor Osman Da Costa Lins
  Desculpem pelo excesso de comentários rsrsrs*/


//struct
typedef struct{
    int matricula,sexo,idade,curso,turno;
    char nome[50];

}Taluno;

FILE *aluno; //ponteiro para o arquivo

Taluno raluno,saluno; // variaveis usadas para salvar, alterar e remover dados da struct


//procedimento para criação e abertura caso não exista o arquivo, se existir abertura.
void abrearquivo(){
    aluno=fopen("aluno.dat","r+b"); // se o arquivo existir abrir para leitura e escrita.

    if(aluno==NULL)
        aluno=fopen("aluno.dat","w+b"); // se o arquivo não existir criar um para leitura e escrita.
}


void linha(){
     int i;
     printf("\n");
     for(i=0;i<80;i++){
        printf("_");
     }
     printf("\n");

}


//procedimento para limpar a tela
void limpar(){
    system("cls || clear");
}


//procedimento para gerar numeros aleatorios para a matricula
int geradorM(){
    int m;
    srand(time(NULL));

    m=(rand()%1764008)*10;

    return m;
}



void cadastro(){
    int op1;

    do{
        linha();
        printf("%40s","CADASTRO");
        linha();
        raluno.matricula=0;
        raluno.matricula=geradorM();
        setlocale(LC_ALL,"");
        printf("\nInforme o Nome do Aluno: ");
        fflush(stdin);
        gets(raluno.nome);
        printf("\nInforme o sexo do aluno 1-MASC / 2-FEM: ");
        scanf("%d",&raluno.sexo);
        printf("\nInforme a idade do aluno: ");
        scanf("%d",&raluno.idade);
        printf("\nInforme o curso que o aluno deseja fazer 1-PHP / 2-JAVA / 3-MOBILE: ");
        scanf("%d",&raluno.curso);
        printf("\nInforme o turno que o aluno deseja estudar 1-MANHA / 2-NOITE: ");
        scanf("%d",&raluno.turno);

        //comandos para salvar os dados em um novo registro
        fseek(aluno,0,SEEK_END);
        fwrite(&raluno,sizeof(Taluno),1,aluno);

        printf("\nAluno cadastrado com sucesso\n");
        printf("\n%s foi cadastrado com matricula %d\n",raluno.nome,raluno.matricula);

        printf("\nDeseja cadastrar outro aluno? 1-SIM / 2-NÃO: ");
        scanf("%d",&op1);
        limpar();

    }while(op1==1);
}


//procedimento para busca de um registro no arquivo
int busca(int m){
    int posicao=0;

    //comandos para posicionar o ponteiro no inicio do arquivo e ler o arquivo
    rewind(aluno);
    fread(&raluno,sizeof(Taluno),1,aluno);

    while(feof(aluno)==0){
        if(raluno.matricula==m)
            return posicao;
        else{
           fread(&raluno,sizeof(Taluno),1,aluno);
           posicao++;
        }
    }
    return -1;
}



void exibir(int m1){
    char sexo[15],curso[15],turno[15];
    setlocale(LC_ALL,"");

    if(raluno.sexo==1)
        strcpy(sexo,"Masculino");
    else
        strcpy(sexo,"Feminino");


    if(raluno.curso==1)
        strcpy(curso,"Php");
    else if(raluno.curso==2)
        strcpy(curso,"Java");
    else
        strcpy(curso,"Mobile");


    if(raluno.turno==1)
        strcpy(turno,"Manhã");
    else
        strcpy(turno,"Noite");


    linha();
    printf("\n%-5s %d\n","Matricula:",raluno.matricula);
    printf("\n%-10s %s\n","Nome:",raluno.nome);
    printf("\n%-10s %d\n","Idade:",raluno.idade);
    printf("\n%-10s %s\n","Sexo:",sexo);
    printf("\n%-10s %s\n","Curso:",curso);
    printf("\n%-10s %s\n","Turno:",turno);
    linha();
}


void remover(){
    int op,op1,ma,ma1;

    do{
        linha();
        printf("%40s","REMOVER");
        linha();
        setlocale(LC_ALL,"");
        printf("\nInforme a matricula do aluno que deseja remover: ");
        scanf("%d",&ma);

        ma1=busca(ma);

        if(ma1==-1)
            printf("\nAluno não encontrado...\n");
        else{
            exibir(ma1);
            printf("\nDeseja realmente Remover este Aluno? 1-SIM /2-NÃO: ");
            scanf("%d",&op);
        }


        if(op==1){

            //comandos para remover o registro
            fseek(aluno,ma1*sizeof(Taluno),SEEK_SET);
            fwrite(&saluno,sizeof(Taluno),1,aluno);


            printf("\nAluno Removido com Sucesso...\n");
        }else if(ma1!=-1 && op==2)
            printf("\nRemoção Cancelada com sucesso...\n");



        printf("\nDeseja Remover outro Aluno? 1-SIM / 2-NÃO: ");
        scanf("%d",&op1);
        limpar();

    }while(op1==1);
}

void listagem(){
    char sexo[15],curso[15],turno[15];
    setlocale(LC_ALL,"");

    //comandos para posicionar o ponteiro no inicio e ler o arquivo
    rewind(aluno);
    fread(&raluno,sizeof(Taluno),1,aluno);

    printf("%40s","LISTAGEM");
    linha();
    printf("Matricula");
    printf("%12s","Nome");
    printf("%16s","Idade");
    printf("%12s","Sexo");
    printf("%14s","Curso");
    printf("%14s","Turno");
    linha();

    while(feof(aluno)==0){

    if(raluno.matricula!=0){

    if(raluno.sexo==1)
        strcpy(sexo,"Masculino");
    else
        strcpy(sexo,"Feminino");



    if(raluno.curso==1)
        strcpy(curso,"Php");
    else if(raluno.curso==2)
        strcpy(curso,"Java");
    else
        strcpy(curso,"Mobile");


    if(raluno.turno==1)
        strcpy(turno,"Manhã");
    else
        strcpy(turno,"Noite");


    printf("%-12d",raluno.matricula);
    printf("%-22s",raluno.nome);
    printf("%-10d",raluno.idade);
    printf("%-14s",sexo);
    printf("%-14s",curso);
    printf("%-8s",turno);

    fread(&raluno,sizeof(Taluno),1,aluno);

    }else
        fread(&raluno,sizeof(Taluno),1,aluno);

    }

    linha();

    printf("\n\nTecle enter para voltar para o menu...\n\n");
    getche();
    limpar();

}

void editar(){
    int op,op1,m,m1,op2,op3;

    do{
    linha();
    printf("%40s","EDITAR");
    linha();
    setlocale(LC_ALL,"");
    printf("\nInforme a Matricula do Aluno Que Deseja Editar: ");
    scanf("%d",&m);

    m1=busca(m);

    if(m1==-1){
        printf("\nAluno não encontrado...\n");
    }else{
        exibir(m1);
        printf("\nDeseja realmente editar este aluno? 1-SIM / 2-NÃO: ");
        scanf("%d",&op);
    }

    if(op==1){

        do{
            limpar();
            linha();
            printf("%40s","EDITAR");
            linha();
            printf("\n1 - Nome\n");
            printf("\n2 - Idade\n");
            printf("\n3 - Sexo\n");
            printf("\n4 - Curso\n");
            printf("\n5 - Turno\n");
            printf("\nEscolha a opção que deseja editar: ");
            scanf("%d",&op1);

            switch(op1){
                case 1:{
                    limpar();
                    printf("\nInforme o nome do aluno: ");
                    fflush(stdin);
                    gets(raluno.nome);
                    printf("\nAluno editado com sucesso...\n");
                    exibir(m1);
                }break;

                case 2:{
                    limpar();
                    printf("\nInforme a idade do aluno: ");
                    scanf("%d",&raluno.idade);
                    printf("\nAluno editado com sucesso...\n");
                    exibir(m1);
                }break;

                case 3:{
                    limpar();
                    printf("\nInforme o sexo do aluno 1-MASC / 2-FEM: ");
                    scanf("%d",&raluno.sexo);
                    printf("\nAluno editado com sucesso...\n");
                    exibir(m1);
                }break;

                case 4:{
                    limpar();
                    printf("\nInforme o curso do aluno 1-PHP / 2-JAVA / 3-MOBILE: ");
                    scanf("%d",&raluno.curso);
                    printf("\nAluno editado com sucesso...\n");
                    exibir(m1);
                }break;

                case 5:{
                    limpar();
                    printf("\nInforme o turno do aluno 1-MANHÃ / 2-NOITE: ");
                    scanf("%d",&raluno.turno);
                    printf("\nAluno editado com sucesso...\n");
                    exibir(m1);
                }break;

                default:printf("\a\nOpção invalida...\n");break;

            }

            //comandos para encontrar o registro e salvar as informações alteradas
            fseek(aluno,m1*sizeof(Taluno),SEEK_SET);
            fwrite(&raluno,sizeof(Taluno),1,aluno);

            printf("\nDeseja editar outra informação do aluno? 1-SIM / 2-NÃO: ");
            scanf("%d",&op2);

        }while(op2==1);


    }else if(m1!=-1 && op==2)
        printf("\nRemoção cancelada com sucesso...\n");

                if((m1==-1) ||(op2==2) || (op==2)){
                printf("\nDeseja editar outro aluno? 1-SIM / 2-NÃO: ");
                scanf("%d",&op3);
                limpar();
            }

    }while(op3==1);
}


int main(){
    abrearquivo();
    int escolha;
    do{
    setlocale(LC_ALL,"");
    printf("%40s","MENU");
    linha();
    printf("\n1 - Cadastrar\n");
    printf("\n2 - Remover\n");
    printf("\n3 - Editar\n");
    printf("\n4 - Listagem\n");
    printf("\n0 - Sair");
    linha();
    printf("\nEscolha uma opção: ");
    scanf("%d",&escolha);
    limpar();
    switch(escolha){
        case 1:cadastro();break;
        case 2:remover();break;
        case 3:editar();break;
        case 4:listagem();break;
        case 0:fclose(aluno);break;
        default:printf("\a");break; /* \a usado para dar um bip quando o usuario
                                        optar por uma opção diferente das oferecidas */
    }

}while(escolha!=0);

return 0;
system("pause");
}

Scripts recomendados

FileCopy - Copiador de Arquivo de Texto

ORDENACAO PELO METODO SHELLSORT

Organizador de filmes para o IMDB

Ler string de um ficheiro

Agenda Eletronica


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts