Logo Hardware.com.br
joao victor rocha costa
joao victor... Novo Membro Registrado
5 Mensagens 1 Curtida

Problema com linguagem C

#1 Por joao victor... 20/11/2015 - 11:31
ola pessoal , estou com dificuldade para adicionar 2 funcoes no meu trabalho da faculdade,preciso adicionar uma funcao para fazer uma busca binaria nos funcionarios cadastrados , e uma funcao para lista em ordem alfabetica. quem poder me ajuda ficarei mto grato .

ENUNCIADO DA QUESTAO :
17. Considerando o cadastro de 50 funcionários de uma empresa, contendo NOME, ENDEREÇO, IDADE e SALARIO, defina uma estrutura apropriada e construa um programa que através de um menu de seleção esteja capacitado a efetuar:
a) Cadastro
b) Classificação dos funcionários em ordem alfabética <<<
c) Pesquisa dos nomes pelo método binário <<<<
d) Ao final do cadastro de cada cliente deverá ser perguntado: "Novo Cliente (S/N)?".
e) O programa deverá ser perguntar: "Voltar ao menu principal ou continuar (P/C)?".



MEU CODIGO ATE AKI :



#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 50


struct Funcionario {
char Nome[50];
char Endereco[50];
char idade[50];
float Preco_Salario;

int Codigo;
} Reg_Fun[MAX];

static int Num_Func = 0;

void Cad_Fun (void);
void List_Fun(void);
void Del_Fun (void);
//void Busc_Fun(void);
void Menu (void);
void Sair (void);

int main(){

Menu();
}

void Menu (void){
int opcao;
system("cls&quot;
do{
system("cls&quot;

printf(" EMPRESA X \n&quot;



printf("[1] - Casdastrar Funcionarios\n\n&quot;
printf("[2] - Listar Funcionarios\n\n&quot;
printf("[3] - Excluir Funcionarios\n\n&quot;
printf("[4] - Sair\n\n&quot;
//printf("[5] - Buscar Funcionarios\n\n&quot;

printf("Qual opção deseja: &quot;
setbuf(stdin,NULL);
scanf("%d",&opcao);

switch(opcao){
case 1:
system("cls&quot;
Cad_Fun();
break;
case 2:
system("cls&quot;
List_Fun();
break;
case 3:
system("cls&quot;
Del_Fun();
break;
case 4:
system("cls&quot;
Sair();
break;

// case 5:
// system ("cls&quot;
// Busc_Fun();
// break;

default :
printf("\n\n\t\t\tOpção inválida O.o \n \t\t\tTente novamente...&quot;

}

} while( (opcao != 1) && (opcao != 2) && (opcao != 3) && (opcao != 4));
}

void Cad_Fun(void){
int escolha;
system("cls&quot;
Num_Func ++;

printf("--------------------------------------------------------------------------------\n&quot;
printf(" CADASTRAR FUNCIONARIO \n&quot;



printf("FUNCIONARIO N%d\n", Num_Func);
Reg_Fun[Num_Func].Codigo = Num_Func;
if (Reg_Fun[Num_Func].Codigo < 10)
printf("\nCODIGO: 0%d\n",Reg_Fun[Num_Func].Codigo);
else
printf("\nCODIGO: %d\n",Reg_Fun[Num_Func].Codigo);
setbuf(stdin,NULL);
printf("\nDigite o Nome: &quot;
gets(Reg_Fun[Num_Func].Nome);
setbuf(stdin,NULL);
printf("\nDigite a Endereco: &quot;
gets(Reg_Fun[Num_Func].Endereco);
setbuf(stdin,NULL);
printf("\nDigite o idade: &quot;
gets(Reg_Fun[Num_Func].idade);
setbuf(stdin,NULL);
printf("\nDigite o Preco do Salario: &quot;
scanf("%f",&Reg_Fun[Num_Func].Preco_Salario);
setbuf(stdin,NULL);

printf("\n\nCadastro Realizado com sucesso...\n&quot;
getch();
do{
system("cls&quot;
printf("--------------------------------------------------------------------------------\n&quot;
printf(" CADASTRAR FUNCIONARIO \n&quot;
printf(" \n&quot;
printf("--------------------------------------------------------------------------------\n&quot;

printf("\n\t\t[1]- Deseja cadastrar um Funcionario?&quot;
printf("\n\t\t[2]- Deseja volta ao menu inicial&quot;
printf("\n\n\t\tQual a opcao: &quot;
scanf("%d",&escolha);

switch(escolha){

case 1:
system("cls&quot;
Cad_Fun();
break;
case 2:
system("cls&quot;
main();
break;
default :
printf("\n\n\t\t\tOpcao invalida O.o \n \t\t\tTente novamente...&quot;


}
} while((escolha != 1) && (escolha != 2));
}

void List_Fun(void){

int Cont;
int opc2,opcao2;

if ( Num_Func >= 1){

printf(" FUNCIONARIOS CADASTRADOS \n&quot;


for ( Cont = 1; Cont <= Num_Func; Cont++){
printf(" FUNCIONARIO Nº%d\n",Cont);
if (Reg_Fun[Cont].Codigo < 10)
printf("\n CODIGO: 0%d",Reg_Fun[Cont].Codigo);
else
printf("\n CODIGO: %d",Reg_Fun[Cont].Codigo);
printf("\n NOME: %s ",strupr (Reg_Fun[Cont].Nome));
printf("\n Endereco: %s",strupr(Reg_Fun[Cont].Endereco));
printf("\n idade: %s",strupr(Reg_Fun[Cont].idade));
printf("\n PRECO DO SALARIO: %.2f",Reg_Fun[Cont].Preco_Salario);
puts("--------------------------------\n&quot;


}
getch();
do{
system("cls&quot;

printf(" FUNCIONARIOS CADASTRADOS \n&quot;

printf("\n\t\t[1] - Excluir Funcionario\n\n&quot;
printf("\t\t[2] - Menu Inicial\n\n&quot;
printf("\n\n\t\tQual opcao deseja: &quot;
setbuf(stdin,NULL);
scanf("%d",&opcao2);

switch(opcao2){

case 1:
system("cls&quot;
Del_Fun();
break;
case 2:
main();
system("cls&quot;
break;
default :
printf("\n\n\t\t\tOpcao invalida O.o \n \t\t\tTente novamente...&quot;

}
} while( (opcao2 != 1) && (opcao2 != 2) );
}
else {
do{
system("cls&quot;

printf(" FUNCIONARIOS CADASTRADOS \n&quot;


printf("\n Nenhum Funcionario foi Cadastrado ate o momento \n&quot;
printf("\n\t\t[1]- Deseja cadastrar um funcionario&quot;
printf("\n\t\t[2]- Deseja volta ao menu inicial&quot;
printf("\n\n\t\tQual a Opcao - &quot;
scanf("%d",&opc2);

switch(opc2){

case 1:
system("cls&quot;
Cad_Fun();
break;
case 2:
system("cls&quot;
main();
break;
default :
printf("\n\n\t\t\tOpcao invalida O.o \n \t\t\tTente novamente...&quot;

}
} while((opc2 != 1) && (opc2 != 2));
}
}

void Del_Fun(void){
int Cod_Del,i,j,Cont;
char escolha1;
int opc2;
if (Num_Func == 0 ){
do{
printf("--------------------------------------------------------------------------------\n&quot;
printf(" REMOVER FUNCIONARIO CADASTRADOS \n&quot;
printf(" \n&quot;
printf("--------------------------------------------------------------------------------\n\n&quot;

printf("\n\t\tNenhum cliente cadastrado \n\t\tImpossivel realizar Operação excluir\n\n&quot;
printf("\n\t\t[1]- Deseja cadastrar um Funcionario?&quot;
printf("\n\t\t[2]- Deseja volta ao menu inicial&quot;
printf("\n\n\t\tQual a Opcao - &quot;
scanf("%d",&opc2);

switch(opc2){

case 1:
system("cls&quot;
Cad_Fun();
break;
case 2:
system("cls&quot;
main();
break;
default :
printf("\n\n\t\t\tOpcao invalida O.o \n \t\t\tTente novamente...&quot;


}
} while((opc2 != 1) && (opc2 != 2));
}

else { if( Num_Func > 0) {

printf(" REMOVER FUNCIONARIO CADASTRADOS \n&quot;


for ( Cont = 1; Cont <= Num_Func ; Cont++){
printf(" FUNCIONARIO N%d\n",Cont);
if (Reg_Fun[Cont].Codigo < 10)
printf("\n CODIGO: 0%d",Reg_Fun[Cont].Codigo);
else
printf("\n CODIGO: %d",Reg_Fun[Cont].Codigo);
printf("\n NOME: %s ",strupr (Reg_Fun[Cont].Nome));
printf("\n Endereco: %s",strupr(Reg_Fun[Cont].Endereco));
printf("\n idade: %s",strupr(Reg_Fun[Cont].idade));
printf("\n PRECO DO SALARIO: %.2f",Reg_Fun[Cont].Preco_Salario);
puts("--------------------------------\n&quot;}

printf("Digite o codigo do funcionario a ser excluido do cadastro: &quot;
scanf("%d",&Cod_Del);

for(i = 0 ; i <= Num_Func ; i++){

if(Reg_Fun[i].Codigo == Cod_Del){ // percorre o vetor até encontrar o codigo do produto a ser excluido

for (j = i; j < Num_Func ; j++){
// Processo de subescrever
Reg_Fun[j].Codigo = Reg_Fun[j].Codigo;
strcpy(Reg_Fun[j].Nome,Reg_Fun[j+1].Nome);
strcpy(Reg_Fun[j].Endereco,Reg_Fun[j+1].Endereco);
strcpy(Reg_Fun[j].idade,Reg_Fun[j+1].idade);
Reg_Fun[j].Preco_Salario = Reg_Fun[j+1].Preco_Salario;


}
Num_Func = Num_Func - 1; // Foi excluido um elemento
printf("\n\n Exclusão realizada com sucesso....\n&quot;
getch();
}
}
do{ system("cls&quot;

printf(" REMOVER FUNCIONARIO CADASTRADOS \n&quot;


printf("\n\t\t[1]- Deseja cadastrar um Funcionario?&quot;
printf("\n\t\t[2]- Deseja volta ao menu inicial&quot;
printf("\n\n\t\tQual a Opcao: &quot;
scanf("%d",&escolha1);

switch(escolha1){

case 1:
system("cls&quot;
Cad_Fun();
break;
case 2:
system("cls&quot;
main();
break;
default :
printf("\n\n\t\t\tOpcao invalida O.o \n \t\t\tTente novamente...&quot;

}
} while((escolha1 != 1) && (escolha1 != 2));
}
}
}
void Sair (void){


system("cls&quot;
printf("--------------------------------------------------------------------------------\n&quot;
printf(" EMPRESA X \n&quot;
printf(" \n&quot;
printf(" \n&quot;
printf("--------------------------------------------------------------------------------\n&quot;
printf("----------------------------- SAINDO DO PROGRAMA ...----------------------------\n&quot;
system("pause > NULL&quot;
}
esquiloesperto
esquiloesper... Cyber Highlander Moderador
7.1K Mensagens 2.2K Curtidas
#2 Por esquiloesper...
21/11/2015 - 13:11
Partindo do princípio de que é requisito da busca binária se suceder exclusivamente em elementos ordenados, você precisa antes dela executar a ordenação dos seus dados.
Estes dois métodos - de ordenação e de pesquisa binária - tem vasta literatura na internet ( inclusive com códigos de exemplo em C ) - Pesquisou? Gu Gl
Só é difícil enquanto estiver oculto! cool.png
Use a pesquisa


rolleyes.png  Navegar é preciso, viver... também.  smile.png
DeNNer2.0
DeNNer2.0 Novo Membro Registrado
1 Mensagem 0 Curtidas
#3 Por DeNNer2.0
30/11/2015 - 14:30
To precisando deletar um produto ao ser digitado no programa, mas não consigo deletar vcs podem me ajudar???????
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]
[HASHTAG]#include[/HASHTAG]

struct TProduto
{
int codigo;
char descricao[40];
char unidade[5];
float valoruni;
};

int PdtsCodigo = 0;
int cont = 0; // cont agora é variável global.

void cadastrorProduto(struct TProduto* produtos) // * é vetor
{

PdtsCodigo++;
struct TProduto newProduto;

newProduto.codigo = PdtsCodigo;

system("cls");
printf(" Cadastro de produtos: \n\n");
printf("Código do Produto: %d \n\n", newProduto.codigo);

printf("Descrição: ");
fflush(stdin);
scanf("%[^\n]", &newProduto.descricao);

printf("Unidade: ");
fflush(stdin);
scanf("%[^\n]", &newProduto.unidade);

printf("Valor Unitário: ");
fflush(stdin);
scanf("%f", &newProduto.valoruni);

printf("\n========================================\n");
printf(" Valores Informados: \n");
printf("\nCodigo do Produto: %d \n\n", newProduto.codigo);
printf("Descrição: %s \n", newProduto.descricao);
printf("Unidade: %s \n", newProduto.unidade);
printf("Valor Unitário: %f \n", newProduto.valoruni);

fflush(stdin);

char conf;
printf("\n=========================================\n\n"); // algoritmo para a confirmação/cancelamento de um cadastro feito
printf("Confirmar produto? \n");
printf("s para CONFIRMAR\n");
printf("n para REFAZER\n");
fflush(stdin);
scanf("%c", &conf);

if(toupper(conf) == 'S')
{
produtos[PdtsCodigo-1] = newProduto; // NÃO HÁ ERRO! (antiga linha 46), porém o desenvolvedor deve se atentar que é utilizado um
// vetor, desta forma, produtos[0] corresponderá ao produto de código 1, e assim por diante.
} // linha 46 com o vetor MAX, limite de 1000 cadastro, possivel erro de passar do limite
else // impedir que pule um código de produto e continue até o contador atingir N.
{
PdtsCodigo--;
cont--;
}
system("pause");
}

void RelatorioDeProdutos(struct TProduto* produtos)
{

system("cls"); // ERRO: gerará um relatório colado com o registro do último produto ao usar system("pause").
printf(" Relatorio de Produtos: \n");

int i;
for(i=0; i {
struct TProduto produto = produtos;

printf("\n");
printf("Codigo de Produto: %d \n", produto.codigo);
printf("Descricao: %s \n", produto.descricao);
printf("Unidade: %s \n", produto.unidade);
printf("Valor Unitario: %f \n", produto.valoruni);
}
}

void editarProduto(int codigo, struct TProduto* produtos) //NOVA FUNÇÃO para editar um produto.
{

struct TProduto newProduto;

newProduto.codigo = codigo;

system("cls");
printf("Editar um produto: \n");
printf("Código do produto: %d \n", newProduto.codigo);

printf("Descrição: ");
fflush(stdin);
scanf("%[^\n]", &newProduto.descricao);

printf("Unidade: ");
fflush(stdin);
scanf("%[^\n]", &newProduto.unidade);

printf("Valor unitário: ");
fflush(stdin);
scanf("%f", &newProduto.valoruni);

printf("\n");
printf(" Valores Informados: \n");
printf("Codifo do Produto: %d \n", newProduto.codigo);
printf("Descrição: %s \n", newProduto.descricao);
printf("Unidade: %s \n", newProduto.unidade);
printf("Valor Unitário: %f \n", newProduto.valoruni);

produtos[codigo-1] = newProduto;
}

void deletarProduto(int codigo, struct TProduto* produtos)
{
struct TProduto newProduto;

newProduto.codigo = codigo;

system("cls");
printf("Deletar um produto: \n");
printf("Código do produto: %d \n", newProduto.codigo);

}
}
int main()
{
printf("\n****** Verificando a localidade corrente *******\n\n");
printf("Localidade corrente: %s\n" , setlocale(LC_ALL,NULL) );
printf("Não é possivel usar acentuação ou c corretamente...\n\n");

printf("\n****** Alterando para a localidade do sistema *******\n\n");

printf("A localidade corrente agora é %s \n",setlocale(LC_ALL,""));
printf("Agora não tem mais problema algum.\n");
printf("Já posso usar acentuação e também o caracter ç...\n\n\n");

const int Max = 1000;
struct TProduto produtos[Max];
char teclado = 'n';
system("pause");

do
{
cadastrorProduto(produtos);
printf("\nDeseja sair? \n");
getchar();
scanf("%c", &teclado);
}

while(teclado!='s' && teclado!='S');
{


RelatorioDeProdutos(produtos);

char opcao;
int codPrd;


printf("\nDeseja editar algum registro? \n");
fflush(stdin);
scanf("%c", &opcao);

if(toupper(opcao) == 'S')
{
printf("\nDigite o código do produto: \n");
scanf("%i", &codPrd);
editarProduto(codPrd, produtos);
}
printf("Deletar um produto? \n");
fflush(stdin);
scanf("%c", &opcao);

if(toupper(opcao) == 'S')
{
printf("\nDigite o código do produto: \n");
scanf("%i", &codPrd);
deletarProduto(codPrd, produtos);
}

printf("\nDeseja sair? \n");
scanf("%c", &teclado);
getchar();
}
system("cls");
RelatorioDeProdutos(produtos);

system("pause");

return 0;
}
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#4 Por tpcvasco
30/11/2015 - 16:53
A primeira coisa q vc deve fazer é ter um loop q procura o item q vc quer na sua lista.
Depois de achá-lo, vc tem três opções:
1) Caso não precise manter a ordem dos produtos, substitua os dados do item a ser deletado pelo último.
2) Caso precise manter a ordem dos produtos, continua o loop até o final, substituindo os dados de cada item pelo item seguinte.
3) Adicione um marcador na estrutura que define se ela está "ativa" ou não. Cadastre apenas nas posições "não ativas", ativando-as, e use as "ativas". Aí para deleltar é só "desativar".
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal