Tải bản đầy đủ (.pdf) (112 trang)

đồ án môn học thực hành hệ quản trị cơ sơ dữ liệu trang web thương mại điện tử

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.21 MB, 112 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN </b>

<b>KHOA HỆ THỐNG THÔNG TIN </b>

<small>---🙞🙜🕮🙞🙜--- </small>

<b>ĐỒ ÁN MÔN HỌC THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU </b>

<b>ĐỀ TÀI: TRANG WEB THƯƠNG MẠI ĐIỆN TỬ BÁN HÀNG SIÊU THỊ </b>

<i><b>Giảng viên hướng dẫn: Nguyễn Hồ Duy Tri Lớp: IS210.N21.1 </b></i>

<b>Nhóm sinh viên thực hiện: </b>

<i>1. Đỗ Thị Bích Ngân – 21522369 – Trưởng nhóm 2. Nguyễn Văn Quốc Thanh - 21521447 </i>

<i>3. Nguyễn Thị Bích Hảo - 21522049 4. Nguyễn Ngọc Gia Khiêm – 21520287 </i>

<i>TP.HCM, tháng 06 năm 2023 </i>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>MỤC LỤC </b>

<b>MỤC LỤC ... 1 </b>

<b>LỜI CẢM ƠN ... 4 </b>

<b>NHẬN XÉT CỦA GIẢNG VIÊN ... 5 </b>

<b>CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI ... 6 </b>

<b>1.1. Đặt vấn đề ... 6 </b>

<b>1.2. Giải pháp ... 6 </b>

<b>1.3. Phát biểu bài toán ... 7 </b>

<b>1.4. Quy trình nghiệp vụ và phân tích u cầu ... 8 </b>

<b>1.4.1. Qui trình nghiệp vụ ... 8 </b>

<b>1.4.2. Yêu cầu chức năng ... 10 </b>

<b>1.4.3 Yêu cầu phi chức năng ... 11 </b>

<b>CHƯƠNG 2: THIẾT KẾ MÔ HÌNH QUAN HỆ ... 12 </b>

<b>2.4.2. Biểu diễn các ràng buộc toàn vẹn ... 22 </b>

<b>CHƯƠNG 3: XÂY DỰNG VÀ QUẢN LÝ CÁC GIAO TÁC ... 27 </b>

<b>3.1. Trigger ... 27 </b>

<b>3.1.1 Trigger trên bảng CUSTOMER ... 28 </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>3.1.2 Trigger trên bảng EMPLOYEE ... 29 </b>

<b>3.1.3 Trigger trên bảng ORDER_DETAIL ... 33 </b>

<b>3.2 Các chương trình con được sử dụng trong hệ thống ... 34 </b>

<b>3.2.1 Stored Procedure... 34 </b>

<b>3.2.2 Stored Function ... 50 </b>

<b>3.3. Giao tác (Transaction) ... 53 </b>

<b>3.3.1. Tổng quan về giao tác trong Oracle ... 53 </b>

<b>3.3.2. Tổng quan về giao tác trong Java (Spring Boot) ... 55 </b>

<b>CHƯƠNG 4: XỬ LÝ TRUY XUẤT ĐỒNG THỜI ... 57 </b>

<b>4.1. Tìm hiểu về các phương thức khóa cơ bản ... 57 </b>

<b>4.1.1. Read Lock (Shared Lock) ... 57 </b>

<b>4.1.2. Write Lock (Exclusive Lock) ... 58 </b>

<b>4.2. Các mức cơ lập có trong hệ quản trị cơ sở dữ liệu Oracle ... 58 </b>

<b>4.4.2. Mô tả Deadlock trong đồ án môn học ... 75 </b>

<b>CHƯƠNG 5: PHÂN QUYỀN TRUY CẬP ... 77 </b>

<b>5.1. Tổng quan về Spring Security ... 77 </b>

<b>5.2. Phân quyền người dùng quản lý và nhân viên ... 77 </b>

<b>5.3. Phân quyền người dùng khách hàng ... 79 </b>

<b>CHƯƠNG 6: THIẾT KẾ GIAO DIỆN ... 80 </b>

<b>6.1. Đăng nhập ... 80 </b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>6.2. Đăng ký ... 81 </b>

<b>6.3. Thông tin cá nhân khách hàng ... 82 </b>

<b>6.4. Thay đổi mật khẩu ... 83 </b>

<b>6.18. Quản lý nhân viên ... 100 </b>

<b>6.19. Quản lý doanh thu ... 101 </b>

<b>6.20. Quản lý phản hồi ... 102 </b>

<b>6.21. Thêm nhân viên ... 103 </b>

<b>CHƯƠNG 7: KẾT LUẬN ... 105 </b>

<b>7.1. Bảng phân công công việc... 105 </b>

<b>7.2. Môi trường phát triển và môi trường triển khai ... 106 </b>

<b>7.2.1. Môi trường phát triển... 106 </b>

<b>7.2.2. Môi trường triển khai ... 107 </b>

<b>7.3. Kết quả đạt được ... 107 </b>

<b>7.4. Những hạn chế ... 108 </b>

<b>7.5. Hướng phát triển của dự án ... 108 </b>

<b>DANH MỤC TÀI LIỆU THAM KHẢO ... 110 </b>

<b>NGUỒN HÌNH ẢNH ... 111 </b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>LỜI CẢM ƠN </b>

Lời đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến trường Đại học Công nghệ Thông tin và Khoa Hệ thống thông tin đã tạo điều kiện cho chúng em được tìm hiểu và học về môn Hệ quản trị cơ sở dữ liệu. Trong q trình học tập, chúng em có được rất nhiều kiến thức và kinh nghiệm liên quan đến các vấn đề trong môn học. Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc nhất đến thầy, cô giảng dạy lý thuyết và thực hành đã trực tiếp hướng dẫn, định hướng chun mơn, giúp đỡ tận tình đề tài đồ án của nhóm chúng em và tạo mọi điều kiện thuận lợi như việc đóng góp và chia sẻ tài liệu rất chất lượng.

Dựa trên những kiến thức thầy cơ cung cấp cùng với sự tìm tịi, học hỏi thêm từ các trang mạng, từ bạn bè, nhóm dã hồn thành đồ án với những sự cố gắng và nỗ lực nhất. Tuy nhiên do lần đầu thực hiện nên khó tránh khỏi những sai sót. Nhóm rất mong nhận được sự đóng góp ý kiến của thầy, cơ để có thể rút ra được những kinh nghiệm và thực hiện tốt hơn trong các đồ án tiếp theo.

Lời cuối cùng, chúng em một lần nữa xin được chân thành cảm ơn đến thầy, cô và chúc thầy, cô nhiều sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau.

Xin chân thành cảm ơn thầy, cô !

<i><b>Inside Out Team </b></i>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>NHẬN XÉT CỦA GIẢNG VIÊN </b>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI </b>

Nội dung: Mô tả tổng quan về đề tài như đặt vấn đề, giải pháp, phát biểu bài toán, quy trình nghiệp vụ. Từ đó hình thành nên các yêu cầu chức năng và phi chức năng của hệ

<b>thống. </b>

<b>1.1. Đặt vấn đề </b>

Ngày nay, khi cuộc sống của mỗi người dân đang từng bước được nâng cao thì nhu cầu về mua sắm, vui chơi giải trí ngày càng được chú trọng. Do đó, các doanh nghiệp cũng quan tâm ưu tiên cho việc phát triển các khu thương mại mua sắm nhằm đáp ứng nhu cầu của người dân. Và siêu thị là một nơi mua sắm mà có thể đáp ứng các nhu cầu tiêu dùng của mọi người. Với sự phát triển ngày càng rộng, u cầu cơng nghệ hóa các quy trình nghiệp vụ trong siêu thị là điều tất yếu, nhằm mục đích làm đơn giản hóa các nghiệp vụ cũng như tăng khả năng phục vụ khách hàng trở nên nhanh chóng và hiệu quả.

Chính vì nhu cầu mua sắm ngày càng tăng, nên sự đòi hỏi đáp ứng nhu cầu về mặt hàng hóa cũng như sản phẩm ngày càng cao. Ngoài ra việc đảm bảo các vấn đề vệ sinh an toàn thực phẩm, nguồn gốc xuất xứ, thực phẩm xanh trên các trang web bán hàng vẫn cịn nhiều hạn chế. Do đó cần một trang web quản lý đơn giản, dễ sử dụng và có thể tiết kiệm thời gian cho việc quản lý, hạn chế những sai số và có thể đáp ứng được nhu cầu mà người sử dụng đang cần và tích hợp các tiêu chí về giá trị dinh dưỡng của sản phẩm trên trang web nhằm tạo sự yên tâm cho khách hàng khi sử dụng và mua sản phẩm.

<b>1.2. Giải pháp </b>

Thiết kế và xây dựng trang web bán hàng siêu thị kế thừa mơ hình hoạt động của các siêu thị hiện có trên thực tế. Đồng thời ứng dụng cơng nghệ với mục đích làm cho chương trình có thể đáp ứng được nhu cầu quản lý ngày càng phức tạp, dễ dàng trong triển khai. Xây dựng website đơn giản, thân thiện với người dùng, tiết kiệm thời gian làm thủ tục tại cửa hàng, giảm sai sót, đáp ứng nhu cầu hiện tại của người dùng, tích hợp tiêu chí giá trị dinh dưỡng của sản phẩm trên website nhằm tạo sự yên tâm cho khách hàng khi sử dụng và mua hàng

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Trang web đồng thời là công cụ quản lý bán hàng hiệu quả, làm đơn giản hóa việc lập các hóa đơn giấy tờ cũng như việc lưu trữ chúng, cung cấp thông tin nhanh chóng và chính xác làm cơ sở cho việc ra quyết định trong kinh doanh, phục vụ hữu hiệu cho việc quản lý và phát triển của siêu thị.

<b>1.3. Phát biểu bài toán </b>

Xây dựng một hệ thống ứng dụng hồn thiện để các khách hàng có nhu cầu mua sắm online có thể thao tác một cách an tồn, thuận tiện và dễ quản lí các thơng tin các thơng tin cá nhân của mình. Các nhân viên của cửa hàng cũng dễ dàng quản lí thơng tin về sản phẩm, khách hàng, doanh thu và thông tin cá nhân của mình.

Hằng ngày, hệ thống tiếp nhận các yêu cầu mua hàng của khách hàng. Hệ thống sẽ tự động lập các hóa đơn tính tiền một cách nhanh chóng cho các đơn hàng của khách hàng. Sau mỗi đơn hàng được giao thành công, hệ thống cần lưu lại thông tin và các đánh giá của khách hàng về sản phẩm để các nhân viên và bộ phận trong công ty sẽ xem qua các phản hồi của khách hàng và cải thiện từng ngày giúp cho cửa hàng ngày càng phát triển.

Trang web sẽ luôn luôn hoạt động. Vào cuối ngày, nhân viên dựa vào số lượng hiện có của mỗi sản phẩm sẽ thống kê tình hình bán hàng của siêu thị, tính tốn số lượng hàng tồn, hàng hết để lên kế hoạch nhập hàng mới.

Khi có hàng hết hoặc cần bổ sung hàng mới, siêu thị sẽ nhập hàng từ các nhà cung cấp. Thông tin về hàng cần nhập phải được lưu lại để nhân viên kế tốn thống kê tình hình mua bán trong siêu thị. Thơng tin này sẽ được trình lên ban giám đốc để duyệt xem có được phép nhập hàng hay khơng. Khi nhập hàng mới, thì nhân viên kiểm kê sẽ tính tốn số lượng rồi nhập vào hệ thống. Hệ thống phải cho phép nhân viên nhập hàng mới vào hay cập nhật số lượng hàng.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

• Quản lý doanh thu: Theo dõi và quản lý doanh thu của cửa hàng để tối ưu hóa lợi nhuận và đảm bảo sự ổn định tài chính.

• Quản lý mua bán hàng: Đảm bảo quy trình bán hàng được thực hiện nhanh chóng và hiệu quả, đa dạng hóa các mặt hàng và giảm thời gian chờ đợi cho khách hàng • Đảm bảo việc tra cứu thông tin cho các đối tượng người dùng hệ thống.

• Hỗ trợ tìm kiếm các thơng tin một cách chính xác, nhanh chóng, hạn chế đến mức thấp nhất các rủi ro xảy ra với hệ thống

• Hệ thống hỗ trợ phân quyền người dùng, đảm bảo tính bảo mật, an tồn của hệ thống.

<b>1.4. Quy trình nghiệp vụ và phân tích u cầu 1.4.1. Qui trình nghiệp vụ </b>

<b> </b>

<i><small>Hình 1: Sơ đồ tổ chức siêu thị GreenMart</small></i>

Nhân viên quản lí và các nhân viên khác cịn lại phải đăng nhập vào trang web với tài khoản và mật khẩu đã được cửa hàng cung cấp trước.

Khách hàng đăng kí tài khoản và dùng tài khoản mình tạo để đăng nhập. Với mỗi quyền khi đăng nhập thì sẽ ứng với những chức năng khác nhau.

<b>1.4.1.1. Hoạt động của khách hàng: </b>

• Qui trình đăng kí: Mỗi khách hàng có thể đăng ký tài khoản khi điền đầy đủ các thông tin: Họ tên, số điện thoại, ngày sinh, địa chỉ, mail, mật khẩu.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

• Qui trình đăng nhập và quản lí thơng tin cá nhân: Sau khi có tài khoản thì khách hàng đăng nhập vào trang web và có thể thực hiện các cơng việc: xem và chỉnh sửa thơng tin cá nhân của mình, thay đổi mật khẩu,…

• Qui trình mua hàng: Sau khi đăng nhập thành cơng, khách hàng có thể tìm kiếm, xem thông chi tiết các sản phẩm của cửa hàng, xem phản hồi của những khách hàng khác về sản phẩm đó và lựa chọn sản phẩm kèm theo số lượng mình muốn mua. • Qui trình đặt hàng thanh toán: Sau khi chọn xong các sản phẩm, khách hàng tiến

hành đặt hàng bằng cách điền các thông tin về: số điện thoại người nhận, địa chỉ giao hàng. Thanh tốn đơn hàng, khách hàng có thể lựa chọn một trong hai hình thức là: COD (thanh tốn khi nhận hàng) và VNPAY (thanh tốn bằng ví điện tử). • Qui trình hủy đơn hàng: Sau khi đăng nhập và mua hàng thành cơng. Khách hàng

có thể hủy đơn đặt hàng nếu đơn đặt hàng đang ở trạng thái thích hợp để hủy và đơn hàng được hủy phải có hình thức thanh tốn là COD.

• Qui trình xác nhận đã nhận hàng: Sau khi giao hàng thành công, nhân viên cửa hàng sẽ gọi điện xác nhận với khách hàng đã giao hàng thành công để cập nhật trạng thái đơn hàng, khách hàng cũng có thể cập nhật trạng thái đơn hàng là ‘Đã nhận hàng’. • Qui trình phản hồi: Sau khi xác nhận đã nhận được hàng, khách hàng có thể phản

hồi và chia sẻ ý kiến của mình về sản phẩm.

<b>1.4.1.2. Hoạt động của nhân viên (khơng phải quản lí) </b>

• Qui trình đăng nhập và quản lí thơng tin cá nhân: Sau khi có tài khoản của cửa hàng cung cấp thì nhân viên đăng nhập vào trang web và có thể thực hiện các công việc: xem và chỉnh sửa thông tin cá nhân của mình, thay đổi mật khẩu,…

• Qui trình quản lý sản phẩm: Sau khi đăng nhập vào trang web, nhân viên có thể tìm kiếm theo tên sản phẩm, theo dõi số lượng hiện có của sản phẩm và thực hiện cập nhật số lượng sản phẩm nếu cần.

• Qui trình quản lý khách hàng: Sau khi đăng nhập vào trang web, nhân viên có thể xem thơng tin khách hàng, theo dõi doanh số của khách hàng đã mua sắm tại cửa hàng. Lọc ra danh sách các khách hàng theo: tên, địa chỉ, số điện thoại, mail.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

• Qui trình quản lý đơn đặt hàng: Sau khi đăng nhập vào trang web, nhân viên có thể theo dõi, xem chi tiết các đơn đặt hàng của khách hàng và cập nhật trạng thái của các đơn đặt hàng đó. Đồng thời xuất hóa đơn của đơn hàng đó. Lọc ra danh sách các đơn đặt hàng theo: Mã đơn đặt hàng, tên khách hàng.

<b>1.4.1.3. Hoạt động của nhân viên quản lý: </b>

• Nhân viên quản lý có các hoạt động giống như của các nhân viên khác (1.4.1.2). Bên cạnh đó cịn có những quy trình riêng

• Qui trình quản lý doanh thu: Sau khi đăng nhập vào trang web, quản lý có thể theo dõi và xem doanh thu theo tháng để có thể nắm được tình hình kinh doanh và cải thiện thêm.

• Qui trình quản lý nhân viên: Sau khi đăng nhập vào trang web, quản lý có thể xem thơng tin các nhân viên khác. Lọc ra danh sách các nhân viên theo: mã nhân viên, tên nhân viên, địa chỉ, số điện thoại, mail. Có thể thực hiện thêm nhân viên mới và xóa nhân viên.

• Qui trình quản lý phản hồi: Sau khi đăng nhập vào trang web, quản lý có thể xem thơng tin phản hồi của các khách hàng về các sản phẩm để nhìn nhận vấn đề, cải thiện những điều chưa tốt ở cửa hàng của mình và tiếp tục phát triển những điểm mạnh.

<b>1.4.2. Yêu cầu chức năng </b>

Yêu cầu lưu trữ:

• Lưu trữ thơng tin giới thiệu của cửa hàng • Lưu trữ thơng tin khách hàng thành viên • Lưu trữ thơng tin nhân viên thuộc cửa hàng • Lưu trữ thơng tin sản phẩm

• Lưu trữ thơng tin đơn hàng, chi tiết đơn hàng • Lưu trữ lịch sử đơn hàng

• Lưu trữ thông tin phản hồi của khách hàng gửi đến • Lưu trữ thơng tin giỏ hàng

• Lưu trữ thơng tin tài khoản đăng nhập vào hệ thống

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Yêu cầu tính tốn:

• Tính tốn tổng doanh thu theo tháng cho nhân viên quản lý • Cập nhật tổng số lượng sản phẩm hiện tại của cửa hàng Yêu cầu tra cứu:

• Tra cứu thơng tin của khách hàng.

• Tra cứu thơng tin nhân viên thuộc cửa hàng. • Tra cứu thơng tin sản phẩm.

• Tra cứu thơng tin đơn hàng. u cầu xuất file:

• Xuất hóa đơn.

• Xuất danh sách các đơn hàng.

<b>1.4.3 Yêu cầu phi chức năng</b>

<b>• Hiệu suất: Xử lý dữ liệu nhanh, không mất quá nhiều thời gian đợi sẽ gây ra sự khó </b>

chịu cho khách hàng. Hệ thống phải phản hồi thông tin cho người dùng nhanh, đưa

<b>ra các thông báo rõ ràng. Các ngoại lệ xử lý chặt chẽ. </b>

• Tính bảo mật hệ thống: Hệ thống đảm bảo việc bảo mật tuyệt đối thông tin đăng nhập của các đối tượng người dùng hệ thống. Đồng thời bảo vệ được các thơng tin cá nhân của người dùng.

• Khả năng mở rộng: Hệ thống có thể mở rộng thêm các tính năng cần thiết trong tương lai.

• Khả năng bảo trì : bảo trì hệ thống ít nhất 1 lần trên năm

• Khả năng sử dụng: hệ thống dễ sử dụng, thân thiện với người dùng . Giao diện đơn giản, rõ ràng, màu sắc hài hịa, dễ thao tác, dễ vận hành.

• Khả năng tương thích: hệ thống tương thích với các hệ thống khác, có khả năng kết nối với server, máy in.

• Khả năng chịu lỗi: nếu có lỗi xảy ra có thể khắc phục nhanh chóng. • Khả năng phục hồi dữ liệu đã mất

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>CHƯƠNG 2: THIẾT KẾ MƠ HÌNH QUAN HỆ </b>

Nội dung: Mơ hình hóa dữ liệu quan hệ, mô tả các thành phần dữ liệu trong mơ hình cơ sở dữ liệu quan hệ và mơ tả các ràng buộc tồn vẹn của hệ thống.

<b>2.1 Mơ hình thực thể mối kết hợp </b>

<i><small>Hình 2.1: Mơ hình thực thể mối kết hợp </small></i>

<b>2.2. ER Diagram </b>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<i><small>Hình 2.2: ER Diagram </small></i>

<b>2.3. Mơ hình cơ sở dữ liệu quan hệ </b>

<b>EMPLOYEE(EMPLOYEE_ID, ADDRESS, BASE_SALARY, BIRTHDAY, </b>

MAIL, FULLNAME, PHONE, USERPOSITION, START_DATE, USERLOGIN_ID, MANAGER_ID)

<b>LOGIN_EMPLOYEE(USERLOGIN_ID, USERPASSWORD, USERNAME) CUSTOMER(CUSTOMER_ID, ADDRESS, BIRTHDAY, MAIL, FULLNAME, </b>

PHONE, TOTAL_PURCHASE_AMOUNT, USERLOGIN_ID)

<b>PRODUCT(PRODUCT_ID, DESCRIPTION, PRODUCT_NAME, </b>

NUTRITION_VALUE, ORIGIN, LINK_PHOTO, PRICE, QUANTITY, PRODUCT_TYPE, UNIT)

<b>CART(CART_ID, QUANTITY, CUSTOMER_ID, PRODUCT_ID) ORDERS(ORDER_ID, ADDRESS_DELIVERY, ORDER_DATE, </b>

ID_CHECKOUT, PAYMENT_METHOD, PHONE_RECEIVER, STATUS, TOTAL_MONEY, CUSTOMER_ID)

<b>ORDER_DETAIL(ORDER_ID, PRODUCT_ID, QUANTITY) </b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>CUSTOMER_FEEDBACK(FEEDBACK_ID, DATE_FEEDBACK, </b>

DESCRIPTION, CUSTOMER_ID, PRODUCT_ID)

<b>LOGIN_CUSTOMER(USERLOGIN_ID, USERNAME, USERPASSWORD) </b>

<i><b>Lưu ý: Khơng được sửa thuộc tính khóa chính </b></i>

<i>Giải thích các mối quan hệ và các thuộc tính của lược đồ: </i>

<b>2.3.1. Bảng EMPLOYEE </b>

<b>Bảng mô tả quan hệ EMPLOYEE </b>

1 EMPLOYEE_ID Number(19,0) Khóa chính Mỗi nhân viên có 1 ID duy nhất để phân biệt với nhân viên khác

3 BASE_SALARY Number(11,2) Không bỏ trống Lương cơ bản theo tháng

4 BIRTHDAY Date Không bỏ trống Ngày sinh 5 MAIL Varchar2(100) Không bỏ trống,

Duy nhất,

Có chứa kí tự @

Tên tài khoản Mail cũng chính là tên đăng nhập của nhân viên

8 USERPOSITION Varchar2(50) Manager / Employee Vị trí làm việc

9 START_DATE Date Không bỏ trống Ngày bắt đầu làm việc

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

10 USERLOGIN_ID Number(19,0) Khóa ngoại tham chiếu đến

LOGIN_EMPLOYEE(USERLOGIN_ID)

ID tài khoản đăng nhập của nhân viên

11 MANAGER_ID Number(19,0) ID người quản lí

<b>2.3.2. Bảng LOGIN_EMPLOYEE </b>

<b>Bảng mô tả quan hệ LOGIN_EMPLOYEE </b>

1 USERLOGIN_ID Number(19,0) Khóa chính Mỗi tài khoản đăng nhập của nhân viên có 1 ID duy nhất để phân biệt với tài khoản của nhân viên khác

<b>2.3.3. Bảng CUSTOMER </b>

<b>Bảng mô tả quan hệ CUSTOMER </b>

1 CUSTOMER_ID Number(19,0) Khóa chính Mỗi khách hàng có 1 ID duy nhất để phân biệt với nhân viên khác

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

2 ADDRESS Varchar2(400) Địa chỉ 3 BIRTHDAY Date Không bỏ trống Ngày sinh 4 MAIL Varchar2(100) Khơng bỏ trống,

Duy nhất,

Có chứa kí tự @

Tên tài khoản Mail cũng chính là tên đăng nhập của khách hàng

7 TOTAL_PURCHASE_AMOUNT

Number(11,2) Mặc định là 0 Tổng tiền mà khách hàng đã mua hàng tại cửa hàng

8 USERLOGIN_ID Number(19,0) Khóa ngoại tham chiếu đến

LOGIN_CUSTOMER(USERLOGIN_ID)

ID tài khoản đăng nhập của khách hàng

<b>2.3.4. Bảng PRODUCT </b>

<b>Bảng mô tả quan hệ PRODUCT </b>

1 PRODUCT_ID Number(19,0) Khóa chính Mỗi sản phẩm có 1 ID để phân biệt với sản phẩm khác

2 DESCRIPTION Varchar2(2000) Mô tả sản phẩm

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

4 NUTRITION_VALUE

Varchar2(2000) Mô tả giá trị dinh dưỡng của sản phẩm

6 LINK_PHOTO Varchar2(500) Link ảnh để hiển thị 7 PRICE Number(11,2) Không bỏ trống Giá tiền

8 QUANTITY Number(10,0) Không bỏ trống Số lượng sản phẩm

9 PRODUCT_TYPE Varchar2(50) Loại sản phẩm 10 UNIT Varchar2(50) Khơng bỏ trống Đơn vị tính

<b>2.3.5. Bảng CART </b>

<b>Bảng mô tả quan hệ CART </b>

1 CART_ID Number(19,0) Khóa chính Khi mua hàng, mỗi sản phẩm và số lượng sản phẩm đó mà khách hàng mua sẽ có 1 ID để phân biệt với các sản phẩm khác và số lượng sản phẩm khác đó cùng được mua bởi khách hàng

khách hàng mua

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

3 CUSTOMER_ID Number(19,0) Khóa ngoại tham chiếu đến

CUSTOMER(CUSTOMER_ID)

ID khách hàng

4 PRODUCT_ID Number(19,0) Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID sản phẩm

<b>2.3.6. Bảng ORDERS </b>

<b>Bảng mô tả quan hệ ORDERS </b>

1 ORDER_ID Number(19,0) Khóa chính Mỗi hóa đơn có 1 ID để phân biệt với các hóa đơn khác

2 ADDRESS_DELIVERY

Varchar2(100) Địa chỉ giao đơn hàng

3 ORDER_DATE Date Không bỏ trống Ngày hóa đơn

4 ID_CHECKOUT Number(19,0) ID thanh tốn bằng ví điện tử (Là Null nếu thanh toán COD) 5 PAYMENT_METH

OD

Varchar2(255) Phương thức thanh toán

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

6 PHONE_RECEIVER

Varchar2(255) Số điện thoại người nhận đơn hàng 7 STATUS Varchar2(50) Ordered/ Preparing/

ID khách hàng

<b>2.3.7. Bảng ORDER_DETAIL </b>

<b>Bảng mô tả quan hệ ORDER_DETAIL </b>

1 ORDER_ID Number(19,0) Khóa chính, Khóa ngoại tham chiếu đến

ORDERS(ORDER_ID)

ID của hóa đơn

2 PRODUCT_ID Number(19,0) Khóa chính, Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID của sản phẩm

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

3 QUANTITY Number(10,0) Không bỏ trống Số lượng sản phẩm mua

<b>2.3.8. Bảng CUSTOMER_FEEDBACK </b>

<b>Bảng mô tả quan hệ CUSTOMER_FEEDBACK </b>

1 FEEDBACK_ID Number(19,0) Khóa chính Mỗi phản hồi của khách hàng có 1 ID để phân biệt với các phản hồi khác

2 DATE_FEEDBACK

3 DESCRIPTION Varchar2(255 byte)

Mô tả đánh giá

4 CUSTOMER_ID Number(19,0) Khóa ngoại tham chiếu đến

CUSTOMER(CUSTOMER_ID)

ID khách hàng

5 PRODUCT_ID Number(19,0) Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID sản phẩm được đành giá

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>2.3.9. Bảng LOGIN_CUSTOMER </b>

<b>Bảng mô tả quan hệ LOGIN_CUSTOMER </b>

1 USERLOGIN_ID Number(19,0) Khóa chính Mỗi tài khoản đăng nhập của khách hàng có 1 ID để phân biệt với tài khoản của khách hàng khác

<b>2.4. Mô tả các qui định của hệ thống 2.4.1. Các ràng buộc toàn vẹn </b>

<b>Ràng buộc 1: MAIL của nhân viên chính là tên đăng nhập (USERNAME) của </b>

nhân viên đó (MAIL do cửa hàng cung cấp và nhân viên không được sửa).

<b>Ràng buộc 2: MAIL của khách hàng cũng chính là tên đăng nhập (USERNAME) </b>

<b>của khách hàng đó. </b>

<b>Ràng buộc 3: Thuộc tính USERPOSITION trong bảng EMPLOYEE chỉ có thể có </b>

<b>giá trị ‘EMPLOYEE’ hoặc ‘MANAGER’. </b>

<b>Ràng buộc 4: Thuộc tính STATUS trong bảng ORDERS chỉ có thể có giá trị: Đã </b>

đặt hàng (ORDERED) hoặc đang chuẩn bị (PREPARING) hoặc đang vận chuyển

<b>(SHIPPING) hoặc giao hàng thành công (COMPLETELY). </b>

<b>Ràng buộc 5: Thuộc tính BIRTHDAY trong bảng CUSTOMER phải là một ngày </b>

ở quá khứ hoặc hiện tại.

<b>Ràng buộc 6: Nhân viên làm việc tại cửa hàng ít nhất 18 tuổi. Ràng buộc 7: Quản lí cũng là một nhân viên. </b>

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<b>Ràng buộc 8: Trị giá (TOTAL_MONEY) của một đơn hàng bằng tổng </b>

ORDER_DETAIL(QUANTITY) * PRODUCT(PRICE) các chi tiết đơn hàng của đơn hàng đó.

<b>Ràng buộc 9: Doanh số (TOTAL_PURCHASE_AMOUNT) của một khách </b>

hàng bằng tổng trị giá đơn hàng(TOTAL_MONEY) của khách hàng đó.

<b>2.4.2. Biểu diễn các ràng buộc tồn vẹn </b>

<b>Các đặc trưng của ràng buộc tồn vẹn: </b>

• Bối cảnh: Những quan hệ có khả năng làm cho ràng buộc tồn vẹn bị vi phạm. • Nội dung: Phát biểu bằng ngơn ngữ hình thức.

• Tầm ảnh hưởng: Bảng hai chiều, xác định các thao tác ảnh hưởng và thao tác không ảnh hưởng lên các quan hệ nằm trong bối cảnh.

<b>➢ Ký hiệu + : Có thể gây ra vi phạm ràng buộc toàn vẹn. ➢ Ký hiệu - : Không thể gây ra vi phạm ràng buộc tồn vẹn. </b>

<b>➢ Ký hiệu +(X) : Có thể gây ra vi phạm ràng buộc toàn vẹn khi thao tác trên </b>

thuộc tính X.

<b>➢ Ký hiệu -(*) : Khơng thể gây ra vi phạm ràng buộc tồn vẹn do thao tác không thực hiện được. </b>

<b>2.4.2.1 Ràng buộc 1: MAIL của nhân viên chính là tên đăng nhập (USERNAME) của </b>

nhân viên đó (MAIL do cửa hàng cung cấp và nhân viên không được sửa) • Bối cảnh: EMPLOYEE, LOGIN_EMPLOYEE

• Nội dung: <small></small> emp ∈ EMPLOYEE, <small></small> log ∈ LOGIN_EMPLOYEE: emp.USERLOGIN_ID = log. USERLOGIN_ID

emp.MAIL = log.USERNAME • Bảng tầm ảnh hưởng:

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

RB1 Thêm Xóa Sửa

<b>2.4.2.2 Ràng buộc 2: MAIL của khách hàng cũng chính là tên đăng nhập (USERNAME) </b>

<b>của khách hàng đó. </b>

• Bối cảnh: CUSTOMER, LOGIN_CUSTOMER

• Nội dung:  cus ∈ CUSTOMER,  log ∈ LOGIN_CUSTOMER:

cus.USERLOGIN_ID = log. USERLOGIN_ID

cus.MAIL = log.USERNAME • Bảng tầm ảnh hưởng:

<b>2.4.2.3 Ràng buộc 3: Thuộc tính USERPOSITION trong bảng EMPLOYEE chỉ có thể </b>

<b>có giá trị ‘EMPLOYEE’ hoặc ‘MANAGER’ </b>

• Bối cảnh: EMPLOYEE

• Nội dung:  emp ∈ EMPLOYEE:

emp.USERPOSITION = ‘EMPLOYEE

emp.USERPOSITION = ‘MANAGER’ • Bảng tầm ảnh hưởng:

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>2.4.2.4 Ràng buộc 4: Thuộc tính STATUS trong bảng ORDERS chỉ có thể có giá trị: Đã </b>

đặt hàng (ORDERED) hoặc đang chuẩn bị (PREPARING) hoặc đang vận chuyển

<b>(SHIPPING) hoặc giao hàng thành cơng (COMPLETELY) </b>

• Bối cảnh: ORDERS

• Nội dung: <small></small> ord ∈ ORDERS:

ord.STATUS = ‘ORDERED’

ord.STATUS = ‘PREPARING’

ord.STATUS = ‘SHIPPING’

ord.STATUS = ‘COMPLETELY’

• Bảng tầm ảnh hưởng:

<b>2.4.2.5 Ràng buộc 5: Thuộc tính BIRTHDAY trong bảng CUSTOMER phải là một ngày </b>

<b>ở quá khứ hoặc hiện tại </b>

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>2.4.2.7 Ràng buộc 7: Quản lí cũng là một nhân viên </b>

• Bối cảnh: EMPLOYEE

Nội dung: <small></small> emp1 ∈ EMPLOYEE, emp1.MANAGER_ID ≠ NULL

<small></small>!emp2 ∈ EMPLOYEE: emp1.MANAGER_ID = emp2.MANAGER_ID

• Bảng tầm ảnh hưởng:

<b>2.4.2.8 Ràng buộc 8: Trị giá (TOTAL_MONEY) của một đơn hàng bằng tổng </b>

ORDER_DETAIL(QUANTITY) * PRODUCT(PRICE) các chi tiết đơn hàng của đơn hàng đó

• Bối cảnh: ORDERS, ORDER_DETAIL, PRODUCT

• Nội dung:

ord ∈ ORDERS (ord.TOTAL_MONEY =

(ord_detail ∈ ORDER_DETAIL: (ord_detail. ORDER_ID = ord.ORDER_ID) , pro ∈ PRODUCT(pro.PRODUCT_ID = ord_detail.PRODUCT_ID):

ord_detail.QUANTITY * pro.PRICE ) • Bảng tầm ảnh hưởng:

<b>2.4.2.9 Ràng buộc 9: Doanh số (TOTAL_PURCHASE_AMOUNT) của một khách hàng </b>

bằng tổng trị giá đơn hàng(TOTAL_MONEY) của khách hàng đó • Bối cảnh: CUSTOMER, ORDERS

• Nội dung:

cus ∈ CUSTOMER :

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<small>(ord ∈ ORDERS  ord.CUSTOMER_ID = cus.CUSTOMER_ID )</small>ord.TOTAL_MONEY

• Bảng tầm ảnh hưởng:

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

<b>CHƯƠNG 3: XÂY DỰNG VÀ QUẢN LÝ CÁC GIAO TÁC </b>

Nội dung: Thiết kế và xây dựng các giao tác cho tất cả stored procedure, function và trigger được sử dụng trong hệ thống.

<b>3.1. Trigger </b>

Trigger là một đơn vị chương trình lưu trữ trong database và tự đông thực thi để đáp ứng một sự kiện nào đó. Sự kiện này được kết hợp với một table, view, schema hoặc database và là một trong những sự kiện sau:

• Một câu lệnh DML: DELETING, INSERT, UPDATE • Một câu lệnh DDL: CREATTE, ALTER, DROP

• Một tác vụ lên database: SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Trigger và ràng buộc (constraint) đều ràng buộc dữ liệu đầu vào nhưng trigger có thể tuân theo những quy tắc phức tạp mà constraint không thể

Cú pháp tạo trigger trong Oracle:

CREATE OR REPLACE TRIGGER ten_trigger {BEFORE | AFTER}

{DELETE, INSERT, UPDATE [OF ten_cot …..]} ON ten_bang

[FOR EACH ROW] DECLARE ten_bien; … BEGIN

--Thuc thi cac cau lenh SQL; END;

Giải thích:

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

• {BEFORE | AFTER}: Thời gian kích hoạt trigger, xử lý hành động

trước(BEFORE) hay sau(AFTER) khi thực hiện thay đổi trên bảng dữ liệu • {DELETE, INSERT, UPDATE [OF ten_cot …..]}: Sự kiện kích hoạt trigger • ON ten_bang: Trình kích hoạt phải được liên kết với một bảng cụ thể, sử dụng từ

khóa ON để xác định

• [FOR EACH ROW]: trigger sẽ thực thi trên từng dịng Danh sách các trigger có trong hệ thống:

<b>Bảng danh sách các trigger </b>

1 BIRTHDAY_CUS_VALID Kiểm tra ngày sinh (BIRTHDAY) của khách hàng phải bé hơn hoặc bằng ngày hiện tại.

2 CHECK_AGE_EMPLOYEE Kiểm tra độ tuổi của nhân viên làm việc tại cửa hàng phải lớn hơn hoặc bằng 18 tuổi

3 MANAGERID_IS_EMPLOYEEID Kiểm tra người quản lí cũng là một nhân viên

4 LOGIN_EMP_AUTO Sau khi thêm một nhân viên thì thơng tin login của nhân viên đó sẽ được tạo tự động

5 UPDATE_QUANTITY_PRODUCT Khi thêm hoặc xóa một chi tiết hóa đơn thì cập nhật lại số lượng hiện có của sản phẩm

<b>3.1.1 Trigger trên bảng CUSTOMER 3.1.1.1 BIRTHDAY_CUS_VALID </b>

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Thao tác: INSERT OR UPDATE OF BIRTHDAY

Nội dung: Kiểm tra ngày sinh (BIRTHDAY) của khách hàng phải bé hơn hoặc bằng ngày hiện tại.

<i><small>Hình 3.1.1: trigger BIRTHDAY_CUS_VALID </small></i>

Các bước thực hiện :

<b>1. Lấy giá trị thuộc tính BIRTHDAY </b>

<b>2. Nếu BIRTHDAY bé hơn hoặc bằng ngày hiện tại thì thơng báo thành cơng và </b>

kết thúc. Ngược lại thì qua bước 3.

<b>3. Thông báo lỗi và kết thúc. 3.1.2 Trigger trên bảng EMPLOYEE 3.1.2.1 CHECK_AGE_EMPLOYEE </b>

Thao tác: INSERT OR UPDATE OF BIRTHDAY

Nội dung: Kiểm tra độ tuổi của nhân viên làm việc tại cửa hàng phải lớn hơn hoặc bằng 18 tuổi.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<i><small>Hình 3.1.2: trigger CHECK_AGE_EMPLOYEE </small></i>

Các bước thực hiện:

<b>1. Tách giá trị năm trong thuộc tính BIRTHDAY </b>

<b>2. Thực hiện kiểm tra có đủ 18 tuổi khơng. Nếu có thì thơng báo thành cơng và kết </b>

thúc. Ngược lại thì qua bước 3

<b>3. Thông báo không thành công và kết thúc 3.1.2.2. MANAGERID_IS_EMPLOYEEID </b>

Thao tác: INSERT

Nội dung: Kiểm tra người quản lí cũng là một nhân viên

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

<i><small>Hình 3.1.3: trigger MANAGER_IS_EMPLOYEEID </small></i>

Các bước thực hiện

<b>1. Khai báo biến con trỏ v_EMPLOYEE_ID_LIST để tham chiếu đến các ID của </b>

nhân viên (EMPLOYEE_ID), v_EMPLOYEE_ID để lưu giá trị EMPLOYEE_ID của nhân viên, v_check để kiểm tra

<b>2. Mỗi khi vòng lặp duyệt qua từng dòng mà v_EMPLOYEE_ID_LIST tham </b>

chiếu đến thì gán EMPLOYEE_ID cho biến v_EMPLOYEE_ID và so sánh MANAGER_ID có bằng v_EMPLOYEE_ID

<b>2.1. Nếu bằng nhau thì gán v_check = 1 và thốt khỏi vịng lặp. Ngược lại </b>

qua bước 2.2

<b>2.2. Nếu khơng bằng nhau thì tiếp tục lặp 3. Kiểm tra v_check </b>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<b>3.1. Nếu v_check khác 1 thì thơng báo lỗi và kết thúc chương trình. Ngược </b>

lại thì qua bước 3.2

<b>3.2. Thơng báo hợp lệ và kết thúc chương trình 3.1.2.3. LOGIN_EMP_AUTO </b>

<b>1. Khai báo biến v_USERLOGIN_ID để lưu trữ giá thuộc tính USERLOGIN_ID </b>

của nhân viên

<b>2. Gán giá trị tiếp theo của chuỗi số LOGIN_EMPLOYEE_ID_AUTO cho biến </b>

v_USERLOGIN_ID

<b>3. Thêm một bản ghi vào bảng dữ liệu LOGIN_EMPLOYEE các giá trị </b>

v_USERLOGIN_ID, mật khẩu(USERPASSWORD) mặc định, tên đăng nhập (USERNAME) chính là MAIL của nhân viên đó

<b>4. Gán v_USERLOGIN_ID cho thuộc tính EMPLOYEE_ID trong bảng </b>

EMPLOYEE

<b>5. Xác nhận </b>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

<b>3.1.3 Trigger trên bảng ORDER_DETAIL </b>

<b>Tên trigger: UPDATE_QUANTITY_PRODUCT </b>

Thao tác: INSERT OR DELETE

Nội dung: Khi thêm hoặc xóa một chi tiết đơn hàng thì cập nhật lại số lượng hiện có của sản phẩm

<i><small>Hình 3.1.5: trigger UPDATE_QUANTITY_PRODUCT </small></i>

Các bước thực hiện:

<b>1. Khai báo biến v_current_quantity để lưu số lượng hiện có của sản phẩm 2. Kiểm tra thao tác là INSERT hay DELETE </b>

<b>2.1 Nếu thao tác là INSERT thì thực hiện trừ số lượng sản phẩm hiện có </b>

trong bảng PRODUCT với PRODUCT_ID tương ứng PRODUCT_ID trong bảng ORDER_DETAIL. Sau đó gán số lượng sản phẩm hiện có cho biến

v_current_quantity. Kiểm tra v_current_quantity

<b>2.1.1 Nếu bé hơn 0 thì thơng báo lỗi sản phẩm không đủ. Ngược lại </b>

qua bước 2.1.2

<b>2.1.2 Thông báo thành công </b>

<b>2.2 Nếu thao tác là DELETE thì thực hiện cộng thêm vào số lượng sản </b>

phẩm hiện có trong bảng PRODUCT với PRODUCT_ID tương ứng PRODUCT_ID trong bảng ORDER_DETAIL.

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<b>3. Xác nhận </b>

<b>3.2 Các chương trình con được sử dụng trong hệ thống </b>

• Một chương trình con chính là một khối lệnh PL/SQL được đặt tên và được gọi với một tập các đối số. Nó được lưu trong cơ sở dữ liệu như các đối tượng cơ sở dữ liệu.

• Một chương trình con có thể là một thủ tục (Procedure) hoặc là một hàm (Function)

• Các loại đối số trong chương trình con:

• Đối số IN: cho phép truyền giá trị tới chương trình con, nó hoạt động như một hằng số và không được gán giá trị trong một chương trình con. Nó có thể được khởi tạo một giá trị mặc định.

• Đối số OUT: trả về giá trị tới mơi trường gọi nó. Đối số này hoạt động như là một biến trong chương trình con. Có thể thay đổi giá trị của nó và sử dụng giá trị này sau khi gán.

• Đối số IN OUT: truyền giá trị khởi tạo tới chương trình con và trả về một giá trị mới cho mơi trường gọi nó. Đối số này phải là một biến, không được là hằng số hay một biểu thức

• Nếu khơng chỉ rõ thì mặc định trong Oracle là đối số IN.

<b>3.2.1 Stored Procedure </b>

• Thường được sử dụng chủ yếu để thực hiện quy trình nhất định.

• Gọi đến các Procedure có thể được thực hiện bằng cách đề cập đến tên của chúng • Nó chứa một phần khai báo (tùy chọn), phần thực thi, phần xử lý ngoại lệ (tùy

chọn)

• Các giá trị có thể được truyền vào hoặc lấy từ các thủ tục thơng qua các tham số. • Khơng thể được gọi trực tiếp từ câu lệnh SELECT, chúng có thể được gọi từ khối

khác.

• Khơng bắt buộc trả về giá trị.

• Thủ tục có thể có RETURN để trả lại quyền kiểm sốt cho khối gọi nó, nhưng nó khơng thể trả về bất kỳ giá trị thông qua RETURN

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

• Cú pháp Procedure trong Oracle:

CREATE OR REPLACE PROCEDURE ten_thu_tuc (

--Tham so truyen vao thu tuc

thamso1 IN/OUT/IN OUT <kieudulieu>, …

)

AS / IS

[khai_bao_bien ] BEGIN

--Thuc thi cac cau lenh PL/SQL [EXCEPTION]

--Xu ly ngoai le END;

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

Các bước thực hiện:

<b>1. Dựa vào tham số IN i_MAIL để kiểm tra giá trị này đã tồn tại chưa. Nếu chưa </b>

tồn tại thì qua bước 2. Ngược lại qua bước 3

<b>2. Tham số OUT v_MAIL có giá trị NULL được trả về cho chương trình gọi nó. 3. Tham số OUT v_MAIL có giá trị khác NULL được trả về cho chương trình gọi </b>

nó.

<b>3.2.1.2. Thủ tục CUSTOMER_REGISTER </b>

Nội dung: Khách hàng đăng kí tài khoản

Tham số đầu vào: i_FULLNAME, i_ADDRESS, i_PHONE, i_BIRTHDAY, i_MAIL, i_PASSWORD

<i><small>Hình 3.2.2: Thủ tục CUSTOMER_REGISTER </small></i>

Các bước thực hiện:

<b>1. Khai báo biến v_USERLOGIN_ID để thêm ID đăng nhập vào bảng </b>

LOGIN_CUSTOMER

<b>2. Thêm thông tin đăng nhập của khách hàng vào bảng LOGIN_CUSTOMER </b>

thông qua câu lệnh INSERT

<b>3. Thêm thông tin khách hàng vào bảng CUSTOMER thông qua câu lệnh INSERT 4. Xác nhận </b>

<b>3.2.1.3. Thủ tục SHOW_PRODUCT </b>

Nội dung: Hiển thị trên giao diện các sản phẩm để khách hàng mua hàng Tham số đầu vào: i_product_type

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

Tham số đầu ra: v_PRODUCT

<i><small>Hình 3.2.3: Thủ tục SHOW_PRODUCT </small></i>

Các bước thực hiện:

<b>1. Tham số OUT v_PRODUCT được khai báo là kiểu con trỏ để truy xuất các sản </b>

phẩm có thuộc tính PRODUCT_TYPE có giá trị là i_product_type. Nếu chưa tồn tại thì qua bước 2. Ngược lại thì qua bước 3.

<b>2. Tham số OUT v_PRODUCT với giá trị NULL trả về cho chương trình gọi nó 3. Tham số OUT v_PRODUCT trả về cho chương trình gọi nó danh sách các sản </b>

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<i><small>Hình 3.2.4: Thủ tục UPDATE_CART </small></i>

Các bước thực hiện:

<b>1. Kiểm tra xem giỏ hàng có ID là i_CART_ID có tồn tại khơng. Nếu có thì qua </b>

bước 2. Ngược lại qua bước 6

<b>2. Lấy số lượng hiện có trong kho của sản phẩm đó trong giỏ hàng 3. Thực hiện việc tăng/giảm số lượng sản phẩm đang có của giỏ hàng đó </b>

lên/xuống 1 đơn vị (số lượng muốn mua) và gán vào một biến.

<b>4. So sánh số lượng sản phẩm ở bước 3 và bước 2. Nếu số lượng muốn mua lớn </b>

hơn số lượng hiện có thì thơng báo lỗi và kết thúc. Ngược lại qua bước 5

<b>5. Thực hiện cập nhật số lượng sản phẩm đang có của giỏ hàng đó và xác nhận 6. Thơng báo không tồn tại và kết thúc. </b>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<i><small>Hình 3.2.5: Thủ tục UPDATE_VALUE_QUANTITY_OF_CART </small></i>

Các bước thực hiện:

<b>1. Kiểm tra xem giỏ hàng có ID là i_CART_ID có tồn tại khơng. Nếu có thì qua </b>

bước 2. Ngược lại qua bước 5

<b>2. Lấy số lượng hiện có trong kho của sản phẩm đó trong giỏ hàng </b>

<b>3. So sánh số lượng hiện có trong kho và số lượng muốn mua (tham số IN </b>

i_QUANTITY). Nếu số lượng muốn mua lớn hơn số lượng hiện có thì thơng báo lỗi và kết thúc. Ngược lại qua bước 4

<b>4. Thực hiện cập nhật số lượng sản phẩm đang có của giỏ hàng đó và xác nhận 5. Thông báo không tồn tại và kết thúc. </b>

</div>

×