Você está na página 1de 22

SOLUCIN ANALITICA DEL PROBLEMA

La Clnica La Mejor requiere un sistema automatizado para registrar a los pacientes que son
atendidos, de tal modo, que se puedan obtener datos especficos tales como: las estadsticas en
atencin a menores de edad, adultos mayores, tanto femenino como masculino, los ingresos
recaudados mensualmente segn los tipos de patologas atendidas, entre otros. Es importante
destacar, que se han clasificado estas patologas en tres categoras: las tipo A, las B y las tipo C; y
se debern tomar en cuenta las siguientes especificaciones, al momento de ser atendidas en la
Clnica:


si se trata de las tipos B.

El sistema debe cumplir con las siguientes pautas:
Presentar un men de mantenimiento con las opciones:
Incluir
Consultar
Modificar
Eliminar
Reporte
Salida

Debe registrar, con la opcin Incluir, los siguientes datos:
Cdula de Identidad.
Apellidos y Nombres.
Edad.
Sexo.
Das de hospitalizacin.
Tipo de patologas (A/B/C).
Debe ordenar el registro de pacientes por el nmero de la cdula de identidad.
Mostrar por pantalla, cuando se consulte a un paciente por su nmero de cdula de
identidad, toda la informacin referente al mismo.

confirmacin, donde el usuario ratifica la accin de modificar
eliminar datos en el sistema.

en la opcin Incluir.

informacin:
Ingresos recaudados por patologas tipo A.
Ingresos recaudados por patologas tipo B.
Ingresos recaudados por patologas tipo C.
Nmero de pacientes atendidos menores de 18 aos.
Nmero de pacientes atendidos mayores de 65 aos sexo femenino.
Nmero de pacientes atendidos mayores de 65 aos sexo masculino.

El dialogo.

El problema consiste en elaborar un programa que permita a La Clnica La Mejor, registrar a los
pacientes que son atendidos, de tal modo, que se puedan obtener datos especficos tales como: las
estadsticas en atencin a menores de edad, adultos mayores, tanto femenino como masculino, los
ingresos recaudados mensualmente segn los tipos de patologas atendidas, entre otros.
Las entradas de los datos sern introducidos mediante teclado siguiendo una secuencia de pasos en
el programa de la siguiente manera:

Men mantenimiento (Para opciones de registro y actualizacin de los datos de cada estudiante) con
las opciones siguientes: Incluir, Consultar, Modificar, eliminar, Reporte y Salida.

Las Especificaciones

Precondiciones:
Entradas = (cedula, nombre y apellidos, edad, sexo, das de hospitalizacin, tipos de patologa (A,B
y c) ^ n > 0 ^ " i {1,n}: Patologa {1n}

(cedula1, cedula n) ^ n > 0 ^ " i {1,8}
(Nombres y apellidos1, nombres y apellidosn) ^ n > 0 ^ " i {1,n}
(Edad1, edadn) ^ n > 0 ^ " i {1,n}
(sexo1, sexon) ^ n > 0 ^ " i {1,n}
(Das de hospitalizacin1, Das de hospitalizacin n) ^ n > 0 ^ " i {1,n}
(Tipo de patologas (A/B/C).1, Tipo de patologas (A/B/C).n) ^ n > 0 ^ " i {1,n}

PostCondiciones:
Salidas =(cedula, nombre y apellidos, edad, sexo, das de hospitalizacin, tipos de patologa (A,B y
C).

LA PARTICIN
Este problema se puede plantear a travs de la siguiente rutina,
1. Inicializar el programa.
2. Ingresar datos del paciente.
3. Mostrar los datos ingresados.
4. Ordenar registro de pacientes por el nmero de la cdula de identidad.
4. Mostrar por pantalla, cuando se consulte a un paciente
5. Mostrar por pantalla, en la opcin Modificar y en la opcin Eliminar.

2. Ingresar datos del paciente.
2.1. Leer cedula
2.2. Leer nombre
2.3. Leer apellido
2.4. Edad.
2.5 Sexo.
2.6 Das de hospitalizacin.
2.7 Tipo de patologas (A/B/C

3. consultar datos del paciente
3.1. Leer cedula
3.2. Leer nombre
3.3. Leer apellido
3.4. Edad.
3.5 Sexo.
3.6 Das de hospitalizacin.
3.7 Tipo de patologas (A/B/C

4. modificar datos del paciente
4.1. Leer cedula
4.2. Leer nombre
4.3. Leer apellido
4.4. Edad.
4.5 Sexo.
4.6 Das de hospitalizacin.
4.7 Tipo de patologas (A/B/C

5. eliminar datos del paciente
5.1. Leer cedula
5.2. Leer nombre
5.3. Leer apellido
5.4. Edad.
5.5 Sexo.
5.6 Das de hospitalizacin.
5.7 Tipo de patologas (A/B/C

6. Mostrar
6.1 Ingresos recaudados por patologas tipo A.
6.2 Ingresos recaudados por patologas tipo B.
6.3 Ingresos recaudados por patologas tipo C.
6.4 Nmero de pacientes atendidos menores de 18 aos.
6.5 Nmero de pacientes atendidos mayores de 65 aos sexo femenino.
6.6 Nmero de pacientes atendidos mayores de 65 aos sexo masculino

Codificacin
Este punto se corresponde con el objetivo N 8, su presentacin se deja para que se aborde dicho
objetivo con el fin de vitar repeticiones. (Ver Pg. 24).

Prueba y Verificacin

Consiste en probar y validar que el sistema realizado bajo el lenguaje de programacin Pascal, se
puede ejecutar sin inconveniente; lo que quiere decir, todas las salidas arrojadas por el sistema son
correctas y las entradas cumplen todas las condiciones para que el sistema pueda procesar los datos
que ingresan y de esta forma generar las respuestas asociadas de acuerdo a lo que se pide.

Presentacin
Esta etapa consiste en aadir los comentarios adecuados para documentar el sistema, con lo cual se
puede clarificar el propsito del mismo, asimismo, se colocan los nombres del autor o autores, as
como, como la fecha y la utilizacin de aquellas rutinas que sern utilizadas en una u otra ocasin
dentro de las instrucciones.

Unidad N 6. Diseo del Algoritmo usando Tcnicas de Programacin Estructurada
Algoritmo clnica la Mejor

Pseudocdigo
Declaracin Tipo

string12 = datos no numerico; {variable que se van a utilizar en la programacin}
Paciente = registro del paciente,
activo : si esta activo el paciente; verdadero o falso
numpac : cedula del paciente; datos no numricos
nombre : nombre del paciente; cadena de caracteres
apells : apellidos
edad : edad;
sexo : sexo
patolg : tipo de patologa;
ingreso : ingreso del paciente;
tiempo : tiempo que permanece el paciente;
fechent : fecha ingreso;
fechalt : fecha de alta;
Total : totalizacin de das hospitalizados;

Declaracin Variable
f: fila del paciente, extensin del archivo paciente
Datos : paciente;
ao, mes, dia, semana : tipo escritura;

Funcin guardar datos(dd : paciente) : tipo verdadero o falso; {funcin para guardar los datos}
Variables
tt : tipos de datos;
dt : paciente;
err :tipo verdadero o falso
Inicio de procedimiento
guardar datos: tipo verdadero o falso
asignar (f,archi);
restablecer el archivo
si resulta <> 0 entoces
begin
reescribir(f);
buscar el archivo(f,0);
escribir(f,dd);
cerrar(f);
guarder lo datos := verdadero;
fin
de lo contrario
limpiar pantalla;
bucar(f,filesize(f));
escribir(f,dd);
cerrar(f);
guardar los datos := verdadero;
fn;
fin;

funcin da ingreso : tipo de caracter12; {funcin da de ingreso del paciente}
var
comm, comd : tipo caracter[2];
coma : string[4];
limpiar pantalla;
getdate(ano,mes,dia,sem);
str(ano,coma);
str(mes,comm);
str(dia,comd);
si devuelve(comd) = 1 entonces
inserta ('0',comd,1);
si devuelve (comm) = 1 entonces
insertar ('0',comm,1);
dia ingreso := comd + '/' + comm + '/' + coma;
fin;

Procedimiento incluir paciente; {procedimiento incluir paciente}
var
tec : char;
begin
limpiar pantalla
escribir('***** Ingreso Paciente *****');
escribir;
with datos do
limpiar pantalla
activo := verdadero;
escribir(' Entre Num. Pacit. : ');
leer(numpac);
escribir(' Entre Nombre : ');
leer(nombre);
escribir(' Entre Apellidos : ');
leer(apells);
escribir(' Entre Edad : ');
leer(edad);
escribir(' Entre Sexo [F/M] : ');
leer(sexo);
escribir(' Entre Patol. [A/B/C] : ');
leer(patolg);
ingreso := ingres;
fechent := dia ingreso;
escribir;
escribir(' >>> Aceptar Datos [S/N] <<<');
repetir
tec := upcase(readkey); carcter
until tec in['S','N'];
si tec = 'S' entonce
begin
si guardardatos(datos) = verdadero entonce
escribir(' Datos De Paciente Guardados ')
de lo contrario
escribir(' Error El Numero Paciente Existe No Guardado ');
escribir(' Pulse Una Tecla ');
fin;
fin;
fin;

procedimiento consultar(num : longint); {procedimiento para consultar paciente}
var
tt : longint;
dto : paciente;
si : boolean;
begin
si := falso;
tt := 0;
asignar (f,archi);
{$I-} reset(f); {$I+}
Si ioresult <> 0 entonce
begin
escribir(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
fin
de lo contrario
begin
for tt := 0 to filesize(f) - 1 do
begin
seek(f,tt);
leerf,dto);
si dto.numpac = num then
begin
si := verdadero;
break;
fin;
fin;
si si = verdadero entonce
begin
si dto.activo = verdadero entonces
begin
with dto do
begin

escribir(' Numero Paciente = ',numpac);
escribir(' Nombre = ',nombre);
escribir(' Apellidos = ',apells);
case edad of
0..18 : escribir(' Categoria = Menor De Edad');
19..64 : escribir(' Categoria = Adulto');
65..107 : escribir(' Categoria = Mayor');
fin;
escribir(' Patologia = ',patolg);
escribir(' Importe Ingreso = ',ingreso:0:2);
escribir(' Fecha Ingreso = ',fechent);
si fechalt <> ' ' entonce
escribir(' Fecha Actual = ',fechalt)
de lo contrario
escribir(' Fecha Actual = ',diaingreso);
escribir(' Total Importe = ',total:0:2);
escribir;
fin;
fin
de lo contrario
escribir(' El Paciente No Esta En Lista ');
fin
de lo contrario
escribir(' Numero Paciente No Encontrado ');
escribir(' Pulse Una Tecla');
readkey;
fin;
fin;

procedimiento modifica datos(num : longint); {procedimiento para modificar datos}
var
mo, mdi : paciente;
kk, jh : longint;
term : boolean;
deci : char;
begin
term := falso;
asinar(f,archi);
{$I-} reset(f); {$I+}
Si ioresult <> 0 entonces
begin
escribir(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
fin
de lo contrario
begin
for jh := 0 to filesize(f) - 1 do
begin
seek(f,jh);
leer(f,mdi);
si mdi.numpac = num entonce
begin
term := verdadero;
kk := jh;
mo := mdi;
break;
fin;
fin;
si term = verdadero entonce
begin
si mdi.activo = verdero entonce
begin
term := verdadero;
repetir
limpiar pantalla;
escribir(' ***** Menu Modificaciones *****');
escribir;
escribir(' 1 = Num. Paciente');
escribir(' 2 = Nombre');
escribir(' 3 = Apellidos');
escribir(' 4 = Edad');
escribir(' 5 = Patologia');
escribir(' 6 = Fecha Ingreso');
escribir(' 7 = Salir Y Guardar Cambios');
escribir;
escribir(' <<< Elija Opcion >>>');
repetir;
deci := upcase(readkey);
until deci in['N','A','P','E','G','F','S'];
limpiar pantalla;
case deci of
'1' : begin
escribir(' Num. Paciente : ');
leer(mo.numpac);
fin;
'2' : begin
escribir(' Nombre : ');
leer(mo.nombre);
fin;
'3' : begin
escribir(' Apellidos : ');
leer(mo.apells);
fin;
'4' : begin
escribir(' Edad : ');
leer(mo.edad);
fin;
'5' : begin
escribir(' Patologia: ');
leer(mo.patolg);
fin;
'6' : begin
escribir(' Fecha Ingreso : ');
leer(mo.fechent);
fin;
'7' : begin
term := verdadero;
fin;
fin;
until term = verdadero;
mdi := mo;
seek(f,kk);
escribir(f,mdi);
fin;
fin;
close(f);
fin;
fin;

procedimiento eliminar paciente(num : longint); {procedimiento eliminar paciente}
var
bn, hh : longint;
begin
asignar(f,archi);
{$I-} reset(f); {$I+}
si ioresult <> 0 entonce
begin
escribir(' Esta seguro de eliminar Paciente S/N');
readkey;
fin
de lo contrario
begin
bn := 0;
for hh := 0 to filesize(f) - 1 do
begin
seek(f,hh);
read(f,datos);
si datos.numpac <> num entonce
begin
fin
de lo contrario
begin
datos.activo := falso;
seek(f,hh);
escribir(f,datos);
fin;
fin;
close(f);
fin;
fin;

procedimiento reporte(num : longint); (procedimiento para reporte)
var
totl : real;
pul : char;
pos, tt : longint;
sil : boolean;
d, m, an : word;
d1, m1, an1 : word;
d3, m3, an3 : word;
dar : string[2];
ay : string[4];
totaldias, error : integer;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
si ioresult <> 0 entonces
begin
escribir(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
fin
de lo contrario
begin
sil := falso;
for tt := 0 to filesize(f) - 1 do
begin
seek(f,tt);
read(f,datos);
si datos.numpac = num entonce
begin
sil := verdadero;
pos := tt;
break;
fin;
fin;
si sil = verdadero entonce
begin
si datos.activo = verdadero entonce
begin
escribir(' Entrada Fecha Alta Como [A]=Automatico O [M]=Manual');
repetir
pul := upcase(readkey);
until pul in['A','M'];
si pul = 'A' entonce
datos.fechalt := diaingreso;
if pul = 'M' entonce
begin
escribir(' Entre Fecha De Alta d/m/ao ');
escribir;
escribir(' Fecha : ');
leer(datos.fechalt);
si datos.fechalt[2] = '/' entonce
insertar('0',datos.fechalt,1);
si datos.fechalt[5] = '/' entonce
insertar('0',datos.fechalt,4);
fin;
dar := copy(datos.fechent,1,2);
val(dar,d,error);
dar := copy(datos.fechent,4,2);
val(dar,m,error);
ay := copy(datos.fechent,7,4);
val(ay,an,error);
dar := copy(datos.fechalt,1,2);
val(dar,d1,error);
dar := copy(datos.fechalt,4,2);
val(dar,m1,error);
ay := copy(datos.fechalt,7,4);
val(ay,an1,error);
d3 := 0;
m3 := 0;
an3 := 0;
d3 := d1 - d;
m3 := m1 - m;
an3 := an1 - an;
totaldias := (m3 * 30) + d3;
si(datos.patolg = 'A') or (datos.patolg = 'a') entonce
begin
datos.total := (patoA * totaldias);
fin;
si (datos.patolg = 'B') y (datos.patolg = 'b') entonce
begin
datos.total := (patoB * totaldias);
fin;
si (datos.patolg = 'C') or (datos.patolg = 'c') entonce
begin
datos.total := (patoC * totaldias);
fin;
datos.activo := falso;
limpiar pantalla;
escribir(' ***** Reporte De Alta *****');
leer;
escribir(' Fecha De Ingreso = ',datos.fechent);
escribir(' Fecha De Alta = ',datos.fechalt);
escribir(' Dias De Ingreso = ',totaldias);
escribir(' Patologia = ',datos.patolg);
escribir(' Total Importe = ',datos.total:0:2);
escribir;
escribir(' <<< Pulse Una Tecla >>>');
readkey;
seek(f,pos);
escribir(f,datos);
close(f);
fin
de lo contrario
begin
escribir(' El Paciente No Esta Activo ');
escribir(' <<< Pulse Una Tecla >>>');
readkey;
close(f);
fin;
fin;
fin;
fin;

procedimiento menu; (procedimiento del men principal)
var
tecla : char;
sal : boolean;
nnm : longint;
begin
sal := false;
repetir
limpiar pantalla;
escribir(' ***** Menu *****');
escribir;
escribir(' 1 = Incluir');
escribir(' 2 = Consultar');
escribir(' 3 = Modificar');
escribir(' 4 = Eliminar');
escribir(' 5 = Reporte ');
escribir(' 6 = Salir');
escribir;
escribir(' <<< Elija Opcion >>>');
repetir
tecla := upcase(readkey);
until tecla in['1','2','3','4','5','6'];
limpiar pantalla;
case tecla of
'1' : entradapaciente;
'2' : begin
escribir(' Entre Num. consultar : ');
leer(nnm);
consultar(nnm);
fin;
'3' : begin
escribir(' Entre Num. modificar: ');
leer(nnm);
modificadatos(nnm);
fin;
'4' : begin
escribir(' Entre Num. eliminar : ');
leer(nnm);
eliminapaciente(nnm);
fin;
'5' : begin
escribir(' Entre Num. reporte : ');
leer(nnm);
reporte(nnm);
fin;
'6' : sal := verdadero;
fin;
until sal = verdadero;
fin;
begin
limpiar pantalla;
menu;
fin.

Unidad N 8. Cdigo en Pascal

{PROGRAMA DE PASCAL CLINICA LA MEJOR}
{Ing Industrial Jose R Blanquez }
program clinica;
uses
crt, dos;
const
patoA = 550;
patoB = 430;
patoC = 620;
ingres = 500;
archi = 'Datospac.dat';
type
string12 = string[12]; {variable que se van a utilizar en la programacin}
paciente = record
activo : boolean;
numpac : longint;
nombre : string[80];
apells : string;
edad : integer;
sexo : char;
patolg : char;
ingreso : real;
tiempo : integer;
fechent : string[12];
fechalt : string[12];
total : real;
end;

var
f : file of paciente;
datos : paciente;
ano, mes, dia, sem : word;

function guardardatos(dd : paciente) : boolean; {funcin para guardar los datos}
var
tt : longint;
dt : paciente;
err : boolean;
begin
guardardatos := false;
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
rewrite(f);
seek(f,0);
write(f,dd);
close(f);
guardardatos := true;
end
else
begin
seek(f,filesize(f));
write(f,dd);
close(f);
guardardatos := true;
end;
end;

function diaingreso : string12; {funcin da de ingreso del paciente}
var
comm, comd : string[2];
coma : string[4];
begin
getdate(ano,mes,dia,sem);
str(ano,coma);
str(mes,comm);
str(dia,comd);
if length(comd) = 1 then
insert('0',comd,1);
if length(comm) = 1 then
insert('0',comm,1);
diaingreso := comd + '/' + comm + '/' + coma;
end;

procedure entradapaciente; {procedimiento incluir paciente}
var
tec : char;
begin
clrscr;
writeln('***** Ingreso Paciente *****');
writeln;
with datos do
begin
activo := true;
write(' Num. Pacit. : ');
readln(numpac);
write(' Nombre : ');
readln(nombre);
write(' Apellidos : ');
readln(apells);
write(' Edad : ');
readln(edad);
write(' Sexo [F/M] : ');
readln(sexo);
write(' Patol. [A/B/C] : ');
readln(patolg);
ingreso := ingres;
fechent := diaingreso;
writeln;
writeln(' >>> Aceptar Datos [S/N] <<<');
repeat
tec := upcase(readkey);
until tec in['S','N'];
if tec = 'S' then
begin
if guardardatos(datos) = true then
writeln(' Datos De Paciente Guardados ')
else
writeln(' Error El Numero Paciente Existe No Guardado ');
writeln(' Pulse Una Tecla ');
end;
end;
end;

procedure consultar(num : longint); {procedimiento para consultar paciente}
var
tt : longint;
dto : paciente;
si : boolean;
begin
si := false;
tt := 0;
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
end
else
begin
for tt := 0 to filesize(f) - 1 do
begin
seek(f,tt);
read(f,dto);
if dto.numpac = num then
begin
si := true;
break;
end;
end;
if si = true then
begin
if dto.activo = true then
begin
with dto do
begin
writeln(' Numero Paciente = ',numpac);
writeln(' Nombre = ',nombre);
writeln(' Apellidos = ',apells);
case edad of
0..18 : writeln(' Categoria = Menor De Edad');
19..64 : writeln(' Categoria = Adulto');
65..107 : writeln(' Categoria = Mayor');
end;
writeln(' Patologia = ',patolg);
writeln(' Importe Ingreso = ',ingreso:0:2);
writeln(' Fecha Ingreso = ',fechent);
if fechalt <> ' ' then
writeln(' Fecha Actual = ',fechalt)
else
writeln(' Fecha Actual = ',diaingreso);
writeln(' Total Importe = ',total:0:2);
writeln;
end;
end
else
writeln(' El Paciente No Esta En Lista ');
end
else
writeln(' Numero Paciente No Encontrado ');
writeln(' Pulse Una Tecla');
readkey;
end;
end;

procedure modificadatos(num : longint); {procedimiento para modificar datos}
var
mo, mdi : paciente;
kk, jh : longint;
term : boolean;
deci : char;
begin
term := false;
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
end
else
begin
for jh := 0 to filesize(f) - 1 do
begin
seek(f,jh);
read(f,mdi);
if mdi.numpac = num then
begin
term := true;
kk := jh;
mo := mdi;
break;
end;
end;
if term = true then
begin
if mdi.activo = true then
begin
term := false;
repeat
clrscr;
writeln(' ***** Menu Modificaciones *****');
writeln;
writeln(' 1 = Num. Paciente');
writeln(' 2 = Nombre');
writeln(' 3 = Apellidos');
writeln(' 4 = Edad');
writeln(' 5 = Patologia');
writeln(' 6 = Fecha Ingreso');
writeln(' 7 = Salir Y Guardar Cambios');
writeln;
writeln(' <<< Elija Opcion >>>');
repeat
deci := upcase(readkey);
until deci in['1','2','3','4','5','6','7'];
clrscr;
case deci of
'1' : begin
write(' Num. Paciente : ');
readln(mo.numpac);
end;
'2' : begin
write(' Nombre : ');
readln(mo.nombre);
end;
'3' : begin
write(' Apellidos : ');
readln(mo.apells);
end;
'4' : begin
write(' Edad : ');
readln(mo.edad);
end;
'5' : begin
write(' Patologia: ');
readln(mo.patolg);
end;
'6' : begin
write(' Fecha Ingreso : ');
readln(mo.fechent);
end;
'7' : begin
term := true;
end;
end;
until term = true;
mdi := mo;
seek(f,kk);
write(f,mdi);
end;
end;
close(f);
end;
end;

procedure eliminapaciente(num : longint); {procedimiento eliminar paciente}
var
bn, hh : longint;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln(' Esta seguro de eliminar Paciente S/N');
readkey;
end
else
begin
bn := 0;
for hh := 0 to filesize(f) - 1 do
begin
seek(f,hh);
read(f,datos);
if datos.numpac <> num then
begin
end
else
begin
datos.activo := false;
seek(f,hh);
write(f,datos);
end;
end;
close(f);
end;
end;

procedure reporte(num : longint); {procedimiento para reporte}
var
totl : real;
pul : char;
pos, tt : longint;
sil : boolean;
d, m, an : word;
d1, m1, an1 : word;
d3, m3, an3 : word;
dar : string[2];
ay : string[4];
totaldias, error : integer;
begin
assign(f,archi);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln(' Error Archivo No Encontrado Pulse Una Tecla');
readkey;
end
else
begin
sil := false;
for tt := 0 to filesize(f) - 1 do
begin
seek(f,tt);
read(f,datos);
if datos.numpac = num then
begin
sil := true;
pos := tt;
break;
end;
end;
if sil = true then
begin
if datos.activo = true then
begin
writeln(' Entrada Fecha Alta Como [A]=Automatico O [M]=Manual');
repeat
pul := upcase(readkey);
until pul in['A','M'];
if pul = 'A' then
datos.fechalt := diaingreso;
if pul = 'M' then
begin
writeln(' Entre Fecha De Alta d/m/ao ');
writeln;
write(' Fecha : ');
readln(datos.fechalt);
if datos.fechalt[2] = '/' then
insert('0',datos.fechalt,1);
if datos.fechalt[5] = '/' then
insert('0',datos.fechalt,4);
end;
dar := copy(datos.fechent,1,2);
val(dar,d,error);
dar := copy(datos.fechent,4,2);
val(dar,m,error);
ay := copy(datos.fechent,7,4);
val(ay,an,error);
dar := copy(datos.fechalt,1,2);
val(dar,d1,error);
dar := copy(datos.fechalt,4,2);
val(dar,m1,error);
ay := copy(datos.fechalt,7,4);
val(ay,an1,error);
d3 := 0;
m3 := 0;
an3 := 0;
d3 := d1 - d;
m3 := m1 - m;
an3 := an1 - an;
totaldias := (m3 * 30) + d3;
if (datos.patolg = 'A') or (datos.patolg = 'a') then
begin
datos.total := (patoA * totaldias);
end;
if (datos.patolg = 'B') or (datos.patolg = 'b') then
begin
datos.total := (patoB * totaldias);
end;
if (datos.patolg = 'C') or (datos.patolg = 'c') then
begin
datos.total := (patoC * totaldias);
end;
datos.activo := false;
clrscr;
writeln(' ***** Reporte De Alta *****');
writeln;
writeln(' Fecha De Ingreso = ',datos.fechent);
writeln(' Fecha De Alta = ',datos.fechalt);
writeln(' Dias De Ingreso = ',totaldias);
writeln(' Patologia = ',datos.patolg);
writeln(' Total Importe = ',datos.total:0:2);
writeln;
writeln(' <<< Pulse Una Tecla >>>');
readkey;
seek(f,pos);
write(f,datos);
close(f);
end
else
begin
writeln(' El Paciente No Esta Activo ');
writeln(' <<< Pulse Una Tecla >>>');
readkey;
close(f);
end;
end;
end;
end;

procedure menu; {procedimiento del menu principal}
var
tecla : char;
sal : boolean;
nnm : longint;
begin
sal := false;
repeat
clrscr;
writeln(' ***** Menu *****');
writeln;
writeln(' 1 = Incluir');
writeln(' 2 = Consultar');
writeln(' 3 = Modificar');
writeln(' 4 = Eliminar');
writeln(' 5 = Reporte ');
writeln(' 6 = Salir');
writeln;
writeln(' <<< Elija Opcion >>>');
repeat
tecla := upcase(readkey);
until tecla in['I1,'2','3','4','5','6'];
clrscr;
case tecla of
'1' : entradapaciente;
'2' : begin
write(' Entre Num. consultar : ');
readln(nnm);
consultar(nnm);
end;
'3' : begin
write(' Entre Num. modificar: ');
readln(nnm);
modificadatos(nnm);
end;
'4' : begin
write(' Entre Num. eliminar : ');
readln(nnm);
eliminapaciente(nnm);
end;
'5' : begin
write(' Entre Num. reporte : ');
readln(nnm);
reporte(nnm);
end;
'6' : sal := true;
end;
until sal = true;
end;
begin
clrscr;
menu;
end.

Você também pode gostar