Структурная диаграмма и спецификация программного комплекса. Данные для тестирования программного комплекса, страница 16

write('Введите месяц (в формате ММ): '); readln(test);

val(test,mm,code);

until code=0;

if (mm<1) or (mm>12) then

begin

errors(2); flag:=false;

end; {if (mm<1) or (mm>12)}

until(flag);

repeat {ввод года с проверкой правильности}

flag:=true;

repeat

top(52); {вывод заголовка окна}

write('Введите год (в формате ГГГГ): '); readln(test);

val(test,gggg,code);

until code=0;

if (gggg<curyear-25) or (gggg>curyear) then

begin

errors(3); flag:=false;

end; {if (gggg<curyear-25) or (gggg>curyear)}

until(flag);

assign(fildata, filename);

reset(fildata);

s:=filesize(fildata); {определение количества записей в файле базы данных}

for j:=1 to 5 do educ[j]:=0;

comp:=0;

for i:=0 to s-1 do {расчет общего числа соискателей за указанный месяц}

begin               {и числа соискателей по каждому виду образования}

seek(fildata, i);

read(fildata, buf);

if (buf.month=mm) and (buf.year=gggg) then

begin

case buf.edu of

1: educ[1]:=educ[1]+1;

2: educ[2]:=educ[2]+1;

3: educ[3]:=educ[3]+1;

4: educ[4]:=educ[4]+1;

5: educ[5]:=educ[5]+1;

end; {case buf.edu}

comp:=comp+1;

end; {if (buf.month=mm) and (buf.year=gggg)}

end; {for i:=0 to s-1}

close(fildata);

if comp>0 then for j:=1 to 5 do educp[j]:=(educ[j]/comp)*100;

windows(9, 3, 71, 22, 1); textbackground(12);

for x:=9 to 71 do

begin

gotoxy(x, 4); write(' ');

end; {for x:=9 to 71}

gotoxy(33, 4); textcolor(15); write('ОТЧЕТ НОМЕР 5');

textbackground(1); gotoxy(12, 6); write('Доля людей, вставших на учет в ');

case mm of

1: write('январе');

2: write('феврале');

3: write('марте');

4: write('апреле');

5: write('мае');

6: write('июне');

7: write('июле');

8: write('августе');

9: write('сентябре');

10: write('октябре');

11: write('ноябре');

12: write('декабре');

end; {case mm}

write(' ',gggg,' г., по виду'); gotoxy(12, 7); write('образования');

if comp=0 then

begin

gotoxy(12, 9); write('В указанном месяце на учет никто не вставал!');

bottom(21); {вывод строки состояния}

readkey;

end {if comp=0}

else

begin

gotoxy(20, 10);

write('┌─────────────────────┬───────────────┐');

gotoxy(20, 11); write('│   Вид образования   │ Процент людей │');

gotoxy(20, 12);

write('├─────────────────────┼───────────────┤');

for j:=1 to 5 do

begin

gotoxy(20, 12+j); write('│ ');

case j of

1: write('Высшее');

2: write('Среднее специальное');

3: write('Среднее');

4: write('Неполное среднее');

5: write('Начальное');

end; {case j}

gotoxy(42, 12+j); write('│'); gotoxy(49, 12+j); write(educp[j]:3:0,'%');

gotoxy(58, 12+j); write('│');

end; {for j:=1 to 5}

gotoxy(20, 13+j);

write('└─────────────────────┴───────────────┘');

bottom(61); {вывод строки состояния}

readkey;

gd:=VGA; gm:=VGAhi;

initgraph(gd,gm,''); {инициализация графического режима}

if graphresult=grok then

begin

setcolor(15);

outtextxy(40,5,'Диаграмма, отражающая долю вставших на учет людей по видам образования');

outtextxy(190,25,'Месяц:');

case mm of

1: outtextxy(245,25,'январь');

2: outtextxy(245,25,'февраль');

3: outtextxy(245,25,'март');

4: outtextxy(245,25,'апрель');

5: outtextxy(245,25,'май');

6: outtextxy(245,25,'июнь');

7: outtextxy(245,25,'июль');

8: outtextxy(245,25,'август');

9: outtextxy(245,25,'сентябрь');

10: outtextxy(245,25,'октябрь');

11: outtextxy(245,25,'ноябрь');

12: outtextxy(245,25,'декабрь');

end; {case mm}

str(gggg,txty); outtextxy(340,25,'Год: '+txty);

stang:=0; {начальный угол}

for i:=1 to 5 do

begin

if educp[i]<>0 then

begin

ang[i]:=round((educp[i]/100)*360);

setfillstyle(1,i); setcolor(i);

if i=1 then endang:=ang[i]

else

if i<5 then endang:=endang+ang[i]+(360-endang-ang[i]);

pieslice(180,240,stang,endang,140);

stang:=stang+ang[i];

end; {if educp[i]<>0}

setfillstyle(1,i); setcolor(i);

bar(370,90+50*i,380,100+50*i);

perc:=round(educp[i]);

str(perc,txty);

setcolor(15);

case i of

1: outtextxy(390,92+50*i,'высшее ('+txty+'%)');

2: outtextxy(390,92+50*i,'среднее специальное ('+txty+'%)');

3: outtextxy(390,92+50*i,'среднее ('+txty+'%)');