§Ò tµi : X©y dùng phÇn mÒm tõ ®iÓn Anh – ViÖt
1.§Æt vÊn ®Ò :
Xu híng chung trªn thÕ giíi ngµy nay lµ toµn cÇu ho¸. ViÖt nam mét quèc gia kÐm ph¸t triÓn trªn thÕ giíi muèn ph¸t triÓn nÒn kinh tÕ ®Ó kh«ng l¹c hËu so víi thÕ giíi th× kh«ng cã con ®êng nµo kh¸c nhanh h¬n con ®êng héi nhËp vµo nÒn kinh tÕ ®ang toµn cÇu ho¸. Mét trong nh÷ng c«ng cô quan träng ®Ó cho mét quèc gia cã thÓ héi nhËp vµo nÒn kinh tÕ thÕ giíi ®ã chÝnh lµ tr×nh ®é ngo¹i ng÷ cña nh÷ng ngêi d©n níc Êy. §Æc biÖt lµ ®èi víi sinh viªn cña níc Êy. ChÝnh v× vËy viÖc häc ngo¹i ng÷ víi sinh viªn lµ v« cïng quan träng. Trong c¸c ng«n ng÷ chÝnh trªn thÕ giíi hiÖn nay th× tiÕng Anh lµ phæ cËp nhÊt. §Ó häc tèt tiÕng Anh th× kh«ng g× b»ng mét quyÓn tõ ®iÓn tèt. XuÊt ph¸t tõ nhu cÇu thùc tiÔn ®ã nhãm lËp tr×nh Star Sofware Center cña líp CTM4-K45 §H BK HN ®· x©y dùng mét ch¬ng tr×nh tõ ®iÓn Anh-ViÖt.
Ch¬ng tr×nh cã mét giao diÖn th©n thiÖn cho phÐp ngêi dïng dÔ dµng tra cøu tõ tiÕng Anh , ngoµi ra nã cßn cho phÐp ngêi dïng bæ xung tõ tiÕng Anh vµo trong tõ ®iÓn.
2.C¬ së lÝ thuyÕt cña ®Ò tµi :
ViÖc x©y dùng ch¬ng tr×nh tõ ®iÓn tõ l©u ®· ®îc c¸c c«ng ty phÇn mÒm trong vµ ngoµi níc nghiªn cøu thùc hiÖn vµ hä còng ®· cho ra rÊt nhiÒu bé tõ ®iÓn vÝ dô nh : L¹c-ViÖt , just’click & see...§©y lµ 1 ®Ò tµi kh«ng ph¶i lµ míi mÎ nhng nã l¹i rÊt thu hót nhãm lËp tr×nh chóng em . Tuy lµ ®i sau nhng chóng em lu«n lu«n muèn ph¸t huy hÕt nh÷ng ý tëng s¸ng t¹o cña m×nh ®Ó lµm cho ch¬ng tr×nh thùc sù lµ 1 cuèn tõ diÓn ®iÖn tö h÷u Ých vµ kh«ng thÓ thiÕu cho mäi ngêi.
3.Ph¬ng ¸n gi¶i quyÕt :
Khi x©y dùng ch¬ng tr×nh tõ ®iÓn nµy viÖc ®Çu tiªn lµ gi¶i quyÕt viÖc vÊn ®Ò lu
tr÷ tõ vµ nghÜa cña tõ. 1 tõ tiÕng Anh th× ®i kÌm theo nã lµ rÊt nhiÒu nghÜa tiÕng ViÖt , v× vËy em tæ chøc lu tr÷ nh÷ng tõ tiÕng Anh ra 1 file,nghÜa tiÕng ViÖt ra 1 file riªng. Tõ tiÕng Anh sÏ ®îc lu trong file “Td.idx” la file cua x©u ch÷(String) cßn nghÜa tiÕng ViÖt sÏ ®îc lu trong file “Tudien.dat” lµ file cña c¸c b¶n ghi . C¸c b¶n ghi nµy gåm nhiÒu trêng n,v,adj,vidu... ®Ó lu tr÷ nghÜa Danh tõ,§éng tõ,TÝnh Tõ ,VÝ dô ...cña tõ tiÕng Anh t¬ng øng.ViÖc t¸ch ra lµm 2 file nµy sÏ lµm cho dung lîng file nhá ®i vµ viÖc t×m kiÕm sÏ nhanh h¬n vµ dÔ dµng h¬n.
ThuËt to¸n chÝnh cña ch¬ng tr×nh lµ viÖc truy nhËp vµ t×m kiÕm trong file lu tr÷ tõ.
Khi ngêi dïng nhËp 1 tõ bÊt kú viÖc t×m kiÕm sÏ diÔn ra . Ch¬ng tr×nh sÏ truy nhËp vµo file lu tr÷ tõ tiÕng Anh (Td.idx) vµ thñ tôc “timtu(s)” t×m kiÕm so s¸nh trong ®ã . NÕu tõ ®· nhËp trïng víi tõ lu tr÷ trong file th× ch¬ng tr×nh sÏ ghi nhËn vÞ trÝ cña tõ ®ã vµ kÕt thóc qu¸ tr×nh t×m kiÕm.TiÕp theo ch¬ng tr×nh sÏ truy nhËp vµo file lu tr÷ nghÜa tiÕng ViÖt(Tudien.dat),®Æt con trá ngay t¹i vÞ trÝ võa ghi nhËn vµ thñ tôc “intu(s)” sÏ in nghÜa tiÕng viÖt ra mµn h×nh. NÕu viÖc t×m kiÕm thÊt b¹i (kh«ng t×m thÊy tõ cÇn t×m ) th× ch¬ng tr×nh sÏ ®a ra th«ng b¸o lµ tõ cÇn t×m cha cã trong tõ ®iÓn .
Ngoµi viÖc tra cøu , ch¬ng tr×nh cßn cho phÐp ngêi dïng bæ xung nh÷ng tõ cha cã vµo trong tõ ®iÓn b»ng th tôc “Nhaptu”. Khi b¹n muèn nhËp mét tõ míi vµo tõ ®iÓn th× tõ ch¬ng tr×nh chÝnh b¹n nhÊn F1. Ch¬ng tr×nh sÏ hiÖn ra lêi mêi nhËp tõ vµo. Khi nhËp tõ
TiÕng Anh ,ch¬ng tr×nh sÏ kiÓm tra xem tõ ®ã ®· cã cha ,nÕu tõ ®ã ®· cã trong tõ ®iÓn th× ch¬ng tr×nh sÏ th«ng b¸o cho b¹n biÕt vÒ sù trïng lÆp ®ã vµ ®¬ng nhiªn b¹n sÏ ph¶i nhËp tõ kh¸c .Sau khi nhËp nghÜa tiÕng Anh ch¬ng tr×nh sÏ híng d·n b¹n nhËp tiÕp nghÜa b»ng tiÕng viÖt cña tõ tuú theo tõ ®ã thuéc lo¹i tõ g× (danh tõ, ®éng tõ…). KÕt thóc nhËp mét tõ cã lêi hái cã söa tõ võa nhËp kh«ng nÕu nh trong qu¸ tr×nh nhËp cã sai xãt th× chän cã (c) cßn nÕu kh«ng th× tõ võa nhËp sÏ ghi vµo tõ ®iÓn. Qu¸ tr×nh nhËp tõ sÏ tiÕp tôc cho ®Õn khi b¹n nhËp x©u rçng vµ ch¬ng tr×nh sÏ quay vÒ ch¬ng tr×nh chÝnh.
§Ó tèi u ho¸ tèc ®é truy nhËp file , c¸c file sÏ ®îc më ngay tõ khi ch¬ng tr×nh khëi ®éng vµ sÏ ®ãng l¹i khi b¹n tho¸tkhái ch¬ng tr×nh.ViÖc më file sÏ kÌm theo thñ tôc kiÓm tra sù tån t¹i cña file.NÕu file kh«ng tån t¹i ch¬ng tr×nh sÏ b¸o lçi vµ dõng l¹i.
Ngoµi ra trong ch¬ng tr×nh cßn bæ xung thªm môc about ®Ó giíi thiÖu vÒ nhãm t¸c gi¶.
Ch¬ng tr×nh ®îc tho¸t khái b»ng phÝm Esc.
Tuy nhiªn v× vÊn ®Ò thêi gian nªn ch¬ng tr×nh cßn mét sè tån t¹i cha gi¶i quyÕt ®îc:
- Ch¬ng tr×nh kh«ng cã phiªn ©m vµ ph¸t ©m cña tõ tiÕng Anh
- Giao diÖn cha thËt th©n thiÖn.
- Ch¬ng tr×nh kh«ng thÓ ch¹y ®ång thêi cïng mét lóc víi c¸c ch¬ng tr×nh kh¸c.
4.X©y dùng ,thùc hiÖn ph¬ng ¸n ®Ò xuÊt :
Ch¬ng tr×nh ®îc viÕt b»ng c«ng cô chÝnh lµ phiªn b¶n Turbol Pascal 7.0
Ch¬ng tr×nh nh sau:
Program Tu_Dien;
Uses crt,graph,dos;
Type
mangtv= record
N:string;
V:string;
ADJ:string;
vd:string;
end;
mangta=string[16];
Const thu:array[0..6] of string[8] = ('Chu nhat','Thu Hai','Thu Ba','Thu Tu','Thu Nam','Thu Sau','Thu Bay');
VAR
f:file of mangtv;
f1 :file of mangta;
ch:char;
tv:mangtv;
s,ta :mangta;
vitri,gd,gm,x,y,i:integer;
s1,s2:string;
mofile:boolean;
Procedure VietHoa(var s:mangta); {chuyÓn tõ nhËp vµo thµnh ch÷ in Hoa tríc xö lý}
Var i:integer;
begin for i:=1 to length(s) do s[i]:=upcase(s[i]);
end;
Function KiemTra(var ta:mangta):boolean; {KiÓm tra xem tõ ®· cã cha}
var tg:mangta;
ok:boolean;
Begin
kiemtra:=true;ok:=true;seek(f1,0);
while (not eof(f1))and(ok=true) do
begin read(f1,tg);
if ta=tg then begin
ok:=false;
kiemtra:=false;
end;
end;
end;
Procedure nhaptu; {NhËp tõ }
Begin
clrscr;
if mofile=false then
BEgin
assign(f,'tudien.dat');{$I-}reset(f);{$I+}if IOResult0 then rewrite(f);
assign(f1,'td.idx');{$I-}reset(f1);{$I+}if IOResult0 then rewrite(f1);
mofile:=true;
ENd;
textcolor(7);
repeat
write('Nhap tu TIENG ANH : ');textcolor(14);readln(ta);textcolor(7);
if (ta '') then
Begin
VietHoa(ta);
if KiemTra(ta) then
Begin
writeln('Nhap nghia TIENG VIET : ');
writeln('1. DANH TU (Neu co,neu khong co thi nhan ENTER): ');
textcolor(13);readln(tv.n);textcolor(7);
writeln('2. DONG TU (Neu co,neu khong co thi nhan ENTER): ');
textcolor(13);readln(tv.v);textcolor(7);
writeln('3. TINH TU (Neu co,neu khong co thi nhan ENTER): '); t
textcolor(13);readln(tv.adj);textcolor(7);
write('4. VI DU (Neu co,Hay Nhap Theo Mau : ');
textcolor(14);Writeln('I Love You(Anh Yeu Em)'); textcolor(7);
writeln('Neu khong co thi nhan ENTER): ');textcolor(13);readln(tv.vd);textcolor(7);
Write('Ban co sua lai khong(C/K): ');readln(ch);
if upcase(ch)'C' then
Begin seek(f,filesize(f));write(f,tv); seek(f1,filesize(f1));write(f1,ta);
End;
End
else Begin textcolor(4);
Writeln('Tu Nay Da Co Trong Tu Dien,Moi Ban Nhap Tu Khac !');
textcolor(7);
End;
end;
writeln('*=======*=======*========*======*======*=======*=======*====*');
until (ta='') ;
writeln('Tong So Tu trong tu dien la : ',filesize(f1));delay(900);
End;
Procedure tach_xau(var xau,xau1,xau2:string); {T¸ch x©u vÝ dô lµm 2 phÇn tiÕng Anh vµ tiÕng ViÖt}
var j:integer;
Begin
j:=0;
repeat j:=j+1;
if xau[j]='(' then
begin
xau1:=copy(xau,1,j-1);
xau2:=copy(xau,j,length(xau)-j+1);
if xau2[length(xau2)] ')' then xau2:=xau2+')';
end;
until xau[j]='(';
End;
Procedure intu(var tg:mangtv); {in nghÜa tiÕng ViÖt ra mµn h×nh}
Begin i:=0;
if (tg.n '') then
begin
setcolor(12);
outtextxy(91,250,'Danh tu(n):');
setcolor(14);
outtextxy(200,250,tg.n);i:=i+26;
end;
if (tg.v '') then
begin
setcolor(12);
outtextxy(91,250+i,'Dong tu(v):');
setcolor(14);
outtextxy(200,250+i,tg.v);i:=i+26;
end;
if (tg.adj '') then
begin
setcolor(12);
outtextxy(91,250+i,'Tinh tu(adj):');
setcolor(14);
outtextxy(200,250+i,tg.adj);i:=i+26;
end;
if (tg.vd '') then
begin
setcolor(12);
outtextxy(91,250+i,'ViDu:');
setcolor(14);Tach_xau(tg.vd,s1,s2);
outtextxy(150,250+i,s1);i:=i+26;
setcolor(14);
outtextxy(150,250+i,s2);
end;
end;
Procedure Timtu(var s:mangta); {T×m kiÕm tõ}
var
ok:boolean;
Begin if mofile=false then
BEgin
assign(f,'tudien.dat');{$I-}reset(f);{$I+}if IOResult0 then
Begin cleardevice;outtextxy(100,100,'Khong tim thay file TUDIEN.DAT');readln;halt(1);end;
assign(f1,'td.idx');{$I-}reset(f1);{$I+}if IOResult0 then
Begin cleardevice;outtextxy(100,120,'Khong tim thay file TD.idx');readln;halt(1);end;
mofile:=true;
ENd;
ok:=false;seek(f1,0);
while (ok=false) and (not eof(f1)) do
Begin
read(f1,ta);
if s=ta then
begin
vitri:=filepos(f1)-1;
seek(f,vitri);read(f,tv);intu(tv);
ok:=true;
end;
end;
if ok=false then
begin
settextstyle(7,0,1);setcolor(14);
outtextxy(92,260,'Xin Loi ! Tu Nay chua co trong tu dien !');
end;
End;
Procedure Giaodien; {Giao diÖn }
Begin
setlinestyle(0,$aaaa,3);setfillstyle(1,7);
bar(60,90,550,430);setfillstyle(1,9);
bar(90,220,520,410);setfillstyle(1,13);
bar(90,140,300,170);
settextstyle(3,0,4);setcolor(4);
for i:=1 to 4 do
outtextxy(330+(i-1)*2,110-(i-1)*1,'TD ANH-VIET');
settextstyle(3,0,1);setcolor(14);
outtextxy(330,150,'STAR SOFWARE CENTER');
outtextxy(90,110,'TIENG ANH');
outtextxy(90,190,'TIENG VIET');
settextstyle(3,0,1);setcolor(14);
outtextxy(60,460,'F1:');setcolor(15); outtextxy(100,460,'NHAP TU');
settextstyle(3,0,1);setcolor(14);
outtextxy(220,460,'F2:');setcolor(15); outtextxy(250,460,'ABOUT SOFWARE');
settextstyle(3,0,1);setcolor(14);
outtextxy(420,460,'ESC:');setcolor(15); outtextxy(465,460,'KET THUC');
settextstyle(2,0,8);setcolor(14);
end;
{----------PhÇn nµy dïng tr×nh bÇy phÇn ABOUT SOFWARE-------------}
Procedure chu_chay; {ch÷ ch¹y}
var
j,k,m:integer;
str:string;
begin
setfillstyle(1,0);settextstyle(4,0,6);setcolor(4);
str:='ABOUT SOFWARE';
repeat
for j:=1 to length(str) do begin
sound(100*j+100);
if (str[j] ' ') then
for m:=620 downto textwidth('M')*j do
begin
if keypressed then begin nosound;exit;end
else Begin
bar(m,150,m+textwidth('M'),200);
for k:=1 to 4 do
outtextxy(m+(k-1)*2,150-(k-1)*1,str[j]);delay(1);
end;
end;
nosound;
end;delay(300);
until keypressed;
end;
procedure About;
var th,ngay,thang,nam:word;
begin cleardevice;
settextstyle(3,0,1);setcolor(14);
getdate(nam,thang,ngay,th);
outtextxy(80,100,'Hom Nay');
outtextxy(170,100,thu[th]);outtextxy(260,100,'Ngay');str(ngay,s);
outtextxy(310,100,s); outtextxy(340,100,'Thang');str(thang,s);
outtextxy(400,100,s);outtextxy(440,100,'Nam');str(nam,s);
outtextxy(480,100,s);setcolor(7);
outtextxy(80,300,'Day la phien ban dau tien nen khong tranh khoi sai xot ,');
outtextxy(50,320,'Mong cac ban thong cam va gop y them de phan mem ngay 1 ');
outtextxy(50,340,'hoan thien hon.');
outtextxy(50,380,'Moi gop y xin gui ve :');
outtextxy(100,400,'Nhom STAR SOFWARE CENTER : CTM4 - K45 - DHBK HN ');
outtextxy(100,420,'E-MAIL :
[email protected]');
outtextxy(100,440,'
[email protected]');
chu_chay;
end;
Procedure creatsound(h,t:word); {t¹o ©m thanh }
begin
sound(h);delay(t);nosound;
end;
Procedure nhackt;
Begin
Creatsound(967,300);
Creatsound(861,300);
Creatsound(767,300);
Creatsound(575,900);
delay(60);
Creatsound(575,300);
Creatsound(861,300);
Creatsound(967,300);
Creatsound(767,900);
End;
Procedure Ketthuc; {phÇn kÕt thóc }
begin cleardevice;
settextstyle(10,0,6);setcolor(4);
for i:=1 to 4 do
outtextxy(40+(i-1)*2,30-(i-1)*1,'TD ANH-VIET');
setfillstyle(1,9);setcolor(14);
bar(30,150,600,230);settextstyle(7,0,4);
outtextxy(40,170,'THANKS FOR YOUR SUPPORT !');
settextstyle(3,0,2);setcolor(13);
outtextxy(400,300,'NHOM THUC HIEN :');setcolor(7);
outtextxy(400,340,'Pham Quoc Huong');
outtextxy(400,360,'Nguyen The Anh');
outtextxy(400,380,'Nguyen Huu Dinh');
outtextxy(400,400,'Dang Van Phuc');
outtextxy(400,420,'Le Anh Tuan');
nhackt;
end;
Procedure tldh;{thiÕt lËp ®å ho¹}
begin
gd:=detect;
initgraph(gd,gm,'d:\Dos\tp\Bgi');
if graphresult grok then halt(1);
end;
{---------------------Ch¬ng tr×nh chÝnh-----------------------}
BEGIN
tldh;
setcolor(4);
textcolor(0);
Giaodien;mofile:=false;
repeat
i:=0;s:='';
repeat
setcolor(15);
ch:=readkey;creatsound(800,10);
if ch=#27{ESC} then Begin
if mofile=true then
begin close(f);close(f1);end;
ketthuc;closegraph;halt(1);
End;
if (ch=#59){F1}then begin closegraph;nhaptu;tldh;cleardevice;giaodien;ch:=#0;s:='';end;
if ch=#60{F2} then begin about;cleardevice;giaodien;s:='';end;
if (ch in [#8,#32,#48..#57,#65..#90,#97..#122]) and (length(s)<16) then
begin
if ch#8 then begin s:=s+ch;outtextxy(91+i,140,ch);i:=i+13;end;
if (ch=#8) and (length(s)0)then begin bar(91+i -textwidth('M'),140+textheight('H')+6,91+i,140);
delete(s,length(s),1);i:=i-13;end;
end;
if length(s) =16 then
if (ch=#8) and (length(s)0)then begin bar(91+i - textwidth('M'),140+textheight('H')+6,91+i,140);
delete(s,length(s),1);i:=i-13;end;
until (ch =#13) and (s'');
settextstyle(3,0,1);
VietHoa(s);
timtu(s);
ch:=readkey;setfillstyle(1,9);
bar(90,220,520,410);setfillstyle(1,13);
bar(90,140,300,170);settextstyle(2,0,8);
until ch=#27;
if mofile=true then begin close(f);close(f1); end;
ketthuc;
closegraph;
END.
5.§¸nh gi¸ thö nghiÖm c¸c kÕt qu¶ thu ®îc :
Ch¬ng tr×nh cha ®îc tèi u ho¸ vÒ mÆt tèc ®é t×m kiÕm tõ.C¸c tõ ghi trong file cha ®îc x¾p xÕp theo qui luËt (cã thÓ lµ Alphabet hoÆc theo 1 qui luËt nµo ®ã tuú vµo thuËt to¸n t×m kiÕm sao cho nhanh nhÊt).V× vËy tèc ®é t×m kiÕm tõ cßn chËm.
Dung lîng lu tr÷ cña tr¬ng tr×nh tuú thuéc vµo sè lîng tõ cã trong tõ ®iÓn.Sè lîng tõ cµng nhiÒu th× dung lîng cµng t¨ng.Nhng ngµy nay víi c¸c æ ®Üa cã dung lîng rÊt lín(tõ 10Gb trë lªn)th× dung lîng ch¬ng tr×nh kh«ng ®¸ng kÓ.
6.C¸c ph¬ng híng ph¸t triÓn tiÕp theo :
Tríc tiªn sÏ kh¾c phôc nh÷ng tån t¹i cha thÓ gi¶i quyÕt ®îc trong ch¬ng tr×nh nµy.Bæ xung c¸c tÝnh n¨ng cßn thiÕu,t¨ng tèc ®é t×m kiÕm tõ, gi¶m nhá kÝch thíc ch¬ng tr×nh b»ng c¸ch nÐn file....
Khi cã ®iÒu kiÖn sÏ tiÕp tôc ph¸t triÓn ch¬ng tr×nh thµnh mét c«ng cô häc tiÕng Anh h÷u Ých h¬n n÷a. Ch¬ng tr×nh kh«ng chØ ®¬n thuÇn lµ tõ ®iÓn n÷a mµ cã bæ xung thªm c¸c phÇn míi ®Ó cho viÖc häc tiÕng Anh trë nªn dÔ dµng h¬n ®èi víi mäi ngêi.
7.Tµi liÖu tham kh¶o :
S¸ch tin häc ®¹i c¬ng, s¸ch ng«n ng÷ lËp tr×nh Pascal n©ng cao, t¹p trÝ PCWorld