1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
| program Registratura;
uses
crt;
type
Tlocation =record
Ftown:string[15];
FStreat:string[20];
Fhouse:byte;
Fflat:byte;
end;
type
TChild = record
FSurname: string[15];
Loc:Tlocation;
gender:char;
KDP:word;
end;
var
Child: array[1..100] of TChild;
Zap: TChild;
f: file of TChild;
vibor: byte;
fami: string[30];
n, t: integer;
{------------------------------------------------------------------------------------}
procedure vvod;
var
i: integer;
begin
clrscr;
Assign(f, 'rebenok.dat');
rewrite(f);
Write('Введите количество детей: ');
readln(n);
for i := 1 to n do
begin
writeln('Введите', ' ', i, ' ', 'ребенка ');
with Zap do
begin
write('|Введите фамилию ребенка................|- '); readln(Fsurname);
write('|Введите город...........................|- '); readln(Loc.Ftown);
write('|Введите название улицы.................|- '); readln(Loc.FStreat);
write('|Введите номер дома......................|- '); readln(Loc.Fhouse);
write('|Введите номер квартиры..................|- '); readln(Loc.Fflat);
write('|Введите пол ребенка(м/ж)................|- '); readln(gender);
write('|Введите количество дней посещения...|- '); readln(KDP);
writeln;
write(f, Zap);
end;
end;
close(f);
end;
{----------------------------------------------------------------------------------------}
procedure chten;
var
i: integer;
begin
clrscr;
assign(f, 'rebenok.dat');
reset(f);
i := 1;
while not (eof(f)) do
begin
read(f, Child[i]);
writeln('____________________________________________________________________________');
writeln(i,Child[i].FSurname:15,'|',Child[i].Loc.Ftown:8,'|',Child[i].Loc.FStreat:8,'|',Child[i].Loc.Fhouse:12,'|',Child[i].Loc.Fflat:10,'|',Child[i].gender:5,'|',Child[i].KDP:3,'|');
i := i + 1;
end;
close(f);
n := i - 1;
end;
{-------------------------------------------------------------------------------------------------------------------------------------------}
procedure dobav;
var
i: integer;
begin
clrscr;
rewrite(f);
for i := 1 to n do
write(f, Child[i]); //Записываем в массив записей
Writeln('Введите ', ' ', n + 1, ' ', 'ребенка');
with Zap do
begin
write('|Введите фамилию ребенка................|- '); readln(Fsurname);
write('|Введите город...........................|- '); readln(Loc.Ftown);
write('|Введите название улицы.................|- '); readln(loc.FStreat);
write('|Введите номер дома......................|- '); readln(Loc.Fhouse);
write('|Введите номер квартиры..................|- '); readln(Loc.Fflat);
write('|Введите пол ребенка(м/ж)................|- '); readln(gender);
write('|Введите количество дней посещения...|- '); readln(KDP);
writeln;
write(f, Zap);
end;
close(f);
end;
{-------------------------------------------------------------------------------------------------------------------------------------------}
procedure delete;
var
i: integer;
begin
clrscr;
i := 1;
assign(f, 'rebenok.dat');
reset(f);
while not eof(f) do
begin
read(f, Child[i]);
i := i + 1
end;
close(f);
write('Выберите номер удаляемой записи которую вы хотите: ');
readln(n);
reset(f);
seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
read(f, Child[i]);
seek(f, n - 1); { Ставим указатель перед удаляемым файлом }
write(f, Child[i]);{ Записываем конечный компонент вместо удаляемого }
{ убираем последний элемент файла }
seek(f, filesize(f) - 1);{ Ставим указатель перед последним компонентом }
truncate(f);{ Отсекаем последний компонент }
Writeln('Удаление прошло успешно!!!');
end;
{----------------------------------------------------------------------------------------------------------------------}
procedure poisk;
begin
clrscr;
write('Введите фамилию ребенка: ');
readln(fami);
reset(f);
t := 0;
while not eof(f) do
begin
read(f, Zap);
if Zap.FSurname = fami then{если фамилия совпала}
begin
t := 1;{фиксируем}
writeln('Найдент ребенок с такой фамилией!!!');
Writeln('Выводим запись');
writeln(Zap.FSurname:10,'|',Zap.Loc.Ftown:8,'|',Zap.Loc.FStreat:8,'|',Zap.Loc.Fhouse:12,'|',Zap.Loc.Fflat:10,'|',Zap.gender:5,'|',Zap.KDP:15,'|');
end;
end;
if t = 0 then writeln('Такого ребенка нету!!!');{если нет совпадений}
close(f);
end;
{------------------------------------------------------------------------------------------------------------------------------------------}
procedure ill_child;
var i:integer;
min_d:integer;
maxid:integer;
begin
ClrScr;
maxid:=1;
min_d:=365;
for i:=2 to n do
begin
if (Child[i].KDP<min_d) then
begin
maxid:=i;
min_d:=Child[i].KDP;
end;
end;
if min_d=365 then writeln('Детей нет')
else
writeln('Самый больной ребенок: '+Child[maxid].FSurname);
end;
//---------------------------------------------------------
procedure disease;//процедура болезнь
var i,s_day_mal,s_day_dev:integer;
begin
s_day_mal:=0;
s_day_dev:=0;
for i:=1 to n do begin
if Child[i].gender='м' then
s_day_mal:=s_day_mal+Child[i].KDP
else s_day_dev:=s_day_dev+Child[i].KDP;
end;
if s_day_dev<s_day_mal then writeln('Девочки болеют больше');
if s_day_dev>s_day_mal then writeln('Мальчики болеют больше');
if s_day_dev=s_day_mal then writeln('Девочки и мальчики болеют одинаково');
end;
procedure streat;
var str:string[35];
i:integer;
Key:boolean;
begin
Write('Введите название улицы: ');
Readln(str);
//Key:=true;
for i:=1 to n do
if Pos(Child[i].Loc.FStreat,str)>0 then
begin
writeln(Child[i].FSurname);
Key:=true;
end;
if (Key=false)or(Pos(Child[i].Loc.FStreat,str)<>0)then
begin
writeln('Дети не проживают на этой улице');
end;
end;
begin
repeat
Writeln('Выбор действия');
Writeln('1-Ввод новых данных');
Writeln('2-Чтение данных');
Writeln('3-Добавление записей');
Writeln('4-Удаление записи');
Writeln('5-Поиск информации');
Writeln('6-Самый больной ребенок');
Writeln('7-Кто больше болеет - мальчики или девочки');
writeln('8-Cписок детей, проживающих на заданной улице');
writeln('9-Выход');
readln(vibor);
case vibor of
1: vvod;
2: chten;
3: dobav;
4: delete;
5: poisk;
6: ill_child;
7:disease;
8:streat;
9:begin
writeln('Нажмите Enter для выхода');
Readln;
exit;
end
else
begin
writeln('Нажмите Enter и повторите ваш ввод');
Readln; end;
end
until (vibor=9);
end. |