Professional Documents
Culture Documents
HỒ CHÍ MINH
-----🙞🙞🙞🙞🙞-----
TÊN ĐỀ TÀI:
Học kỳ: 1
Nhóm 03
Contents
LỜI NÓI ĐẦU ................................................................................................................2
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG ............................................................3
1. Đặc tả đề tài .........................................................................................................3
1.1. Mô tả bài toán ...............................................................................................3
1.2. Nghiệp vụ của bài toán .................................................................................4
1.3. Mô tả các chức năng của bài toán ...............................................................5
1.4. Một số hình thức gửi tiết kiệm ....................................................................6
1.5. Phương pháp tính lãi suất ............................................................................6
1.6. Phương thức tính lãi .....................................................................................7
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG ................................................9
1. Thiết kế cơ sở dữ liệu mức quan niệm. ...............................................................9
2. Thiết kế cơ sở dữ liệu mức logic. ........................................................................9
3. Các ràng buộc cần có .........................................................................................11
4. Cài đặt CSDL và các ràng buộc ........................................................................11
1.7. 4.1. Tạo bảng và các ràng buộc đơn giản. ................................................11
5. Các ràng buộc khác............................................................................................15
6. Trigger kiểm tra các ràng buộc ..........................................................................15
7. Các view ............................................................................................................18
CHƯƠNG 3. THIẾT KẾ CÁC CHỨC NĂNG .........................................................21
1. Kết nối cơ sở dữ liệu..........................................................................................21
2. Xem thông tin danh mục ...................................................................................21
3. Quản lý nhân viên ..............................................................................................22
4. Quản lý Sổ tiết kiệm ..........................................................................................24
5. Quản lý Giao dịch tiết kiệm...............................................................................25
CHƯƠNG 4. TẠO USER VÀ PHÂN QUYỀN .........................................................45
CHƯƠNG 5. THIẾT KẾ GIAO DIỆN HỆ THỐNG ...............................................47
LỜI CẢM ƠN
Lời đầu tiên, chúng em xin chân thành cảm ơn sự hướng dẫn tận tình của thầy
Nguyễn Thành Sơn đã giúp chúng em hoàn thành bài báo cáo cuối kì bộ môn Hệ quản trị
cơ sở dữ liệu này. Nhờ những kiến thức thầy truyền đạt mà chúng em đã nắm chắc hơn
được những kiến thức căn bản, nền tảng cho việc khi xây dựng một hệ thống quản trị cơ sở
dữ liệu. Thông qua đồ án này, nhóm em xin trình bày lại quá trình phát triển của một hệ
thống quản trị cơ sở dữ liệu, cũng như lập trình một đồ án liên quan.
Trong quá trình thực hiện đồ án môn học, khó tránh khỏi những sai sót. Do đó nhóm
chúng em rất mong sự góp ý đến từ thầy để bài làm của nhóm chúng em được hoàn thiện
hơn, phát triển và đầy đủ hơn. Kính chúc thầy sức khỏe, hạnh phúc thành công trên con
đường sự nghiệp giảng dạy.
Cuối cùng chúng em cũng chân thành cảm ơn các thầy cô và các bạn cùng tham gia
học bộ môn Hệ quản trị sơ sở dữ liệu đã nhiệt tình giúp đỡ động viên chúng em trong trình
thực hiện đồ án cuối kì.
1
|Nhóm 03
LỜI NÓI ĐẦU
Trong nhiều năm trở lại đây, ngành công nghệ thông tin thực sự đã len lỏi vào từng
ngóc ngách của đời sống xã hội. Bất kể một lĩnh vực hay ngành nghề nào cũng đều ứng
dụng các công nghệ thông tin. CNTT đã và đang đóng vai trò quan trọng trong đời sống
kinh tế, xã hội của nhiều quốc gia trên thế giới và Việt Nam cũng vậy, ứng dụng của ngành
này có rất nhiều trong đời sống hằng ngày.
Không thể phủ nhận rằng các hệ thống quản lý dữ liệu, thông tin dần trở thành công
cụ đắc lực của nhiều doanh nghiệp. Đặc biệt phải kể đến lĩnh vực ngân hàng hiện nay trong
công tác quản lý dữ liệu, công nghệ thông tin giúp cho quá trình quản lý dữ liệu đạt hiệu
quả cao trong việc giảm tối thiểu về nhân lực, thời gian cũng như tránh thất lạc, sai sót dữ
liệu thay vì việc quản lý bằng giấy tờ bằng phương pháp cổ truyền như trước đây.
Chính vì những lý do đó, ứng dụng của Công nghệ thông tin đối với công tác quản
lý dữ liệu trong ngân đóng một vai trò hết sức quan trọng. Và để làm rõ hơn về ứng dụng
của Công nghệ thông tin đối với công tác quản lý trong thực tế nhóm chúng em lựa chọn đề
tài “Quản lý tài khoản tiết kiệm Ngân hàng” để nghiên cứu và phát triển ứng dụng của
việc quản lý hệ thống dữ liệu trong môn học Hệ quản trị cơ sở dữ liệu.
2
|Nhóm 03
CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG
1. Đặc tả đề tài
1.1. Mô tả bài toán
Một ngân hàng cần có hệ thống quản lý tài khoản tiết kiệm. Một hệ thống quản lý
tài khoản tiết kiệm cần lưu trữ những dữ liệu như sau:
Ngân hàng quản lý nhiều chi nhánh, mỗi Chi nhánh có Tên chi nhánh, Mã chi nhánh,
Địa chỉ. Mỗi chi nhánh thì có nhiều nhân viên,…
Mỗi nhân viên có các thông tin: Mã nhân viên, Họ tên, Ngày sinh, Địa chỉ, Điện
thoại. Mỗi nhân viên được cấp tên đăng nhập và mật khẩu để đăng nhập vào hệ thống. Mỗi
nhân viên sẽ có chức vụ và quyền hạn khác nhau nên thuộc các nhóm người dùng và có
phân quyền khác nhau.
Thông tin về nhóm người dùng thì gồm có: Mã nhóm người dùng, Tên nhóm người
dùng. Có các nhóm người dùng sau: Nhân viên giao dịch và Giám đốc.
Nhóm người dùng thì được phân chia ra những quyền riêng biệt. Thông tin về nhóm
quyền: Mã quyền, Tên quyền. Các nhóm người dùng được phân cho một hoặc nhiều quyền.
Một Chi nhánh thì quản lý nhiều tài khoản tiết kiệm và điều cần thiết với mỗi sổ là
thông tin Khách hàng gửi tiết kiệm. Thông tin của khách hàng gồm: Mã khách hàng, Tên,
Số điện thoại, Địa chỉ, số CCCD, Nơi cấp, Ngày cấp.
Một khách hàng có thể mở một hoặc nhiều sổ tiết kiệm. Thông tin của mỗi sổ tiết
kiệm: Mã sổ tiết kiệm, Ngày mở sổ, Ngày đến hạn, Ngày tất toán, Loại tiền gửi, Tình trạng.
Tình trạng của sổ có thể là: Còn hiệu lực, Đã tất toán, Phong tỏa.
Mỗi một sổ tiết kiệm sẽ thuộc một loại tiết kiệm duy nhất, phân biệt bởi mã loại tiết
kiệm. Mã loại tiết kiệm qui định hình thức gửi tiết kiệm, kỳ hạn, hình thức trả lãi, lãi suất.
3
|Nhóm 03
Kỳ hạn: Không kỳ hạn, 1 tháng, 2 tháng, …, 36 tháng.
Lãi suất tiết kiệm được quy định bởi: Hình thức gửi tiết kiệm, Kỳ hạn, Kỳ trả lãi.
Mỗi sổ tiết kiệm sẽ phát sinh một hoặc nhiều phát sinh giao dịch tiết kiệm. Thông
tin của mỗi giao dịch tiết kiệm gồm: Mã số giao dịch, Ngày giao dịch, Mã sổ tiết kiệm, Mã
loại giao dịch, Mã chi nhánh giao dịch, Mã nhân viên giao dịch, Số tiền giao dịch. Mã loại
giao dịch cho biết loại giao dịch nào được thực hiện, có các loại giao dịch sau: Gửi tiền, Rút
tiền lãi, Tất toán, Lãi nhập gốc, Tái ký gửi.
Khách hàng xuất trình giấy chứng minh. Kế Toán hướng dẫn khách hàng điền đầy
đủ thông tin trên “giấy đề nghị gửi tiền”. Thông tin “giấy đề nghị gửi tiền” gồm có: họ tên,
điện thoại, địa chỉ, số CMND, ngày cấp, nơi cấp, số tiền gửi, kỳ hạn gửi, hình thức rút lãi.
Kế Toán Trưởng kiểm tra các thông tin trên giấy đề nghị của khách hàng, giấy nộp tiền,
phiếu lưu, Sổ tiết kiệm phải khớp nhau và ký tên lên Sổ Tiết Kiệm. Giám Đốc ký tên lên
giấy nộp tiền, Sổ tiết kiệm. Thủ quỹ nhận giấy nộp tiền, Sổ tiết kiệm, phiếu lưu tiền gửi,
chờ Kiểm ngân thu.
Kiểm ngân sau khi thu xong, lập bảng kê nộp tiền, ký tên lên bảng kê nộp và chuyển
bảng kê cho thủ quỹ. Thủ quỹ kiểm tra số tiền trên bảng kê, giấy nộp tiền, phiếu lưu, Sổ tiết
kiệm. Nếu khớp đúng số tiền, ký tên lên giấy nộp tiền và bảng kê nộp, vào sổ theo dõi. Nếu
không khớp đúng số tiền phải báo cho Kế toán biết để điều chỉnh lại. Cho khách hàng ký
tên lên giấy nộp tiền, bảng kê nộp, đăng ký chữ ký mẫu lên phiếu lưu, ký tên lên Sổ Tiết
Kiệm, phiếu lưu (bên phần kiểm soát), ký nhận Sổ Tiết Kiệm. Sau khi xong cho khách hàng
ký nhận sổ và trả sổ cho khách hàng.
Sau đó ký tên lên góc trái chứng từ, đóng dấu đã thu tiền và vào sổ theo dõi thu chi,
giữ lại bảng kê nộp tiền để tổng hợp (cuối ngày giao lại cho Thủ quỹ). Thủ quỹ vào sổ quỹ.
Giấy nộp tiền cuối ngày Thủ quỹ chuyển qua bộ phận kết hợp chứng từ.
Khách hàng
Kiểm tra các yếu tố trên giấy gửi tiền. Ký chữ ký mẫu lên phiếu lưu tiền gửi (hoặc
các ký hiệu khác). Nhân viên ngân hàng in Giấy nộp tiền, Phiếu lưu, Sổ tiền gửi.
4
|Nhóm 03
Khách hàng đến rút tiền mang Sổ tiết kiệm, CMND (hộ chiếu) đã đăng ký lúc gửi
tiền và thông báo đến Kế toán số tiền cần rút (vốn, lãi).
Trường hợp rút hoàn toàn: KT sẽ căn cứ vào ngày đáo hạn, số tiền gửi, lãi suất trên
sổ, lập Phiếu tính lãi, in Giấy lãnh tiền, Phiếu chi lãi, in Sổ tiền gửi, ghi Phiếu lưu tiền gửi,
ký tên chuyển qua cho Kế toán Trưởng.
Trường hợp khách hàng gửi lại đúng số tiền và định kỳ trên Sổ tiết kiệm: Kế toán sử
dụng lại Sổ tiết kiệm cũ, Phiếu lưu cũ, lập Giấy nộp tiền, Giấy lĩnh tiền, Phiếu chi lãi, in Sổ
tiết kiệm, ghi Thẻ lưu tài khoản, chuyển cho Kế toán trưởng.
Trường hợp khách hàng gửi lại thay đổi số tiền: Kế toán thực hiện như trường hợp
rút hoàn toàn, sau đó làm giống như trường hợp gửi tiền, chuyển cho Kế toán trưởng
Kế toán trưởng kiểm tra lại ngày đáo hạn, cách tính lãi trên Phiếu tính lãi, Giấy lĩnh
tiền, Phiếu chi lãi, Số dư trên Sổ tiền gửi và Phiếu lưu. Cho khách ký tên lên chứng từ, đối
chiếu chữ ký của khách hàng trên chứng từ Thẻ lưu, nếu đúng chữ ký, khách hàng ký tên
lên Sổ tiết kiệm và Thẻ lưu, chi tiền cho khách hàng và trả Sổ tiết kiệm cho khách hàng,
nếu không đúng phải báo cho Kế toán để kiểm tra lại, chi xong ký tên lên góc trái chứng từ
và đóng dấu “Đã chi tiền” vào Sổ theo dõi, gữi lại Bảng kê để tổng hợp cuối ngày.
Thêm quyền, xóa quyền, phân quyền cho nhóm người dùng, xóa quyền khỏi nhóm
người dùng.
Thêm phân nhóm, xóa phân nhóm, Thêm nhân viên vào phân nhóm, xóa nhân viên
khỏi phân nhóm.
Thêm khách hàng, chỉnh sửa thông tin khách hàng, thêm đồng sở hữu, mở sổ tiết
kiệm, thực hiện các giao dịch rút, gửi lãi, vốn, tất toán, phong tỏa, xóa sổ, tái ký tục, chuyển
quyền sử dụng sổ.
Phân quyền: quyền admin toàn quyền với hệ thống. Còn nhân viên không thể tham gia vào
việc quyền của các tài khoản khác.
5
|Nhóm 03
1.4. Một số hình thức gửi tiết kiệm
Đối với hình thức gửi có kỳ hạn
Gửi tiết kiệm hàng tháng (tiết kiệm gửi góp): Hình thức này chỉ có hình thức lãi trả
sau. Như vậy, số tiền gốc sẽ tăng lên sau mỗi kỳ gửi góp, mà không phải là một số cố định
như hình thức tiết kiệm thông thường. Số tiền lãi cũng được tính trên cơ sở số tiền gốc tăng
lên đó. Lãi suất áp dụng cho loại tiền gửi này thấp hơn lãi suất tiền gửi tiết kiệm thông
thường. Quý khách sẽ không được rút tiền trước hạn, khi đến hạn nếu quý khách không đến
rút tiền, số dư không được chuyển thêm kỳ hạn gửi tiếp theo mà được tính lãi với lãi suất
không kỳ hạn.
Đối với hình thức gửi một lần có 3 hình thức trả lãi như: trả trước, trả định kì và trả
sau.
Tiền gửi tiết kiệm trả lãi trước: Quý khách nhận được tiền lãi ngay tại thời điểm gửi
tiền. Lãi suất áp dụng cho hình thức tiền gửi này thấp hơn lãi suất tiền gửi cùng kỳ hạn lĩnh
lãi cuối kỳ. Loại tiền gửi này cũng không hỗ trợ quý khách rút gốc hoặc rút một phần gốc
trước hạn. Tiền gửi khi đến hạn mà quý khách không rút ra sẽ được chuyển thêm kỳ hạn
tiếp theo.
Tiền gửi tiết kiệm trả lãi định kỳ (hàng tháng/ hàng quý): Loại tiền gửi này rất thuận
tiện cho quý khách cần phải dùng tiền lãi thu được từ việc gửi tiền tiết kiệm của mình, để
sử dụng chi tiêu định kỳ hàng tháng, hàng quý…, quý khách không cần chờ khi đến hạn
mới rút được tiền lãi. Các quy định khác cũng giống như tiền gửi tiết kiệm thông thường.
Tiền gửi tiết kiệm trả lãi sau: Nhận tiền lãi khi ngày đến hạn. Hình thức tiền gửi này
cũng được nhập lãi một lần vào cuối kỳ, tự động chuyển thêm một kỳ hạn tiếp theo nếu quý
khách không rút tiền khi đến hạn.
Đối với hình thức gửi tiết kiệm không kỳ hạn (gửi một lần)
Tiền gửi tiết kiệm gửi một lần (rút gốc linh hoạt): Loại tiền gửi tiết kiệm này cũng
được nhập lãi một lần vào cuối kỳ và tự động quay vòng khi đến hạn. Tuy nhiên, trong kỳ
nếu quý khách có nhu cầu rút một phần gốc trước hạn thì phần tiền rút ra được tính lãi suất
không kỳ hạn, phần còn lại gửi tiếp vẫn được áp dụng lãi suất có kỳ hạn kể từ ngày gửi.
6
|Nhóm 03
Tiền lãi = Số dư * Số tháng gửi * Lãi suất
VD: Khách hàng gửi 10 triệu với kỳ hạn 2 tháng, lãi suất 1.2%/ tháng.
Tiền lãi = 10000000 * 2* 1.2% = 240000
- Công thức tính lãi cho loại tiết kiệm không kỳ hạn
Tiền gửi có kỳ hạn: Tiền lãi được trả trước vào ngày khách hàng gửi tiền (đối với loại
tiết kiệm trả lãi trước); hoặc trả lãi định kỳ tháng, quý, 6 tháng, 1 năm (đối với loại tiết kiệm
trả lãi định kỳ); hoặc trả lãi cuối kỳ (đối với loại tiết kiệm trả lãi sau).
Khách hàng gửi tiền có kỳ hạn khi có nhu cầu rút vốn trước hạn được áp dụng lãi suất
ở kỳ hạn tương đương với thời gian gửi thực tế hoặc mức lãi suất ở kỳ hạn ngắn hơn kế
trước (nếu Ngân hàng không huy động loại kỳ hạn tương đương thời gian khách hàng đã
gửi)
VD : Khách hàng gửi 10 triệu loại tiết kiệm kỳ hạn 6 tháng lãnh lãi hàng tháng, lãi suất
1.2%/ tháng.
Ngày đến rút : 9/8/20009 => thời gian thực gửi là: 4 tháng, 8 ngày. Nếu tại thời điểm đó
Ngân hàng huy động tiết kiệm 3 tháng (Lãi suất: 1.4%/ tháng) và không kỳ hạn lãi suất
0.6%/ tháng, tiết kiệm 1 tháng lãi suất 1.1%/ tháng.
8
|Nhóm 03
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
10
|Nhóm 03
3. Các ràng buộc cần có
STT TABLE RÀNG BUỘC
1 CHI_NHANH Ràng buộc khoá chính MaChiNhanh
2 DANG_NHAP Ràng buộc khoá ngoại MaNhanVien tham chiếu
đến NHAN_VIEN
3 GIAO_DICH_TIET_KIEM Ràng buộc khoá chính MaGiaoDich, ràng buộc
khoá ngoại MaNhanVien và MaGiaoDich tham
chiếu đến NHAN_VIEN và
LOAI_GIAO_DICH
4 HINH_THUC_GUI Ràng buộc khoá chính MaHinhThucGui
5 HINH_THUC_TRA_LAI Ràng buộc khoá chính MaHinhThucTraLai
6 KHACH_HANG Ràng buộc khoá chính MaKhachHang
7 LOAI_GIAO_DICH Ràng buộc khoá chính MaLoaiGiaoDich
8 LOAI_TIEN Ràng buộc khoá chính MaLoaiTien
9 LOAI_TIET_KIEM Ràng buộc khoá chính MaLoaiTietKiem, ràng
buộc khoá ngoại MaHinhThucGui và
MaHinhThucTraLai tham chiếu tới
HINH_THUC_TRA_LAI và
HINH_THUC_GUI
10 NHAN_VIEN Ràng buộc khoá chính MaNhanVien, ràng buộc
khoá ngoại MaChiNhanh tham chiếu đến
CHI_NHANH
11 NHOM_NGUOI_DUNG Ràng buộc khoá chính MaNhomNguoiDung
12 PHAN_NHOM Ràng buộc khoá ngoại MaNhanVien,
MaNhomNguoiDung tham chiếu đến
NHAN_VIEN và NHOM_NGUOI_DUNG
13 SO_DU_TAI_KHOAN Ràng buộc khoá chính MaSoDu, ràng buộc khoá
ngoại MaSoTK tham chiếu đến
TAI_KHOAN_TIET_KIEM
14 SO_HUU Ràng buộc khoá ngoại MaSoTK, MaKhachHang
tham chiếu đến TAI_KHOAN_TIET_KIEM và
KHACH_KHANG
15 TAI_KHOAN_TIET_KIEM Ràng buộc khoá chính MaSoTK, ràng buộc khoá
ngoại MaChiNhanh, MaLoaiTien,
MaLoaiTietKiem tham chiếu đến
CHI_NHANH, LOAI_TIEN,
LOAI_TIET_KIEM
11
|Nhóm 03
Bảng Đăng nhập
CREATE TABLE DANG_NHAP
(
MaNhanVien varchar(10) primary key REFERENCES NHAN_VIEN(MaNhanVien),
TenDangNhap nvarchar(30) unique not null,
MatKhau varchar(30) not null check(len(MatKhau)>=6)
)
12
|Nhóm 03
ChuKy VARBINARY (max) – hình ảnh chữ ký của khách hàng
)
13
|Nhóm 03
Bảng Phân nhóm
CREATE TABLE PHAN_NHOM
(
MaNhanVien varchar(10) primary key references NHAN_VIEN (MaNhanVien),
MaNhomNguoiDung varchar(10) references NHOM_NGUOI_DUNG (MaNhomNguoiDung) ON
DELETE SET NULL
)
Bảng Sở hữu
CREATE TABLE SO_HUU
(
MaSoTK varchar(15) REFERENCES TAI_KHOAN_TIET_KIEM(MaSoTK),
MaKhachHang varchar(10) references KHACH_HANG(MaKhachHang),
PRIMARY KEY (MaSoTK, MaKhachHang)
)
14
|Nhóm 03
5. Các ràng buộc khác
Ràng buộc mã khách hàng khi thêm khách hàng
-- Đặt ràng buộc mã khách hàng được tạo tự động.
USE QUANLYTAIKHOANTIETKIEM
CREATE TABLE KHACH_HANG
ADD CONSTRAINT AUTO_IDKHACHHANG
DEFAULT DBO.AUTO_IDCustomer() FOR MaKhachHang;
GO
Trigger khi xóa nhân viên thì sẽ đánh dấu nhân viên nghỉ và xóa tài khoản đăng
nhập của người đó khỏi hệ thống
-- Trigger khi xóa nhân viên thì sẽ đánh dấu nhân viên nghỉ và xóa tài khoản đăng nhập của người đó
khỏi hệ thống
CREATE TRIGGER XoaNhanVien ON NHAN_VIEN
INSTEAD OF DELETE
AS
DECLARE @maNV varchar(10)
SELECT @maNV=ol.MaNhanVien
FROM deleted ol
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
-- Cập nhật tình trạng tình việc của nhân viên là đã nghỉ
UPDATE NHAN_VIEN SET TinhTrangLamViec=0 WHERE MaNhanVien=@maNV;
15
|Nhóm 03
SELECT @tenUser=TenDangNhap FROM DANG_NHAP WHERE MaNhanVien=@maNV
-- Xóa tài khoản đăng nhập của nhân viên khỏi bảng Đăng nhập
DELETE FROM DANG_NHAP WHERE MaNhanVien=@maNV;
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
GO
Trigger tạo một user trên SQL khi thêm một nhân viên
CREATE TRIGGER CreateSQLAccount ON DANG_NHAP
AFTER INSERT
AS
DECLARE @userName nvarchar(30), @passWord nvarchar(10)
SELECT @userName=nl.TenDangNhap, @passWord=nl.MatKhau
FROM inserted nl
BEGIN
DECLARE @sqlString nvarchar(2000)
-- Tạo tài khoản login cho nhân viên, tên người dùng và mật khẩu là tài khoản được tạo trên
bảng Đăng nhập
SET @sqlString= 'CREATE LOGIN [' + @userName +'] WITH PASSWORD='''+ @passWord +''',
DEFAULT_DATABASE=[QUANLYTAIKHOANTIETKIEM], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
EXEC (@sqlString)
-- Tạo tài khoản người dùng đối với nhân viên đó trên database (tên người dùng trùng với tên
login)
SET @sqlString= 'CREATE USER ' + @userName +' FOR LOGIN '+ @userName
EXEC (@sqlString)
END
GO
Trigger kiểm tra và điều chỉnh một số ràng buộc liên quan đến loại tiết kiệm của sổ
CREATE TRIGGER Them_LTK ON LOAI_TIET_KIEM
AFTER INSERT
AS
DECLARE @maLoaiTK varchar(10), @maHinhthucgui varchar(10), @maHinhthuctralai varchar(10), @kyHan int
SELECT @maLoaiTK=nl.MaLoaiTietKiem, @maHinhthucgui=nl.MaHinhThucGui,
@maHinhthuctralai=nl.MaHinhThucTraLai, @kyHan=nl.KyHan
FROM inserted nl
BEGIN
if @maHinhthucgui='HTG_G'
BEGIN
--Với hình thức gửi góp thì hình thức trả lãi mặc định là trả sau và kỳ hạn phải trên
6 tháng
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;
if @kyHan<6
UPDATE LOAI_TIET_KIEM SET KyHan=6 WHERE MaLoaiTietKiem=@maLoaiTK;
END
if @kyHan=0
-- Nếu kỳ hạn là 0 thì đây là hình thức gửi không kỳ hạn
UPDATE LOAI_TIET_KIEM SET MaHinhThucTraLai='HTTL_S' WHERE MaLoaiTietKiem=@maLoaiTK;
END
GO
Trigger Kiểm tra các thông tin về sổ tiết kiệm trước khi thêm một sổ mới.
CREATE TRIGGER THEM_TAI_KHOAN_TIET_KIEM ON TAI_KHOAN_TIET_KIEM
16
|Nhóm 03
AFTER INSERT
AS
DECLARE @maTK varchar(15), @maLoaiTK varchar(10), @kyTralai int, @hanGuigop int, @kyHanso int
SELECT @maTK=nl.MaSoTK, @maLoaiTK=nl.MaLoaiTietKiem, @kyTralai=nl.KyTraLai, @hanGuigop=nl.HanGuiGop
FROM inserted nl
BEGIN
BEGIN TRAN
BEGIN TRY
DECLARE @kyHan int, @maHinhthuctralai varchar(10), @maHinhthucgui varchar(10);
SET @kyHan= (SELECT KyHan from LOAI_TIET_KIEM where MaLoaiTietKiem=@maLoaiTK);
if @maHinhthucgui='HTG_1L'
BEGIN
-- Đối với gửi lãi trả trước hoặc trả sau:
if (@maHinhthuctralai='HTTL_S') OR (@maHinhthuctralai='HTTL_T')
UPDATE TAI_KHOAN_TIET_KIEM SET KyTraLai=@kyHan where MaSoTK=@maTK;
else
-- Đối với trả lãi định kỳ
if (@kyTralai>@kyHan) or (@kyHan % @kyTralai !=0) or (@kyTralai=null)
UPDATE TAI_KHOAN_TIET_KIEM SET KyTraLai=1 where MaSoTK=@maTK;
-- Tính ngày lấy lãi đầu tiên của sổ tiết kiệm định kỳ
UPDATE TAI_KHOAN_TIET_KIEM SET NgayNhanLaiDinhKyTiepTheo=DATEADD(day,
30*@kyTralai, NgayMoSo), NgayGuiGopTiepTheo=null where MaSoTK=@maTK;
END
else
BEGIN
if (@hanGuigop>@kyHan) or (@kyHan % @hanGuigop !=0) or (@hanGuigop=null)
UPDATE TAI_KHOAN_TIET_KIEM SET HanGuiGop=1 where
MaSoTK=@maTK;
-- Tính ngày gửi góp tiếp theo của sổ gửi góp
UPDATE TAI_KHOAN_TIET_KIEM SET NgayGuiGopTiepTheo=DATEADD(day, 30*@hanGuigop,
NgayMoSo), NgayNhanLaiDinhKyTiepTheo=null where MaSoTK=@maTK;
END
END
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
END CATCH
END
GO
Trigger Kiểm tra khi một sổ tiết kiệm đã tất toán (đóng sổ) thì sẽ đóng tình trạng sử
dụng của chủ sổ (nếu chỉ có 1 sổ)
CREATE TRIGGER DongSo ON TAI_KHOAN_TIET_KIEM
AFTER UPDATE
AS
DECLARE @maSo varchar(15), @trangThai bit
SELECT @maSo=nl.MaSoTK, @trangThai=nl.TinhTrangSuDung
FROM inserted nl
BEGIN
DECLARE @num_Chu int, @index int=1, @TEMP varchar(10);
if (@trangThai=0)
BEGIN
DECLARE @chuMaso TABLE (Id int not null primary key identity(1,1), ChuSo varchar(10),
SoSo int);
INSERT INTO @chuMaso (ChuSo, SoSo) SELECT * FROM LAY_CHU_SO(@maSo) WHERE SoLuongSo=1;
SET @num_Chu = @@ROWCOUNT;
WHILE @index<=@num_Chu -- Countdown
BEGIN
SELECT @TEMP= ChuSo FROM @chuMaso WHERE Id=@index;
UPDATE KHACH_HANG SET DangSuDung=0 WHERE MaKhachHang=@TEMP;
SET @index = @index + 1;
END
END
17
|Nhóm 03
END
GO
7. Các view
a. View Thông tin chi tiết về chủ sổ và Thông tin của sổ
CREATE VIEW [dbo].[CHI_TIET_SO] AS
b. View Danh sách khách hàng còn đang sử dụng sổ tiết kiệm
CREATE VIEW [dbo].[DS_KhachHang] AS
SELECT *
FROM KHACH_HANG
WHERE DangSuDung=1;
GO
c. View Thông tin chi tiết của Nhân viên còn làm việc
18
|Nhóm 03
e. View danh sách sổ gửi góp
19
|Nhóm 03
k. View tên hình thức gửi
20
|Nhóm 03
CHƯƠNG 3. THIẾT KẾ CÁC CHỨC NĂNG
21
|Nhóm 03
2.4 Danh mục Loại tiền
- View danh mục loại tiền
GO
22
|Nhóm 03
Procdure GanQuyenNhanVien sẽ thêm người dùng vào role tương ứng Staff
hoặc Manager sau đó ghi nhận mã nhân viên vào bảng PHAN_NHOM
-- Add người dùng vào role tương ứng (Staff hoặc Manager(sysadmin))
if (@quyen='sysadmin')
SET @sqlString = 'ALTER SERVER ROLE '+@quyen +' ADD MEMBER ' +
@tenUser;
else
BEGIN
SET @sqlString = 'ALTER ROLE '+ @quyen +' ADD MEMBER ' + @tenUser;
exec (@sqlString)
SET @sqlString = 'ALTER SERVER ROLE [BULKADMIN] ADD MEMBER' +
@tenUser;
exec (@sqlString)
END
-- Ghi nhận vào bảng phân nhóm
INSERT INTO PHAN_NHOM VALUES (@maNhanVien, @maNhomNguoiDung)
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
DECLARE @err varchar(MAX)
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
RAISERROR(@err, 16,1)
END CATCH
END
GO
-- Xóa tài khoản đăng nhập của nhân viên khỏi bảng Đăng nhập
DELETE FROM DANG_NHAP WHERE MaNhanVien=@maNV;
END
GO
24
|Nhóm 03
CREATE PROCEDURE [dbo].[DongSoHuu] (@maSoTK NVARCHAR(10), @ngayPhatSinhGiaoDich date, @maNhanVien
varchar(10),
@hoTen NVARCHAR(30),@ngaySinh Date, @sdt
varchar(11), @maDinhDanh varchar(15),
@ngayCap Date, @noiCap nvarchar(100), @diaChi
nvarchar(100), @imageFolderPath nvarchar(1000)
)
AS
BEGIN
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
-- Thêm khách hàng mới
DECLARE @maKhachHang varchar(10)
BEGIN
SET @maKhachHang = DBO.AUTO_IDCustomer();
exec DBO.ThemKhachHang @hoTen, @ngaySinh, @sdt, @maDinhDanh, @ngayCap,
@noiCap, @diaChi, @imageFolderPath
END
-- Ghi nhận đồng sở hữu
INSERT INTO SO_HUU VALUES(@maKhachHang, @maSoTK)
Mở sổ thực hiện đồng thời thêm thông tin sổ tiết kiệm vào bảng
TAI_KHOAN_TIET_KIEM, thêm thông tin khách hàng vào bảng KHACH_HANG và
thiết lập mỗi quan hệ giữa khách hàng với sổ tại bảng SO_HUU.
25
|Nhóm 03
INSERT INTO TAI_KHOAN_TIET_KIEM(NgayMoSo, MaChiNhanh, MaLoaiTien,
MaLoaiTietKiem, KyTraLai) VALUES (@ngayMoSo, @maChiNhanh, @maLoaiTien, @maLoaiTK, @kyTraLai)
--Xác nhận sở hữu vào bảng sở hữu.
INSERT INTO SO_HUU VALUES(@maSomoi, @maKhach)
-- Ghi nhận giao dịch và số dư của sổ
exec dbo.GiaoDichGuiLanDau @maSomoi, @khoanGui, @ngayMoSo, @maNhanvien
-- Phát sinh giao dịch lấy lãi trước nếu là sổ gửi góp
if @maHinhThucTraLai='HTTL_T'
exec dbo.PhatSinhLaiTruoc @maSomoi
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
END CATCH
END
END
26
|Nhóm 03
DECLARE @tsql NVARCHAR(2000);
SET @tsql= 'INSERT INTO KHACH_HANG (HoTen, NgaySinh, SDT, MaDinhDanh,
NgayCap, NoiCap, DiaChi, ChuKy)' +
' SELECT ' + 'N''' + @tenKhachHang + '''' + ',' + '''' + @ngaySinh + '''' +
',' + '''' + @sdt + '''' + ',' + '''' + @cccd + '''' + ',' + '''' + @ngayCap
+ '''' + ',' + 'N''' + @noiCap + '''' + ',' + 'N''' + @diaChi + '''' + ',
* '+
'FROM Openrowset( Bulk ' + '''' + @imageFolderPath + '''' + ', Single_Blob)
as img'
EXEC (@tsql)
- END
- GO
* Hiển thị danh sách sổ, chi thiết thông tin của sổ theo chủ sổ
* Các function liên quan đến lấy thông tin chi tiết của các giao dịch sổ
- Lấy chi tiết giao dịch gửi tiền vào sổ tiết kiệm
27
|Nhóm 03
ALTER FUNCTION [dbo].[LayGiaoDichGuiLanDau](@maGiaoDich varchar(10))
RETURNS TABLE
AS
RETURN (SELECT b.HoTen as HoTenKH, b.MaDinhDanh, a.MaSoTK,a.SoTienGiaoDich,
d.MaLoaiTien, c.HoTen as HoTenNV, c.MaNhanVien
FROM GIAO_DICH_TIET_KIEM a
join KHACH_HANG b on a.MaKhachHangGiaoDich=b.MaKhachHang
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK=d.MaSoTK
join NHAN_VIEN c on c.MaNhanVien=a.MaNhanVien
WHERE MaGiaoDich=@maGiaoDich)
-
28
|Nhóm 03
a.DaThanhToan, a.NgayGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK=d.MaSoTK
WHERE MaGiaoDich=@maGiaoDich
RETURN;
END
AS
BEGIN
INSERT INTO @thongtin
SELECT a.MaSoTK,
(SELECT LaiSuat FROM LOAI_TIET_KIEM WHERE MaLoaiTietKiem=d.MaLoaiTietKiem),
(SELECT KyHan FROM LOAI_TIET_KIEM WHERE MaLoaiTietKiem=d.MaLoaiTietKiem),
(SELECT LoaiTien FROM LOAI_TIEN WHERE MaLoaiTien=d.MaLoaiTien),
(SELECT MAX(NgayGhiNhanSoDu) FROM SO_DU_TAI_KHOAN WHERE NgayGhiNhanSoDu<d.NgayLaiNhapGoc),
d.NgayLaiNhapGoc, DBO.LaySoDu(a.MaSoTK, DATEADD(DAY, -1, d.NgayLaiNhapGoc)),
d.NgayLaiNhapGoc, d.NgayDenHan, a.SoTienGiaoDich
FROM GIAO_DICH_TIET_KIEM a
join TAI_KHOAN_TIET_KIEM d on a.MaSoTK=d.MaSoTK
WHERE MaGiaoDich=@maGiaoDich
RETURN;
END
29
|Nhóm 03
* Các Procedure liên quan đến thao tác thực hiện xác nhận thanh toán giao dịch
của nhân viên
- Procedure xác nhận giao dịch rút lãi
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
if (@ngayPhatSinh>@ngayLaiNhapGoc and @ngayPhatSinh!=@ngayDenHan)
-- Phát sinh kỳ nhận lãi định kỳ mới
UPDATE TAI_KHOAN_TIET_KIEM SET
NgayNhanLaiDinhKyTiepTheo=@ngayNhanLaiTiepTheo,NgayDenHan=DATEADD(day,DATEDIFF(day,@ngayP
hatSinh,@ngaylaylai),NgayDenHan) where MaSoTK=@maSoTK;
-- Xác nhận thanh toán
UPDATE GIAO_DICH_TIET_KIEM SET MaNhanVien=@maNhanvien,
NgayGiaoDich=@ngaylaylai, MaKhachHangGiaoDich=@maKhachHang, DaThanhToan=1 where
MaGiaoDich=@maGiaoDich
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
END CATCH
END
-- Procedure Tất toán sổ gửi đúng thời hạn (bao gồm cả tất toán sổ không kỳ hạn)
ALTER PROCEDURE [dbo].[TatToanDungHan] (@maSoTK NVARCHAR(10), @ngayGiaoDich date,
@maNhanvien varchar(10), @maKhachHang varchar(10))
AS
BEGIN
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
DECLARE @type varchar(10), @count1 int, @count2 int,
@soTienPhatSinh money, @hinhThucTraLai varchar(10)
SET @type= (SELECT MaLoaiTietKiem FROM TAI_KHOAN_TIET_KIEM WHERE
MaSoTK=@maSoTK)
30
|Nhóm 03
SET @count2 = (SELECT COUNT(*) FROM DS_TietKiemGui1Lan WHERE
MaLoaiTietKiem=@type)
if (@count1!=0)
-- Đối với gửi góp, khách hàng đến tất toán sẽ nhận được tiền gốc
đã gửi và tiền lãi kép tính theo ngày
-- Giao dịch này tự động phát sinh khi sổ gửi góp đến Ngày đến hạn
BEGIN
--Xác nhận tất toán sổ
UPDATE GIAO_DICH_TIET_KIEM SET MaNhanVien=@maNhanvien,
MaKhachHangGiaoDich=@maKhachHang, DaThanhToan=1, NgayGiaoDich=@ngayGiaoDich WHERE
MaSoTK=@maSoTK and MaLoaiGiaoDich='GD_TTDH'
END
else
-- Đối với gửi một lần
BEGIN
DECLARE @laisuat float, @kyhan int
SET @hinhThucTraLai = (SELECT MaHinhThucTraLai FROM
DS_TietKiemGui1Lan WHERE MaLoaiTietKiem=@type)
SET @laisuat = (SELECT LaiSuat FROM
DS_TietKiemGui1Lan WHERE MaLoaiTietKiem=@type)
SET @kyhan = (SELECT KyHan FROM DS_TietKiemGui1Lan
WHERE MaLoaiTietKiem=@type)
-- Nhân viên thực hiện các giao dịch rút lãi (nếu
có) và thực hiện tất toán tiền gốc của sổ.
--Lấy số tiền gốc của sổ
DECLARE @tiengoc money
select @tiengoc =DBO.LaySoDu(@maSoTK, GETDATE())
--Đánh dấu tất toán sổ
UPDATE TAI_KHOAN_TIET_KIEM SET
NgayTatToan=@ngayGiaoDich, TinhTrangSuDung=0 where MaSoTK=@maSoTK;
-- Ghi nhận giao dịch tất toán
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK,
SoTienGiaoDich, NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich, NgayPhatSinhGiaoDich,
MaKhachHangGiaoDich, DaThanhToan) VALUES (@maSoTK, @tiengoc, @ngayGiaoDich, @maNhanvien,
'GD_TTDH', @ngayGiaoDich,@maKhachHang,1)
END
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
DECLARE @err varchar(MAX)
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
RAISERROR(@err, 16, 1)
END CATCH
END
AS
BEGIN
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
DECLARE @hinhThucGui varchar(10)
SET @hinhThucGui= (SELECT MaHinhThucGui FROM
TAI_KHOAN_TIET_KIEM A JOIN LOAI_TIET_KIEM B ON A.MaLoaiTietKiem=B.MaLoaiTietKiem
WHERE MaSoTK=@maSoTK)
if (@hinhThucGui = 'HTG_1L')
-- Đối với gửi 1 lần
31
|Nhóm 03
BEGIN
DECLARE @type varchar(10), @soTienPhatSinh money,
@hinhThucTraLai varchar(10), @tienlaithucte money, @tiengoc money
SET @type= (SELECT MaLoaiTietKiem FROM
TAI_KHOAN_TIET_KIEM WHERE MaSoTK=@maSoTK)
SET @hinhThucTraLai= (SELECT MaHinhThucTraLai FROM
LOAI_TIET_KIEM WHERE MaLoaiTietKiem=@type)
Select @tiengoc=SoDu from SO_DU_TAI_KHOAN where MaSoTK=
@maSoTK and NgayGhiNhanSoDu=(SELECT MAX(NgayGhiNhanSoDu) FROM SO_DU_TAI_KHOAN WHERE
MaSoTK=@maSoTK)
if (@hinhThucTraLai='HTTL_S')
-- Đối với hình thức trả sau, khách hàng đến tất toán sẽ
nhận được tiền gốc và lãi tính theo mức lãi gửi tiết kiệm không kỳ han
BEGIN
-- Khách hàng sẽ nhận lại được toàn bộ tiền gốc
và tiền lãi đã phát sinh trong giao dịch nhận lãi
SET @soTienPhatSinh = @tiengoc
END
else if (@hinhThucTraLai='HTTL_T')
--Tất toán đối với hình thức trả lãi trước, khách hàng
sẽ phải hoàn lại ngân hàng khoản chênh giữa tiền lãi đã nhận và tiền lãi tính theo
mức lãi không thời hạn, khoảng này sẽ được khấu trừ vào tiền gốc khách hàng nhận lại
BEGIN
DECLARE @soTienDaNhan money,
@soTienLaiThucTe money, @maGiaoDich varchar(10)
-- Xem tiền lãi đã được nhận chưa
SELECT @maGiaoDich=MaGiaoDich,
@soTienDaNhan=SoTienGiaoDich FROM GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B
ON A.MaSoTK= B.MaSoTK WHERE B.MaSoTK=@maSoTK AND A.MaLoaiGiaoDich='GD_RLT' AND
A.DaThanhToan=1
if (@maGiaoDich is NULL) SET
@soTienDaNhan=0
--Tính tổng số tiền khách hàng sẽ nhận
SET @soTienPhatSinh = @tiengoc +
(@tienlaithucte-@soTienDaNhan)
END
else
-- Với hình thức gửi lấy lãi định kỳ, khách hàng cũng sẽ
phải trả lại khoản chênh lệch giữa tiền đã nhận định kỳ và tiền lãi tính theo mức
lãi không thời hạn
BEGIN
DECLARE @daNhan money
SET @daNhan= (SELECT SUM(SoTienGiaoDich)
FROM
GIAO_DICH_TIET_KIEM A JOIN TAI_KHOAN_TIET_KIEM B ON A.MaSoTK=B.MaSoTK
WHERE A.MaSoTK=@maSoTK
and MaLoaiGiaoDich='GD_RLDK' and DATEDIFF(DAY, NgayGiaoDich, NgayLaiNhapGoc)<0 and
DaThanhToan=1)
SET @soTienPhatSinh = @tiengoc + (@tienlaithucte-
@DaNhan)
END
--Đánh dấu tất toán sổ
UPDATE TAI_KHOAN_TIET_KIEM SET
NgayTatToan=@ngayGiaoDich, TinhTrangSuDung=0 where MaSoTK=@maSoTK;
-- Ghi nhận giao dịch tất toán
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich,
NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich, NgayPhatSinhGiaoDich,MaKhachHangGiaoDich,
DaThanhToan) VALUES (@maSoTK, @soTienPhatSinh, @ngayGiaoDich, @maNhanvien,
'GD_TTTH', @ngayGiaoDich, @maKhachHang,1)
32
|Nhóm 03
END
else
BEGIN
-- Đối với sổ gửi góp, giao dịch tất toán có thể phát sinh
trước khi khách hàng yêu cầu giao dịch tất toán (do gửi góp quá trễ),
-- Nên việc đánh dấu sổ đóng đã được thực hiện khi giao dịch
tất toán được phát sinh, khi khách hàng đến tất toán
-- chỉ cần đánh dấu giao dịch rút lãi trước hạn đã thực hiện
DECLARE @maGD1 varchar(10), @maGD2 varchar(10);
SELECT @maGD1=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_TTTH' and DaThanhToan=0
if (@maGD1 is null)
-- Phát sinh giao dịch tất toán nếu chưa có
exec dbo.NhanLaiTruocHanGuiGop @maSoTk,
@ngayGiaoDich
SELECT @maGD1=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_TTTH' and DaThanhToan=0
SELECT @maGD2=MaGiaoDich FROM GIAO_DICH_TIET_KIEM WHERE
MaSoTK=@maSoTK AND MaLoaiGiaoDich='GD_RLTH' and DaThanhToan=0
-- Đánh dấu xác nhận đã thực hiện giao dịch lấy lãi
trước hạn
UPDATE GIAO_DICH_TIET_KIEM SET DaThanhToan=1,
MaNhanVien=@maNhanvien, NgayGiaoDich=@ngayGiaoDich, MaKhachHangGiaoDich=@maKhachHang
WHERE MaGiaoDich=@maGD2
-- Đánh dấu xác nhận đã thực hiện giao dịch tất toán
UPDATE GIAO_DICH_TIET_KIEM SET DaThanhToan=1,
MaNhanVien=@maNhanvien, NgayGiaoDich=@ngayGiaoDich, MaKhachHangGiaoDich=@maKhachHang
WHERE MaGiaoDich=@maGD1
END
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
DECLARE @err varchar(MAX)
SELECT @err = ERROR_MESSAGE()
RAISERROR(@err, 16, 1);
END CATCH
END
-- Procedure Gửi góp (Khi gửi góp thêm, hệ thống tính lãi kép theo ngày kỳ trước,
cho ra số dư mới, rồi cộng với khoản gửi thêm, cho ra số dư hiện tại)
ALTER PROCEDURE [dbo].[GuiGop] (@maSoTK NVARCHAR(10), @soTien money, @ngayGiaoDich
date, @maNhanvien varchar(10),@maKhachHang varchar(10), @maGiaoDich varchar(10) out)
AS
BEGIN
SET XACT_ABORT ON
BEGIN TRAN
BEGIN TRY
DECLARE @soducuoi money, @tienlaiKytruoc money,@kyHan int,
@tongTien money, @kyGuiGop int, @ngayDenHan date, @ngayGuiGop date
-- Ghi nhận số dư mới = gốc + lãi kép theo ngày của kỳ trước +
số tiền gửi thêm.
SET @soducuoi = DBO.LaySoDu(@maSoTK, DATEADD(DAY, -1,
@ngayGiaoDich))
SET @tienlaiKytruoc = DBO.TinhLaiKepGuiGop(@maSoTK,
@ngayGiaoDich)
SET @tongTien = @soducuoi + @tienlaiKytruoc+@soTien
33
|Nhóm 03
EXEC DBO.GhiNhanSoDu @maSoTK, @tongTien, @ngayGiaoDich
-- Ghi nhận giao dịch
SET @maGiaoDich = DBO.AUTO_IDGD();
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich,
NgayGiaoDich, MaNhanVien, MaLoaiGiaoDich,NgayPhatSinhGiaoDich, MaKhachHangGiaoDich,
DaThanhToan) VALUES (@maSoTK, @soTien, @ngayGiaoDich, @maNhanvien, 'GD_GG',
@ngayGiaoDich, @maKhachHang, 1)
-- Phát sinh thời điểm gửi góp tiếp theo
SELECT @kyGuiGop=HanGuiGop, @ngayDenHan=NgayDenHan,
@ngayGuiGop=NgayGuiGopTiepTheo FROM TAI_KHOAN_TIET_KIEM WHERE MaSoTK=@maSoTK
if (DATEADD(DAY,@kyGuiGop*30, @ngayGuiGop)<@ngayDenHan)
UPDATE TAI_KHOAN_TIET_KIEM SET
NgayGuiGopTiepTheo=DATEADD(DAY, @kyGuiGop*30, NgayGuiGopTiepTheo) where
MaSoTK=@maSoTK;
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
DECLARE @err varchar(MAX)
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
SELECT @err
END CATCH
END
34
|Nhóm 03
EXEC (@tsql)
select(@tsql)
END
END
5.1. Thủ tục liên quan đến giao dịch ngân hàng
- Thủ tục ghi nhận số dư mới của sổ: được thực hiện trong chức năng
gia hạn
ALTER PROCEDURE [dbo].[GhiNhanSoDu] (@maSoTK NVARCHAR(10), @soDu money, @ngayGhiNhan date)
AS
BEGIN
DECLARE @ID varchar(5);
SET @ID = (SELECT DBO.AUTO_IDSDTK(@maSoTK))
INSERT INTO SO_DU_TAI_KHOAN(MaSoDu,MaSoTK, NgayGhiNhanSoDu, SoDu) VALUES (@ID, @maSoTK,
@ngayGhiNhan, @soDu);
END
-- Nếu đến hạn nhận lãi định kỳ, phát sinh giao dịch lãi
if @hinhThucGuiLai='HTTL_DK' and @ngayNhanLai=@today
exec dbo.PhatSinhLaiDinhKy @maSo
-- Nếu là sổ nhận lãi sau, phát sinh lãi vào ngày đến hạn
if @hinhThucGuiLai='HTTL_S' and @ngayDenHan=@today
exec dbo.PhatSinhLaiSau @maSo
-- Nếu sổ quá ngày đến hạn thì phát sinh gia hạn sổ
if @ngayDenHan < @today
exec dbo.GiaHanSo @maSo, @today
END
ELSE
BEGIN
-- Đối với sổ gửi góp
-- Kiểm tra nếu sổ đóng trễ hạn quá 20 ngày thì tất toán và đóng sổ.
SELECT @ngayGuiGop=NgayGuiGopTiepTheo FROM TAI_KHOAN_TIET_KIEM WHERE
MaSoTK=@maSo
IF (@ngayGuiGop < @today)
BEGIN
DECLARE @ngayTre int
SET @ngayTre= DATEDIFF(DAY, @ngayGuiGop, @today)
if (@ngayTre>20)
exec dbo.NhanLaiTruocHanGuiGop @maSo, @today
END
END
END
SET @index = @index + 1;
END
COMMIT TRAN
END TRY
36
|Nhóm 03
BEGIN CATCH
ROLLBACK
END CATCH
END
-- Ghi nhận số dư (Các hoạt động xác nhận ý kiến khách hàng có rút lãi hay
không được thực hiện trước khi gọi hàm này)
IF (@hinhThucTraLai='HTTL_S')
-- Nếu khách hàng không rút gốc và lãi, lãi sẽ được cộng vào gốc của kỳ sau.
BEGIN
DECLARE @laiKyTruoc money
SET @laiKyTruoc = (SELECT SoTienGiaoDich FROM
GIAO_DICH_TIET_KIEM WHERE MaSoTK=@maSoTK and DaThanhToan=0)
IF (@laiKyTruoc=NULL) SET @laiKyTruoc=0
SET @tienPhatSinh= @tienGoc+ @laiKyTruoc
INSERT INTO SO_DU_TAI_KHOAN(MaSoTK, NgayGhiNhanSoDu, SoDu)
VALUES (@maSoTK, @ngayPhatSinhGiaoDich, @tienPhatSinh)
END
else if (@hinhThucTraLai='HTTL_DK')
-- Tiền lãi của định kỳ cuối nếu khách hàng chưa lên nhận thì ngân hàng sẽ giữ
hộ, và sẽ gia hạn sổ với tiền gốc.
INSERT INTO SO_DU_TAI_KHOAN(MaSoTK, NgayGhiNhanSoDu, SoDu)
VALUES (@maSoTK, @ngayPhatSinhGiaoDich, @tienGoc)
else
-- Với hình thức gửi lấy lãi trước, nếu đến ngày đến hạn thì ngân hàng sẽ giữ
hộ phần lãi được phát sinh trong kỳ mới,
-- Nếu qua ngày đến hạn của kỳ sau mà khách hàng vẫn chưa nhận lãi của kỳ
trước thì sẽ được nhập vào gốc cho kỳ sau, đồng thời phát sinh tính lãi cho kỳ sau với gốc mới.
BEGIN
DECLARE @tienChuaNhan money
SELECT @tienChuaNhan=SoTienGiaoDich FROM GIAO_DICH_TIET_KIEM A JOIN
TAI_KHOAN_TIET_KIEM B ON A.MaSoTK= B.MaSoTK WHERE B.MaSoTK=@maSoTK AND A.MaLoaiGiaoDich='GD_RLT' AND
A.DaThanhToan=0
if (@tienChuaNhan=null) SET @tienChuaNhan=0
-- Ghi nhận số dư như số dư gốc
INSERT INTO SO_DU_TAI_KHOAN(MaSoTK, NgayGhiNhanSoDu, SoDu) VALUES
(@maSoTK, @ngayPhatSinhGiaoDich, @tienGoc+ @tienChuaNhan)
EXEC DBO.PhatSinhLaiTruoc @maSoTK, @tienGoc
END
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich, NgayGiaoDich,
MaLoaiGiaoDich, NgayPhatSinhGiaoDich, DaThanhToan) VALUES (@maSoTK, @tiengoc, @ngayPhatSinhGiaoDich,
'GD_GH', @ngayPhatSinhGiaoDich, 1)
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
37
|Nhóm 03
END CATCH
END
AS
BEGIN
DECLARE @ngaybatdau date, @ngayketthuc date, @maLoaiTK varchar(10), @tienlai
money, @goc money, @laisuat float, @kyHan int, @ngayPhatSinh date
Select @goc=DBO.LaySoDu(@maSoTK, GETDATE())
SELECT @ngaybatdau=NgayLaiNhapGoc, @ngayketthuc=NgayDenHan,
@maLoaiTK=MaLoaiTietKiem, @ngayPhatSinh=NgayLaiNhapGoc FROM TAI_KHOAN_TIET_KIEM
WHERE MaSoTK=@maSoTK
SELECT @laisuat=LaiSuat, @kyHan=KyHan FROM LOAI_TIET_KIEM WHERE
MaLoaiTietKiem=@maLoaiTK
--Tính tiền lãi
SET @tienlai= (SELECT DBO.TINH_LAI_DON(@ngaybatdau, @ngayketthuc, @goc,
@laisuat, @kyHan))
-- Ghi nhận giao dịch lấy lãi trước
SELECT @ngaybatdau, @ngayketthuc
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich, MaLoaiGiaoDich,
NgayPhatSinhGiaoDich) VALUES (@maSoTK, @tienlai, 'GD_RLT', @ngayPhatSinh);
UPDATE TAI_KHOAN_TIET_KIEM SET NgayNhanLaiDinhKyTiepTheo=NgayLaiNhapGoc
END
AS
BEGIN
38
|Nhóm 03
DECLARE @ngaybatdau date, @ngayketthuc date, @maLoaiTK varchar(10), @tienlai
money, @goc money, @laisuat float, @kyHan int, @ngayPhatSinh date
SELECT @goc=SoDu from SO_DU_TAI_KHOAN where MaSoTK=@maSoTK and
NgayGhiNhanSoDu=(SELECT MAX(NgayGhiNhanSoDu) FROM SO_DU_TAI_KHOAN WHERE
MaSoTK=@maSoTK)
SELECT @ngaybatdau=NgayLaiNhapGoc, @ngayketthuc=NgayDenHan,
@maLoaiTK=MaLoaiTietKiem, @ngayPhatSinh=NgayDenHan FROM TAI_KHOAN_TIET_KIEM WHERE
MaSoTK=@maSoTK
SELECT @laisuat=LaiSuat, @kyHan=KyHan FROM LOAI_TIET_KIEM WHERE
MaLoaiTietKiem=@maLoaiTK
-- Tính tiền lãi
SET @tienlai= (SELECT DBO.TINH_LAI_DON(@ngaybatdau, @ngayketthuc, @goc,
@laisuat, @kyHan))
-- Ghi nhận giao dịch lấy lãi sau
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich, MaLoaiGiaoDich,
NgayPhatSinhGiaoDich) VALUES (@maSoTK, @tienlai, 'GD_RLS', @ngayPhatSinh);
END
- Procedure Phát sinh giao dịch nhận lãi trước hạn đối với sổ gửi 1 lần
ALTER PROCEDURE [dbo].[NhanLaiTruocHan] (@maSoTK NVARCHAR(10), @soTien money out, @ngayGiaoDich date)
AS
BEGIN
DECLARE @tiengoc money, @ngayNhapGoc date
Select @tiengoc=SoDu from SO_DU_TAI_KHOAN where MaSoTK= @maSoTK and NgayGhiNhanSoDu=(SELECT
MAX(NgayGhiNhanSoDu) FROM SO_DU_TAI_KHOAN WHERE MaSoTK=@maSoTK)
SET @ngayNhapgoc = (SELECT NgayLaiNhapGoc FROM TAI_KHOAN_TIET_KIEM WHERE MaSoTK= @maSoTK)
SET @soTien= (SELECT DBO.TIEN_LAI_TAT_TOAN_TRUOC_HAN(@tiengoc, @ngayNhapGoc, @ngayGiaoDich))
INSERT INTO GIAO_DICH_TIET_KIEM(MaSoTK, SoTienGiaoDich,NgayGiaoDich, MaLoaiGiaoDich,
NgayPhatSinhGiaoDich, DaThanhToan) VALUES (@maSoTK, @soTien, @ngayGiaoDich , 'GD_RLTH', @ngayGiaoDich,
1);
END
- Giao dịch tự động tất toán sổ gửi góp nếu khách hàng gửi góp quá trễ hạn
END
39
|Nhóm 03
6. Các function liên quan khác
6.1. Hàm đọc bảng
- Function kiểm tra khách hàng mới hay cũ
CREATE FUNCTION [dbo].[KIEM_TRA_KH] (@MaDinhDanh varchar(15))
RETURNS table AS
RETURN
(
SELECT *
FROM
KHACH_HANG
WHERE KHACH_HANG.MaDinhDanh=@MaDinhDanh
)
- Hàm tự động tạo mã khách hàng khi thêm mới khách hàng
40
|Nhóm 03
DECLARE @ID VARCHAR(5)
IF (SELECT COUNT(*) FROM KHACH_HANG) = 0
SET @ID = '0'
ELSE
SELECT @ID = MAX(RIGHT(MaKhachHang, 3)) FROM KHACH_HANG
SELECT @ID = CASE
WHEN @ID >= 0 and @ID < 9 THEN 'KH00' + CONVERT(CHAR, CONVERT(INT,
@ID) + 1)
WHEN @ID >= 9 THEN 'KH0' + CONVERT(CHAR, CONVERT(INT, @ID) + 1)
END
RETURN @ID
END
41
|Nhóm 03
IF (SELECT COUNT(*) FROM SO_DU_TAI_KHOAN where MaSoTK=@maSo)=0
SET @ID = '0'
ELSE
SELECT @ID = MAX(RIGHT(MaSoDu, 3)) FROM SO_DU_TAI_KHOAN
SELECT @ID = CASE
WHEN @ID >= 0 and @ID < 9 THEN 'SD00' + CONVERT(CHAR, CONVERT(INT,
@ID) + 1)
WHEN @ID >= 9 THEN 'SD0' + CONVERT(CHAR, CONVERT(INT, @ID) + 1)
END
RETURN @ID
END
43
|Nhóm 03
AADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIII
OOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD'
DECLARE @COUNTER int
DECLARE @COUNTER1 int
SET @COUNTER = 1
WHILE (@COUNTER <=LEN(@strInput))
BEGIN
SET @COUNTER1 = 1
WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1)
BEGIN
IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1))
= UNICODE(SUBSTRING(@strInput,@COUNTER ,1) )
BEGIN
IF @COUNTER=1
SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)
+ SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1)
ELSE
SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1)
+SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)
+ SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-@COUNTER)
BREAK
END
SET @COUNTER1 = @COUNTER1 +1
END
SET @COUNTER = @COUNTER +1
END
--SET @strInput = replace(@strInput,' ','-')
RETURN @strInput
END
- Function lấy số dư
44
|Nhóm 03
CHƯƠNG 4. TẠO USER VÀ PHÂN QUYỀN
Ứng với hai nhóm người dùng (Nhân viên giao dịch và quản lý) là các role riêng
+ Đối với Role Staff (dành cho nhân viên giao dịch): Tạo mới Database Role Staff và
gán các quyền cần thiết cho role.
+ Đối với Role Manager, yêu cần cần có quyền gán quyền cho nhân viên, sử dụng server
role sysadmin cho Manager.
Với mỗi nhân viên được thêm vào, ta tạo một tài khoản login được ghi nhận trên table
database và tạo một tài khoản login tương ứng trên server cùng một tài khoản user trong
database. Sau đó thêm user vào role tương ứng.
- Trigger tạo tài khoản login và user khi tài khoản được tạo trên bảng DANG_NHAP
45
|Nhóm 03
-- Tạo tài khoản login cho nhân viên, tên người dùng và mật khẩu là tài khoản
được tạo trên bảng Đăng nhập
SET @sqlString= 'CREATE LOGIN [' + @userName +'] WITH PASSWORD='''+ @passWord
+''', DEFAULT_DATABASE=[QUANLYSOTIETKIEMNGANHANG], CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF'
EXEC (@sqlString)
-- Tạo tài khoản người dùng đối với nhân viên đó trên database (tên người
dùng trùng với tên login)
SET @sqlString= 'CREATE USER ' + @userName +' FOR LOGIN '+ @userName
EXEC (@sqlString)
END
- Procedure thêm user nhân viên vào một nhóm người dùng
-- Add người dùng vào role tương ứng (Staff hoặc Manager(sysadmin))
if (@quyen='sysadmin')
SET @sqlString = 'ALTER SERVER ROLE '+@quyen +' ADD MEMBER ' +
@tenUser;
else
SET @sqlString = 'ALTER ROLE '+ @quyen +' ADD MEMBER ' + @tenUser;
exec (@sqlString)
-- Ghi nhận vào bảng phân nhóm
INSERT INTO PHAN_NHOM VALUES (@maNhanVien, @maNhomNguoiDung)
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK
SELECT @err = 'Lỗi: ' + ERROR_MESSAGE()
SELECT @err ,@maNhanVien, @maNhomNguoiDung
END CATCH
END
46
|Nhóm 03
CHƯƠNG 5. THIẾT KẾ GIAO DIỆN HỆ THỐNG
- Chương trình Winform được viết bằng Microsoft Visual Studio 2022 - trên nền tảng
ASP.NET Web Application (.NET Framework) C#.
1. Form Home
47
|Nhóm 03
Hệ thống sẽ sử dụng username và password nhân viên nhập vào để login vào
database
Tiến hành mở kết nối tới SQL
public DB_Connect(string username, string password)
{
connectString = "Data Source=tcp:DESKTOP-SH243I1;Initial
Catalog=QUANLYSOTIETKIEMNGANHANG;User ID=" + username+";Password="+password;
link = new SqlConnection(connectString);
comm = link.CreateCommand();
}
48
|Nhóm 03
Dựa vào mã nhân viên lấy được thông qua đăng nhập, thực hiện lấy các thông tin của
nhân viên.
- Các hàm, trigger, view, thủ tục liên quan được gọi từ bên sql qua c#
50
|Nhóm 03
{
db.new_comm();
string sql = "select * From LayChucVu(@MaNhanVien)";
db.comm.Parameters.AddWithValue("@MaNhanVien", maNhanVien);
return db.ExecuteQueryDataSet(sql, CommandType.Text);
}
51
|Nhóm 03
4.4. Danh mục Loại tiền
52
|Nhóm 03
1.1. Hiển thị thông tin nhân viên đang làm việc
1.2. Thêm, sửa, xoá, tìm kiếm thông tin nhân viên
53
|Nhóm 03
public bool ThemNhanVien(string hoten,string ngaysinh,string madinhdanh,string sdt,
string machinhanh, string maNhom ,ref string err)
{
string sqlString = "ThemNhanVien";
db.new_comm();
db.comm.Parameters.Add("@hoTen", SqlDbType.NVarChar).Value = hoten;
db.comm.Parameters.Add("@ngaySinh", SqlDbType.Date).Value =
DateTime.Parse(ngaysinh);
db.comm.Parameters.Add("@SDT", SqlDbType.VarChar).Value = sdt;
db.comm.Parameters.Add("@maDinhDanh", SqlDbType.VarChar).Value =
madinhdanh;
db.comm.Parameters.Add("@maChiNhanh", SqlDbType.VarChar).Value =
machinhanh;
db.comm.Parameters.Add("@maNhom", SqlDbType.VarChar).Value = maNhom;
return db.MyExecuteNonQuery(sqlString, CommandType.StoredProcedure, ref
err);
}
54
|Nhóm 03
- Form Danh sách sổ tiết kiệm
55
|Nhóm 03
+ " on TAI_KHOAN_TIET_KIEM.MaSoTK = " + tenHinhThuc +
".MaSoTK";
56
|Nhóm 03
db.comm.Parameters.Add("@hoTen", SqlDbType.NVarChar).Value = hoTen;
db.comm.Parameters.Add("@ngaySinh", SqlDbType.Date).Value = ngaySinh;
db.comm.Parameters.Add("@sdt", SqlDbType.Char).Value = sdt;
db.comm.Parameters.Add("@maDinhDanh", SqlDbType.VarChar).Value = maDinhDanh;
db.comm.Parameters.Add("@ngayCap", SqlDbType.Date).Value = ngayCap;
db.comm.Parameters.Add("@noiCap", SqlDbType.NVarChar).Value = noiCap;
db.comm.Parameters.Add("@diaChi", SqlDbType.NVarChar).Value = diaChi;
db.comm.Parameters.Add("@imageFolderPath", SqlDbType.NVarChar).Value = image;
return db.MyExecuteNonQuery(sqlString, CommandType.StoredProcedure, ref err);
}
57
|Nhóm 03
- Thêm sổ tiết kiệm gửi một lần
public bool ThemSoTK1L(string MaKH, string TenKH, string ngaysinh, string SDT,
string MaDinhDanh, string ngaycap, string noicap, string diachi, string
imageFolderPath,
float khoanGui, string maNhanvien, string ngayMoSo, string maLoaiTien, int
kyHan, string maHinhThucTraLai, int kyTraLai, string error, ref string err)
{
58
|Nhóm 03
return db.MyExecuteNonQuery(sqlString, CommandType.StoredProcedure, ref
err);
59
|Nhóm 03
string sqlString = "ThemSoGuiGop";
db.new_comm();
60
|Nhóm 03
return dts;
}
- Hiển thị các hình thức trả lãi
public DataSet get_HinhThucTraLai()
{
string sqlString = "SELECT * from HINH_THUC_TRA_LAI";
db.new_comm();
DataSet dts = db.ExecuteQueryDataSet(sqlString, CommandType.Text);
return dts;
}
- Hiển thị ngày đến hạn
public DataSet get_NgayDenHan(string MASTK)
{
61
|Nhóm 03
Thực hiện gọi hàm lấy danh sách sổ
public DataSet get_DS_So(string MaDinhDanh)
{
db.new_comm();
string sqlString = "SELECT * from
dbo.LayChiTietThongTinSo(@maDinhDanh)";
db.comm.Parameters.AddWithValue("@maDinhDanh", MaDinhDanh);
DataSet dts = db.ExecuteQueryDataSet(sqlString, CommandType.Text);
return dts;
}
63
|Nhóm 03
+ Gọi hàm xác nhận từ C#
public bool ThanhToanTKT(string maSo, string maNhanVien, string ngaygiaodich, string
maKhachHang, ref string err)
{
64
|Nhóm 03
+ Gọi hàm tất toán từ C#
public bool TatToanSoCoHan(string maSo, string ngayGiaoDich, string maNhanVien, string
maKhachHang, ref string err, bool DungHan=true)
{
string sqlString = null;
if (DungHan)
sqlString = "TatToanDungHan";
else
sqlString = "TatToanTruocHan";
db.new_comm();
db.comm.Parameters.Add("@maSoTK", SqlDbType.VarChar).Value = maSo;
db.comm.Parameters.Add("@ngayGiaoDich", SqlDbType.Date).Value =
DateTime.Parse(ngayGiaoDich);
db.comm.Parameters.Add("@maNhanVien", SqlDbType.VarChar).Value = maNhanVien;
db.comm.Parameters.Add("@maKhachHang", SqlDbType.VarChar).Value =
maKhachHang;
return db.MyExecuteNonQuery(sqlString, CommandType.StoredProcedure, ref err);
}
65
|Nhóm 03
Thực hiện giao dịch gửi góp
67
|Nhóm 03
4.1. Tìm kiếm khách hàng
Tìm kiếm khách hàng trong form danh sách khách hàng theo 3 loại: tìm kiếm
theo mã khách hàng, theo tên khách hàng và theo mã định danh.
public bool SuaKhachHang(string maKhachHang, string hoTen, string sdt,string diaChi, string
maDinhDanh,
string noiCap, string ngaySinh,string ngayCap, string
image)
{
string sqlString = "SuaKhachHang";
db.new_comm();
db.comm.Parameters.Add("@maKhachHang", SqlDbType.VarChar).Value = maKhachHang;
db.comm.Parameters.Add("@hoTen", SqlDbType.NVarChar).Value = hoTen;
db.comm.Parameters.Add("@ngaySinh", SqlDbType.VarChar).Value = ngaySinh;
db.comm.Parameters.Add("@sdt", SqlDbType.Char).Value = sdt;
db.comm.Parameters.Add("@maDinhDanh", SqlDbType.VarChar).Value = maDinhDanh;
68
|Nhóm 03
db.comm.Parameters.Add("@ngayCap", SqlDbType.VarChar).Value = ngayCap;
db.comm.Parameters.Add("@noiCap", SqlDbType.NVarChar).Value = noiCap;
db.comm.Parameters.Add("@diaChi", SqlDbType.NVarChar).Value = diaChi;
db.comm.Parameters.Add("@imageFolderPath", SqlDbType.NVarChar).Value = image;
var result = db.MyExecuteNonQuery(sqlString, CommandType.StoredProcedure, ref
err);
return result;
}
69
|Nhóm 03