1. ĐẶC TẢ CÁC CHỨC NĂNG HỆ THỐNG
1.1. Thiết kế hệ thống
Tham khảo và mô phỏng lại hầu hết các chức năng của các hệ thống như http://www.bestbuy.com/site/index.jsp , http://www.walmart.com/
Trong pha thiết kế hệ thống ta sẽ lần lượt làm rõ các module của hệ thống và mối quan hệ giữa các module.
1.1.1. Các module của hệ thống
Là một hệ thống siêu thị bán hàng trực tuyến thì về cơ bản hệ thống cần hỗ trợ
người dùng duyệt , mua và thanh tốn hàng . Bên cạnh đó người quản trị hệ thống
, nhân viên siêu thị cần quản lí được hàng hóa (xem, thêm , xóa , sửa), quản lí
thơng tin đặt mua, thanh tốn, vận chuyển hàng . Ngồi ra hệ thống cịn có thêm
một số module như module diễn đàn, module bài báo tin tức, module lấy ý kiến khách hàng, module gửi thư từ hệ thống, module định vị siêu thị, module quốc tế hóa.
Tất cả các module của hệ thống đều sử dụng module thành viên và hồ sơ . Ngoại trừ việc này ra thì chúng độc lập với nhau.
1.1.2. Mối quan hệ giữa các module
Tất cả các module của hệ thống là độc lập với nhau ngoại trừ việc chúng sử dụng module thành viên và hồ sơ cho việc xác thực vai trò người dùng (authenticate) và cấp phép (authorize) sử dụng chức năng cụ thể của một module ứng với vai trị
đó.
Việc tách biệt các module như vậy giúp hệ thống linh hoạt hơn khi nâng cấp, hay có sửa đổi nhỏ.
1.2. Đặc tả sơ lược các module 1.2.1. Module hồ sơ và thành viên 1.2.1. Module hồ sơ và thành viên
Module này với người dùng là khách hàng thì họ có thể sử dụng để tạo tài khoản,
đăng nhập , đăng xuất , quản lí hồ sơ cịn đối với người quản trị hệ thống thì họ
cịn dùng vào việc quản lí vai trị người dùng, xóa, tạo vai trị, quản lí người dùng.
1.2.2. Module lấy ý kiến khách hàng
Với module lấy ý kiến khách hàng với vai trị admin người dùng có thể tạo các câu hỏi để lấy ý kiến khách hàng qua đó nắm bắt được các thông tin cần thiết để phát triển việc kinh doanh của công ty, hay phát triển hệ thống để phục vụ khách hàng tốt hơn.
Người dùng là khách hàng có thể đóng góp ý kiến của mình để được phục vụ tốt hơn.
1.2.3. Module thương mại
Sử dụng module thương mại người dùng là khách hàng có thể xem , chọn mua sản phẩm, thanh tốn qua paypal.
Đối với người dùng có vai trị là quản lí siêu thị (store keeper) – người quản lí sẽ
quản lí gian hàng mà họ tạo ra như quản lí sản phẩm , quản lí đơn đặt hàng..
1.2.4. Module gửi thư
Khi sử dụng module này người dùng là khách hàng có thể đăng kí nhận thư của hệ thống thông qua mục nhận thư trong hồ sơ.
Cịn với người dùng có vai trị admin thì họ cịn có thể tạo thư và gửi thư tới tồn bộ các thành viên có đăng kí nhận thư từ hệ thống.
1.2.5. Module diễn đàn
Người dùng nạc danh có thể duyệt xem bài bình luận trong các diễn đàn , tuy nhiên để gửi bài hay bình luận họ phải đăng nhập vào hệ thống.
Chức năng quản lí diễn đàn, quản lí các bài thỏa luận dành cho người dùng có vai trị là editor. (biên tập)
1.2.6. Module tìm kiếm siêu thị
Người dùng có thể sử dụng module này để tìm kiếm các siêu thị gần nơi mình ở
theo khoảng cách và tìm đường đi đến một siêu thị nào đó.
Với người dùng có vai trị là admin thì cịn có thêm chức năng thêm vị trí siêu thị mới vào hệ thống.
1.2.7. Module bài báo, tin tức, và blog
Người dùng sử dụng module này có thể xem toàn bộ các bài báo, xem theo đầu
mục, xem chi tiết bài báo , viết lời bịnh và đánh giá .
Người dùng với vai trò là editor có thêm các chức năng như quản lí các đầu mục
báo, tạo đầu mục mới , xóa đầu mục đang có trong hệ thống. Quản lí các bài báo (chỉnh sửa, xóa), tạo bài báo mới
1.2.8. Module quốc tế hóa
Module này cho người dùng biết thơng tin địa phương của người dùng qua thông
tin ở hồ sơ đăng kí như thời gian, tiền dùng tại địa phương (chẳng hạn như ở Mĩ là USD, ở Việt nam là VND)
1.2.9. Module kiểm thử
Ở module này chỉ kiểm thử với hai module khác trong hệ thống là module bài báo ,
uc User's membership and profile
Membership and Profile Management
+ Change Password + Create Role + Delete Role + Delete User + Edit User + Forgot Password + Login + Logout + Manage Profile + Manage Role + Manage User + Register Account Actors + Administrator + Anonymous User + Registered User + User
2. MODULE HỒ SƠ NGƯỜI DÙNG VÀ THÀNH VIÊN 2.1. Tổng quan về module
Module sẽ sử dụng built-in ASP.NET 2.0 membership system (hệ thống quản lí thành viên xây dựng sẵn cho ASP.NET 2.0) cung cấp bởi Microsoft cho phép
người dùng (user) thực hiện các chức năng gồm có đăng kí tài khoản, đăng nhập , thay đổi mật khẩu, lấy lại mật khẩu, nhập thông tin hồ sơ , cho phép nhà quản trị
hệ thống (admin) đăng nhập vào hệ thống, quản lí quyền, quản lí người dùng
(trong đó có xem tồn bộ người dùng trong hệ thống, tìm người dùng và xóa người dùng, thay đổi vai trị người dùng…).
Trước khi lưu trữ mật khẩu người dùng vào CSDL để bảo mật tất cả các mật khẩu
sẽ được thay đổi thông qua hàm băm .
Hình 3.2 – Sơ đồ tổng quan người dùng và các chức năng của module Ghi chú: Module này được sử dụng bởi hầu hết các module khác như module cộng đồng, module tin tức bài báo, hay module đánh giá và cho điểm các luồng thảo luận trong diễn đàn,..
uc Membership and Profile Management Administrator (from Actors) Login Register Account Logout Manage Profile Create Role Manage User Delete User Change Passw ord
Delete Role
Forgot Passw ord
Edit User Anonymous User (from Actors) Registered User (from Actors) Manage Role 2.2. Sơ đồ chức năng
Hình 3.3 – Sơ đồ tổng quan chức năng của module theo mơ hình UC
2.3. Các bảng DL của module 2.3.1. Tạo bảng DL 2.3.1. Tạo bảng DL
Sau khi tạo CSDL GlobalStore với SQL Server Management Studio , chạy file aspnet_regsql trong thư mục C:\Windows\Microsoft.NET\Framework\v2.0.50727
để tạo các bảng dành cho module thành viên và hồ sơ mà ASP.NET phiên bản 2.0 đã cung cấp sẵn.
Ngoài ra ta xây dựng thêm bảng language để dùng cho việc tạo mục ngôn ngữ trong hồ sơ người dùng như sau:
Hình 3.4 Bảng Langugage
2.3.2. Cấu hình trong web.config cho membership, role và profile:
Mục membership: <membership> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,System.Web, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="GlobalStoreConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="GlobalStore" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership>
Qua nội dung phần config có thể thấy ta dùng ASPNETSqlMembershipProvider phiên bản 2.0 . Mật khẩu trước khi lưu xuống CSDL được thay đổi thông qua hàm
băm passwordFormat="Hashed",… Mục Role: <roleManager enabled="true"> <providers> <clear/> <add connectionStringName="GlobalStoreConnectionString" applicationName="GlobalStore"name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider,System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </providers> </roleManager>
Mục Profile:
ASP.NET cung cấp một cơ chế có sẵn để quản lí hồ sơ người dùng. Ta chỉ cần khai báo các thông tin cần thiết lưu trong hồ sơ. Khi ứng dụng chạy thông tin thuộc tính của hồ sơ sẽ được thêm vào lớp Page .
<profile> <properties>
<add name="Subscription" type="String"/> <add name="Language" type="String"/>
<add name="ShoppingCart" type="GlobalStore.Models.ShoppingCart" serializeAs="Binary" allowAnonymous="true"/>
<group name="PersonalInformation">
<add name="FirstName" type="String"/> <add name="LastName" type="String"/> <add name="Gender" type="String"/> <add name="BirthDate" type="DateTime"/> <add name="Occupation" type="String"/> <add name="Website" type="String"/> </group>
<add name="Street" type="String"/> <add name="City" type="String"/> <add name="State" type="String"/> <add name="ZipCode" type="String"/> <add name="Country" type="String"/> </group>
</properties> </profile>
2.4. Models
2.4.1. Lớp UserInformation
Hệ thống sẽ có một số trang mà người dùng sẽ sử dụng liên quan với việc đăng nhập và quản lí tài khoản của họ. Để truyền dữ liệu mà không phải tạo một số
lượng lớn biến cho mỗi phương trức hành động chúng ta tự tạo lớp UserInformation để dùng.
Hình 3.5 Sơ đồ lớp UserInformation
2.4.2. Lớp ProfileInformation
Lớp này được dùng để quản lí thơng tin hồ sơ đồng thời hỗ trợ để tạo các chọn lựa dropdown phần điền thơng tin trên trang quản lí hồ sơ như nghề nghiệp, nước hiện tại ở, ngôn ngữ, … Các thuộc tính của lớp tương ứng với các thuộc tính khai báo trong web.config và các phương thức tạo dropdown tương ứng cho phần quản lí hồ sơ người dùng gồm có dropdown cho các mục:
Country. Gender. Language. Occupation. Subscription.
Hình 3.6 Sơ đồ lớp ProfileInformation
2.5. Controllers
Tương ứng với các chức năng của module ta các phương thức cho controller của
module này như sau:
Phương thức hành động Bảo mật Các tham số
Logout ---- ----
Login ---- ----
Login_OnPost ---- string userName, string password, bool persistent, string returnUrl
ForgotPassword ---- ----
ForgotPassword_OnPost ---- string userName, string secretAnswer
Register ---- ----
Register_OnPost ---- UserInformation userInformation ChangePassword ---- string resetPassword
ChangePassword_OnPost ---- UserInformation userInformation
UserProfile ---- ----
UserProfile_OnPost ---- ProfileInformation profileInformation GetErrorMessage ---- MembershipCreateStatus
membershipCreateStatus
ManageUser Admin string searchType, string searchInput
DeleteUser Admin string id
CreateRole Admin string newRole
DeleteRole Admin string id
EditUser Admin string id
EditUser_OnPost Admin string id, bool approved
2.6. Views
Module này tạo thành từ nhiều view trong đó có những views được sử dụng bởi
người dùng cuối và những views được dùng để hỗ trợ việc quản trị bảo mật của module. Dưới đây là thể hiện cụ thể của các views trong module này:
Liên kết tới trang login được hiển thị trên cùng phía bên phải ngay sau mục tóm
lược việc mua hàng – shopping summary của mỗi trang bất kể khi nào mà người
dùng là nạc danh. Sau khi người dùng đăng nhập vào hệ thống thì liên kết này sẽ
được ẩn đi thay vào đó là các chức năng mà người dùng đã đăng nhập có đó là đăng xuất – logout, quản lí hồ sơ – manage profile, và thay đổi mật khẩu – change
password.
View đăng kí cho phép người dùng mới đăng kí tài khoản với hệ thống. Trong q
trình đăng kí người dùng mới sẽ tạo hồ sơ với các thông tin : FirstName (string) , LastName (string) , Gender (string) , BirthDate (datetime), Occupation (sring) , và website (string) . Nhóm thơng tin về địa chỉ trong hồ sơ có các thuộc tính phụ trợ sau: Street, PostCode, City, State và Country tất cả đều có kiểu string. Nhóm cuối cùng về Preferences có các thuộc tính Cultrure và Newsletter .
View quên mật khẩu cho phép người dùng thay đổi mật khẩu bằng việc trả lời một câu hỏi bảo mật sau khi đã điền đúng tên người dùng vào ô người dùng. Sau khi trả lời đúng câu hỏi bảo mật lúc này người dùng sẽ được phép tạo mật khẩu mới và dùng tài khoản của mình với mật khẩu mới này.
Trang quản lí hồ sơ người dùng sẽ chỉ truy cập được bởi người dùng . Nó cho
phép người dùng thay đổi các thơng tin trên hồ sơ mà họ thiết lập từ lúc họ tạo tài
khoản.
Các trang để quản lí người dùng dành cho người quản trị như view dành cho quản lí người dùng ManageUser view giúp nhà quản trị tìm kiếm người dùng hoặc bằng
tên hoặc bằng địa chỉ , view dành cho việc chỉnh sửa – edit user , sẽ hiển thị các chi tiế thêm về người dùng và cho phép nhà quản trị để hoặc khơng để tài khoản
đó hoạt động , hay thay đổi cập nhật vai trò người dùng.
Ngồi ra cịn có view dành cho quản lí vai trị – ManageRole được sử dụng để tạo , xóa các vai trị trong hệ thống.
Như vậy ta có các views của module này
Tên trang Đặc tả Đường dẫn ảo
ChangePassword.aspx Trang này dùng thay đổi
mật khẩu của người dùng
user/changepassword/
EditUser.aspx Trang này cho phép thay
đổi quyền người dùng, ngăn hoạt động của tài
khoản
user/edituser/{id}
ForgotPassword.aspx Trong trường hợp người
dùng quên mật khẩu
user/forgotpassword
Login.aspx Trang đăng nhập user /login
ManageRole.aspx Trang dành cho nhà quản
trị tạo / xóa các vai trị áp dụng cho hệ thống
user/managerole
ManageUser.aspx Trang dành cho nhà quản
trị xem danh sách người
dùng, qua đó xóa người
dùng
user/manageruser
Register.aspx Trang này cho phép người
dùng nạc danh trở thành người dùng đã đăng kí bằng việc điền thơng tin
người dùng và đăng kí
user/register
UserProfile.aspx Trang hồ sơ dành cho
người dùng thay đổi thơng
tin hồ sơ của mình
user/profile
2.7. Sử dụng Javascript
Trong view content của trang quản lí người dùng (ManageUser.aspx) việc xóa
người dùng sẽ được sử lí bằng kĩ thuật Ajax với đoạn mã javascript nằm trong tệp
manage-user.js với nguồn /content/scripts/manage-user.js.
Đoạn mã lệnh xóa người dùng sẽ được sử dụng để triệu gọi phương thức xóa người dùng DeleteUser trong UserController . Nội dung của đoạn lệnh:
$(".delete-user-button").click(function() { var userId = $(this).attr("meta:id"); $.post( "/User/DeleteUser", { id: userId }, function(data) { $("#user-" + data.object.id).remove(); }, "json" ); return false; });
Tương tự vậy thì trong view content của trang quản lí vai trị (ManageRole.aspx)
chức năng xóa vai trị cũng được xử lí bằng kĩ thuật này với đoạn mã xóa nằm trong tệp manage-role.js nguồn /content/scripts/manage-role.js.
2.8. Cấu hình định tuyến
Sử dụng định tuyến mặc định routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = (string)null, action = (string)null } );
2.9. Xử lí xác thực người dùng
public void FormsAuthentication_OnAuthenticate(object sender,
FormsAuthenticationEventArgs args) { if (FormsAuthentication.CookiesSupported) { if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) { try { FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.For msCookieName].Value);
args.User = new GenericPrincipal( new FormsIdentity(ticket),
new string[0] // The roles are handled by the
//RoleManager );
args.Context.User = args.User; }
catch (Exception) { /* decryption failed */ } }
} else {
throw new HttpException("Cookieless Forms Authentication is not supported for this application."); }
3. MODULE THƯƠNG MẠI 3.1. Tổng quan về module
Chuỗi các siêu thị của công ty Golbal Store Pte. đều có chung cấu trúc về các gian
hàng như thiết bị âm thanh – Audio, đồ cho ô tô và thiết bị định vị - Car and GPS,
máy tính – Computers , điện thoại cố định và đồ văn phòng – Mobilephones and Office, âm nhạc, phim và sách truyện – Music , Movies and Books. Tuy nhiên có một số gian hàng trống tạo không gian mở cho người dùng thuê. Khách hàng khi thuê gian hàng trống phải đăng kí tài khoản , những khách hàng này có tồn quyền quản lí gian hàng của mình.
Khách hàng khi mua hàng trực tuyến với Global Store Pte họ sẽ có thể duyệt các gian hàng của siêu thị - xem danh sách các gian hàng. Danh sách các gian hàng sẽ có tên gian hàng và đặc tả về gian hàng.
Khi khách hàng chọn xem một gian hàng - xem danh sách các sản phầm có trong một gian hàng cụ thể . Danh sách các sản phẩm với mỗi sản phẩm sẽ có kèm theo thơng tin vắn tắt về sản phẩm (tên sản phẩm, thông tin vắn tắt về sản phẩm, giá bán, giá bán giảm giá nếu có,số lượng sản phẩm cịn trong cửa hàng) ,nút Add To
Cart cho phép người dùng chọn đưa sản phẩm vào giỏ hàng và một liên kết cho
phép xem chi tiết sản phẩm , hình ảnh sản phẩm thường là nhỏ hơn so với hình
ảnh trong mục xem chi tiết.
Khi khách hàng chọn xem chi tiết sản phẩm thì sẽ được chuyển đến view dành cho xem chi tiết sản phẩm. Trên view này người dùng sẽ thấy được thông tin chi tiết sản phẩm như tên sản phẩm , số hiệu sản phẩm, hình ảnh sản phẩm to hơn nếu có, thơng tin chi tiết về sản phẩm nếu có, giá bán, giá bán đã có khuyến mãi giảm giá nếu có, số lượng hàng có trong kho, ơ chọn số lượng mua (khách hàng hoàn tồn có thể chọn mua với số lượng mong muốn vì siêu thị có thể điều động hàng), cuối cùng là nút Add to Cart.
Nếu người dùng chọn mua sản phẩm thì sẽ thấy được một hoạt cảnh (animation) dạng hình ảnh sản phẩm bay vào giỏ hàng (fly-into-cart) . Ở đây là sản phẩm sẽ bay vào vị trí có thơng tin tóm tắt mua hàng (shopping summary) các thông tin vắn tắt mua hàng sẽ được cập nhật đó là số tiền phải trả và số mặt hàng trong giỏ hàng (items). Trong shopping summary cũng có liên kết check out đưa người dùng