SISTEMA DE INGRESSO TEATRO PIM 4 UNIP
Tipo de documento:Código
Área de estudo:Tecnologia da informação
Palavras-chave: Linguagem C. Ingresso de Teatro. Software. ABSTRACT The aim of this paper is development of a C language program for a theater ticket sales system, and it will manage all the presentations and the financial balance of the day. This is the final project of the subject Integrated Multidisciplinary Project (PIM) IV, which involves the disciplines of Programming Languages and Techniques and Software Engineering I. Módulo 1. Módulo 2. Módulo 3. Módulo 4. Módulo 5. • O sistema deverá permitir o cadastramento de até 8 peças teatrais ao mesmo tempo, porém, elas não podem ocorrer de maneira simultânea devido à falta de salas. • O sistema também deverá permitir a listagem de peças cadastradas, bem como o cancelamento das mesmas. • Os preços devem englobar três modalidades: Inteira, Meia-entrada e entrada gratuita.
◦ Inteira: Sem restrições de venda. ◦ Meia-entrada: Será ofertado 50% de desconto para estudantes, professores da rede pública de ensino, adultos com mais de 60 anos e crianças de 02 até 12 anos. Figura 1- Modelo de desenvolvimento Cascata Fonte: DEVMEDIA (2019) 2. AnaLíse de Requisitos Os requisitos do sistema são os que foram propostos pelo Teatro L’avanguardia na Seção 1. Projeto do sistema e programa O programa será desenvolvido em Linguagem C no Ambiente de desenvolvimento integrado (IDE) DevC++. O sistema se baseará em um menu de loop infinito no qual permanece aguardando a opção de entrada escolhida pelo usuário. A cada nova interface principal, a tela será limpada para reduzir a poluição visual. Com estes dois módulos prontos, será possível realizar um pequeno teste de integração para certifica-los.
O próximo módulo será o de cancelamento. Ele irá primeiramente mostrar quais são as peças teatrais cadastradas para que o usuário saiba qual é a peça exata que gostaria de cancelar. Após inserir o índice da peça desejada, irá aguardar uma mensagem que o processo de cancelamento ocorreu com sucesso. Este módulo também poderá ser testado junto com os outros dois módulos anteriores. Resumo sobre os módulos Módulo identificador Função principal do módulo 1 Imprimir o menu na tela; aguardar e testar uma opção de entrada do usuário 2 Cadastrar e verificar conflitos de horários com as apresentações 3 Listar as apresentações 4 Cancelar as apresentações 5 Venda e impressão de ingresso; 6 Fechar, calcular e imprimir o saldo do dia No código abaixo está contido as declarações de variáveis e defines: #include <stdio.
h> #include <stdlib. h> #include <string. h> #define TAMANHO_NOME 35 #define QNTD_MAX_PECAS 8 // máximo de 32 #define FILEIRAS 10 const float PRECO = 20; // Preco unico para todas pecas. Valor referente ao ingresso inteiro typedef struct data{ int hora_inicio; int minuto_inicio; int hora_fim; int minuto_fim; int dia; int mes; int ano; int duracao; // Duracao da peca em minutos } data_s; typedef struct peca{ char nome[TAMANHO_NOME]; data_s data; short int assentos[FILEIRAS]; // Assentos com bit 0 estao livres } peca_s; typedef struct sala{ peca_s peca[QNTD_MAX_PECAS]; int slot; // Cada bit representa se um slot (peça) esta ocupado (1) } sala_s; typedef struct ticket{ int coluna; char fileira; } ticket_s; static int total_ingressos_inteiro; static int total_ingressos_meio; static int total_ingressos_gratuito; 2. A próxima etapa é verificar se há conflitos de horários entre as peças.
Uma solicitação do Teatro L’avanguardia era que se uma peça terminar em um horário não inteiro, a próxima somente pode ser cadastrada na próxima hora inteira. Por exemplo, se uma peça finalizar as 19:30, a próxima somente pode começar a partir das 20:00. Isso é devido ao tempo que os funcionários levam para limpar a sala. Assim foram desenvolvidos os seguintes códigos: void inserir_peca(sala_s *sala) { limpar_tela(); printf("************************************************\n\ \r* Sistema para venda de ingresso de teatro *\n\ \r* *\n\ \r* 2 - Cadastrar apresentacao *\n\ \r* *\n\ \r************************************************\n"); short int index = get_primeiro_indice (sala); if (index != -1) { getchar(); printf("Digite o nome da peca: "); fgets(sala->peca[index]. dia); printf("Digite o mes (Ex: 05): "); scanf("%i", &sala->peca[index].
data. mes); printf("Digite o ano (Ex: 2019): "); scanf("%i", &sala->peca[index]. data. ano); calcular_data_final(sala->peca[index]. n\n"); } } int get_primeiro_indice (sala_s *sala) { int counter = 0; for (; counter < QNTD_MAX_PECAS; counter++) { if (!((*sala). slot & (0x01 << counter))) { return counter; } } return -1; } void calcular_data_final(int hora_inicio, int minuto_inicio, int duracao, int *hora_fim, int *minuto_fim) { *hora_fim = hora_inicio + duracao / 60; *minuto_fim = minuto_inicio + duracao % 60; if (*minuto_fim >= 60) { (*hora_fim)++; *minuto_fim -= 60; } } void verifica_sala(sala_s *sala, short int index) { int contador = 0; char verifica = 0; for (contador = 0; contador < QNTD_MAX_PECAS; contador++) { if (sala->slot & (0x01 << contador)) { if (sala->peca[contador]. data. dia == sala->peca[index]. data. hora_fim >= sala->peca[index]. data. hora_inicio) { verifica = 1; } } } } } } if (verifica == 0) { printf("\nPeca criada com sucesso!.
n\n"); sala->slot |= (0x01 << index); limpar_sala(sala->peca[index]. assentos); } else { printf("\nPeca nao criada! Conflito de horarios. data. dia, sala->peca[counter]. data. mes, sala->peca[counter]. data. data. minuto_inicio, sala->peca[counter]. data. dia, sala->peca[counter]. data. Será verificado se a peça teatral é em uma terça-feira, se for, irá solicitar a quantidade de ingressos gratuitos também. O código para verificar se é terça-feira foi inspirado no algoritmo “Find day of the week for a given date”. Fonte: Kumar, Rathbhupendra e Rishabhjain16 (2019). Feito isso, o módulo irá verificar se há lugares disponíveis para a quantidade de ingressos solicitados e se não ultrapassa o valor máximo de 10 ingressos por compra. Após isso, será impresso um mapa de assentos, onde X significa ocupado e L livre.
data. dia, sala->peca[counter]. data. mes, sala->peca[counter]. data. ano) == 3) { // Verifica se o dia da peça é terça-feira printf("Ingresso gratuito: 100%% de desconto no valor do ingresso. n\ \rBeneficio valido para Estudantes de escola publica nas tercas-feiras. n"); printf("Digite a quantidade de ingressos gratuito: "); scanf("%i", &ingressos_gratuito); } else { ingressos_gratuito = 0; printf("As tercas-feiras alunos de colegio publico tem 100%% de desconto no ingresso. n"); } int ingressos_disponiveis = get_ingressos_disponiveis(sala->peca[indice_peca]. assentos); int total_ingressos = ingressos_meia + ingressos_inteiro + ingressos_gratuito; if (total_ingressos > ingressos_disponiveis) { printf("Nao tem ingressos suficientes. assentos[tickets[counter - 1]. fileira - 'A'] |= (0x01 << tickets[counter - 1]. coluna); } } print_ingresso(tickets, sala->peca[indice_peca], ingressos_inteiro, ingressos_meia, ingressos_gratuito); total_ingressos_gratuito += ingressos_gratuito; total_ingressos_meio += ingressos_meia; total_ingressos_inteiro += ingressos_inteiro; } else { printf("Nao tem pecas disponiveis.
n\n"); } } int get_dia_da_semana(int d, int m, int y) { static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; y -= m < 3; return ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7 + 1; //Adicionado 1 para o primeiro dia ser o domingo } int get_ingressos_disponiveis(short int *assentos) { int counter = 0; int counter2 = 0; int ingressos_disponiveis = 0; for (counter2 = 0; counter2 < FILEIRAS; counter2++) { for (counter = 0; counter < 8 * sizeof(assentos); counter++) { if (!(assentos[counter2] & (0x01 << counter))) { ingressos_disponiveis++; } } } return ingressos_disponiveis; } void print_assentos(short int *assentos) { int counter = 0; int counter2 = 0; printf("\t"); for (counter = 15; counter >= 0; --counter) { printf ("%4i", counter); } printf("\n"); for (counter2 = 0; counter2 < FILEIRAS; counter2++) { printf("%c\t",'A' + counter2); for (counter = 15; counter >= 0 ; counter--) { if (assentos[counter2] & (0x01 << counter)) { printf(" X"); } else { printf(" L"); } } printf("\n"); } printf("Legenda: L = Livre, X = Ocupado. n\n"); } void print_ingresso(ticket_s *ticket, peca_s peca, int ingressos_int, int ingressos_meio, int ingressos_gratuito) { int counter = 0; limpar_tela(); for (; counter < ingressos_meio; counter++) { printf("#############################################\n\ \r# Ingresso de teatro #\n\ \r# #\n\ \r# Peca: %35s #\n\ \r# Data: %2i/%2i/%i %2i:%2i #\n\ \r# Duracao: %3i min #\n\ \r# Assento: %c%2i Meia-entrada #\n\ \r# #\n\ \r#############################################\n", peca.
minuto_inicio, peca. data. duracao, ticket[counter]. fileira, ticket[counter]. coluna); } for (counter = 0; counter < ingressos_int; counter++) { printf("#############################################\n\ \r# Ingresso de teatro #\n\ \r# #\n\ \r# Peca: %35s #\n\ \r# Data: %2i/%2i/%i %2i:%2i #\n\ \r# Duracao: %3i min #\n\ \r# Assento: %c%2i Inteira #\n\ \r# #\n\ \r#############################################\n", peca. minuto_inicio, peca. data. duracao, ticket[counter + ingressos_meio]. fileira, ticket[counter + ingressos_meio]. coluna); } for (counter = 0; counter < ingressos_gratuito; counter++) { printf("#############################################\n\ \r# Ingresso de teatro #\n\ \r# #\n\ \r# Peca: %35s #\n\ \r# Data: %2i/%2i/%i %2i:%2i #\n\ \r# Duracao: %3i min #\n\ \r# Assento: %c%2i Gratuito #\n\ \r# #\n\ \r#############################################\n", peca. minuto_inicio, peca. data. duracao, ticket[counter + ingressos_meio]. fileira, ticket[counter + ingressos_meio]. coluna); } } Uma imagem desta interface pode ser conferida na Figura 7.
Todos os módulos e sub-módulos foram aprovados em todos os testes feitos. O tamanho do arquivo final foi de 142 kBytes aproximadamente. O modelo de projeto utilizado (cascata) foi bastante coerente com o avanço do projeto, contribuindo para um melhor aproveitamento e análise do código. O Teatro L’avanguardia fará um excelente aproveito do sistema, o qual gerenciará todas as peças teatrais, bem como a venda de ingressos e o balanço financeiro da empresa. Este PIM provou a importância de integrar o conhecimento das disciplinas, em específico Linguagens e Técnicas de Programação com Engenharia de Software I. geeksforgeeks. org/find-day-of-the-week-for-a-given-date/>. Acesso em: 02 nov. STARTSE (Org. empresas (gigantes) que morreram nos últimos anos por não inovar.
568 R$ para obter acesso e baixar trabalho pronto
Apenas no StudyBank
Modelo original
Para download
Documentos semelhantes