Baixe o app para aproveitar ainda mais
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.
Compartilhar