BÁO CÁO THỰC TẬP CHUYÊN NGÀNH
Đề tài:
Tìm hiểu EF, ứng dụng xây dựng chương trình
Quản lý khu trọ
Lời nói đầu
Một trong những yêu cầu cấp bách hiện nay là đưa CNTT vào
công tác quản lý, nhằm làm giảm bớt sức lao động của con người,
tiết kiệm thời gian, tăng độ chính xác, thu hẹp không gian lưu trữ,
tránh thất thoát và đảm bảo tính an toàn của dữ liệu.
Qua quá trình học tập tại nha trang em nhận thấy việc ứng
dụng công nghệ thông tin đang ngày càng được thể hiện rõ nét từ
việc sử dụng giấy tờ sổ sách trong công việc quản lý thì nay việc sử
dụng các phần mềm ngày một rộng rãi, đặc biệt các lĩnh vực như
quản lý nhà hàng, khách sạn, siêu thị Bên cạnh đó vẫn còn một số
lĩnh vực chưa được áp dụng CNTT như quản lý khu trọ, quầy tạp
hóa,…Việc quản lý hầu như làm trên giấy tờ, sổ sách, các công việc
liên quan đến tính toán đều được thực hiện bằng tay, làm mất rất
nhiều thời gian của người quản lý. Khu trọ XXX cũng đang gặp phải
những khó khăn như vậy và giải pháp được lựa chọn ở đây là ứng
dụng CNTT vào việc quản lý cho khu trọ này nhằm giảm bớt các khó
khăn trong công việc mà người quản lý gặp phải.
Để tránh việc mất mát, hư hỏng giấy tờ sổ sách, tất cả các
thông tin được lưu trữ trong cơ sở dữ liệu và được quản lí trên máy
tính. Việc đó làm cho độ an toàn của dữ liệu tăng lên, tốc độ tính
toán nhanh hơn . Để truy vấn tới dữ liệu cách thông thường là sử
dụng câu lệnh SQL, cách này đòi hỏi người phát triển phải bỏ ra
nhiều thời gian cho việc lập trình. Ngày nay để tiết kiệm thời gian
và công sức người ta dùng các công cụ ORM, được hiểu như là kỹ
thuật ánh xạ từ mô hình đối tượng với các table trong cơ sở dữ liệu
quan hệ. Trong đó các đối tượng ánh xạ với các bảng và quan hệ
của table trong database sẽ được ánh xạ với sự ràng buộc liên quan
chức năng hệ thống tránh các truy cập không được phép.
Để xây dựng các chức năng đáp ứng các yêu cầu công việc
trong khoảng thời gian giới hạn là tám tuần, công cụ Entity
Framework được áp dụng và hướng tiếp cận mà em lựa chọn là
Database First, cách này dể dàng, nhanh chóng vì CSDL đã được em
thiết kế trong thời gian phân tích thiết kế hệ thống của khu trọ.
Chương 2: Cơ sở lý thuyết
2.1 Phân tích thiết kế
2.1.1 phương pháp Merise
- Ý tưởng cơ bản của phương pháp MERISE
Mặt thứ nhất: Quan tâm đến chu kỳ sống của hệ thống. Một
hệ thống thông tin luôn trải qua bốn giai đoạn: Thai nghén - Sinh
sản - Quản trị - Chết. Thời gian sống này đối với hệ thống tổ chức
lớn có thể kéo dài từ 10 - 15 năm.
Mặt thứ hai: Đề cập đến chu kỳ nhận thức về hệ thông tin (còn
được gọi là chu kỳ trừu tượng). Sự hiểu biết về hệ thống thông tin
trải qua ba mức: Mức quan niệm, mức logic (tổ chức) và cuối cùng
là mức vật lý.
Mặt thứ ba: Mặt này có liên quan đến chu kỳ phát triển của hệ
thống. Một hệ thống thông tin luôn trải qua 3 giai đoạn: Phân tích,
thiết kế và thực hiện.
- Nội dung của phương pháp MERISE
Mức quan niệm: Là mức cảm nhận đầu tiên để xác định hệ
thống thông tin, ở mức này cần trả lời câu hỏi: Hệ thống thông tin
cần những yếu tố gì? Chức năng ra sao? Gồm những dữ liệu nào và
qui tắc quản lý như thế nào? Và tại sao có những yếu tố này? Tại
sao có những chức năng này? – Trả lời câu hỏi: What? Why?
Mức tổ chức hay logic: Là mức tổng hợp các yếu tố đã nhận
diện ở mức quan niệm. Trong mức này, cần phải trả lời được các câu
hỏi: Ai làm? Làm ở đâu và làm khi nào? Who? Where? When?
(ví dụ như sử dụng dịch vụ của các cổng thanh tóan trực tuyến như
VeriSign, Paypal…).
- Data Access
Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất
dữ liệu của ứng dụng. Thường lớp này sẽ sử dụng các dịch vụ của
các hệ quản trị cơ sở dữ liệu như SQL Server, Oracle,… để thực hiện
nhiệm vụ của mình.
2.2 Các công cụ và ngôn ngữ lập trình
2.2.1 Bộ công cụ SQL Server 2012
Microsoft SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ
(relational database management system - RDBMS) do Microsoft
phát triển. SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ máy
mạng tính hoạt động theo mô hình khách chủ cho phép đồng thời
cùng lúc có nhiều người dùng truy xuất đến dữ liệu, quản lý việc
truy nhập hợp lệ và các quyền hạn của từng người dùng trên mạng.
SQL có nhiều phiên bản, trong khuôn khổ bài thực tập này em chọn
phiên bản SQL Server 2012.
SQL Server 2012 cho phép các tổ chức có thể chạy hầu hết
các ứng dụng phức tạp của họ trên một nền tảng an toàn, tin cậy và
có khả năng mở rộng, bên cạnh đó còn giảm được sự phức tạp trong
việc quản lý cơ sở hạ tầng dữ liệu. SQL Server 2012 cung cấp một
nền tảng tin cậy và an toàn bằng cách bảo đảm những thông tin có
giá trị trong các ứng dụng đang tồn tại và nâng cao khả năng sẵn
có của dữ liệu. SQL Server 2012 giới thiệu một cơ chế quản lý cách
tân dựa trên chính sách, cơ chế này cho phép các chính sách có thể
được định nghĩa quản trị tự động cho các thực thể máy chủ trên
một hoặc nhiều máy chủ. Thêm vào đó, SQL Server 2012 cho phép
thi hành truy vấn dự báo với một nền tảng tối ưu.
Nền tảng lập trình dữ liệu toàn diện của Microsoft cho phép
xây dựng các ứng dụng dữ liệu hướng đến PC, thiết bị di động, máy
Visual Studio 2013 cung cấp nhiều tính năng nâng cao hiệu quả
hoạt động, chế độ hoàn chỉnh tự động, chế độ tự điều chỉnh màu,
chế độ tra cứu phương pháp, kiểm tra lỗi đánh máy và lỗi cú pháp,
phân tích lại mã, quản lý các đoạn mã v.v LINQ (Language-
Integrated Query), tập hợp các phần mở rộng cho ngôn ngữ C# và
Visual Basic để giúp nhà phát triển có một cách tiếp cận nhất quán
và nếu cần truy vấn & chuyển đổi các tập hợp đối tượng, dữ liệu
ADO.NET, XML, cơ sở dữ liệu SQL Server thì sẽ viết ít mã hơn.
- Sử dụng công cụ tích hợp
Visual Studio 2013 cung cấp một bộ công cụ tích hợp nhưng không
phải là để viết mã. Hệ thống dự án Visual Studio sẽ giúp nhà phát
triển quản lý nhiều khía cạnh trong nỗ lực phát triển phần mềm,
bao gồm cả việc cài đặt và triển khai phần mềm. Trong một dự án,
các tính năng như Web Forms Designer, Windows Forms Designer,
Data Designer, Data Explorer, Server Explorer, công cụ tạo chương
trình, công cụ tìm và khắc phục lỗi và cả một chương trình trợ giúp
tích hợp sẽ liên kết với nhau giúp nhà phát triển làm việc hiệu quả
hơn.
2.2.3 Ngôn ngữ C#
C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần
component, lập trình hướng đối tượng. Những tính chất đó hiện diện
trong một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ
những điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng
của hai ngôn ngữ mạnh nhất đó là C++ và Java.
Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++,
nhưng nó được tạo từ nền tảng phát triển hơn. Microsoft bắt đầu với
công việc trong C và C++ và thêm vào những đặc tính mới để làm
cho ngôn ngữ này dể sử dụng hơn. Nhiều trong số những đặc tính
này khá giống với những đặc tính có trong ngôn ngữ Java. Không
dừng ở lại đó, Microsoft đưa ra một số mục đích khi xây dựng ngôn
hết) những gì liên quan đến truy cập dữ liệu.
Entity Framework có các đặc tính nhắm đến các ứng dụng
doanh nghiệp (“Enterprise Scenarios”). Trong một doanh nghiệp,
một CSDL thông thường được kiểm soát bởi DBA (người quản trị
CSDL), cấu trúc của CSDL thông thường được tối ưu cho việc lưu trữ
(hiệu năng, tính toàn vẹn, phân hoạch) hơn là cho một mô hình ứng
dụng tốt, và có thể thay đổi qua thời gian khi dữ liệu và việc sử
dụng phát triển lên. Với ý tưởng này, Entity Framework được thiết
kế xung quanh việc xây dựng một mô hình dữ liệu hướng tới ứng
dụng, ít phụ thuộc, thậm chí có thể khác một chút so với cấu trúc
CSDL thực sự. Ví dụ, chúng ta có thể ánh xạ một lớp đơn (hay “thực
thể”) và nhiều table/view, hay ánh xạ nhiều lớp vào cùng một
table/view. Chúng ta có thể ánh xạ vào một cấu trúc phân cấp vào
một table/view đơn (như trong LINQ to SQL) hay vào nhiều
table/view (ví dụ: person, customer, employee có thể nằm trong các
bảng riêng biệt vì customer và employee chỉ chứa thêm một số
thông tin không có trong person, hoặc lặp lại các cột từ bảng
person). Chúng ta có thể nhóm các thuộc tính vào các kiểu phức
hợp (“complex”, hay “composite”), ví dụ một kiểu Customer có thể
có thuộc tính “Address” với kiểu Address có các thuộc tính Street,
City, Region, Country và Postal). Entity Framework cũng cho phép
chúng ta biểu diễn quan hệ nhiều-nhiều một cách trực tiếp, mà
không cần tới bảng kết nối như một thực thể trong mô hình dữ liệu,
và có một đặc tính mới được gọi là “Deˆning Query”, có thể được
dùng cho việc biểu diễn một bảng ảo với dữ liệu lấy từ một câu truy
vấn (ngoài trừ việc cập nhật phải thông qua một stored procedure).
Khả năng ánh xạ mềm dẻo này, bao gồm tùy chọn dùng các stored
procedure để xử lý các thay đổi, có thể được thực hiện chỉ bằng
cách khai báo, hoặc chỉnh sửa lại khi yêu cầu thay đổi, mà không
cần phải biên dịch lại ứng dụng.
với các table của database mà chúng ta cần làm việc hoặc
muốn tạo ra. Với hướng tiếp cận này, chúng ta sẽ sử dụng
class DbContext thay vì ObjectContext để thao tác với
database. Việc sử dụng Code First đòi hỏi chúng ta phải thực
hiện các công việc một cách thủ công nhưng bù lại nó linh
hoạt và được sử dụng rất phổ biến.
2.3.3 Đặc điểm của Entity Framework
- Sử dụng DbContext
DbContext là đối tượng UnitOfWork, chính là mẫu thiết kế về
truy xuất CSDL khá thông dụng. Khi áp dụng mẫu này, chúng ta sẽ
có một đối tượng theo dõi các thay đổi của dữ liệu, và đối tượng đó
sẽ quản lý việt cập nhật những thay đổi đến CSDL. Điều này cũng
có nghĩa là DbContext sẽ giữ bản sao chép cục bộ của dữ liệu (ở
CSDL) với những thay đổi chưa được cập nhật.
Đối tượng DBContext phải có thời gian sống ngắn, mẫu Unit Of
Work khuyên chúng ta nên có đối tượng UnitOfWork cho mỗi giao
dịch. Bởi vì đối tượng này giữ bản sao của dữ liệu và những thay đổi
của nó, cho nên nó phải nhanh chóng cập nhật CSDL để phòng
trường hợp có truy vấn khác đến dữ liệu này.
Chúng ta hầu như không thể xử lý được mọi tình huống truy
xuất/cập nhật đồng bộ. Nhưng việc giảm thời gian sống của
DbContext càng ngắn càng tốt, vì chúng ta đang giảm nguy cơ xảy
ra các mâu thuẫn khi xử lý đồng bộ như đã nêu trên.
Với lập trình web, ta nên giữ đối tượng DbContext sống trong
vòng đời một web request đến ứng dụng. Nếu ta lấy lên quá nhiều
dữ liệu, DbContext sẽ làm cho trang web chạy chậm lại, vì vậy
chúng ta nên kết thúc vòng đời của DbContext càng sớm càng tốt,
và vòng đời của DbContext được gắn với vòng đời của mỗi request
là điều nên làm.
Việc tạo mới và hủy một đối tượng không làm chúng ta quá
đổi cho các đối tượng và áp dụng các thay đổi để lưu trữ dữ liệu.
Các ObjectStateManager giữ tài liệu tham khảo của tất cả các đối
tượng. Khi một giao dịch xảy ra, các ObjectContext theo dõi thứ tự
của các hoạt động và tạo ra SQL để thực hiện các hoạt động có hiệu
quả.
Khi chúng ta truy vấn một đối tượng với các ObjectContext,
thông tin về các đối tượng được lưu trữ trong bộ quản lý trạng thái
ObjectContext. Và, khi chúng ta gọi SaveChanges () phương pháp
của ObjectContext, ObjectContext tìm kiếm tất cả các đối tượng
trong ObjectStateManager và làm những hành động thích hợp trên
mỗi đối tượng.
- Có thể làm việc với các CSDL: Oracle, DB2, MySQL, SQL Server
- Tạo ra ˆle .edmx, .csdl, .msl, .ssdl hoặc các ˆle class .cs thông
thường
- Hỗ trợ các kiểu phức tạp
- Có thể tạo CSDL từ Model/Code đã thiết kế
- Có thể ánh xạ 1-1, 1-nhiều, nhiều-1, nhiều-nhiều giữa đối tượng
entity với table/view
Chương 3: Nội dung và kết quả thực tập:
3.1 Phân tích thiết kế
3.1.1 Quy trình hoạt động của hệ thống.
Khi có khách trọ đến thuê phòng ở, chủ trọ sẽ kiểm tra xem
còn phòng trống hay không. Nếu tất cả các phòng đã đầy thì chủ
trọ thông báo cho khách, ngược lại thì cho khách biết thông tin về
phòng như tên phòng, loại phòng, giá phòng, trạng thái của phòng
(đặt cọc, cần thêm người, sửa chửa), số người đang ở (nhỏ hơn hoặc
bằng bốn), cùng danh sách các thiết bị có trong phòng, giá cả các
dịch vụ như điện, nước. Nếu khách đồng ý thuê phòng thì chủ trọ
yêu cầu đóng tiền đặt cọc và ghi lại thông tin của khách như tên,
giới tính, ngày sinh, quê quán, số điện thoại cùng các thông tin cá
nghề nghiệp, địa chỉ nơi làm việc, số điện thoại, tiền nợ, trạng
thái, chú thích.
• Phòng: Mỗi phòng được quản lý các thông tin sau đây: Tên
phòng, loại phòng, giá phòng, trạng thái.
• Dịch vụ: Một dịch vụ của khu trọ được quản lý các thông tin
sau đây: Tên dịch vụ, giá dịch vụ, tính theo.
• Thiết bị: Mỗi thiết bị được quản lý các thông tin say đây: Tên
thiết bị, trạng thái, mô tả.
• Phiếu đăng ký: Mỗi phiếu đăng ký thuê phòng quản lý các
thông tin sau đây: Người đăng ký, phòng, ngày đăng ký, chú
thích.
• Hóa đơn: Mỗi hóa đơn đước tính toán từ: Tiền phòng, tiền tiền
điện nước và các chi phí khác cùng các thông tin như ngày
lập, trạng thái.
- Chức năng hệ thống
• Cập nhật thông tin các bảng: Dịch Vụ, Trạng Thái Phòng, Trang
Bị, Trạng Thái Trang Bị, Thiết Bị, Trạng Thái Hóa Đơn, Phòng,
Loại Phòng, Điện, Nước, Khách Trọ, Phiếu Đăng Ký, Người
Dùng, Quyền.
• Tính toán tiền điện nước
• Tìm kiếm các phòng còn trống và thông tin của phòng đó
• Tìm kiếm thông tin khách trọ
• Tìm kiếm hóa đơn
• Lập phiếu đăng ký thuê phòng
• Lập hóa đơn
• Lập danh sách hóa đơn của tất cả các phòng trong tháng
• Lập báo cáo quá trình sử dụng điện nước
• Lập báo cáo phiếu đăng ký trong tháng
• Báo cáo danh sách khách trọ
- Bảng giá các dịch vụ:
Nước (Mã Phòng, Tháng, Số Cũ, Số Mới)
Thiết Bị (Mã Thiết Bị, Tên Thiết Bị)
Trạng Thái Trang Bị (Mã Trạng Thái, Tên Trạng Thái)
Trang Bị (Mã Thiết Bị, Mã Phòng, Mã Trạng Thái, Mô Tả, Ngày Sửa
Gần Nhất, Chí Phí Sửa Chửa)
Trạng Thái Hóa Đơn (Mã Trạng Thái, Tên Trạng Thái)
Hóa Đơn (Mã Hóa Đơn, Mã Phòng, Ngày Lập, Tiền Phòng, Tiền Điện,
Tiền Nước, Tiền Khác, Mã Trạng Thái, Chú Thích )
- Mô hình vật lý dữ liệu
Quyền (Mã Quyền, Tên Quyền, Chức năng)
Tên cột Kiểu dữ liệu
Mã Quyền Tinyint
Tên Quyền nvarchar (10)
Chức năng Nvarchar(30)
Dữ liệu ví dụ:
Mã Quyền Tên Quyền Chức năng
1 Chủ trọ 11111 1101 101000 11 111
1011
2 Quản lý 11111 1111 111111 11 111
1111
Người Dùng (MaND, Tên, HoTen, GioiTinh, DienThoai, CMND,
QueQuan, Luong, Mật Khẩu, Mã Quyền)
Tên cột Kiểu dữ liệu
MaND Tinyint
Tên Nvarchar (50)
HoTen Nvarchar(40)
GioiTinh Bit
DienThoai Nvarchar(11)
CMND Nvarchar(12)
QueQuan Nvarchar(50)
Tính Theo Nvarchar (10)
Dữ liệu ví dụ:
Mã Dịch Vụ Tên Dịch Vụ Giá Dịch Vụ Tính Theo
1 Điện 3000 1 kwh
2 Nước 5000 1 m3
Loại Phòng (Mã Loại Phòng, Tên Loại Phòng, Giá Phòng)
Tên cột Kiểu dữ liệu
Mã Loại Phòng Tinyint
Tên Loại Phòng Nvarchar (10)
Giá Phòng Decimal (9,0)
Dữ liệu ví dụ:
Mã Loại Phòng Tên Loại Phòng Giá Phòng
1 Tầng một 1100000
2 Tầng hai 1000000
3 Tầng ba 900000
4 Tầng bốn 800000
Trạng Thái Phòng (Mã Trạng Thái, Tên Trạng Thái)
Tên cột Kiểu dữ liệu
Mã Trạng Thái Tinyint
Tên Trạng Thái nvarchar (10)
Dữ liệu ví dụ:
Mã Trạng Thái Tên Trạng Thái
1 Trống
2 Đầy
3 Sửa chữa
4 Đặt cọc
5 Cần người
Phòng (Mã Phòng, Tên Phòng, Mã Loại Phòng, Mã Trạng Thái)
Tên cột Kiểu dữ liệu
Mã Phòng Nchar(3)
TrangThai Bit
Chú Thích Nvarchar (100)
Dữ liệu ví dụ:
Mã
Khách
Trọ
Họ Tên Quê
Quán
Ngày
Sinh
Giới
Tính
Trạng
Thái
1 Nguyễn Văn
Tèo
Diên
Khánh –
Nha Trang
3/3/199
2
True True
2 Trần Văn
Lâm
Yên
Thành –
Nghệ An
2/3/198
5
True True
1839187
57
Nhân
Viên
GMC
Nha Trang
0965252 0360870 Sinh ĐH Nha 250000 Vay tiền
321 00067 Viên Trang 13/10/14
Phiếu Đăng Ký (Số phiếu, Mã Khách Trọ, Mã Phòng, Ngày Đăng Ký,
Chú Thích)
Tên cột Kiểu dữ liệu
Số phiếu Smallint
Mã Khách Trọ Smallint
Mã Phòng Tinyint
Ngày Đăng Ký Smalldatetime
Chú Thích Nvarchar (100)
Dữ liệu ví dụ:
Số phiếu Mã Khách
Trọ
Mã Phòng Ngày Đăng
Ký
Chú
Thích
1 11 1 10/9/2013
4 21 3 5/10/2013
2 33 4 1/10/2013
Điện (Mã Phòng, Tháng, Số Cũ, Số Mới)
Tên cột Kiểu dữ liệu
Mã Phòng Nchar(3)
Tháng Smalldatetime