Gerenciamento de alunos com dados armazenados em arquivo

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

[ Hits: 1.545 ]

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

Mexendo com arquivos em C

Extract

Executar um arquivo com o programa padr„o no C#

FaÁa um programa em c++ gere um arquivo e depois leia usando um gerador de numeros do tipo s


  

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