Buscar

PMI IV - Sistema em linguagem C (Venda de Ingressos de Teatro)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
 
Unip EaD 
Projeto Integrado Multidisciplinar 
Cursos Superiores de Tecnologia 
 
 
 
 
 
 
 
Desenvolvimento de um sistema em linguagem C. 
(Venda de Ingressos de Teatro) 
 
 
 
 
 
 
 
 
 
Polo Paulista 
2019 
 
2 
 
 
 
Unip EaD 
Projeto Integrado Multidisciplinar 
Cursos Superiores de Tecnologia 
 
 
 
 
 
 
 
Desenvolvimento de um sistema em linguagem C. 
(Venda de Ingressos de Teatro) 
 
Silvio Agnoleto 
RA 1962510 
Curso: Análise e Desenvolvimento de 
Sistemas 
Semestre: 2º 
 
 
 
 
Polo Paulista 
2019 
3 
 
Resumo 
Introdução - O software pode ser aplicado a qualquer situação em qualquer área 
de estudo em que um conjunto de algoritmos é definido e executado para alcançar os 
resultados. Nossa tentativa é aplicar essa característica ao trabalho proposto pela 
Universidade Paulista para este bimestre (4°/2019). Objetivo - Desenvolver um 
sistema em linguagem C para venda de ingressos de teatro. Métodos – Utilizar-se-á 
dos conhecimentos adquiridos através das aulas ministradas de LINGUAGEM E 
TÉCNICAS DE PROGRAMAÇÃO e ENGENHARIA DE SOFTWARE I e com a 
possibilidade de orientação através do fórum de discussão o pelo telefone 0800-010-
9000. Conclusão – O correto uso das técnicas ensinadas junto com um código limpo 
e eficaz, trará um programa que possa atender todas as necessidades apresentadas, 
possibilitando controle, eficácia e agilidade nas operações referente a vendas de 
ingressos para o teatro. 
Descritores: Software; Técnicas de Programação; Ingressos; Teatro. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 
 
Abstract 
Introduction - Software can be applied to any situation in any area of study where 
a set of algorithms is defined and executed to achieve the results. Our attempt is to 
apply this feature to the work proposed by the Paulista University for this quarter (4 ° / 
2019). Objective - To develop a C language system for theater ticket sales. Methods 
- It will use the knowledge acquired through the classes taught in LANGUAGE AND 
PROGRAMMING TECHNIQUES and SOFTWARE ENGINEERING I and with the 
possibility of guidance through the discussion forum or by telephone 0800-010-9000. 
Conclusion - The correct use of the techniques taught together with a clean and 
effective code will bring a program that can meet all the needs presented, enabling 
control, effectiveness and agility in theater ticket sales operations. 
 
Keywords : Software; Programming techniques; Tickets; Theater. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5 
 
Sumário 
1 INTRODUÇÃO ................................................................................................06 
2 DESENVOLVIMENTO ....................................................................................07 
2.1 6653-60 Engenharia de Software ..................................................................07 
2.1.1 O processo de Software ..................................................................................07 
2.1.2 Atividades do Processo de Software ...............................................................07 
2.1.3 Descrição Visual do Modelo ............................................................................08 
2.1.4 As Desvantagens deste Modelo ......................................................................08 
2.2 6654-120 Linguagem e Técnicas de Programação .....................................09 
2.2.1 História da Linguagem C .................................................................................09 
2.2.2 A Evolução: Linguagem C++ ...........................................................................09 
2.3 Detalhes do Arquivo Fonte do Programa ....................................................11 
2.3.1 Printa Menu .....................................................................................................11 
2.3.2 Lista Pecas ......................................................................................................13 
2.3.3 Cad Pecas .......................................................................................................14 
2.3.4 Vende Ingresso ...............................................................................................19 
2.3.5 Cad Venda ......................................................................................................22 
2.3.6 Emite Ticket .....................................................................................................22 
2.3.7 Printa Vendas ..................................................................................................24 
2.3.8 Encerra Dia .....................................................................................................25 
3 CONCLUSÃO .................................................................................................27 
4 REFERÊNCIAS ..............................................................................................28 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6 
 
Introdução 
Para o desenvolvimento do sistema de vendas de ingressos para teatro foram 
passadas algumas especificações, são elas: Controle referente ao valores dos 
ingressos, a qual deverá contemplar meia-entrada (50% de desconto) para 
estudantes, crianças de 02 a 12 anos, adultos a partir de 60 anos e professores da 
rede pública de ensino e 100% de desconto para crianças carentes da rede pública 
de ensino. Emissão (mostrar na tela) de um ticket com a data, a hora, o nome da peça 
teatral e o número da poltrona. 
Nenhum espectador pode ter um ingresso com o mesmo número da poltrona de 
outro espectador da mesma peça teatral de um determinado horário. Imprescindível 
informar quando não existir mais lugares disponíveis e, consequentemente, não 
permitir mais a venda de ingressos para a peça em questão. Deverá também fazer a 
gestão do caixa, isto é, informar no fechamento do caixa todas as movimentações do 
dia e o saldo do fechamento. 
Será tambem adotado um modelo de ciclo de vida para o desenvolvimento do 
sistema para venda dos ingressos e apresentar-se-á as justificativas para escolha de 
tal modelo. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7 
 
Desenvolvimento 
6653-60: ENGENHARIA DE SOFTWARE I 
 
O processo de Software 
 
A utilização de um processo de software tem sido apontada como um fator 
primordial para o sucesso de empresas de desenvolvimento de software. Na 
definição de um processo de software devem ser consideradas as seguintes 
informações: atividades a serem realizadas, recursos necessários, artefatos 
requeridos e produzidos, procedimentos adotados e o modelo de ciclo de vida 
utilizado. 
As principais fases de um processo de software são : Especificação de 
Requisitos, Projeto de Sistema, Programação e Verificação. 
 
Atividades do Processo de Software 
 
Em cada fase de um processo de software definido, (Figura A), são 
executadas as atividades básicas para que sejam atingidos os objetivos 
propostos. São elas: Especificação, Projeto, Implementação, Validação e 
Manutenção e Evolução 
 
 
Figura A – Atividades do Processo de Software 
 
 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
 
8 
 
Desta forma as atividades relacionadas a um processo de software estão 
diretamente vinculadas com a produção do software como produto final . 
Foi adotado o modelo Cascata , devido ao fato do programa ser de fácil 
desenvolvimento e não haver praticamente qualquer interatividade com o 
usuário/cliente. 
Este modelo foi idealizado por Royce em 1970 , também conhecido como 
abordagem ‘top-down’ , tem como principal característica a sequência de 
atividades onde cada fase transcorre completamente e seus produtos são 
vistos como entrada para uma nova fase. 
 
Descrição Visual do Modelo 
 
A ideia principal do modelo é que as diferentes etapas de desenvolvimento 
seguem uma sequência. 
O modelo pressupõe que o cliente sabe muito bemo que quer. Este modelo 
minimiza o impacto da compreensão adquirida no decurso de um projeto, uma 
vez que se um processo não pode voltar atrás de modo a alterar os modelos 
e as conclusões das tarefas anteriores, é normal que as novas ideias sobre o 
sistema não sejam aproveitadas. 
 
As Desvantagens deste Modelo são : 
 
• Dificuldade em acomodar mudanças depois que o processo está sendo 
executado; 
• Partição inflexível do projeto em estágios distintos; 
• Dificuldade em responder a mudanças dos requisitos; 
• É mais apropriado quando os requisitos são bem compreendidos; 
• Os projetos reais raramente se adaptam ao modelo linear e sequencial; 
• É difícil capturar os requisitos de uma só vez; 
• Cliente tem de pacientemente esperar o resultado; 
• Alto custo de correção das especificações quando nas fases de Teste 
e Implantação. 
 
9 
 
6654-120: LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO 
História da Linguagem C 
A linguagem C foi criada em 1972 por Dennis Ritchie no Bell Laboratories. C é 
derivada de duas outras linguagens: Algol 68 e BCPL. 
O foco da linguagem C inicialmente foi o desenvolvimento de sistemas operacionais 
e compiladores. C foi usada com grande êxito na construção de uma nova versão do 
sistema operacional Unix, que inicialmente foi escrito em Assembly. Após o sucesso 
obtido no mundo do Unix fez com que a linguagem ganhasse mais e mais adeptos e 
atualmente, quase todos os grandes sistemas operacionais são construídos em 
C/C++. No início dos anos 80 C passou a ser reconhecida como uma linguagem de 
propósito geral. 
Um grande esforço de padronização foi feito a fim de padronizar a linguagem. 
Atualmente ainda há versões de compiladores próprias de cada fabricante, porém a 
maioria dos fabricantes oferece uma opção de compatibilidade com o padrão ANSI C. 
A linguagem C se adapta a praticamente qualquer tipo de projeto, altamente 
portável e extremamente rápida em tempo de execução. A linguagem C++ é uma 
evolução da linguagem C que incorpora orientação a objetos. Linguagens como Java 
e C# foram influenciadas pela linguagem C. 
 
A Evolução: Linguagem C++ 
A primeira versão oficial do C++ apareceu em 1985, juntamente com o livro “The 
C++ Programming Language”, que esclareceu vários pontos sobre o C++. Em 1989 
foi lançada uma segunda versão da linguagem, com acréscimo das características: 
Herança múltipla, classes abstratas, métodos estáticos, métodos constantes e 
membros protegidos, incrementando tambem um suporte de orientação a objeto. 
O C++ tem uma enorme variedade de códigos, os seus próprios e uma quantidade 
grande da linguagem C. Esta variedade possibilita a programação em alto e baixo 
níveis. O C++ apresenta grande flexibilidade, embora seja bom, este fato faz com que 
a programação seja muito mais cuidadosa para não terem erros. 
10 
 
Alguns dos mais conhecidos programas são feitos em C++, ou parte dos seus 
códigos são nessa linguagem. Alguns deles são: Adobe Photoshop, MySQL, Mozilla 
Firefox, Internet Explorer, Microsoft Windows, entre vários outros. 
Baseado no conteúdo e nas técnicas apresentadas durante a disciplina de 
LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO, acrescido de pesquisas e algum 
conhecimento de causa, segue a descrição das funcionalidades do sistema proposto, 
bem como a apresentação de suas telas, concebidos a partir do fluxo. (Figura 1). 
Figura 1 – Fluxo dos Processos 
Fonte: Própria (2019) 
11 
 
Detalhes do Arquivo Fonte do Programa 
 
Praticamente todo sistema desenvolvido em linguagens estruturadas se iniciam por 
um Menu. Baseado nas necessidades fornecidas, nosso menu, (Figura 2), conterá 6 
(seis) opções: 
Cadastrar, Listar Peças em Cartaz, Vender Ingressos, Listar Vendas, Encerrar 
Salas e Sair. 
 
Figura 2 - Menu 
 
 
 
 
Fonte: Própria (2019) 
 
/* função que imprime e valida menu 
****************************************** 
********* PRINTA MENU ******** 
****************************************** 
*/ 
 
void menu() 
{ 
int opcao; 
do //laco de verificacao 
{ 
 system("cls"); 
 //printa as opcoes do menu 
 { 
 foreground(GREEN); 
 printf("\n [ INGRESSOS TEATRO MAZZAROPI ] \n\n"); 
 style(RESETALL); 
 } 
 printf(" 1) CADASTRAR PECAS \n"); 
 printf(" 2) LISTAR PECAS EM CARTAZ \n"); 
 printf(" 3) VENDER INGRESSOS \n"); 
 printf(" 4) LISTAR VENDAS \n"); 
 printf(" 5) ENCERRAR SALAS \n"); 
 printf(" 6) SAIR "); 
 { 
 foreground(GREEN); 
 printf("\t\n\n Digite a Opcao Desejada: "); 
 style(RESETALL); 
 } 
 fflush(stdin); 
 scanf("%d",&opcao); 
 //verifica a entrada 
 if ( opcao != 1 && opcao !=2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6) 
12 
 
 { 
 foreground(RED); 
 printf ("\n OPCAO INVALIDA DIGITE NOVAMENTE!!"); // em caso de erro 
 style(RESETALL); 
 getch(); 
 } 
}while( opcao != 1 && opcao !=2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6); 
 switch(opcao) 
 { 
 case 1: 
 { 
 system("cls"); 
 cad_pecas(); 
 } 
 case 2: 
 { 
 system("cls"); 
 lista_pecas(); 
 menu(); 
 } 
 case 3: 
 { 
 system("cls"); 
 vende_ticket(); 
 break; 
 } 
 case 4: 
 { 
 system("cls"); 
 printa_vendas(); 
 break; 
 } 
 case 5: 
 { 
 system("cls"); 
 reset_salas(); 
 break; 
 } 
 case 6: 
 { 
 system("cls"); 
 exit(0); 
 } 
 } 
} 
 
Sempre antes de alguma ação que envolva as peças de teatro em si, seja listagem, 
cadastro, venda de ingressos, a tela a seguir, (Figura 3), irá aparecer 
antecipadamente, proporcionando ao usuário/operador do sistema a possibilidade de 
conhecer com quais “produtos” está se trabalhando naquele momento. 
Dessa forma após escolher a opção 1) Cadastrar Peças, será exibida a listagem 
das peças em cartaz com conteúdo VAZIO. 
 
 
13 
 
 Figura 3 – Tela Lista Peças 
 
 
 
 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
 
/* função mostra pecas em cartaz 
********************************************* 
********** LISTA PECAS *********** 
********************************************* 
*/ 
 
void lista_pecas() 
{ 
 { 
 foreground(GREEN); 
 printf("\n [ INGRESSOS TEATRO MAZZAROPI ] \n\n"); 
 style(RESETALL); 
 } 
 int cont,cont2; 
 for(cont=0;cont<5;cont++) 
 { 
 printf("\n Peca %d:",cont+1); 
 printf(" %s",peca[cont].nomepeca); 
 printf("\n Valor R$ %.2f",peca[cont].valor_cheio); 
 printf("\n Horarios:"); 
 for(cont2=0;cont2<5;cont2++) 
 { 
 printf(" %02d:%02d",peca[cont].hora[cont2],peca[cont].min[cont2]); 
 } 
 printf("\n Sala: %d\n",peca[cont].sala+1); 
 } 
 foreground(GREEN); 
 printf ("\n <Presione qualquer tecla para continuar>"); 
 style(RESETALL); 
 getch(); 
} 
14 
 
Qualquer tecla para continuar e entramos na rotina de cadastro (Figura 4). 
O teatro tem 5 salas disponíveis para apresentação, numeradas de 1 a 5, as 
mesmas devem ser identificadas na hora da inclusão/edição de uma peça. 
Item 1 – Qual peça teatral você deseja cadastrar? - Opções de 1 a 5 ou Opção 6 
para Sair. 
Item 2 – Digite o nome daPeça: - Texto com o nome da apresentação. 
Item 3 – Digite o valor da peça: - Valor Integral e em Reais. 
Item 4 – [ Digite os Horarios da Peça ] - Será solicitado que seja digitado 5 (cinco) 
horários distintos para cada peça cadastrada. Caso não haja sessões suficientes no 
dia para tantos horários, é permitido deixar o valor EM BRANCO após terem sido 
cadastrados todas as sessões existentes. Tecle <ENTER> no horário em questão sem 
preencher nada e continue. 
Item 5 – Digite a sala da peça: - Confirme a sala que você está cadastrando. 
 
Figura 4 – Tela Cadastro Peças 
 
 
 
 
 
Fonte: Própria (2019) 
 
/* função cadastra as peças 
******************************************* 
********** CAD PEÇAS ********** 
******************************************* 
*/ 
 
void cad_pecas() 
{ 
 int opcao=1,cont,hora,minuto,opsala; 
 char nome[100]; 
 lista_pecas(); 
 do //laco de verificacao 
 { 
 printf("\n\n Qual peca teatral voce deseja cadastrar/alterar? [6]-> SAIR "); //laco de escolha 
 fflush(stdin); 
 scanf(" %d",&opcao); 
 opcao--; 
 fflush(stdin); 
 if(opcao!=0 && opcao!=1 && opcao!=2 && opcao!=3 && opcao!=4 && opcao!=5) 
 { 
15 
 
 foreground(RED); 
 printf("\n [ OPCAO INVALIDA DIGITE NOVAMENTE!! ] \n"); // em caso de erro 
 style(RESETALL); 
 } 
 }while(opcao!=0 && opcao!=1 && opcao!=2 && opcao!=3 && opcao!=4 && opcao!=5); 
 switch (opcao) 
 { 
 case (5): 
 { 
 menu(); 
 break; 
 } 
 default: 
 { 
 printf("\n Digite o nome da peca: "); 
 gets(peca[opcao].nomepeca); 
 fflush(stdin); 
 printf("\n Digite o valor da peca: "); 
 scanf("%f",&peca[opcao].valor_cheio); 
 fflush(stdin); 
 foreground(GREEN); 
 printf("\n [ Digite os Horarios da Peca ] \n\n"); 
 style(RESETALL); 
 for(cont=0;cont<5;cont++) 
 { 
 printf(" Digite o %d horario: ",cont+1); //horario escolhido 
 scanf("%d:%d",&peca[opcao].hora[cont],&peca[opcao].min[cont]); 
 fflush(stdin); 
 } 
 do // valida a escolha da sala 
 { 
 printf("\n Digite a sala da peca: "); // escolhe a sala 
 scanf("%d",&peca[opcao].sala); 
 peca[opcao].sala=peca[opcao].sala-1; 
 fflush(stdin); 
 if(peca[opcao].sala !=0 && peca[opcao].sala !=1 && peca[opcao].sala !=2 && 
peca[opcao].sala !=3 && peca[opcao].sala !=4) 
 { 
 foreground(RED); 
 printf("\n [ OPCAO INVALIDA DIGITE NOVAMENTE!! ] \n"); // em caso de erro 
 style(RESETALL); 
 } 
 }while(peca[opcao].sala!=0 && peca[opcao].sala!=1 && peca[opcao].sala!=2 && 
peca[opcao].sala!=3 && peca[opcao].sala!=4); 
 foreground(RED); 
 printf("\n Peca cadastrada com sucesso!! \n\n"); 
 style(RESETALL); 
 foreground(GREEN); 
 printf (" <Presione qualquer tecla para continuar>"); 
 style(RESETALL); 
 getch(); 
 gravabd(); 
 menu(); //vai para o menu 
 } 
 } 
} 
16 
 
Ao final de cada rotina o sistema voltará a tela de Menu (Figura 2) novamente até 
que seja escolhida a opção 6) Sair. 
Entramos novamente na opção 1) Cadastrar Peças e agora já vemos (Figura 5) a 
nossa primeira peça de teatro cadastrada. Repetimos o procedimento de cadastro 
para todas as peças em cartaz, e o resultado será o apresentado na (Figura 6). 
 
Figura 5 – Tela Lista Peças Figura 6 – Tela Lista Peças 
Fonte: Própria (2019) Fonte: Própria (2019) 
 
A partir de agora e até que alguma alteração no cadastro de peças seja feita, o 
resultado apresentado quando se entrar na opção do menu 2) Listar Peças em Cartaz, 
será o resultado apresentado na (Figura 6). 
O momento mais esperado do dia chegou!!! Hora de vender os ingressos... 
Na nossa opção 3) Vender Ingresso, (Figura 2), teremos todas as rotinas 
pertinentes a venda de ingresso (escolha da peça, horário, cadeira e o tipo de 
ingresso). 
Ao adentrar na opção, primeiramente e como já foi mencionado, irá aparecer a 
listagem das peças em cartaz, (Figura 6), pressionando uma tecla o sistema solicita 
que se: Selecione a peça? (Figura 7) ou tecle 6 para Sair. 
 
 Figura 7 – Tela Venda Ingressos 
 
Fonte: Própria (2019) 
 
Na tela de vendas (Figura 8), temos três itens principais, (1) Tipos de Ingressos, (2) 
Opções de Horário e (3) Número da Cadeira. Iniciamos a venda pela escolha do tipo 
de ingresso (Inteiro, Meia Estudantes e Professores, Meia Crianças e Idosos e 
17 
 
Gratuito). A opção Gratuito, vem atender as crianças carentes da rede pública que 
possuem a gratuidade assegurada. 
 
Figura 8 – Tela Venda Ingressos 
 
 
 
 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
Perceba que os valores dos ingressos já são calculados de acordo com cada 
categoria e apresentado ao lado da mesma. 
Após a escolha do Tipo de Ingresso, o sistema solicita a escolha do Horário. 
Verifica-se que da mesma forma que o Tipo de Ingresso, o sistema se antecipa e 
mostra a quantidade de cadeiras disponíveis em cada um dos horários. A quantidade 
de cadeiras em questão é de 60 por sala/apresentação. 
Com o horário definido, abre-se a opção para escolha da cadeira. Com valores que 
vão de 00 a 59, o sistema valida e não permite a venda de uma cadeira na mesma 
sala e no mesmo horário para dois ou mais expectadores distintos. 
Feita a escolha da cadeira, é emitido na tela o ingresso da venda do cliente e gerado 
simultaneamente um ingresso para impressão gravado em arquivo texto em diretório 
específico, respectivamente (Figuras 9 e 10). 
Um detalhe interessante quanto ao nome do arquivo gerado, é a composição 
numérica que faz parte dele. No arquivo em questão Ingresso_21445225, temos: 2 
(Peça) / 1445 (Horário) / 2 (Sala) / 25 (Cadeira). Foi criada essa rotina com o intuito 
de não permitir num mesmo dia, já que o diretório de gravação é o mesmo para todos 
os ingressos vendidos, que um ingresso sobrepôs-se outro. 
 
18 
 
Figura 9 – Arquivo Salvo no Diretório Ingressos 
 
 
Fonte: Própria (2019) 
 
Figura 10 – Conteúdo do Arquivo Gravado 
 
 
 
 
 
Fonte: Própria (2019) 
 
Concluída a primeira venda, o sistema retorna ao menu.(Figura 2). 
Uma observação: o sistema vende ingressos de forma individual, um para cada 
expectador. Numa versão posterior será observado a alteração para que seja 
vendidos ingressos para um grupo de pessoas. 
Nessa condição, voltamos a tela de vendas e observamos agora que ao escolher 
a mesma peça para venda de ingresso, o sistema já posiciona uma quantidade de 
cadeiras disponíveis diferentes da existente na primeira venda. Agora só existem 59 
cadeiras para vender. (Figura 11). 
É possível observar também que a cadeira escolhida, na ocasião a Nº 25, já está 
marcada [ X ], como ocupada. Observe que numa tentativa de se comprar a mesma 
cadeira na mesma sala e no mesmo horário, retornou CADEIRA OCUPADA!! 
 
19 
 
Figura 11 – Tela Venda Ingressos 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
 
Vendas após vendas até que cheguemos à condição de LOTAÇÃO da sala a qual 
se deseja assistir à peça. (Figura 12). 
Para evitarmos que o usuário entrasse na sala o que poderia vir ocasionar um 
looping, restringimos o acesso a ela, já na tela de Vendas, onde se a quantidade de 
cadeirasfor igual a ZERO, não é permitida a venda para aquele horário, 
consequentemente a rotina que escolhe cadeiras não é executada. (Figura 12). 
 
Figura 12 – Tela Venda Ingressos 
 
 
 
 
 
Fonte: Própria (2019) 
 
/* função que vende os ingressos 
******************************************** 
********** VENDE INGRESSO ********** 
******************************************** 
*/ 
20 
 
 
void vende_ticket() 
{ 
 int opcao,opcao_hora,opcao_cadeira,cont,opcao_valor; 
 
 lista_pecas(); 
 do //laco de verificacao 
 { 
 //escolha da peça para venda do ticket 
 printf("\n\n Selecione a peca? [6]-> SAIR "); //laco de escolha 
 fflush(stdin); 
 scanf("%d",&opcao); 
 opcao--; 
 fflush(stdin); 
 if(opcao!=0 && opcao!=1 && opcao!=2 && opcao!=3 && opcao!=4 && opcao!=5) 
 { 
 foreground(RED); 
 printf("\n [ OPCAO INVALIDA DIGITE NOVAMENTE!! ] \n"); // em caso de erro 
 style(RESETALL); 
 } 
 }while(opcao!=0 && opcao!=1 && opcao!=2 && opcao!=3 && opcao!=4 && opcao!=5); 
 if(opcao==5) 
 { 
 menu(); 
 } 
 else // mostra o horarios das peças para escolha do cliente 
 { 
 system("cls"); 
 foreground(GREEN); 
 printf("\n [ INGRESSOS TEATRO MAZZAROPI ] \n\n"); 
 printf("\n Tipos de Ingressos\n"); 
 style(RESETALL); 
 printf("\n 1-Inteira (%.2f)\n 2-Meia Estudantes e Professores (%.2f)\n 3-Meia 
Criancas e Idosos (%.2f)\n 4-Gratuito 
(0)\n",peca[opcao].valor_cheio,peca[opcao].valor_cheio/2,peca[opcao].valor_cheio/2); 
 printf("\n Digite a opcao escolhida: "); 
 scanf("%d",&opcao_valor); 
 float valor; 
 if (opcao_valor==1) { valor=peca[opcao].valor_cheio; } 
 if (opcao_valor==2 || opcao_valor==3) { valor=peca[opcao].valor_cheio/2; } 
 if (opcao_valor==4) { valor=0; } 
 printf("\n Peca: %s \n",peca[opcao].nomepeca); 
 foreground(GREEN); 
 printf("\n Opcoes de Horario:\n\n"); 
 style(RESETALL); 
 int sala_cheia[5]; 
 for(cont=0;cont<5;cont++) 
 { 
 int vagos=0,j; 
 for(j=0;j<60;j++) 
 { 
 if (sala[peca[opcao].sala].cadeiras[j][cont]!='X') 
 { 
 vagos++; 
 } 
 } 
21 
 
 printf(" 
%d)%02d:%02d(%02d)\t",cont+1,peca[opcao].hora[cont],peca[opcao].min[cont],vagos); 
 if (vagos==0) 
 { 
 sala_cheia[cont]=1; 
 } else { 
 sala_cheia[cont]=0; 
 } 
 } 
 do //laco validador do horario 
 { 
 //escolha da peça para venda do ticket 
 printf("\n\n Digite o horario escolhido: ");//laco de escolha 
 fflush(stdin); 
 scanf("%d",&opcao_hora); 
 opcao_hora--; 
 fflush(stdin); 
 if(opcao_hora!=0 && opcao_hora!=1 && opcao_hora!=2 && opcao_hora!=3 && 
opcao_hora!=4) 
 { 
 foreground(RED); 
 printf("\n [ OPCAO INVALIDA DIGITE NOVAMENTE!! ] \n"); // em caso de erro 
 style(RESETALL); 
 } 
 if(sala_cheia[opcao_hora]==1) 
 { 
 foreground(RED); 
 printf("\n [ OPCAO INVALIDA (LOTACAO ATINGIDA) ESCOLHA OUTRO HORARIO!! ] 
\n"); // em caso de erro 
 style(RESETALL); 
 } 
 }while((opcao_hora!=0 && opcao_hora!=1 && opcao_hora!=2 && opcao_hora!=3 && 
opcao_hora!=4) || sala_cheia[opcao_hora]!=0); 
 //chama a funcao printa sala para a escolha do lugar 
 do 
 { 
 printa_sala(peca[opcao].sala,opcao_hora); 
 printf("\n Digite a cadeira escolhida: "); 
 scanf("%d",&opcao_cadeira); 
 if(sala[peca[opcao].sala].cadeiras[opcao_cadeira][opcao_hora]=='X') 
 { 
 foreground(RED); 
 printf("\n CADEIRA OCUPADA!!"); 
 style(RESETALL); 
 foreground(GREEN); 
 printf ("\n\n <Presione qualquer tecla para continuar>"); 
 style(RESETALL); 
 getch(); 
 system("cls"); 
 } 
 else 
 { 
 foreground(GREEN); 
 printf("\n Compra Realizada com Sucesso!!"); 
 style(RESETALL); 
 } 
22 
 
 }while(sala[peca[opcao].sala].cadeiras[opcao_cadeira][opcao_hora]=='X'); 
 sala[peca[opcao].sala].cadeiras[opcao_cadeira][opcao_hora]='X'; // prenche a cadeira 
escolhida 
 cad_venda(opcao,opcao_hora,opcao_cadeira,valor); 
 gravabd(); 
 menu(); 
 } 
} 
 
Mais duas rotinas que são chamadas através da rotina de Vendas de Ingressos, 
uma que cria o incremento da venda para poder depois mostrar a quantidade de 
vendas realizas e a outra que emite o ingresso na tela e grava o mesmo em arquivo 
para controle ou impressão, respectivamente cad_venda e emite_ticket. 
 
/* 
*************************************** 
********** CAD VENDA ********** 
*************************************** 
*/ 
 
void cad_venda(int opcao_pec, int opcao_hor, int opcao_cad, float opcao_valor) 
{ 
 int cont=0,ult_venda,link=0; 
 // ler no arquivo ultimo codigo da venda 
 do //laco de verificacao 
 { 
 if(venda[cont].cod_venda==0) 
 { 
 ult_venda=cont; 
 ++link; 
 } 
 cont++; 
 }while(link==0); 
 link; 
 venda[ult_venda].cod_venda=ult_venda+1; //gera o incremento da venda 
 venda[ult_venda].horario=opcao_hor; 
 venda[ult_venda].peca=opcao_pec; 
 venda[ult_venda].cadeira=opcao_cad; 
 venda[ult_venda].valor=opcao_valor; 
 emite_ticket(ult_venda); 
} 
 
/* 
****************************************** 
********** EMITE TICKET ********** 
****************************************** 
*/ 
 
void emite_ticket(int opcao_venda) 
{ 
 FILE *ticket; 
 char nome_ticket[0x100]; 
 //imprime na tela 
 foreground(GREEN); 
23 
 
 printf("\n\n [ INGRESSOS TEATRO MAZZAROPI ]"); 
 style(RESETALL); 
 printf("\n\n"); 
 printf(" Peca: %s\n",peca[venda[opcao_venda].peca].nomepeca); 
 printf(" Valor R$ %.2f\n",venda[opcao_venda].valor); 
 printf(" Horario: 
%02d:%02d\n",peca[venda[opcao_venda].peca].hora[venda[opcao_venda].horario],peca[venda[opcao
_venda].peca].min[venda[opcao_venda].horario]); 
 printf(" Sala: %d\n",peca[venda[opcao_venda].peca].sala+1); 
 printf(" Cadeira: %d\n",venda[opcao_venda].cadeira); 
 // gera o ingresso para impressão 
snprintf(nome_ticket,sizeof(nome_ticket),"Ingresso_%1d%02d%02d%1d%02d.txt",venda[opcao_vend
a].peca+1,peca[venda[opcao_venda].peca].hora[venda[opcao_venda].horario],peca[venda[opcao_ven
da].peca].min[venda[opcao_venda].horario],peca[venda[opcao_venda].peca].sala+1,venda[opcao_ve
nda].cadeira); 
 ticket=fopen(nome_ticket,"w"); 
 if(ticket==NULL) 
 { 
 menu(); 
 } 
 else 
 { 
 fprintf(ticket,"\n [ INGRESSOS TEATRO MAZZAROPI ] \n"); 
 fprintf(ticket,"\n\n"); 
 fprintf(ticket," Peca: %s\n",peca[venda[opcao_venda].peca].nomepeca); 
 fprintf(ticket," Valor R$ %.2f\n",venda[opcao_venda].valor); 
 fprintf(ticket," Horario: 
%02d:%02d\n",peca[venda[opcao_venda].peca].hora[venda[opcao_venda].horario],peca[venda[opcao
_venda].peca].min[venda[opcao_venda].horario]); 
 fprintf(ticket," Sala: %d\n",peca[venda[opcao_venda].peca].sala+1); 
 fprintf(ticket," Cadeira: %d\n",venda[opcao_venda].cadeira); 
 fclose(ticket); 
 } 
 getch(); 
} 
 
 
Na sequência iremos para aopção do menu 4) Lista Vendas, nela o sistema 
apresenta em tela os ingressos vendidos até o momento e a somatória do valor 
vendido por peça apresentada no dia. 
 
 
24 
 
Figura 13 – Tela Lista Vendas 
 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
/* 
************************************************ 
********** PRINTA VENDAS ********** 
************************************************ 
*/ 
 
void printa_vendas() 
{ 
 int cont=0,link=0; 
 foreground(GREEN); 
 printf("\n\n [ INGRESSOS TEATRO MAZZAROPI ] \n"); 
 style(RESETALL); 
 float acum_vendas=0; 
 float acum_vendas_sala[5]; 
 for (int j=0;j<5;j++) 
 { 
 acum_vendas_sala[j]=0; 
 } 
 do 
 { 
 if(venda[cont].cod_venda!=0) 
 { 
 foreground(BLUE); 
 printf("\n Venda NR:%d\n",cont+1); 
 style(RESETALL); 
 printf(" Peca: %s\n",peca[venda[cont].peca].nomepeca); 
 printf(" Valor R$ %.2f\n",venda[cont].valor); 
 printf(" Sala: %d\n",peca[venda[cont].peca].sala+1); 
 printf(" Cadeira: %d\n",venda[cont].cadeira); 
 printf(" Horario: 
%02d:%02d\n",peca[venda[cont].peca].hora[venda[cont].horario],peca[venda[cont].peca].min[venda[c
ont].horario]); 
 cont++; 
 acum_vendas = acum_vendas + venda[cont].valor; 
 acum_vendas_sala[peca[venda[cont].peca].sala] = 
acum_vendas_sala[peca[venda[cont].peca].sala] + venda[cont].valor; 
 } 
 else 
25 
 
 { 
 for (int j=0;j<5;j++) 
 { 
 printf("\n Valor Acumulado da Peca %d no Dia: R$ %.2f", peca[j].sala+1, 
acum_vendas_sala[j]); 
 } 
 printf("\n\n Valor Acumulado do Dia: R$ %.2f", acum_vendas); 
 ++link; 
 } 
 }while(link==0); 
 gravabd(); 
 foreground(GREEN); 
 printf ("\n <Presione qualquer tecla para continuar>"); 
 style(RESETALL); 
 getch(); 
 menu(); 
} 
 
Penúltima opção do nosso menu, 5) Encerrar Salas, há uma rotina que limpa todas 
as cadeiras ocupadas, permitindo assim que no dia seguinte possam ser novamente 
comercializadas. Repare que a quantidade de cadeiras disponíveis voltou a 60 e as 
marcas de ocupado [ X ], já não aparecem mais. 
 
Figura 15 – Tela Venda Ingressos 
 
 
 
 
 
 
 
Fonte: Própria (2019) 
 
/* função limpa ocupacao da sala e mostra faturamento do dia 
********************************************* 
********** ENCERRA DIA ********** 
********************************************* 
*/ 
 
void reset_salas() 
{ 
 int opcao,cont,cont2,cont3; 
 do 
 { 
 foreground(GREEN); 
26 
 
 printf("\n\n [ INGRESSOS TEATRO MAZZAROPI ] \n"); 
 style(RESETALL); 
 printf("\n Deseja Encerrar o Dia e Zerar a Lotacao das Salas? \n\n"); 
 printf("\n 1)Sim \n"); 
 printf(" 2)Nao "); 
 fflush(stdin); 
 scanf(" %d",&opcao); 
 if(opcao!=1 && opcao!=2) 
 { 
 foreground(RED); 
 printf("\n OPCAO INVALIDA DIGITE NOVAMENTE!!\n\n"); // em caso de erro 
 style(RESETALL); 
 foreground(GREEN); 
 printf (" <Presione qualquer tecla para continuar>"); 
 style(RESETALL); 
 getch(); 
 system("cls"); 
 } 
 }while(opcao!=1 && opcao!=2); 
 if(opcao==1) 
 { 
 for(cont=0;cont<1500;cont++) 
 { 
 venda[cont].cod_venda=0; 
 venda[cont].horario=0; 
 venda[cont].peca=0; 
 venda[cont].cadeira=0; 
 venda[cont].valor=0; 
 } 
 gravabd(); 
 for(cont=0;cont<5;cont++) 
 { 
 for(cont2=0;cont2<5;cont2++) 
 { 
 for(cont3=0;cont3<60;cont3++) 
 { 
 sala[cont].cadeiras[cont3][cont2]=' '; 
 } 
 } 
 menu(); 
 } 
 } else { 
 menu(); 
 } 
} 
 
Todas as especificações foram contempladas no sistema e o programa fonte será 
anexo ao trabalho para que seja possível conferir a veracidade do texto apresentado. 
 
 
 
27 
 
Conclusão 
O desenvolvimento do presente estudo possibilitou uma análise mais apurada e de 
forma prática, de como um software feito através das técnicas aprendidas durante as 
aulas de LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO e ENGENHARIA DE 
SOFTWARE I tende a ter mais sucesso observadas tais orientações. Apesar da dificuldade 
encontrada, uma vez que o programa exigiu também conhecimentos diferentes dos 
aprendidos, a busca e a pesquisa desse complemento, só veio a avultar nosso programa de 
funcionalidades, proporcionando o atendimento de forma integral de todas as necessidades 
do cliente. Assim como todo programa, o programa de vendas de ingressos para teatro, não 
termina por aqui, seu ciclo de vida só se iniciou e através de atualizações que virão 
posteriormente o intuito é que ele se torne um sistema completo e abrangente dentro do seu 
ramo específico de atividade. Uma vez cumprida a meta inicial de desenvolvimento, dar-se 
por encerrado essa primeira fase. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28 
 
Referências 
O processo de software. Macoratti , 2019. Disponível em 
<http://www.macoratti.net/proc_sw1.htm>. Acesso em 05 de nov. de 2019. 
BACKES , A. Estrutura de dados descomplicada - em linguagem C. 1ª Ed. Elsevier, 
2016. 
C++. Info Escola Navegando e Aprendendo , 2019. Disponível em 
<https://www.infoescola.com/informatica/cpp/>. Acesso em 07 de nov. de 2019. 
Martins , J.C.C. Gerenciando Projetos De Desenvolvimento De Software Com PMI, 
RUP E UML. 5ª Ed. Brasport ,2011. 
Breve História da Linguagem C. Intellectuale , 2019. Disponível em 
<http://linguagemc.com.br/breve-historia-da-linguagem-c/>. Acesso em: 08 de nov. 
de 2019 
 
PAES, R.B. Introdução a Programação com a Linguagem C. 1ª Ed. Novatec, 2016. 
 
Castro , J. Aprendendo C++ na prática. 1ª Ed. Ciência Moderna, 2014. 
 
Sommerville , I. Estudando o livro Engenharia de Software. 8ª Ed. Pearson,2007.

Continue navegando