Gerenciamento de alunos com dados armazenados em arquivo

Publicado por luiz eduardo da rocha oliveira (ķltima atualizaÁ„o em 23/02/2017)

[ Hits: 1.559 ]

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

Convers„o integral de textos em letras maiķsculas

Agenda (fones, compromissos, aniversŠrios) em C usando arquivos binŠrios

Busca binŠria

Justificador de texto em 80 colunas

Agenda Eletronica


  

ComentŠrios

Nenhum comentŠrio foi encontrado.


Contribuir com comentŠrio




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts