Ir ao conteúdo
  • Cadastre-se
Anderson Luis Mattiola

Programa orçamento familia

Recommended Posts

Pessoal,

 

Eu preciso desenvolver um programa em c para um trabalho de faculdade, que é um orçamento familiar.

A ideia é trabalhar com 3 tabelas (obtidas das structs) para cadastros de:
1) Pessoas
2) Despesas
3) Lançamento de Despesas

 

Fiz 3 structs para receber as informações.

Fiz a parte de cadastro de Pessoas e o cadastro das Depesas.

Na parte de lancamentos, eu queria cadastrar a pessoa, o lancamento e o valor.

Mas eu preciso depois, para gerar os dados e relatorios, associar e obter outros campos de Pessoas e Despesas, (como de fosse relacionamentos em um banco de dados) para poder fazer os agrupamentos e responder o que se pede (como se fossem querys em um banco de dados).

O caso é que não consigo, ao lançar a pessoa e despesa, trazer as demais informações que eu vou precisar, conforme esta comentado no codigo.

Nao sei se é possivel fazer isso. Não sei se é com structs que vou conseguir.

Não posso usar banco de dados com o c.

 

Segue abaixo os comentarios e o codigo, para que se possivel, alguem possa me ajudar a sair dessa.

 

Obrigado.

Anderson

 


/*
Aplicação de Orçamento e Despesas Familiares

1. Cadastrar membro da família.
2. Definir se a despesa é pessoal ou da família.
3. Se a despesa é pessoal, então o usuário será direcionado a uma verificação de despesas básicas. 
São despesas básicas pessoais: caso ele tenha mais de 18 anos – escola, transporte, lazer, saúde e previdência.
Caso seja menor de idade, as despesas básicas serão adicionadas ao cálculo das estimativas do usuário cadastrado como “pai” ou “mãe”.
4. Para usuário cadastrado como “pai” ou “mãe”, permitir a visualização das despesas comuns da residência, que incluem: 
moradia, água, luz, gás, IPTU, prestação do carro (se houver). 
Se sim, apresente as demais despesas: 
IPVA, seguro, combustível, higienização e manutenção. 
Ainda como despesas básicas: 
plano de saúde (se houver), despesas de mercado, previsão de gastos extras com férias, lazer e outras relacionadas à gastronomia e previdência.
5. Além de permitir a inserção das despesas de acordo com o usuário, o sistema deverá permitir aos usuários em suas respectivas 
planilhas as funcionalidades básicas (CRUD ? Create, Read, Update e Delete).
6. Ao final, deverá realizar o controle que considera: 
valor recebido, total de despesas, saldo a poupar, saldo a recuperar, tanto em cálculos individuais quanto em despesas comuns.

A ideia é trabalhar com 3 tabelas (obtidas das structs) para cadastros de:
1) Pessoas
2) Despesas
3) Lançamento de Despesas

*/


#include <stdio.h>
#include <stdlib.h>

struct Pessoas{
    int CodigoPessoa;
	char nome[40];
	char sexo[2]; //Deveria ser 1 mas da problema
	char tipo[2]; //Deveria ser 1 mas da problema
	int idade;
	float renda;
};

struct Despesas{
    int CodigoDespesa;
	char NomeDespesa[40];
	char TipoDespesa[2]; //Deveria ser 1 mas da problema
	float ValorEstimado;
};

struct Lancamentos{
	int LancamentoID;
	int LnCodigoDespesa;
	int LnCodigoPessoa;
	int Mes;
	int Ano;
	float ValorLancado;	
};


int main()
{

    int op = 0; 
//	posicao, codaux, retorno;

    while ( op != 5 )
    {
	system("cls");
	
		printf("\n\n\t\t\t\t** Orcamento e Planejamento Familiar **\n\n\n");
        printf("MENU\n\n1 - Cadastrar Pessoas\n2 - Cadastrar Despesas\n3 - Lancamentos\n4 - Relatorio\n5 - Sair\n\nOpcao: ");
        scanf("%d",&op);
        system("cls");
        switch ( op )
        {
            case 1: // Cadastro Pessoas
			{
		
				int qtde;
				struct Pessoas CadastroPessoas[10]; //Pessoas cadastro[10];
				int i = 0;
								
				//Inicio Cadastro Pessoas
				
				printf("-----------------------------------\n");
				printf("Quantos pessoas voce quer informar? ");
				scanf("%d",&qtde);
			
				while(qtde>10){
				    printf("Quantidade nao permitida, tente novamente...\n\n");
				    printf("Quantas pessoas: ");
				    scanf("%d",&qtde);
			}
			
			//capturando os dados
			    for(i=0;i<qtde;i++)
				{
			            printf("-----------------------------------\n");
						CadastroPessoas[i].CodigoPessoa = i+1;
			            
			            printf("\nDigite o nome %d: ",i+1);
			            fflush(stdin); 
			            fgets(CadastroPessoas[i].nome,40,stdin);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("Digite o sexo (M/F) %d: ",i+1);
			            scanf("%s", &CadastroPessoas[i].sexo);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			
			            printf("Digite o tipo (P - Pai / M - Mae / F - Filho / O - Outro)%d: ",i+1);
			            scanf("%s", &CadastroPessoas[i].tipo);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			
			            printf("Digite a idade %d: ",i+1);
			            scanf("%d", &CadastroPessoas[i].idade);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			
			            printf("Digite a Renda %d: ",i+1);
			            scanf("%f", &CadastroPessoas[i].renda);
			            setbuf(stdin, NULL); //limpar buffer de entrada            
			    }
			
			//Visualizar os dados
			     for(i=0;i<qtde;i++)
				 {
			     	    printf("\n-----------------------------------");  
			            printf("\nCodigo %d ",CadastroPessoas[i].CodigoPessoa);
			            printf("\nNome: %s ",CadastroPessoas[i].nome);
			            printf("\nSexo: %s ",CadastroPessoas[i].sexo);
						printf("\nTipo: %s ",CadastroPessoas[i].tipo);
						printf("\nIdade: %d ",CadastroPessoas[i].idade);   
						printf("\nRenda: %f ",CadastroPessoas[i].renda);          
			          
			            puts(" ");
				}


//TESTES ARQUIVOS
  			FILE *pont_arq_pessoas; // cria variável ponteiro para o arquivo
//abrindo o arquivo com tipo de abertura w
			pont_arq_pessoas = fopen("dt_pessoas.txt", "w");	
	
//Gravação do arquivo
  
  			     for(i=0;i<qtde;i++)
				   {
			            fprintf(pont_arq_pessoas,"%d ",CadastroPessoas[i].CodigoPessoa,5);
			            fprintf(pont_arq_pessoas,"%s ",CadastroPessoas[i].nome,40);
			            fprintf(pont_arq_pessoas,"%s ",CadastroPessoas[i].sexo,1);
						fprintf(pont_arq_pessoas,"%s ",CadastroPessoas[i].tipo,1);
						fprintf(pont_arq_pessoas,"%d ",CadastroPessoas[i].idade,2);   
						fprintf(pont_arq_pessoas,"%f ",CadastroPessoas[i].renda,15); 
						fprintf(pont_arq_pessoas,"\n");       
			   		}
//fclose para fechar o arquivo
  				fclose(pont_arq_pessoas);

			    system("pause");
			    
			break;
			}
			    
//CADASTRO DE DESPESAS

            case 2: // Cadastro Despesas
            {
				struct Despesas CadastroDespesas[30];
				char Retorno; 
				int i = 0;
				int j = 0;
				do 
				{ 

			            printf("-----------------------------------\n");
						CadastroDespesas[i].CodigoDespesa = i+1;
			            
			            printf("\nDigite o nome da Despesa %d: ",i+1);
			            fflush(stdin); 
			            fgets(CadastroDespesas[i].NomeDespesa,40,stdin);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("Digite o Tipo (P/R - Pessoal / Residencial) %d: ",i+1);
			            scanf("%s", &CadastroDespesas[i].TipoDespesa);
			            setbuf(stdin, NULL); //limpar buffer de entrada

			            printf("Digite o Valor Estimado %d: ",i+1);
			            scanf("%f", &CadastroDespesas[i].ValorEstimado);
			            setbuf(stdin, NULL); //limpar buffer de entrada            

			    
			    	printf("\n-----------------------------------\n");
			        printf("\nDeseja cadastrar outra despesa? (S/N)\n");
    				scanf("%s", &Retorno);
				
				i = i + 1;
				j = j + 1;
			       
				} while (Retorno == 'S' || Retorno == 's');
			

				//imprimindo os dados
			    for(i=0;i<j;i++)
				{
			     	printf("\n-----------------------------------");  
			        printf("\nCodigo Despesa %d ",CadastroDespesas[i].CodigoDespesa);
			        printf("\nNome Despesa: %s ",CadastroDespesas[i].NomeDespesa);
			        printf("\nTipo Despesa: %s ",CadastroDespesas[i].TipoDespesa);
					printf("\nValor Estimado: %f ",CadastroDespesas[i].ValorEstimado);

			        puts(" ");
			    }
			    
//ARQUIVOS DESPESAS
  			FILE *pont_arq_despesas; // cria variável ponteiro para o arquivo
//abrindo o arquivo com tipo de abertura w
			pont_arq_despesas = fopen("dt_despesas.txt", "w");	
	
//Gravação do arquivo
  
			    for(i=0;i<j;i++)
				   {
					fprintf(pont_arq_despesas,"\nCodigo Despesa %d ",CadastroDespesas[i].CodigoDespesa);
			        fprintf(pont_arq_despesas,"\nNome Despesa: %s ",CadastroDespesas[i].NomeDespesa);
			        fprintf(pont_arq_despesas,"\nTipo Despesa: %s ",CadastroDespesas[i].TipoDespesa);
					fprintf(pont_arq_despesas,"\nValor Estimado: %f ",CadastroDespesas[i].ValorEstimado);
				   	fprintf(pont_arq_despesas,"\n");   
					}

//fclose para fechar o arquivo
  				fclose(pont_arq_despesas);			    
			    
				system("pause");
				
			break;				
			}   
			
			
//CADASTRO DE LANCAMENTOS
//A ideia é fazer o lancamento por pessoa e despesa.
//Depois, precisa buscar os dados das pessoas (Tipo, Idade e Renda) e associar com os dados das despesas (TipoDespesa e ValorEstimado) para fazer os calculos
//de despesas por familia, despesas pessoais, orçamento, etc.

            case 3: // Cadastro de Lançamentos
            
           {
				struct Lancamentos CadastroLancamentos[30];
				char Retorno; 
				int i = 0;
				int j = 0;
				do 
				{ 

			            printf("-----------------------------------\n");
						CadastroLancamentos[i].LancamentoID = i+1;
			            
			            printf("\nInforme o Codigo da Despesa %d: ",i+1);
			            scanf("%d", &CadastroLancamentos[i].LnCodigoDespesa);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("\nInforme o Codigo da Pessoa %d: ",i+1);
			            scanf("%d", &CadastroLancamentos[i].LnCodigoPessoa);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("\nInforme o Mes %d: ",i+1);
			            scanf("%d", &CadastroLancamentos[i].Mes);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("\nInforme o Ano %d: ",i+1);
			            scanf("%d", &CadastroLancamentos[i].Ano);
			            setbuf(stdin, NULL); //limpar buffer de entrada
			            
			            printf("Digite o Valor Estimado %d: ",i+1);
			            scanf("%f", &CadastroLancamentos[i].ValorLancado);
			            setbuf(stdin, NULL); //limpar buffer de entrada            

		    
			    	printf("\n-----------------------------------\n");
			        printf("\nDeseja cadastrar outra despesa? (S/N)\n");
    				scanf("%s", &Retorno);
				
				i = i + 1;
				j = j + 1;
			       
				} while (Retorno == 'S' || Retorno == 's');
			

				//Visualizando os dados
			    for(i=0;i<j;i++)
			    {
			     	printf("\n-----------------------------------");  
			        printf("\nCodigo da Despesa %d ",CadastroLancamentos[i].LnCodigoDespesa);
			        printf("\nCodigo da Pessoa: %d ",CadastroLancamentos[i].LnCodigoPessoa);
			        printf("\nMes: %d ",CadastroLancamentos[i].Mes);
			        printf("\nAno: %d ",CadastroLancamentos[i].Ano);				
					printf("\nValor: %f ",CadastroLancamentos[i].ValorLancado);

			        puts(" ");
			    }
			    
//TESTES ARQUIVOS DESPESAS
  			FILE *pont_arq_lancamento; // cria variável ponteiro para o arquivo
//abrindo o arquivo com tipo de abertura w
			pont_arq_lancamento = fopen("dt_lancamentos.txt", "w");	
	
//Gravação do arquivo
  
			    for(i=0;i<j;i++)
				   {
					fprintf(pont_arq_lancamento,"\nCodigo da Despesa %d ",CadastroLancamentos[i].LnCodigoDespesa);
					fprintf(pont_arq_lancamento,"\nCodigo da Pessoa: %d ",CadastroLancamentos[i].LnCodigoPessoa);
					fprintf(pont_arq_lancamento,"\nMes: %d ",CadastroLancamentos[i].Mes);
					fprintf(pont_arq_lancamento,"\nAno: %d ",CadastroLancamentos[i].Ano);				
					fprintf(pont_arq_lancamento,"\nValor: %f ",CadastroLancamentos[i].ValorLancado);					
					}

//fclose para fechar o arquivo
  				fclose(pont_arq_lancamento);			    
			    
				system("pause");
	
		
			break;				
			}               
			
			 
		}


        }

  
return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por meio da CodigoPessoa você já estabeleceu a chave direta entre as digamos tabelas,

o que estou vendo é a necessidade de um tabela (arquivo) família ou mais uma chave (variável)

que identifique os membros familiares, ou simplificando dentro do CodigoPessoa onde os 3

primeiros dígitos ou os últimos identificaram os muitos membros da mesma família.

Se bem entendi é isto -.-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauro, 

 

Obrigado pela colaboração...

As pessoas da família entrariam na tabela pessoas mesmo.

O que eu preciso é trazer as demais informações da tabela pessoa e despesas, além dos codigos (chaves) junto com a associação de lancamentos, para eu poder fazer as totalizações que eu preciso e gerar os resultados.

O que eu não quero é ter que ficar repetindo os dados das pessoas a cada lançamento de despesa, ou ter que engessar todo esse codigo só para resolver esse trabalho.

Eu preciso saber se tem como eu gerar uma especie de query associando esses dados 3 dessas structs para eu poder gerar os resultados. Ou se quando eu digitasse o LnCodigoPessoa e LnCodigoDespesa na tabela de lançamentos, eu conseguiria recuperar as informações dessa tabelas (Pessoas e Despesas), para gravar todos os dados no Lancamento (sendo redundante), mas sem precisar ficar fazendo um retrabalho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Anderson Luis Mattiola ah sei não, lamento não poder ajudar mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×