Bài tập access nâng cao, hướng dẫn lập trình CSDL
Trang 1KHOA TIN HỌC QUẢN LÝ
Dùng cho các lớp: TIN HỌC - KẾ TOÁN
Số tiết lý thuyết: 30 tiết
Số tiết thực hành: 60 tiết
Biên soạn: ThS Lê Đình Ngân
- TP.Hồ Chí Minh, 02/2008 -
Trang 2TRƯỜNG ĐẠI HỌC BC MARKETING
KHOA TIN HỌC QUẢN LÝ
********
Lớp: Tin học - Kế Toán
Lý thuyết: 30 tiết Thực hành: 60 tiết Giảng viên: ThS.Lê Đình Ngân
BÀI TẬP 1: Chuyên đề Lương – Nhân sự
Cho CSDL quản lý lương – nhân sự (LuongNS.MDB) như sau:
1 Tạo các Tables sau để quản lý nhân sự - lương:
1.1. Table TblHosonhanvien:
FieldName FieldType FieldSize Description
MaNV Text 5 Mã nhân viên - Primary Key
MaBP Text 4 Mã bộ phận - Foreign Key – Lookup
MaCV Text 4 Mã chức vụ - Foreign Key – Lookup
Holot Text 40 Họ lót – Not Null
1.2. Table TblLylich:
FieldName FieldType FieldSize Description
MaCM Text 5 Mã chuyên môn - Foreign Key – Lookup MaNN Text 5 Mã ngoại ngữ - Foreign Key – Lookup
MaTP Text 3 Mã thành phần – Foreign Key – Lookup
MaTT Text 5 Mã tình trạng gia đình – Foreign Key – Lookup MaTG Text 5 Mã tôn giáo – Foreign Key – Lookup
MaTD Text 5 Mã trình độ - Foreign Key – Lookup
Ngaysinh DateTime ShortDate Ngày sinh
Trang 3DCLL Text 40 Địa chỉ liên lạc
MobileNumber Text 10 Số di động
1.3. Table TblDanhmucchucvu:
FieldName FieldType FieldSize Description
Phucap Number Long Integer Phụ cấp chức vụ
1.4. Table TblDanhmucbophan:
FieldName FieldType FieldSize Description
1.5. Table TblDanhmuchuyenmon:
FieldName FieldType FieldSize Description
1.6. Table TblDanhmucngoaingu:
FieldName FieldType FieldSize Description
1.7. Table TblDanhmucthanhphan:
FieldName FieldType FieldSize Description
1.8. Table TblDanhmuctinhtrang:
Trang 4FieldName FieldType FieldSize Description
MaTT Text 5 Mã tình trạng gia đình - Primary Key
1.9. Table TblDanhmuctongiao:
FieldName FieldType FieldSize Description
1.10. Table TblDanhmuctrinhdo:
FieldName FieldType FieldSize Description
1.11. Table TblHosoluong:
FieldName FieldType FieldSize Description
Mangach Text 6 Mã số ngạch – Foreign Key – Lookup
Hesoluong Number Single Hệ số lương
1.12. Table TblNgachluong:
FieldName FieldType FieldSize Description
Mangach Text 6 Mã số ngạch – Primary Key
1.13. Table TblDGLSP (Đơn giá lương sản phẩm):
FieldName FieldType FieldSize Description
Dongia Number Long Integer Đơn giá lương sản phẩm
1.14. Tabe TblCCGT (Chấm công gián tiếp):
FieldName FieldType FieldSize Description
NgayLV Number Byte Ngày làm việc
Trang 5NgayCT Number Byte Ngày công tác
Ngayphep Number Byte Ngày nghỉ phép
NgayKP Number Byte Ngày nghỉ không phép
1.15. Table TblCCTT (chấm công trực tiếp):
FieldName FieldType FieldSize Description
MaSP Text 5 Mã sản phẩm – Foreign Key – Lookup Soluong Number Long Integer Số lượng sản phẩm hoàn thành
1.16. Table TblLuongthang (lương tháng):
FieldName FieldType FieldSize Description
Luongky1 Number LongInteger Lương kỳ 1
Luongky2 Number Long Integer Lương kỳ 2
PCTN Number Long Integer Phụ cấp trách nhiệm
PCDH Number Long Integer Phụ cấp độc hại
PCCA3 Number Long Integer Phụ cấp ca 2
BHXH Number Long Integer Bảo hiểm xã hội
BHYT Number Long Integer Bảo hiểm y tế
Antrua Number Long Integer Tiền ăn trưa
ThuongNS Number Long Integer Thưởng năng suất
ThueTN Number Long Integer Thuế thu nhập cá nhân
2 Tạo các Tables phân quyền đăng nhập:
2.1. Table TblDanhsach (danh sách người sử dụng):
FieldName FieldType FieldSize Description
MaNSD Text 6 Mã người sử dụng - Primary Key
Tendangnhap Text 20 Tên đăng nhập
2.2. Table TblPhanquyen (phân quyền sử dụng):
Trang 6FieldName FieldType FieldSize Description
3 Thiết lập quan hệ giữa các Tables trên:
4 Thiết kế Form:
4.1. Form giới thiệu chương trình (FrmGioithieu):
Yêu cầu:
Form chứa một Label Hyperlink đến địa chỉ Email
Form mở ra trong vòng 1 giây, sau đó tự động đóng lại và mở Form đăng nhập
Tương tự như trên, SV làm Form giới thiệu chương trình của mình
Trang 74.2. Form đăng nhập (FrmDangnhap):
Yêu cầu:
Nhập thông tin: tên đăng nhập (TxtTendangnhap) và mật khẩu (TxtMatkhau)
Khi bấm nút đăng nhập (CmdDangnhap), chương trình sẽ kiểm tra:
Nếu đúng tên đăng nhập và mật khẩu: đóng Form FrmDangnhap và mở Form chính (FrmMainForm)
Nếu sai tên đăng nhập hoặc mật khẩu: xoá các Textbox TxtTendangnhap và TxtMatkhau, sau đó bắt nhập lại
Phần phát triển:
Xây dựng một Combobox (CboNhom) phân nhóm người sử dụng
Sau khi nhập tên đăng nhập (TxtTendangnhap), mật khẩu (TxtMatkhau) và chọn nhóm người sử dụng (CboNhom), chương trình sẽ kiểm tra thông tin trong Table TblDanhsach:
Nếu đúng: đóng Form FrmDangnhap và mở MainForm (FrmMainForm)
Nếu sai: xoá các Textbox và bắt nhập lại
4.3. Form chính (FrmMainForm):
Trang 8Yêu cầu:
Xây dựng một TreeView cho MainForm (xem hình), các nút (Nodes) của TreeView được gắn với các File đồ họa (Download tại thư mục Dinhngan\Graphics của ổ dĩa mạng)
Xây dựng một UserMenu thay thế System Menu của Access Dạng UserMenu như sau:
Khi chọn “Thoát về Access”: đóng MainForm về trở về CSDL Access
Khi chọn ”Thoát về Windows”: đóng CSDL Access và thoát về Windows
(GHI CHÚ: Sv phải thiết kế bằng Macros, không được dùng Wizard)
Khi người sử dụng bấm chọn một mục trên TreeView thì Form tương ứng sẽ được hiển thị trong MainForm Khi hiển thị trên MainForm, các Form này phải đảm bảo các thuộc tính sau:
Vị trí xuất hiện: cạnh TreeView (không được che khuất TreeView)
Vị trí của Form phải được cố định, không thể di chuyển
4.4. Form chấm công gián tiếp (FrmCCGT):
Trang 9Yêu cầu:
Khi chấm công trên Form thì chương trình tự động cập nhật vào Table tương ứng
Chỉ đưa vào Listbox những nhân viên thuộc bộ phận gián tiếp (Ban giám đốc, phòng Kế toán – Tài vụ, phòng Kinh doanh, …)
Khi chọn nút Xem lương (CmdXemluong), chương trình sẽ tự động tính toán lương
và xuất ra bảng lương bộ phận gián tiếp
4.5. Form chấm công trực tiếp (FrmCCTT):
Trang 10Yêu cầu:
Chọn công nhân muốn chấm công trong Combobox, thông tin tương ứng của công nhân
sẽ hiển thị trên Form
Chọn mã sản phẩm hoàn thành, số lượng sản phẩm hoàn thành, chương trình sẽ tự động tính lương sản phẩm và cập nhật vào Textbox tương ứng
Thêm nút “In Lương” CmdInluong vào Form, khi bấm nút này sẽ hiển thị bảng lương công nhân trực tiếp sản xuất
4.6. Form cập nhật hồ sơ nhân viên (FrmCapnhat):
Trang 11Yêu cầu:
Khi bấm nút “Tìm theo mã nhân viên” (CmdTimnhanvien), chương trình sẽ xuất hiện
hộp thoại cho phép nhập mã nhân viên muốn tìm
Nếu tìm thấy thì cập nhật vào Form
Nếu không tim thấy sẽ xuất hiện thông báo
Trang 12Khi bấm nút “In danh sách” (CmdIndanhsach), chương trình sẽ xuất hiện SubMenu
cho phép chọn danh sách bộ phận cần in
Khi chọn bộ phận cần in và bấm nút “In danh sách” (CmdIn), chương trình sẽ tiến hành
in danh sách bộ phận cần in Dạng tổng quát bộ phận cần in:
4.7 Thiết kế Form cập nhật hồ sơ lương (FrmCapnhatHSL):
Trang 13Khi chọn mã số ngạch lương và bậc lương, chương trình sẽ tự động cập nhật hệ số lương và tính lương căn bản
Cập nhật thơng tin vào Textbox và Table tương ứng
4.8 Thiết kế các chương trình sau (tự thiết kế giao diện):
4.8.1 Tạm ứng lương: cho phép CNVC được tạm ứng 50% lương cơ bản vào đầu tháng
Cho biết:
lươngsốHệ ng)đồng/thá
thiểutốiLương ng)đồng/thá
bảncơLương
GHI CHÚ: sau khi tính tốn, số liệu được cập nhật vào Table lương tháng (TblLuongthang)
5 Thiết kế các câu truy vấn (Queries) sau:
(Lưu ý: SV thiết kế bằng cách viết lệnh, khơng dùng chế độ Query Design)
a) Cho biết tổng số nhân viên của từng bộ phận Thơng tin kết xuất bao gồm: tên bộ phận, tổng số nhân viên của bộ phận
b) Liệt kê những nhân viên phịng Kế tốn – Tài vụ (mã bộ phận là “KTTV”), cĩ phái là
nữ (No) và tuổi từ 25 trở lên Thơng tin kết xuất bao gồm: mã nhân viên, họ và tên, tên
bộ phận, tên phái (xuất ra là “Nam” hoặc “Nữ”), tuổi
c) Liệt kê những nhân viên phịng Kinh doanh (mã bộ phận là “KD”) cĩ mức lương căn bản thấp nhất Thơng tin kết xuất bao gồm: mã nhân viên, họ và tên, tên bộ phận, lương căn bản
Trang 14d) Liệt kê danh sách ban giám đốc (mã bộ phận là “BGD”) Thơng tin kết xuất bao gồm:
mã nhân viên, họ và tên, tên chức vụ, phái (in ra “nam” hoặc “nữ”), tuổi, trình độ, lương căn bản, phụ cấp
e) In danh sách bảng lương sắp xếp theo từng bộ phận Thơng tin kết xuất bao gồm: mã nhân viên, họ và tên, tên bộ phận, tên chức vụ, lương căn bản, phụ cấp, các dạng ngày cơng (làm việc, cơng tác,…) và lương lãnh
Cho biết cách tính lương như sau:
− Lương lãnh bao gồm cả phụ cấp (nếu cĩ)
− Ngày làm việc, cơng tác, phép: được hưởng 100% lương
− Ngày nghỉ ốm: hưởng 85% lương
− Nghỉ khơng phép: khơng cĩ lương
ngày26
bảncăn
Lươngøy)
(đồng/nga
côngngàygiá
Đơn
=
f) Cho biết tổng ngày cơng nghỉ ốm của từng bộ phận trong tháng Thơng tin kết xuất bao gồm: mã bộ phận, tên bộ phận, tổng ngày cơng nghỉ ốm của bộ phận Sắp xếp thứ tự theo mã bộ phận
g) Cho biết tổng lương lãnh của từng bộ phận Thơng tin kết xuất bao gồm: mã bộ phận, tên bộ phận, tổng lương lãnh của bộ phận, tổng phụ cấp của bộ phận
h) Cho biết nhân viên nào cĩ số ngày làm việc cao nhất Thơng tin kết xuất bao gồm: mã nhân viên họ và tên, tên bộ phận, lương căn bản, số ngày làm việc
i) Liệt kê những nhân viên thoả điều kiện sau:
− Thuộc bộ phận “KTTV” hoặc “KD” hoặc “PX1”
− Chức vụ là nhân viên (“NV”)
− Sinh trong tháng 5 và cĩ số tuổi từ 30 trở lên Thơng tin kết xuất bao gồm: mã nhân viên, tên bộ phận, họ và tên, tên chức vụ, ngày sinh Sắp xếp thứ tự theo mã bộ phận
j) Viết Query cập nhật thêm một mẫu tin mới vào Table TblDanhmucchucvu như sau:
− Mã chức vụ: PQD
− Tên chức vụ: Quản đốc phân xưởng
− Phụ cấp: 1.200.000
Trang 15BÀI TẬP 2: Lập trình trong MS.Access:
Sinh viên có thể sử dụng tiếp CSDL Access ở câu 1 hoặc tạo CSDL Access mới
1. Tạo Form tính lương (FrmTinhluong) như sau:
Yêu cầu xử lý:
Khi bấm nút thực hiện, chương trình sẽ:
Kiểm tra Table chấm công tương ứng trong CSDL Access, tên Table chấm công được đặt theo quy ước sau:
− Các ký tự đầu: “TblChamcong”
− Từ 1 đến 2 ký tự kế tiếp chỉ tháng
− 4 ký tự kế tiếp chỉ năm
Nếu không tìm thấy thì xuất hiện thông báo:
Nếu chọn OK, chương trình sẽ tự động tạo Table chấm công của tháng mới
Nếu chọn Cancel, sẽ thoát khỏi chương trình
Nếu tìm thấy Table chấm công tương ứng thì cho phép mở Form chấm công
2 Thiết kế các hàm sau trong MS.Access:
2.1 Viết hàm tính tiền lương sản phẩm có thưởng theo phương pháp luỹ tiến:
Hàm có 2 đối số (Arguments):
Đối số thứ 1: mã sản phẩm (“A”,”B”,”C”)
Đối số thứ 2: số lượng sản phẩm hoàn thành
Hàm trả về một giá trị (Return Value) kiểu số, mang ý nghĩa là lương sản phẩm của mỗi công nhân căn cứ vào mã sản phẩm và số lượng sản phẩm hoàn thành, được nghiệm thu theo đúng quy cách, chất lượng
Cho biết:
Cách xác định định mức và đơn giá sản phẩm:
Trang 16Cách tính đơn giá sản phẩm cĩ thưởng:
− Sản phẩm hồn thành<= địnhmức: ĐGSP * 1.0 (khơng cĩ thưởng)
− Sản phẩm hồn thành vượt khoảng <=10% định mức:
Đơn giá sản phẩm = ĐGSP * 1.1 (đối với phần vượt từ 101% trở lên)
− Sản phẩm hồn thành vượt trên 10% định mức:
Đơn giá sản phẩm = ĐGSP * 1.2 (đối với phần vượt từ 111% trở lên)
2.2 Viết hàm tính tiền nước sinh hoạt theo phương pháp lũy tiến
Hàm cĩ 2 đối số (Arguments):
Đối số thứ 1: mã khách hàng (“SH”, “HCSN”, “KDDV”, “SX”)
Đối số thứ 2: khối lượng nước tiêu thụ
Hàm trả về một giá trị (Return Value) kiểu số, mang ý nghĩa là tiền nước phải thanh tốn, căn
cứ vào khối lượng nước tiêu thụ
/ (đồng
mức định trong nước
giá Đơn m
/ (đồng
mức định vượt nước giá
Đơn
3 3
)
− Thuế VAT: 10% trên tổng số tiền nước phải thanh tốn
− Tổng trị giá hố đơn phải thanh tốn:
Trang 17VAT thuế Tiến
có) (Nếu
mức định vượt nước Tiền
mức định trong
nước Tiền ùng)
(đồng/tha
toán thanh tiền số
Tổng
+ +
=
2.3 Viết một hàm XEPLOAI như sau:
− Function này cĩ 1 đối số truyền đến mang kiểu số thực, là điểm trung bình
− Hàm trả về một giá trị mang kiểu chuỗi, là loại học tập được xếp căn cứ vào điểm trung bình
− Function này cĩ 3 đối số:
Đối số thứ nhất kiểu chuỗi, mang ý nghĩa là loại khách hàng
Đối số thứ hai và thứ ba kiểu số, mang ý nghĩa là chỉ số đầu và chỉ số cuối của đồng hồ điện
− Hàm trả về một giá trị kiểu số, mang ý nghĩa là tiền điện mà khách hàng phải thanh tốn
mứcđịnhvượt
thụtiêuKwhSốmức
địnhtrong
giáĐơnx
mứcđịnhtrong
thụtiêuKwhSố ùng)(đồng/tha
điệnTiền
• Tổng số tiền điện phải thanh tốn:
điệntiền
phíchiđiện
tiền
phíchi ùng)(đồng/tha
toánthanhTiền
• Thơng tin về định mức và đơn giá:
Trang 18Loại khách hàng định mức
(Kwh/tháng)
Đơn giá trong định mức (đồng/kwh)
Đơn giá vượt định mức (đồng/kwh)
3 Tạo các Tables có quan hệ như sau để lưu trữ các chứng từ phát sinh (SV tự thiết kế thuộc tính)
3.1 Viết các câu truy vấn (Queries) sau:
a) Cho biết có bao nhiêu khách hàng tại từng thành phố Thông tin kết xuất bao gồm: mã
Trang 19− Ngày viết: 10/10/2005
− Diễn giải: “A.Hùng phòng Kinh doanh tạm ứng đi công tác”
− Tài khoản nợ: 141
− Tài khoản có: 111 (Lưu ý: chỉ cập nhật thông tin cho các Fields kể trên) f) Viết câu Query tập hợp các chứng từ pháp sinh của quý 1/2005 (lấy từ 3 Tables: Tblthang012005, Tblthang022005, Tblthang032005
g) Liệt kê các chứng từ phát sinh trong ngày chẵn?
h) Liệt kê các chứng từ xuất tiền mặt của những ngày lẻ?
i) Cho biết tổng số tiền tạm ứng của các bộ phận trong tháng?
j) Liệt kê các chứng từ có số tiền phát sinh lớn nhất?
k) Viết Query in ra bảng cân đối tài khoản theo dạng như sau:
3.2 Thủ tục (Procedures): viết những Procedures sau:
a) Viết một thủ tục in ra các hoá đơn tạm ứng (có tài khoản 141, nợ tài khoản 111), xuất kết quả trong DataSheet
b) Viết thủ tục kiểm tra hoá đơn mang mã số “T10/25” đã có trong Table TblChungtu10/2005 hay chưa? Xuất thông báo trong MessageBox
c) Viết thủ tục in ra danh sách các hoá đơn trong Table TblChungtu10/2005, xuất kết quả trong DataSheet
d) Viết thủ tục xuất ra tuần tự từng khách hàng trong Table TblDanhmuckhachhang, xuất kết quả trong MessageBox
e) Viết thủ tục in ra tổng số tiền phát sinh của các chứng từ trong Table TblChungtu10/2005, xuất kết quả trong MessageBox
f) Viết thủ tục thêm một mẫu tin vào Table TblDanhsachkhachhang, thông tin về mẫu tin mới tuỳ ý
g) Viết thủ tục cập nhật dữ liệu vào mẫu tin có mã số chứng từ “T10/20”, nội dung cập nhật là tăng số tiền phát sinh thêm 25.000 đồng
Trang 20h) Viết thủ tục xoá một mẫu tin (tuỳ ý) trong Table TblDanhmucthanhpho
4 Truy xuất dữ liệu Recordset kiểu Table:
4.1. Tạo một Form như sau (FrmRecordset):
4.2 Viết các thủ tục cho các nút lệnh:
4.2.1 Nút lệnh của Table Recordset 1:
Mở 2 Tables bất kỳ và đếm số Records của 2 Tables này
Xuất thông báo kết quả
4.2.2 Nút lệnh của Table Recordset 2:
Mở 2 Tables bất kỳ và đếm số Records của Table này
Xuất thông báo kết quả