Escolar Documentos
Profissional Documentos
Cultura Documentos
Unip Interativa PIM IV Sistema de Vendas de Passagem
Unip Interativa PIM IV Sistema de Vendas de Passagem
DESENVOLVIMENTO DE SOFTWARE
Sistema de Venda de Passagens
Polo XXXXXXX/UF
Ano
UNIP INTERATIVA
Projeto Integrado Multidisciplinar
Cursos Superiores de Tecnologia
DESENVOLVIMENTO DE SOFTWARE
Sistema de Venda de Passagens
NomeNomeNomeNomeNomeNome
RA: 00000000000
Curso: Análise e Desenvolvimento de Sistemas
Semestre: 01
Polo XXXXXXX/UF
Ano
Resumo
This project aims to develop a bus tickets sale system . The system has been developed
in the C programming language with the use of DEV C ++ tool. Using the knowledge and
skills acquired during the first quarter of the course in Systems Analysis and Development
was possible to grow the application to meet project requirements . The functions are
modularized wherever possible in order to make future maintenance easier. Comments have
been added throughout the code in order to make understanding easier.
Sumário
Introdução………………………………………………………………………… 5
1 – Dos Requisitos………………………………………………………………... 6
2 – Do Modelo de Desenvolvimento……………………………………………... 6
2.1 – Do Protótipo…………………………………………………………………7
2.2 – Da Modelagem………………………………………………………………10
3 – Da Implementação das Funcionalidades………………………………………11
3.1 – Da Implementação dos Veículos……………………………………………. 14
3.2 – Da Implementação das Vendas……………………………………………... 16
3.3 – Da Implementação do Fluxo de Caixa……………...……………………… 18
Conclusão……………………………………………………………………...…. 21
Referências……………………………………………………………………….. 22
5
Introdução
1 – Dos Requisitos
O sistema desenvolvido neste projeto deverá ser capaz de administrar vários aspectos
da venda de passagens de ônibus.
O primeiro requisito é que o sistema leve em consideração uma tabela de tarifação
com o valor das passagens. A partir daí, deverá permitir que estudantes compre passagens
com 50% de desconto. Também deverá permitir que até duas passagens tenham gratuidade de
100% para idosos.
Após a finalização da venda, deverá ser emitido um ticket contendo a data e hora da
partida do ônibus, o local de destino, o número do ônibus e o número da poltrona.
O sistema não poderá permitir que a mesma poltrona seja vendida à mais de um
passageiro.
Não podem ser vendidos mais lugares do que os disponíveis no veículo.
Deverá fazer a gestão do caixa, armazenando todas as movimentações do dia e o saldo
do fechamento.
2 – Do Modelo de Desenvolvimento
Considerando o pequeno tamanho do projeto, optei por seguir o conceito dos métodos
ágeis, no sentido iniciar o projeto com um protótipo, de intercalar o planejamento com a
escrita do código e de focar no funcionamento, mais do que na documentação. O
desenvolvimento também se deu de forma incremental, pois após a inclusão de
funcionalidades o processo retornava à fase análise das necessidades, passando por nova
modelagem, codificação e testes.
Para construção do protótipo, primeiramente foram definidos os menus e opções
necessários. Assim, foram desenvolvidas as principais telas a serem exibidas pelo aplicativo
porém sem as funcionalidades que seriam implementadas posteriormente.
Toda a modelagem foi realizada por meio de descrição narrativa. As tarefas
necessárias foram definidas e depois foram gradativamente detalhadas e transformadas em
tarefas menores. Assim que estivessem suficientemente detalhadas, as funções eram então
codificadas.
7
2.1 – Do protótipo
A próxima etapa foi elaborar a exibição do menu secundário, que seria exibido após a
seleção de um destino pelo usuário. Em minha concepção, o sistema deveria exibir na tela
uma representação das poltronas do ônibus. Essa representação deveria exibir o número das
poltronas e sua ocupação. A ocupação seria indicada pelo caracteres '-', 'I', 'C' e 'E' que
representam respectivamente, uma poltrona vazia, uma poltrona ocupada por idoso com
8
gratuidade, uma poltrona ocupada por um pagante comum e uma poltrona ocupada por um
estudante. Na tela são exibidas 4 poltronas por linha, representando as duas poltronas do lado
esquerdo e as duas poltronas do lado direito.
Além de exibir as poltronas e suas ocupações, também é exibido o destino, os valores
de todos os tipos de passagens.
Por fim, o usuário é solicitado a digitar o número da poltrona a ser vendida ou digitar
-1 para retornar ao menu principal. Eis o protótipo do menu:
Movimentacao do Caixa
R$27.50
R$55.00
R$22.50
R$45.00
R$30.00
R$60.00
O saldo no caixa eh de R$240.00
Press any key to continue . . .
*************************************
* Comprovante de Compra de Passagem *
*************************************
Destino Curitiba
Partida as 14:30 do dia 16/12/2015
Onibus numero: 4433 Poltrona: 26
Press any key to continue . . .
10
2.2 – Da Modelagem
Com as principais interfaces prontas pude começar a elaborar a lógica a ser seguida
pelo sistema. Como mencionei anteriormente, optei por descrever toda a lógica por meio de
uma descrição narrativa. Concluí que tal abordagem seria mais efetiva em relação à utilização
do portugol ou da elaboração de fluxogramas.
Deitel e Deitel (2011), em seu livro “C: Como Programar”, também se utilizam do
método de descrição narrativa, denominando-o como “Pseudocódigo”. Em sua definição, o
pseudocódigo é uma linguagem artificial e informal, semelhante à linguagem do dia a dia que
ajuda os programadores a desenvolver algoritmos.
Voltando ao nosso sistema de passagens, a elaboração da lógica do menu principal foi
bastante simples. Limitando-se à conduzir o usuário para o menu secundário correto. A
descrição narrativa ficou da seguinte forma:
int solicitarInt(){
int valorDigitado;
while (scanf("%d", &valorDigitado)!=1){
esvaziarBufferEntrada();
printf("Digite um numero: ");
}
return valorDigitado;
}
void esvaziarBufferEntrada(){
char c;
while((c = getchar()) != '\n' && c != EOF);
}
void pausar(){
printf("\nPressione ENTER para continuar.\n");
esvaziarBufferEntrada();
getchar();
}
void limparTela(){
#ifdef linux
system ("clear");
#elif defined WIN32
system ("cls");
#else
printf("\e[H\e[2J");
#endif
}
struct veiculo{
char tabelaPoltronas[QUANTIDADE_POLTRONAS];
int idososDisponiveis;
float valorPassagemComum;
char destino[15];
char dataPartida[15];
char horaPartida[15];
int numeroVeiculo;
};
a fim de representar os ônibus com destino à São Paulo, Curitiba e Belo Horizonte. As
variáveis foram denominadas veiculoSP, veiculoCTB e veiculoBH respectivamente.
/*
Cria objetos do tipo struct veiculo para cada um dos veículos para o qual
será disponibilizada a venda de passagens
*/
typedef struct veiculo Veiculo;
Veiculo veiculoSP, veiculoCTB, veiculoBH;
A próxima etapa foi providenciar a inicialização das variáveis do tipo “Veiculo”. Criei
a função inicializarVeiculos(). Nesta função são inicializadas as informações todos os
veículos. Segue abaixo a inicialização do veículo com destino à São Paulo. Os demais
veículos foram inicializados da mesma forma e dentro da mesma função mas com seus
respectivos dados.
void inicializarVeiculos(){
//incializa as informações do veículo com destino à São Paulo
strcpy(veiculoSP.destino, "Sao Paulo");
strcpy(veiculoSP.dataPartida, "15/12/2015");
strcpy(veiculoSP.horaPartida, "11:20");
veiculoSP.numeroVeiculo = 7700;
veiculoSP.valorPassagemComum = 45.0;
veiculoSP.idososDisponiveis=2;
inicializarPoltronas(&veiculoSP);
}
/*
Inicializa a tabela de poltronas do veiculo. Preenchendo
todos os assentos com o indicador de assento vago.
A tabela é representada por um vetor de char e o assento vago
é representado pelo char definido na constante ASSENTO_VAGO
*/
void inicializarPoltronas(Veiculo *pVeiculo){
int cont;
for(cont=0; cont<QUANTIDADE_POLTRONAS; cont++){
pVeiculo->tabelaPoltronas[cont] = ASSENTO_VAGO;
}
}
/*
Exibe na tela o comprovante de compra da passagem
*/
void imprimirTicket(int numPoltrona, Veiculo *pVeiculo){
limparTela();
printf("*************************************\n");
printf("* Comprovante de Compra de Passagem *\n");
printf("*************************************\n");
printf("Destino %s\n\n", pVeiculo->destino);
printf("Partida as %s do dia %s\n\n", pVeiculo->horaPartida, pVeiculo->dataPartida);
printf("Onibus numero: %d Poltrona: %02d\n\n", pVeiculo->numeroVeiculo, numPoltrona);
pausar();
}
A fim de facilitar eventual mudança nas regras de preços para idosos e estudantes, a
função mnuVenderPassagem se utiliza das funções getValorEstudante() e getValorIdoso() que
são responsáveis por calcular os valores das passagens para estudantes e idosos com base nas
regras definidas.
/*
Calcula e retorna o valor da passagem de estudante para
o veiculo informado. A existência desta função facilita
e centraliza a implementaçõa de uma eventual alteração
no valor da passagem para estudantes
*/
float getValorEstudante(Veiculo *pVeiculo){
return pVeiculo->valorPassagemComum/2;
}
/*
Calcula e retorna o valor da passagem de idoso para
o veiculo informado. A existência desta função facilita
e centraliza a implementaçõa de uma eventual alteração
no valor da passagem para idosos
*/
float getValorIdoso(Veiculo *pVeiculo){
return 0.0;
}
/*
Cria a estrutura de uma transacao contendo os campos necessarios
incluindo um ponteiro para o proximo item a fim de criar uma lista
*/
struct transacao{
float valor;
//char descricao[];
struct transacao *proximaTransacao;
};
/*
Cria o tipo Transacao representantdo a estrutura transacao
e cria um objeto listaTransacoes do tipo Transacao que
armazenará as operações efetuadas, garantindo o controle
do caixa
*/
typedef struct transacao Transacao;
Transacao* listaTransacoes;
Toda vez que a função mnuVenderPassagem() finaliza uma venda, é chamada a função
void registrarTransacao() que encapsula parte do código e em conjunto com a função
inserirTransacao() insere o valor da venda na lista.
/*Função para inserir transações no relatório de caixa. Não deve ser chamada
diretamente.*/
Transacao* inserirTransacao (Transacao *pLista, float num){
Transacao* nova_Transacao = (Transacao*)malloc(sizeof(Transacao));
nova_Transacao->valor = num;
nova_Transacao->proximaTransacao = pLista;
}
/*
Imprime o relatório do caixa e o saldo existente
*/
void imprimeTransacoes (Transacao *pLista){
float total = 0.0;
Transacao* aux;
limparTela();
printf("Movimentacao do Caixa\n\n");
Conclusão
Referências:
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de. Algoritmos: Lógica para
Desenvolvimento de Programação de Computadores. 21ª edição. São Paulo: Érica, 2008.
DEITEL, Paul; DEITEL, Harvey. Java: Como Programar. 8ª edição. São Paulo: Pearson,
2011.
DEITEL, Paul; DEITEL, Harvey. C: Como Programar. 6ª edição. São Paulo: Pearson, 2011.