#include #include #include #include #include #include "My_Library.c" typedef struct{ int cod, idade, pac, quarto, pol; char nome[20]; float valor; }Tclientes; Tclientes clientegrav, clienteaux, clientenulo; //registros auxiliares int op, la, qcn, qcs, posicao, ql, l, qt, pos, tecla; FILE *pn, *ps; //ponteiros para os ônibus de Natal e Salvador char resp[1], nomelido[80]; //ler a resposta e transforma para maiúsculo void 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 Natal int 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 Salvador int 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 registros int 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 registros int 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 Salvador int 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 Salvador int 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 Natal int 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 Salvador int 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 tela void 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 cliente void 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 pacote void 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ódigo void 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 nome void 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 pacote void 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);}