Jump to content
Sign in to follow this  
pedro_mps

Ajuda trabalho

Recommended Posts

pedro_mps

Boa noite!

Tenho de fazer um trabalho mas estou com muitas dificuldades.  :thumbsup:

O enunciado do trabalho é este:

O trabalho visa a implementação de um sistema para auxiliar a gestão dos artigos disponíveis para venda numa loja

de componentes electrónicos. O funcionamento da loja é o seguinte:

· A loja disponibiliza a cada cliente um cartão de crédito para compras de artigos na loja;

· Cada cliente pode adquirir um único cartão de crédito;

· Cada compra efectuada por um cliente é registada no respectivo cartão. Uma compra é identificada

por um código, descrição, quantidade e valor da compra;

· Cada cartão tem um plafond de 500 euros. Se o cliente exceder o plafond terá de efectuar o

pagamento do crédito em dívida antes de efectuar nova compra;

· O empréstimo tem uma duração máxima de 90 dias, a partir do qual é adicionado um custo de 1% por

dia do valor em dívida.

Funcionalidades a implementar:

O programa deverá apresentar ao utilizador um menu com as seguintes opções:

· Gerir artigos para venda;

· Gerir compras dos clientes;

· Guardar em ficheiro;

· Carregar ficheiro;

· Terminar programa.

A opção Gerir artigos para venda deverá permitir aceder as operações seguintes:

· Adicionar um novo artigo (código, nome, descrição, preço, quantidade em stock);

· Eliminar um artigo. Deverá ser apresentado todos artigos disponíveis ao utilizador, solicitando de

seguida o artigo a eliminar;

· Consultar todos os artigos existentes. O sistema deverá apresentar os nomes e preços dos artigos

bem como o número total de artigos existentes em stock.

A opção Gerir compras dos clientes deverá permitir aceder as operações seguintes:

· Atribuir um cartão a um cliente;

· Registar compras. Permite registar no cartão de um cliente uma compra;

· Efectuar pagamento. Permite efectuar o pagamento das compras de um cliente;

· Bloquear cartão;

· Consultar compras dos cartões apresentando todas as compras associadas ao cartão de um

determinado cliente;

Para a representação dos dados, o sistema deverá implementar uma lista ligada de listas ligadas.

O programa deverá possuir uma componente de interacção com o utilizador que permita invocar todas as

funcionalidades definidas. Deverá também ser possível armazenar e carregar toda a informação via ficheiros. Pretendese

também que seja possível exportar as seguintes listagens:

· Valor do crédito em dívida, por cada cliente (ordenado por ordem crescente)

· Produtos comprados apresentados do mais recente até ao último a ser comprado

· Clientes por antiguidade de inscrição

· Valor das compras em crédito de um determinado cliente, por ordem crescente do valor unitário do

produto.

Já tenho este codigo feito (com bastantes erros):

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

#include "artigos.h"
int main(int argc, char *argv[])
{int opcao,c,v,d,s,res;
char n[50];
float p;
char n;
int opcao;
system ("color 70");

printf("\t-----------------------------\n");
printf("\t|       Menu inicial        |\n");
printf("\t-----------------------------\n");
printf("\t1- Gerir artigos para venda  \n");
printf("\t2- Gerir compras dos clientes\n");
printf("\t3- Guardar em ficheiro       \n");
printf("\t4- Carregar ficheiro         \n");
printf("\t5- Terminar programa         \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{

	case 1: system ("cls"); gerirArtigos();

	case 2: system ("cls"); gerirCompras();

	default: system("cls"); main();

}


}



int gerirArtigos()
{
int opcao;
printf("\t-----------------------------\n");
printf("\t|      Gerir Artigos        |\n");
printf("\t-----------------------------\n");
printf("\t1- Adicionar novo artigo     \n");
printf("\t2- Eliminar artigo           \n");
printf("\t3- Consultar artigos         \n");
printf("\t4- Menu inicial              \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{
	case 1: system ("cls");int inserirArtigo();

	case 2: system("cls");int removerArtigo();

	case 3: system("cls");int consultarArtigo();

	case 4: system ("cls"); main();

	default: system("cls"); gerirArtigos();
}
}

int gerirCompras()
{
int opcao;

printf("\t-----------------------------\n");
printf("\t|   Gerir Compras Clientes  |\n");
printf("\t-----------------------------\n");
printf("\t1- Atribuir cartao           \n");
printf("\t2- Registar compra           \n");
printf("\t3- Efectuar pagamento        \n");
printf("\t4- Bloquear cartao           \n");
printf("\t5- Consultar compras         \n");
printf("\t6- Menu inicial              \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{
case 6: system ("cls"); main();

default: system("cls"); gerirCompras();
}



}


E criei um header file para a parte de gestao de artigos:
typedef struct Artigo
{int codigo;
char nome[50];
char descricao[50];
float preco;
int qstock;
} 
Artigo;

Artigo Stock[100];
int Total = 0;

// Assinatura das funcoes/procedimentos
int inserirArtigo(int c, char n[50], char d[50], float p, int s);
int existe(int c);
int consultarArtigo(int c);
void listarArtigo();
void menu();
int main(int argc, char *argv[]);
int removerArtigo(int cd);
double pre();

int removerArtigo(int cd)
{int encontrado = 0, i=0;
while ((!encontrado)&&(i<Total))
{if (Stock[i].codigo==cd) 
   {Stock[i].codigo = Stock[Total-1].codigo;
    strcpy(Stock[i].nome, Stock[Total-1].nome);
    Stock[i].preco = Stock[Total-1].preco;
    encontrado = 1;
    Total--;
   }
  i++;
}
return(encontrado);
}

int inserirArtigo(int c, char n[50], float p, int s, char d[50])
{if (Total < 100)
{Stock[Total].codigo = c;
  strcpy(Stock[Total].nome,n);
  strcpy(Stock[Total].descricao,d);
  Stock[Total].preco = p;
  Stock[Total].qstock = s;
}
}

int existe(int c)
{int encontrado = 0, i=0;
while ((!encontrado)&&(i<Total))
{if (Stock[i].codigo==c) encontrado = 1;
  i++;
}
return(encontrado);
}

int consultarArtigo(int c)
{int encontrado = 0, i=0;
while ((!encontrado)&&(i<Total))
{if (Stock[i].codigo==c) 
  {printf("%d - %s - %.2f - %s - %d \n",Stock[i].codigo,
                                        Stock[i].nome,
                                        Stock[i].preco,
                                        Stock[i].descricao,
									Stock[i].qstock);
    encontrado = 1;
   }
  i++;
}
return(encontrado);
}
void listarArtigo()
{int i;
for(i=0;i<Total;i++)
{printf("%d \t %s \t %.2f \t %s \%d \n",Stock[i].codigo,
                                     Stock[i].nome,
                                     Stock[i].preco,
                                     Stock[i].descricao,
								 Stock[i].qstock
        );
}
}

void listarRecursivo(int posicao)
{if (posicao<Total)
{printf("%d \t %s \t %.2f \t %s \%d \n",Stock[posicao].codigo,
                                     Stock[posicao].nome,
                                     Stock[posicao].preco,
                                     Stock[posicao].descricao,
								 Stock[posicao].qstock
        );
  listarRecursivo(++posicao);
}
}


void guardar()
{FILE * fp;
int i;
fp = fopen("Artigos.txt", "w");
fprintf(fp,"%d\n",Total);
for(i=0;i<Total;i++)
{fprintf(fp,"%d-%f-%s-%s-%s\n",
Stock[i].codigo,Stock[i].preco,Stock[i].descricao,Stock[i].nome,Stock[i].qstock);
}
fclose(fp);
}

void ler()
{FILE * fp;
int i;
fp = fopen("Artigos.txt","r");
fscanf(fp,"%d\n",&Total);
for (i=0;i<Total;i++)
{fscanf(fp,"%d-%f-%s-%s-%d\n",
   &Stock[i].codigo,&Stock[i].preco,&Stock[i].descricao,Stock[i].nome,Stock[i].qstock
        );
}
fclose(fp);
}

void menu()
{printf("\n\n----------------------------\n");
printf("1-Inserir\n");
printf("2-Listar\n");
printf("3-Consultar\n");
printf("4-Remover\n");
printf("7-Guardar\n");
printf("8-Ler\n");
printf("0-Sair\n");
printf("----------------------------\n");
printf("Opcao?");
printf("----------------------------\n");
}


int menuArtigos();
{

scanf("%d",&opcao);
while(opcao!=0)
    {
     switch(opcao)
     {case 1: 
         printf("Codigo?");
         scanf("%d",&c);
         if (!existe(c))
         {printf("Nome?");
          scanf("%s",n);
          printf("Preco?");
          scanf("%f",&p);
          printf("Desrcricao?");
          scanf("%s",&d);
	  printf("Artigos em Stock?");
          scanf("%d",&s);
          Stock[Total].codigo = c;
          strcpy(Stock[Total].nome,n);
          Stock[Total].preco = p;
          Stock[Total].descricao = d;
	  Stock[Total].qstock = s;
          Total++;
         }
         else printf("Codigo ja existe!");
        break;
      case 2: listar();  // No caso do procedimento recursivo 
                         // executamos listarRecursivo(0);
              break;
      case 3: printf("Codigo?");
              scanf("%d",&c);
              res = consultarArtigo(c);
              if (!res) printf("Codigo nao existe");

      case 4: printf("Codigo?");
              scanf("%d",&c);
              if (removerArtigo(c)) printf("Removido!");
              else printf("Codigo inexistente");
      case 7: guardar();

      case 8: ler();
              
default: printf("Opcao invalida\n");
              
}	                 
}
}

Alguem me consegu dar uma ajudinha?

Desculpem o texto extenso mas nao encontrei a opcao para carregar ficheiro...

Agradeço desde já a atenção.

Cumprimentos

Share this post


Link to post
Share on other sites
Xpirito

Usa as tags de codigo [ code ] [ /code ] sem os espaços


Para perguntas idiotas, respostas estúpidas!

Share this post


Link to post
Share on other sites
Localhost

Não adianta deixares aqui um enunciado. Ninguém o vai ler. Posta dúvidas concretas!


here since 2009

Share this post


Link to post
Share on other sites
pedro_mps

Ok... Obrigado pela resposta  :thumbsup:

Então é o seguinte... queria saber como colocar o código que gerei no header file na main conforme os menus. o código está com uns erros que não entendo (adaptei o código de um outro programa) e também estou com duvidas na parte de invocar as funcoes do header file dentro da main.

Se alguém tiver uma sugestão fico-lhe agradecido.

Share this post


Link to post
Share on other sites
KTachyon

Estás a chamar o main() dentro do programa? É, no mínimo original. :thumbsup: Repara que se fizeres uma utilização intensiva do programa vais estar a acumular scopes sem fim. Para além disso, o teu main leva argumentos, logo não podes simplesmente chamar 'main();'.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
pedro_mps

Pois....  :wallbash: nao fica grande coisa estar a invocar uma funcao dentro dela prória....

Alterei essa parte e parece estar direito embora com alguns warnings  🤔

 int main()
{	system ("color 70");

menuPrincipal();
}

int menuPrincipal()
{
int opcao;


printf("\t-----------------------------\n");
printf("\t|       Menu inicial        |\n");
printf("\t-----------------------------\n");
printf("\t1- Gerir artigos para venda  \n");
printf("\t2- Gerir compras dos clientes\n");
printf("\t3- Guardar em ficheiro       \n");
printf("\t4- Carregar ficheiro         \n");
printf("\t5- Terminar programa         \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{

	case 1: system ("cls"); gerirArtigos();

	case 2: system ("cls"); gerirCompras();

	default: system("cls"); menuPrincipal();
}
} 

int gerirArtigos()
{
int opcao;
printf("\t-----------------------------\n");
printf("\t|      Gerir Artigos        |\n");
printf("\t-----------------------------\n");
printf("\t1- Adicionar novo artigo     \n");
printf("\t2- Eliminar artigo           \n");
printf("\t3- Consultar artigos         \n");
printf("\t4- Menu inicial              \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{
	//case 1: system ("cls");inserirArtigo();

	//case 2: system("cls");removerArtigo();

	//case 3: system("cls");consultarArtigo();

	case 4: system ("cls"); menuPrincipal();

	default: system("cls"); gerirArtigos();
}
}

int gerirCompras()
{
int opcao;

printf("\t-----------------------------\n");
printf("\t|   Gerir Compras Clientes  |\n");
printf("\t-----------------------------\n");
printf("\t1- Atribuir cartao           \n");
printf("\t2- Registar compra           \n");
printf("\t3- Efectuar pagamento        \n");
printf("\t4- Bloquear cartao           \n");
printf("\t5- Consultar compras         \n");
printf("\t6- Menu inicial              \n");
printf("\t-----------------------------\n");

scanf("%d", &opcao);

switch(opcao)
{
case 6: system ("cls"); menuPrincipal();

default: system("cls"); gerirCompras();
}



}

O problema agora está nos erros do meu header file...

Obrigado pela ajuda  :thumbsup:

Share this post


Link to post
Share on other sites
thoga31

Realço o seguinte, pedro_mps:

Usa as tags de codigo [ code ] [ /code ] sem os espaços

Mais propriamente, neste caso, [ code = c ] [ /code ] (sem espaços)

Não estejam à espera dos moderadores para colorir-vos tudo...


Knowledge is free!

Share this post


Link to post
Share on other sites
KTachyon

Epah, por favor, mete-me as tags de code à volta do código. É horrível tentar ler código assim... E custa tão pouco colar o código, seleccionar e escolher a linguagem da lista que aparece em cima que diz "Inserir Código", se tens assim tanta preguiça de colocar manualmente.

Para alem disso, acabaste por fazer a mesma coisa, só que em vez de chamares o main(), chamas outra função. O objectivo é mesmo libertares o scope de um método (ou seja, permitir que ele execute até sair). Caso contrário vais continuar a acumular stacks.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
RSFalcon7

antes de mais, tens que colocar break's nos 'switch'

e onde tens uma coisa do genero:

int gerirArtigos() {
        int opcao;
        scanf("%d", &opcao);
        switch(opcao)        {
                ...
                default: system("cls"); gerirArtigos();
        }
}

devias ter uma coisa do genero:

int gerirArtigos() {
        int opcao,sair = 0;
        do{
                scanf("%d", &opcao);
                switch(opcao)        {
                        case x:
                                ...
                                sair = 1;
                                break;
                        default: sair = 0;
                }
        }while(sair);
}

Share this post


Link to post
Share on other sites
pedro_mps

Boa noite!

É possivel eu utilizar um switch dentro de um if?

Tenho de fazer menus interligados e não tenho ideia de como fazer.

Share this post


Link to post
Share on other sites
pedro_mps

É assim, eu quero por a imprimir assim que inicio o programa um menu com a opcao para gerir artigos e outra para gerir clientes. Conforme a opcao escolhida ele vai abrir um segundo menu...

Não estou a ver mesmo maneira de fazer isto  :wallbash:

Share this post


Link to post
Share on other sites
pedro_mps

Bem... acho que a questao do menu ja consegui resolver.

Estou com duvidas agora numa outra parte, tenho de remover a parte referente à validade do tipo int e colocar uma para poder fazer uma descricao do artigo

o código que tenho é este:

int inserir(int c, char n[50], float p, int v)
{if (Total < 100)
{Stock[Total].codigo = c;
  strcpy(Stock[Total].nome,n);
  Stock[Total].preco = p;
  Stock[Total].validade = v;
}
}

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.