All pastes #796324 Raw Edit

Exemplo de programa com um arqui

public c v1 · immutable
#796324 ·published 2007-11-24 23:51 UTC
rendered paste body
#include <stdio.h>#include <conio2.h>#include <ctype.h> #include <windows.h>#include <time.h>#include "minhabib.c"/* Programa para executar funcoes diretamente do arquivo de acesso aleatorio.    O programa irá fazer o controle dos dados dos alunos de uma turma.*/  typedef struct{ int mat,disc;                   char nome[20];                   float med;                }Talunos;  Talunos aa,an;   int op, la,qa,posicao,ql, l, qt, pos,tecla;  FILE *pf;   char resp[1], nomelido[80]; //ler a resposta e transforma para maiusculovoid resposta(){ fflush(stdin);  gets(resp);  resp[0]=toupper(resp[0]);}void testenome(){ int tn, i;  tn = strlen(nomelido);  if (tn>19)  {   strncpy(aa.nome,nomelido,19);      aa.nome[19]='\0';  }  else     strcpy(aa.nome,nomelido);}//verifica quantos registros tem no arquivo  int verquant(){ int qr=0;  fseek(pf,0, SEEK_SET);  fread(&aa, sizeof(Talunos), 1, pf);  while(!feof(pf))  {  if (aa.mat !=0)      qr++;      fread(&aa, sizeof(Talunos), 1, pf);  }  return qr;  }//abre arquivo e retorna a quantidade de registrosint abre_arquivo(){  int quantreg;    if ((pf = fopen("arq.dat","r+b"))== NULL)      pf = fopen("arq.dat","w+b");   // arquivo nao existe, precisa ser criado e inicializado   quantreg = verquant();    an.mat =0;   an.med=0;   an.disc=0;   strcpy(aa.nome," \0");   return quantreg;      }//procura registro no arquivoint procura(int matp){ int p;  p= 0;  fseek(pf,0, SEEK_SET);  fread(&aa, sizeof(Talunos), 1, pf);  while ((!feof(pf)) && (aa.mat!=matp))  {  fread(&aa, sizeof(Talunos),1, pf);     p++;  }       if (aa.mat == matp)     return p;  else     return -1;}// apresenta os dados do aluno na telavoid mostre(){  moldura2(3,12,78,16,14);   vertical(12,16,15,14);   vertical(12,16,56,14);   vertical(12,16,70,14);   gotoxy(5,13);   aprintf("Matrícula");   gotoxy(17,13);   printf("Nome do Aluno");   gotoxy(58,13);   printf("Disciplina");   gotoxy(72,13);   aprintf("Média");   textcolor(YELLOW);   gotoxy(5,15);   printf("%9d",aa.mat);   gotoxy(17,15);   printf("%-20s",aa.nome);   gotoxy(58,15);   if (aa.disc==1)      aprintf("Lógica     ");   else      aprintf("Programação");    gotoxy(72,15);   printf("%5.2f",aa.med);   textcolor(WHITE);}// Inserir um novo aluno no arquivovoid inserir(){ int teste;  char numl[10];  do{ tela("Cadastrar Novo Aluno");      gotoxy(7,9);      aprintf("Número de Matrícula...............: ");      gotoxy(7,11);      printf("Nome do Aluno.....................: ");      gotoxy(7,13);      aprintf("Disciplina(1-Lógica/2-Programação): ");      gotoxy(7,15);      aprintf("Média do Aluno....................: ");      // leitura e validacao da matricula      do{ limpalinha(43,9);          textcolor(YELLOW);          gotoxy(43,9);                fflush(stdin);          gets(numl);          teste=1;          if (strlen(numl)!=0)          {  teste=testeint(numl);             if (teste==0)                aa.mat = atoi(numl);             else             {  mensagem("\aA matrícula é um campo numérico!",LIGHTRED);                 limpa();             }          }                   } while (teste==1);                gotoxy(43,11);            fflush(stdin);      // leitura e validacao do nome      gets(nomelido);      testenome();      // leitura e validacao da disciplina      do{ limpalinha(43,13);          textcolor(YELLOW);          gotoxy(43,13);                fflush(stdin);          gets(numl);          teste=1;          if (strlen(numl)!=0)          {  teste=testeint(numl);             if (teste==0)              {  aa.disc = atoi(numl);                 if ((aa.disc<0) || (aa.disc>2))                 {   mensagem("\aA disciplina é 1 ou 2 - valor fora do limite!",LIGHTRED);                      limpa();                     teste=1;                 }              }              else              {  mensagem("\aA disciplina é um campo numérico!",LIGHTRED);                  limpa();              }          }                   } while (teste==1);                //leitura e validacao da media      do{ limpalinha(43,15);          textcolor(YELLOW);          gotoxy(43,15);               fflush(stdin);          gets(numl);                    if (teste==0)          {   aa.med = atof(numl);              if ((aa.med<0) || (aa.med>10))              {   mensagem("\aA média varia de 0 a 10 - valor fora do limite!",LIGHTRED);                   limpa();                  teste=1;              }          }          else          {  mensagem("\aA média é um campo numérico!",LIGHTRED);              limpa();          }                   } while (teste==1);               fseek(pf,0,SEEK_END);      fwrite(&aa,sizeof(Talunos),1,pf);      qa++;      mensagem(MSG_INS_OK,CYAN);      limpa();      aprintf("Inserir outro aluno(S-sim/N-não)? ");      textcolor(YELLOW);      resposta();      textcolor(WHITE);   }while (resp[0] == 'S');}// Remover um aluno do arquivovoid remover(){   int matrem, conrem;    do{ tela("Remover Aluno");        gotoxy(7,9);        aprintf("Número de Matrícula: ");        textcolor(YELLOW);        scanf("%d",&matrem);        textcolor(WHITE);        posicao = procura(matrem);        if (posicao == -1)          mensagem(MSG_ALU_ERRO,LIGHTRED);         else        { mostre();          limpa();          aprintf("Deseja remover o aluno (S-sim/N-não)? ");          textcolor(YELLOW);          resposta();          textcolor(WHITE);          if (resp[0] == 'S')          {  fseek(pf,posicao*sizeof(Talunos), SEEK_SET);             fwrite(&an, sizeof(Talunos), 1, pf);             mensagem(MSG_REM_OK,CYAN);              qa--;          }              else             mensagem(MSG_REM_CAN,LIGHTRED);         }        limpamostre();        limpa();        aprintf("Remover outro aluno (S-sim/N-não)? ");        textcolor(YELLOW);        resposta();        textcolor(WHITE);   }while (resp[0] == 'S');}//Consultar um aluno do arquivovoid consultar(){   int matcon;    do{ tela("Consultar Aluno");        gotoxy(7,9);        aprintf("Número de Matrícula: ");        textcolor(YELLOW);        scanf("%d",&matcon);        textcolor(WHITE);        posicao = procura(matcon);        if (posicao  == -1)          mensagem(MSG_ALU_ERRO,LIGHTRED);         else          mostre();        limpa();        aprintf("Consultar outro aluno(S-sim/N-não)? ");        textcolor(YELLOW);                resposta();        textcolor(WHITE);    }while (resp[0] == 'S');}//Fazer alteracao dos dados de um alunovoid alterar(){   int matalt, conalt;    do{ tela("Alterar Dados do Aluno");        gotoxy(7,9);        aprintf("Número de Matrícula: ");        textcolor(YELLOW);        scanf("%d",&matalt);        textcolor(WHITE);        posicao = procura(matalt);        if (posicao == -1)         mensagem(MSG_ALU_ERRO,LIGHTRED);         else        { mostre();            do{ limpa();              aprintf("Alterar (1-Nome/2-Média/3-Disciplina) ou Sair (0): ");              textcolor(YELLOW);              scanf("%d",&conalt);              textcolor(WHITE);              switch(conalt)              { case 1: limpa();                        fflush(stdin);                        printf("Novo Nome : ");                        textcolor(YELLOW);                        gets(nomelido);                        testenome();                        textcolor(WHITE);                        mostre();                        limpa();                        printf("Nome Alterado com sucesso! Tecle enter...");                        getche();                        break;                case 2: limpa();                        aprintf("Nova Média : ");                        textcolor(YELLOW);                        scanf("%f",&aa.med);                        textcolor(WHITE);                        mostre();                        limpa();                        aprintf("Média Alterada com sucesso! Tecle enter...");                        getche();                        break;                case 3: limpa();                        aprintf("Nova Disciplina(1-Lógica/2-Programação): ");                        textcolor(YELLOW);                        scanf("%d",&aa.disc);                        textcolor(WHITE);                        mostre();                        limpa();                        aprintf("Disciplina Alterada com sucesso! Tecle enter...");                        getche();                        break;                                                                case 0: break;                default: limpa();                         aprintf("Opção Inválida! Tecle enter...");                         getche();                         break;              }                      } while  (conalt != 0);          fseek(pf,posicao*sizeof(Talunos), SEEK_SET);          fwrite(&aa, sizeof(Talunos), 1, pf);        }        limpamostre();        limpa();        aprintf("Alterar outro aluno(S-sim/N-não)? ");        textcolor(YELLOW);        resposta();        textcolor(WHITE);    }while (resp[0] == 'S');}//monta a tela da listagemvoid telalista(){   tela("Listagem Geral");     moldura2(3,6,78,20,8);    vertical(6,20,15,8);    vertical(6,20,56,8);    vertical(6,20,70,8);    gotoxy(5,7);    aprintf("Matrícula");    gotoxy(17,7);    printf("Nome do Aluno");    gotoxy(58,7);    printf("Disciplina");    gotoxy(72,7);    aprintf("Média");}//Imprimir o relatorio contendo os dados de todos os alunosvoid listagem(){ int i,j;  ql=10;  qt= qa/ql;  i=0;  if (qa%ql!=0)    qt = qt+1;  fseek(pf,0, SEEK_SET);  fread(&aa, sizeof(Talunos), 1, pf);     i=0;  for (j = 1; j<=qt; j++)  { telalista();    l= 9;        la=0;    textcolor(YELLOW);     do    {  if (aa.mat !=0)       { gotoxy(5,l);         printf("%9d",aa.mat);         gotoxy(17,l);         printf("%-20s",aa.nome);         gotoxy(58,l);         if (aa.disc==1)            aprintf("Lógica     ");         else            aprintf("Programação");          gotoxy(72,l);         printf("%5.2f",aa.med);         l++;         la++;       }       fread(&aa, sizeof(Talunos), 1, pf);    } while ((la<ql) && (!feof(pf)));    gotoxy(3,23);    aprintf("\apágina ");    printf("%d/%d...tecle enter...",j,qt);    textcolor(WHITE);    getche();  }}//posiciona no registro que ira iniciar a paginavoid posiciona(int pg){ int contador;  contador=0;  fseek(pf,0, SEEK_SET);  fread(&aa, sizeof(Talunos), 1, pf);  if (pg !=1)  {  while ((!feof(pf)) && (contador<(ql*(pg-1))))     { if (aa.mat !=0)         contador++;       fread(&aa, sizeof(Talunos), 1, pf);     }  }}//faz a listagem de uma paginavoid listagempg(int pagina){ telalista();  l= 9;      la=0;  textcolor(YELLOW);  if (pos == 1)     posiciona(pagina);   do  {  if (aa.mat !=0)     { gotoxy(5,l);       printf("%9d",aa.mat);       gotoxy(17,l);       printf("%-20s",aa.nome);       gotoxy(58,l);       if (aa.disc==1)          aprintf("Lógica     ");       else          aprintf("Programação");        gotoxy(72,l);       printf("%5.2f",aa.med);       l++;       la++;     }     fread(&aa, sizeof(Talunos), 1, pf);  } while ((la<ql) && (!feof(pf)));  gotoxy(66,21);  aprintf("\apágina ");  printf("%d de %d",pagina,qt);  textcolor(WHITE);}     //Imprimir o relatorio contendo os dados de todos os alunos, paginacao para frente e trasvoid listagemp(){ int ok,pa,escolha;  ql=10;  qt= qa/ql;  pa=1;  if (qa%ql!=0)    qt = qt+1;  fseek(pf,0, SEEK_SET);  fread(&aa, sizeof(Talunos), 1, pf);     ok=1;  do{ if (ok==1)         listagempg(pa);      pos=0;      do{ limpa();          aprintf("Escolha(A-página anterior/P-próxima página/0-sair): ");          textcolor(YELLOW);          fflush(stdin);          escolha = getch();          textcolor(WHITE);      }while(((escolha!=48)&&(escolha!=97)&&(escolha!=65)&&(escolha!=112)&&(escolha!=80)));//scanf("%d",&escolha);      textcolor(WHITE);      switch(escolha)      {case 97: case 65: if (pa !=1)                { pa--;                  ok=1;                  pos=1;                }                else                {  mensagem("\aEsta é a primeira página!",LIGHTRED);                     ok=0;                }                break;       case 112: case 80: if (pa !=qt)                { pa++;                 ok=1;                 }                else                {  mensagem("\aEsta é a ultima página!",LIGHTRED);                     ok=0;                }                break;      }             }while (escolha !=48);}//remove registros em branco do arquivovoid limpafile(){   FILE *pfl;    pfl = fopen("temp.dat","w+b");      fseek(pf,0, SEEK_SET);    fread(&aa, sizeof(Talunos), 1, pf);    while (!feof(pf))    { if (aa.mat != 0)          fwrite(&aa,sizeof(Talunos),1, pfl);       fread(&aa, sizeof(Talunos),1, pf);    }         fclose(pfl);    fclose(pf);    remove("arq.dat");    rename("temp.dat","arq.dat");    if ((pf = fopen("arq.dat","r+b"))== NULL)      pf = fopen("arq.dat","w+b");    limpa();   mensagem("\aRegistros nulos foram apagados!...tecle Enter...",LIGHTRED);} //Programa principalmain(){ qa = abre_arquivo();  do   { menu();    op = getche();      textcolor(WHITE);    if ((op<48)||(op>53))       mensagem(MSG_OP_ERRO,LIGHTRED);     else      if ((op!=49) && (qa==0) && (op!=48))        mensagem(MSG_ALU_ERRO2,LIGHTRED);       else      { switch(op)        { case 49: inserir(); break;          case 50: remover(); break;          case 51: consultar(); break;          case 52: alterar();  break;          case 53: listagemp(); break;          case 48: limpa();                  textcolor(LIGHTRED);                  aprintf("\aVocê deseja remover os registros nulos antes de sair(S-sim/N-não)? ");                  textcolor(WHITE);                  la=getch();                  if ((la==115)||(la==83))                    limpafile();                          fclose(pf);                  break;                   }        }  } while (op != 48);}