Цитата:
Сообщение от andrew_ryaba
Я попытался сделать хотя бы только пункт а, но из этого ничего не вышло - не работает...
|
Так, ну поработал я в Вашей программой. Кое-что исправил, кое-что убрал, кое-что добавил. Но не всё. В частности:
1. Вывод файла - это как? Вывод записи - какой? Есть же пункты поиска, там и запись выводится. Заменил эти два пункта одним "Вывод записей". Выводится вся информация по семьям всех рабочих.
2. Что за "диаграмма"? В чем ее строить? Графика? Но какая? Borland? ABC? Delphi? И что должна показывать диаграмма? Пункт удалил.
Кроме того, убрал эти CRT-шные рюшечки типа цвета и размера окна. Нужно будет - сами восстанавливайте. По мне, так дурь лишняя.
Теперь об ошибках.
1. Вот Вы в исходном текстовом файле лепите в одну строку ФИО (string) и числовые данные. Такие строки, в принципе, обработать можно, но надо мало-мало на уши встать, объясняя транслятору, где, собственно, заканчивается строка и начинаются числа. Гораздо проще выделить ФИО в отдельную строку, тогда и проблем не будет, т.е. исходный файл примет вид:
Код:
Ivanov Ivan Ivanych
2 2004 3 3 2005 5 5
Sidorov Semen Semenych
1 2000 4 4
Petrov Petr Petrovich
2 1990 12 3 1999 7 27
2. Вот Вы в процедурах пишете:
Var x:string;
begin
...
read(x);
...
end.
Грубейшая ошибка! Считывание строк с консоли осуществляется ТОЛЬКО оператором ReadLn, никаких Read!!! Запомните на будущее.
Ну ладно, вот некий вариант, если поможет - буду рад. Естественно, оно отлажено и протестировано:
Код:
uses crt;
const
nowadays = 2013;
n = 10;
type
datar = record
den: 1..31;
mes: 1..12;
god: 1900..nowadays;
end;
rabotnic = record
fio: string;
koldet: 1..10;
data: array [1..10] of datar;
end;
var
ftext: text;
ftip: file of rabotnic;
i,pMax: Byte;
p: boolean;
c:Char;
procedure Vvod;
var t:rabotnic;
begin
reset(ftext);
rewrite(ftip);
while not eof(ftext) do
with t do
begin
readln(ftext, fio);
read(ftext,koldet);
for i:=1 to koldet do
read(ftext, data[i].god, data[i].mes, data[i].den);
readln(ftext);
write(ftip, t);
end;
close(ftext);
close(ftip);
end;
procedure WrInf(t:rabotnic);
begin
writeln('FIO: '+t.fio);
writeln('Kolichestvo detey: ',t.koldet);
write('data: ');
for i:=1 to t.koldet do
write(t.data[i].den,'.',t.data[i].mes,'.',t.data[i].god,' ');
writeln;
end;
procedure SearchFIO;
var
j:byte;
x:string;
b:rabotnic;
begin
j:= 0;
Reset(ftip);
writeln('vvedite familiyu, imya , otchestvo');
readln(x);
while not Eof(ftip) do
begin
read(ftip,b);
if (b.fio=x) then
begin
WrInf(b);
Inc(j);
end;
end;
if j=0 then writeln('nichego ne naideno');
writeln;
end;
procedure DelRec;
var
j:byte;
x:string;
b:rabotnic;
begin
j:= 0;
Rewrite(ftext);
Reset(ftip);
writeln('vvedite familiyu, imya , otchestvo');
readln(x);
while not Eof(ftip) do
begin
read(ftip,b);
with b do
begin
if (fio<>x) then
begin
Writeln(ftext,fio);
Write(ftext,koldet,' ');
for i:=1 to koldet do
with data[i] do
write(ftext,god,' ',mes,' ',den,' ');
writeln(ftext);
end
else inc(j);
end;
end;
Close(ftip);
Close(ftext);
Vvod;
if j=0 then writeln('nichego ne naideno');
end;
procedure AddRec;
var
b:rabotnic;
x:string;
Ndet,d,m:byte;
y:word;
begin
Append(ftext);
writeln('vvedite familiyu, imya , otchestvo');
readln(x);
Writeln(ftext,x);
Write('Vvedite kolichestvo detey: ');
Readln(Ndet);
Write(ftext,Ndet,' ');
for i:=1 to Ndet do
begin
write('rebenok N',i,' (dd mm yyyy): ');
readln(d,m,y);
write(ftext,y,' ',m,' ',d,' ');
end;
writeln(ftext);
Close(ftext);
writeln;
Vvod;
end;
procedure SearchNdet;
var
Ndet,j:byte;
b:rabotnic;
begin
j:=0;
Reset(ftip);
write('vvedite kolichestvo detey ');
readln(Ndet);
while not Eof(ftip) do
begin
read(ftip, b);
if (b.koldet=Ndet) then
begin
WrInf(b);
Inc(j);
end;
end;
if j=0 then writeln('nichego ne naideno');
writeln;
end;
Procedure MaxPos;
var
t:rabotnic;
k:Byte;
NameMax: string;
begin
reset(ftip);
pMax:=0;
repeat
read(ftip,t);
k:=0;
for i:=1 to t.koldet do
if (nowadays - t.data[i].god)<18 then inc(k);
writeln('Rabochiy ', t.fio:40,' ',k, ' posobiy(a)');
if k>pMax then
begin
pMax:=k;
NameMax:=t.fio;
end;
until EoF(ftip);
Close(ftip);
writeln('Max kol posobij = ',pMax,' u ', NameMax);
end;
Procedure GlobalInf;
var
t:rabotnic;
begin
reset(ftip);
repeat
read(ftip,t);
WrInf(t);
until EoF(ftip);
Close(ftip);
Writeln;
end;
begin
ClrScr;
assign(ftext, 'record.txt');
assign(ftip, 'ftip.rec');
Vvod;
MaxPos;
Repeat
writeln;
p:=false;
writeln('1=poisk zapisi po fio');
writeln('2=poisk zapisi po kolichestvu detey');
writeln('3=vivod zapisey');
writeln('4=udalenie zapisey po FIO');
writeln('5=dobavlenie novoy zapisi v file');
writeln('6=EXIT');
c:=ReadKey;
writeln;
case C of
'1': SearchFIO;
'2': SearchNdet;
'3': GlobalInf;
'4': DelRec;
'5': AddRec;
'6': p:=true;
end;
Until p;
end.