sábado, 27 de setembro de 2014

Fseek - Posicionando um Ponteiro para Arquivo II

 Na tela inicial, o programa mostra poucas informações sobre o autor do projeto, que sou eu mesmo, indica ainda duas opções, que são sair e continuar, escolhendo 1 ou 2 respectivamente.
Continuando, o programa já mostra a leitura de um arquivo que foi criado com a cópia dos nomes contidos na matriz de string char linha [ ] [ ];
pressionando qualquer tecla, vem a próxima tela do programa pedindo para que se escolha o número de uma linha contido no arquivo, sendo números entre 1 e 9, ou escolhendo -1 para encerramento da execução.
Tá claro que o programa não aceitará números inferior ou maior que os parâmetros estabelecidos, caracteres também não são aceitos.
Escolhendo uma linha válida o programa mostra o conteúdo da linha e o total de posições do nome contido.
Após pressionar enter, o programa já pede de onde, isto é de qual posição pretende se fazer a leitura, também à restrições aqui, o programa é inteligente, sabe calcular o tamanho da string da linha, e não aceita posições acima do seu tamanho e nem menor que "0".
Feito tudo corretamente, o programa mostra a leitura da linha conforme foi solicitado nas aplicações dos parâmetros escolhidos e se encerra agradecendo a utilização.

Veja algumas imagens do programa em execução:






 Veja abaixo o código do programa:


#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 36; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTRED);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTRED);printf(" ");}
            if ( lin == 36 ){textbackground(LIGHTRED);}
            if ( col == 80 ){textbackground(LIGHTRED);printf(" ");}
        }
    }textbackground(BLACK);
}
void inicio( ){    system ("title FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
int i;do{Janela5();
textcolor(LIGHTRED);gotoxy(20,7);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
textcolor(YELLOW);gotoxy(25,10);printf("Programa desenvolvido por:");
textcolor(LIGHTCYAN);gotoxy(52,10);printf("Samuel Lima");
textcolor(LIGHTGREEN);gotoxy(34,12);printf("sa_sp10@hotmail.com");
textcolor(LIGHTBLUE);gotoxy(24,14);printf("DIGITE    PARA SAIR OU   PARA CONTINUAR  ");
textcolor(LIGHTRED);gotoxy(32,14);printf("1");textcolor(LIGHTRED);gotoxy(47,14);printf("2");
gotoxy(41,16);
scanf("%d",&i);fflush(stdin);
if( i == 1 ){textcolor(LIGHTRED);gotoxy(35,20);printf ("MUITO OBRIGADO");Sleep(1800);exit(0);}
if( i == 2 ){system("cls"); return;}
else {textcolor(LIGHTRED);gotoxy(37,20);printf ("\aOPÇÃO ERRADA");Sleep(1800);system("cls");}
}
while(i);
}
int Imp_Matr ( char *num ){
    unsigned int i;
    for( i = 0; i < strlen ( num ); i++ ){
        if ( num [ i ] < '0' || num [ i ] > '9' )
            return 0;
    }
    return 1;
}
int main(){
    inicio( );int ini, fim, i = 0, n;    int  result;
    FILE *arq, *f;char num [ 3 ];
    char  linha [ 11 ] [ 17 ] = { {"João Henrique"},
            {"Amanda Santos"},
            {"Patrícia Gomes"},
            {"Ricardo Souza"},
            {"Cláudia Ferraz"},
            {"Rafaela Pimentel"},
            {"Samuel Júnior"},
            {"Sandro Rúbens"},
            {"Lúcia Paola"},
            {"Luíz Manolo"},
            {"Estér Guimarães"}};
    char lin_ha [ 20 ];char li_n_ha [ 20 ];
    if ( ( arq = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
        printf("Houve um erro na criação do arquivo");
        getche();exit(1);
    }
    if ( fwrite ( &linha, sizeof ( linha ), 1, arq ) != 1 ){
        printf("Houve um erro na gravação do arquivo");
        getche();exit(1);
    }
    fclose(arq);
    if ( ( arq = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
        printf("Houve um erro na abertura do arquivo");
        getche();exit(1);
    }
    if ( fread ( &linha , sizeof ( linha ), 1, arq ) != 1 ){
        printf("Houve um erro na leitura do arquivo");
        getche();exit(1);
    }
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(19,3);printf("FSEEK - POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
    textcolor(LIGHTBLUE);gotoxy(26,5);printf( "Abaixo a leitura do arquivo aberto" );
    textcolor(YELLOW);
    for( i = 0; i <= 10; i++ ){
        gotoxy(35,i + 7);
        printf("%s", linha [ i ] );
    }
    Sleep(1000);textcolor(LIGHTGREEN);
    gotoxy(32,22);printf("PRESSIONE QUALQUER TECLA");getche();
    do{system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(23,3);printf("POSICIONANDO UM PONTEIRO PARA ARQUIVO II");
    textcolor(LIGHTBLUE);gotoxy(15,5);printf("Escolha um número entre [ 1 e 9 ] ou [ -1 Para Sair ]  " );
    textcolor(YELLOW);gets ( num );fflush(stdin);
    n =  atoi (num);
    if ( n < -1 || n > 9 ){
        textcolor(LIGHTRED);gotoxy(25,10);
        printf("\aNúmero Acima de 0 e menor que 10" );
        getche();continue;
    }
    if( n == -1 ){
        textcolor(LIGHTRED);gotoxy(35,21);printf("MUITO OBRIGADO");
        Sleep(1800);exit(0);
    }
    if ( Imp_Matr ( num ) == 0 || n == 0){
        textcolor(LIGHTGREEN);gotoxy(25,7);printf("\aVoce digitou: %s", num );
        Sleep(1800);textcolor(LIGHTGREEN);gotoxy(25,9); printf("\a%s Nao e Valido !", num );
        Sleep(1800);continue;//system("cls");
    }
    while ( feof ( arq ) == 0 ){
        fgets ( linha [ i ], 80, arq );
        strcpy ( lin_ha, linha [ n ] );
        ++i;
    }fclose(arq);
    textcolor(LIGHTBLUE);gotoxy(15,7);printf("Veja abaixo o que tá escrito na linha %d do arquivo", n );
    textcolor(YELLOW);gotoxy(20,9);
    printf(" %s ", linha [ n ] );
    textcolor(LIGHTBLUE);printf("Num total de : ");
    textcolor(LIGHTRED);printf(" %d ", strlen ( linha [ n ] ) );
    textcolor(LIGHTBLUE);printf("Posições ");
    getche();
    if ( ( f = fopen ("Arquivo.bin", "w+b" ) ) == NULL ){
        printf("Houve um erro na criação do arquivo");
        getche();exit(1);
    }
    if ( fwrite ( &lin_ha, sizeof ( lin_ha ), 1, f ) != 1 ){
        printf("Houve um erro na gravação do arquivo");
        getche();exit(1);
    }
    fclose(f);
    if ( ( f = fopen("Arquivo.bin", "r+b" ) ) == NULL ){
        printf("Houve um erro na abertura do arquivo");
        getche();exit(1);
    }printf("\n" );
    if ( fread ( &li_n_ha , sizeof ( lin_ha ), 1, f ) != 1 ){
        printf("Houve um erro na leitura do arquivo");
        getche();exit(1);
    }
    do{gotoxy(37,13);printf("   ");
    textcolor(LIGHTBLUE);gotoxy(15,11);printf("Digite abaixo de onde pretende visualizar :");
    textcolor(LIGHTBLUE);gotoxy(15,13);printf( "Começando na posição : " );
    textcolor(LIGHTRED);gotoxy(38,13);scanf("%d", &ini);fflush(stdin);
    if ( ini < -1 || ini >= strlen ( linha [ n ] ) ){
        textcolor(LIGHTRED);gotoxy(20,16);
        printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
        getche();gotoxy(20,16);
        printf("                                          ");
        continue;
    }
    do{gotoxy(30,14);printf("   ");
    textcolor(LIGHTBLUE);gotoxy(15,14);printf( "Até a posição : " );
    gotoxy(31,14);textcolor(LIGHTRED);scanf("%d", &fim);fflush(stdin);
    if ( fim < -1 || fim > strlen ( linha [ n ] ) ){
        textcolor(LIGHTRED);gotoxy(20,16);
        printf("\aNúmero Acima da posição 0 e menor que %d ", strlen ( linha [ n ] ) );
        getche();gotoxy(20,16);
        printf("                                          ");
        continue;
    }
    result = fseek ( f, ini, SEEK_SET );
    if( result )
        perror( "\aArquivo.bin" );
    else{
        textcolor(LIGHTBLUE);gotoxy(15,16);printf( "O Ponteiro de arquivo foi movido com sucesso" );
        textcolor(LIGHTBLUE);gotoxy(15,17);printf( "Para o início na posição ");
        textcolor(LIGHTRED);printf( " %d", ini);
        textcolor(LIGHTBLUE);printf( " num total de ");
        textcolor(LIGHTBLUE);printf( "   posições" );
        textcolor(LIGHTGREEN);gotoxy(15,19);printf( "Veja o resultado ==> " );
        fgets( li_n_ha, fim + 1, f );textcolor(YELLOW);gotoxy(40,19);
        printf( " %s", li_n_ha  );
        textcolor(LIGHTRED);gotoxy(55,17);printf( " %d", strlen ( li_n_ha ) );
    }
    fclose( f );Sleep(1800);
    textcolor(LIGHTRED);gotoxy(36,23);printf ("MUITO OBRIGADO");
    getche();exit(0);
    }while( 1 );
    }while( 1 );
    }while( 1 );
}





Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.