Ir ao conteúdo
  • Cadastre-se
Pedro1998

C Dificuldade em armazenar em arquivos o meu cadastro

Recommended Posts

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>

typedef struct {
int codigo;
char tipo [50];
float area;
int Ncomodos ;
char padrão[50];
float sugerido;
float negociado;
}imobiliaria;
imobiliaria ImoBit[50];
void cadastro();
void pesquisa();
void lista();
void listatipo();
void listapadrao();
void alterar();
void excluir();
FILE* abertura(char l,char caminho[50])
{
    FILE*fp;
    if(l=='g')
    {
        fp=fopen(caminho,"wb+");
    }
    else if(l=='l')
    {
        fp=fopen(caminho,"rb+");
    }
    else
        fp=fopen(caminho,"ab+");
    return fp;
}


int main(void)
{   int op;
    setlocale(LC_ALL,"portuguese");
    enum DOS_COLORS
    {
        BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN,
        LIGHT_GRAY, DARK_GRAY, LIGHT_BLUE, LIGHT_GREEN, LIGHT_CYAN,
        LIGHT_RED, LIGHT_MAGENTA, YELLOW, WHITE
    };

    textcolor(BLACK);
    textbackground(WHITE);
    FILE*fp;
    fp=abertura('l',"imobiliaria.txt");
    if(fp == NULL)
    {
        printf("Erro, nao foi possivel abrir o arquivo\n");
        fp=abertura('g',"imobiliaria.txt");
    }
    do{
        system("cls");
       printf("\n-------Bem Vindo a ImoBit-------\n\nDesenvolvido por:\n Amanda de Souza\n João Eduardo\n João Gustavo\n Pedro Augusto\n\n1 - CADASTRAR\n2 - PESQUISAR\n3 - LISTAR\n4 - LISTAR POR TIPO\n5 - LISPAR POR PADRÃO\n6 - ALTERAR\n7 - EXCLUIR\nDigite uma opção:") ;
       scanf("%d", &op);
        switch(op){
            case 1:
            cadastro();

            break;
        case 2:
            pesquisa();
            break;
        case 3:
            lista();
            break;
        case 4:
            listatipo();
            break;
        case 5:
            listapadrao();
            break;
        case 6:
            alterar();
            break;
        case 7:
            excluir();
            break;
        default:
            printf("\nOpção Inválida");
            break;
        }
        getchar();
            getchar();
    }while(op != 0);
}
void cadastro()
{   system("cls");
    int codigo[50],i,op,fp;
    char tipo [50][50];
    float area[50];
    int Ncomodos [50];
    char padrão[50][50];
    float sugerido[50];
    float negociado[50];
    setlocale(LC_ALL,"portuguese");
    {
        for(i=0;i<50;i++){
        printf("\n Insira o código de identificação do imóvel: ");
        scanf("%d", &codigo);

        printf("\n Informe o tipo de imóvel (Apartamento ou Casa): ");
        scanf("%s", &tipo);

        printf("\n Informe a área construída em M²: ");
        scanf("%f", &area);

        printf("\n Informe a quantidade de cômodos: ");
        scanf("%d", &Ncomodos);

        printf("\n Qual o padrão de acabamento do imóvel (Popular, Bom, Excelente): ");
        scanf("%s", &padrão);

        printf("\n Informe o preço sugerido (em reais) \n R$ ");
        scanf("%f", &sugerido);


        ImoBit.codigo = codigo;
        strcpy(ImoBit.tipo,tipo);
        ImoBit.area = area;
        ImoBit.Ncomodos = Ncomodos;
        strcpy(ImoBit.padrão,padrão);
        ImoBit.sugerido = sugerido;

        fwrite(&ImoBit,sizeof(ImoBit),1,fp);

        printf("\n Se deseja realizar outro cadastro digite 4. \n Para finalizar digite qualquer valor: ");
        scanf("%d", &op);

        if (op!=4){
             break;

        }


           }

    }

    if (op!=4)
    {
        printf("\n Cadastro finalizado!");
    }
}
void pesquisa()

    int op;
    system("cls");
    int pesquisaid,i;
    do
    {
        printf("\nDigite o número de identificação do imóvel:");
        scanf("%d", &pesquisaid);
        for(i=0;i<50;i++)
        {
            if (ImoBit.codigo == pesquisaid)
            {
                printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);

            }

        }
        printf("\nDigite 1 para pesquisar novamente: ");
        scanf("%d", &op);
    }
    while(op==1);

}
void lista(){
    system("cls");
    int i;
    printf("\nLista de Imóveis\n");
    for(i=0;i<50;i++){
        if (ImoBit.codigo>0){
            printf("\n\n----------------------\n");
             printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);
        }

    }


}
void listatipo()
{
    system("cls");
    int i;
    char tip[20];
    printf("\nInforme o tipo desejado:");
    scanf("%s", &tip);
    printf("\nLista dos imóveis do tipo %s\n", tip);
    for(i=0;i<50;i++)
        {
            ImoBit;
        if (strcmp(ImoBit.tipo,tip)==0 && ImoBit.codigo!=0 ){
            printf("\n\n------------------\n");
             printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);
        }
         else if (strcmp(ImoBit.tipo,tip)==0 && ImoBit.codigo==0 ){
            printf("\nVAZIO");
            break;
        }

    }


}
void listapadrao()
{
    system("cls");
    int i;
    char pad[20];
    printf("\nInforme o padrão desejado:");
    scanf("%s", &pad);
    printf("\nLista dos imóveis do tipo %s\n", pad);
    for(i=0;i<50;i++)
        {

            ImoBit;
        if (strcmp(ImoBit.padrão,pad)==0 && ImoBit.codigo!=0){
            printf("\n\n------------------\n");
             printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);
        }

         else if (strcmp(ImoBit.padrão,pad)==0 && ImoBit.codigo==0){
            printf("\nVAZIO");
            break;
        }

    }


}
void alterar (){
    system("cls");
    int cod,i;
    printf("\nInforme o código do cadastro que deseja alterar: ");
    scanf("%d", &cod);
for(i=0;i<50;i++)
       {
        if (ImoBit.codigo == cod)
        {
            printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);

            printf("\n-------------------------\n");
            printf("\n Insira o novo código de identificação do imóvel: ");
            scanf("%d", &ImoBit.codigo);
            fflush(stdin);
            printf("\n Informe o tipo de imóvel (Apartamento ou Casa): ");
            scanf("%s", &ImoBit.tipo);
            fflush(stdin);
            printf("\n Informe a área construída em M²: ");
            scanf("%f", &ImoBit.area);
            fflush(stdin);
            printf("\n Informe a quantidade de cômodos: ");
            scanf("%d", &ImoBit.Ncomodos);
            fflush(stdin);
            printf("\n Qual o padrão de acabamento do imóvel (Popular, Bom, Excelente): ");
            scanf("%s", &ImoBit.padrão);
            fflush(stdin);
            printf("\n Informe o preço sugerido (em reais) \n R$ ");
            scanf("%f", &ImoBit.sugerido);
            fflush(stdin);
        }
        }

}
void excluir(){
    system("cls");
    int cod,i,op;
    ImoBit ;
    printf("\nDigite o código do cadastro que deseja excluir: ");
    scanf("%d", &cod);
    for(i=0;i<50;i++)
        {
    if (ImoBit.codigo==cod){
    printf("\nCódigo: %d\nTipo: %s\nÁrea: %.2f\nCômodos: %d\nPadrão: %s\nPreço Sugerido: R$%.2f\n",ImoBit.codigo,ImoBit.tipo,ImoBit.area,ImoBit.Ncomodos,ImoBit.padrão,ImoBit.sugerido);
    }
    printf("\n---------------\n");
    printf("\nDeseja excluir? (1 - Sim | 2 - Não): ");
    scanf("%d", &op);
        if (op == 1){
            ImoBit.codigo = 0;
            break;

        }
        else{
            break;
            }
        }
        system("cls");
        printf("\nCADASTRO EXCLUÍDO COM SUCESSO");
    }

void textbackground (int iColor)

{
    HANDLE hl = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
    BOOL b = GetConsoleScreenBufferInfo(hl, &bufferInfo);
    bufferInfo.wAttributes &= 0x000F;
    SetConsoleTextAttribute (hl, bufferInfo.wAttributes |= (iColor << 4));

}
void textcolor (int iColor)
{
    HANDLE hl = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bufferInfo;
    BOOL b = GetConsoleScreenBufferInfo(hl, &bufferInfo);
    bufferInfo.wAttributes &= 0x00F0;
    SetConsoleTextAttribute (hl, bufferInfo.wAttributes |= iColor);
}
 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Pedro1998       para postar seu código é melhor usar o botão   <>  que está lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os   [ i ]  que sumiram do seu código ,  seu código está bom ,  apenas tem alguns comandos desnecessários e essa forma de abrir os arquivos que você usou  é bem complicada , é melhor usar da forma direta e bem mais simples ,  e essa função de alterar  é bem difícil e não consegui fazer , então tente fazê-la e poste para que eu possa ter uma ideia de como fazer da próxima vez ,  então seu código com algumas modificações pode ser assim  :

#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLUE*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}

typedef struct alunos {
    int   codigo      ;
    char  tipo[50]    ;
    float area        ;
    int   Ncomodos    ;
    char  padron[50]  ;
    float sugerido    ;
    float negociado   ;
}imobiliaria          ;
imobiliaria ImoBit[50];
int main(){
    char op,resp='s',tip[30],pad[30];
    int x=0,pesquisaid,cod;/* precisa inicializar */
    FILE *arquivo,*arquivo2;
    setlocale(LC_ALL,"");
    do{
        op='0';
        textcolor(9,15);
        system("cls");
        printf("0 - FINALIZAR O PROGRAMA =\n");
        printf("1 - CADASTRAR ============\n");
        printf("2 - LISTAR ===============\n");
        printf("3 - PESQUISAR ============\n");
        printf("4 - LISTAR POR TIPOS =====\n");
        printf("5 - LISTAR POR PADRÃO ====\n");
        printf("6 - ALTERAR ==============\n");
        printf("7 - EXCLUIR ==============\n");
        fflush(stdin);
        op=getche();
        printf("\n");
        switch(op){
        case '0':
            printf("\n\nVocê Digitou Zero , Saindo ");
            for(x=0;x<10;x++){
                printf(". ");
                Sleep(400);
            }
            printf("!\n\n");
            break;
        case '1':/* cadastrar */
            arquivo=fopen("imobiliaria.txt", "ab");
            resp='s';
            x=0;
            while(resp!='n'){
                if(x<50){
                    system("cls");
                    printf("\n Insira o código de identificação do imóvel: "    );
                    scanf("%d", &ImoBit[x].codigo                               );
                    printf("\n Informe o tipo de imóvel (Apartamento ou Casa): ");
                    scanf("%s", ImoBit[x].tipo                                  );
                    printf("\n Informe a área construída em M²: "               );
                    scanf("%f", &ImoBit[x].area                                 );
                    printf("\n Informe a quantidade de cômodos: "               );
                    scanf("%d", &ImoBit[x].Ncomodos                             );
                    printf("\n Qual o padrão de acabamento do imóvel (Popular, Bom, Excelente): ");
                    scanf("%s", ImoBit[x].padron                                );
                    printf("\n Informe o preço sugerido (em reais) \n R$ "      );
                    scanf("%f", &ImoBit[x].sugerido                             );
                    fwrite(&ImoBit[x], sizeof(imobiliaria), 1, arquivo          );
                    printf("\ndeseja cadastrar outro aluno ?  S/N "             );
                    resp=getch();
                    if(resp!='n') x++;
                }
            }
            fclose (arquivo);
            break;
        case '2':/* listar */
            system("cls");
            arquivo=fopen("imobiliaria.txt", "rb");
            x=0;
            while(fread(&ImoBit[x], sizeof(imobiliaria), 1, arquivo)>0)   {
                if(ImoBit[x].codigo!=-1){
                    printf("-------------------------------\n"            );
                    printf("Código ---------: %d\n"    ,ImoBit[x].codigo  );
                    printf("Tipo -----------: %s\n"    ,ImoBit[x].tipo    );
                    printf("Area -----------: %.2f\n"  ,ImoBit[x].area    );
                    printf("Cômodos --------: %d\n"    ,ImoBit[x].Ncomodos);
                    printf("Padrão ---------: %s\n"    ,ImoBit[x].padron  );
                    printf("Preço Sugerido -: R$%.2f\n",ImoBit[x].sugerido);
                    x++;
                }
            }
            fclose(arquivo);
            printf("\n          Tecle !");
            getch();
            break;
        case '3':/* pesquisar */
            system("cls");
            arquivo=fopen("imobiliaria.txt", "rb");
            x=0;
            printf("\nDigite O Número De Identificação Do Imóvel: ");
            scanf("%d", &pesquisaid);
            while(fread(&ImoBit[x], sizeof(imobiliaria), 1, arquivo)>0)   {
                if(ImoBit[x].codigo == pesquisaid){
                    printf("-------------------------------\n");
                    printf("Código ---------: %d\n"    ,ImoBit[x].codigo  );
                    printf("Tipo -----------: %s\n"    ,ImoBit[x].tipo    );
                    printf("Area -----------: %.2f\n"  ,ImoBit[x].area    );
                    printf("Cômodos --------: %d\n"    ,ImoBit[x].Ncomodos);
                    printf("Padrão ---------: %s\n"    ,ImoBit[x].padron  );
                    printf("Preço Sugerido -: R$%.2f\n",ImoBit[x].sugerido);
                    x++;
                }
            }
            fclose(arquivo);
            printf("\n          Tecle !");
            getch();
            break;
        case '4':/* listar por tipo */
            system("cls");
            arquivo=fopen("imobiliaria.txt", "rb");
            x=0;
            printf("\nInforme O Tipo Desejado: ");
            scanf("%s", tip);
            printf("Lista De Im´veis Do Tipo %s\n",tip);
            while(fread(&ImoBit[x], sizeof(imobiliaria), 1, arquivo)>0)   {
                if(strcmp(ImoBit[x].tipo,tip)==0 && ImoBit[x].codigo!=0 ) {
                    printf("-------------------------------\n");
                    printf("Código ---------: %d\n"    ,ImoBit[x].codigo  );
                    printf("Tipo -----------: %s\n"    ,ImoBit[x].tipo    );
                    printf("Area -----------: %.2f\n"  ,ImoBit[x].area    );
                    printf("Cômodos --------: %d\n"    ,ImoBit[x].Ncomodos);
                    printf("Padrão ---------: %s\n"    ,ImoBit[x].padron  );
                    printf("Preço Sugerido -: R$%.2f\n",ImoBit[x].sugerido);
                    x++;
                }
            }
            fclose(arquivo);
            printf("\n          Tecle !");
            getch();
            break;
        case '5':/* listar por padrão */
            system("cls");
            arquivo=fopen("imobiliaria.txt", "rb");
            x=0;
            printf("\nInforme O Padrão Desejado: ");
            scanf("%s", pad);
            printf("Lista De Imóveis Do Tipo %s\n",pad);
            while(fread(&ImoBit[x], sizeof(imobiliaria), 1, arquivo)>0){
                if(strcmp(ImoBit[x].padrão,pad)==0 && ImoBit[x].codigo!=0){
                    printf("-------------------------------\n");
                    printf("Código ---------: %d\n"    ,ImoBit[x].codigo  );
                    printf("Tipo -----------: %s\n"    ,ImoBit[x].tipo    );
                    printf("Area -----------: %.2f\n"  ,ImoBit[x].area    );
                    printf("Cômodos --------: %d\n"    ,ImoBit[x].Ncomodos);
                    printf("Padrão ---------: %s\n"    ,ImoBit[x].padron  );
                    printf("Preço Sugerido -: R$%.2f\n",ImoBit[x].sugerido);
                    x++;
                }
            }
            fclose(arquivo);
            printf("\n          Tecle !");
            getch();
            break;
        case '6':
            printf("Está No Alterar . . . !        Tecle");
            getche();
            /* esse é bem difícil e não consegui fazer , veja o que consegue .*/
            break;
        case '7':/* excluir */
            x=0;
            arquivo =fopen("imobiliaria.txt", "rb");
            arquivo2=fopen("imobiliaria2.txt","ab");
            printf("digite o id a ser apagado: ");
            fflush(stdin);
            scanf("%d",&cod);
            while(fread(&ImoBit[x], sizeof(imobiliaria), 1, arquivo)>0){
                if(ImoBit[x].codigo != cod){
                    fwrite(&ImoBit[x], sizeof(imobiliaria), 1, arquivo2);
                    x++;
                }
            }
            fclose(arquivo2);
            fclose(arquivo );
            remove("imobiliaria.txt");
            rename("imobiliaria2.txt","imobiliaria.txt");
            printf("\nExclusao Concluida Com Sucesso !\n\n");
            printf("        Tecle !\n\n");
            getch();
            break;
        default:
            printf("\nOpção Inválida");
            Sleep(1000);
            break;
        }
    }while(op!='0');
    textcolor(12,15);/* primeiro cor letra , segundo cor fundo */
    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×