通常,我有一个 mz 程序(代码在启动示例下面,因为它很大),首先我初始化 mz,然后我查看所有记录(图 1),此时一切都很好,然后我使用change_ward或change_doctor程序,当查看我想要更改的条目时,文本发生了奇怪的变化(图2),但是如果您使用删除,则根本不会出现问题,可以吗?请告诉我这与什么有关,以及如何在图 1 中纠正这个问题:
代码:
Uses Crt;
Type
bolnoy=Record
FIO : String[20];
nom_palaty : Byte;
osn_d : string[10];
vrach : string[20];
date : string[10];
naz : string[10];
End;
Stud_File = File of bolnoy;
Stud_Mas = Array[1..50] of bolnoy;
Procedure Wait;
Begin
GotoXY(20,24);
Write('Для продолжения - нажмите любую клавишу ...');
ReadKey;
End;
Function F_I_O : String;
Const
B1:string='БВГДМНПРСТХЧ';
G1:string='аеиоаюеуоае';
Sog1:string='бвзклмнпрстч';
I1:Array[1..4] of string=('нов','лов','ский','ко');
Var
Kb,I : Byte;
F : String;
Begin
F:=B1[Random(12)+1];
Kb:=Random(2)+3;
For I:=1 To Kb Do
If I mod 2 = 1 then
F:=F+G1[Random(11)+1]
else
F:=F+Sog1[Random(12)+1];
F:=F+I1[Random(4)+1];
F:=F+' '+ B1[Random(12)+1]+'.'+ B1[Random(12)+1]+'.';
F_I_O:=F;
End;
Function F_I_O_doctor : String;
Const
B1:string='БВГДМНПРСТХЧ';
G1:string='аеиоаюеуоае';
Sog1:string='бвзклмнпрстч';
I1:Array[1..4] of string=('нов','лов','ский','ко');
Var
Kb,I : Byte;
F : String;
Begin
F:=B1[Random(12)+1];
Kb:=Random(2)+3;
For I:=1 To Kb Do
If I mod 2 = 1 then
F:=F+G1[Random(11)+1]
else
F:=F+Sog1[Random(12)+1];
F:=F+I1[Random(4)+1];
F:=F+' '+ B1[Random(12)+1]+'.'+ B1[Random(12)+1]+'.';
F_I_O_doctor:=F;
End;
function Diagnose: string;
const
s1:string = 'ОРВИ';
s2:string = 'Ротовирус';
s3:string = 'Гастрит';
s4:string = 'Хитрость';
s5:string = 'Синусит';
s6:string = 'Другое';
var
rand: byte;
r: string;
begin
rand:=random(5)+1;
case rand of
1: r:=s1;
2: r:=s2;
3: r:=s3;
4: r:=s4;
5: r:=s5;
6: r:=s6;
end;
Diagnose:=r;
end;
function date_opr: string;
var
v: string;
d,m,g: string;
Den,Mec: byte;
God: integer;
begin
Den:=random(31)+1;
Mec:=random(12)+1;
God:=random(20)+1999;
str(den,d);
str(mec,m);
str(god,g);
If den<10 then
d:='0'+d;
if mec<10 then
m:='0'+m;
v:=d+'.'+m+'.'+g;
date_opr:=v;
end;
function Naznach : string;
Const
n1:string = 'Покой';
n2:string = 'Валерьянка';
n3:string = 'Шалфей';
n4:string = 'Процедуры';
n5:string = 'УЗИ';
n6:string = 'Другое';
var
Rand: byte;
n: string;
begin
Rand:=random(6)+1;
case Rand of
1: n:=n1;
2: n:=n2;
3: n:=n3;
4: n:=n4;
5: n:=n5;
6: n:=n6;
end;
Naznach:=n;
end;
Procedure Input_Record(Var St_Rec:bolnoy);
Var
Kb,I,J,N : Byte;
Begin
{Randomize};
With St_Rec Do
Begin
{ Kb:=Random(6)+5;
FIO:='';
For J:=1 To Kb Do'
FIO:=FIO+CHR(Random(26)+65);}
FIO:=F_I_O;
nom_palaty:=random(10)+1;
osn_d:=diagnose;
vrach:=F_I_O_doctor;
date:=date_opr;
naz:=naznach;
End;
End;
Procedure Korrekt_File;
Var
Kb,I,J,N : Byte;
St_Rec : bolnoy;
St_F : Stud_File;
File_Name : String;
Begin
ClrScr;
GotoXY(25,5); Write('Процедура <Korrekt_File>');
GotoXY(20,8); Write('Номер записи -> '); Readln(N);
GotoXY(20,10); Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F,File_Name);
ReSet(St_F);
SEEK(St_F,N-1);
Randomize;
Input_Record(St_Rec);
Write(St_F,St_Rec);
GotoXY(20,15);
WriteLn('Файл с именем ',File_Name,' откорректирован');
GotoXY(20,17);
WriteLn('Номер корректируемый записи = ',N);
Close(St_F);
Wait;
End;
Procedure Dopoln_File;
Var
Kb,I,J,N : Byte;
St_Rec : bolnoy;
St_F : Stud_File;
File_Name : String;
Begin
ClrScr;
GotoXY(25,5); Write('Процедура <Dopoln_File>');
GotoXY(20,8); Write('Количество дополняемых записей N= '); Readln(N);
GotoXY(20,10); Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F,File_Name);
ReSet(St_F);
SEEK(St_F,FileSize(St_F));
Randomize;
For I:=1 To N Do
Begin
Input_Record(St_Rec);
Write(St_F,St_Rec);
End;
GotoXY(20,15);
WriteLn('файл с именем ',File_Name,' дополнен');
GotoXY(20,17);
WriteLn('Количество дополнительных компонент = ',N);
Close(St_F);
Wait;
End;
Procedure Init_File;
Var
Kb,I,J,N : Byte;
St_Rec : bolnoy;
St_F : Stud_File;
File_Name : String;
Begin
ClrScr;
GotoXY(25,5);
Write('Процедура
<Init_File>');
GotoXY(20,8);
Write('Количество компонент N= '); Readln(N);
GotoXY(20,10);
Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F, File_Name);
ReWrite(St_F);
For I:=1 To N Do
Begin
Input_Record(St_Rec);
Write(St_F,St_Rec);
End;
GotoXY(20,15);
WriteLn('файл с именем ',File_Name,' создан');
GotoXY(20,17);
Writeln('Количество компонент = ',N);
Close(St_F);
Wait;
End;
Procedure Output_Monitor(N:Byte;St_Mas:Stud_Mas;Name:String);
Var
I:Byte;
St_Rec:bolnoy;
Begin
ClrScr;
GotoXY(20,2);
Write(Name);
WriteLn; WriteLn;
For I:=1 To N Do
Begin
With St_Mas[I] Do
WriteLn(I:5,FIO:15,nom_palaty:5,osn_d:12,vrach:17,date: 15,naz:10);
End;
Wait;
End;
Procedure Output_File;
Var
I,N:Byte;
St_Rec:bolnoy;
St_F:Stud_File;
St_Mas:Stud_Mas;
File_Name,Name:String;
Begin
ClrScr;
GotoXY(25,5); Write('Процедура <Output_File>');
{ReadLn;}
GotoXY(20,10); Write('Имя файла -> ');
{ReadLn;}
ReadLn(File_Name);
{ReadLn;}
Assign(St_F,File_Name);
ReSet(St_F);
I:=0;
While Not EOF(St_F) Do
Begin
INC(I);
Read(St_F,St_Rec);
St_Mas[I]:=St_rec;
End;
N:=I;
Wait;
Name:='Содержимое файла '+File_Name;
Output_Monitor(N,St_Mas,Name);
Close(St_F);
End;
Procedure Delete_Record;
Var
St_F:Stud_File;
File_Name:String;
I,K,L,M,N,Num:Byte;
St_Rec,Buf:bolnoy;
St_Mas,St_Mas1:Stud_Mas;
Sravn:Boolean;
Nomer:Byte;
Name:String;
Begin
ClrScr;
GotoXY(25,5);
Write('Процедура <Delete_Record>');
GotoXY(20,8);
Write('Номер записи которую хотите удалить= '); Readln(Num);
GotoXY(20,10);
Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F, File_Name);
ReSet(St_F);
I:=0;
While Not EOF(St_F) Do
Begin
INC(I);
Read(St_F,St_Rec);
St_Mas[I]:=St_rec;
End;
N:=I;
close(St_f);
Rewrite(st_f);
for i:=Num to N do
St_Mas[i]:=St_Mas[i+1];
for i:=1 to N-1 do
begin
St_rec:=st_mas[i];
Input_record(st_rec);
Write(St_F,St_rec);
end;
GotoXY(20,15);
WriteLn('Запись с номером ',Num,' удалена');
Close(St_F);
Wait;
End;
Procedure Change_ward;
Var
St_F:Stud_File;
File_Name:String;
I,K,L,M,N:Byte;
St_Rec,Buf:bolnoy;
St_Mas:Stud_Mas;
Sravn:Boolean;
Nomer:Byte;
Name:String;
Begin
ClrScr;
GotoXY(25,5); Write('Процедура <Change_ward>');
GotoXY(20,8); Write('Номер больного -> '); Readln(N);
GotoXY(20,10); Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F,File_Name);
ReSet(St_F);
SEEK(St_F,N-1);
St_rec.nom_palaty:=random(10)+1;
Write(St_F,St_Rec);
GotoXY(20,15);
WriteLn('Номер палаты больного с номером ', N,' изменен');
Close(St_F);
Wait;
End;
Procedure Change_doctor;
Var
St_F:Stud_File;
File_Name:String;
I,K,L,M,N:Byte;
St_Rec,Buf:bolnoy;
St_Mas:Stud_Mas;
Sravn:Boolean;
Nomer:Byte;
Name:String;
Begin
ClrScr;
GotoXY(25,5); Write('Процедура <Change_ward>');
GotoXY(20,8); Write('Номер больного -> '); Readln(N);
GotoXY(20,10); Write('Имя файла -> '); Readln(File_Name);
ASSIGN(St_F,File_Name);
ReSet(St_F);
SEEK(St_F,N-1);
Randomize;
St_rec.vrach:=F_I_O_doctor;
Write(St_F,St_Rec);
GotoXY(20,15);
WriteLn('Номер палаты больного с номером ', N,' изменен');
Close(St_F);
Wait;
End;
Procedure Menu_Obrabotka;
Var
Rez:Char;
Begin
While True Do
Begin
ClrScr;
GotoXY(25,8); Write('М Е Н Ю обработка');
GotoXY(20,10); Write('1. Вывод содержимого файла');
GotoXY(20,12); Write('2. Удаление сведений о заданном больном');
GotoXY(20,14); Write('3. Изменение номера палаты для заданного больного');
GotoXY(20,16); Write('4. Изменение лечащего врача для заданного больного');
GotoXY(20,18); Write('Выход');
GotoXY(23,20); Write(' Р Е Ж И М -> ');
Rez:=ReadKey;
Case Rez Of
'1' : Output_File;
'2' : Delete_Record;
'3' : Change_ward;
'4' : Change_doctor;
'5' : Exit;
End;
End;
End;
Procedure Menu;
Var
Rez:Char;
Begin
While True Do
Begin
ClrScr;
GotoXY(30,8); Write('М Е Н Ю');
GotoXY(20,10); Write('1. Инициализация файла записей');
GotoXY(20,12); Write('2. Дополнение файла');
GotoXY(20,14); Write('3. Корректировка файла');
GotoXY(20,16); Write('4. МЕНЮ обработка');
GotoXY(20,18); Write('5. Выход');
GotoXY(23,20); Write(' Р Е Ж И М -> ');
Rez:=ReadKey;
Case Rez Of
'1' : Init_File;
'2' : Dopoln_File;
'3' : Korrekt_File;
'4' : Menu_Obrabotka;
'5' : Exit;
End;
End;
End;
Begin
Menu;
End.