c/c++
//Analise este programa e me ajudem a corrigir o erro que se encontra na opção de listar!
//Também preciso de criar uma opção de listar, gostaria quem me ajudasse, pois estou sem tempo, muitos trabalho de faculdade.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
//-- estrutura produto ------------------
struct funcionarios{
int ex; //esta variável ex serve para saber se o cadastro está excluído ou não. se for 1 está excluído se for 0 não está.
char nome[30], sit[10], cargo[15];
long int cpf;
float salario;
};
//-- variáveis globais -----------
FILE *cadastro;
struct funcionarios cad;
//-- declaração das funções ------------
void abre_arquivo(){ // função que abre o arquivo de produtos
cadastro=fopen("cadastro.txt","rb+"); // tenta abrir o arquivo (rb+)
if(cadastro == NULL) // se ele ainda não existe
cadastro=fopen("cadastro.txt","wb+");// então criamos ele (wb+)
if(cadastro == NULL) // se a criação também não funcionar
printf("\nErro ao abrir/criar arquivo de cadastros"); // então uma mensagem de erro é mostrada
}
//------ PESQUISA DE PRODUTOS--------------------------------
char pesquisa_cad(char nome[30]){
rewind(cadastro);// coloca o ponteiro no inicio do arquivo para pesquisar desde o começo
while(feof(cadastro) == 0){// enquanto não chega no fim do arquivo...
fread(&cad, sizeof(struct funcionarios), 1, cadastro);// lê uma struct produto do arquivo e copia ela para a variável global prod
if(strcmp(cad.nome,nome) && cad.ex == 0)return 1;// se o nome do produto que eu acabei de ler (cad.nome) é igual ao código que passei pra função (nome) E o produto não foi excluído...
} // então encerro a função retornando uma resposta positiva (1)
return 0;// se o while terminou sem passar pelo "return 1" então o código não existe. Neste caso retorno uma resposta negativa (0)
}
//------- CADASTRO DE PRODUTOS -------------------------------
void cad_cad(){
int pos;
struct funcionarios aux;
system("cls");
printf("-- NOVO CADASTRO --");
printf("\n\nNome: ");
fflush(stdin);
gets(aux.nome);//assim que recebo o nome digitado pelo usuário
if(strcmp(aux.nome,cad.nome) == 1){ // chamo a pesquisa pra saber se já existe. Se não existir (== 0) então...
printf("\nCargo: ");// ...continuo o cadastro
fflush(stdin);gets(aux.cargo);
printf("\nSituacao: ");
fflush(stdin); gets(aux.sit);
printf("\nPreco de salario: ");
fflush(stdin);scanf("%f", &aux.salario);
aux.ex=0; // indica que o cadastro não está excluído
fseek(cadastro, 0, SEEK_END);// posiciono o ponteiro no final do arquivo
fwrite(&aux, sizeof(struct funcionarios), 1, cadastro);// e gravo a variável aux que eu acabei de preencher
system("cls");
printf("CADASTRO EFETUADO COM SUCESSO !!");
getch();
}
else {
printf("\n\nCadastro ja existente.");// se a pesquisa retornar o valor 1 e que o cadastro já existe
getch();
}
}
//--------- ALTERAÇÃO DE PRODUTOS ---------------------------------------------------------------------
void alt_cad(){
struct funcionarios aux;
int resp, flag=1, pos;
system("cls");
printf("-- ALTERACAO DE PRODUTOS --");
printf("\n\nNome: ");
fflush(stdin);
gets(aux.nome);
if(strcmp(aux.nome,cad.nome) == 0){
printf("\nProduto Inexistente !!");
getch();
}
else{
fseek(cadastro, -sizeof(struct funcionarios), SEEK_CUR); // se o produto existe então posiciono o ponteiro para o inicio dele
fread(&aux, sizeof(struct funcionarios), 1, cadastro); // assim eu posso fazer a leitura no arquivo e colocar os dados na variável aux
printf("\nNome: %s", aux.nome); //
printf("\nCargo: %s", aux.cargo);
printf("\nSituacao: %s", aux.sit);
printf("\nSalario: R$ %.2f", aux.salario); // mostro os dados do produto e pergunto se
// o usuário quer mesmo alterá-los
printf("\n\nAlterar? 1- sim 0- nao "); //
scanf("%d", &resp); //
do{
switch(resp){
case 0:
flag=0;
break;
case 1: // se a resposta for sim (1)...
printf("\nNOVOS DADOS\n");
printf("\nNome: "); //
fflush(stdin);gets(aux.nome); //
printf("\nCargo: ");
fflush(stdin);gets(aux.cargo);
printf("\nSituacao: ");
fflush(stdin);gets(aux.sit);
// ...então eu obtenho os novos dados
printf("\nSalario: "); //
fflush(stdin);scanf("%f", &aux.salario);//
//
fseek(cadastro, -sizeof(struct funcionarios), SEEK_CUR); // volto o ponteiro para o início da ficha
fwrite(&aux, sizeof(struct funcionarios), 1, cadastro); //e gravo os novos dados que o usuário acabou de digitar
system("cls");
printf("ALTERACAO EFETUADA COM SUCESSO !!");
getch();
flag=0;
break;
default:
printf("\nopcao invalida. Digite novamente.");
scanf("%d", &resp);
}
}while(flag);
}
}
//------ BUSCA DE PRODUTOS --------------------------------
void mostra_cad(){
int pos;
struct funcionarios aux;
system("cls");
printf("-- PESQUISA DE PRODUTOS --");
printf("\n\nNome: ");
fflush(stdin);
gets(aux.nome);
if(strcmp(aux.nome,cad.nome) == 0){
printf("\nProduto Inexistente !!");
getch();
}
else {
fseek(cadastro, -sizeof(struct funcionarios), SEEK_CUR); // se o produto existe eu volto o ponteiro para o início da ficha
fread(&aux, sizeof(struct funcionarios), 1, cadastro);
printf("\nNome: %s", aux.nome); //
printf("\nCargo: %s", aux.cargo);
printf("\nSituacao: %s", aux.sit);
// e mostro os dados
printf("\nSalario: R$ %.2f", aux.salario); //
//
getch();
}
}
//--------------------------------------
void exc_cad(){
struct funcionarios aux;
int resp, flag=1, pos;
system("cls");
printf("-- EXCLUSAO DE FUNCIONARIOS --");
printf("\n\nNome: ");
fflush(stdin);
gets(aux.nome);
if(strcmp(aux.nome,cad.nome) == 1){
printf("\nFuncionario Inexistente !!");
getch();
}
else {
fseek(cadastro, -sizeof(struct funcionarios), SEEK_CUR); // se o produto existe então posiciono o ponteiro para o inicio dele
fread(&aux, sizeof(struct funcionarios), 1, cadastro); // assim eu posso fazer a leitura no arquivo e colocar os dados na variável aux
printf("\nNome: %s", aux.nome); //
printf("\nCargo: %s", aux.cargo);
printf("\nSituacao: %s", aux.sit);
printf("\nSalario: R$ %.2f", aux.salario);// mostro os dados do produto e pergunto se
// o usuário quer mesmo excluí-los
printf("\n\nExcluir? 1- sim 0- nao\n\t");
scanf("%d", &resp);
do{
switch(resp){
case 0:
flag=0;
break;
case 1: // se a resposta for sim (1)...
aux.ex=1; // altero o campo ex para 1
fseek(cadastro, -sizeof(struct funcionarios), SEEK_CUR);// ponho o ponteiro no início da ficha
fwrite(&aux, sizeof(struct funcionarios), 1, cadastro); // e a gravo novamente mas agora com o campo ex valendo 1, o que faz com que a pesquisa não o encontre
system("cls");
printf("EXCLUSAO EFETUADA COM SUCESSO !!");
getch();
flag=0;
break;
default:
printf("\nOpcao invalida. Digite novamente.");
scanf("%i", &resp);
}
}while(flag);
}
}
//--------------------------------------
void menu_principal(){
int op;
do{
system("cls");
printf(" --- MENU PRINCIPAL ---");
printf("\n\n1. CADASTRAR\n2. PESQUISAR\n3. ALTERAR\n4. LISTAR\n5. EXCLUIR\n0. SAIR\n\n\n\n\t");
fflush(stdin);
scanf("\t%d", &op);
switch(op){
case 1:
cad_cad();
break;
case 2:
mostra_cad();
break;
case 3:
alt_cad();
break;
/*case 4:
list_cad();
break;*/
case 5:
exc_cad();
break;
case 0:
break;
default:
printf("\n\nopção invalida !!\n\n");
getch();
}
}while(op);
}
//-- programa ------------------------
int main(){
abre_arquivo();
menu_principal();
fclose(cadastro);
}Discussão (0)
Carregando comentários...