Well I'm using list structure and I've tried everything and so far I have not been able to. I'm trying to get the product entity to ONLY receive the CPF from a vendor. The Product entity works when the Person entity has nothing inside or until I enter a second person in the registry, after which the product registration accepts anything. If someone can help I thank.
main.c
#include <stdio.h>
#include <stdlib.h>
#include "TrabalhoFinal.h"
int main()
{
/////Produto
Produto prod1;
int id;
float preco;
int cpfFornecedor;
char nome_prod1[20];
int quantidade;
prod1 = produto_iniciar();
/////////
//provisorio
int prov;
/////Pessoa
Pessoa p1;
int cpf;
char nome[20];
char tipo;
p1 = pessoa_iniciar();
////////////
/////Compra
Compra compra1;
int id_compra;
int cpfCliente;
int cpfEmpregado;
Produto produtos;
float valorTotal;
int dia,mes,ano;
compra1= compra_iniciar();
/////////////////////////
int entidade;
do{
printf("MENU: \n");
printf("1. Inserir Produto\n");
printf("2. Inserir Pessoa\n");
printf("3. Inserir Compra\n");
printf("4. Imprimir produtos pelo ID\n");
printf("999. Imprimir tudo\n\n");
printf("Op%c%co: ",135,198);
scanf("%d",&entidade);
printf("\n");
//////// PRODUTO
if(entidade==1){
do{
printf("ID: ");
scanf("%d",&id);
if(produto_busca_produto(prod1,id)==0){
if(id==-1)break;
fflush(stdin);
printf("Pre%co: ",135);
scanf("%f",&preco);
printf("CPF do Fornecedor: ");
scanf("%d",&cpfFornecedor);
while(pessoa_verifica_tipo(tipo)!=1){
printf("Erro de cadastro! Digite o CPF de um fornecedor: ");
scanf("%d",&cpfFornecedor);
if(cpfFornecedor==-1)break;
}
if(cpfFornecedor==-1)break;
fflush(stdin);
printf("Nome: ");
fgets(nome_prod1,20,stdin);
fflush(stdin);
printf("Quantidade: ");
fflush(stdin);
scanf("%d",&quantidade);
printf("\n");
while(verifica_quantidade(quantidade)==0){
printf("Erro de cadastro! A quantidade n%co pode ser menor que 3.\n\n",198);
fflush(stdin);
scanf("%d",&quantidade);
}}
else
printf("Erro de cadastro! Digite um id novo: ");
/* printf("\n");
while(pessoa_busca_cpf(p1,cpf)==0){
printf("CPF invalido, insira um CPF cadastrado: ");
fflush(stdin);
scanf("%d",&cpfFornecedor);
}*/
prod1=produto_insere(id,preco,cpfFornecedor,nome_prod1,quantidade,prod1);
}while(1);
}
//////// PESSOA
if(entidade==2){
do{
printf("CPF: ");
scanf("%d",&cpf);
if(cpf==-1)break;
fflush(stdin);
printf("Nome: ");
fgets(nome,20,stdin);
fflush(stdin);
printf("Tipo (c, e ou f): ");
fflush(stdin);
scanf("%c",&tipo);
printf("\n");
while(pessoa_verifica_tipo(tipo)==0){
printf("Erro de cadastro! Insira o tipo corretamente (c, e ou f). \n\n");
fflush(stdin);
scanf("%c",&tipo);
}
p1=pessoa_inserir(cpf,nome,tipo,p1);
}while(1);
}//fflush(stdin);
////IMPRIMIR
if(entidade==3){
printf("\nID da compra: ");
printf("\nCPF do cliente: ");
printf("\nCPF do empregado: ");
printf("\nProdutos comprados: ");
printf("\nValor total: ");
printf("\nData da compra: ");
printf("\n");
}
/* int id_compra;
int cpfCliente;
int cpfEmpregado;
Produto produtos;
float valorTotal;
int dia,mes,ano;*/
if(entidade==4){
do{
printf("ID do produto: ");
scanf("%d",&id);
if(id==-1) break;
produto_imprimir_id(id,prod1);
}while(1);
}
if(entidade==999){
produto_imprimir(prod1);
pessoa_imprimir(p1);
printf("Sair (-1): ");
scanf("%d",&prov);
if(prov==-1)break;
}
system("cls");
}while(1);
return 0;
}
Part1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "TrabalhoFinal.h"
struct produto{
int id;
float preco;
int cpfFornecedor;
char nome[20];
int quantidade;
struct produto*prox;
};
Produto produto_iniciar(void){
return NULL;
}
int produto_busca_produto(Produto produtos, int id){
Produto aux;
for(aux=produtos;aux!=NULL;aux=aux->prox)
if(aux->id==id){
return 1;
}
return 0;
}
Produto produto_insere(int id, float preco, int cpfFornecedor, char* nome, int quantidade, Produto produtos){
Produto novo_produto=(Produto)malloc(sizeof(struct produto));
if(produtos==NULL){
novo_produto->id=id;
novo_produto->preco=preco;
novo_produto->cpfFornecedor= cpfFornecedor;
strcpy(novo_produto->nome,nome);
novo_produto->quantidade=quantidade;
novo_produto->prox=produtos;
return novo_produto;
}
else{
novo_produto->id=id;
novo_produto->preco=preco;
novo_produto->quantidade=quantidade;
novo_produto->cpfFornecedor= cpfFornecedor;
strcpy(novo_produto->nome,nome);
novo_produto->prox=produtos;
return novo_produto;
}
}
void produto_imprimir(Produto p){
printf("Produtos cadastrados: \n");
if(p==NULL)
printf("N%co h%c produtos cadastrados.\n\n",198,160);
Produto aux;
for(aux=p;aux!=NULL;aux=aux->prox){
printf("ID: %d",aux->id);
printf("\nPre%co: %.2f",135,aux->preco);
printf("\nCPF do Fornecedor: %d",aux->cpfFornecedor);
printf("\nNome: %s",aux->nome);
printf("Quantidade: %d\n\n",aux->quantidade);
}
}
/* int id;
float preco;
int cpfFornecedor;
char nome[20];
int quantidade;
struct produto*prox;*/
int verifica_quantidade(int quant){
if(quant<3)
return 0;
else
return 1;
}
/////////////////////////////////////////////////
struct pessoa{
int cpf;
char nome[20];
char tipo;
struct pessoa* prox;
};
Pessoa pessoa_iniciar(void){
return NULL;
}
//funcao pesquisa cpf de uma lista de pessoas e retorna 1 se exister
int pessoa_busca_cpf(Pessoa p, int cpf){
Pessoa aux;
for(aux=p;aux!=NULL;aux=aux->prox){
if(aux->cpf== cpf)//procura por cpf, se ele for iguar retorna 1
return 1; // senao retorna 0
}
return 0;
}
int pessoa_verifica_tipo(char c){
if(c=='f' || c=='F')
return 1;
if(c=='e'|| c=='E')
return 2;
if(c=='c'|| c=='C')
return 3;
else
return 0;
}
Pessoa pessoa_inserir(int cpf, char* nome, char tipo, Pessoa pessoas){
Pessoa nova_pessoa;
nova_pessoa = (Pessoa)malloc(sizeof(struct pessoa));
if(pessoas == NULL){
nova_pessoa-> cpf = cpf;
strcpy(nova_pessoa->nome,nome);
nova_pessoa-> tipo =tipo;
nova_pessoa->prox=pessoas;
return nova_pessoa;
}
else{
do{
if(pessoa_busca_cpf(pessoas,cpf)==0){
nova_pessoa-> cpf = cpf;
strcpy(nova_pessoa->nome,nome);
nova_pessoa-> tipo =tipo;
nova_pessoa->prox=pessoas;
return nova_pessoa;
}
else{
puts("Erro de cadastro! CPF existente, insira um novo CPF.\n");
//puts("Digite 0000 para abortar a insercao\n");
//scanf("%d", &saida);
//if(saida == 0000){
free(nova_pessoa);
return pessoas;
//}
}
}while(pessoa_busca_cpf(nova_pessoa,cpf)==1);
}
}
void pessoa_imprimir(Pessoa p){
printf("\nPessoas cadastradas: \n");
if(p==NULL)
printf("N%co h%c pessoas cadastradas.\n\n",198,160);
Pessoa aux;
for(aux=p;aux!=NULL;aux=aux->prox){
printf("CPF: %d",aux->cpf);
printf("\nNome: %s",aux->nome);
printf("Tipo: %c\n\n",aux->tipo);
}
}
/*struct lista_compras{
int id;
int qtd;
struct lista_compras* prox;
};*/
struct compra{
int id_compra;
int cpfCliente;
int cpfEmpregado;
Produto produtos;
float valorTotal;
int dia,mes,ano;
};
Compra compra_iniciar(void){
return NULL;
}
Compra compra_inserir(int id_compra, int cpfCliente, int cpfEmpregado, Produto produtos, float valorTotal, int dia, int mes, int ano, Compra compras){
Compra nova_compra =(Compra)malloc(sizeof(struct compra));
if(compras==NULL){
nova_compra->id_compra=id_compra;
nova_compra->cpfCliente=cpfCliente;
nova_compra->produtos=produtos;
nova_compra->valorTotal=valorTotal;
nova_compra->dia=dia;
nova_compra->mes=mes;
nova_compra->ano=ano;
return nova_compra;
}
else{
nova_compra->id_compra=id_compra;
nova_compra->cpfCliente=cpfCliente;
nova_compra->produtos=produtos;
nova_compra->valorTotal=valorTotal;
nova_compra->dia=dia;
nova_compra->mes=mes;
nova_compra->ano=ano;
return nova_compra;
}
}
/* OFF PRODUTO */
int produto_pesquisa_fornecedor(Pessoa p1,int cpf){
Pessoa aux;
Pessoa aux1;
for(aux1=p1;aux1!=NULL;aux1=aux1->prox){
if(aux1==NULL)
puts("Nao existe fornecedor");
return 0;
}
for(aux=p1;aux!=NULL;aux=aux->prox){
if(aux->cpf==cpf && (aux->tipo=='f' || aux->tipo=='F'));
return 1;
}
return 0;
}
/// MENU 4:
void produto_imprimir_id(int id_produto, Produto produtos)
{
Produto aux;
if(produtos==NULL)
printf("N%co h%c produtos cadastrados.\n\n",198,160);
for(aux=produtos;aux!=NULL;aux=aux->prox){
if(id_produto==aux->id){
printf("\nID: %d",aux->id);
printf("\nPre%co: %.2f",135,aux->preco);
printf("\nCPF do Fornecedor: %d",aux->cpfFornecedor);
printf("\nNome: %s",aux->nome);
printf("Quantidade: %d\n\n",aux->quantidade);
}
}
}
Final Work.h
#ifndef TRABALHOFINAL_H_INCLUDED
#define TRABALHOFINAL_H_INCLUDED
// Pessoa
typedef struct pessoa* Pessoa;
Pessoa pessoa_iniciar(void);
int pessoa_busca_cpf(Pessoa, int);
int pessoa_verifica_tipo(char );
Pessoa pessoa_inserir(int , char* , char , Pessoa);
void pessoa_imprimir(Pessoa);
// Produto
typedef struct produto* Produto;
void pessoa_imprimir(Pessoa p);
int produto_busca_produto(Produto produtos, int id);
Produto produto_insere(int , float, int , char* , int , Produto);
void produto_imprimir(Produto );
int verifica_quantidade(int);
int produto_pesquisa_fornecedor(Pessoa ,int );
// Compra
typedef struct compra* Compra;
#endif // TRABALHOFINAL_H_INCLUDED