Những chức năng chưa thực hiện được

Một phần của tài liệu Lập trình hiện đại (Trang 25 - 28)

1. Thiếu chức năng thêm, xóa, s ửa

Nhóm đã chọn dữ liệu từ điển dạng file text và tạo ra 2 file index2, index1 để tránh bớt việc phải tra từ tuần tự quá nhiều. Tuy nhiên, chính cách tổ chức dữ liệu như vậy làm cho việc cập nhật từ điển qua 3 thao tác thêm/ xóa/ sửa gặp nhiều trở ngại. Đặc điểm của file index1 là đã được sắp xếp thứ tự alphabet sao cho các từ có 3 ký tự đầu giống nhau nằm gần nhau tạo thành một cụm, còn file index2 sẽ lưu 3 ký tự đầu của từng cụm từ này, lưu cả vị trí bắt đ ầu và kết thúc c ụm từ.

Các thao tác thêm, xóa, sửa sẽ có một trình tự giống nhau như sau: tìm vị trí để thêm/xóa/sửa từ → thực hiện thêm/xóa/sửa → cập nhật lại các file index2, index1, file nghĩa nếu cần.

a. Những trở ng ại khi thêm từ

Như đã nói, file index1 rất quan tâm đến thứ tự từ. Minh họa như trong hình, giả sử muốn thêm từ „abczzz‟ vào từ điển, phải trải qua 3 bước:

 Trước tiên ta thêm nghĩa vào cuối file nghĩa. Thêm vào cuối file vì file nghĩa là file không cần quan tâm tới thứ tự, file index1 đã lưu giữ vị trí nghĩa cụ thể của từng từ.

 Sau đó tìm một vị trí trong file index1 để chèn thêm từ mới vào. Thao tác tìm vị trí để chèn thêm thực chất chỉ là tra từ mới này trong dữ liệu từ điển.

Thao tác thêm từ còn phải kiểm tra điều kiện là từ đã có trong dữ liệu hay chưa. Việc kiểm tra không khó khăn: khi tìm được vị trí thích hợp để chèn từ mới trong file index1 bước trên, nếu từ ở vị trí này trùng với từ cần thêm, có nghĩa là từ cần thêm đã tồn tại trong dữ liệu, còn nếu từ ở vị trí này không trùng với từ cần thêm, có nghĩa là từ đó chỉ là từ gần đúng với từ cần thêm.

 Vậy sau khi thêm xong từ abczzz, giả sử từ này có kích thước là (x) bytes, khối từ có 3 ký tự đầu là „abc‟ sẽ mở rộng kích thước thêm (x) bytes. Như vậy, phải cập nhật lại file index2 bắt đầu từ dòng abc cho đến hết file. Ví dụ khi cập nhật lại dòng abc, giả sử ban đầu dòng có dạng: abc#vi_tri_bat_dau#vi_tri_ket_thuc#tong_so_tu, sau khi c ập nhật sẽ trở thành abc#vi_tri_bat_dau#vi_tri_ket_thuc + (x)#tong_so_tu + 1.

Việc cập nhật file inde x2 sẽ gây tốn nhiều thời gian.

b. Những trở ng ại khi xóa từ

Đối với việc xóa từ, giả sử người dùng chọn từ muốn xóa và chương trình tính toán được rằng từ nằm ở vị trí thứ n. Thao tác „xóa‟ từ tương đương với việc xóa từ nằm trong file index1 và phần nghĩa của từ đó trong file nghĩa.

 Cách làm thứ nhất là phân chia file index1 ra thành 3 phần: phần một là từ mà người dùng muốn xóa, phần hai là các từ đứng phía trước nó, và phần ba là các từ đứng phía sau. Tạo một file index1 mới, chỉ „sao chép‟ lại phần hai và phần ba của file cũ. Cách này nghe rất đơn giản nhưng hoàn toàn không thể làm được vì dung lượng bộ nhớ của pocket PC không đáp ứng nổi thao tác với file quá lớn như vậy.

 Cách thứ hai là „xóa‟ từ mà người dùng đã chọn bằng các ký tự trắng. Dòng dữ liệu của từ đó trong file index1 sẽ được thay thế bằng các ký tự trắng. Như vậy sẽ không phải sao chép lại file index1. Tuy nhiên cách này hoàn toàn không hay vì thực sự không xóa được từ ra khỏi dữ liệu. Nếu làm theo cách này, dung lượng của bộ dữ liệu hoàn toàn không giảm đi sau khi xóa từ. Đồng thời, tất cả các hàm xử lý sự kiện load từ hay tìm từ mà nhóm đã thiết kế sẽ phải sửa đổi rất nhiều để có thể phù hợp.

c. Những trở ng ại khi sửa từ

Thông thường việc sửa từ chỉ cho phép người dùng sửa phần nghĩa của từ, vì các từ trong dữ liệu từ điển đã được kiểm tra tính đúng đắn. Nhóm đã chọn lớp FileStream để thao tác với dữ liệu. Nhược điểm của FileStream là không cung cấp thao tác sửa dữ liệu mà chỉ cung c ấp việc đọc ghi dữ liệu theo từng byte. Vì vậy, tổ chức dữ liệu theo cách này sẽ không thể thực hiện chức năng sửa từ.

2. Thiếu chức năng Click and See:

Khi hiện nghĩa của một từ, nếu trong phần nghĩa có chứa những từ khác cùng nằm trong bộ dữ liệu từ điển của từ đang được tra, thì người dùng có thể click chuột lên từ đó để xem nghĩa mà không cần phải gõ từ lên ô tìm kiếm.

Web browser trên dot Net CF không hỗ trợ nhiều tính năng như trên desktop. Cơ bản nhất là phương thức click không có. Để thực hiện được chức năng này, cần phải viết một lớp web browser mới, kế thừa web browser có sẵn và thêm các phươn thức cần thiết hỗ trợ cho việc click và select văn bản trên web browser này.

Một phần của tài liệu Lập trình hiện đại (Trang 25 - 28)