Gerenciamento de alunos com dados armazenados em arquivo

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

[ Hits: 2.191 ]

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

Manipulação de registros em arquivos utilizando índices

Pequeno simulador de Banco de Dados

Alfabeto escrito 30 vezes e operação XOR

Programa para inversão de colunas

FileCopy - Copiador de Arquivo de Texto


  

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