Xây dựng một hệ thống quản lý thuốc gồm các chức năng :- Thêm , sửa , xóa thông tin của một loại thuốc theo tên nhập vào- Lưu thông tin về đơn thuốc đã bán một đơn thuốc gồm nhiều loạit
Trang 1TR ƯỜ NG Đ I H C BÁCH KHOA HÀ N I Ạ Ọ Ộ
VI N S PH M KỸỸ THU T Ệ Ư Ạ Ậ
-
Đềề tài: Xây d ng h thốống qu n lý nhà thuốốc ự ệ ả
Giáo viền h ướ ng dâẫn: Đốẫ Th Ng c Di p ị ọ ệ
Sinh viền th c hi n: Nguyềẫn Th Thu Trang ự ệ ị
L ươ ng Huy Hoàng
Ph m Minh Dũng ạ
Nhóm: 12
Trang 2L p: Cống ngh giáo d c 02 ớ ệ ụ BẢNG PHÂN CÔNG VIỆC
N
hoàn thàn h
1 Nguyễn
Thị Thu
Trang
202123 45
Giới thiệu bài toán Thiết kế CSDL - Thiết kế các quan hệ - Viết câu lệnh MySQL truy vấn dữ liệu theo đề bài - Trình bày lệnh MySQL cùng ví dụ chạy các lệnh đó ra đúng kết quả - Phân tích bài toán, mô tả hoạt động, đánh giá hạn chế về phần CSDL.
100
%
Huy
Hoàng
202123 03
Phân tích và lên ý tưởng về các thành phần có trong web
- Phân tích các hàm, đối tượng cần có.
- Viết hàm theo yêu cầu đề bài JS
- Trình bày code
- Phân tích bài toán, mô tả hoạt động, đánh giá hạn chế về phần JS
100
%
Minh
Dũng
202229 1
Phân tích object có trong web
- Tạo trang HTML, CSS
- Trình bày trang HTML và CSS hoàn chỉnh
- Viết hàm theo yêu cầu đề bài JS
- Phân tích bài toán, mô tả hoạt động, đánh giá hạn chế về phần giao diện HTML CSS.
100
%
Trang 3I Giới thiệu bài toán
bán thuốc qua giấy tờ , viết tay Việc này có thể xảy ra nhiều ảnh hưởng không tốt như : quên giá thành sản phẩm , doanh thu thất thoát , khó quản lý số lượng nhập và bán ,… Vậy để tạo hiệu quả tốt cần phải làm thế nào ? Đây là vấn đề của nhóm em, dưới đây nhóm
em xin trình bày đề tài lập trình quản lý hiệu thuốc
Đề tài :Một hiệu thuốc bao gồm các dạng thuốc viên , thuốc nước , thuốc bột Khi có người mua thuốc hiệu thuốc sẽ xuất hóa đơn mua thuốc và lưu lại hệ thống thông tin đơn thuốc Xây dựng một hệ thống quản lý thuốc gồm các chức năng :
- Thêm , sửa , xóa thông tin của một loại thuốc theo tên nhập vào
- Lưu thông tin về đơn thuốc đã bán ( một đơn thuốc gồm nhiều loại thuốc khác nhau )
- Tìm kiếm và hiển thị thông tin về một đơn thuốc theo mã đơn thuốc Tùy theo loại thuốc mà thông số kích thước thuốc là khác nhau Với thuốc viên tính theo đơn vị viên , thuốc nước tính theo đơn vị ml , thuốc bột tính theo đơn vị mg
- Thống kê số lượng thuốc đã bán và doanh thu hiệu thuốc trong một khoảng thời gian nhập vào ( từ ngày/tháng/năm … đến ngày/tháng/năm )
II Phân tích bài toán , mô tả hoạt
động, phân tích dữ liệu.
1.Xác định các tập/kiểu thực thể và các thuộc tính tương ứng
1.Thuốc
Id
Name
Type
Trang 4Price
Stock
Until
2.Hóa đơn
Id
Datetime
3.Doanh thu
Quantity
Id
Total
2.Xác định các liên kết và kiểu liên kết
- Một hóa đơn gồm nhiều loại thuốc
-Doanh thu gồm nhiều hóa đơn
- Doanh thu gồm nhiều loại thuốc
- Mối liên kết giữa tập thực thể thuốc và tập thực thể hóa đơn là mối liên kết N-M bởi vì thông tin của nhiều thuốc có trong một hóa đơn nhưng nhiều hóa đơn có chứa thông tin của nhiều thuốc
- Mối liên kết giữa tập thực thể doanh thu và tập thực thể hóa đơn là mối liên kết 1-N bởi vì một doanh thu bao gồm nhiều hóa đơn nhưng một hóa đơn chỉ thuộc một doanh thu
- Mối liên kết giữa tập thực thể doanh thu và tập thực thể thuốc là mối liên kết 1-N bởi vì một doanh thu bao gồm nhiều loại thuốc nhưng một loại thuốc chỉ thuộc một doanh thu
Trang 5III Thiết kế các quan hệ trong Cơ sở
dữ liệu
1 Sơ đồ thực thể liên kết (ERD).
1
2 Lược đồ quan hệ ( RL).
Trang 6Một lược đồ quan hệ là một biểu diễn dạng bảng của một cơ sở dữ liệu và các mối quan hệ của nó Đối với cơ
sở dữ liệu đã cho, lược đồ quan hệ có thể được biểu diễn như sau:
1.Medicine :
Id (Primary Key)
Name
Type
Price
Stock
Unit
2.Prescription
Id (Primary Key, Foreign Key to Prescription_medicine (Prescription_id) )
Datetime
3.Prescription_medicine
Trang 7Prescription_id (Primary Key)
Medicine_id (Primary Key, Foreign Key to Medicine(Id)) Quantity
IV Thiết kế các lớp/hàm trong
Javascript
Cơ chế hoạt động tổng quát của các 昀椀le Javascript: lấy dữ liệu người dùng nhập vào (textbox, checkbox, button,…) xử lý input đưa ra truy vấn và lấy dữ liệu từ database (mysql) xử lý dữ liệu nhận được và trả về kết quả cho người dùng
1.Tạo sever và liên kết cơ sở dữ liệu (昀椀le:
server.js)
1.1 Tạo sever cho Node.js bằng Express và Cors:
- Express.js, hay đơn giản là Express, là một khung ứng dụng web back end để xây dựng các API RESTful với Node.js, được phát hành dưới dạng phần mềm mã nguồn mở và miễn phí theo Giấy phép MIT Nó được thiết kế để xây dựng các ứng dụng web và API Nó đã được gọi là khung máy chủ tiêu chuẩn trên thực tế cho Node.js - CORS là 1 node.js packege cung cấp phần mềm trung gian (middleware) kết nối/Express
có thể được sử dụng để kích hoạt CORS với các tùy chọn khác nhau
Trang 8- Bất kì package NPM nào, bạn cần phải npm install module, sau đó sử dụng lệnh require để load module
- Sử dụng 3 packages trong bài: Express; cors và mysql2
- Liên kết cơ sở dữ liệu bằng lệnh: mysql.createConnection({ //Thông tin: host, user, database, password })
- Hai dòng lệnh 8 và 9 để cho phép cors với toàn bộ url được tạo
1.2 Tạo các đường link trả về dữ liệu truy vấn từ Database:
Trang 9Đây là một đoạn mã JavaScript dùng để thực hiện truy vấn SQL Hàm connection.query được gọi để thực hiện truy vấn, với query là chuỗi truy vấn SQL và một hàm callback để xử lý kết quả trả về Trong hàm callback, nếu có lỗi (err khác null), mã trả về một đối tượng JSON với trạng thái false, một mảng rỗng và thông báo "Cập nhật thất bại" Nếu không có lỗi, mã trả về một đối tượng JSON với trạng thái true, một mảng rỗng và thông báo "Cập nhật thành công"
Trong mã trên, chúng ta đang định nghĩa một endpoint GET cho URL /medicines Khi có một yêu cầu GET đến URL này, chương trình sẽ thực hiện một truy vấn
Trang 10SELECT trên bảng medicine trong cơ sở dữ liệu và trả
về kết quả dưới dạng JSON
Cụ thể, chúng ta sử dụng hàm connection.query để thực hiện một truy vấn SELECT trên bảng medicine Khi truy vấn hoàn tất, nếu không có lỗi xảy ra, chúng ta sẽ trả về kết quả dưới dạng JSON bằng cách gọi res.send với tham số là một đối tượng JSON định nghĩa trạng thái thành công, dữ liệu trả về (kết quả của truy vấn) và một thông báo rỗng Nếu có lỗi xảy ra, hàm connection.query sẽ throw một ngoại lệ và chương trình
sẽ dừng lại
- Trường hợp tạo Endpoint mà câu truy vấn cần có input là dữ liệu người dùng nhập vào
- Sau đó, chúng ta sử dụng giá trị của id để xây dựng một truy vấn DELETE tới bảng medicine để xóa hàng có
Trang 11id tương ứng Chúng ta sử dụng hàm connection.query
để thực hiện truy vấn DELETE Khi truy vấn hoàn tất, nếu không có lỗi xảy ra, chúng ta sẽ trả về một thông báo thành công dưới dạng JSON bằng cách gọi res.send với tham số là một đối tượng JSON định nghĩa trạng thái thành công và một thông báo "Xóa thành công"
2.Xử lý dữ liệu giữa client và Server
2.1 Lấy dữ liệu từ url tạo ở server:
- Như bên trên ta đã có cách để tạo ra một server và đường link trả về
dữ liệu truy vấn
2.2.Hàm thêm , sửa , xóa thông tin của một loại thuốc theo tên nhập vào
Trang 12- Hàm xóa thông tin của một loại thuốc khỏi cơ sở dữ liệu Khi nút “xóa” được nhấn , hàm được kích hoạt
và các trường được trống
Trang 13- Hàm thêm thông tin của một loại thuốc
hoạt để thực hiện một yêu cầu POST đến điểm cuối API tại DIR_API + “createMedicine” với giá trị đầu vào và giá trị nhập vào của JSON
được tải lại
Trang 15- Hàm cập nhật thông tin thuốc sau khi sửa Khi
nút “cập nhật” được nhấn, chức năng sẽ được kích hoạt và lấy giá trị từ các trường trong mẫu.Nếu Id trống , hệ thống sẽ hiện thị thông báo : “Vui lòng
chọn thuốc cần cập nhật”.
2.3.Tìm kiếm và hiển thị thông tin một đơn thuốc theo mã thuốc
Hàm loadBills sẽ gửi một yêu cầu GET đến API tại địa chỉ http://127.0.0.1:3000/bills để lấy danh sách các hóa đơn Kết quả trả về sẽ được thêm vào select box có id
là bills
Sự kiện click của nút có id là btn-search-bill sẽ gửi một yêu cầu GET đến API tại địa chỉ http://127.0.0.1:3000/bills/bill_id, với bill_id là giá trị đã chọn trong select box bills Kết quả trả về sẽ được hiển thị trong một danh sách các mục có class là medicines-order Tổng tiền sẽ được tính dựa trên số lượng và giá
Trang 16của từng mặt hàng và hiển thị trong một phần tử có class là total-money
Trang 172.4.Thống kê số lượng thuốc đã bán và doanh thu hiệu thuốc trong một khoảng thời gian nhập vào.
Trang 18- Đoạn code trên định nghĩa một chức năng
loadStatistical() để tải dữ liệu thống kê từ API Khi trang web được tải xong, nó sẽ gọi hàm init() để thực hiện việc tải dữ liệu
điểm cuối API tại "http://127.0.0.1:3000/statistics" Nếu yêu cầu thành công, dữ liệu trả về sẽ được xử lý bằng hàm success() Dữ liệu được xử lý bằng cách parse dữ liệu từ một chuỗi JSON sang đối tượng JavaScript
-Sau đó, nó sẽ truy xuất các phần tử HTML với id
"medicines" và "monthly" để hiển thị dữ liệu thống
kê về số lượng thuốc và doanh thu hàng tháng Nếu không tìm thấy dữ liệu, một thông báo sẽ được hiển thị
-Trong trường hợp có lỗi xảy ra khi gửi yêu cầu, hàm error() sẽ được gọi để in ra dữ liệu lỗi vào console
V Triển khai hệ thống
Trang 191.Xác định các trường dữ liệu cần thiết cho mỗi loại thuốc ( Tên ,
Mã , Đơn vị tính ,Loại, Giá , Số lượng )
2.Tạo các lớp để lưu trữ thông tin thuốc , hóa đơn và doanh thu
3 Xây dựng các chức năng thêm, sửa, xóa, tìm kiếm, hiển thị thông tin cho cán bộ
+ Thêm một loại thuốc : Cho phép quản trị viên nhập thông tin về tên, mã , loại ,đơn vị tính , giá, số lượng lưu thông tin vào hệ thống
+ Sửa thông tin một loại thuốc : Cho phép quản trị viên sửa các thông tin tên, mã , loại ,đơn vị tính , giá,
số lượng của một loại thuốc đã tồn tại
+ Xóa một loại thuốc : Cho phép quản trị viên xóa một loại thuốc
+ Tìm kiếm đơn thuốc : Cho phép quản trị viên tìm kiếm một đơn thuốc dựa mã thuốc
+ Hiển thị thông tin đơn thuốc : Cho phép quản trị viên xem thông tin chi tiết về tất cả đơn thuốc hoặc một đơn thuốc cụ thể
+Thống kê số lượng thuốc đã bán và doanh thu hiệu thuốc : Cho phép quản trị viên thống kê số lượng thuốc đã bán và doanh thu và xem thông tin về nó + Ngoài ra , còn tính toán hóa đơn và tổng doanh thu
VI Tự đánh giá , hạn chế
Ưu điểm :
+ Lưu trữ thông tin hiệu quả
+ Tính toán chuẩn xác , giảm khả năng thất thoát doanh thu
Trang 20+ Dễ dàng tìm kiếm thông tin
+ Nội dung được làm đầy đủ , ngắn gọn dễ hiểu + Có sự tham gia nội dung đủ thành viên
Nhược điểm :
+ Có thể xảy ra lỗi kỹ thuật hoặc mất dữ liệu do tính năng bảo mật
+Thời gian làm bài tập nhóm chậm