Open djouni opened 1 year ago
Sistema de armazenar peças em arquivo:
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);
}
Sistema de armazenar Usuários em arquivo:
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);
}