program empresa(input,output);
uses crt;
type
matriobrero = record
tipo : integer ;
Ape_y_Nombre : String[18];
numhoras : Integer ;
valor_horas : real ;
bono_obrero : real ;
sueldototal : real ;
num_dias_emple : integer ;
val_diario_emple : real ;
sue_gerente : real ;
end;
Aobre = array[1..100] of matriobrero ;
var
conobre, conpemple, congeren, n , i : Integer;
suel : real;
xx: Aobre;
ch : char;
(************************************************)
(* FUNCION QUE CONVIERTE UNA CADENA A MAYUSCULA *)
(************************************************)
function UpCaseStr(S: string): string;
var
jj: Integer;
begin
for jj := 1 to Length(S) do
if (S[jj] >= 'a') and (S[jj] <= 'z') then
Dec(S[jj], 32);
UpCaseStr := S;
end;
procedure obre;
begin
gotoxy(28,10);
writeln(' ');
gotoxy(2,10);
writeln('Apellido y Nombre N§ : ', i , ' = ' ) ;
gotoxy(29,10);
readln(xx[i].Ape_y_Nombre) ;
clreol;
writeln(' ') ;
gotoxy(2,12);
writeln('Numeros de horas: ', i ,' = ') ;
gotoxy(26,12);
readln(xx[i].numhoras) ;
clreol;
gotoxy(2,14);
writeln('Valor de la hora: ', i ,' = ') ;
gotoxy(26,14);
readln(xx[i].valor_horas) ;
clreol;
gotoxy(2,16);
writeln('Bono del obrero: ', i ,' = ') ;
gotoxy(26,16);
readln(xx[i].bono_obrero) ;
clreol;
suel := 0.0 ;
suel := (xx[i].numhoras * xx[i].valor_horas) + xx[i].bono_obrero;
xx[i].sueldototal := suel ;
xx[i].tipo := 1 ;
end;
(*******)
procedure empleado;
begin
gotoxy(28,10);
writeln(' ');
gotoxy(2,10);
writeln('Apellido y Nombre N§ : ', i , ' = ' ) ;
gotoxy(29,10);
readln(xx[i].Ape_y_Nombre) ;
clreol;
writeln(' ') ;
gotoxy(2,12);
writeln('Numeros de dias : ', i ,' = ') ;
gotoxy(26,12);
readln(xx[i].num_dias_emple) ;
clreol;
gotoxy(2,14);
writeln('Valor diario : ', i ,' = ') ;
gotoxy(26,14);
readln(xx[i].val_diario_emple) ;
clreol;
suel := 0.0 ;
suel := (xx[i].num_dias_emple * xx[i].val_diario_emple) ;
xx[i].sueldototal := suel ;
xx[i].tipo := 2 ;
end;
(************)
(* Mostrar *)
(************)
procedure mosobrero;
begin
clrscr;
gotoxy(3,2);
write('personal obrero ');
gotoxy(3,4);
write('Nombres :Horas :Valor H. :Bono Obrero :Sueldo ');
for i := 1 to N do
begin
IF (xx[i].TIPO = 1 ) THEN
BEGIN
gotoxy(1,5+i);
write(UpCaseStr(xx[i].Ape_y_Nombre));
gotoxy(20,5+i);
write(xx[i].numhoras) ;
gotoxy(27,5+i);
write(xx[i].valor_horas:5:2) ;
gotoxy(38,5+i);
write(xx[i].bono_obrero:5:2) ;
gotoxy(48,5+i);
write(xx[i].sueldototal:5:2)
end;
END;
end;
procedure gerente;
begin
gotoxy(28,10);
writeln(' ');
gotoxy(2,10);
writeln('Apellido y Nombre N§ : ', i , ' = ' ) ;
gotoxy(29,10);
readln(xx[i].Ape_y_Nombre) ;
clreol;
writeln(' ') ;
gotoxy(2,12);
writeln('sueldo del gerente', i ,' = ') ;
gotoxy(26,12);
readln(xx[i].sueldototal) ;
clreol;
xx[i].tipo := 3 ;
end;
(** mas empleado **)
procedure mosmpleado;
begin
writeln;
writeln('Empleados ');
write('Nombres :Horas :Valor H. Sueldo ');
for i := 1 to N do
begin
IF (xx[i].TIPO = 2 ) THEN
BEGIN
gotoxy(1,5+i+conobre);
write(UpCaseStr(xx[i].Ape_y_Nombre));
gotoxy(20,5+i+conobre);
write(xx[i].num_dias_emple) ;
gotoxy(27,5+i+conobre);
write(xx[i].val_diario_emple:5:2) ;
gotoxy(38,5+i+conobre);
write(xx[i].sueldototal:5:2) ;
end;
END;
end;
procedure mosgerente;
begin
writeln;
writeln('Gerentes ');
writeln('Nombres Sueldo ');
for i := 1 to N do
begin
IF (xx[i].TIPO = 3 ) THEN
BEGIN
gotoxy(1,5+i+conobre+conpemple+congeren);
write(UpCaseStr(xx[i].Ape_y_Nombre));
gotoxy(20,5+i+conobre+conpemple+congeren);
write(xx[i].sueldototal:5:2) ;
end;
END;
end;
begin
clrscr;
conobre := 0;
conpemple := 0;
congeren := 0;
gotoxy(2,5);
writeln('Cantidad de Personasl: ' ) ;
gotoxy(25,5);
readln(n) ;
for i := 1 to n do
begin
clrscr;
gotoxy(2,6);
writeln('Que tipo es [O/E/G]: ' ) ;
gotoxy(25,6);
Ch := upcase(readkey);
case Ch of
'O' : begin
WriteLn('Obrero ');
inc(conobre) ;
obre;
end;
'E' : begin
WriteLn('Empleado ');
inc(conpemple);
empleado;
end;
'G' : begin
WriteLn('Gerente ');
inc(congeren);
gerente;
end;
end;
end;
mosobrero;
mosmpleado;
mosgerente;
readln;
end.