djouni / GEA

Gerenciador de estoque de uma autopeças
1 stars 1 forks source link

Criar sistema de armazenamento de arquivos #7

Open djouni opened 1 year ago

djouni commented 1 year ago
LerryHP commented 1 year ago

Sistema de armazenar peças em arquivo:

include

include

include

struct Peca { char nome[25]; int numeroDeSerie; char montadora[25]; int preco; int quantidade; };

void criarPeca(struct Peca pecas, int contador); void exibirPecas(struct Peca pecas, int contador); void atualizarPeca(struct Peca pecas, int contador); void excluirPeca(struct Peca pecas, int contador); void salvarPecasArquivo(struct Peca *pecas, int contador);

int main() { struct Peca pecas[100]; int contador = 0; int opcao;

while (1)
{
    printf("------ MENU ------\n");
    printf("1 - Adicionar peca\n");
    printf("2 - Exibir pecas\n");
    printf("3 - Atualizar peca\n");
    printf("4 - Excluir peca\n");
    printf("0 - Sair\n");
    printf("------------------\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);

    switch (opcao)
    {
    case 1:
        criarPeca(pecas, &contador);
        salvarPecasArquivo(pecas, contador);
        break;
    case 2:
        exibirPecas(pecas, contador);
        break;
    case 3:
        atualizarPeca(pecas, contador);
        salvarPecasArquivo(pecas, contador);
        break;
    case 4:
        excluirPeca(pecas, &contador);
        salvarPecasArquivo(pecas, contador);
        break;
    case 0:
        printf("Encerrando o programa.\n");
        exit(0);
    default:
        printf("Opcao invalida. Tente novamente.\n");
    }
}
return 1;

}

void criarPeca(struct Peca pecas, int contador) { if (*contador >= 100) { printf("Nao e possivel adicionar mais pecas.\n"); return; }

struct Peca novaPeca;

printf("Digite o nome da peca: ");
scanf("%s", novaPeca.nome);

printf("Digite o numero de serie da peca: ");
fflush(stdin);
scanf("%d", &novaPeca.numeroDeSerie);

printf("Digite a montadora da peca: ");
fflush(stdin);
scanf("%s", novaPeca.montadora);

printf("Digite o preco da peca: ");
fflush(stdin);
scanf("%d", &novaPeca.preco);

printf("Digite a quantidade de pecas: ");
fflush(stdin);
scanf("%d", &novaPeca.quantidade);

pecas[*contador] = novaPeca;
(*contador)++;

printf("Peca adicionada com sucesso.\n");

}

void exibirPecas(struct Peca *pecas, int contador) { if (contador == 0) { printf("Nenhuma peca encontrada.\n"); return; }

printf("Lista de Pecas:\n");
for (int i = 0; i < contador; i++)
{
    printf("Nome: %s\n", pecas[i].nome);
    printf("Numero de serie: %d\n", pecas[i].numeroDeSerie);
    printf("Montadora: %s\n", pecas[i].montadora);
    printf("Preco: %d\n", pecas[i].preco);
    printf("Quantidade: %d\n", pecas[i].quantidade);
    printf("-------------\n");
}

}

void atualizarPeca(struct Peca *pecas, int contador) { int numeroDeSerie;

printf("Digite o numero de serie da peca a ser atualizada: ");
scanf("%d", &numeroDeSerie);

for (int i = 0; i < contador; i++)
{
    if (pecas[i].numeroDeSerie == numeroDeSerie)
    {
        printf("Digite o novo nome da peca: ");
        scanf("%s", pecas[i].nome);

        printf("Digite a nova montadora da peca: ");
        scanf("%s", pecas[i].montadora);

        printf("Digite o novo preço da peca: ");
        scanf("%d", &pecas[i].preco);

        printf("Digite a nova quantidade de pecas: ");
        scanf("%d", &pecas[i].quantidade);

        printf("Peca atualizada com sucesso.\n");
        return;
    }
}
printf("Peca com numero de serie %d nao encontrada.\n", numeroDeSerie);

}

void excluirPeca(struct Peca pecas, int contador) { int numeroDeSerie;

printf("Digite o numero de serie da peca a ser excluida: ");
scanf("%d", &numeroDeSerie);

for (int i = 0; i < *contador; i++)
{
    if (pecas[i].numeroDeSerie == numeroDeSerie)
    {
        // Remover a peça movendo as outras peças para preencher o espaço vazio
        for (int j = i; j < *contador - 1; j++)
        {
            pecas[j] = pecas[j + 1];
        }
        (*contador)--;
        printf("Peca excluida com sucesso.\n");
        return;
    }
}
printf("Peca com numero de serie %d nao encontrada.\n", numeroDeSerie);

}

void salvarPecasArquivo(struct Peca pecas, int contador) { FILE arquivo; arquivo = fopen("pecas.txt", "w");

if (arquivo == NULL)
{
    printf("Erro ao abrir o arquivo.\n");
    return;
}

for (int i = 0; i < contador; i++)
{
    fprintf(arquivo, "Nome: %s\n", pecas[i].nome);
    fprintf(arquivo, "Numero de serie: %d\n", pecas[i].numeroDeSerie);
    fprintf(arquivo, "Montadora: %s\n", pecas[i].montadora);
    fprintf(arquivo, "Preco: %d\n", pecas[i].preco);
    fprintf(arquivo, "Quantidade: %d\n", pecas[i].quantidade);
    fprintf(arquivo, "-------------\n");
}

fclose(arquivo);

}

LerryHP commented 1 year ago

Sistema de armazenar Usuários em arquivo:

include

include

include

struct Usuario { char nome[25]; int senha; int status; // 0=usuario normal/comprador || 1=administrador/gerente };

void criarUsuario(struct Usuario usuarios, int contador); void exibirUsuarios(struct Usuario usuarios, int contador); void atualizarUsuario(struct Usuario usuarios, int contador); void excluirUsuario(struct Usuario usuarios, int contador); void salvarUsuarios(struct Usuario usuarios, int contador); void carregarUsuarios(struct Usuario usuarios, int contador); void reorganizarArquivo(FILE arquivo, struct Usuario *usuarios, int contador);

int main() { struct Usuario usuarios[100]; int contador = 0; int opcao;

// Carregar usuários a partir do arquivo
carregarUsuarios(usuarios, &contador);

while (1)
{
    printf("---- MENU ----\n");
    printf("1 - Adicionar usuario\n");
    printf("2 - Exibir usuarios\n");
    printf("3 - Atualizar usuario\n");
    printf("4 - Excluir usuario\n");
    printf("0 - Sair\n");
    printf("------------------\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);

    switch (opcao)
    {
    case 1:
        criarUsuario(usuarios, &contador);
        break;
    case 2:
        exibirUsuarios(usuarios, contador);
        break;
    case 3:
        atualizarUsuario(usuarios, contador);
        break;
    case 4:
        excluirUsuario(usuarios, &contador);
        break;
    case 0:
        printf("Encerrando o programa.\n");
        // Salvar usuários no arquivo antes de sair
        salvarUsuarios(usuarios, contador);
        exit(0);
    default:
        printf("Opcao invalida. Tente novamente.\n");
    }
}

return 0;

}

void criarUsuario(struct Usuario usuarios, int contador) { if (*contador >= 100) { printf("Nao e possivel adicionar mais usuarios.\n"); return; }

struct Usuario novoUsuario;

printf("Digite o nome do usuario: ");
scanf("%s", novoUsuario.nome);

printf("Digite a senha do usuario: ");
scanf("%d", &novoUsuario.senha);

printf("Digite o status do usuario (0 - Normal, 1 - Administrador): ");
scanf("%d", &novoUsuario.status);

usuarios[*contador] = novoUsuario;
(*contador)++;

printf("Usuario adicionado com sucesso.\n");

}

void exibirUsuarios(struct Usuario *usuarios, int contador) { if (contador == 0) { printf("Nenhum usuario encontrado.\n"); return; }

printf("Lista de Usuarios:\n");
int i;
for (i = 0; i < contador; i++)
{
    printf("Nome: %s\n", usuarios[i].nome);
    printf("Status: %s\n", usuarios[i].status == 1 ? "Administrador" : "Normal");
    printf("-------------\n");
}

}

void atualizarUsuario(struct Usuario *usuarios, int contador) { char nome[25];

printf("Digite o nome do usuario a ser atualizado: ");
scanf("%s", nome);
int i;
for (i = 0; i < contador; i++)
{
    if (strcmp(usuarios[i].nome, nome) == 0)
    {
        printf("Digite a nova senha do usuario: ");
        scanf("%d", &usuarios[i].senha);

        printf("Digite o novo status do usuario (0 - Normal, 1 - Administrador): ");
        scanf("%d", &usuarios[i].status);

        printf("Usuario atualizado com sucesso.\n");
        return;
    }
}

printf("Usuario com nome %s nao encontrado.\n", nome);

}

void excluirUsuario(struct Usuario usuarios, int contador) { char nome[25];

printf("Digite o nome do usuario a ser excluido: ");
scanf("%s", nome);

FILE *arquivo;
arquivo = fopen("usuarios.bin", "rb+");

if (arquivo == NULL)
{
    printf("Arquivo nao encontrado. Iniciando com lista vazia.\n");
    return;
}

int i;
for (i = 0; i < *contador; i++)
{
    if (strcmp(usuarios[i].nome, nome) == 0)
    {
        // Remover usuário movendo os outros usuários para preencher o espaço vazio
        int j;
        for (j = i; j < *contador - 1; j++)
        {
            usuarios[j] = usuarios[j + 1];
        }
        (*contador)--;

        // Reorganizar o arquivo
        reorganizarArquivo(arquivo, usuarios, *contador);

        // Verificar se todos os usuários foram excluídos
        if (*contador == 0)
        {
            // Truncar o arquivo para remover todos os dados
            fclose(arquivo);
            arquivo = fopen("usuarios.bin", "wb");
            fclose(arquivo);
        }
        else
        {
            fclose(arquivo);
        }

        printf("Usuario excluido com sucesso.\n");
        return;
    }
}

printf("Usuario com nome %s nao encontrado.\n", nome);
fclose(arquivo);

}

void salvarUsuarios(struct Usuario usuarios, int contador) { FILE arquivo; arquivo = fopen("usuarios.bin", "wb");

if (arquivo == NULL)
{
    printf("Erro ao abrir o arquivo para escrita.\n");
    return;
}

fwrite(&contador, sizeof(int), 1, arquivo);
fwrite(usuarios, sizeof(struct Usuario), contador, arquivo);

fclose(arquivo);

printf("Usuarios salvos com sucesso.\n");

}

void carregarUsuarios(struct Usuario usuarios, int contador) { FILE *arquivo; arquivo = fopen("usuarios.bin", "rb");

if (arquivo == NULL)
{
    printf("Arquivo nao encontrado. Iniciando com lista vazia.\n");
    return;
}

fread(contador, sizeof(int), 1, arquivo);
fread(usuarios, sizeof(struct Usuario), *contador, arquivo);

fclose(arquivo);

printf("Usuarios carregados com sucesso.\n");

}

void reorganizarArquivo(FILE arquivo, struct Usuario usuarios, int contador) { // Posicionar o ponteiro no início do arquivo rewind(arquivo);

// Escrever o novo contador
fwrite(&contador, sizeof(int), 1, arquivo);

// Escrever os usuários restantes
fwrite(usuarios, sizeof(struct Usuario), contador, arquivo);

}