Đề 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: 1809 | 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