Tải bản đầy đủ (.pdf) (34 trang)

Lập trình từ điển Anh - Việt bằng C#

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (771.38 KB, 34 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

BÁO CÁO CUỐI KÌ
Môn: Lập Trình Windows
Đề Tài:

GVHD: ThS. Phan Nguyệt Minh.

Nhóm thực hiện:

- Lê Thị Hường - 10520528
- Nguyễn Hồng Ngọc - 10520426
- Nguyễn Ngọc Bảo Châu - 10520498


Tp.HCM, ngày 31 tháng 05 năm 2012.

LỜI MỞ ĐẦU
Ngày nay, cùng với sự phát triển của đất nước, các ngành khoa học, ngành công nghệ
thông tin,…. Đều sử dụng rất nhiều tài liệu tiếng anh. Trong hệ thống giáo dục của Việt Nam
hầu hết các trường từ tiểu học, trung học, phổ thông đến các trường cao đẳng-đại học đều
đào tạo bộ môn: Tiếng Anh.
Do vậy, với mục tiêu nhằm hỗ trợ việc học cho học sinh, sinh viên, việc giảng dạy
cho giáo viên ở các trường, hỗ trợ việc biên dịch tài liệu cho các ngành khoa học, công nghệ
thông tin, các cơ quan chức năng…. Để đỡ tốn thời gian và công sức ngồi tra từng từ trong
một cuốn từ điển dày mấy trăm trang, với sự phát triển không ngừng của ngành công nghệ
thông tin các phầm mềm từ điển Anh – Việt tiện dụng, hiệu quả cao ra đời ngày càng nhiều.
Từ thực tế đó, với mong muốn nhằm góp phần trợ giúp cho việc biên dịch tài liệu
tiếng Anh và đóng góp một phần nhỏ cho nền giáo dục của đất nước. Dựa trên những kiến
thức tích lũy được sau khi học bộ môn: Lập trình Windows, chúng em xin thực hiện đề tài:


“Thiết kế từ điển Anh – Việt có âm thanh và hình ảnh” bằng ngôn ngữ Visual studio C# trên
nền Windows Forms Application.

Nhóm thực hiện.








LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn cô Phan Nguyệt Minh – giáo viên trực tiếp giảng dạy
bộ môn: lập trình Windows, người đã tận tình hướng dẫn chúng em trong suốt thời gian học
môn học và thực hiện đề tài học này và toàn thể các bạn lớp: WINP1.C24.
Trong thời gian thực hiện đề tài, bằng những kiến thức đã học được nhà trường trang bị
và những kiến thức tự tìm hiểu từ sách vở, mạng internet… Chúng em đã vận dụng triệt để
kiến thức đó kết hợp với những kinh nghiệm tích luỹ được từ thực tế, để hoàn thành đề tài
một cách tốt nhất. Nhưng do còn mới mẻ với ngôn ngữ mới, kinh nghiệm trong lĩnh vực thiết
kế, lập trình và trình độ còn nhiều hạn chế nên không thể tránh khỏi những thiếu sót. Với
nguyện vọng thiết kế được một phần mềm từ điển Anh – Việt có âm thanh và hình ảnh với
số lượng hơn 380.000 từ tiện dụng , giúp người dùng tiết kiệm thời gian và sức lực.
Chúng em rất mong nhận được nhiều sự góp ý của cô và các bạn trong lớp.
Một lần nữa, chúng em xin chân thành cảm ơn !

Nhóm thực hiện.










NHẬN XÉT
(Của giảng viên hướng dẫn)






























MỤC LỤC

Mở đầu Số trang

I. GIỚI THIỆU SƠ LƯỢC VỀ ĐỀ TÀI. … 1
1.

Giới thiêu: 1
2.

Mục tiêu: 1
3.

Các chức năng chính: 1
II. PHÂN TÍCH YÊU CẦU. 2
III. CÁC BƯỚC THIẾT KẾ CHƯƠNG TRÌNH TỪ ĐIỂN. 3
1.

Database: 3
1.1.

Tạo database: 3
1.2.


Sắp xếp database: 6
1.3.

Tối ưu hóa database: 7
2.

Kiến trúc chương trình: 9
2.1.

Mô hình hoạt động chính của chương trình. 9
2.2.

Mô tả và giải thích xử lý các lớp, đối tượng phục vụ vho hoạt động của chương trình: 10
2.2.1.

Nạp dữ liệu vào form và các mảng: 10
2.2.2.

Tìm kiếm dữ liệu 10
2.2.3.

Chức năng thêm từ và update sau khi thêm từ: 11
2.2.4.

Chức năng xóa từ và update sau khi xóa từ: 13
2.2.5.

Speak & Trackwave: 14
2.2.6.Hình ảnh minh họa cho từ: 17

2.2.7.

Nhúng google translate vào chương trình: 17
2.2.8.

Thay đổi giao diện chương trình: 19
2.2.9.

Lưu từ: 20
3.

Các thiết kế giao diện chương trình: 21
3.1.

Giao diện chính 21
3.2.

Giao diện thêm từ: 22
3.3.

Giao diện dịch văn bản: 23
3.4.

Giao diện lưu từ trong word store: 23
3.5.

Giao diện About Us 24
3.6.

Các background để người dùng lựa chọn: 24

4. Cài đặt và thử nghiệm: 26

IV. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN: 26
1. Những khó khăn, thuận lợi khi thực hiện chương trình: 26
2.

Ưu điểm: 27
3. Nhược điểm: 27
4.

Hướng phát triển trong tương lai: 27
5.

Phân công thực hiện: 27
6.

Tổng kết 28
7.

Tài liệu tham khảo 28

LTW_C24 Trang 1

I. GIỚI THIỆU SƠ LƯỢC VỀ ĐỀ TÀI.
1. Giới thiệu:
Ngày nay, tiếng anh là một ngôn ngữ rất thông dụng, được áp dụng ở mọi lĩnh vực.
Từ thực tế này nhóm em chọn đề tài: “Thiết kế từ điển Anh-Việt” có âm thanh và hình ảnh.
Nhưng trong quá trình thực hiện nhóm chúng em cảm thấy thiết kế từ điển Anh-Việt không
là chưa đủ nên nhóm đã phát triển thêm “Từ điển Việt-Anh” và nhiều chức năng khác như:
Lưu từ để dể tìm kiếm; dịch một đoạn văn bản (đa ngôn ngữ) khi máy có kết nối internet, sử

dụng database linh động để người dùng có thể thêm, xóa, sửa từ người dùng muốn vào
chương trình; liên kết tới một số web search online…. Để phục vụ một cách tiện lợi nhất cho
người dùng.
Đề tài của nhóm lấy tên là: “HNC-T UIT DICTIONARY”, với ý nghĩa là từ
điển(Dictionary) được thiết kế bởi 3 thành viên trong nhóm(Hường-Ngọc-Châu) học tại
trường Đại học công nghệ thông tin(Univercity international of technology).
2. Mục tiêu:
Nhóm chúng em xây dựng đề tài này với mong muốn tạo một chương trình từ điển có
nguồn database phong phú, có âm thanh và hình ảnh minh họa, tính năng đa dạng và phong
phú, giao diện đẹp…… để trở thành một công cụ hỗ trợ phát triển kỹ năng ngoại ngữ tiện
dụng cho người dùng.
3. Các chức năng chính:
• Tra từ thông minh: Xem nhanh từ muốn tra cứu, hỗ trợ tra cứu hai ngôn ngữ:
Anh – Việt và Việt – Anh.
• Nghe phát âm mục từ và nghe đọc văn bản tiếng Anh và tiếng Việt.
• Phân tích nghĩa của một từ, cụm từ, một câu, có nguồn database phong phú với
hơn 387 398 từ.
• Liệt kê các từ liên quan với mục từ đang tra.
• Các định nghĩa liên quan đến từ đang tra.
• Lưu những từ mà người dùng cần lưu vào Word Store để tiện sử dụng khi cần, dễ
dàng cho việc học từ vừng, lưu xong nếu người dùng cảm thấy không cần thiết nữa có
thể xóa bỏ.
• Dịch một đoạn văn bản (đa ngôn ngữ) khi máy có kết nối internet.
LTW_C24 Trang 2

• Có thể thêm, xóa, sửa từ mà bạn muốn vào chương trình.
• Có hình ảnh minh họa cho từ.
• Liên kết với các web search online như: ,
, , web do người dùng tự chọn.
• Giao diện đẹp tiện dụng cho người dùng, người dùng có thể thay đổi giao diện nếu

không thích giao diện hiện hành.
II. PHÂN TÍCH YÊU CẦU.
Tuy đề tài là do nhóm chúng em tự chọn và cô không có yêu cầu gì nhưng nhóm
chúng em tự đặt ra yêu cầu cho nhóm như sau:
• Với đồ án từ điển thì việc tìm kiếm trên dabatase nhanh và chính xác rất là
quan trọng do vậy đòi hỏi phải sắp xếp, tối ưu hóa Database và các thuật toán tìm
kiếm phải tối ưu.
• Giao diện đẹp, tiện dụng và có thể thay đổi nếu người dùng không thích giao
diện hiện hành.
• Chương trình phải chạy ổn định và chức năng hoàn thiện.


















LTW_C24 Trang 3


III. CÁC BƯỚC THIẾT KẾ CHƯƠNG TRÌNH TỪ ĐIỂN.
1. Database:
1.1. Tạo database:
Những cách tổ chức dữ liệu cho từ điển:
o Tổ chức dữ liệu theo dạng B-cây.
o Tổ chức dữ liệu theo dạng cây nhị phân.
o Tổ chức dữ liệu theo dạng danh sách đặc.
o Tổ chức dữ liệu theo dạng danh sách liên kết.
Việc tổ chức dữ liệu cho từ điển khá quan trọng, và hơn hết là làm sao tổ chức thuận
lợi cho quá trình tìm kiếm. Do đó nhóm thực hiện đã chọn cách tổ chức theo kiểu danh
sách liên kết trên nền XML.
Cấu trúc file XML: được tổ chức theo dạng nút(Node), dạng cấu trúc của danh
sách liên kết.
Đối với từ điển Anh-Việt:
o Node lớn nhất là cặp thẻ <Description></Description>
o Các Node con: <Anhviet></Anhviet>
o Trong Node <AnhViet></AnhViet> chứa 2 Node con khác là:
- Node: <Word></Word>.
- Node: <Description></Description>
Đối với từ điển Việt-Anh:
o Node lớn nhất là cặp thẻ <Description></Description>
o Các Node con: <Vietanh></Vietanh>
o Trong Node <Vietanh></Vietanh>chứa 2 Node con khác là:
- Node: <Word></Word>.
- Node: <Description></Description>

Cách tạo file XML:
Đối với từ điển Anh-Việt:
LTW_C24 Trang 4


Từ file AnhViet.txt là một data có sẵn tìm kiếm trên web, chúng em Import vào
trong Access để tạo ra file TD_AV.accdb với Microsoft Office 2010.
o Ta tao 1 file với tên là TD_AV.accdb

o Khi tạo file xong ta vào được trong giao diện thực thi của Access, chọn thẻ
External Data.



LTW_C24 Trang 5

o Tiếp theo chọn Import dữ liệu vào với dữ liệu là 1 file AnhViet.txt
o Sau khi Import xong, ta sẽ được một file TD_AV.accdb
o Cách Tạo File XML từ file Access là ta Export dữ liệu từ 1 file
TD_AV.accdb sang file XML.

o Rồi tuần tự làm theo hướng dẫn mà Access thông báo, thực hiện theo thông
báo sẽ có được một file XML.
LTW_C24 Trang 6

o Trong chương trình này, file XLM được tạo ra với tên do nhóm đặt là
source.xml.
Đối với từ điển Việt-Anh: Làm tương tự như những bước trên, chỉ đổi file txt và
file XML được tạo ra đặt tên là source_vi.xml.
1.2. Sắp xếp database:
Từ điển Anh-Việt tương tự Việt-Anh.
Vấn đề phát sinh :
string.Compare("-","a") ==-1 nhưng string.Compare("-d","a")==1. Đơn giản là
C# đã lược dấu ” -“ đi và chỉ so sánh d với a.
Cho nên string.Compare("-d","a") = 1 không như kết quả như ta mong muốn .

Giải quyết:
Ta sẽ sử dụng class: CultureInfo "Bộ mã font kí tự "
Ví dụ đơn giản :
using System.Text.RegularExpressions;

class Test
{
static void Main()
{
CompareInfo ci = new CultureInfo("vi-VN").CompareInfo;
int i = ci.Compare("-d", "a", CompareOptions.StringSort);
i = ci.Compare("-d", "a");
}
}
Để sắp xếp database sử dụng cách sau: XML -> Mảng -> Sắp xếp Mảng -> XML
Để sắp xếp toàn bộ mảng từ English ta sử dụng IComparer.
temp = ci.Compare(word, word2, CompareOptions.OrdinalIgnoreCase);
LTW_C24 Trang 7

Hàm này so sánh 2 từ word và word2 theo kiểu so sánh OrdinalIgnoreCase có 3 giá trị
trả về:
-
Nếu temp=0 thì 2 từ này giống nhau
-
Nếu temp<0 thì word đứng trước word2.
-
Nếu temp>0 thì word sẽ đứng sau word2.
 Việc sắp xếp chỉ sử dụng 1 lần khi tạo database, về sau khi ta thêm xóa database vẫn
được sắp xếp mà không cần sắp xếp lại.
1.3. Tối ưu hóa database:

Đối với từ điển Anh-Việt:
Nội dung của mảng lưu cho file leftright.txt:
0 5 9 24359 43459 83683 104778 122038 140817 151531 164099 180714
182948 185134 200247 220166 228721 239461 271715 273570 294504 340595
362451 371203 377630 385731 386069 386668 387398
Chuổi 29 số này cho ta thấy:
o Trong cơ sở dữ liệu được đọc từ file xml gồm 28 loại kí tự(‘, -, a, b, c, d, e, f, g,
h, I, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)
Và:
 Kí tự: ‘ nằm trong khoảng từ 0 – 5.
 Kí tự: - nằm trong khoảng từ 6 – 9.
 Kí tự: a nằm trong khoảng từ 10 – 24359.
 …
 Kí tự: z nằm trong khoảng từ 386668 – 387398.
 Việc khoanh vùng như trên giúp thu nhỏ phạm vi tìm kiếm, ví dụ từ ant chỉ được có
trong khoảng từ 9 – 24358.
Hàm public int Position1(string word, string lang): hàm này lấy kí tự đầu tiên của
word để tìm kiếm vị trí của từ này trong mảng position.
o Ví dụ: khi người dùng gõ ant vào ô tìm kiếm, hàm position1 sẽ cắt lấy kí tự
đầu tiên là a rồi tìm kiếm vị trí của từ này trong mảng position. A sau khi
chuyển thành kí tự hoa sẽ có vị trí là 65 trong bảng kí tự ASCII
LTW_C24 Trang 8

o Int(a) = 65 – 63 = 2 => postion1(ant) trả về giá trị 2 => Vị trí của a trong mảng
position: position[2] = 9. Lúc này ta có thể gán left = 9 và right bằng
postion[2+1] = 24359. Và mid = (left + right)/2
o Sau khi đã khởi tạo giá trị cho left, right, mid. Bắt đầu chạy thuật toán nhị phân
như trên.
Quá trình trên cũng giúp ta tìm danh sách từ gần đúng, ví dụ gõ a thì danh sách các
từ bắt đầu bằng kí tự a(đã sắp xếp hiện ra). Ví dụ gõ an từ này được so sánh với với

các từ trong khoảng từ bắt đầu bằng kí tự a. Có 2 trường hợp xảy ra:
o TH1: Tìm được từ này.
o TH2: Tìm không được, tuy nhiên giá trị left sẽ tiến dần đến vùng từ bắt đầu
bằng kí tự an và load vùng này vào list box. Cứ như vậy, khi người dùng gõ
thêm bất kì kí tự nào, hàm sẽ chạy và tìm ra vùng từ bắt đầu bằng chuỗi trong ô
search.
Load file leftright.txt vào mảng: bằng hàm public int[] Load_Position().
 Việc tạo file leftright.txt chỉ tạo 1 lần và được cập nhật mỗi lần thêm, xóa, sửa
database.
Đối với từ điển Việt-Anh: tương tự như với Anh-Việt chỉ thay đổi nội dung mảng
lưu cho file leftrigth_vi.txt vì database có nhiều kí tự khác nhau.
 Nội dung mảng lưu file liftright_vi.txt:
0 395 9524 27920 31937 32013 32033 37207 44522 44632 44634 55499
63557 69401 86154 86310 90432 93010 95240 99407 122003 122292 127980
130585 130833 130840 131353 131586 131595 131634 131681 131693 131764
131773 131824 132078 132080 132105 132141 132255 132647 144286 144289
144307 144492 144495 144599 144711 144718 144787 144788 144797 144812
144814 144816 144820 144823 144824 144845 144849 144850 144854 144855
144873 144876 144887 144897 145203 145217 145313 145319 145336 145338
145733 145734 145738 145757 145827 145897 145907 145911 145915 145920
145931
LTW_C24 Trang 9

Mảng này có tới 84 số, 84 số này cho ta thấy: Trong cơ sở dữ liệu được đọc từ
file xml gồm 83 loại kí tự: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, X, y, à,
á, â, è, é, ê, ì, í, ò, ó, ô, õ, ù, ú, ý, ă, đ, ĩ, ơ, ư, ạ, ả, ấ, ầ, ẩ, ẫ, ậ, ắ, ẳ, ẵ, ẹ, ẻ, ẽ, ế, ề, ể, ễ,
ệ, ỉ, ị, ọ, ỏ, ố, ồ, ổ, ộ, ớ, ờ, ở, ỡ, ợ, ụ, ủ, ứ, ừ, ử, ự, ỳ, ỷ.
Và:
 Kí tự: a nằm trong khoảng từ 0 – 394.
 Kí tự: b nằm trong khoảng từ 395 – 9523.

 Kí tự: c nằm trong khoảng từ 9524 – 27919.
 …
 Kí tự: ỷ nằm trong khoảng từ 145920 – 145930.
2. Kiến trúc chương trình:
2.1. Mô hình hoạt động chính của chương trình.














Khởi động
chương trình
Danh sách từ trên list
box
Ô search từ
Nghĩa của từ sau khi
dịch
Sử dụng tìm kiếm nâng
cao để load từ gần nghĩa
Click từ trên list
box


Nhấn enter hoặc
Click vào nút tìm
Nạp dữ liệu vào mảng
postion(từ file leftright.txt)
Loaddata() Load danh
sách từ lên list box
Nạp từ vào mảng data
Nạp nghĩa của từ vào mảng
datamean
LTW_C24 Trang 10

2.2. Mô tả và giải thích xử lý các lớp, đối tượng phục vụ cho hoạt động của chương
trình:
2.2.1. Nạp dữ liệu vào form và các mảng:
Xem xét hàm public void Loaddata(string Ele1, string Ele2) trong file Dict.cs:
o Hàm này sử dụng hàm đọc file XML trong file xml.cs là public
XmlNodeList Read_XML(string Element). Và load từ vào mảng data và nghĩa
tương ứng vào mảng dataMean.
o Chức năng đưa danh sách từ lên list box với đoạn code sau:
for (int i = -1; i < len - 1; i++)
{
List_Box.Items.Add(data[i + 1]);
}
o Gọi hàm public int[] Load_Position() trong file Position.cs(dòng code gọi
hàm này là pos. Load_Position()) để đưa các vị trí trong file leftright.txt vào
mảng position(được chia làm 28 phần).
2.2.2. Tìm kiếm dữ liệu:
Bước 1: Khi gõ từ lên ô search, danh sách từ có chuỗi bắt đầu như kí tự trên ô
search được load liên tục, sự kiện Search_box_TextChanged trên ô search sẽ giúp

load danh sách này liên tục.
o Hàm được gọi: public void SameWord(string word)trong file Dict.cs. Hàm
này sử dụng hàm Compare(string word, ArrayList data, string language)
o Hàm public int Compare(string word, ArrayList data, string language)
 Các biến truyền vào:
• Word là từ cần tìm.
• Data là mảng từ.
• Language là loại từ điển.
 Trong hàm này, hàm public int Position1(string word, string lang) được
gọi để tìm vị trí của từ trong mảng position. Code:
• Vị trí bắt đầu của kí tự:
left = position[pos.Position1(word, language)];
• Vị trí kết thúc của kí tự:
right = position[pos.Position1(word, language) + 1];
 Hàm tiến hành so sánh từ bằng hàm ci.Compare(word, word2,
CompareOptions.OrdinalIgnoreCase)được cung cấp để so sánh chuỗi về
vị trí trong mảng kết hợp sử dụng thuật toán tìm kiếm nhị phân giúp tìm
kiếm nhanh và trả về vị trí của từ trong mảng data (english.data). Có 2
trường hợp xảy ra:
• Tìm ra từ: sẽ sử dụng ở bước 2.
LTW_C24 Trang 11

• Tìm không ra từ: trong quá trình tìm kiếm, giá trị left tiến dần
đến vùng từ có kí tự bắt đầu như các kí tự trên ô search. Hàm
public void Loadword(int Start, int len)được gọi để cập nhật
danh sách từ gần đúng. Nếu không có từ gần đúng ô seach sẽ
được tô màu cam.
o Biến start tương ứng sẽ là giá trị left.
o Len là số từ trong danh sách.
 Lưu ý option compareOptions.OrdinalIgnoreCase là kiểu sắp xếp,

database xml cũng được sắp xếp theo kiểu này để việc tìm kiếm phù
hợp và chính xác.
 Nghĩa của từ được đưa lên ô Description_text, nghĩa của từ là 1 string
được chèn kí tự “\r\n” để giúp xử lý xuống dòng.
Bước 2: Khi chức năng tìm tra từ được sử dụng: các sự kiện click, keydown
trên search box và list từ.
- Hàm Search_Mean(String word, string[] Special_word, ArrayList Words,
ArrayList Description, string language) được gọi.
o Giải thích các biến truyền vào:
 Word là từ cần tìm.
 Special_word là mảng giúp nhận biết và tô màu các từ đặc biệt trong
nghĩa của từ, ví dụ loại từ(danh từ, động từ, tính từ…), chuyên ngành…
 data mảng từ được truyền vào ở đây mảng data (english.data).
 dataMean mảng nghĩa của từ ở đây là mảng dataMean
(english.dataMean).
o Hoạt động:
 Hàm public int Compare(string word, ArrayList data, string language)
tiếp tục được sử dụng. Hàm sẽ trả về vị trí của từ trong mảng
data(english.data) và cũng là vị trí nghĩa của từ này trong
mảng(english.dataMean). Vì đầu tiên, từ và nghĩa được load vào 2
mảng. Vị trí của từ bên mảng này cũng là vị trí nghĩa của nó ở mảng bên
kia.
2.2.3. Chức năng thêm từ và update sau khi thêm từ:
LTW_C24 Trang 12


- Hàm public void AddWord(string Ele1, string Ele2, string Ele3, string Ele4, int
charCount)
o Ele1: element trong file xml, ở đây là thẻ <Dictionary></Dictionary> chỉ cần
truyền string Dictionary

o Ele2: thẻ <AnhViet></AnhViet>
o Ele3: thẻ <Word></Word>
o Ele4: thẻ <Description></Description>
o Charcount là giá trị: số kí loại kí tự + 1(từ điển anhviet là 28 + 1) của
database(file xml, mảng data) làm giới hạn cho vòng lặp for.
o Sẽ truyền như sau:
 AddWord(“Dictionary”,”AnhViet”,”Word”,”Description”, 29);
- Hoạt động:
o Thêm từ vào file xml, thêm từ vào mảng data.
o Gọi hàm public void Update_Position(int j, int max, string word) để update file
leftright.txt.
- Hàm được sử dụng trong hàm AddWord:
o Hàm compare để tìm vị trí từ cần thêm.
o public int Write_Xml(string word, string newWord, string Description, string
Ele1, string Ele2, string Ele3, string Ele4) được sử dụng để thêm từ vào file
Xml.
 Ý nghĩa các biến:
LTW_C24 Trang 13

• Word là từ được xác định để từ mới thêm vào trước hay sau từ
này
• newWord là từ mới được đưa vào.
• Description là nghĩa của từ mới.
• Các Ele tương tự hàm AddWord.
 Hàm được gọi trong hàm Write_Xml:
• Hàm public XmlNode Search_Node(String SearchString) giúp
tìm từ mà từ mới đưa vào đứng trước hoặc sau.
• Hàm ci.compare() giúp so sánh 2 chuỗi, từ mới add vào đứng
trước hay đứng sau là do hàm ci.compare() quyết định.
2.2.4. Chức năng xóa từ và update sau khi xóa từ:


- Hàm được sử dụng: public void DeleteWord(string strSearch, int charCount).
- Hoạt động: dùng dể xóa từ khỏi file xml và xóa từ trong danh sách hiện tại trên 2
mảng data và dataMean.
- Hàm được sử dụng:
 Hàm public XmlNode Search_Node(String SearchString) giúp tìm đến node
chứa từ cần xóa và gỡ bỏ node này đi bằng câu lệnh: data.RemoveAt(delPos)
để xóa node này trong mảng data và lệnh dataMean.RemoveAt(delPos) để xóa
node này trong mảng dataMean.
 Source.Save(filename) update lại file xml.
LTW_C24 Trang 14

 Gọi hàm pos.Update_Position(1, charCount, txt_Word.Text) để update lại
file leftright.txt.

2.2.5. Speak & Trackwave:
Ta sẽ lấy ra và thay đổi âm lượng của sound card bằng cách sử dụng gọi các
phương thức waveOutGetVolume() và waveOutSetVolume() từ các Windows API
không quản với C# thông qua P/Inboke.

NET framework có nhiều phương thức cho phép bạn có thể sử dụng để lấy về và
thiết lập các cài đặt hệ thống, tuy nhiên việc điều khiển âm lượng bên ngoài của
soundcard thì lại không nằm trong các phương thức ấy. Vì thế, chúng ta sẽ không có tùy
chọn nào khác ngoài cách phải dùng đến Windows API không quản, cụ thể là gọi các
hàm waveOutGetVolume() và waveOutSetVolume() từ thư viện winmm.dll.
Khởi động tạo ứng dụng bằng việc tạo một Windows Application project trong
Visual Studio 2008. Bạn có thể sử dụng Visual Studio 2003 hoặc là Visual Studio 2005
cũng được. Bên trong Windows Application form, đặt một nhãn Label và một đối
tượng TrackBar đặt tên là trackWave để chúng ta sẽ dùng để thay đổi âm lượng âm
thanh.


LTW_C24 Trang 15

Form bạn tạo ra với nhãn và trackWave là TrackBar sẽ có dạng tương tự như hình
vẽ sau:

Bạn cũng có thể thay đổi hướng của đối tượng TrackBar theo chiều thẳng đứng để
nó trông giống như ứng dụng điều khiển âm thanh trong Windows, bằng cách sử dụng
thuộc tính Orientation. Cũng không có thuộc tính nào của điều khiển TrackBar cần phải
thay đổi - thuộc tính Minimum và Maximum nên để cho nó có giá trị mặc định tương
ứng là 0 và 10. Điều này sẽ để cho điều khiển của chúng ta có 10 bước nhảy để điều
khiển âm thanh. Tất nhiên, bạn có thể vặn cho nó theo ý thích của bạn, trong trường
hợp bạn muốn để người dùng có khả năng điều chỉnh mức âm thanh mịn hơn.
Chuyển sang chế độ code, và thêm dòng tiền chỉ thị sau, bởi vì chúng ta sẽ phải gọi
đến một DLL không quản.
using System.Runtime.InteropServices;
Bây giờ chúng ta có thể gọi đến hai hàm từ winmm.dll. DLL này được đặt trong
thư mục Windows System32 và có kích thước khoảng 172 KB.
[DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
Đến giờ chúng ta đã sẵn sàng để gọi đến các hàm, nhưng không giống như các
cuộc gọi Windows API khác, có hai vấn đề hơi khó khăn và chúng ta cần phải làm
một số tính toán trước khi có thể lấy ra và thiết lập âm lượng.
Để cho ứng dụng của chúng ta làm việc đúng cách, điều trước tiên chúng ta cần
làm là lấy về mức âm lượng âm thanh hiện thời và thiết lập nó lên trên TrackBar
LTW_C24 Trang 16

(trackWave), nếu không thì nó sẽ luôn luôn có giá trị mặc định là 0. Chúng ta muốn

làm điều đó mỗi khi ứng dụng được nạp, vì thế người sử dụng ngay lập tức thấy
TrackBar được điều chỉnh đúng khi ứng dụng khởi động chạy.
Do đó, trong hàm khởi tạo của form (Form1()) ngay sau dòng lệnh
InitializeComponent() chúng ta sẽ đặt các dòng mã sau:
// By the default set the volume to 0
uint CurrVol = 0;
// At this point, CurrVol gets assigned the volume
waveOutGetVolume(IntPtr.Zero, out CurrVol);
// Calculate the volume
ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
// Get the volume on a scale of 1 to 10 (to fit the trackbar)
trackWave.Value = CalcVol / (ushort.MaxValue / 10);
Lúc này bạn có thể biên dịch ứng dụng, và bạn sẽ thấy trackbar được điều chỉnh
đúng với mức âm lượng âm thanh hiện tại. Bây giờ chúng đã sẵn sàng cho việc thay
đổi âm lượng bằng cách sử dụng hàm waveOutSetVolume(). Chúng ta sẽ làm điều đó
bên trong sự kiện Scroll của trackWave (điều khiển TrackBar). Để nhận được handler
của sự kiện đó, bạn có thể đơn giản chỉ việc click vào điều khiển bên trong phần thiết
kế form. Bây giờ, bên trong handler của sự kiện trackWave_Scroll(), dùng đoạn mã
như sau:
// Calculate the volume that's being set
int NewVolume = ((ushort.MaxValue / 10) * trackWave.Value);
// Set the same volume for both the left and the right channels
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) |
((uint)NewVolume << 16));
LTW_C24 Trang 17

// Set the volume
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
Bây giờ chúng ta đã có thể biên dịch ứng dụng và dịch chuyển trackbar để điều
chỉnh âm lượng âm thanh.

2.2.6. Hình ảnh minh họa cho từ:

- Sử dụng hàm public static void illstratePic(string path, string pic).
 Hoạt động: bool kt_ima = File.Exists(path + pic + ".jpg") câu lệnh này
dùng để kiểm tra xem có tồn tại file ảnh mà trùng tên với search_box hay
không.
 Sau đó load file vào picturebox lấy từ đường dẫn đến file chứa hình ảnh.
2.2.7. Nhúng Google translate vào chương trình:
LTW_C24 Trang 18


- Chức năng: giúp tra từ, dịch đoạn văn qua lại giữa nhiều ngôn ngữ khác
nhau. Giúp nâng khả năng đọc và dịch văn bản.
- Hoạt động:
o Gửi yêu cầu lên trang translate.google.com và nhận và phân tích kết
quả. Thư viện WebResourceProvider.dll lấy nội dung từ google và thư
viện StringParser.dll để phân tích nội dung và đưa ra kết quả mong
muốn. Việc phân tích và sử dụng các hàm của hai thư viện trên được
thực hiện bởi chương trình GoogleTranslator được import vào chương
trình từ điển HCN-T UIT Dictionary như một thư viện.
o Khởi tạo đối tượng của class Google Translator và gọi hàm Translate()
để thực hiện dịch văn bản.
// Khởi tạo đối tượng
Translator t = new Translator();
t.SourceLanguage = langFrom.SelectedItem.ToString() ; //Ngôn
ngữ cần dịch.
t.TargetLanguage = langTo.SelectedItem.ToString(); //Ngôn
ngữ sau khi dịch.
LTW_C24 Trang 19


t.SourceText = txt_Translate.Text; //văn bản cần dịch.
t.Translate(); //Tiến hành dịch
txt_Translated.Text = t.Translation; //trả về văn bản đã dịch.

2.2.8. Thay đổi giao diện cho chương trình:

- Chức năng: nâng cao tính thẩm mĩ cho chương trình. Ở đây có 5 loại giao
diện: default, pen, blue, green, purple. Chương trình giúp lưu tự động trạng
thái giao diện hiện tại và thể hiện ở lần dùng sau.
- Hoạt động:
 File status.txt lưu trạng thái của giao diện bằng các con số 1, 2 ,3, 4,
hoặc 5 Khi chương trình chạy, file này sẽ được đọc và trả về trang
thái giao diện đã dùng ở lần sử dụng trước. Tương ứng với các số trên,
các giao diện tương ứng sẽ được gọi. Cụ thể là: 1 tương ứng với
default, 2 tương ứng với green, 3 tương ứng với pen, 4 tương ứng với
purple, 5 tương ứng với blue.
- Hàm được sử dụng:

×