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.