Projeto 2

Com o aumento da competitividade, as empresas precisam oferecer serviços ou produtos com maior rapidez, custos mais baixos e maior qualidade. Nesse contexto, a automatização dos processos de negócio viabiliza um melhor controle e gerência dos mesmos.

Um processo de negócio descreve um conjunto de atividades, fluxos de execução de atividades e recursos necessários para atingir os objetivos de negócio. Por exemplo, uma empresa realiza um processo de negócio para atendimento ao cliente que inclui as atividades recebe um pedido de compra, verifica se o produto está disponível no estoque, faz cobrança e envia o produto.

Sistemas de gerência de processos de negócio (SGPN) apóiam a modelagem e a execução de processos de negócio entre outras funcionalidades. Um dos subsistemas principais de um SGPN é o Gerenciador de Processos (GP) que controla a execução das atividades de um processo. O GP verifica quais atividades estão prontas para executar, inicia sua execução e, ao término da execução de uma atividade, verifica se outras atividades podem ser executadas.

Considerando o processo de negócio de atendimento ao cliente com as seguintes atividades:

  1.  receber um pedido de compra,
  2. verificar se o produto está disponível no estoque,
  3. obter endereço de entrega,
  4. fazer cobrança,
  5. preparar o envio do produto,
  6. confirmar o pedido.

A atividade 2 só pode ser executada após o término da atividade 1 e as atividades 3 e 4 só iniciam após o término da atividade 2.

 

Seu programa deve ler o nome das atividades e das dependências de ordem entre as atividades, e inserir essas informações em uma tabela de atividades.

Entrada

Os dados de entrada serão:

Exemplo de Entrada

Entre com o numero de atividades no processo:6

Entre com atividade 1: receber pedido de compra
Entre com atividade 2: verificar se o produto está disponível no estoque
Entre com atividade 3: obter endereço de entrega
Entre com atividade 4: fazer cobrança
Entre com atividade 5: preparar envio do produto
Entre com atividade 6: confirmar pedido

Entre com a lista de dependencia entre as atividades:
1 2
2 3
2 4
3 5
5 6
4 6
0 0
 

Estruturas de dados

1. Lista de atividades sucessoras:

 

Para cada atividade X, deve ser construída uma lista ligada contendo as atividades (os números representando atividades) que dependem de X.

Os nós dessa lista são do tipo abaixo:

typedef struct lista{
    int atividade;
    struct lista *prox;
} tlista;

2. Vetor de atividades:

Cada atividade no vetor é representada pelo struct abaixo:


typedef struct no {
    char nome[50];    /* nome da atividade */
    int pred;               /* número de atividades predecessoras */
    tlista  *sucede;    /* apontador para inicio da lista de sucessores da atividade */
 } tatividade;

 

3. Lista de atividades prontas para executar

A tabela de atividades é percorrida e as atividades prontas (campo pred é zero) para executar são inseridas nessa lista. Os nós dessa lista são do tipo abaixo:

typedef struct lista{
    int atividade;
    struct lista *prox;
} tlista;

 


 

Estrutura do programa

O seu programa deve ter as funções abaixo:

A leitura dos pares que definem a relação de precedência pode ser definida como:

Para todo par (i,j) lido da entrada
    - inserir j na lista de sucessoras de i
    - incrementar o contador de predecessoras de j