Jump to content
Sign in to follow this  
dmelo

C ++ Listas Ligadas Duvida???

Recommended Posts

dmelo

Muito boa tarde, eu estou a desenvolver um projecto, numa 1ra parte havia uma farmacia, um cliente, e medicamentos( 1 xarope, 1 saqueta, 1 comprimido), nesta segunda fase o programa tem de permitir lidar com um nº infini to de clientes, farmacias e medicamentos...a minha duvida é como fazer as listas ligadas, 1 lista de clientes, outra de farmácias e outra de Medicamentos...ou uma lista para cada tipo de medicamento(Xarope saqueta comprimido...)

umlq.jpg

Uploaded with ImageShack.us

Alguma ideia???

Share this post


Link to post
Share on other sites
KTachyon

Qual é a dúvida em si? Só a criação das listas ligadas?

Estás a desenvolver em C++, que é OOP. Já definiste os objectos, só precisas de os criar em código com os métodos respectivos para fazer os gets e os sets. As listas acabam por ser objectos que vais ter dentro desses objectos que definiste.


“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
dmelo

O que eu tenho até ao momento são classes...sim estou em c++!!!

tenho a classe cliente, farmácia e medicamento(mais Classe Xarope, Classe Saquetas....etc etc)

sim a minha duvida agora é na criação das listas....

Share this post


Link to post
Share on other sites
dmelo

Por exemplo para a classe CLIENTE: Tenho de criar um classe List_cliente e outra Node_cliente???

List_cliente:

#include "Node_Cliente.h"
#include "Cliente.h"
#pragma once

class List_Cliente
{
int size;
Node_Cliente * head;
public:
List_Cliente();
~List_Cliente();

void add(Cliente * c);
bool remove(Cliente * c);

bool contains(Cliente * c) const;
Cliente * get(int ref) const;

int getSize() const;

void print(std::ostream &out);
private:
bool remove(Cliente * c, Node_Cliente * prev, Node_Cliente * crt);
};

Node_cliente:

#pragma once
#include "Cliente.h"

class Node_Cliente
{
private:
Cliente * elem;
Node_Cliente *next;
public:
Node_Cliente(Cliente* c, Node_Cliente* n);
~Node_Cliente();

Node_Cliente* getNext() const;
Cliente* getElem() const;

void setElem(Cliente* c);
void setNext(Node_Cliente* n);
};

Share this post


Link to post
Share on other sites
pikax

pelo o que vi na imagem é uma base de dados autentica  😲

Explica melhor a tua dúvida...

visto que isto parece(é...) uma BD, tens que ter as tabelas(class) e depois tens que ver a relação entre elas(se é 1 para 1, 1 para N ou N para N)

Por exemplo para a classe CLIENTE: Tenho de criar um classe List_cliente e outra Node_cliente???

Tens que criar uma lista, e vais ter que guardar os produtos de cada cliente no node, e para isso podes escolher bastantes estruturas de dados para isso.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
dmelo

Pois!!!!! Eu já tenho uma lista de clientes e uma de farmacias a funcionar...consigo remover/editar/adicionar clientes/farmacias!!!

PLOBELMA-> O meu problema agora é como relaciono tudo, tipo um cliente pode fazer compras em várias farmacias, e várias farmacias têm vários medicamentos......Como faço para gerir quais foram as compras do cliente X na farmacia X, e como posso atribuir medicamentos a uma farmacia???.....PIKAX, sim, é mesmo gerir um conjunto de farmácias....

Share this post


Link to post
Share on other sites
pikax

Pois!!!!! Eu já tenho uma lista de clientes e uma de farmacias a funcionar...consigo remover/editar/adicionar clientes/farmacias!!!

PLOBELMA-> O meu problema agora é como relaciono tudo, tipo um cliente pode fazer compras em várias farmacias, e várias farmacias têm vários medicamentos......Como faço para gerir quais foram as compras do cliente X na farmacia X, e como posso atribuir medicamentos a uma farmacia???.....PIKAX, sim, é mesmo gerir um conjunto de farmácias....

Como eu disse anteriormente isso parece-me uma base de dados, eu abordava o problema como se tivesse a trabalhar com o MySQL ou com o Acess, já que vários clientes podem comprar vários produtos, então a relação será de N<->N.

Eu resolvia o problema criando uma nova tabela(class):

________________

|  Cliente_Produto  |

|                            |

|ID_Cliente_Produto|

|        ID_Cliente    | -> chave externa

|      ID_Farmacia    | -> chave externa

|      ID_Produto    | -> chave externa

|________________|

Isto é a pensar como se tivesses numa base de dados.

Podes facilmente criar uma class para fazer isso, depois crias um vector, lista, etc, para te facilitar a pesquisa, depois basta pesquisar por id_cliente(que poderá ser um apontador para o cliente), o único campo "desnecessário" é o ID_Cliente_Produto, visto que não precisas de chave primaria, mas pode vir a fazer jeito.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
dmelo

hummm, estou a ver, realmente a pensar assim faz mais sentido...

http://www.filesonic.com/sonic-preview/2172831->UML...agora falta ver a relação que vou criar entre os medicamentos e a  farmacia....

Também vai ser uma relação N->N...dando um exemplo, é tipo um cliente que tem varias assinaturas de canais....

Cliente----<Assinaturas>-----Canais

no meu caso:

Farmacia----<"Assina">-----Medicamento  ????

Share this post


Link to post
Share on other sites
pikax

hummm, estou a ver, realmente a pensar assim faz mais sentido...

http://www.filesonic.com/sonic-preview/2172831->UML...agora falta ver a relação que vou criar entre os medicamentos e a  farmacia....

Também vai ser uma relação N->N...dando um exemplo, é tipo um cliente que tem varias assinaturas de canais....

Cliente----<Assinaturas>-----Canais

no meu caso:

Farmacia----<"Assina">-----Medicamento  ????

assim tens que mudar um bocado a tabela que dei anteriormente, ficava algo assim:

tabela assina

id

id_farmacia

id_medicamentos

tabela cliente_produto

id(pode ser desnecessário)

id_cliente -> externa

id_assina -> externa id da tabela assina


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
kurayama

Porque não utilizar a std::list?

Se puderes usar bases de dados, sqlite facilitava-te a vida tambem ;)

Share this post


Link to post
Share on other sites
KTachyon

Pela descrição do trabalho, parece-me que é necessário persistir a informação. Não estás a pensar persistir em ficheiro, pois não? A melhor opção seria persistires numa base de dados e criares objectos que representem os dados persistidos por tabela. Tens frameworks que te facilitam este processo. É uma questão de fazeres um bocadinho de trabalho de investigação, recorrendo ao Google ;)


“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

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.