Код:
uses crt,graph,dos;
var
gdriver,gmode:integer;
gd, gm: Integer;
par: array[1..8, 1..3] of real;
ribs: array[1..12, 1..2] of integer;
i: integer;
ch: char;
corner : real;
a,b,c,d,j,i1,p,u:integer;
a_1,b_1,c_1:integer;
student:text;
e:char;
mas:array [1..100] of string;
mas_str:array[1..6] of string;
nz:array [1..6] of string;
label st,gr,add,spis,red,add_1;
procedure draw;
var
x1, x2, y1, y2: integer;
ver1, ver2: integer;
begin
for i := 1 to 12 do begin
ver1 := ribs[i,1];
ver2 := ribs[i,2];
x1 := round(par[ver1,1])+320;
y1 := 240-round(par[ver1,2]);
x2 := round(par[ver2,1])+320;
y2 := 240-round(par[ver2,2]);
line(x1,y1,x2,y2);
end;
end;
procedure turnOX(corner: real);
var
y,z: real;
begin
for i:=1 to 8 do Begin
y:=par[i,2];
z:=par[i,3];
par[i,2]:=y*cos(corner)-z*sin(corner);
par[i,3]:=y*sin(corner)+z*cos(corner);
end;
end;
procedure turnOY(corner: real);
var
x,z: real;
begin
for i:=1 to 8 do begin
x:=par[i,1];
z:=par[i,3];
par[i,1]:=x*cos(corner)+z*sin(corner);
par[i,3]:=-x*sin(corner)+z*cos(corner);
end;
end;
procedure turnOZ(corner: real);
var
x,y: real;
begin
for i:=1 to 8 do begin
x:=par[i,1];
y:=par[i,2];
par[i,1]:=x*cos(corner)-y*sin(corner);
par[i,2]:=x*sin(corner)+y*cos(corner);
end;
end;
begin
st: clrscr;
gdriver:= detect;
initgraph (gdriver,gmode,'');
setcolor (green);
a:=238; b:=32; c:=378; d:=53;
while e<>#27 do begin
cleardevice;
clearviewport;
rectangle (1,1,639,479);
outtextxy (240,40,'1)');
outtextxy (260,40,'Graphics');
outtextxy (240,60,'2)');
outtextxy (260,60,'Add student');
outtextxy (240,80,'3)');
outtextxy (260,80,'Student list');
outtextxy (240,100,'4)');
outtextxy (260,100,'Exit');
rectangle (a,b,c,d);
e:=readkey;
if e=#80 then begin if b < 92 then begin
b:=b+20; d:=d+20;
end;
end;
if e = #72 then begin b:=b-20; d:=d-20;
if b<32 then begin b:=32; d:=53;
end;
end;
if e=#13 then
if b=92 then begin closegraph; end else if b=32 then goto gr else
if b =52 then goto add else if b = 72 then goto spis;
e:=#0;
end;
gr: clearviewport;
e:=#0;
while e =#0 do begin
c_1:=15;
begin
par[1,1]:=0; par[1,2]:=0; par[1,3]:=0;
par[2,1]:=0; par[2,2]:=110; par[2,3]:=0;
par[3,1]:=175; par[3,2]:=110; par[3,3]:=0;
par[4,1]:=175; par[4,2]:=0; par[4,3]:=0;
par[5,1]:=0; par[5,2]:=0; par[5,3]:=150;
par[6,1]:=0; par[6,2]:=110; par[6,3]:=150;
par[7,1]:=175; par[7,2]:=110; par[7,3]:=150;
par[8,1]:=175; par[8,2]:=0; par[8,3]:=150;
ribs[1,1]:=1; ribs[1,2]:=2;
ribs[2,1]:=2; ribs[2,2]:=3;
ribs[3,1]:=3; ribs[3,2]:=4;
ribs[4,1]:=4; ribs[4,2]:=1;
ribs[5,1]:=5; ribs[5,2]:=6;
ribs[6,1]:=6; ribs[6,2]:=7;
ribs[7,1]:=7; ribs[7,2]:=8;
ribs[8,1]:=8; ribs[8,2]:=5;
ribs[9,1]:=1; ribs[9,2]:=5;
ribs[10,1]:=2; ribs[10,2]:=6;
ribs[11,1]:=3; ribs[11,2]:=7;
ribs[12,1]:=4; ribs[12,2]:=8;
gd := VGA;
gm := VGAHi;
InitGraph(gd, gm, '../bgi');
If GraphResult <> grOk then
Halt(1);
turnOX(pi/12);
turnOY(pi/12);
turnOZ(pi/12);
While ch<>#27 do begin
ClearDevice;
Draw;
OuttextXY(10,450,'Press <1>-<6> for rotation, <7>-<9> for reflection');
OuttextXY(10,465,'Press <0> to Exit');
ch:=readkey;
Case ch Of
'1': turnOX(pi/15);
'4': turnOX(-pi/15);
'2': turnOY(pi/15);
'5': turnOY(-pi/15);
'3': turnOZ(pi/15);
'6': turnOZ(-pi/15);
'0': goto st;
end;
end;
closegraph;
end;
add: closegraph;
mas[1]:='Name';
mas[2]:='Surname';
mas[3]:='date of birth';
mas[4]:='Group';
mas[5]:='Speciality';
mas[6]:='Course';
i1:=0;
e:=#0;
while e<>#32 do begin
inc(i1);
writeln ('Enter the ',mas[i1]);
readln (mas_str[i1]);
assign (student,'student.txt');
append (student);
writeln (student, mas_str[i1]);
close (student);
if i1=6 then begin i1:=0;
writeln ('Added');
writeln ('Continue? (Y or N)');
readln (e);
if e='n' then goto st;
end;
end;
spis: closegraph;
e:=#0;
i1:=0;
assign (student,'student.txt');
reset (student);
writeln ('Name | Surname | Date of birth | Group | Speciality | Course');
while not EOF(student) do begin
inc (i1);
readln (student, mas_str[i1]);
write (mas_str[i1],' | ');
if i1=6 then begin i1:=0;
writeln ('');
end;
end;
close (student);
writeln ('');
writeln ('Back to press <Enter>');
e:=readkey;
goto st;
end;
end.