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
| Program LAB7_2;
Program LAB7_2;
Uses CRT;
Type {объявление типа запись zap}
ZAP = record
S: string[10]; {фамилия}
D: string[10]; {должность}
O: real; {оклад}
end;
Var
F: file of ZAP; {файловая переменная}
M: array [1..100] of ZAP; {массив}
i,n: integer; {i-индекс элемента массива ,n-количество записей, счётчик}
p,h,j,oklad: string; {p-путь к файлу,h-переменная, хранящая символы
строки фамилия,j-переменная, хранящая символы
строки должность,oklad- величина оклада в строковом виде}
Z: zap; {запись}
c: char; {параметр процедуры readkey}
tmp: string[10]; {признак окончания дополнения файла}
Procedure VMF; {процедура ввода, записи в массив и записи из массива в файл данных }
Begin
Writeln('+++++++++++++++++++++++++++');
Writeln('Создание списка сотрудников');
Writeln('+++++++++++++++++++++++++++');
Writeln('Введите количество создаваемых записей n=');
Readln(n);
Writeln;
Assign(F,p); {Связь с файлом по пути р}
Rewrite(F); {Открытие файла для записи}
For i:=1 to n do {цикл заполнения массива}
With M[i] do {обращение к записи}
Begin
Writeln('Сотрудник');
Write('Фамилия: ');
Readln(S);
Write('Должность: ');
Readln(D);
Write('Оклад: ');
Readln(O);
Write(F,M[i]); {запись элементов массива в файл}
end;
Close(F); {Завершение действий с файлом}
end;
Procedure Dop; {процедура дополнения файла}
Begin
Writeln('+++++++++++++++++++++++++++++');
Writeln('Дополнение списка сотрудников');
Writeln('+++++++++++++++++++++++++++++');
Writeln;
Assign(F,p);
Reset(F); {Открытие файла для чтения}
n := 0;
Repeat {Цикл чтения из файла и записи массива}
n := n+1;
Read(F,Z); {чтение записей из файла}
M[n] := Z {запись в массив}
Until Eof(F); {процедура, возвращающая значение истины, если достигнут
конец файла}
Close(f);
Rewrite(f); {открытие файла для записи}
Repeat {цикл записи новых данных в массив и добавления их в ранее
созданный файл}
Write('Введите фамилию или * (признак окончания ввода): ');
Readln(tmp);
if tmp<>'*' then
Begin
n:= n+1;
With M[n] do
begin
S := tmp;
Write('Должность: ');
Readln(D);
Write('Оклад: ');
Readln(O);
end;
end;
Until tmp = '*' ;
For i:=1 to n do Write(F,M[i]); {запись массива в файл}
Close(f);
end;
Procedure ChV; {процедура чтения из файла и вывода на экран списка}
Begin
Writeln(' +++++++++++++++++++++++');
Writeln(' + Список сотрудников +');
Writeln(' +++++++++++++++++++++++');
Assign(f,p);
{$I-} { отключение автоматического контроля }
Reset (F);
{$I+} { включение автоматического контроля }
if IoResult <> 0 then { возникла ошибка! }
begin
Writeln('Ошибка при открытии файла для чтения');
Writeln('Работа будет закончена.');
Writeln;
Writeln('Нажмите Enter ...');
Readln;
Exit {Выход из процедуры}
end;
Writeln;
Writeln('╔══════════════════╤═══════════════════╤══════════════╗');
Writeln('║ │ │ ║');
Writeln('║ Фамилия │ Должность │ Оклад ║');
Writeln('║ │ │ ║');
Writeln('╟──────────────────┼───────────────────┼──────────────╢');
Repeat {цикл чтения из файла и вывода на экран записей в таблицу}
Read(F,Z);
h := z.s + ' ';
j := z.d + ' ';
Str(z.o:5:2,oklad);
oklad :=' '+oklad;
h:= Copy(h, 1,10);
j:= Copy(j, 1,10);
oklad:= Copy(oklad, Length(oklad)-6,7);
Writeln('║ ',h,' │ ',j,' │ ',oklad,' ║');
Until Eof(F);
close(F);
Writeln('╚══════════════════╧═══════════════════╧══════════════╝');
end;
Begin {Начало основной программы}
clrscr;
Writeln;
Readln;
clrscr;
Repeat {Цикл, позволяющий создать несколько списков в файлах
с разными именами}
Writeln('Укажите путь к файлу и его имя: ');
Readln(p);
Writeln;
VMF; {вызов процедуры ввода, записи в массив и из массива в файл данных}
writeln('Закончить ввод списков ? (Y)');
Writeln;
c:=readkey;
until (c = #89) or (c= #121) or (c=#173) or (c=#141);
clrscr;
Repeat {Цикл, позволяющий дополнять списки, сохраненные в файлах
с разными именами}
Writeln('Укажите путь к файлу, который нужно дополнить, и его имя: ');
Readln(p);
Dop; {вызов процедуры дополнения файла}
writeln('Закончить дополнение списка? (Y)');
Writeln;
c:=readkey;
until (c = #89) or (c= #121) or (c=#173) or (c=#141);
clrscr;
Repeat {Цикл, позволяющий читать списки из файлов с разными именами}
Writeln('Какой файл прочитать? Укажите путь к файлу и его имя: ');
Readln(p);
ChV; {вызов процедуры чтения из файла и вывода на экран списка}
writeln('Закончить чтение указанного файла? (Y)');
c:=readkey;
until (c = #89) or (c= #121) or (c=#173) or (c=#141);
Writeln('Для выхода из программы нажмите любую клавишу');
Readkey;
end. |