Ir para conteúdo

nomad_0009

Membros
  • Postagens

    1
  • Registro em

  • Última visita

Conquistas de nomad_0009

0

Reputação

  1. nomad_0009

    Exclusão lógica

    Olá, colegas programadores. Estou tentando fazer um programa que apresente um menu, e, digitada a tecla 1, leia certos dados (CPF, Nome, e-mail, etc..) com seus determinados testes de consistência, guarde-os em um arquivo binário e repita, quantas vezes for solicitado. O problema: Deve haver uma exclusão lógica no CPF, o usuário não pode digitar o mesmo CPF duas vezes. Apesar de ter montado ela do jeito que o orientador fez, o programa não manda a mensagem de erro quando digito duas vezes o mesmo CPF. Peço ajuda. Aqui está o programa (LINGUAGEM - C++): #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h> #include<conio.c> #define cor 15 struct estrut1 { float cpf; char nome[40]; char sexo; struct estrut2 { int dia, mes, ano; }dnasc; char email[35]; char excluido; int curso; char p; }agenda; FILE *fp; void mascara_dados(); void salvar_dados(); void digitar_dados(); void abrir_arquivo(); void reiniciar(); int checar_chave_primaria(); int menu(); main() { fflush(stdin); int a; a = menu(); switch(a) { case(1): reiniciar(); break; default: system("cls"); gotoxy(18,10); printf("Alternativa invalida (Pressione qualquer tecla p/ continuar)"); getch(); main(); } } int menu() { int op; textcolor(cor); textbackground(0); system("cls"); gotoxy(18,5);printf("Bem-vindo ao site da VUNESP"); gotoxy(18,6);printf("Selecione uma opcao."); gotoxy(18,7);printf("0 - Sair"); gotoxy(18,10);printf("1 - Cadastro"); gotoxy(15,11);scanf("%d", &op); return op; } void reiniciar() { textcolor(cor); textbackground(0); system("cls"); abrir_arquivo(); digitar_dados(); system("cls"); gotoxy(18,10);printf("Obrigado por utilizar nosso sistema! Boa sorte!"); getch();fflush(stdin); agenda.cpf = 0; agenda.p = ' '; agenda.curso = 0; agenda.sexo = ' '; strcpy(agenda.nome, " "); agenda.dnasc.dia = 0; agenda.dnasc.mes = 0; agenda.dnasc.ano = 0; strcpy(agenda.email, " "); main(); } void salvar_dados() { char conf; textcolor(1); gotoxy(18,17);printf("Confirma os dados para gravacao ? (S/N): "); do { gotoxy(58,17); conf = getchar(); }while( conf != 's' && conf != 'S' && conf != 'n' && conf != 'N' ); if( conf == 's' || conf == 'S' ) { if(fwrite(&agenda, sizeof(agenda), 1, fp) != 1) { gotoxy(18,17);printf("Erro na escrita do arquivo"); } else if(fwrite(&agenda, sizeof(agenda), 1, fp) == 1) { fflush( fp );//descarrega o buffer no disco gotoxy(18,16);printf("Dados salvos com sucesso!"); } }getch(); } void menu_dados(const char *cpf) { system("cls"); textcolor(cor); gotoxy(10,2);printf("Cadastro - Vestibulinho do CTI - Bauru, SP."); gotoxy(10,5);printf("CPF (Pressione 0 para sair.): ",cpf); gotoxy(10,6);printf("Nome: "); gotoxy(10,7);printf("Sexo(F/M)): "); gotoxy(10,8);printf("Data nascimento: / / "); gotoxy(10,9);printf("e-mail: "); gotoxy(10,10);printf("Curso (1 - Mec Noturno; 2 - Eletro Noturno; 3 - Info Noturno)"); gotoxy(16,11); printf("(4 - Mec Diurno; 5 - Eletro Diurno; 6 - Info Diurno)*: "); gotoxy(10,12);printf("Aluno de escola publica? (S/N): "); gotoxy(10,15);printf("*Integrado ao ensino medio"); } int checar_chave_primaria() { int aux,F; float aux_codigo; do { textcolor(cor); gotoxy(39,5);scanf("%f", &aux_codigo); if((aux_codigo < 10000000000) or (aux_codigo > 99999999999)) { gotoxy(18,17);textcolor(4);printf("CPF Invalido!"); getch(); fflush(stdin); gotoxy(18,17);clreol(); gotoxy(39,5);clreol(); } }while(aux_codigo < 10000000000 or aux_codigo > 99999999999); do{ rewind(fp); //reposiciona o ponteiro no início do arquivo F = 0; while(fread( &agenda,sizeof(agenda),1,fp) == 1) { if(agenda.cpf == aux && agenda.excluido == 'n') { //o código existe ou o código foi excluído mas já foi recadastrado: continuar percorrendo o arquivo para levar ponteiro para eof. F = 1; } }/*o arquivo tem que ser percorrido do início ao fim, sempre, para verificar possíveis inserções da mesma chave primária no final do arquivo e também para que o ponteiro fique em EOF, portanto, pronto para nova inclusão ao final. --> Correção de lógica no algoritmo de quando se tentava reincluir um código já deletado!! (Em outubro/2018) <-- */ if( F == 1 ) { fflush(stdin);gotoxy (18,17);printf("** C¢digo j cadastrado ! **",22); getch(); gotoxy(18,17);clreol(); gotoxy(39,5);clreol(); } }while( F == 1 ); return aux_codigo; } void digitar_dados() { menu_dados("CPF"); fflush(stdin); char curso[10]; agenda.cpf=checar_chave_primaria(); do { fflush(stdin); textcolor(cor); gotoxy(15,6);gets(agenda.nome); fflush(stdin); if(strlen(agenda.nome)<=1) { gotoxy(18,17);textcolor(4);printf("Nome invalido!"); getch(); gotoxy(18,17);clreol(); gotoxy(15,6);clreol(); } }while(strlen(agenda.nome)<=1); while(agenda.sexo != 'F' and agenda.sexo !='M' and agenda.sexo !='f' and agenda.sexo!='m') { textcolor(cor); fflush(stdin); gotoxy(22,7);agenda.sexo = getchar();fflush(stdin); if(agenda.sexo!= 'F' and agenda.sexo!='M' and agenda.sexo !='f' and agenda.sexo!='m') { gotoxy(18,17);textcolor(4);printf("Sexo invalido!"); getch(); fflush(stdin); gotoxy(18,17);clreol(); gotoxy(22,7);clreol(); } } while(agenda.dnasc.dia <= 0 or agenda.dnasc.dia > 31 or agenda.dnasc.mes <=0 or agenda.dnasc.mes >12 or agenda.dnasc.ano <= 0 or agenda.dnasc.ano>2022) { textcolor(cor); gotoxy(26,8);scanf("%d",&agenda.dnasc.dia);fflush(stdin); gotoxy(29,8);scanf("%d",&agenda.dnasc.mes);fflush(stdin); gotoxy(32,8);scanf("%d",&agenda.dnasc.ano);fflush(stdin); if (agenda.dnasc.dia <= 0 or agenda.dnasc.dia > 31 or agenda.dnasc.mes <=0 or agenda.dnasc.mes >12 or agenda.dnasc.ano <= 0 or agenda.dnasc.ano>2022) { gotoxy(18,17);textcolor(4);printf("Data invalida!"); getch(); fflush(stdin); gotoxy(18,17);clreol(); textcolor(cor); gotoxy(26,8);clreol();printf(" / / "); } } do { textcolor(cor); fflush(stdin); gotoxy(17,9);gets(agenda.email); if(strlen(agenda.email)==0 or strchr(agenda.email, '@')==NULL or strchr(agenda.email, '.')==NULL) { gotoxy(18,17);textcolor(4);printf("E-mail invalido!"); getch(); fflush(stdin); gotoxy(18,17);clreol(); gotoxy(17,9);clreol(); } }while(strlen(agenda.email)<=1 or strchr(agenda.email, '@')==NULL or strchr(agenda.email, '.')==NULL); while(agenda.curso < 1 or agenda.curso > 6) { fflush(stdin); textcolor(cor); gotoxy(70,11);scanf("%d", &agenda.curso); if (agenda.curso < 1 or agenda.curso > 6) { gotoxy(18,17);textcolor(4);printf("Selecione um dos cursos na tela, por favor."); getch(); fflush(stdin); gotoxy(18,17);clreol(); gotoxy(70,11);clreol(); } } do { textcolor(cor); fflush(stdin); gotoxy(41,12); agenda.p = getchar(); if (toupper(agenda.p)!='S' and toupper(agenda.p)!='N') { gotoxy(18,17);textcolor(4);printf("Digite S(SIM) ou N(não), por favor"); getch(); fflush(stdin); gotoxy(18,17);clreol(); gotoxy(41,12);clreol(); } }while(toupper(agenda.p)!='S' and toupper(agenda.p)!='N'); agenda.excluido='N'; salvar_dados(); } void abrir_arquivo() { if((fp = fopen("arq.bin", "ab+")) == NULL) { gotoxy(18,11);printf("Erro na abertura do arquivo."); exit(1); } }
×
×
  • Criar Novo...