MỤC LỤC
Lời nói đầu 1
Chương I : các khái niệm cơ bản được sử dụng trong chương trình 2
I. Màn hình đồ hoạ 2
II. Các hàm đồ hoạ 2
Chương II : Thiết kế chương trình 4
Phần I : Các modul chính trong chương trình. 4
Phần II : hai thủ tục quan trọng trong chương trình 5
I-Thủ tục Vephimnhan(phim :char,kieuve:integer) 5
II – Thủ tục GoPhim : 7
Chương III : Phần thể hiện chương trình 9
Kết luận 23
Tài liệu tham khảo: 24
25 trang |
Chia sẻ: maiphuongdc | Lượt xem: 1496 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng một chương trình kiểm tra đánh máy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
huËt cã vÞ trÝ ®Æc biÖt quan träng bëi hÖ thèng th«ng tin kinh tÕ x· héi cã chuÈn x¸c nhanh nh¹y, ®¸p øng ®îc mäi yªu cÇu ®iÒu hµnh th× c«ng t¸c qu¶n lý míi ®¹t hiÖu qu¶ thiÕt thùc. Ngîc l¹i, th«ng tin thiÕu, th«ng tin chËm trÔ vµ kh«ng chuÈn x¸c sÏ kh«ng chØ lµm ¶nh hëng ®Õn c«ng cuéc ph¸t triÓn kinh tÕ x· héi tríc m¾t mµ ®«i khi cßn g©y t¸c h¹i cho c¶ mét thêi kú rÊt dµi.
V× vËy, nhu cÇu cÊp thiÕt ®Æt ra cho nh÷ng ngêi lµm c«ng t¸c vÒ c«ng nghÖ th«ng tin lµ ph¶i tæ chøc mét hÖ thèng th«ng tin ®iÒu hµnh s¾c bÐn, phôc vô kÞp thêi mäi yªu cÇu cña ngêi sö dông.
Do nhu cÇu thùc tÕ ®ßi hái, viÖc nghiªn cøu hÖ thèng th«ng tin kinh tÕ x· héi phôc vô ®iÒu hµnh ph¶i ®îc sím hoµn thµnh vµ ®a vµo thùc tiÔn ¸p dông. Nã sÏ kh¾c phôc ®îc nhiÒu khã kh¨n trong viÖc qu¶n lý vµ xö lý th«ng tin.
Víi viÖc tin häc hãa trong mäi hÖ thèng, c¸c ng«n ng÷ lËp tr×nh ra ®êi ngµy cµng nhiÒu vµ hoµn thiÖn. Ng«n ng÷ Pascal lµ 1 ng«n ng÷ thuËt gi¶i ,cã tÝnh cÊu tróc chÆt chÏ ,s¸ng sña. HiÖn nay Pascal ®· trë thµnh mét trong c¸c ng«n ng÷ phæ biÕn nhÊt ,thÝch hîp víi nhiÒu øng dông khoa häc, kü thuËt, qu¶n ký vµ ®îc coi lµ ng«n ng÷ thÝch hîp nhÊt cho tÊt c¶ mäi ®èi tîng…
X©y dùng mét ch¬ng tr×nh kiÓm tra ®¸nh m¸y m« pháng c¸c kü n¨ng ®¸nh m¸y cña mét ngêi b×nh thêng cho phÐp thùc hiÖn c¸c chøc n¨ng vÒ tèc ®é ®¸nh m¸y cña ngêi ®ã víi c¸c møc ®é khã kh¸c nhau vµ m¸y tÝnh sÏ ®a ra c¸c th«ng tin vÒ sè ký tù ®¸nh ®îc trong mét kho¶ng thêi gian nhÊt ®Þnh. §©y lµ mét bµi tËp vÒ lËp tr×nh nh»m n©ng cao kü n¨ng vÒ lËp tr×nh Turbo Pascal vµ kü n¨ng ®å ho¹.
§Ó hoµn thµnh bµi tËp nµy, t«i ®· tham kh¶o rÊt nhiÒu c¸c tµi liÖu, còng nh ®îc sù híng dÉn tËn t×nh cña c¸c thÇy c« gi¸o trong khoa CNTH, ®Æc biÖt lµ thÇy ThS.Th¸i Thanh Tïng lµ ngêi chÞu tr¸ch nhiÖm híng dÉn chÝnh bµi tËp tùc hµnh tèt nghiÖp cho t«i.Tuy nhiªn trong qu¸ tr×nh lËp tr×nh còng nh thiÕt kÕ ®å ho¹ cßn cã nh÷ng sai sãt nªn t«i rÊt mong ®îc sù gãp ý cña c¸c thÇy c« vµ c¸c b¹n.
Em xin ch©n thµnh c¶m ¬n !
Ch¬ng I : c¸c kh¸i niÖm c¬ b¶n ®îc sö dông trong ch¬ng tr×nh
Trong ch¬ng tr×nh nµy chØ dïng c¸c hµm vµ thñ tôc vÒ ®å ho¹ nªn t«i chØ tr×nh bµy mét sè kh¸i niÖm liªn quan.
I. Mµn h×nh ®å ho¹
Mµn h×nh v¨n b¶n (Text) ®îc thiÕt lËp ®Ó hiÓn thÞ 25 dßng vµ mçi dßng cã thÓ chøa ®îc 80 ký tù.
Mµn h×nh ®å ho¹ ®îc cÊu thµnh tõ mét ma trËn c¸c chÊm ¶nh nhá (Pixel). Sù bè trÝ c¸c Pixel trªn mµn h×nh nh thÕ nµo vµ bao nhiªu ®îc gäi lµ ®é ph©n gi¶i cña mµn h×nh (Resolution).
Do mçi kiÓu mµn h×nh cã c¸ch xö lý riªng nªn ta thiÕt lËp tËp tin ®iÒu khiÓn ®å ho¹ ( *.bgi ë trong th môc ..\BGI) vµ kiÓu ch÷ (Font) ( *.chr ë trong th môc ..\BGI ).
§èi víi mµn h×nh VGA (hiÖn nay phæ biÕn ) th× hÖ to¹ ®é lµ 640 x 480. Cã nghÜa lµ chiÒu ngang cã 640 Pixel, chiÒu däc cã 480 Pixel.
II. C¸c hµm ®å ho¹
Trong ch¬ng tr×nh sö dông rÊt nhiÒu hµm , c¸c hµm nµy ®îc ®Þnh nghÜa trong “graphics.h” ë trong th môc ..\INCLUDE :
Setcolor(...)
Setbkcolor(...)
Setfillstyle(...)
Settextstyle(...)
Setviewport(...)
...
getcolor()
getbkcolor()
...
line(...)
rectangle(...)
bar(...)
bar3d(...)
circle(...)
elippse(...)
...
ch¬ng II : ThiÕt kÕ ch¬ng tr×nh
phÇn I : C¸c modul chÝnh trong ch¬ng tr×nh.
Các module chính trong chương trình bao gồm:
+ Function tg_phut:Word;
+ Ve_Banphim : thủ tục vẽ bàn phím
+ VephimNhan(phim:char;kieuve:integer): thủ tục vè phím được nhấn
+ SinhMa(level:integer):Char: thủ tục sinh một mã phím tuỳ theo mức độ nhất chọn trong chương trình
+ GoPhim : thủ tục thực hiện thao tác gõ một phím và các tính toán bên trong
+ Ketqua : thủ tục hiện kết quả của ths sinh đăng nhập kiêm tra gõ bàn phím. Các kết quả tính toán như sau:
Số ký tự /phút=Số ký tự đánh được trong một phút
Độ chính xác của việc gõ phím: Độ chính xác= Số ký tự chính xác/Số ký tự sinh ra*100
PhÇn II : hai thñ tôc quan träng trong ch¬ng tr×nh
I-Thñ tôc Vephimnhan(phim :char,kieuve:integer)
Thñ tôc nµy dïng ®Ó thùc hiÖn vÏ mét phÝm trªn bµn phÝm khi phÝm nµy ®îc nhÊn.Nªó c¸c phÝm ký tù ®Æc biÖt trªn bµn phÝm ®îc nhÊn .VÝ dô: ,? ,+, \ , ( , ) th× ngoµi phÝm ký tù ,phÝm Shift còng ®îc nhÊn theo.
Thñ tôc nµy ®îc thùc hiÖn nh sau :
Khi ngêi sö dông nhÊn mét phÝm trªn bµn phÝm sÏ sinh ra mét ký tù cña phÝm võa nhÊn .Thñ tôc Vephimnhan sÏ quÐt qua toµn bé c¸c ký tù trªn bµn phÝm vµ kiÓm tra xem ®ã cã ph¶i lµ c¸c phÝm võa ®îc nhÊn kh«ng .Nõu kh«ng ph¶i lµ phÝm ®îc nhÊn th× sÏ kh«ng vÏ l¹i phÝm ®ã.Nõu phÝm ®îc kiÓm tra lµ phÝm nhÊn th× ta sÏ vÏ l¹i phÝm ®ã theo kiÓu vÏ mµ ta ®a vµo .
KiÓu vÏ phÝm ë ®©y ®îc sö dông gåm cã 2 chÕ ®é:
ChÕ ®é phÝm ®ang ®îc nhÊn :phÝm ®ã sÏ bÞ lón xuèng víi mµu kh¸c tÊt c¶ c¸c phÝm kh¸c trªn bµn phÝm .
ChÕ ®é phÝm kh«ng ®îc nhÊn :phÝm ®ã sÏ ®îc vÏ næi vµ cïng mµu víi c¸c phÝm cßn l¹i trªn bµn phÝm
*Ta cã thÓ ®a ra ®o¹n m· Code cña ch¬ng tr×nh nh sau :
Procedure VephimNhan(phim:char;kieuve:integer);
Var
i,j,k,x,y:integer;
xhien,yhien:integer;
Begin
xhp2:=xhp1+3*dr div 2+kc;
yhp2:=yhp1+ds+kc;
xhp3:=xhp1+2*dr+kc;
yhp3:=yhp2+ds+kc;
xhp4:=xhp1+2*dr+2*kc;
yhp4:=yhp3+ds+kc;
xhp5:=xhp1+10*(dr+kc);
yhp5:=yhp1+4*(ds+kc);
xhien:=0;yhien:=0;
{Hang 1}
for k:=1 to 15 do
if (chr(hp1[k])=phim) then
begin
xhien:=xhp1+(k-1)*(dr+kc);
yhien:=yhp1;
end;
{Hang 2}
for k:=1 to 13 do
if(chr(hp2[k])=phim) then
begin
xhien:=xhp2+(k-1)*(dr+kc);
yhien:=yhp2;
end;
{Hang 3}
for k:=1 to 12 do
if(chr(hp3[k])=phim) then
begin
xhien:=xhp3+(k-1)*(dr+kc);
yhien:=yhp3;
end;
{Hang 4}
for k:=1 to 13 do
if(chr(hp4[k])=phim) then
begin
xhien:=xhp4+(k-1)*(dr+kc);
yhien:=yhp4;
end;
{Hang 5}
for k:=1 to 5 do
if(chr(hp5[k])=phim) then
begin
xhien:=xhp5+(k-1)*(dr+kc);
yhien:=yhp5;
end;
if ((phim=#60) or (phim=#62)
or (phim=#63) or (phim=#34) or (phim=#58)) then
if kieuve=1 then
ve_shift(kieuve+1)
else ve_shift(1);
if(phim=#32) then
if kieuve=1 then
ve_space(kieuve+1)
else ve_space(1)
else
if ((ord(phim) in [27,49,50,51,52,53,54,55,56,57,48,45,43,61,8])
or (ord(phim) in [81,87,69,82,84,89,85,73,79,80,91,93])
or (ord(phim) in [65,83,68,70,71,72,74,75,76,59,58])
or (ord(phim) in [90,88,67,86,66,78,77,44,46,39,92,42,47])
or (ord(phim) in [63,60,62,40,41])) then
ve_o(kieuve,xhien,yhien,ds,dr,1);
End;
II – Thñ tôc GoPhim :
§©y lµ thñ tôc chÝnh trong ch¬ng tr×nh gâ bµn phÝm .Thñ tôc nµy sÏ thùc hiÖn chøc n¨ng gâ phÝm ,tÝnh to¸n sè ký tù mµ ch¬ng tr×nh sinh ra,sè ký tù mµ ngêi sö dông gâ chÝnh x¸c ®Ó tõ ®ã ®a ra ®îc tèc ®é gâ phÝm còng nh ®é chÝnh x¸c trong qu¸ tr×nh gâ phÝm cña ngêi sö dông
Thñ tôc GoPhim ®îc thùc hiÖn nh sau :
LÊy m· phÝm ®îc sinh ra th«ng qua thñ tôc sinh m· phÝm “SinhMa(Muc)”
KiÓm tra xem ®ã cã ph¶i lµ phÝm ESC kh«ng ,nÕu ®óng lµ phÝm ESC th× sÏ dõng viÖc gâ phÝm .Ngîc l¹i thñ tôc sÏ chê ngêi sö dông gâ mét phÝm trong mét kho¶ng thêi gian .NÕu qu¸ thêi gian ®ã th× thñ tôc sÏ bá qua vµ sinh mét m· kh¸c .NÕu ngêi sö dông gâ phÝm th× thñ tôc sÏ gäi l¹i thñ tôc Vephimnhan ®Ó vÏ l¹i phÝm võa ®îc nhÊn vµ kiÓm tra xem phÝm nhÊn ®· chÝnh x¸c víi phÝm võa ®îc sinh ra cha .
Qu¸ tr×nh nµy sÏ tiÕp tôc cho ®Õn khi ngêi sö dông nhÊn ESC ®Ó kÕt thóc qu¸ tr×nh gâ phÝm.
*Ta cã thÓ ®a ra ®o¹n m· Code cña ch¬ng tr×nh nh sau:
Procedure GoPhim ;
Var ch:char;
MaDuocSinh:char;
bd,kt:Word;
Begin
Sokytu:=0;SoKyTuSinh:=0;
xchu:=30;ychu:=110;
bd:=tg_phut;
While true do
Begin
MaDuocSinh:=SinhMa(Muc);
VietChu(xchu,ychu,MaDuocSinh);
xchu:=xchu+textwidth('H')+1;
if xchu>=getmaxx-20 then
begin
xchu:=30;
ychu:=ychu+textheight('H')+10;
end;
if ychu>=180 then
begin
xchu:=30;
ychu:=110;
bar(10,80,80+getmaxx-90,170);
Ve_O(1,10,80,100,getmaxx-20,1);
end;
Delay(1000);{Doi go phim va sinh ma}
VephimNhan(Upcase(ch),1);
if keypressed then
begin
ch:=readkey;
if ch=#27 then break;
if ch=#0 then
ch:=readkey;
SoKyTuSinh:=SoKyTuSinh+1;
VephimNhan(Upcase(ch),2);
if upcase(ch)=upcase(MaDuocSinh) then
Sokytu:=Sokytu+1
else
begin
Sokytu:=Sokytu-1;
sound(1000);delay(100);nosound;
end;
end;
End;
kt:=tg_phut;
if (kt-bd)0 then
TS.tocdo:=Sokytu/(kt-bd)
else
TS.tocdo:=0;
if SokytuSinh=0 then
TS.chinhxac:=0
else
TS.chinhxac:=Sokytu/(SokytuSinh*100);
End;
Ch¬ng III : PhÇn thÓ hiÖn ch¬ng tr×nh
PROGRAM GOBANPHIM;
Uses Crt,Dos,Graph;
Const yhp1 :integer=230;
Const xhp1 :integer=30;
Const ds :integer=32; {do sau cua phim}
Const dr :integer=34; {do rong cua phim}
Const kc :integer=5; {khoang cach giu cac phim}
Const xmenu:integer=60; {toa do x cua menu}
Const ymenu:integer=10; {toa do y cua menu}
Const drm :integer=120; {do rong cua 1 o menu}
Const dsm :integer=40; {do sau cua 1 o menu}
Const h1:array[1..15]of string=('ESC','1','2','3','4','5','6','7','8','9','0','-','+','=','<-');
Const hp1:array[1..15] of integer=(27,49,50,51,52,53,54,55,56,57,48,45,43,61,8);
Const h2:array[1..12] of string=('Q','W','E','R','T','Y','U','I','O','P','[',']');
Const hp2:array[1..12] of integer=(81,87,69,82,84,89,85,73,79,80,91,93);
Const h3:array[1..11]of string=('A','S','D','F','G','H','J','K','L',';',':');
Const hp3:array[1..11]of integer=(65,83,68,70,71,72,74,75,76,59,58);
Const h4:array[1..13] of string=('Z','X','C','V','B','N','M',',','.','`','\','*','/');
Const hp4:array[1..13] of integer=(90,88,67,86,66,78,77,44,46,39,92,42,47);
Const h5:array[1..5]of string=('?','','(',')');
Const hp5:array[1..5]of integer=(63,60,62,40,41);
Const mnu:array[1..4]of string=('CHU CAI','CHU CAI & SO','TOAN BO','THOAT');
Type Thisinh=Record
HoTen :string[25];
Tocdo :real;
Chinhxac:real;
End;
Var mh,mode:integer;
tg_doi :integer; {thoi gian doi go mot phim}
chu :array[1..154] of string; {xau in ra de go phim}
machu :array[1..100] of integer;
xchu,ychu:integer; {xchu=30,ychu=160;//vi tri in ra hang chu ngau nhien}
xhp4,yhp4,xhp2,yhp2,xhp3,yhp3,xhp5,yhp5:integer;
Muc :integer;{Muc go phim}
SoKytu :integer;{So ky tu go duoc}
SoKyTuSinh :integer;{So ky tu sinh cua chuong trinh}
TenFile :String;
TS :ThiSinh;
F :text;
{-------------------------------------------------------------}
Function tg_phut:Word;
Var Hour, Minute,Second,Sec100,Timer: Word;
Begin
GetTime(Hour,Minute,Second,Sec100);
Timer:=Hour*60+Minute;
tg_phut:=Timer;
End;
{-------------------------------------------------------------}
Procedure GioiThieu(mau:integer);
Begin
setcolor(15);
settextstyle(1,0,1);
settextjustify(1,1);
outtextxy(getmaxx div 2,25,'VIEN DAI HOC MO HA NOI');
outtextxy(getmaxx div 2,45,'KHOA CNTH');
setcolor(mau);
settextstyle(1,0,4);
outtextxy(getmaxx div 2,150,'BAI TAP TOT NGHIEP');
settextstyle(1,0,1);
outtextxy(getmaxx div 2 -165,190,'NOI DUNG:');
line(getmaxx div 2-210,202,getmaxx div 2-120,202);
settextstyle(1,0,1);
outtextxy(getmaxx div 2,210,'lap chuong trinh tap go ban phim don gian');
outtextxy(getmaxx div 2,280,'Ngon ngu lap trinh: Turbo Pascal');
outtextxy(getmaxx div 2,getmaxy-120,'Giao vien huong dan: thay ThS.Thai Thanh Tung');
outtextxy(getmaxx div 2,getmaxy-100,'Sinh vien: Nguyen Tran Tuan Anh ');
outtextxy(getmaxx div 2-30,getmaxy-80,'Lop: 00B3');
if(mau=7) then setcolor(mau)
else setcolor(4);
outtextxy(getmaxx div 2,getmaxy-10,'Nhan phim Enter de tiep tuc.....');
{tra ve kieu chu default}
settextstyle(0,0,0);
settextjustify(0,0);
End;
{-------------------------------------------------------------}
Procedure Ve_O(i,x1,y1,ds1,dr1,dam:integer);
Begin
If(dam=0) then setlinestyle(0,1,1)
Else setlinestyle(0,1,3);
If (i=1) then
Begin {to mau cho phim}
setlinestyle(0,1,3);
setcolor(1);
rectangle(x1,y1,x1+dr1,y1+ds1);
setfillstyle(1,7);
floodfill(x1+10,y1+8,1);
setcolor(15);
line(x1,y1,x1+dr1,y1);
line(x1,y1,x1,y1+ds1);
setcolor(8);
line(x1,y1+ds1,x1+dr1,y1+ds1);
line(x1+dr1,y1,x1+dr1,y1+ds1);
End
Else
Begin
setcolor(8);
line(x1,y1,x1+dr1,y1);
line(x1,y1,x1,y1+ds1);
setcolor(15);
line(x1,y1+ds1,x1+dr1,y1+ds1);
line(x1+dr1,y1,x1+dr1,y1+ds1);
setcolor(1);
{to mau cho cac phim khi phim duoc chon}
setlinestyle(0,1,1);
rectangle(x1,y1,x1+dr1,y1+ds1);
setfillstyle(1,14);
floodfill(x1+10,y1+8,1);
End;
setcolor(1);
setlinestyle(0,1,1);
End;
{-------------------------------------------------------------}
Procedure ve_tab(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1;
y:=yhp1+ds+kc;
ds1:=ds;
dr1:=3*dr div 2;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,3)
else
ve_o(1,x,y,ds1,dr1,1);
settextstyle(0,0,1);
settextjustify(1,1);
{setcolor(15);}
outtextxy(x+dr1 div 2,y+ds1 div 2,'Tab');
End;
{-------------------------------------------------------------}
{*****thu tuc ve phim capslock******}
Procedure Ve_capslock(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1;
y:=yhp1+2*(ds+kc);
ds1:=ds;
dr1:=2*dr;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,3)
else
ve_o(1,x,y,ds1,dr1,1);
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x+dr1 div 2,y+ds1 div 2,'Capslock');
End;
{-------------------------------------------------------------}
{*****thu tuc ve phim shift******}
Procedure ve_shift(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1;
y:=yhp1+3*(ds+kc);
ds1:=ds;
dr1:=2*dr+kc;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,3)
else
ve_o(1,x,y,ds1,dr1,1);
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x+dr1 div 2,y+ds1 div 2,'Shift');
End;
{-------------------------------------------------------------}
{***thu tuc ve phim Ctrl *****}
Procedure ve_ctrl(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1;
y:=yhp1+4*(ds+kc);
ds1:=ds;
dr1:=2*dr+kc;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,1)
else
ve_o(1,x,y,ds1,dr1,1);
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x+dr1 div 2,y+ds1 div 2,'Ctrl');
End;
{-------------------------------------------------------------}
{****thu tuc ve phim Alt***}
Procedure ve_alt(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1+2*(dr+kc);
y:=yhp1+4*(ds+kc);
ds1:=ds;
dr1:=2*dr+kc;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,1)
else
ve_o(1,x,y,ds1,dr1,1);
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x+dr1 div 2,y+ds1 div 2,'Alt');
End;
{-------------------------------------------------------------}
Procedure ve_space(chon:integer);
Var x,y,ds1,dr1:integer;
Begin
x:=xhp1+4*(dr+kc);
y:=yhp1+4*(ds+kc);
ds1:=ds;
dr1:=5*(dr+kc)+dr;
if(chon=1) then
ve_o(2,x,y,ds1,dr1,3)
else
begin
setcolor(1);
setlinestyle(0,1,1);
rectangle(x,y,x+dr1,y+ds1);
setfillstyle(1,7);
floodfill(x+10,y+8,1);
ve_o(1,x,y,ds1,dr1,1);
end;
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x+dr1 div 2,y+ds1 div 2,'');
End;
{-------------------------------------------------------------}
{thu tuc ve phim Enter}
Procedure ve_enter(chon:integer);
Var x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6:integer;
Begin
x1:=xhp1+13*(dr+kc)+dr div 2;
y1:=yhp1+ds+kc;
x2:=xhp1+15*dr+14*kc;
y2:=y1;
x3:=x2;
y3:=y2+2*ds+kc;
x4:=x3-2*dr-2*kc;
y4:=y3;
x5:=x4;
y5:=y4-ds;
x6:=x1;
y6:=y5;
setlinestyle(0,0,3);
if(chon=1) then
begin
setcolor(1);
setlinestyle(0,1,1);
line(x1,y1,x2,y2);
line(x1,y1,x6,y6);
line(x5,y5,x6,y6);
setcolor(1);
line(x5,y5,x4,y4);
line(x4,y4,x3,y3);
line(x3,y3,x2,y2);
setfillstyle(1,14);
floodfill(x1+10,y1+8,1);
end
else
begin
setcolor(1);
line(x1,y1,x2,y2);
line(x1,y1,x6,y6);
line(x5,y5,x6,y6);
line(x5,y5,x4,y4);
line(x4,y4,x3,y3);
line(x3,y3,x2,y2);
setfillstyle(1,7);
floodfill(x1+10,y1+8,1);
setlinestyle(0,1,3);
setcolor(15);
line(x1,y1,x2,y2);
line(x1,y1,x6,y6);
line(x5,y5,x6,y6);
setcolor(8);
line(x5,y5,x4,y4);
line(x4,y4,x3,y3);
line(x3,y3,x2,y2);
end;
setcolor(1);
settextstyle(0,0,1);
settextjustify(1,1);
outtextxy(x6+dr div 2,y6+ds div 2,'Enter');
End;
{-----------------------------Ve ban phim--------------------------------}
Procedure Ve_Banphim;
var x,y,i:integer;
begin
xhp2:=xhp1+3*dr div 2+kc;
yhp2:=yhp1+ds+kc;
xhp3:=xhp1+2*dr+kc;
yhp3:=yhp2+ds+kc;
xhp4:=xhp1+2*dr+2*kc;
yhp4:=yhp3+ds+kc;
xhp5:=xhp1+10*(dr+kc);
yhp5:=yhp1+4*(ds+kc);
{Ve khung hien thi chu}
Bar(10,80,80+getmaxx-90,170);
Ve_O(1,10,80,100,getmaxx-20,1);
{ve khung ban phim}
setlinestyle(0,1,3);
setcolor(7);
rectangle(xhp1-20,yhp1-30,getmaxx-12,yhp5+ds+30);
rectangle(xhp1-3,yhp1-3,getmaxx-(xhp1)+3,yhp5+ds+3);
setfillstyle(1,15);
floodfill(15,yhp1-4,7);
{****ve hang phim thu nhat*****}
x:=xhp1;
y:=yhp1;
for i:=1 to 15 do
begin
settextstyle(0,0,1);
settextjustify(1,1);
ve_o(1,x,y,ds,dr,1);
outtextxy(x+17,y+16,h1[i]);
x:=x+dr+kc;
end;
{****ve hang phim thu hai****}
x:=xhp2;
y:=yhp2;
for i:=1 to 13 do
begin
settextstyle(0,0,1);
settextjustify(1,1);
ve_o(1,x,y,ds,dr,1);
outtextxy(x+17,y+16,h2[i]);
x:=x+dr+kc;
end;
{*****ve hang phim thu 3 *****}
x:=xhp3;
y:=yhp3;
for i:=1 to 13 do
begin
settextstyle(0,0,1);
settextjustify(1,1);
ve_o(1,x,y,ds,dr,1);
outtextxy(x+17,y+16,h3[i]);
x:=x+dr+kc;
end;
{*****ve hang phim thu 4 *****}
x:=xhp4;
y:=yhp4;
for i:=1 to 13 do
begin
settextstyle(0,0,1);
settextjustify(1,1);
ve_o(1,x,y,ds,dr,1);
outtextxy(x+17,y+16,h4[i]);
x:=x+dr+kc;
end;
{*****ve hang phim thu 5****}
x:=xhp5;
y:=yhp5;
for i:=1 to 5 do
begin
settextstyle(0,0,1);
settextjustify(1,1);
ve_o(1,x,y,ds,dr,1);
outtextxy(x+17,y+16,h5[i]);
x:=x+dr+kc;
end;
ve_tab(2);
ve_capslock(2);
ve_shift(2);
ve_ctrl(2);
ve_enter(2);
ve_alt(2);
ve_space(2);
end;
{-------------------------------------------------------------}
Procedure VephimNhan(phim:char;kieuve:integer);
Var
i,j,k,x,y:integer;
xhien,yhien:integer;
Begin
xhp2:=xhp1+3*dr div 2+kc;
yhp2:=yhp1+ds+kc;
xhp3:=xhp1+2*dr+kc;
yhp3:=yhp2+ds+kc;
xhp4:=xhp1+2*dr+2*kc;
yhp4:=yhp3+ds+kc;
xhp5:=xhp1+10*(dr+kc);
yhp5:=yhp1+4*(ds+kc);
xhien:=0;yhien:=0;
{Hang 1}
for k:=1 to 15 do
if (chr(hp1[k])=phim) then
begin
xhien:=xhp1+(k-1)*(dr+kc);
yhien:=yhp1;
end;
{Hang 2}
for k:=1 to 13 do
if(chr(hp2[k])=phim) then
begin
xhien:=xhp2+(k-1)*(dr+kc);
yhien:=yhp2;
end;
{Hang 3}
for k:=1 to 12 do
if(chr(hp3[k])=phim) then
begin
xhien:=xhp3+(k-1)*(dr+kc);
yhien:=yhp3;
end;
{Hang 4}
for k:=1 to 13 do
if(chr(hp4[k])=phim) then
begin
xhien:=xhp4+(k-1)*(dr+kc);
yhien:=yhp4;
end;
{Hang 5}
for k:=1 to 5 do
if(chr(hp5[k])=phim) then
begin
xhien:=xhp5+(k-1)*(dr+kc);
yhien:=yhp5;
end;
if ((phim=#60) or (phim=#62)
or (phim=#63) or (phim=#34) or (phim=#58)) then
if kieuve=1 then
ve_shift(kieuve+1)
else ve_shift(1);
if(phim=#32) then
if kieuve=1 then
ve_space(kieuve+1)
else ve_space(1)
else
if ((ord(phim) in [27,49,50,51,52,53,54,55,56,57,48,45,43,61,8])
or (ord(phim) in [81,87,69,82,84,89,85,73,79,80,91,93])
or (ord(phim) in [65,83,68,70,71,72,74,75,76,59,58])
or (ord(phim) in [90,88,67,86,66,78,77,44,46,39,92,42,47])
or (ord(phim) in [63,60,62,40,41])) then
ve_o(kieuve,xhien,yhien,ds,dr,1);
End;
{-------------------------------------------------------------}
Procedure ve_o_menu(x,y,chon:integer);
Begin
setlinestyle(0,1,3);
setcolor(1);
rectangle(x,y,x+drm,y+dsm);
if(chon=1) then
setfillstyle(1,10)
else
setfillstyle(1,15);
floodfill(x+10,y+10,1);
End;
{----------------------Thu tuc sinh phim go-------------------}
Function SinhMa(level:integer):Char;
Var i:integer;
Ch:Char;
Begin
Randomize;
While true do
Begin
if level=1 then
begin
ch:=chr(Random(101)+65);
if ((ch in ['a'..'z'])
or (ch in ['A'..'Z'])) then break;
end;
if level=2 then
begin
ch:=chr(Random(101)+43);
if ((ch in ['a'..'z'])
or (ch in ['A'..'Z'])
or (ch in ['0'..'9'])) then break;
end;
if level=3 then
begin
ch:=chr(Random(97)+41);
if ((ord(ch) in [27,49,50,51,52,53,54,55,56,57,48,45,43,61,8])
or (ord(ch) in [81,87,69,82,84,89,85,73,79,80,91,93])
or (ord(ch) in [65,83,68,70,71,72,74,75,76,59,58])
or (ord(ch) in [90,88,67,86,66,78,77,44,46,39,92,42,47])
or (ord(ch) in [63,60,62,40,41]))
then break;
end;
End;
SinhMa:=ch;
End;
{----------------Thu tuc viet chu len man hinh----------------}
Procedure VietChu(x,y:integer;chu:char);
Begin
Outtextxy(x,y,chu);
End;
{----------------------Thu tuc go phim------------------------}
Procedure GoPhim;
Var ch:char;
MaDuocSinh:char;
bd,kt:Word;
Begin
Sokytu:=0;SoKyTuSinh:=0;
xchu:=30;ychu:=110;
bd:=tg_phut;
While true do
Begin
MaDuocSinh:=SinhMa(Muc);
VietChu(xchu,ychu,MaDuocSinh);
xchu:=xchu+textwidth('H')+1;
if xchu>=getmaxx-20 then
begin
xchu:=30;
ychu:=ychu+textheight('H')+10;
end;
if ychu>=180 then
begin
xchu:=30;
ychu:=110;
bar(10,80,80+getmaxx-90,170);
Ve_O(1,10,80,100,getmaxx-20,1);
end;
Delay(1000);{Doi go phim va sinh ma}
VephimNhan(Upcase(ch),1);
if keypressed then
begin
ch:=readkey;
if ch=#27 then break;
if ch=#0 then
ch:=readkey;
SoKyTuSinh:=SoKyTuSinh+1;
VephimNhan(Upcase(ch),2);
if upcase(ch)=upcase(MaDuocSinh) then
Sokytu:=Sokytu+1
else
begin
Sokytu:=Sokytu-1;
sound(1000);delay(100);nosound;
end;
end;
End;
kt:=tg_phut;
if (kt-bd)0 then
TS.tocdo:=Sokytu/(kt-bd)
else
TS.tocdo:=0;
if SokytuSinh=0 then
TS.chinhxac:=0
else
TS.chinhxac:=Sokytu/(SokytuSinh*100);
End;
{--------------------Hien thi thong tin va ghi vao file------------------------}
Procedure Ketqua;
Var ch:char;
Begin
Textbackground(Blue);
Clrscr;
Writeln('Ket qua kiem tra');
Writeln('Thi sinh dang nhap: ',TS.Hoten);
Writeln('So ky tu/phut: ',TS.Tocdo:8:3);
Writeln('Do chinh xac: ',TS.Chinhxac:8:3);
Write('Ban co ghi ket qua khong(C/K)?');
Writeln;
ch:=Readkey;
if upcase(ch)='C' then
Begin
Repeat
Write('Hay nhap ten file ghi ket qua:');Readln(TenFile);
Until TenFile'';
Assign(f,TenFile);
{$I-}
Rewrite(f);
{$I+}
if IOResult 0 then
Writeln('Khong tao duoc file')
else
Begin
Write(f,'Thi sinh:');
Writeln(f,TS.Hoten);
Write(f,'Toc do go phim/phut:');
Writeln(f,TS.Tocdo);
Write(f,'Do chinh xac:');
Writeln(f,TS.Chinhxac);
Close(f);
End;
End;
End;
{-------------------------------------------------------------}
Procedure chon_muc;
Var i,x,y,k,kt:integer;
c,c1:char;
Begin
x:=xmenu;
y:=ymenu;
for i:=1 to 4 do
begin
outtextxy(x+drm div 2,y+dsm div 2,mnu[i]);
ve_o_menu(x,y,2);
x:=x+drm+kc;
end;
x:=xmenu;
y:=ymenu;
setcolor(15);
outtextxy(300,getmaxy-20,'Nhan ESC de thoat');
setcolor(1);
ve_o_menu(x,y,1);
k:=0;kt:=0; { k truoc luu vi tri k cu}
while true do
begin
if not (keypressed) then
c:=readkey;
if(c=#27) then break;
if(c=#13) then
begin
bar(10,80,80+getmaxx-90,170);
Ve_O(1,10,80,100,getmaxx-20,1);
if(k=0) then
begin
Muc:=1;
GoPhim;
end
else if(k=1) then
begin
Muc:=2;
GoPhim;
end
else if(k=2) then
begin
Muc:=3;
GoPhim;
end
else if (k=3) then
Break;
end;
if(c=#0) then
begin
c1:=readkey;
kt:=k;
if(c1=#77) then {mui ten phai}
if(k>=3) then
k:=0
else
k:=k+1
else if(c1=#75)then {mui ten trai}
if(k<=0) then
k:=3
else
k:=k-1;
end;
if(kkt) then
begin
ve_o_menu(x+kt*(drm+kc),y,2);
ve_o_menu(x+k*(drm+kc),y,1);
end;
kt:=k;
end;
end;
{------------- dang nhap ---------}
Procedure DangNhap;
Begin
textbackground(Blue);
Repeat
clrscr;
Writeln('Dang nhap chuong trinh');
Write('Thi sinh dang nhap: ');Readln(TS.Hoten);
Until TS.HoTen''
End;
{-----------------Do hoa-------------}
Procedure KhoiTaoDH;
Begin
{----Khoi dong do hoa----}
initgraph(mh,mode,'d:\tp\bgi');
Setbkcolor(1);
End;
{--------------- bat dau ct chinh ---------}
Begin
KhoiTaoDH;
GioiThieu(3);
Readln;
ClearDevice;
CloseGraph;
DangNhap;
KhoiTaoDH;
Ve_Banphim;
Chon_muc;
Closegraph;
Ketqua;
End.
KÕt luËn
Sau mét thêi gian tËp trung nghiªn cøu, tham kh¶o c¸c tµi liÖu vÒ ng«n ng÷ lËp tr×nh Turbo Pascal, cïng víi sù tËn t×nh híng dÉn cña thÇy ThS.Th¸i Thanh Tïng còng nh c¸c thÇy c« gi¸o trong Khoa C«ng nghÖ Tin häc-ViÖn §¹i häc Më Hµ néi, t«i ®· hoµn thµnh ®îc bµi tËp thùc hµnh tèt nghiÖp cña m×nh. Trong qu¸ tr×nh lµm bµi tËp, t«i còng ®· t×m hiÒu thªm ®ùoc nhiÒu vÊn ®Ò liªn quan ®Õn ng«n ng÷ Pascal vµ cµng thÊy ®îc nh÷ng tiÖn Ých cña ng«n ng÷ bËc cao nµy trong viÖc viÕt c¸c ch¬ng tr×nh . Tuy nhiªn, trong mét kho¶ng thêi gian cã h¹n vµ tr×nh ®é cßn nhiÒu h¹n chÕ, bµi tËp thùcc hµnh tèt nghiÖp nµy còng kh«ng tr¸nh khái nh÷ng sai sãt m¾
Các file đính kèm theo tài liệu này:
- K4705.DOC