All pastes #803988 Raw Edit

Cadastro de Clientes

public c v1 · immutable
·published 2007-12-03 00:17 UTC
rendered paste body
#include <stdio.h>#include <conio2.h>#include <ctype.h> #include <windows.h>#include <time.h>#include "My_Library.c"typedef struct{ int cod, idade, pac, quarto, pol;                char nome[20];                float valor;              }Tclientes;              Tclientes clientegrav, clienteaux, clientenulo; //registros auxiliaresint op, la, qcn, qcs, posicao, ql, l, qt, pos, tecla;FILE *pn, *ps; //ponteiros para os ônibus de Natal e Salvadorchar resp[1], nomelido[80]; //ler a resposta e transforma para maiúsculovoid resposta(){ fflush(stdin);  gets(resp);  resp[0]=toupper(resp[0]);}//void testenome(){ int tn, i;  tn = strlen(nomelido);  if (tn>19)  {   strncpy(clientegrav.nome,nomelido,19);      clientegrav.nome[19]='\0';  }  else     strcpy(clientegrav.nome,nomelido);}//verifica a quantidade de registros no arquivo de Natalint verquantn(){ int qrn=0;  fseek(pn,0, SEEK_SET);  fread(&clienteaux, sizeof(Tclientes), 1, pn);  while(!feof(pn))  {  if (clienteaux.cod != 0)      qrn++;      fread(&clienteaux, sizeof(Tclientes), 1, pn);  }  return qrn;}  //verifica a quantidade de registros no arquivo de Salvadorint verquants(){ int qrs=0;  fseek(ps,0, SEEK_SET);  fread(&clienteaux, sizeof(Tclientes), 1, ps);  while(!feof(ps))  {  if (clienteaux.cod != 0)      qrs++;      fread(&clienteaux, sizeof(Tclientes), 1, ps);  }  return qrs;    }//Abre o arquivo de Natal e retorna a quantidade de registrosint abre_arquivon(){  int i, quantregn;   clientenulo.cod =0;   clientenulo.idade =0;     clientenulo.pac =0;   clientenulo.quarto =0;   clientenulo.pol =0;   clientenulo.valor =0;   strcpy(clientenulo.nome," \0");   if ((pn = fopen("arqnat.dat","r+b"))== NULL)   {     pn = fopen("arqnat.dat","w+b");//O arquivo de Natal não existe, precisa ser criado e inicializado           for(i=1;i<=40;i++)           { fseek(pn,(i-1)*sizeof(Tclientes),SEEK_SET);            fwrite(&clientenulo,sizeof(Tclientes),1,pn);          }   }   quantregn = verquantn();    return quantregn;}//abre o arquivo de Salvador e retorna a quantidade de registrosint abre_arquivos(){  int i, quantregs;    clientenulo.cod =0;   clientenulo.idade =0;     clientenulo.pac =0;   clientenulo.quarto =0;   clientenulo.pol =0;   clientenulo.valor =0;   strcpy(clientenulo.nome," \0");   if ((ps = fopen("arqsal.dat","r+b"))== NULL)   {     ps = fopen("arqsal.dat","w+b");//O arquivo de Salvador não existe, precisa ser criado e inicializado       for(i=1;i<=40;i++)        {   fseek(ps,(i-1)*sizeof(Tclientes),SEEK_SET);           fwrite(&clientenulo,sizeof(Tclientes),1,ps);       }   }   quantregs = verquants();    return quantregs;}//Procura por código nos arquivos de Natal ou Salvadorint procuracod(int codp){ int p;  p= 0;  rewind(pn);  fread(&clienteaux, sizeof(Tclientes), 1, pn);  while ((!feof(pn)) && (clienteaux.cod!=codp))  {  fread(&clienteaux, sizeof(Tclientes),1, pn);     p++;  }       if (clienteaux.cod == codp)     return p;  else  {p= 0;  rewind(ps);  fread(&clienteaux, sizeof(Tclientes), 1, ps);  while ((!feof(ps)) && (clienteaux.cod!=codp))  {  fread(&clienteaux, sizeof(Tclientes),1, ps);     p++;  }       if (clienteaux.cod == codp)     return p;  else     return -1;  }}//Procura por nome nos arquivos de Natal ou Salvadorint procuranome(char nomep){ int p,i;  p= 0;  rewind(pn);  fread(&clienteaux, sizeof(Tclientes), 1, pn);  for(i=1;i<=40;i++);  {while ((!feof(pn)) && (clienteaux.nome[i-1]!=nomep))  {  fread(&clienteaux, sizeof(Tclientes),1, pn);     p++;  }       if (clienteaux.nome[i-1] == nomep)     return p;  else  {p= 0;  rewind(ps);  fread(&clienteaux, sizeof(Tclientes), 1, ps);  while ((!feof(ps)) && (clienteaux.nome[i-1]!=nomep))  {  fread(&clienteaux, sizeof(Tclientes),1, ps);     p++;  }       if (clienteaux.nome[i-1] == nomep)     return p;  else     return -1;  } }}//Procura por poltrona vazia no arquivo de Natalint procurapolnat(int polp){ int p;  p= 0;  rewind(pn);  fread(&clienteaux, sizeof(Tclientes), 1, pn);  while ((!feof(pn)) && (clienteaux.pol!=polp))  {  fread(&clienteaux, sizeof(Tclientes),1, pn);     p++;  }       if (clienteaux.pol == polp)     return p;  else    return -1;}  //Procura por poltrona vazia no arquivo de Salvadorint procurapolsal(int polp){ int p;  p= 0;  rewind(ps);  fread(&clienteaux, sizeof(Tclientes), 1, ps);  while ((!feof(ps)) && (clienteaux.pol!=polp))  {  fread(&clienteaux, sizeof(Tclientes),1, ps);     p++;  }       if (clienteaux.pol == polp)      return p;  else    return -1;}  // imprime os dados dos clientes de Natal ou Salvador na telavoid mostre(){  moldura2(3,12,78,16,14);   vertical(12,16,12,14);   vertical(12,16,34,14);   vertical(12,16,42,14);   vertical(12,16,53,14);   vertical(12,16,64,14);   gotoxy(5,13);   aprintf("Código");   gotoxy(14,13);   printf("Nome do Cliente");   gotoxy(36,13);   printf("Idade");   gotoxy(44,13);   printf("Pacote");   gotoxy(55,13);   printf("Quarto");   gotoxy(66,13);   printf("Poltrona");   textcolor(YELLOW);   gotoxy(5,15);   printf("%6d",clienteaux.cod);   gotoxy(14,15);   printf("%-20s",clienteaux.nome);   gotoxy(36,15);   printf("%5d",clienteaux.idade);   gotoxy(44,15);   if (clienteaux.pac==1)      printf("Salvador");   else      printf("Natal   ");    gotoxy(55,15);   if (clienteaux.quarto==1)      printf("Standard");   else      printf("Luxo    ");    gotoxy(66,15);   printf("%8d",clienteaux.pol);   textcolor(WHITE);}//Compra de pacotes de Natal ou Salvador(Inserção de clientes)void inserir(){ int teste, x;  char numl[10];  do{ tela("Compra de pacote");      gotoxy(7,9);      aprintf("Código do cliente................: ");      gotoxy(7,11);      printf("Nome do cliente..................: ");      gotoxy(7,13);      printf("Idade:...........................: ");      gotoxy(7,15);      printf("Pacote(1-Salvador/2-Natal........: ");      gotoxy(7,17);      printf("Quarto(1-Standard/2-Luxo.........: ");      gotoxy(7,19);      printf("Poltrona.........................: ");      // leitura e validação do código      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)             {   posicao = procuracod(atoi(numl));                 if (posicao != -1)                 { mensagem(MSG_COD_REP,LIGHTRED);                     limpa();                   teste =1;                 }                  else                   clientegrav.cod = atoi(numl);              }             else             {  mensagem("\aA código é um campo numérico!",LIGHTRED);                 limpa();             }                       }                   } while (teste==1);                textcolor(YELLOW);      gotoxy(43,11);            fflush(stdin);// leitura e validacao do nome      gets(nomelido);      testenome();      // leitura e validacao da idade      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)                clientegrav.idade = atoi(numl);             else             {  mensagem("\aA idade é um campo numérico!",LIGHTRED);                 limpa();             }           }                     } while (teste==1);                      //leitura e validacao do pacote      do{ limpalinha(43,15);          textcolor(YELLOW);          gotoxy(43,15);                fflush(stdin);          gets(numl);          teste=1;          if (strlen(numl)!=0)          {  teste=testeint(numl);             if (teste==0)              {  clientegrav.pac = atoi(numl);                 if ((clientegrav.pac<1) || (clientegrav.pac>2))                 {   mensagem("\aA opção de pacote é 1 ou 2 - valor fora do limite!",LIGHTRED);                      limpa();                     teste=1;                 }              }              else              {  mensagem("\aO pacote é um campo numérico!",LIGHTRED);                  limpa();              }          }                   } while (teste==1);                //leitura e validacao do quarto      do{ limpalinha(43,17);          textcolor(YELLOW);          gotoxy(43,17);                fflush(stdin);          gets(numl);          teste=1;          if (strlen(numl)!=0)          {  teste=testeint(numl);             if (teste==0)              {  clientegrav.quarto = atoi(numl);                 if ((clientegrav.quarto<1) || (clientegrav.quarto>2))                 {   mensagem("\aA opção de quarto é 1 ou 2 - valor fora do limite!",LIGHTRED);                      limpa();                     teste=1;                 }              }              else              {  mensagem("\aO quarto é um campo numérico!",LIGHTRED);                  limpa();              }          }                   } while (teste==1);                //leitura e validacao da poltrona  do{  limpalinha(43,19);      textcolor(YELLOW);      gotoxy(43,19);           fflush(stdin);      gets(numl);      teste=1;       if (strlen(numl)!=0)        teste=testeint(numl);         if ((teste==0) && (clientegrav.pac==1))        { posicao = procurapolsal(atoi(numl));           if (posicao != -1)          { mensagem(MSG_POL_Ocup,LIGHTRED);            limpa();            teste=1;          }           x = atoi(numl);           if ((x<1) || (x>40))          {  mensagem("\aA opção de poltrona é entre 1 a 40 - valor fora do limite!",LIGHTRED);             limpa();             teste=1;           }          if ((posicao == -1) && (x>0) || (x<41))            clientegrav.pol = x;                  }if (teste!=0)                 {  mensagem("\aA poltrona é um campo numérico!",LIGHTRED);                   limpa();                }                 if ((teste==0) && (clientegrav.pac==2))            { posicao = procurapolnat(atoi(numl));           if (posicao != -1)          { mensagem(MSG_POL_Ocup,LIGHTRED);            limpa();            teste=1;          }           x = atoi(numl);           if ((x<1) || (x>40))          {  mensagem("\aA opção de poltrona é entre 1 a 40 - valor fora do limite!",LIGHTRED);             limpa();             teste=1;          }          if ((posicao == -1) && (x>0) || (x<41))            {clientegrav.pol = x;            }              }if(teste!=0)             { mensagem("\aA poltrona é um campo numérico!",LIGHTRED);                 limpa();             }  } while (teste==1);  if (clientegrav.pac == 1)  { fseek(ps,(clientegrav.pol-1)*sizeof(Tclientes),SEEK_SET);    fwrite(&clientegrav,sizeof(Tclientes),1,ps);    qcs++;  }  else  { fseek(pn,(clientegrav.pol-1)*sizeof(Tclientes),SEEK_SET);    fwrite(&clientegrav,sizeof(Tclientes),1,pn);    qcn++;  }  mensagem(MSG_INS_OK,LIGHTBLUE);  mensagem("Inserir outro cliente(S-sim/N-não)? ",WHITE);  textcolor(YELLOW);  resposta();   textcolor(WHITE);  }while (resp[0] == 'S');}//valor da viagem de cada clientevoid consultaval(){int teste; char codval[10]; do {tela("Cálculo do valor do pacote");        gotoxy(7,9);        aprintf("Código do cliente: ");        textcolor(YELLOW);        fflush(stdin);        gets(codval);        teste=1;        if (strlen(codval)!=0)            teste=testeint(codval);             if (teste==0)               { posicao = procuracod(atoi(codval));                 if (posicao == -1)                 mensagem(MSG_CONS_COD,LIGHTRED);                   if ((posicao != -1) && (clientegrav.quarto == 1) && (clientegrav.idade > 60) && (clientegrav.pac == 1))                 clientegrav.valor= 500+(500*0.15);                 if ((posicao != -1) && (clientegrav.quarto == 1) && (clientegrav.idade < 60) && (clientegrav.pac == 1))                       clientegrav.valor= 500;                 if ((posicao != -1) && (clientegrav.quarto == 2) && (clientegrav.idade > 60) && (clientegrav.pac == 1))                  clientegrav.valor = 700+(700*0.15);                 if ((posicao != -1) && (clientegrav.quarto == 2) && (clientegrav.idade < 60) && (clientegrav.pac == 1))                   clientegrav.valor = 700;                 if ((posicao != -1) && (clientegrav.quarto == 1) && (clientegrav.idade > 60) && (clientegrav.pac == 2))                 clientegrav.valor = 400+(400*0.15);                 if ((posicao != -1) && (clientegrav.quarto == 1) && (clientegrav.idade < 60) && (clientegrav.pac == 2))                       clientegrav.valor = 400;                 if ((posicao != -1) && (clientegrav.quarto == 2) && (clientegrav.idade > 60) && (clientegrav.pac == 2))                  clientegrav.valor = 650+(650*0.15);                 if ((posicao != -1) && (clientegrav.quarto == 2) && (clientegrav.idade < 60) && (clientegrav.pac == 2))                   clientegrav.valor = 400;                  textcolor(WHITE);                     mostre();                 textcolor(GREEN);                 gotoxy(47,21);                 printf("Total da viagem: R$ " );                 textcolor(LIGHTRED);                 gotoxy(67,21);                 printf("%5.2f",clientegrav.valor);                 getche();                 limpa();               }else mensagem("\aO código é um campo numérico!",LIGHTRED);   }while(teste==1);}      //Desistência de pacotevoid remover(){   int teste, pacrem;    do{ tela("Desistência de Pacote");        gotoxy(7,9);        aprintf("Código do cliente: ");        textcolor(YELLOW);        scanf("%d",&pacrem);        posicao = procuracod(pacrem);                 if (posicao == -1)                 mensagem(MSG_CONS_COD,LIGHTRED);                   if (posicao != -1)                 {textcolor(WHITE);                  mostre();                  limpa();                 }          mensagem("Confirma desistência do cliente(S-sim/N-não)? ",LIGHTRED);          textcolor(YELLOW);          resposta();      if ((resp[0] == 'S') && (clientegrav.pac == 1))      {fseek(ps,posicao*sizeof(Tclientes),SEEK_SET);       fwrite(&clientenulo, sizeof(Tclientes), 1, ps);       qcs--;       mensagem(MSG_REM_OK, LIGHTRED);       limpa();      }      if ((resp[0] == 'S') && (clientegrav.pac == 2))      {fseek(pn,posicao*sizeof(Tclientes),SEEK_SET);       fwrite(&clientenulo, sizeof(Tclientes), 1, pn);       qcn--;       mensagem(MSG_REM_OK, LIGHTRED);       limpa();      }      limpamostre();      limpa();      mensagem("Confirmar desistência de outro cliente(S-sim/N-não)? ",LIGHTRED);      textcolor(YELLOW);      resposta();      textcolor(WHITE);   }while (resp[0] == 'S');}//Consultar cliente por códigovoid consultacod(){   char codcon[10];    int teste;    do{ tela("Consultar cliente por código");        gotoxy(7,9);        aprintf("Código do cliente: ");        textcolor(YELLOW);        fflush(stdin);        gets(codcon);        teste=1;          if (strlen(codcon)!=0)            teste=testeint(codcon);             if (teste==0)             {   posicao = procuracod(atoi(codcon));                  if (posicao == -1)                 {mensagem(MSG_CONS_COD,LIGHTRED);                 limpa();                 }                   if (posicao != -1)                 {textcolor(WHITE);                  mostre();                  limpa();                 }           }else               {limpa();               mensagem("\aO código é um campo numérico!",LIGHTRED);               limpa();               teste=1;               }        textcolor(WHITE);        mensagem("Consultar outro cliente(S-sim/N-não)? ",WHITE);        textcolor(YELLOW);                resposta();        textcolor(WHITE);        }while ((teste == 1) && (resp[0]=='S'));}//Consultar cliente por nomevoid consultanome(){   char nomecon[20];    int teste;    do{ tela("Consultar cliente por nome");        gotoxy(7,9);        aprintf("Nome do cliente: ");        textcolor(YELLOW);        fflush(stdin);        gets(nomecon);        posicao = procuranome(atoi(nomecon));                 if (posicao == -1)                 mensagem(MSG_CONS_COD,LIGHTRED);                   else                 {textcolor(WHITE);                  mostre();                  limpa();                 }        mensagem("Consultar outro cliente(S-sim/N-não)? ",WHITE);        textcolor(YELLOW);                resposta();        textcolor(WHITE);    }while (resp[0] == 'S');}//Mudança de pacotevoid mudanca(){   char codcon[10];    int teste, transpol;    do{ tela("Transferir de pacote");        gotoxy(7,9);        aprintf("Código do cliente: ");        textcolor(YELLOW);        fflush(stdin);        gets(codcon);        teste=1;          if (strlen(codcon)!=0)           teste=testeint(codcon);             if (teste==0)             { posicao = procuracod((int)codcon);                if (posicao == -1)                 mensagem(MSG_CONS_COD,LIGHTRED);                 if (posicao != -1)                 {mostre();                  limpa();                 }             }else mensagem("\aO código é um campo numérico!",LIGHTRED);             aprintf("Confirma transferência do cliente(S-sim/N-não)? ");        textcolor(YELLOW);                resposta();        textcolor(WHITE);        if ((resp[0] == 'S') && (clienteaux.pac == 1))                         {   limpa();                             printf("Informe a poltrona no novo pacote: ");                             textcolor(YELLOW);                              scanf("%d",&transpol);                             posicao = procurapolnat(transpol);                             if (posicao == -1)                             {fseek(pn,(transpol-1)*sizeof(Tclientes), SEEK_SET);                               fwrite(&clienteaux,sizeof(Tclientes),1,pn);                              qcn++;                              fseek(ps,posicao*sizeof(Tclientes),SEEK_SET);                              fwrite(&clientenulo, sizeof(Tclientes), 1, ps);                              qcs--;                             }                         }                  if ((resp[0] == 'S') && (clienteaux.pac == 2))                          {   limpa();                             printf("Informe a poltrona no novo pacote: ");                             textcolor(YELLOW);                              scanf("%d",&transpol);                             posicao = procurapolsal(transpol);                             if (posicao == -1)                             {fseek(ps,(transpol-1)*sizeof(Tclientes), SEEK_SET);                               fwrite(&clienteaux,sizeof(Tclientes),1,pn);                              qcs++;                              fseek(pn,posicao*sizeof(Tclientes),SEEK_SET);                              fwrite(&clientenulo, sizeof(Tclientes), 1, pn);                              qcn--;                             }                         }                                                  }while(resp[0]=='S');                             }                        void limpafile(){   FILE *pfl;    pfl = fopen("temp.dat","w+b");      fseek(pn,0, SEEK_SET);    fseek(ps,0, SEEK_SET);    fread(&clienteaux, sizeof(Tclientes), 1, pn);    fread(&clienteaux, sizeof(Tclientes), 1, ps);    while ((!feof(pn)) && (!feof(ps)))     { if (clienteaux.cod != 0)          fwrite(&clienteaux,sizeof(Tclientes),1, pfl);           fread(&clienteaux, sizeof(Tclientes),1, pn);          fread(&clienteaux, sizeof(Tclientes),1, ps);    }         fclose(pfl);    fclose(pn);    fclose(ps);    remove("arqnat.dat");    remove("arqsal.dat");    rename("temp.dat","arqnat.dat");    rename("temp.dat","arqsal.dat");    if (((pn = fopen("arqnat.dat","r+b"))== NULL) && ((ps = fopen("arqsal.dat","r+b"))== NULL))      pn = fopen("arqnat.dat","w+b");      pn = fopen("arqsal.dat","w+b");     limpa();   mensagem("\aRegistros nulos foram apagados!...tecle Enter...",LIGHTRED);}main(){ qcs = abre_arquivos();  qcn = abre_arquivon();do   { menu();    op = getche();      textcolor(WHITE);    if ((op<48)||(op>53))       mensagem(MSG_OP_ERRO,LIGHTRED);    else      { switch(op)        { case 49: inserir(); break;/*1*/          case 50: remover(); break;/*2*/          case 51: consultacod(); break;/*3*/          case 52: consultaval();break;/*4*/          case 53: consultanome();break;          case 48: limpa();/*0*/        }      } } while (op != 48);}