Đề tài Xử lý câu truy vấn bằng phép toán đại số kết hợp thời gian
          
        
            
            
              
            
 
            
                
                    Thao tác nhập câu truy vấn : ta tô đen ký tự không kết thúc trong vùng Input Query thì tự 
động xuất hiện trong vùng Produced Rule luật sinh cho ký tự không kết thúc này. Sau đó ta chọn 
luật sinh phù hợp trong vùng Produced Rule rồi nhấn nút OK. Quá trình lập lại cho các ký tự 
không kết thúc khác. Quá trình nhập câu truy vấn được hoàn thành khi tất cả ký tự không kết 
thúc (ký tự hoa) không còn nữa.
                
              
                                            
                                
            
 
            
                
17 trang | 
Chia sẻ: maiphuongtl | Lượt xem: 2037 | Lượt tải: 0
              
            Bạn đang xem nội dung tài liệu Đề tài Xử lý câu truy vấn bằng phép toán đại số kết hợp thời gian, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 40 
PHẦN 3 : 
THUYẾT MINH CHƯƠNG TRÌNH 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 41 
1- Thiết kế sơ đồ EER 
Ta xây dựng 1 ứng dụng cho công ty theo các chi tiết cụ thể sau : 
 Tại 1 công ty có nhiều phòng ban, mỗi phòng ban có nhiều nhân viên và 1 nhân viên chỉ 
thuộc 1 phòng duy nhất. Mỗi phòng chỉ có 1 người quản lý và người quản lý chỉ quản lý 1 
phòng. Mỗi phòng có nhiều dự án và 1 dự án chỉ được quản lý bởi 1 phòng. Nhân viên có thể 
tham gia vào nhiều dự án, nhưng chỉ được tham gia vào 1 dự án tại 1 thời điểm duy nhất. Mỗi dự 
án có 1 nhà quản lý và nhà quản lý có thể quản lý nhiều dự án nhưng tại 1 thời điểm chỉ được 
quản lý 1 dự án. 
2- Xây dựng cấu trúc dữ liệu : 
 Ta có các lớp đối tượng sau dùng nhập xuất dữ liệu : 
TEmployeeForm = class(TForm) 
 EmpID : TLabel; 
 Msnv : TEdit; 
 EmpName : TLabel; 
 Tennv : TEdit; 
 InDepartment : TButton; 
 InProject : TButton; 
 Top : TButton; 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 42 
 Bottom : TButton; 
 Next : TButton; 
 Previous : TButton; 
 Exit : TButton; 
 Save : TButton; 
 procedure ExitClick(Sender: TObject); 
 procedure InDepartmentClick(Sender: TObject); 
 procedure InProjectClick(Sender: TObject); 
 procedure TopClick(Sender: TObject); 
 procedure BottomClick(Sender: TObject); 
 procedure NextClick(Sender: TObject); 
 procedure PreviousClick(Sender: TObject); 
 procedure SaveClick(Sender: TObject); 
 procedure Init(var point : TNhan_vien); 
 procedure Restore(var point : TNhan_vien); 
 procedure Displayed(point : TNhan_vien); 
 procedure Emp_Sal; 
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 
TDepartmentForm = class(TForm) 
 DeptID : TLabel; 
 Msphong : TEdit; 
 DeptName : TLabel; 
 Tenphong : TEdit; 
 DeptManager : TButton; 
 Top : TButton; 
 Bottom : TButton; 
 Next : TButton; 
 Previous : TButton; 
 Save : TButton; 
 Exit : TButton; 
 procedure ExitClick(Sender: TObject); 
 procedure DeptManagerClick(Sender: TObject); 
 procedure TopClick(Sender: TObject); 
 procedure BottomClick(Sender: TObject); 
 procedure NextClick(Sender: TObject); 
 procedure PreviousClick(Sender: TObject); 
 procedure SaveClick(Sender: TObject); 
 procedure Init(var point : T_Phong); 
 procedure Restore(var point : T_Phong); 
 procedure Displayed(point : T_Phong); 
 private 
 { Private declarations } 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 43 
 public 
 { Public declarations } 
 end; 
TProject Form = class(TForm) 
 ProjID : TLabel; 
 Msda : TEdit; 
 ProjName : TLabel; 
 Tenda : TEdit; 
 ProjManager : TButton; 
 DeptManageProj : TButton; 
 Top : TButton; 
 Bottom : TButton; 
 Next : TButton; 
 Previous : TButton; 
 Save : TButton; 
 Exit : TButton; 
 procedure ProjManagerClick(Sender: TObject); 
 procedure DeptManageProjClick(Sender: TObject); 
 procedure SaveClick(Sender: TObject); 
 procedure ExitClick(Sender: TObject); 
 procedure TopClick(Sender: TObject); 
 procedure BottomClick(Sender: TObject); 
 procedure NextClick(Sender: TObject); 
 procedure PreviousClick(Sender: TObject); 
 procedure Init(var point : TDu_an); 
 procedure Restore(var point : TDu_an); 
 procedure Displayed(point : TDu_an); 
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 
 Ngoài ra, để quản lý dữ liệu ta còn xây dựng thêm các cấu trúc sau : 
TTime = array[1..2] of TDatetime; 
T_EmpRef = ^ TEmpRef; 
T_DeptRef = ^ TDeptRef; 
T_ProjRef = ^ TProjRef; 
T_Salary = ^TSalary; 
 TSalary = Record 
 luong : integer; 
 time : TTime; 
 next : T_Salary; 
 pre : T_Salary; 
 end; 
 TNhan_vien = ^ TNhanvien; 
 TNhanvien = Record 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 44 
 msnv : string; 
 tennv : string; 
p_InDept : T_DeptRef; 
 p_InProj : T_ProjRef; 
 p_DeptManager : T_DeptRef; 
 p_ProjManager : T_ProjRef; 
 p_luong : T_Salary; 
 next : TNhan_vien; 
 pre : TNhan_vien; 
 end; 
 T_Phong = ^ TPhong; 
 TPhong = Record 
 msphong : string; 
 tenphong : string; 
 p_DeptManager : T_EmpRef; 
 p_Dept_Man_Proj : T_ProjRef; 
 p_InDept : T_EmpRef; 
 next : T_Phong; 
 pre : T_Phong; 
 end; 
 TDu_an = ^ TDuan; 
 TDuan = Record 
 msda : string; 
 tenda : string; 
 p_ProjManager : T_EmpRef; 
 p_Dept_Man_Proj : T_DeptRef; 
 p_InProj : T_EmpRef; 
 next : TDu_an; 
 pre : TDu_an; 
 end; 
 TEmpRef = Record 
 time : TTime; 
 next : T_EmpRef; 
 pre : T_EmpRef; 
 ref : TNhan_vien; 
 end; 
 TDeptRef = Record 
 time : TTime; 
 next : T_DeptRef; 
 pre : T_DeptRef; 
 ref : T_Phong; 
end; 
 TProjRef = Record 
 time : TTime; 
 next : T_ProjRef; 
 pre : T_ProjRef; 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 45 
 ref : TDu_an; 
 end; 
 Với cấu trúc dữ liệu trên ta có thể mô hình hoá quan hệ của các đối tượng theo hình dưới 
đây : 
 Chú thích : 
  [TIME] : là đoạn thời gian, từ thời điểm T1 đến T2 (T1<=T2) tính theo ngày 
 Ví dụ : T1 = 1/1/99 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 46 
 T2 = 31/12/99 
  Các phần in đậm để xác định thuộc tính đó do đối tượng đó tạo ra trực tiếp qua 
form nhập từ đối tượng đó. 
  Các phần in nghiêng để xác định thuộc tính đó do đối tượng đó tạo ra gián tiếp 
qua form nhập từ đối tượng khác. 
  Các cặp mũi tên giống nhau (có nhiều loại mũi tên kích cỡ khác nhau) để xác định 
các tham chiếu qua lại giữa 2 đối tượng đó. 
Dưới đây là cấu trúc dữ liệu theo thứ tự của các đối tượng : 
 + Employee 
 + Department 
 + Project 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 47 
Theo hình vẽ trên, ta có 3 loại đối tượng là Employee, Department và Project. 
 Khi đối tượng này được tạo ra, đồng thời từng thuộc tính của đối tượng này (với các loại 
đối tượng khác) cũng được tạo ra chuẩn bị cho việc xác lập các mối quan hệ cụ thể. Khi sự xác 
lập mối quan hệ từ đối tượng này (thông qua thuộc tính cụ thể của chúng) đến loại đối tượng 
khác thì đồng thời cũng tạo ra mối quan hệ từ đối tượng khác đó (thông qua thuộc tính cụ thể của 
chúng) đến đối tượng này. Do đó, để quản lý các quan hệ giữa các đối tượng động theo thời gian 
thì mỗi thuộc tính của mỗi đối tượng đều được xây dựng 1 danh sách liên kết kép, trong đó mỗi 
phần tử của danh sách liên kết kép này đều lưu trữ 1 khoảng thời gian xác định mối quan hệ đó. 
Các khoảng thời gian trong mỗi thuộc tính được sắp xếp tăng dần và không trùng lắp lên nhau. 
Do đó khi nhập dữ liệu liên quan đến thời gian, nếu 2 khoảng thời gian trong 1 thuộc tính trùng 
lắp lên nhau sẽ bị báo lỗi và dữ liệu không được lưu. 
 Mặt khác, ta xây dựng theo mô hình đối tượng nên các mối quan hệ giữa các đối tượng 
đều sử dụng con trỏ chỉ đến đối tượng khác. 
 a- Employee : 
 Bao gồm 3 thuộc tính là p_luong, p_InDept, p_InProj được tạo ra trực tiếp từ đối tượng 
này và 2 thuộc tính p_DeptManager và p_ProjManager được tạo ra gián tiếp khi mối quan hệ từ 
loại đối tượng khác đến đối tượng này được tạo ra. 
 b- Department : 
 Bao gồm 1 thuộc tính là p_DeptManager, được tạo ra trực tiếp từ đối tượng này và 2 
thuộc tính p_DeptManageProj và p_InDept được tạo ra gián tiếp khi mối quan hệ từ loại đối 
tượng khác đến đối tượng này được tạo ra. 
 c- Project : 
 Bao gồm 2 thuộc tính là p_ProjManager và p_DeptManageProj được tạo ra trực tiếp từ 
đối tượng này và thuộc tính p_InProj được tạo ra gián tiếp khi mối quan hệ từ loại đối tượng 
khác đến đối tượng này được tạo ra. 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 48 
3- Các thành phần của chương trình : 
Trước khi tìm hiểu các thành phần của chương trình, ta có thể tóm tắt hoạt động của chương 
trình qua sơ đồ sau : 
 Theo hình 1 và 2 ta có các thành phần sau : 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 49 
Hình 1 
Hình 2 
 Menu Inputdata bao gồm các chức năng sau : 
  Save 
  Load 
  Employee 
  Department 
  Project 
  Exit 
Menu Query bao gồm các chức năng sau : 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 50 
  Input 
  Process 
  About 
a- Save : Chức năng này để lưu lại cấu trúc dữ liệu mà được nhập liệu vào từ 3 chức năng 
Employee, Department và Project. Vì ta xây dựng theo mô hình đối tượng nên ta đã tạo ra các 
kiểu pointer động để trỏ đến các đối tượng, nhưng khi ta lưu trữ lại mô hình đó trên đĩa sẽ gặp 
khó khăn khi phục hồi lại dữ liệu và mô hình. Để đảm bảo cho mô hình và dữ liệu được phục hồi 
hoàn toàn, ta phải biến đổi các pointer động dựa vào ID duy nhất của mỗi đối tượng. 
b- Load : Chức năng này để phục hồi lại mô hình đã được cất giữ trên đĩa và nạp chúng vào bộ 
nhớ. 
c- Employee : Dùng để nhập dữ liệu cho các đối tượng kiểu Employee và các thuộc tính của 
chúng như sau : 
Hình 3 
Theo hình 3, ta có thể nhập dữ liệu cho mục EmpID và EmpName. Khi nhập dữ liệu mới, lúc 
này 2 nút InDepartment và InProject không có tác dụng cho đến khi ta nhấn nút Save. Khi nút 
Save được nhấn thì sẽ kích hoạt một form mới để nhập dữ liệu cho thuộc tính Luong (Hình 4). 
Theo hình 4, quá trình nhập Luong sẽ kết thúc khi ta nhấn nút Exit, đồng thời trở về form 
nhập liệu Employee (hình 3). Lúc này các vùng nhập liệu trong form sẽ trống để ta nhập dữ liệu 
cho đối tượng khác. Do đó để nhập liệu cho mục InDepartment và InProject thì ta phải sử dụng 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 51 
các nút Top, Bottom, Next, Previous để đến đúng đối tượng và khi này các nút InDepartment và 
InProject mới có tác dụng, cho phép ta nhập dữ liệu quan hệ đến đối tượng Department và 
Project. Mỗi thuộc tính InDepartment trong Employee (Hình 5) được tạo ra trỏ đến đối tượng 
Department thì một thuộc tính InDepartment trong Department cũng được tạo ra và trỏ đến 
Employee với dữ liệu thời gian giống nhau. Tương tự, khi ta tạo ra thuộc tính InProject trong 
Employee (Hình 6) trỏ đến Project thì thuộc tính InProject trong Project cũng được tạo ra và trỏ 
đến Employee. Riêng thuộc tính Luong trong Employee được tạo độc lập không quan hệ với các 
đối tượng khác do đặc trưng riêng biệt của nó. 
Hình 4 
Hình 5 
d- Department : Dùng để nhập dữ liệu cho các đối tượng kiểu Department và các thuộc tính của 
chúng (Hình 7). 
Với cách thức nhập tương tự như đối tượng Employee, riêng thuộc tính DeptManager (Hình 8) 
trong Department được tạo ra trỏ đến Employee đồng thời thuộc tính DeptManager trong 
Employee được tạo ra và trỏ tới Department. 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 52 
Hình 6 
Hình 7 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 53 
e- Project : Dùng để nhập dữ liệu cho các đối tượng kiểu Project và các thuộc tính của chúng 
như sau (Hình 9). 
Hình 9 
Cũng giống như đối tượng Employee và Department, các đối tượng kiểu Project cũng được tạo 
ra tương tự. Riêng thuộc tính ProjManager (Hình 10) và DeptManageProj (Hình 11) được tạo ra 
để lần lượt trỏ đến đối tượng Employee và Department và ngược lại thuộc tính ProjManager 
trong Employee và DeptManageProj trong Department cũng được tạo ra và trỏ đến Project. 
Hình 10 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 54 
Hình 11 
f- Input : Chức năng này để nhập câu truy vấn (Hình 12). 
Hình 12 
 Theo hình 12 thì có 3 vùng để hiển thị là : 
 - Produced Rule : hiển thị các luật sinh đối với ký tự không kết thúc. 
 - Input Query : hiển thị câu truy vấn đang được thao tác. 
 - Processing Query : hiển thị câu truy vấn đang được xử lý dựa trên vùng Input Query để 
xây dựng cây cú pháp phục vụ quá trình xử lý câu truy vấn. 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 55 
 Ngoài ra, còn có nút OK để chọn luật sinh phù hợp cho ký tự không kết thúc và nút Exit 
dùng để thoát và hủy toàn bộ quá trình nhập câu truy vấn đó. 
 Thao tác nhập câu truy vấn : ta tô đen ký tự không kết thúc trong vùng Input Query thì tự 
động xuất hiện trong vùng Produced Rule luật sinh cho ký tự không kết thúc này. Sau đó ta chọn 
luật sinh phù hợp trong vùng Produced Rule rồi nhấn nút OK. Quá trình lập lại cho các ký tự 
không kết thúc khác. Quá trình nhập câu truy vấn được hoàn thành khi tất cả ký tự không kết 
thúc (ký tự hoa) không còn nữa. 
 Ngoài ra, để hỗ trợ việc nhập câu truy vấn chương trình còn xây dựng bảng luật sinh 
(hình 13) để xem trước khi chọn luật sinh phù hợp bằng cách nhấp nút phải chọn ngoài các vùng 
hiển thị. 
Hình 13 
g- Process : Chức năng này thực hiện quá trình xử lý câu truy vấn đồng thời trình bày kết quả xử 
lý câu truy vấn (hình 14). 
LUAÄN VAÊN TOÁT NGHIEÄP 
Trang 56 
Hình 14 
 Ngoài ra chương trình còn hỗ trợ việc tham chiếu trực tiếp mối quan hệ của đối tượng đó 
với các loại đối tượng khác (nếu có) bằng cách trỏ con trỏ vào vùng hiển thị của đối tượng đó 
(trong hình 14) sẽ hiển thị mối quan hệ. Cụ thể : 
 - Employee (hình 15). 
 - Department (hình 16) 
- Project (hình 17) 
            Các file đính kèm theo tài liệu này:
luanvan_3_5288.pdf