Escolar Documentos
Profissional Documentos
Cultura Documentos
uses crt;
const
QtdMaxAlunos = 50; {Quantidade maxima do contador de Alunos}
QtdMaxLivros = 100; {Quantidade maximado contador de Livros}
QtdMaxLocacoes = 100; {Quantidade maxima do contador de
Locacoes}
QtdMaxLocacao = 3; {Quantidade maxima da locacao}
QtdMaxData
= 10; {Quantidade maxima de caracteres da string
Data}
QtdMaxGenero = 15; {Quantidade maxima de caracteres da string
Genero}
QtdMaxTitulo = 30; {Quantidade maxima de Caracteres da string
Titulo}
QtdMaxNome
= 30;{ Quantidade maxima de Caracteres da string
nome}
QtdMaxCurso = 30;{ Quantidade maxima de Caracteres da string
Curso}
type
RAluno = record {Registro de identificacao dos Alunos}
nome: string[30];
sexo: string[1];
matricula:integer;
curso:string[20];
pendencia:integer;
end;
RLivros=record
titulo: string[30];
autor:string[30];
genero: string[25];
qlvl: integer;
qdisp: integer;
editora:string[20];
ISBN:integer;
end;
RLocacao = record {Registro de identificacao de Locacao}
id: word;
data: string[10];
qtdlocada: integer;
livros: array[1..3] of integer;
matricula_emprest:integer;
q: integer; {Identificador de matricula}
testado: boolean;
o: integer; {Identificador de emprestimos dos leitores}
end;
var
LivCadastro, AluCadastro, LocLivros: integer; {Contadores Globais de
Alunos, Livros e Locacao}
opcao, cond: integer;
teste := true;
end;
until (teste = false);
end;
procedure ValorVazio(st1: string); {Procendimento que exibe uma
mensagem de erro quando na houver valor cadastrado}
begin
Writeln();
Writeln('Voce nao possui ', st1,' cadastrados ainda.');
Writeln('Nao foi possivel realizar a locacao.');
Writeln('Pressione qualquer tecla para retornar ao menu...');
Readkey();
end;
procedure MostrarOpcao(); {Procedimeto que exibe uma lista de opcoes
na tela}
begin
Writeln('Sim');
Writeln('Nao');
Writeln();
Write('====> ');
end;
procedure NenhumCadastro(st: string); {Funcao que imprime a falta de
algum tipo de cadastro passado por parametro}
begin
Writeln('Voce nao possui nenhum ', st, ' cadastrado ainda.');
Writeln('Deseja cadastrar algum ', st,'?');
end;
procedure MostraTitulo(titulo: string);{Procedimento que exibe titulos}
var
i: integer;
begin
clrscr;
for i := 1 to 80 do
write('=');
for i := 1 to trunc((80 - length(titulo))/2) do
write (' ');
writeln(titulo);
for i := 1 to 80 do
write('=');
writeln();
end;
procedure QtdMax(st: string); {Imprime na tela uma mensagem de erro
caso nao se possa cadastrar mais livros e ou Alunos}
Begin
MostraTitulo(concat('ERRO TAMANHO MAXIMO'));
Writeln('Quantidade maxima de ', st,' cadastrados.');
Writeln('Nao foi possivel cadastrar mais ', st);
Writeln('Pressione qualquer tecla para retornar ao menu...');
Readkey ();
clrscr;
end;
function OutroCadastro(st: string):string; {Funcao que permite outro
cadastro, caso a pessoa permita}
var
opcao: string;
begin
MostraTitulo(concat('Deseja cadastrar outro ', st,'?'));
MostrarOpcao();
readln(opcao);
OutroCadastro := TesteSimNao(opcao);
clrscr;
end;
procedure MenuPrincipal(); {Este procedimento exibe o menu principal}
begin
MostraTitulo('MENU BIBLIOTECA');
Writeln('1. Cadastrar Aluno');
Writeln('2. Cadastrar Livros');
Writeln('3. Pedido de emprstimo de livros');
writeln('4. Devolver livros');
Writeln('5. Consulta de pendncia de alunos');
Writeln('6. Consultar ID dos livros para posterior locacao');
Writeln('7. Consultar livros mais alugados');
Writeln('8. Gerar Arquivo Livros Alugados');
Writeln('9. Sair');
Writeln();
end;
procedure CadastroAluno(); {Procedimento responsavel por cadastrar
Alunos}
var
i,j,x,matricula: integer;
S2:CHAR;
au:shortstring;
opcao: string;
Begin
j:=0;
au:='Cadastro apagado';
if AluCadastro = 0 then
i := 1
else
i := AluCadastro;
Repeat
MostraTitulo('CADASTRAR ALUNO');
Write('Digite o nome do aluno: ');
Readln(aluno[i].nome);
Write('Digite o sexo do aluno. (M para masculino. F para feminino):
');
readln(aluno[i].sexo);
aluno[i].sexo := TesteMF(aluno[i].sexo);
writeln('Digite o curso do aluno');
readln(aluno[i].curso);
write('Digite a matricula do aluno: ');
readln(aluno[i].matricula);
matricula:=aluno[i].matricula;
repeat
for j:=1 to 50 do
begin
if j<>i then
begin
if ( matricula=aluno[j].matricula) then
begin
x:=1;
Writeln('Ja existe um aluno com o mesmo numero de matricula');
writeln(aluno[j].nome);
Writeln('Deseja atualizar os dados desse aluno? "S" Para sim e "N" para
nao');
readln(s2);
s2:=upcase(s2);
if s2='S' then
begin
aluno[j].nome:=aluno[i].nome;
aluno[j].sexo:=aluno[i].sexo;
aluno[j].curso:=aluno[i].curso;
aluno[j].matricula:=aluno[i].matricula;
aluno[i].nome:=au;
aluno[i].sexo:=au;
aluno[i].curso:=au;
aluno[i].matricula:=00000;
Writeln('Atualizado com sucesso');
readln;
end;
if s2='N' then
begin
Writeln('Deseja cadastrar outro aluno? "S" Para sim e "N" para nao');
if s2='S' then
begin
i:=i+1;
Write('Digite o nome do aluno: ');
Readln(aluno[i].nome);
Write('Digite o sexo do aluno. (M para masculino. F para feminino): ');
readln(aluno[i].sexo);
aluno[i].sexo := TesteMF(aluno[i].sexo);
writeln('Digite o curso do aluno');
readln(aluno[i].curso);
write('Digite a matricula do aluno: ');
readln(aluno[i].matricula);
end;
end;
end
else x:=1;
x:=x+1;
end;
end;
until x=2;
i := i + 1;
clrscr;
if (i <= QtdMaxAlunos) then
opcao := OutroCadastro('aluno');
until ((opcao = 'NAO') or (i > QtdMaxAlunos));
AluCadastro := i; {Variavel de contagem global dos alunos ate entao
cadastrados}
if AluCadastro > QtdMaxAlunos then {Teste de condicao caso ja tenha
atingido o limite isso exibira uma tela de erro}
QtdMax('alunos');
End;
procedure CadastroLivro(); {Procedimento responsavel por cadastrar
Livros}
var
i,j,x,isbn: integer;
opcao: string;
s2:char;
Begin
j:=0;
if LivCadastro = 0 then
i := 1
else
i := LivCadastro;
repeat
MostraTitulo('CADASTRAR LIVROS');
Write ('Digite o titulo do livro a ser cadastrado: ');
Readln (livros[i].titulo);
Write ('Digite o nome do autor: ');
Readln (livros[i].autor);
Write ('Digite o editora do autor: ');
Readln (livros[i].editora);
Write ('Digite o genero deste livro: ');
Readln (livros[i].genero);
Write ('Digite a quantidade de copias deste livro: ');
Readln (livros[i].qlvl);
while ((livros[i].qlvl = 0) or (livros[i].qlvl < 0)) do
begin
Writeln('Quantidade invalida. Digite uma quantidade valida.');
Readln(livros[i].qlvl);
end;
livros[i].qdisp := livros[i].qlvl;
writeln('Digite o ISBN "ISBN - International Standard Book
Number"');
readln(livros[i].ISBN);
isbn:=livros[i].isbn;
repeat
until w=1;
end;
procedure RealizaLocacao(); {Esse procedimento permite a realizacao da
locacao dos livros}
var
i, j,x,a: integer;
opcao: string;
cancela : boolean;
begin
if (LocLivros = 0) then
i := 1
else
i := LocLivros;
repeat
cancela := false;
MostraTitulo(concat('REALIZAR LOCACAO OU DEVOLUO'));
Writeln('VOCE DESEJA ALUGAR UM LIVRO?');
Writeln('1- Alugar');
Writeln('2-Sair');
readln(x);
if x=1 then
begin
Writeln('Alunos Cadastrados:');
Writeln();
MostraAlunos();
Writeln();
Write('Digite a ID do Aluno: ');
Readln(locacao[i].id);
if aluno[i].pendencia=0 then
begin
while (locacao[i].id > AluCadastro - 1) or (locacao[i].id <= 0) do
{condicao de Erro ID nao existente ou invalido}
begin
Writeln ('Nao existe nenhum aluno cadastrado com esse ID');
Writeln ('Digite outro ID');
Readln(locacao[i].id);
end;
a := locacao[i].id;
Write('Digite a data. (DD/MM/AAAA): ');
Readln(locacao[i].data);
Writeln();
if (LivCadastro = 0) then {Verifica a existencia de livros no registro}
begin
NenhumCadastro('livro');
Writeln();
MostrarOpcao();
readln(opcao);
opcao := TesteSimNao(opcao);
if (opcao = 'SIM') then {Confirma se a pessoa deseja cadastrar caso nao
exista um livro no momento}
CadastroLivro()
Readln(opcao);
opcao := TesteSimNao(opcao);
end;
end;
until ((opcao = 'NAO') or (j > QtdMaxLocacao));
locacao[i].qtdlocada := j - 1;
MostraTitulo(concat('REALIZAR OUTRA LOCACAO'));
writeln('Deseja realizar outra locacao?');
writeln();
MostrarOpcao();
readln(opcao);
opcao := TesteSimNao(opcao);
i := i + 1;
LocLivros := i;
end;
end
else Writeln('Aluno possui pendencias');
end
else
until x=2;
end;
procedure ConsultaLocacao(); {Procedimento que realiza consultas no
vetor de registro}
var
i, x,matricula: integer;
begin
Writeln('Digite a matricula do Aluno em questao');
readln(matricula);
i:=0;
repeat
i:=1+1;
x:=0;
if matricula=aluno[i].matricula then
begin
WRiteln('O aluno', aluno[i].nome,'tem',aluno[i].pendencia,'pendencias');
readln;
if aluno[i].pendencia=0 then
begin
writeln('Aluno nao tem pendencias');
readln;
end;
x:=1;
end;
until x=1;
end;
Procedure livro_id(); {Procedimento para saber ID do livro}
var
x,j,y,count: integer;
busca:string;
begin
Writeln('
');
{ACORDAR CHECAR
j:=j+1;
end;
until y=3;
if x=3 then
begin
writeln('Digite o nome da titulo');
readln(busca);
j:=1;
repeat
if busca=livros[j].titulo then
begin
writeln('ISBN do livro',livros[j].ISBN);
writeln('Nome da editora',livros[j].editora);
writeln('Nome do autor',livros[j].autor);
writeln('Quantidade de livros',livros[j].qlvl);
writeln('Quantidade disponivel',livros[j].qdisp);
Writeln('ID do livro', j);
readln;
y:=3;
count:=1;
end;
if busca<>livros[j].editora then
begin
j:=j+1;
end;
until y=3;
end;
end;
end;
end;
until count=1;
end;
procedure ConsultalivroMaisLocado();
var
i, aux, id, outros: integer;
repetidos: array[1..100] of integer;
begin
aux := 0;
outros := 0;
for i := 1 to LivCadastro do
begin
if ((livros[i].qlvl - livros[i].qdisp) > aux) then
begin
aux := livros[i].qlvl - livros[i].qdisp;
id := i;
end;
if ((livros[i].qlvl - livros[i].qdisp) = aux) then
begin
outros := outros + 1;
repetidos[outros] := i;
end;
end;
MostraTitulo('LIVRO MAIS LOCADO');
if (outros = 0) then
begin
Writeln('O livro que teve a maior quantidade de locacoes foi:');
writeln();
Writeln('ID: ',id, ' | Titulo: ', livros[id].titulo, ' | Quantidade Locada: ',aux);
end
else
begin
Writeln('Os livro que tiveram maior quantidade de locacaes foi:');
Writeln();
for i := 1 to outros do
Writeln('ID: ',repetidos[i], ' | Titulo: ', livros[repetidos[i]].titulo, ' |
Quantidade Locada: ',aux);
end;
Writeln();
Writeln('Pressione qualquer tecla para retornar ao menu...');
Readkey;
end;
function Contarlivros(ID:integer):String; {Funcao de contagem de livros
de um determinado ID passado por parametro}
var
i, cont: integer;
st: string;
begin
cont := 0;
for i := 1 to Loclivros do
If (ID = Locacao[i].Id) then
Cont := Cont + Locacao[i].QtdLocada;
str(cont, st);
ContarLivros := st;
end;
procedure GeraArquivoTexto(); {Procedimento que gera arquivo texto}
var
i: integer;
begin
MostraTitulo('GERAR ARQUIVO TEXTO');
rewrite(texto);
Writeln(texto, '...Locadora de Livros...');
Writeln(texto);
writeln(texto, 'alunos: ');
writeln(texto);
for i := 1 to (AluCadastro - 1) do
writeln(texto, aluno[i].nome + ' - ' + ContarLivros(i) + ' livro(s)');
close(texto);
Writeln('Gerando arquivo por favor aguarde...');
Write('[Carregando...');
for i := 1 to 61 do
begin
Write(chr(178));
delay(i);
end;
write('100%]');
Writeln();
Writeln('Arquivo Gerado Com Sucesso!',chr(7));
Writeln('Pressione qualquer tecla para retornar ao menu...');
Readkey();
end;
procedure TesteQtdAluno(); {Teste de quantidade de alunos
cadastrados}
begin
if (AluCadastro > QtdMaxAlunos) then
QtdMax('alunos')
else
CadastroAluno();
end;
procedure TesteQtdLivro(); {Teste de quantidade de livros cadastrados}
begin
if (LivCadastro > QtdMaxlivros) then
QtdMax('livros')
else
CadastroLivro();
end;
procedure TesteQtdLocacoes(); {Teste de quantidade de alunos que
pegaram livros}
var
opcao: string;
begin
if (AluCadastro = 0) then
begin
MostraTitulo('SEM ALUNOS CADASTRADOS');
NenhumCadastro('aluno');
Writeln();
MostrarOpcao();
Readln(opcao);
opcao := TesteSimNao(opcao);
if (opcao = 'SIM') then
CadastroAluno()
else
ValorVazio('alunos');
end;
if (LocLivros > QtdMaxLocacoes) then
QtdMax(concat('locacoes'));
if (LocLivros <= QtdMaxLocacoes) and (AluCadastro <> 0) then
realizalocacao();
end;
END.