Jump to content
Sign in to follow this  
v1tal1ty

Array com valor desconhecido...

Recommended Posts

v1tal1ty

Boas, venho por este meio pedir ao Portugal a programar umas questoes..

ora tenho um programa que me simula as vendas de uma loja e guardar em ficheiros binarios.. so que na declaracao de strutura VendaDT e quero guardar um dado numero de vendas de artigos desconhecido, no meu caso eu pus 100, e fico com 100 artigos por venda, e nao posso, pois por exemplo:

tenho um recibo com 1 artigo, vou guardar o arrays so com 1 valor e os restantes 99 ficam com campos nulos, e preciso que podem ser mais artigos/venda sem guardar lixo...

alguem me pode dar um conselho para isso.

#include<stdio.h>
#include<time.h>

struct tagTime
{
int dia;
int mes;
int ano;
int hora;
int min;
};
struct tagVendas
{
int cod_venda;
struct tagTime data;
};

struct tagVendaDT
{
int cod_venda;
int linhas;
int artigo[]; // a minha duvida e aqui
int qnt[];    // aqui tmb
int preco[];// e aqui tmb
};
char menu();
void novaVenda(struct tagVendas vendas[], int idx);
void cicloVenda(struct tagVendaDT vendaDT[],struct tagVendas vendas[] ,int idx);
void listagem(struct tagVendaDT venda[], int idx);
void terminar(struct tagVendaDT venda[], int idx);
int main()
{
FILE * Input;
FILE * InputDT;
struct tagVendas vendas[1000];
struct tagVendaDT vendaDT[1000];
struct tagVendas point;
char sel; 
int idx;

if(Input = fopen("C:\\Users\\GLOBUL\\Desktop\\Vendas.txt", "wb+") != NULL)
{
	idx=0;
	printf("Ficheiro aberto com successo!\n");
	while(fread(&point, sizeof(struct tagVendas), 1, Input) != 0){
		vendas[idx].cod_venda=point.cod_venda;
		vendas[idx].data= point.data;
		idx++;
	}
}
//Pensar por isso numa funcao

do{
	sel=menu();
	switch(sel)
	{
	case 'c':
		idx++;
		novaVenda(vendas, idx);
		cicloVenda(vendaDT, vendas, idx);
		break;
	case 't':
		terminar(vendaDT, idx);
		break;
	}
}while(sel != 't');
}

char menu()
{
char sel;
puts("			BEM VINDO			\n");
puts("------------------------------\n");
puts("C	- Criar nova venda \n");
puts("T - Terminar e contabilizar total\n");
puts("------------------------------\n");
puts("Indica o que pretende: ");
do{
	scanf("%c", &sel);
}while(sel != 'c' || sel != 't');
	return sel;
}
void novaVenda(struct tagVendas vendas[], int idx)
{
struct tm *tempo;//estrutura do time.h
time_t auxT;// declaracao do tempo
auxT =time(NULL);//obter o valor para o tempo
tempo = localtime(&auxT);// conversao do int64 para hora,dia,mes,ano,min

vendas[idx].cod_venda++;
vendas[idx].data.ano = tempo->tm_year + 1900;
vendas[idx].data.mes = tempo->tm_mon+1;
vendas[idx].data.dia = tempo->tm_mday;
vendas[idx].data.hora = tempo->tm_hour;
vendas[idx].data.min = tempo->tm_min;

}
void cicloVenda(struct tagVendaDT venda[],struct tagVendas vendas[] , int idx)
{
int linha;
linha=0;
vendas[idx].cod_venda = venda[idx].cod_venda;
do{
	puts("Introduza o codigo do produto: ");
	scanf("%d", &venda[idx].artigo[linha]);
	puts("Introduza a quantidade:");
	scanf("%d", &venda[idx].qnt[linha]);
	puts("Introduza o preco: ");
	scanf("%d", &venda[idx].preco[linha]);
	linha++;
}while(venda[idx].artigo[linha] != 0);
venda[idx].linhas = linha;
listagem(venda, idx);
}

void listagem(struct tagVendaDT venda[], int idx)
{
int index, total, Iva;
system("cls");
puts("VENDA NUMERO: %d", venda[idx].cod_venda);
puts("		Codigo		Preco		Qnt		Total");
puts("-------------------------------------------");
for(index=0; index<= venda[idx].linhas; index++)
{
	puts("%d	%d		%d			%d		%d", index,venda[idx].artigo[index], venda[idx].preco[index], venda[idx].qnt[index], venda[idx].preco[index]*venda[idx].qnt[index]);
	total+=(venda[idx].preco[index]*venda[idx].qnt[index]);
}
puts("-------------------------------------------");
venda[idx].total=total;
puts("Sub-Total: %d", venda[idx].total);
Iva=(venda[idx].total/100)*22;
puts("Iva(22%) : %d", Iva);
puts("Total a Pagar: %d",venda[idx].total+Iva);

}

void terminar(struct tagVendaDT venda[], int idx)
{
int index, total, Iva;
for(index=0; index<=idx; index++)
{
	puts("venda-%d- %d", index ,venda[index].total);
	total+=venda[index].total;		
}
Iva= (total/100)*22;
total=total+Iva;
puts("Foram feitos %d recibos com um ganho total de : %d", index, total);
}

Share this post


Link to post
Share on other sites
Localhost

Se percebi bem o problema tens que usar listas ligadas e provavelmente alterar a maioria do código...


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.