Mà đề tài này sẽ quan tâm hỗ trợ cả cư dân, giúp cư dân nhận được thông báo, sự kiện, những dịch vụ của chung cư nhanh và chính xác, đồng thời quản lý luôn việc cho người dân đăng ký sử
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
Cần Thơ, 05/2015
Trang 2
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
BỘ MÔN TIN HỌC ỨNG DỤNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGÀNH CÔNG NGHỆ THÔNG TIN
Đề tài
XÂY DỰNG HỆ THỐNG THÔNG TIN
QUẢN LÝ CHUNG CƯ TRÊN NỀN
Trang 3LỜI CẢM ƠN
Trong suốt quá trình làm luận văn này em đã nhận được rất nhiều sự giúp đỡ tận tình, sự ân cần dạy bảo và sự động viên chân thành của thầy hướng dẫn cùng quý thầy cô trong bộ môn
Trước tiên em chân thành cảm ơn gia đình em, những người đã tảo tần vất vả sớm hôm nuôi em ăn học suốt quãng đường học sinh – sinh viên Em xin cảm ơn tất
cả quý thầy cô, cán bộ giảng viên đã tận tâm giảng dạy, truyền đạt những kiến thức quý báu cho em suốt chặng đường vừa qua Em cảm ơn Bộ môn Tin Học Ứng Dụng
đã tạo điều kiện thuận lợi giúp em thực hiện đề tài luận văn này Em xin chân thành cảm ơn thầy Hồ Văn Tú đã nhiệt tình hướng dẫn giúp em hoàn thành đề tài luận văn Trong khoảng thời gian thực hiện đề tài này, em đã cố gắng để hoàn thành tốt luận văn, nhưng khó tránh khỏi những sai sót nên rất mong quý thầy cô cảm thông và giúp đỡ em khắc phục những sai sót
Em chân thành cảm ơn tất cả những người đã giúp đỡ em
Cần Thơ, ngày 04 tháng 05 năm 2015
Sinh viên thực hiện Dương Hồng Khanh
Trang 4MỤC LỤC
LỜI CẢM ƠN i
MỤC LỤC ii
DANH MỤC HÌNH iv
DANH MỤC BẢNG vi
DANH MỤC KÝ HIỆU VÀ VIẾT TẮT vii
TÓM TẮT viii
ABSTRACT ix
CHƯƠNG I: GIỚI THIỆU 1
1.1 Đặt vấn đề 1
1.2 Lịch sử giải quyết vấn đề 1
1.3 Mục tiêu đề tài 2
1.4 Đối tượng và phạm vi nghiên cứu 3
1.5 Nội dung nghiên cứu 3
1.6 Những đóng góp chính của đề tài 3
CHƯƠNG II: MÔ TẢ CHI TIẾT BÀI TOÁN VÀ CƠ SỞ LÝ THUYẾT 4
2.1 Mô tả chi tiết bài toán 4
2.1.1 Mô hình hệ thống 4
2.1.2 Các chức năng 4
2.1.3 Đối tượng sử dụng 5
2.2 Các giải pháp liên quan 5
2.3 Cơ sở lý thuyết 6
2.3.1 Ngôn ngữ Ruby 6
2.3.2 Giới thiệu về Ruby on Rails (Rails) 8
CHƯƠNG III: THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP 12
3.1 Thiết kế hệ thống 12
3.1.1 Các thực thể chính 12
3.1.2 Mô hình CSDL quan hệ 14
3.1.3 Usecase model 15
3.1.4 Usecase 18
Trang 53.2 Cài đặt giải pháp 27
3.2.1 Cài đặt môi trường 27
3.2.2 Cài đặt những chức năng 27
CHƯƠNG IV: KIỂM THỬ VÀ ĐÁNH GIÁ 29
4.1 Kịch bản kiểm thử 29
4.2 Kết quả kiểm thử 30
4.3 Đánh giá 40
CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 41
5.1 Kết quả đạt được 41
5.2 Hướng phát triển 41 TÀI KIỆU THAM KHẢO a
Trang 6DANH MỤC HÌNH
Hình 1.1: Mô hình hoạt động của hệ thống 4
Hình 2.1 Ví dụ phép toán cộng trong Ruby 7
Hình 3.1: Mô hình CSDL 14
Hình 3.2: Usecase model – Web quản lý 15
Hình 3.3: Usecase model – Web người dùng 16
Hình 3.4: Usecase đăng nhập 18
Hình 3.6: Thêm sự kiện 19
Hình 3.7: Sửa sự kiện 20
Hình 3.8: Xóa sự kiện 21
Hình 3.9: Quản lý dịch vụ – Usecase chi tiết 22
Hình 3.10: Thêm dịch vụ 23
Hình 3.11: Duyệt/xóa yêu cầu 24
Hình 3.12: Usecase quản lý người dùng 24
Hình 3.13: Thêm/cấp quyền người dùng 25
Hình 3.14: Đăng ký dịch vụ 26
Hình 3.15: Cấu trúc thư mục trong rails framework 27
Hình 4.1: Giao diện trang chủ của admin 30
Hình 4.2: Biểu mẫu nhập thông tin người dùng 30
Hình 4.3: Thông tin người dùng sau khi thêm 31
Hình 4.4: Giao diện trang chủ của tài khoản người dùng 31
Hình 4.5: User không có quyền truy cập trang 31
Hình 4.6: Thiết lập user 31
Hình 4.7: Cấp quyền user 32
Hình 4.8: Danh sách quyền của user 32
Hình 4.9: Giao diện trang quản lý thông báo 33
Hình 4.10: Giao diện thông báo mới nhất 33
Hình 4.11: Biểu mẫu thêm thông báo 34
Hình 4.12: Danh sách thông báo 34
Hình 4.13: Xem thông báo mới nhất 34
Hình 4.14: Danh sách dịch vụ 35
Hình 4.15: Biểu mẫu thêm dịch vụ 35
Hình 4.16: Thông tin dịch vụ sau khi thêm thành công 36
Hình 4.17: Biểu mẫu thêm thời gian 36
Hình 4.18: Thay đổi trang thái của dịch vụ 37
Hình 4.19: Danh sách dịch vụ mới nhất 37
Hình 4.20: Danh sách những dịch vụ mới nhất 37
Hình 4.21: Thông tin dịch vụ chi tiết 38
Hình 4.22: Đăng ký dịch vụ thành công 38
Hình 4.23: Trùng thời gian đăng ký 38
Trang 7Hình 4.24: Giao diện hồ sơ cá nhân 39
Hình 4.25: Thông tin cá nhân và danh sách dịch vụ 39
Hình 4.26: Duyệt đăng ký dịch vụ 40
Hình 4.27: Trạng thái của dịch vụ đã đặt được thay đổi 40
Trang 8DANH MỤC BẢNG
Bảng 3.1: Mô tả nhóm người dùng 16Bảng 3.2: Danh sách usecase 17Bảng 3.3: Mô tả chức năng các thư mục trong rails 28
Trang 9DANH MỤC KÝ HIỆU VÀ VIẾT TẮT STT Ký hiệu Ý nghĩa
1 RMS Resident management system – Hệ thống quản lý chung cư
Trang 10
TÓM TẮT
Trong đề tài luận văn này đã nghiên cứu, tìm ra giải pháp tối ưu để quản lý
chung cư Không giống như những hệ thống quản lý chung cư khác chỉ quan tâm hỗ
trợ người quản trị chung cư quản lý về mặt hồ sơ, tiền điện nước, tiền nhà, Mà đề
tài này sẽ quan tâm hỗ trợ cả cư dân, giúp cư dân nhận được thông báo, sự kiện, những
dịch vụ của chung cư nhanh và chính xác, đồng thời quản lý luôn việc cho người dân
đăng ký sử dụng dịch vụ
Hệ thống gồm 2 trang web và một web services, một trang dành cho người quản
trị quản lý thông tin, một trang dành cho người dùng xem thông tin và web services
để hỗ trợ viết ứng dụng
Hệ thống sẽ có 4 nhóm người dùng cơ bản Nhóm 1 là ban quản trị chung cư có
toàn quyền quản lý các dịch vụ, thông tin, người dùng Nhóm đấu thầu quản lý dịch
vụ chỉ được quản lý dịch vụ, sự kiện, khuyến mãi mà họ có quyền Nhóm người dùng
chỉ được xem thông tin, đăng ký dịch vụ Nhóm khách có quyền xem thông tin chung
như thông báo, sự kiện, được đăng ký dịch vụ, nhưng một vài chức năng yêu cầu phải
đăng nhập mới có quyền sử dụng
Đặc biệt hệ thống có thể phân quyền động theo chức năng đã có, người quản trị
có thể tạo ra vai trò (roles) với những quyền tùy ý sau đó gán cho người dùng
Từ khóa: ruby, rails framework, restful, ajax, quản lý chung cư
Trang 11ABSTRACT
In this thesis study, finding the optimal solution for apartment management Unlike other apartment management system supports only interested condominium administrator managing the records, utility bills, rent, Which topics will concern all residents support , help residents get the message, event, these services quickly and accurately condominiums, management and always work for the people registered to use the service
The system consists of two sites and web services, a win for the administrator page information management, a win for users to view pages of information and services to support writing web applications
The system will have four basic user groups The condominium administrators have full management services, information and user Group Procurement Service management managed service only, events, promotions that they have rights Group users only see the information, register for the service Groups have access to general information such as announcements, events, registration services, but some functions requiring login access
Especially decentralized system can under existing functionality, administrators can create roles with the optional right then assigned to users
Keywords: ruby, rails framework, restful, ajax, resident management system.
Trang 12CHƯƠNG I: GIỚI THIỆU 1.1 Đặt vấn đề
Hiện nay, nước ta đang phát triển theo hướng Công nghiệp hóa – Hiện đại hóa
vì thế mà dân số tập trung ở các thành phố lớn tăng rất nhanh Điều đó đòi hỏi các khu dân cư phải được xây dựng với số lượng lớn và quy mô để giải quyết nhu cầu về chổ ở Vì thế, các vấn đề liên quan được đặt ra là: Làm thế nào để quản lý số lượng lớn dân cư? Làm thế nào để quản lý tài sản chung của chung cư?
Để giải quyết các vướng mắc được đặt ra, nhiều công ty hàng đầu về phần mềm quản lý đã cho ra đời các phần mềm quản lý chung cư Tuy nhiên, đa số những phần mềm này chuyên về quản lý thông tin chung cư như: quản lý tài sản, quản lý tiền điện nước… Nói theo cách khác, tính năng nổi bật của các sản phẩm này là hỗ trợ ban quản trị trong việc quản lý Bên cạnh một số vấn đề đã được giải quyết từ góc nhìn của ban quản trị vẫn còn những vấn đề rất cần được giải quyết từ góc nhìn của cư dân như: Làm thế nào để đăng ký sử dụng tài sản chung? Đăng ký sử dụng những dịch vụ của chung cư như thế nào?
Để quyết định xây dựng một sản phẩm hay không đều căn cứ vào tầm nhìn đối với sản phẩm đó Hai yếu tố quan trọng nhất của tầm nhìn chính là cơ hội và thách thức Việc nhìn thấy được nhu cầu xây dựng hệ thống quản lý chung cư và nhìn thấy được những vấn đề mà những hệ thống khác chưa có, đó là cơ hội Việc nhận biết được trên thị trường hiện nay có rất nhiều sản phẩm quản lý chung cư đó là thách thức Từ cơ hội và thách thức cho thấy rằng cơ hội khi xây dựng hệ thống quản lý
chung cư lớn hơn so với thách thức, đó là lí do chọn đề tài “Xây dựng hệ thống thông tin quản lý chung cư trên nền Ruby on Rails”
1.2 Lịch sử giải quyết vấn đề
Những chung cư ngày nay ngày càng được xây dựng với quy mô lớn và hiện đại vì thế mà việc quản lý là hết sức cần thiết, nhưng hiện tại việc quản lý chỉ được quan tâm ở góc nhìn của người quản lý Sau này việc quản lý chung cư sẽ mang cả tầm nhìn từ người cư dân, hệ thống quản lý chung cư sẽ tích hợp cả phần quản lý dành cho người quản trị và phần người dùng dành cho cư dân Hơn nữa nếu nhìn ở tầm nhìn của một người phân tích thì sẽ nghĩ đến việc tiện dụng nhất cho người dùng,
hệ thống sẽ có cả phần web services để có thể phát triển nhiều ứng dụng trên nhiều nền tảng
Giai đoạn 1: Thu thập thông tin từ Chung cư Phú Mỹ Hưng – TPHCM
Tìm hiểu yêu cầu thực tế của Chung cư Phú Mỹ Hưng – TPHCM
Xác nhận các yêu cầu từ Chung cư Phú Mỹ Hưng – TPHCM về hệ thống và các dịch vụ cung cấp
Trang 13 Giai đoạn 2: Giai đoạn phân tích
Dựa vào những thông tin và yêu cầu thiết kế của Chung cư Phú Mỹ Hưng – TPHCM, phân tích rõ ràng mục đích, yêu cầu, nguyện vọng của Chung cư Phú Mỹ Hưng – TPHCM
Lập bảng kế hoạch thực hiện
Căn cứ trên kết quả khảo sát, thông tin do Chung cư Phú Mỹ Hưng – TPHCM cung cấp, thiết kế lập cấu trúc cho chương trình và thiết kế chung cho toàn hệ thống
Giai đoạn 3: Giai đoạn thiết kế
Xem xét chi tiết yêu cầu và tiến hành thiết kế chương trình
Tiến hành xử lý hiệu ứng ảnh, thu thập tài liệu liên quan
Kiểm tra sản phẩm để đảm bảo tính thẩm mỹ và thống nhất
Giai đoạn 4: Giai đoạn xây dựng
Xây dựng CSDL dựa trên thiết kế
Soạn thảo nội dung tài liệu, chỉnh sửa hoàn thiện nội dung chương trình
Tích hợp hệ thống: lắp ghép phân tích thiết kế, nội dung lập trình thành một sản phẩm
Tiến hành kiểm tra, chỉnh sửa và thực hiện nghiệm thu nội bộ
Giai đoạn 5: Giai đoạn chạy thử
Tổng hợp nội dung, xây dựng hệ thống theo thiết kế
Kiểm tra và sửa lỗi
Lắp ghép thiết kế với phần mềm, đảm bảo không sai lệch với thiết kế và phần mềm hoạt động tốt
Chạy thử hệ thống
Kiểm tra và sửa lỗi
Giai đoạn 6: Giai đoạn nghiệm thu
Chung cư Phú Mỹ Hưng – TPHCM duyệt dự án
Đăng tải hệ thống: đảm bảo hệ thống chạy tốt
Giai đoạn 7: Giai đoạn chuyển giao
Đào tạo và huấn luyện Chung cư Phú Mỹ Hưng – TPHCM quản trị hệ thống một cách hiệu quả
Đánh giá, kết quả đạt được
1.3 Mục tiêu đề tài
Xây dựng hệ thống quản lý chung cư bao gồm:
Xây dựng một trang chỉ dành cho người quản lý thông tin chung cư
Xây dựng một web services hỗ trợ viết ứng dụng
Xây dựng một ứng dụng web dựa trên web services dành cho cư dân
Trang 141.4 Đối tượng và phạm vi nghiên cứu
Đối tượng gồm các chung cư, thành viên trong ban quản lý chung cư và cư dân sinh sống
Phạm vi nghiên cứu: Xây dựng hệ thống thông tin quản lý chung cư trên nền web, sử dụng ngôn ngữ ruby, rails framework, sử dụng kỹ thuật restful để gửi và nhận
dữ liệu, sử dụng các thư viện hỗ trợ front-end như Jquey, metro-bootstrap, adminLTE, html5, css3, các plugin của jquery, sử dụng hệ quản trị CSDL MySQL
1.5 Nội dung nghiên cứu
Cách sử dụng những câu lệnh trong ngôn ngữ ruby
Tìm hiểu về rails framework
Tìm hiểu về mô hình MVC trong rails
Cách áp dụng restful vào rails
Cách tích hợp các module các plugin vào rails
Tìm hiểu về web services
Cách viết web services dùng rails
Cách giao tiếp với web services dùng rails
Xử lý dữ liệu kiểu file như upload file pdf, file hình ảnh, doc, xls
Kỹ thuật thiết kế web dùng css3, html5, bootstrap, adminLte
Tiền xử lý dữ liệu ở client dùng javascript, jquery
Tìm hiểu cách sử dụng ajax do rails hỗ trợ
Tìm hiểu kỹ thuật responsive để thiết kế giao diện web
Tìm hiểu kỹ thuật đa ngôn ngữ được tích hợp sẵn trong rails đồng thời áp dụng
kỹ thuật đó để viết module đa ngôn ngữ bằng javascript
Tìm hiểu về kỹ thuật phân quyền động – phân quyền theo chức năng để áp dụng vào đề tài
1.6 Những đóng góp chính của đề tài
Ở trang web dành cho người quản trị thì người quản trị có thể thêm thông báo,
sự kiện, khuyến mãi, dịch vụ, biểu mẫu, thông tin cư dân, cấp quyền cho người dùng (đối với group admin), quản lý thông tin liên hệ bảo vệ
Ở trang web dành cho cư dân thì cư dân có thể xem thông báo, sự kiện, khuyến mãi, xem và đăng ký sử dụng dịch vụ, xem kết quả đăng ký dịch vụ, tải biểu mẫu, xem thông tin liên hệ bảo vệ
Trang 15CHƯƠNG II: MÔ TẢ CHI TIẾT BÀI TOÁN VÀ CƠ SỞ LÝ THUYẾT 2.1 Mô tả chi tiết bài toán
2.1.1 Mô hình hệ thống
Hình 1.1: Mô hình hoạt động của hệ thống
Hệ thống gồm 2 phân hệ: Phân hệ dành cho người quản trị bao gồm cả web services, người quản trị có thể quản lý (thêm, sửa, xóa) những thông tin trên trang quản trị Phân hệ dành cho người dùng, người dùng có thể xem những thông tin do người quản trị tạo ra, và có thể đăng ký sử dụng dịch vụ của chung cư
2.1.2 Các chức năng
Chức năng của trang web quản trị:
Thêm, sửa, xóa người dùng
Thêm, sửa, xóa các quyền
Cấp quyền cho người dùng
Thêm, sửa, xóa thông báo
Thêm, sửa, xóa sự kiện
Thêm, sửa, xóa khuyến mãi
Thêm, sửa, xóa dịch vụ
Thêm, sửa, xóa biểu mẫu
Thêm, sửa, xóa liên hệ
Thêm, sửa, xóa quy định
Chức năng của trang web người dùng:
Xem thông báo
Xem sự kiện
Xem khuyến mãi
Xem thông tin dịch vụ
Đặng ký sử dụng dịch vụ
Xem kết quả đăng ký
Cập nhật thông tin người dùng
Tải biểu mẫu
Web quản trị + Web services
Web người dùng
Gửi yêu cầu Trả về kết quả
Trang 16 Xem thông tin các thành viên trong chung cư
Xem thông tin liên hệ
Chức năng của web services: Cung cấp các hàm trả về giá trị tương ứng với từng chức năng của trang người dùng
2.1.3 Đối tượng sử dụng
Hệ thống gồm 4 đối tượng chính sử dụng:
Ban quản lý (Admin): Những người quản lý chung cư
Chủ thầu (Merchant): Những doanh nghiệp muốn đấu thầu để quản lý các
dịch vụ Tùy theo loại dịch vụ mà có thể cấp quyền khác nhau để:
Thêm, sửa, xóa các dịch vụ, sự kiện, khuyến mãi đến toàn thể cư dân
Quản lý dịch vụ của mình, có thể chấp nhận hay không khi người dùng đăng ký sử dụng dịch vụ
Cư dân (Resident): Cư dân có hộ khẩu trong chung cư được cấp sẵn một
tài khoản sử dụng để:
Đăng kí sử dụng các dịch vụ mà phía doanh nghiệp cung cấp
Theo dõi các thông báo liên quan đến chung cư, gửi các phản hồi ngược lại cho ban quản lý
Khách (Guest): Khách có quyền xem thông tin chung như thông báo, sự
kiện, được đăng ký dịch vụ, nhưng sẽ bị hạn chế một số chức năng bắt buột đăng nhập
2.2 Các giải pháp liên quan
Các giải pháp về thiết kế hệ thống, có 2 cách thiết kế:
Web quản trị, web services và web người dùng viết chung 1 trang web, nếu dùng cách thiết kế này thì hệ thống sẽ đơn giản hơn, lúc này người quản trị
và người dùng sẽ có cùng trang giao diện nhưng sẽ được phân quyền trên giao diện, người quản trị sẽ có chức năng thêm, sửa, xóa, còn người dùng chỉ được xem Nhưng cách này thì hệ thống khó mở rộng trên nền tảng khác
Web quản trị, web services và web người dùng viết tách riêng, nếu dùng cách này thì giao diện người dùng sẽ được thiết kế độc lập không cần phân quyền trên giao diện, đặc biệt là có thể phát triển trên nhiều nền tảng như web, mobile nếu web services được viết tách riêng
Để đánh giá một sản phẩm, người ta dựa vào tính kinh tế, khả năng mở rộng
và tiện lợi cho người sử dụng, vì thế mà đề tài sẽ chọn cách viết web services và web người dùng riêng biệt
Các giải pháp về môi trường cài đặt
Cài đặt trên hệ điều hành Windows, cách này có ưu điểm là đa số người dùng máy tính quen với hệ điều hành Windows, nhược điểm là các câu lệnh
Trang 17hỗ trợ của rails viết trên giao diện console (cmd đối với Windows và terminal đối với Linux), nhưng thao tác trên cmd bất tiện và tốn thời gian hơn so với terminal, hơn thế nữa Windows là hệ điều hành có phí
Cài đặt trên hệ điều hành Linux, đa số người dùng máy tính ở nước ta ít sử dụng Linux nhưng xét về mặt quy trình thì giai đoạn cài đặt môi trường hay triển khai đều do developer làm nên một người developer họ sẽ biết cách sử dụng Linux, đặc biệt Rails và Linux đều là mã nguồn mở sẽ mang tính cạnh tranh cao hơn về mặt kinh tế
Mục tiêu cuối cùng của một sản phẩm là mang lại lợi nhuận cao, nhu cầu của người tiêu dùng luôn muốn có được sản phẩm tốt nhất giá rẻ nhất, vì thế cài đặt trên hệ điều hành Linux là một lợi thế khi cạnh tranh với các sản phẩm khác
2.3 Cơ sở lý thuyết
2.3.1 Ngôn ngữ Ruby
Ruby là một ngôn ngữ của sự cân đối Nhà phát minh của nó Yukihiro “Matz” Matsumoto kết hợp các đặc điểm hay từ các ngôn ngữ khác (Perl, Smalltalk, Eiffel, Ada, và Lisp) để tạo ra một ngôn ngữ cân bằng giữa lập trình hướng chức năng (functional programming) và lập trình hướng thủ tục (imperative programming) [1]
Sự phát triển của Ruby [1]
Sau khi được phát hành ra công chúng năm 1995, Ruby đã thu hút nhiều lập trình viên Vào 2006, Ruby đã được chấp nhận ở mức phổ cập, điều này được chứng minh qua số lượng lớn các nhóm người dùng hoạt động tích cực ở các thành phố trên thế giới và cả các hội nghị liên quan Ruby luôn bán hết vé
Tính đối tượng [1]
Khi bắt đầu viết Matz tham khảo những ngôn ngữ khác để tìm những cú pháp
lý tưởng cho ngôn ngữ mới của ông Ông nói “Tôi muốn tìm một ngôn ngữ scripting lợi hại hơn Perl, và hướng đối tượng hơn Python.”
Trong Ruby, mọi thứ đều là đối tượng (object) Tất cả thông tin và mã đều có thể gán thuộc tính (properties) và hành động (actions) Lập trình hướng đối tượng (Object-Oriented Programming) gọi thuộc tính với tên biến địa phương (instance variables) và gọi hành động là hàm (method) Cách tiếp cận thuần hướng đối tượng
có thể được thấy rõ ở những đoạn mã áp dụng một hành động lên một con số Ví dụ:
5.times { print "Tôi *yêu* Ruby!" }
Ở nhiều ngôn ngữ khác, số và một số kiểu mẫu nguyên thủy (primitive types) không phải là đối tượng Ruby chịu ảnh hưởng của ngôn ngữ Smalltalk qua việc gán hàm và biến đối tượng cho tất cả các kiểu mẫu (type) Điều này làm cho Ruby dể dùng hơn vì tất cả nguyên tắc về đối tượng được áp dụng thống nhất
Trang 18 Tính linh hoạt [1]
Ruby được xem là một ngôn ngữ linh hoạt, vì nó cho phép người dùng thay đổi các phần tử của nó Các phần tử tất yếu của Ruby có thể được xoá, định nghĩa lại tùy theo ý người dùng Các phần hiện hữu có thể thêm vào Ruby không cố gắng kìm chể lập trình viên
Lấy một ví dụ, phép cộng (toán học) có thể được thực hiện với toán tử (+) Nhưng nếu bạn muốn diễn đạt với từ cộng, bạn có thể thêm một hàm vào lớp Numeric của Ruby:
Hình 2.1 Ví dụ phép toán cộng trong Ruby
Các toán tử của Ruby chỉ là cách viết dễ đọc của các hàm Bạn có thể định nghĩa lại chúng nếu cần
Khai báo biến [1]
Trong khi Ruby rất ít dùng dấu và thay vào đó dùng từ tiếng Anh, có một vài dấu được sử dụng để miêu tả Ruby Ruby không có cần cú pháp để khai báo biến Nó
sử dụng cách đặt tên đơn giản để diễn tả phạm vi (scope) của biến
var là biến địa phương (local variable)
@var là biến đối tượng (instance variable)
$var là biến toàn cục (global variable)
Các dấu trên giúp lập trình viên xác định vai trò của từng biến Bên cạnh đó, không nhất thiết chèn self trước các phần tử đối tượng
Tính năng nâng cao
Ruby có rất nhiều chức năng khác, trong số đó bao gồm:
Ruby có chức năng xử lý ngoại lệ (exception) giống như Java hay Python, giúp dễ dàng đối phó với lỗi
Ruby có thể đọc các thư viện mở rộng (extension library) kiểu động nếu hệ thống (OS) cho phép
Ruby có luồng làm việc (threading) độc lập với cả hệ điều hành Thế nên, tất cả nền tảng khác mà Ruby chạy trên sẽ có multithreading bất kể hệ thống đấy có hỗ trợ hay không kể cả MSDOS
Trang 19 Ruby rất dễ mở rộng: nó được phát triển chủ yếu cho GNU/Linux, nhưng
có làm việc với các hệ UNIX khác, như Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS,
2.3.2 Giới thiệu về Ruby on Rails (Rails)
Nguồn gốc của Rails
Rails ra mắt công chúng lần đầu tiên vào năm 2004, Rails thoạt đầu được dùng như là nền tảng cho một công cụ quản lý dự án được đặt tên là Basecamp và được tạo
ra bởi nhà phát triển web David Heinemeier Hansson, một nhân viên của công ty phát triển web 37signals (Mỹ) Ban đầu họ xây dựng Rails không phải với mục đích là xây dựng ra một framework riêng, chủ tâm ban đầu là dùng nó để xây dựng các ứng dụng khác của 37signals Sau đó Heinemeier Hansson thấy tiềm năng của nó giúp cho anh
ấy làm các công việc dễ dàng hơn bằng cách rút ra các tính năng phổ biến như trừu tượng CSDL và khuôn mẫu (template) bên trong và sau đó nó trở thành phiên bản đầu tiên được tung ra của Ruby on Rails
Trên thực tế Rails được rút trích từ Basecamp, một chương trình mà được cộng đồng Rails cho là trong quá trình làm chương trình đó thì đã gặp và giải quyết được rất nhiều các vấn đề phức tạp Và Rails, một framework bắt nguồn từ chương trình
đó thì nó đã thừa kế được những sức mạnh từ dự án đó Vì vậy Rails luôn sẵn sàng
có thể giải quyết được các vấn đề thực tế tồn tại trong quá trình phát triển web Ngoài
ra, ban đầu Rails được xây dựng ra còn với mục đích là để xây dựng các ứng dụng khác từ nó, bởi vậy Rails trước khi xuất hiện trên thế giới thì nó đã chứng minh được bản thân nó là một framework rất hữu dụng, chặt chẽ và toàn diện
Sau khi phiên bản đầu tiên được tung ra thì cộng đồng Rails cũng đã đóng góp
bổ sung, mở rộng nó và sửa các lỗi được tìm thấy Và phiên bản mới nhất của Rails bây giờ là phiên bản 4.2
Triết lý của Rails [2]
Rails ra đời cũng như một số framework khác, nó cũng có triết lý riêng của mình Bạn cũng có thể phần nào thấy sự khác biệt của Rails thông qua triết lý của nó Triết lý của Rails được định hướng bằng cặp khái niệm: “DRY and convention over configuration” nghĩa là đừng lặp lại chính mình và sự ngầm định thay cho cấu hình
DRY từ viết tắt của “Don’t Repeate Yourself”, tức là mỗi phần được biết trong
hệ thống nên sẽ được diễn tả chỉ ở một nơi duy nhất hay hiểu đơn giản là các đoạn code, đoạn hàm chức năng, các định nghĩa CSDL sẽ được đặt tại đâu đó trong dự
án và thật dễ dàng, từ mọi vị trí trong dự án bạn có thể gọi nó ra và sử dụng Rails sử dụng sức mạnh của Ruby để mang lại điều đó Khi bạn quyết định thay đổi hoạt động của một ứng dụng mà dựa trên nguyên tắc DRY, bạn không cần sửa đổi nhiều code của ứng dụng Trong khi điều này có lẽ là một điều phức tạp trước đây, đối với rails
nó thực sự đơn giản Ví dụ, thay vì copy và dán đoạn code với một tính năng tương
tự nào đó, bạn phát triển ứng dụng web của bạn theo cách lưu giữ đoạn code chung này tại một nơi và gọi nó lại ở nơi cần sử dụng Nếu hành động gốc cần thay đổi, bạn
Trang 20chỉ cần sửa đổi nó một lần tại một vị trí, thay cho việc phải sửa lại tại các nơi khác nhau trong ứng dụng
Sự ngầm định thay cho cấu hình (Convention over configuration)
Khái niệm “sự ngầm định thay cấu hình” để cập tới thực tế rằng Rails thừa nhận một số thứ mặc định khi xây dựng một ứng dụng web điển hình Không giống như một số framework khác, yêu cầu bạn phải từng bước cấu hình để
xử lý trước khi cho bạn chạy một ứng dụng dù là đơn giản nhất Các thông tin cấu hình đó thường được lưu giữ trong một file XML, các file đó ngày một lớn lên và rất phiền phức cho công việc bảo trì, cụ thể bạn có thể thấy điều này rất rõ ở Java Trong nhiều trường hợp, bạn bị ép phải lặp lại toàn
bộ việc cấu hình khi bắt đầu một dự án mới Trong khi đó, Rails ban đầu tạo
ra từ một ứng dụng mẫu, kiến trúc của nó là mô hình MVC chuẩn Heinemeier Hansson chủ tâm tạo ra Rails theo một cách mà nó không cần quá tốn sức cho việc cấu hình, miễn là tuân theo một chuẩn ngầm định Kết quả là nó không yêu cầu một file cấu hình nào cả Trên thực tế, nếu bạn không có nhu cầu thay đổi những chuẩn ngầm định này, Rails thực sự chỉ cần một file cấu hình ngắn và đơn giản để mà bạn chạy ứng dụng của bạn File đó mục đích là tạo kết nối tới CSDL
Khi làm việc với Raills, bạn sẽ thấy rất rõ sự ngầm định của Rails được thể hiện ở rất nhiều trường hợp Ví dụ ngay khi tạo một dự án với Rails Rails
đã mặc định tạo ra một dự án theo mô hình MVC Hay đơn giản là khi đặt tên một mô hình dữ liệu (model), thì Rails cũng sẽ ngầm định tên của model đấy là một chữ in hoa, số ít và bảng dữ liệu mà nó liên kết là một chữ thường
số nhiều Ví dụ model là Book thì tên bảng dữ liệu sẽ được nghi là books
Việc ngầm định này ban đầu có thể sẽ khiến người lập trình cảm thấy hơi khó chịu vì Rails sẽ không khuyến khích bạn đặt tên tùy ý Tuy nhiên khi quen nó, bạn sẽ thấy nó rất thú vị, vì giúp bạn tập trung vào viết code, cũng như giúp bạn đặt tên theo chuẩn điều này giúp ích khi bảo trì hay đọc lại code sẽ giúp bạn dễ dàng hiểu và nhận ra mỗi file là gì Ngoài ra cấu hình ngầm định còn giúp người lập trình tiết kiệm khá nhiều thời gian cho việc cấu hình
Tự động sinh code trong Rails [2]
Ta cũng có thể nói đến Rails với việc sinh code tự động Khi phát triển trên Rails, có các thư mục hay file là nơi để điền code vào và tất cả các phần trong ứng dụng tương tác với nhau một cách chuẩn hóa Hay nó đã chuẩn bị sẵn một bộ khung chương trình trước, như vậy sẽ tiết kiệm thời gian và giảm tải những công việc giống nhau lập lại nhiều lần Và nhờ có bộ khung đã định nghĩa sẵn này, Rails cung cấp các generate, rake, script cho phép bạn nhanh chóng tạo, xóa một số template để bạn định nghĩa model, view, controller hay ngay cả database trong CSDL
Trang 21 Kiến trúc Model-View-Controller [2]
Kiến trúc mà Rails sử dụng là kiến trúc Model-View-Controller (MVC), một kiến trúc mà có rất nhiều các framework đang sử dụng MVC ra đời nhằm phân chia các thành phần có liên quan với nhau và khi cần thì dễ dàng móc nối lại Từ đó làm cho việc viết code và bảo trì dễ dàng hơn
Model là phần chủ yếu chú trọng tới dữ liệu Nó cho phép bạn đặt ra các quy tắc với dữ liệu hay quy tắc về nghiệp vụ để thực hiện với dữ liệu
View là phần chịu trách nhiệm sinh ra giao diện người dùng, thông thường được dựa trên dữ liệu trong model
Controllers chịu tránh nhiệm phối hợp ứng dụng Controller nhận sự kiện từ bên ngoài (thường là trình duyệt), tương tác với Model và hiển thị phù hợp với người xem
Ngoài những ưu điểm chung của framework, Rails cũng có điểm khác biệt của
nó do Rails tích hợp nhiều công nghệ khác vào Rails mà những framework khác không có
Những ưu điểm nổi bật của Rails [2]
Rails có rất nhiều ưu điểm giúp cho các nhà lập trình nhanh chóng phát triển một ứng dụng web Giúp cho việc bảo trì ứng dụng cũng trở nên dễ dàng hơn Để làm được điều đó là sự hợp nhất của một tập hợp nhiều thành phần nhỏ trong kiến trúc cũng như là ngôn ngữ mà Rails sử dụng Sau đây là một số thành phần đã đóng góp vào sự thành công của framework Ruby on Rails
Sự linh hoạt của ngôn ngữ Ruby mà Rails sử dụng
Sự trừu tượng hóa CSDL trong Rails với ActiveRecord:
Chúng ta luôn muốn ứng dụng web của chúng ta lưu giữ thông tin của chúng trong các mối quan hệ về CSDL Tuy nhiên để kết hợp giữa việc lập trình hướng đối tượng với các quan hệ trong CSDL lại không phải là chuyện đơn giản Các đối tượng là tất cả gồm dữ liệu và các phép toán, còn CSDL là tất
cả các bộ giá trị Ta có thể dễ dàng mô tả nó bằng thuật ngữ quan hệ tuy nhiên nó lại trở nên khó cho việc code trong lập trình hướng đối tượng Qua thời gian, cộng đồng đã tìm ra cách để làm cho sự hòa hợp giữa các quan hệ
dữ liệu và hướng đối tượng trở nên thống nhất hơn Rails đã biết cách trừu tượng CSDL, giúp cho các nhà lập trình có thể cảm thấy việc tương tác với các quan hệ dữ liệu trở nên đơn giản hơn trong lập trình
ActiveRecord là một tầng ánh xạ quan hệ với đối tượng (object-relational mapping hay ORM) được hỗ trợ bởi Rails ActiveRecord được xây dựng gần giống tiêu chuẩn mô hình ORM Mô hình ORM cho phép các bảng ánh
xạ tới các lớp, các hàng tới các đối tượng và các cột tới các thuộc tính Nếu một CSDL có một bảng được gọi là orders, chương trình của chúng ta sẽ có một lớp được đặt tên là Order Tuy nhiên nó không giống hầu hết các thư viện ORM chuẩn bởi cách nó được cấu hình Bằng cách sử dụng bộ mặc
Trang 22định nhạy bén, Active Record làm giảm tải lượng cấu hình mà nhà phát triển bình thường sẽ phải thực hiện
Sự hỗ trợ rất lớn khi phát triển trang web với Ajax:
Các website truyền thống về bản chất là gửi dữ liệu từ các form, được nhập bởi người sử dụng, tới một web services Web services sẽ trả lời bằng việc gửi về một trang web mới Do web services phải tạo ra một trang web mới mỗi lần như vậy nên các ứng dụng chạy chậm hơn
Trong khi đó, với các website sử dụng Ajax có thể gửi các yêu cầu tới web services để nhận về chỉ những dữ liệu cần thiết, thông qua việc dùng SOAP hoặc một vài web services dựa trên nền tảng XML cục bộ khác Trên máy Client, JavaScript sẽ xử lý các đáp ứng của máy chủ Kết quả là trang web được hiển thị nhanh hơn vì lượng dữ liệu trao đổi giữa máy chủ và trình duyệt web giảm đi rất nhiều Thời gian xử lý của web services cũng vì thế
mà được giảm theo vì phần lớn thời gian xử lý được thực hiện trên máy khách của người dùng
Việc Ajax có mặt trong Rails có phần bắt nguồn từ lịch sử của Rails Rails ban đầu được xây dựng để phát triển các ứng dụng sản phẩm của công ty 37signals, khi đó các nhà phát triển cần sử dụng các chức năng Ajax Việc viết Ajax trực tiếp bằng Javascript gây ra nhiều khó khăn, mà mất nhiều công sức Trong quá trình đó, công ty đã quyết định xây dựng Ajax trong Rails, các hàm chức năng của Ajax được đưa vào trong framework Kết quả
là Ruby on Rails trở thành một trong những framework đầu tiên đưa công nghệ Ajax vào framework
Có hai khía cạnh trong vấn đề Ajax/Rails Đầu tiên đó là framework Rails
đã sử dụng cả hai framework Javascript là Prototype và script.aculo.us, gói chúng lại trong Rails Từ đây Rails xây dựng các helper, cái mà cho phép chúng ta dễ dàng sử dụng công nghệ Ajax mà không cần phải gõ Javascript Thay vào đó là những câu lệnh đơn giản, dễ nhớ sẽ tự động sinh ra javascript khi chạy ứng dụng
Trang 23CHƯƠNG III: THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP 3.1 Thiết kế hệ thống
3.1.1 Các thực thể chính
Bảng condo: Chung cư
name: Tên chung cư
description: Thông tin mô tả
image_path: Hình ảnh đại diện
Bảng users: Người dùng
username: Biệt danh
email: email (dùng để đăng nhập)
password: Mật khẩu
avatar_path: Hình đại diện
name: Họ và tên người dùng
phone: Số điện thoại
city: Tỉnh thành
country: Quốc gia
Bảng bookings: Danh sách đăng ký sử dụng dịch vụ
date_use: Ngày sử dụng
date_expiry: Ngày hết hạn thanh toán phí
data: Lưu thông tin (người đặt, phí thuê, đặt cọc, thời gian)
status: Chấp nhận yêu cầu hay không
Bảng time_slots: Danh sách thời gian
slot_start: Thời gian bắt đầu
slot_end: Thời gian kết thúc
Trang 24 Bảng events: Sự kiện
name: Tên sự kiện
date: Ngày áp dụng
time_start, time_end: Thời gian áp dụng
location: Nơi diễn ra sự kiện
organiser: Người tổ chức
description: Mô tả chi tiết
Bảng event_images: Hình ảnh của sự kiện
image_path: Hình ảnh
Bảng bulletins: Thông báo
title: Tiêu đề thông báo
content: Nội dung thông báo
image_path: Hình ảnh thông báo
Bảng form_categories: Nhóm biểu mẫu
name: Tên nhóm biểu mẫu
Bảng forms: Biểu mẫu
title: Tên biểu mẫu
file_path: File biểu mẫu
content Nội dung
Bảng privileges: Khuyến mãi
title: Tiêu đề khuyến mãi
date: Ngày áp dụng
date_detail: Thời gian cụ thể
image_path: Hình ảnh khuyến mãi
Mặc định đối với tất cả các bảng đều có 3 trường là: id: khóa tự tăng, created_at: ngày tạo, updated_at: ngày update cuối cùng
Trang 253.1.2 Mô hình CSDL quan hệ
Hình 3.1: Mô hình CSDL
Đây là mô hình CSDL mô tả mối quan hệ giữa các chức năng của hệ thống, mặc định tất cả các bảng đều có 3 trường id, created_at, updated_at Về việc tương tác với CSDL thì Rails đã hỗ trợ người dùng tạo bảng tạo quan hệ thông qua ActiveRecord trong Rails, do đó người lập trình không cần tạo CSDL trước, mà chỉ cần khai báo thông tin và quan hệ giữa các bảng
Trang 263.1.3 Usecase model
Mô hình
Hình 3.2: Usecase model – Web quản lý Đây là mô hình usecase tổng quan các chức năng trong web quản trị Đối với web quản trị thì chỉ những user được cấp quyền mới có thể sử dụng