program autos;
uses crt;
type
tnum=integer;
tregAlta=record
nro:tnum;
titular:string[40];
marca:tnum;
modelo:tnum;
color:tnum
end;
tregRech=record
nro:tnum;
titular:string[40];
motivo:string[20]
end;
tregMarca=record
mod1M1,mod2M1,mod3M1:tnum;
mod1M2,mod2M2,mod3M2:tnum;
mod1M3,mod2M3,mod3M3:tnum;
mod1M4,mod2M4,mod3M4:tnum;
color1M1,color2M1,color3M1,color4M1,color5M1,color6M1,color7M1,color8M1:tnum;
color1M2,color2M2,color3M2,color4M2,color5M2,color6M2,color7M2,color8M2:tnum;
color1M3,color2M3,color3M3,color4M3,color5M3,color6M3,color7M3,color8M3:tnum;
color1M4,color2M4,color3M4,color4M4,color5M4,color6M4,color7M4,color8M4:tnum;
end;
arAlta=file of tregAlta;
arRech=file of tregRech;
arMarca=file of tregMarca;
var
alta,solic,solic_n:arAlta;
marca:arMarca;regSol,regAlta:tregAlta;motivo:arRech;
regMarca:tregMarca;finSol,finAlta,finMarca,finmotivo:boolean;
procedure ingAlta(var alta:arAlta;var regAlta:tregAlta);
var
tecla:char;
begin
assign(alta,'c:userstomasarch_pascalalta.dat');
rewrite(alta);
writeln('ingresa datos de altas');
readln(tecla);
while(tecla='s')do
begin
writeln('ingrese nro de solicitud');readln(regAlta.nro);
writeln('ingrese titular');readln(regAlta.titular);
writeln('ingrese marca');readln(regAlta.marca);
writeln('ingrese modelo');readln(regAlta.modelo);
writeln('ingrese color');readln(regAlta.color);
write(alta,regAlta);
writeln('ingresa mas datos(s/n)');readln(tecla)
end;
close(alta)
end;
procedure ingSol(var solic:arAlta;var regSol:tregAlta);
var
tecla:char;
begin
assign(solic,'c:userstomasarch_pascalsolic.dat');
rewrite(solic);
writeln('ingresa datos de solicitud');readln(tecla);
while(tecla='s')do
begin
writeln('ingrese nro de solicitud');readln(regsol.nro);
writeln('ingrese titular');readln(regSol.titular);
writeln('ingrese marca');readln(regSol.marca);
writeln('ingrese modelo');readln(regSol.modelo);
writeln('ingrese color');readln(regSol.color);
write(solic,regSol);
writeln('ingresa mas datos(s/n)');readln(tecla)
end;
close(solic)
end;
procedure leer_alta(var F:arAlta;var reg:tregAlta;var fin_alta:boolean);
begin
fin_alta:=eof(F);
if not(fin_alta)then
read(F,reg)
else fin_alta:=true
end;
procedure leer_sol(var F:arAlta;var reg:tregAlta;var fin_sol:boolean);
begin
fin_sol:=eof(F);
if not(fin_sol)then
read(F,reg)
else fin_sol:=true
end;
procedure actualizar(var alta,solic,solic_n:arAlta);
var
regAlta,regSol:tregAlta;
begin
assign(alta,'c:userstomasarch_pascalalta.dat');
assign(solic,'c:userstomasarch_pascalsolic.dat');
assign(solic,'c:userstomasarch_pascalsolic_n.dat');
reset(alta);reset(solic);rewrite(solic_n);
leer_sol(solic,regSol,finsol);leer_alta(alta,regAlta,finAlta);
while(not(finSol))and(not(finAlta))do
begin
if(regSol.nro=regAlta.nro)or(regAlta.marca>4)or(regalta.modelo>3)or(regAlta.color>8)then
begin
leer_sol(solic,regSol,finsol);
leer_alta(alta,regAlta,finalta)
end
else
if(regSol.nro<regAlta.nro)then
begin
write(solic_n,regSol);
leer_sol(solic,regSol,finsol)
end
else
if(regAlta.nro<regSol.nro)and(regAlta.marca<=4)and(regAlta.modelo<=3)and(regAlta.color<=8)then
begin
write(solic_n,regAlta);
leer_alta(alta,regAlta,finalta)
end
end;
close(solic);close(alta);close(solic_n)
end;
procedure motivo_x_rech(var solic,alta:arAlta;var motivo:arrech);
var
regAlta,regSol:tregalta;
regrech:tregrech;
begin
assign(alta,'c:userstomasarch_pascalalta.dat');
assign(solic,'c:userstomasarch_pascalsolic.dat');
assign(motivo,'c:userstomasarch_pascalmotivo.dat');
reset(alta);reset(solic);rewrite(motivo);
leer_sol(solic,regSol,finsol);leer_alta(alta,regAlta,finalta);
while(not(finsol))and(not(finalta))do
begin
if(regSol.nro=regAlta.nro)then
begin
regrech.nro:=regAlta.nro;
regrech.titular:=regAlta.titular;
regrech.motivo:='solicitud existente';
write(motivo,regrech);
leer_sol(solic,regsol,finsol);leer_alta(alta,regAlta,finalta)
end
else
if(regAlta.marca>4)then
begin
regrech.nro:=regAlta.nro;
regrech.titular:=regAlta.titular;
regrech.motivo:='marca invalida';
write(motivo,regrech);
leer_alta(alta,regAlta,finalta)
end
else
if(regAlta.modelo>3)then
begin
regrech.nro:=regAlta.nro;
regrech.titular:=regAlta.titular;
regrech.motivo:='modelo invalida';
write(motivo,regrech);
leer_alta(alta,regAlta,finalta)
end
else
if(regAlta.color>8)then
begin
regrech.nro:=regAlta.nro;
regrech.titular:=regAlta.titular;
regrech.motivo:='color invalido';
write(motivo,regrech);
leer_alta(alta,regAlta,finalta)
end
end;
close(solic);close(alta);close(motivo)
end;
procedure armar_solic(var marca:arMarca;var solic_n:arAlta);
var
regSol:tregAlta;
regMarca:tregMarca;
begin
assign(solic_n,'c:userstomasarchivos_pascalsolic_n.dat');
assign(marca,'c:userstomasarchivos_pascalmarca.dat');
reset(solic_n);rewrite(marca);
with(regMarca)do
begin
mod1M1:=0;mod2M2:=0;mod3M3:=0;color1M1:=0;color2M1:=0;
color3M1:=0;color4M1:=0;color5M1:=0;color6M1:=0;color7M1:=0;
color8M1:=0;mod1M2:=0;mod2M2:=0;mod3M2:=0;color1M2:=0;color2M2:=0;color3M2:=0;color4M2:=0;
color5M2:=0;color6M2:=0;color7M2:=0;color8M2:=0;mod1M3:=0;mod2M3:=0;mod3M3:=0;color1M3:=0;
color2M3:=0;color3M3:=0;color4M3:=0;color5M3:=0;color6M3:=0;color7M3:=0;color8M3:=0;
mod1M4:=0;mod2M4:=0;mod3M4:=0;color1M4:=0;color2M4:=0;color3M4:=0;color4M4:=0;color5M4:=0;
color6M4:=0;color7M4:=0;color8M4:=0
end;
leer_sol(solic_n,regSol,finSol);
while(not finSol)do
begin
with(regMarca)do
begin
if(regSol.marca=1)then
begin
case(regSol.modelo)of
1:inc(mod1M1);
2:inc(mod2M1);
3:inc(mod3M1)
end;
case(regSol.color)of
1:inc(color1M1);
2:inc(color2M1);
3:inc(color3M1);
4:inc(color4M1);
5:inc(color5M1);
6:inc(color6M1);
7:inc(color7M1);
8:inc(color8M1)
end;
write(marca,regMarca);
leer_sol(solic,regSol,finsol)
end
else
if(regSol.marca=2)then
begin
case(regSol.modelo)of
1:inc(mod1M2);
2:inc(mod2M2);
3:inc(mod3M2)
end;
case(regSol.color)of
1:inc(color1M2);
2:inc(color2M2);
3:inc(color3M2);
4:inc(color4M2);
5:inc(color5M2);
6:inc(color6M2);
7:inc(color7M2);
8:inc(color8M2)
end;
write(marca,regMarca);
leer_sol(solic_n,regSol,finsol)
end
else
if(regSol.marca=3)then
begin
case(regSol.modelo)of
1:inc(mod1M3);
2:inc(mod2M3);
3:inc(mod3M3)
end;
case(regSol.color)of
1:inc(color1M3);
2:inc(color2M3);
3:inc(color3M3);
4:inc(color4M3);
5:inc(color5M3);
6:inc(color6M3);
7:inc(color7M3);
8:inc(color8M3)
end;
write(marca,regMarca);
leer_sol(solic_n,regSol,finsol)
end
else
if(regSol.marca=4)then
begin
case(regSol.modelo)of
1:inc(mod1M4);
2:inc(mod2M4);
3:inc(mod3M4)
end;
case(regSol.color)of
1:inc(color1M4);
2:inc(color2M4);
3:inc(color3M4);
4:inc(color4M4);
5:inc(color5M4);
6:inc(color6M4);
7:inc(color7M4);
8:inc(color8M4)
end;
write(marca,regMarca);
leer_sol(solic_n,regSol,finsol)
end
end
end;
close(solic_n);
close(marca)
end;
procedure leer_marca(var marca:arMarca;regMarca:tregMarca;fin:boolean);
begin
fin:=eof(marca);
if(not(fin))then
read(marca,regMarca)
else
fin:=true
end;
procedure leer_motivo(var motivo:arrech;regrech:tregrech;fin:boolean);
begin
fin:=eof(motivo);
if(not(fin))then
read(motivo,regrech)
else
fin:=true
end;
procedure mostrar_motivo(var motivo:arrech);
var
regrech:tregrech;
begin
assign(motivo,'c:userstomasarchivos_pascalmotivo.dat');
reset(motivo);
leer_motivo(motivo,regrech,finmotivo);
while(not(finmotivo))do
begin
writeln(regrech.nro:10,regrech.titular:10,regrech.motivo:10);
leer_motivo(motivo,regrech,finmotivo)
end;
close(motivo)
end;
procedure mostrar_sol(var marca:arMarca);
var
regMarca:tregMarca;
begin
assign(marca,'c:userstomasarchivos_pascalmarca.dat');
reset(marca);
leer_marca(marca,regMarca,finMarca);
while(not(finMarca))do
begin
with(regMarca)do
begin
writeln('marca 1',mod1M1:10,mod2M1:10,mod3M1:10,'':19,color1M1:10,color2M1:10,color3M1:10,color4M1:10,color5M1:10,color6M1:10,color7M1:10,color8M1:10);
writeln('marca 2',mod1M2:10,mod2M2:10,mod3M2:10,'':19,color1M2:10,color2M2:10,color3M2:10,color4M2:10,color5M2:10,color6M2:10,color7M2:10,color8M2:10);
writeln('marca 3',mod1M3:10,mod2M3:10,mod3M3:10,'':19,color1M3:10,color2M3:10,color3M3:10,color4M3:10,color5M3:10,color6M3:10,color7M3:10,color8M3:10);
writeln('marca 4',mod1M4:10,mod2M4:10,mod3M4:10,'':19,color1M4:10,color2M4:10,color3M4:10,color4M4:10,color5M4:10,color6M4:10,color7M4:10,color8M4:10);
end;
leer_marca(marca,regMarca,finMarca)
end;
end;
begin
ingAlta(alta,regAlta);
ingSol(solic,regSol);
actualizar(alta,solic,solic_n);
motivo_x_rech(solic,alta,motivo);
armar_solic(marca,solic_n);
mostrar_motivo(motivo);
mostrar_sol(marca);
readkey
end.