Ir para o conteúdo

Gestão de salas de cinema

program cinema;
uses crt;
type espaco=record
     filme:string;                                                                                   {defini‡oes de uma variavel para ser usada nos arrays}
     preco:real;
     lugares:integer;
     disp:boolean;
end;
var op,quantsalas,quantfilmes:integer;                                                               {vari veis}
    sala:array[1..50] of espaco;                                                                     {vai inserir em cada casa do array um valor}
procedure inserir(var qts:integer); {1}
var a:integer;
begin
        repeat
                clrscr;
                textcolor(white);
                writeln('Insira a quantidade de salas que o cinema tˆm: (m x.50)');
                readln(qts);                                                                        {este procedimento serve para inserir as salas que o cinema tem.}
                if (qts<=0) or (qts>50) then                                                        {sem este passo feito, nÆo ser  poss¡vel inserir filmes}
                begin
                        textcolor(red);
                        writeln('O m ximo de salas ‚ de 50!!');
                        writeln('CLIQUE ENTER');
                        readln;
                end;
        until (qts>0) and (qts<=50);
        for a:=1 to qts do
        begin
                writeln('Insira o numero de lugares da ',a,'¦ sala:');
                readln(sala[a].lugares);
        end;
end;                                                                                                                          {qts=quantidade salas}
procedure inserir_filmes(var qts:integer; var qtfl:integer);     {2}                                                          {qtfl=quantidade filmes}
var a,b,conta:integer;
    marca:boolean;
begin
        clrscr;
        textcolor(white);
        marca:=false;                                                                               {este procedimento serve para inserir os filmes a estrear, o nome e o respectivo pre‡o avulso}
        for a:=1 to qts do
        begin
        if sala[a].lugares<>0 then
        begin
                marca:=true;
        end;
        end;
        if marca=true then
        begin
                repeat
                        clrscr;
                        textcolor(white);
                        writeln('Quantos filmes deseja inserir?');
                        readln(qtfl);
                        if (qtfl<=0) or (qtfl>qts) then
                        begin
                                textcolor(red);
                                writeln('NÆo pode inserir mais do que ',qts,' filmes!');
                                writeln('CLIQUE ENTER');
                                readln;
                        end;
                until (qtfl>0) and (qtfl<=qts);
                begin
                        conta:=0;
                        repeat
                        conta:=conta+1;
                                repeat
                                        writeln('Insira o numero da sala:');
                                        readln(b);
                                        if (b<1) or (b>qts) then
                                        begin
                                                writeln('Sala inexistente!');
                                                readln;
                                        end;
                                        if sala[b].filme<>'' then
                                        begin
                                                writeln('Essa sala ja tem filmes a estrear!');
                                                readln;
                                        end;
                                until (b>=1) and (b<=qts) and (sala[b].filme='');
                                writeln('Insira o filme a estrear na sala ',b);
                                readln(sala[b].filme);
                                writeln('Insira o respectivo pre‡o/avulso:');
                                readln(sala[b].preco);
                        until conta=qtfl;
                end;
        end;
        if marca=false then
        begin
                writeln('Ainda nÆo existem salas!');
                writeln('CLIQUE ENTER');
                readln;
        end;
end;

procedure listar_lugares(qts:integer);   {6}                                                                   {este procedimento serve para listar uma determinada sala, mostrando logo no inicio as salas e filmes a estrear}
var a,i,x,y,conta:integer;
begin
        clrscr;
        textcolor(white);
        for a:=1 to qts do
        begin
                if sala[a].filme='' then
                begin
                        sala[a].filme:='(por definir)';
                end;
                writeln('SALA ',a,' ir  estrear: ',sala[a].filme,'. Pre‡o/bilhete: ',sala[a].preco:3:2,'. Quantidade Lugares: ',sala[a].lugares);
        end;
        textcolor(white);
        writeln('');
        writeln('Qual ‚ a sala que deseja ver?');
        readln(a);
        for a:=1 to sala[a].lugares do
        begin
                if sala[a].disp=true then
                begin
                        textcolor(red);
                        writeln('Lugar ',a,', ocupado!');
                end;
                if sala[a].disp=false then
                begin
                        textcolor(green);
                        writeln('Lugar ',a,', dispon¡vel!');
                end;
        end;
        readln;
        writeln('CLIQUE ENTER');
        readln;
end;
procedure reservar(qts,qtfl:integer);           {4}                                                        {este procedimento serve para reservar um bilhete para um determinado filme, verificando se o lugar esta disponivel ou nao}
var film:string;
    a,lug:integer;
    marca:boolean;
begin
        marca:=false;
        clrscr;
        textcolor(white);
        for a:=1 to qts do
        begin
                if sala[a].filme<>'' then
                begin
                        marca:=true;
                end;
        end;
        if marca=true then
        begin
                writeln('Deseja reservar bilhete para que filme?');
                readln(film);
                for a:=1 to qts do
                if sala[a].filme=film then
                begin
                        repeat
                                textcolor(white);
                                writeln('O filme ',sala[a].filme,' ir  estrear na sala ',a,' e tem o custo de ',sala[a].preco:3:2,' euros por bilhete');
                                writeln('Qual ‚ o lugar que deseja reservar?');
                                readln(lug);
                                if (lug<=0) or (lug>sala[a].lugares) then
                                begin
                                        writeln('Esta sala apenas tem ',sala[lug].lugares,' lugares!');
                                        writeln('CLIQUE ENTER');
                                        readln;
                                end;
                                if sala[lug].disp=true then
                                begin
                                        textcolor(red);
                                        writeln('Esse lugar j  est  ocupado! Por favor, escolha outro');
                                        readln;
                                end;
                        until (lug>0) and (lug<=sala[a].lugares) and (sala[lug].disp=false);
                        sala[lug].disp:=true;
                        textcolor(green);
                        writeln('Lugar ocupado com sucesso!');
                        writeln('CLIQUE ENTER');
                        readln;
                end;
        end;
        if marca=false then
        begin
                writeln('NÆo existem filmes a estrear!');
                writeln('CLIQUE ENTER');
                readln;
        end;
end;
procedure anular_reserva(qts,qtfl:integer);    {5}
var film:string;                                                                                                  {este procedimento serve para anular uma reserva. caso o lugar esteja livre, nao anula nada}
    a,lug:integer;
    marca:boolean;
begin
        marca:=false;
        clrscr;
        textcolor(white);
        for a:=1 to qts do
        begin
                if sala[a].filme<>'' then
                begin
                        marca:=true;
                end;
        end;
        if marca=true then
        begin
                writeln('');
                writeln('Deseja anular qual bilhete? Digite o respectivo filme');
                readln(film);
                for a:=1 to qts do
                if sala[a].filme=film then
                begin
                        repeat
                                textcolor(white);
                                writeln('O filme ',sala[a].filme,' ir  estrear na sala ',a,' e tem o custo de ',sala[a].preco:3:2,' euros por bilhete');
                                writeln('Qual ‚ o lugar que deseja remover?');
                                readln(lug);
                                if (lug<=0) or (lug>sala[a].lugares) then
                                begin
                                        writeln('Esta sala apenas tem ',sala[lug].lugares,' lugares!');
                                        writeln('CLIQUE ENTER');
                                        readln;
                                end;
                        until (lug>0) or (lug<=sala[a].lugares) or (sala[lug].disp=true);
                        if sala[lug].disp=false then
                                begin
                                        textcolor(red);
                                        writeln('Esse lugar ainda est  livre!');
                                        readln;
                                end;
                        if sala[lug].disp=true then
                        begin
                                sala[lug].disp:=false;
                                textcolor(green);
                                writeln('Removido com sucesso!');
                                writeln('CLIQUE ENTER');
                                readln;
                        end;
                end;
        end;
        if marca=false then
        begin
                writeln('NÆo existe nada para remover!');
                writeln('CLIQUE ENTER');
                readln;
        end;
end;
procedure anular_filme(qts,qtfl:integer);    {3}                                                                      {este procedimento serve para anular um filme que tenha saido da sala. anula automaticamente todos os lugares, deixando-os dispon¡veis}
var film:string;
    a,b:integer;
    marca:boolean;
begin
        marca:=false;                                                                                                 {esta marca serve para ver se existem filmes. se nao existirem, nao ir  pedir nada}
        clrscr;
        textcolor(white);
        for a:=1 to qts do
        begin
                if sala[a].filme<>'' then
                begin
                        marca:=true;
                end;
        end;
        if marca=true then
        begin
                writeln('Deseja anular qual filme?');
                readln(film);
                for a:=1 to qts do
                if sala[a].filme=film then
                begin
                        sala[a].filme:='';
                        sala[a].preco:=0;
                        for b:=1 to sala[a].lugares do
                        begin
                                sala[b].disp:=false;
                        end;
                        textcolor(green);
                        writeln('Removido com sucesso!');
                        writeln('CLIQUE ENTER');
                        readln;
                end;
        end;
        if marca=false then
        begin
                writeln('NÆo existem filmes para remover!');
                writeln('CLIQUE ENTER');
                readln;
        end;
end;
begin
        repeat
                clrscr;
                textcolor(white);
                writeln('______________________________________');
                writeln('|          Menu - CINEMAS X          |');
                writeln('|____________________________________|');
                writeln('|                                    |');
                writeln('| 1 - Inserir quantidade de salas    |');
                writeln('| 2 - Inserir filmes/pre‡os          |');                                       {menu do programa, que aparece logo ao iniciar}
                writeln('| 3 - Anular filmes                  |');
                writeln('| 4 - Reservar                       |');
                writeln('| 5 - Anular reserva                 |');
                writeln('| 6 - Listar sala/filmes/lugares     |');
                writeln('| 7 - SAIR                           |');
                writeln('|____________________________________|');
                writeln('|         Op‡Æo:___                  |');
                writeln('|____________________________________|');
                gotoxy(18,13);
                readln(op);
                gotoxy(1,1);
                case op of
                1:begin
                        inserir(quantsalas);                                                            {chama o procedimento inserir}
                  end;
                2:begin
                        inserir_filmes(quantsalas,quantfilmes);
                  end;
                3:begin
                        anular_filme(quantsalas,quantfilmes);
                  end;
                4:begin
                        reservar(quantsalas,quantfilmes);
                  end;
                5:begin
                        anular_reserva(quantsalas,quantfilmes);
                  end;
                6:begin
                        listar_lugares(quantsalas);
                  end;
                7:begin
                        clrscr;
                        textcolor(green);
                        writeln('Obrigado por usar este programa!');
                        writeln('CLIQUE ENTER');
                        readln;
                  end
                else
                begin
                        clrscr;
                        textcolor(red);
                        writeln('Op‡Æo inv lida!');                                                  {caso o utilizador nao escolha uma op‡ao que esteja no menu, da mensagem de erro}
                        textcolor(white);
                        writeln('CLIQUE ENTER');
                        readln;
                end;
                end;
        until op=7;
end.