QUAN VỀ ĐỀ TÀI
Lý do chọn đề tài
Thực phẩm là một trong những nỗi lo lớn mà bất kì ai trong mỗi chúng ta đều quan tâm Bởi nó gắn liền tới sức khỏe của mỗi con người Có thể qua ti vi, báo đài hoặc qua mỗi câu chuyện ai đó kể mà bạn sẽ nhận thấy rằng vai trò vô cùng quan trọng của thực phẩm đến sức khỏe của mỗi chúng ta.
Vì vậy, người dùng hiện nay cũng rất cẩn trọng trước khi mua hàng họ cần xem xét đơn vị cung cấp có uy tín hay không, đảm bảo chất lượng như thế nào Chính vì vậy, một website bán thực phẩm sạch chuyên nghiệp sẽ giúp bạn khẳng định được uy tín với người tiêu dùng, mang đến trải nghiệm tốt nhất cho khách hàng chính là cách bạn thuyết phục họ sử dụng sản phẩm của mình Để đáp ứng nhu cầu của mọi người nhom em quyết định “ Xây dựng website bán thực phẩ̉m sạch Fresh Food” nhằm tạo ra hệ thống quản lý bán hàng có tính thiết thực và tính ứng dụng thực tế cao.
Mục tiêu của đề tài
Mục tiêu của đề tài là giúp người bán, người quản trị dễ dàng quản lý được các thông tin của website, quản lý được các mặt hàng mà cửa hàng kinh doanh cũng như quản lý được việc mua bán dễ dàng hơn Ngoài ra, hệ thống còn giúp người mua dễ dàng tiếp cận được sản phẩm và mua hàng thuận tiện hơn Xây dựng được một website gồm hai phân hệ: phân hệ người dùng cho phép xem và mua sản phẩm, phân hệ người quản trị cho phép quản lý các thông tin của Website.
Website sau khi xây dựng xong sẽ đáp ứng được các yêu cầu cơ bản sau:
+ Xem các thông tin sản phẩm trên website, xem theo danh mục hoặc xem tất cả Xem chi tiết từng sản phẩm
+ Chọn sản phẩm cho vào giỏ hàng, cập nhật, xóa thông tin giỏ hàng, gửi thông tin giỏ hàng cùng thông tin cá nhân đến người quản trị để đặt hàng.
+ Quản lý các giỏ hàng mà khách hàng đã gửi Tiếp nhận và trả lời thông tin liên hệ từ khách hàng thông qua email.
+ Gửi ý kiến đóng góp, liên hệ đến người quản trị.
+ Người quản trị có quyền xem, cập nhật, xóa, tìm kiếm, thống kê đặt hàng trong website.
+ Cập nhật thông tin sản phẩm cho website Bao gồm thêm mới, sửa thông tin, xóa thông tin sản phẩm, danh mục sản phẩm và các thông tin khác.
+ Người quản trị quản lý nhập hàng và bán hàng
+ Cập nhật tin tức cho website khi có sự kiện hoặc chương trình khuyến mại. + Quản lý đơn hàng.
Bên cạnh các chức năng nêu trên thì website cũng phải trông đẹp mắt và dễ truy cập Website phải làm cho khách hàng thấy được những thông tin cần tìm, cung cấp những thông tin quảng cáo hấp dẫn nhằm thu hút sự quan tâm của khách hàng Website mua bán hàng trên mạng thì cần đảm bảo an toàn những thông tin liên quan đến khách hàng trong quá trình đặt mua hay thanh toán Đồng thời website còn phải dễ nâng cấp, sửa chữa khi cần bổ sung cập nhật những tính năng mới.
Giới hạn và phạm vi của đề tài
- Giới hạn của đề tài:
Các đối tượng ứng dụng của đề tài: Mọi người tiêu dùng trên toàn quốc có nhu cầu đặt mua sản phẩm qua mạng.
- Phạm vi của đề tài:
Thiết kế được CSDL, cách thức hoạt động và các đối tượng trong PHP,
My SQl, xampp Hiểu được cách lưu trữ cơ sở dữ liệu của hệ quản trị cơ sở dữ liệu MySQL.
Sử dụng framework Laravel và hệ quản trị cơ sở dữ liệu MySQL để xây dựng website.
Nội dung thực hiện
Website cho cửa hàng thực phẩm sạch Fresh Food có nội dung như sau:
Xây dựng và khảo sát thực trạng của đề tài :
Khảo sát thực trạng về nhu cầu sử dụng thực phẩm của con người ngày nay ta xác định và lựa chọn đề tài “Xây dựng website bán thực phẩm sạch Fresh Food”. Xác định các yêu cầu chức năng của người dùng :
Giai đoạn này ta cần thu thập các thông tin về đối tượng của đề tài ở đây là hệ thống bán thực phẩm sạch Fresh Food Xác định những yêu cầu cơ bản người dùng đặt ra cho hệ thống để tiến hành xây dựng một hệ thống đúng theo yêu cầu và tiêu chuẩn đề ra Phân tích các yêu cầu chức năng của người dùng Dựa vào những yêu cầu đã xác định ở trên, phân tích cụ thể từng yêu cầu chức năng của hệ thống.
- Xây dựng các ca sử dụng tương ứng với từng chức năng cụ thể bằng biểu đồ
UML.Xây dựng hệ cơ sở dữ liệu cho hệ thống.
- Xây dựng cơ sở dữ liệu cho hệ thống Sau khi đã có những thông tin về đối tượng thì xây dựng các mô hình thực thể và các mô hình chung liên quan.
- Xây dựng chương trình website bằng framework Laravel và MySQL.
Phương pháp tiếp cận
- Các tài liệu liên quan đến nghiệp vụ quản lý bán hàng và bán hàng.
- Với việc sử dụng trình duyệt (Browser) thì người dùng có thể sử dụng máy tính tại bất kỳ đâu có kết nối Internet với đường truyền tốt đều có thể làm việc với máy chủ (server) từ xa.
CƠ SỞ LÝ THUYẾT
Phương pháp phân tích thiết kế hướng đối tượng và UML
2.2.1 Phương pháp phân tích hướng đối tượ̣ng
Trong kỹ thuât phần mềm để sản xuất được một sản phẩm phần mềm người ta chia quá trình phát triển sản phẩm ra nhiều giai đoạn như thu thập và phân tích yêu cầu, phân tích và thiết kế hệ thống, phát triển (coding), kiểm thử, triển khai và bảo trì. Trong đó, giai đoạn phân tích, thiết kế bao giờ cũng là giai đoạn khó khăn và phức tạp nhất Giai đoạn này giúp chúng ta hiểu rõ yêu cầu đặt ra, xác định giải pháp, mô tả chi tiết giải pháp Nó trả lời 2 câu hỏi What (phần mềm này làm cái gì?) và How (làm nó như thế nào?). Để phân tích và thiết kế một phần mềm thì có nhiều cách làm, một trong những cách làm đó là xem hệ thống gồm những đối tượng sống trong đó và tương tác với nhau Việc mô tả được tất cả các đối tượng và sự tương tác của chúng sẽ giúp chúng ta hiểu rõ hệ thống và cài đặt được nó Phương thức này gọi là Phân tích thiết kế hướng đối tượng (OOAD)
2.2.2 Ngôn ngữ mô hình hóa UML
UML (Unified Model Language) là một ngôn ngữ dùng cho phân tích thiết kế hướng đối tượng (OOAD – Object Oriented Analys and Design)
Các biểu đồ UML cho ta cái nhìn rõ hơn về hệ thống
Hiện nay UML được sử dụng rất phổ biến trong các dự án phần mềm.
UML thể hiện phương pháp phân tích hướng đối tượng nên không lệ thuộc ngôn ngữ lập trình.
Có rất nhiều công cụ phần mềm hỗ trợ phân tích thiết kế dùng UML.
Nhiều công cụ có thể sinh ra mã từ UML và ngược lại.
UML không phải là ngôn ngữ lập trình.
Một số biểu đồ UML cơ bản:
- Biểu đồ Ca sử dụng Use Case Diagram
- Biểu đồ lớp Class Diagram
- Biểu đồ tuần tự Sequence Diagram
2.3 Hệ quản trị cơ sở̉ dữ liệu MySQL
MySQL là một hệ quản trị csdl nhanh, dễ sử dụng được sử dụng cho nhiều doanh nghiệp lớn nhỏ khác nhau MySQL được hỗ trợ và phát triển bởi MySQL
AB, một công ty của Thụy Điển MySQL đang trở nên phổ biến vì nhiều lý do khác nhau như:
MySQL được phát triển theo dạng mã nguồn mở Vì vậy, bạn không phải trả tiền để sử dụng nó.
MySQL là một phần mềm rất mạnh mẽ Nó xử lý một tập hợp lớn các chức năng của các gói cơ sở dữ liệu đắt tiền và mạnh.
MySQL hoạt động trên nhiều hệ điều hành và với nhiều ngôn ngữ bao gồm PHP, PERL, C, C ++, JAVA, v.v.
MySQL hoạt động rất nhanh và hoạt động tốt ngay cả với các tập dữ liệu lớn.
MySQL rất thân thiện với PHP, ngôn ngữ được đánh giá cao nhất để phát triển web.
MySQL hỗ trợ cơ sở dữ liệu lớn, lên tới 50 triệu hàng hoặc nhiều hơn trong một bảng Giới hạn kích thước file mặc định cho một bảng là 4GB, nhưng bạn có thể tăng điều này (nếu hệ điều hành của bạn có thể xử lý nó) với giới hạn là 8 triệu terabyte (TB).
2.4 Thiết kế giao diện website
- Thiết kế giao diện web là một trong các khâu quan trọng, có thể nói là chiếm đếm 50% mức độ thành công của một trang web Thiết kế giao diện web là tổng hợp các thao tác cơ bản của các nhà thiết kế (designer) bao gồm tổng hợp, hình dung và tạo ra các option cụ thể đúng với những yêu cầu và mong muốn của khách hàng Tìm hiểu về thông điệp mà doanh nghiệp muốn truyền tải Thiết kế giao diện web bao gồm tất cả những gì xuất hiện trên website bao gồm hình ảnh, thông tin, các điều hướng người dùng trên website, liên kết trên web… hay đơn giản là tất cả những gì người dùng nhìn thấy, tương tác trên website (truy cập danh mục, đặt hàng, … ) khi vào trong trang web của bạn.
Các bước thiết kế giao diện website
- Bước 1: Tiếp nhận thông tin từ khách hàng
- Bước 2: Phác thảo giao diện web nháp trên giấy
- Bước 3: Thiết kế giao diện web trên các phần mềm chuyên dụng
- Bước 4: Chỉnh sửa và thay đổi
- Bước 5: Hoàn thiện bản thiết kế cuối cùng
2.5 Lập trình phía front-end
Phần front-end của một trang web là phần tương tác với người dùng Tất cả mọi thứ nhìn thấy khi điều hướng trên Internet, từ các font chữ, màu sắc cho tới các menu xổ xuống và các thanh trượt, là một sự kết hợp của HTML, CSS, Bootstrap va JavaScript được điều khiển bởi trình duyệt máy tính.
2.6 Lập trình phía back-end
Phần back-end của một trang web bao gồm một máy chủ, một ứng dụng, và một cơ sở dữ liệu Một lập trình viên back-end xây dựng và duy trì công nghệ mà sức mạnh của những thành phần đó, cho phép phần giao diện người dùng của trang web có thể tồn tại được.
PHP ( Hypertext Preprocessor ), là một ngôn ngữ lập trình kịch bản được chạy ở phía server nhằm sinh ra mã html trên client PHP đã trải qua rất nhiều phiên bản và được tối ưu hóa cho các ứng dụng web, với cách viết mã rõ rãng, tốc độ nhanh, dễ học nên PHP đã trở thành một ngôn ngữ lập trình web rất phổ biến và được ưa chuộng.
PHP chạy trên môi trường Webserver và lưu trữ dữ liệu thông qua hệ quản trị cơ sở dữ liệu nên PHP thường đi kèm với Apache, MySQL và hệ điều hành
- Apache là một phần mềm web server có nhiệm vụ tiếp nhận request từ trình duyệt người dùng sau đó chuyển giao cho PHP xử lý và gửi trả lại cho trình duyệt.
PHP là ngôn ngữ kịch bản (scripting language) Ngôn ngữ kịch bản là một nhánh của ngôn ngữ lập trình Tập tin chứa mã lệnh viết bằng ngôn ngữ kịch bản (như PHP) có thể được chạy (hay thực thi) trực tiếp trên máy mà không cần phải chuyển sang một định dạng khác Đối với các ngôn ngữ như C hay Pascal thì tập tin chứa mã lệnh (source code) cần phải được chuyển sang định dạng khác chứa machine code để máy tính có thể chạy được.
PHP là ngôn ngữ lập trình mã nguồn mở và điều này có nghĩa là bạn có thể sử dụng PHP hoàn toàn miễn phí PHP có thể được chạy trên nhiều nền tảng hệ điều hành khác nhau như Windows, Mac OS và Linux Ngôn ngữ lập trình PHP có thể được sử dụng trên nhiều hệ điều hành khác nhau bao gồm Windows, Mac OS và Linux (Ubuntu, Linux Mint ).
Các tập tin PHP chứa mã lệnh viết bằng ngôn ngữ PHP và được lưu trên máy tính (hoặc máy chủ) với phần mở rộng là php Việc tạo và chỉnh sửa nội dung các tập tin này thường được thực hiện bởi một chương trình hiệu chỉnh văn bản (hay còn gọi là text editor) Dưới đây là danh sách các chương trình hiệu chỉnh mã lệnh phổ biến trên các hệ điều hành khác nhau:
- Trên Windows: Notepad có sẵn hoặc Nodepad++ (cần cài đặt thêm)
- Trên Ubuntu: Gedit hoặc Vim
Tổng quan về Framework Laravel
Laravel là một PHP Framework mã nguồn mở miễn phí, được phát triển bởi Taylor Otwell với phiên bản đầu tiên được ra mắt vào tháng 6 năm
2011 Laravel ra đời nhằm mục đích hỗ trợ phát triển các ứng dụng web, dựa trên mô hình MVC (Model – View – Controller). Ưu điêm cua Laravel
Sử dụng các tính năng mới nhất của PHP
Sử dụng Laravel 5 giúp các lập trình viên tiếp cận những tính năng mới nhất mà PHP cung cấp, nhất là đối với Namespaces, Interfaces, Overloading, Anonymous functions và Shorter array syntax.
Nguồn tài nguyên vô cùng lớn và sẵn có
Nguồn tài nguyên của Laravel rất thân thiện với các lập trình viên với đa dạng tài liệu khác nhau để tham khảo Các phiên bản được phát hành đều có nguồn tài liệu phù hợp với ứng dụng của mình.
Tích hợ̣p với dịch vụ mail
Lavarel là framework được trang bị API sạch trên thư viện SwiftMailer, do đó, bạn có thể gửi thư qua các dịch vụ dựa trên nền tảng đám mây hoặc local.
Tốc độ xử lý nhanh
Thiết kế giao diện website
- Thiết kế giao diện web là một trong các khâu quan trọng, có thể nói là chiếm đếm 50% mức độ thành công của một trang web Thiết kế giao diện web là tổng hợp các thao tác cơ bản của các nhà thiết kế (designer) bao gồm tổng hợp, hình dung và tạo ra các option cụ thể đúng với những yêu cầu và mong muốn của khách hàng Tìm hiểu về thông điệp mà doanh nghiệp muốn truyền tải Thiết kế giao diện web bao gồm tất cả những gì xuất hiện trên website bao gồm hình ảnh, thông tin, các điều hướng người dùng trên website, liên kết trên web… hay đơn giản là tất cả những gì người dùng nhìn thấy, tương tác trên website (truy cập danh mục, đặt hàng, … ) khi vào trong trang web của bạn.
Các bước thiết kế giao diện website
- Bước 1: Tiếp nhận thông tin từ khách hàng
- Bước 2: Phác thảo giao diện web nháp trên giấy
- Bước 3: Thiết kế giao diện web trên các phần mềm chuyên dụng
- Bước 4: Chỉnh sửa và thay đổi
- Bước 5: Hoàn thiện bản thiết kế cuối cùng
2.5 Lập trình phía front-end
Phần front-end của một trang web là phần tương tác với người dùng Tất cả mọi thứ nhìn thấy khi điều hướng trên Internet, từ các font chữ, màu sắc cho tới các menu xổ xuống và các thanh trượt, là một sự kết hợp của HTML, CSS, Bootstrap va JavaScript được điều khiển bởi trình duyệt máy tính.
Lập trình phía back-end
Phần back-end của một trang web bao gồm một máy chủ, một ứng dụng, và một cơ sở dữ liệu Một lập trình viên back-end xây dựng và duy trì công nghệ mà sức mạnh của những thành phần đó, cho phép phần giao diện người dùng của trang web có thể tồn tại được.
PHP ( Hypertext Preprocessor ), là một ngôn ngữ lập trình kịch bản được chạy ở phía server nhằm sinh ra mã html trên client PHP đã trải qua rất nhiều phiên bản và được tối ưu hóa cho các ứng dụng web, với cách viết mã rõ rãng, tốc độ nhanh, dễ học nên PHP đã trở thành một ngôn ngữ lập trình web rất phổ biến và được ưa chuộng.
PHP chạy trên môi trường Webserver và lưu trữ dữ liệu thông qua hệ quản trị cơ sở dữ liệu nên PHP thường đi kèm với Apache, MySQL và hệ điều hành
- Apache là một phần mềm web server có nhiệm vụ tiếp nhận request từ trình duyệt người dùng sau đó chuyển giao cho PHP xử lý và gửi trả lại cho trình duyệt.
PHP là ngôn ngữ kịch bản (scripting language) Ngôn ngữ kịch bản là một nhánh của ngôn ngữ lập trình Tập tin chứa mã lệnh viết bằng ngôn ngữ kịch bản (như PHP) có thể được chạy (hay thực thi) trực tiếp trên máy mà không cần phải chuyển sang một định dạng khác Đối với các ngôn ngữ như C hay Pascal thì tập tin chứa mã lệnh (source code) cần phải được chuyển sang định dạng khác chứa machine code để máy tính có thể chạy được.
PHP là ngôn ngữ lập trình mã nguồn mở và điều này có nghĩa là bạn có thể sử dụng PHP hoàn toàn miễn phí PHP có thể được chạy trên nhiều nền tảng hệ điều hành khác nhau như Windows, Mac OS và Linux Ngôn ngữ lập trình PHP có thể được sử dụng trên nhiều hệ điều hành khác nhau bao gồm Windows, Mac OS và Linux (Ubuntu, Linux Mint ).
Các tập tin PHP chứa mã lệnh viết bằng ngôn ngữ PHP và được lưu trên máy tính (hoặc máy chủ) với phần mở rộng là php Việc tạo và chỉnh sửa nội dung các tập tin này thường được thực hiện bởi một chương trình hiệu chỉnh văn bản (hay còn gọi là text editor) Dưới đây là danh sách các chương trình hiệu chỉnh mã lệnh phổ biến trên các hệ điều hành khác nhau:
- Trên Windows: Notepad có sẵn hoặc Nodepad++ (cần cài đặt thêm)
- Trên Ubuntu: Gedit hoặc Vim
Tổng quan về Framework Laravel
Laravel là một PHP Framework mã nguồn mở miễn phí, được phát triển bởi Taylor Otwell với phiên bản đầu tiên được ra mắt vào tháng 6 năm
2011 Laravel ra đời nhằm mục đích hỗ trợ phát triển các ứng dụng web, dựa trên mô hình MVC (Model – View – Controller). Ưu điêm cua Laravel
Sử dụng các tính năng mới nhất của PHP
Sử dụng Laravel 5 giúp các lập trình viên tiếp cận những tính năng mới nhất mà PHP cung cấp, nhất là đối với Namespaces, Interfaces, Overloading, Anonymous functions và Shorter array syntax.
Nguồn tài nguyên vô cùng lớn và sẵn có
Nguồn tài nguyên của Laravel rất thân thiện với các lập trình viên với đa dạng tài liệu khác nhau để tham khảo Các phiên bản được phát hành đều có nguồn tài liệu phù hợp với ứng dụng của mình.
Tích hợ̣p với dịch vụ mail
Lavarel là framework được trang bị API sạch trên thư viện SwiftMailer, do đó, bạn có thể gửi thư qua các dịch vụ dựa trên nền tảng đám mây hoặc local.
Tốc độ xử lý nhanh
Laravel hỗ trợ hiệu quả cho việc tạo lập website hay các dự án lớn trong thời gian ngắn Vì vậy, nó được các công ty công nghệ và lập trình viên sử dụng rộng rãi để phát triển các sản phẩm của họ.
Laravel được đón nhận và trở nên sử dụng phổ biến vì nó rất d sử dụng
Thường chỉ mất vài giờ, bạn có thể bắt đầu thực hiện một dự án nhỏ với vốn kiến thức cơ bản nhất về lập trình với PHP.
Laravel cung cấp sẵn cho người dùng các tính năng bảo mật mạnh mẽ để người dùng hoàn toàn tập trung vào việc phát triển sản phẩm của mình:
- Sử dụng PDO để chống lại tấn công SQL Injection.
- Sử dụng một field token ẩn để chống lại tấn công kiểu CSRF.
So với các PHP framework khác, Laravel bộc lộ khá ít nhược điểm Vấn đề lớn nhất có thể kể đến của framework này là thiếu sự liên kết giữa các phiên bản, nếu cố cập nhật code, có thể khiến cho ứng dụng bị gián đoạn hoặc phá vỡ.
Bên cạnh đó, Lavarel cũng quá nặng cho ứng dụng di động, khiến việc tải trang trở nên chậm chạp
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Thiết kế hệ thống
3.2.1.Biêu đô mô hinh ER
3.2.2.Thiết kê cơ sở̉ dữ liệu
Mô hình cơ sở dữ liệu
+ Tbl_category_product (loại sản phẩm):
STT Tên trường Kiểu dữ liệu Mô tả
1 Category_id Nvarchar (10) Primary key
2 Category_name Nvarchar (255) Not null
3 Category_desc Nvarchar (255) Not null
4 Category_status Nvarchar (255) Not null
STT Tên trường Kiểu dữ liệu Mô tả
1 Product_id int Primary key
2 Category_id int Foreign key
3 Product_name Nvarchar (MAX) Not null
4 Product_desc Nvarchar (MAX) Not null
5 Product_price Nvarchar (MAX) Not null
6 Product_image Nvarchar (MAX) Not null
7 Product_status Nvarchar (MAX) Not null
8 Product_content Nvarchar (MAX) Not null
STT Tên trường Kiểu dữ liệu Mô tả
1 Admin_id int Primary key
2 Admin_email nvarchar (50) Not null
3 Admin_password nvarchar (50) Not null
4 Admin_name nvarchar (50) Not null
5 Admin_phone nvarchar (50) Not null
STT Tên thuộc tính Kiểu dữ liệu Mô tả
1 Order_id Int Primary key
2 Customer_id Int Foreign key
3 Shipping_id int Foreign key
4 Payment_id Int Foreign key
5 Order_total nVachar(50) Not null
6 Order_status nVachar(50) Not null
STT Tên thuộc tính Kiểu dữ liệu Mô tả
1 Order_Details_id Int Primary key
2 product_id Int Foreign key
3 product_name Varchar(255) Not null
4 product_price Varchar(255) Not null
5 product_qty Int Not null
6 Order_id Int Foreign key
STT Tên thuộc tính Kiểu dữ liệu Mô tả
1 shipping_id Int Primary key
2 Shipping_name Varchar(255) Not null
3 Shipping_address Varchar(255) Not null
4 Shipping_phone Varchar(255) Not null
5 Shipping_email Varchar(255) Not null
6 Shipping_notes Varchar(255) Not null
STT Tên thuộc tính Kiểu dữ liệu Mô tả
1 customer_id Int Primary key
2 customer_name Varchar(255) Not null
3 customer_password Varchar(255) Not null
4 customer_phone Varchar(255) Not null
5 customer_email Varchar(255) Not null
STT Tên thuộc tính Kiểu dữ liệu Mô tả
1 payment_id Int Primary key
2 payment_method Varchar(255) Not null
3 Payment_status Varchar(255) Not null
TRIỂN KHAI WEBSITE
Triển khai các chức năng cho phân hệ người dùng
- Người dùng có thể đặt mua hàng tại website.
Triển khai các chức năng cho phân hệ quản trị nội dung
- Admin quản lý tất cả các thông tin của website bao gồn thêm sửa xóa thông tin liên quan đến sản phẩm.
Hướng dẫn cài đặt
- Cài đặt CSDL, đẩy lên hosting.
Hướng dẫn sử dụng
- Để mua hàng người dùng sẽ chọn đặt mua sản phẩm điền đầy đủ các thông tin cần thiết để giao hàng và xác nhận mua sản phẩm.