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:
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