Khái niệm về phụ thuộc hàm trong một quan hệ là một quan niệm có tầm quan trọng rất lớn đối với việc thiết kế mô hình dữ liệu.
Định nghĩa: Cho R(U) là một lược đồ quan hệ với U = { A1, .,An } là tập hợp thuộc tính.X và Y là tập con của U.
Nói rằng X->Y (đọc là X xác định Y hoặc Y phụ thuộc vào hàm X),nếu r là một quan hệ xác định trên R(U) sao cho bất kỳ hai bộ t1, t2 thuộc r mà t1 [X] = t2 [ X] th× t1[Y] = t2 [ Y ].
*Hệ tiêu đề Armstrong trong phụ thuộc hàm :
Gọi F là tất cả các phụ thuộc hàm với lược đồ quan hệ R (U) và X->Y là một phụ thuộc hàm,trong đó X,Y U. Khi đó ta có F+ là tập hợp tất cả các phụ thuộc hàm được sinh ra từ F khi sử dụng tiêu đề Armstrong được gọi là bao đóng của F.
100 trang |
Chia sẻ: Dung Lona | Lượt xem: 1446 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Quản lý thư viện, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ý các Structure Members (như FullName, Age ) cần phải được Declared với keyword Dim, Public, Private hay Friend, nhưng không thể dùng Protected vì Structure không thể Inherit từ một Structure khác. Sở dĩ, có dùng Private là vì bên trong Structure có thể có Property, Sub/Function. v. v..
Thay đổi trong Collections
VB6 hổ trợ Collection và sau nầy Windows Scripting Host Library cho ta collection kiểu Dictionary. VB.NET cho ta một thành phần collection rất hùng hậu trong Namespace System.Collections. Vì Collection là một trong những công cụ rất thông dụng và hiệu năng trong VB.NET nên ta sẽ có một bài dành riêng cho collection sau này.
Dưới đây là danh sách các collections ta sẽ dùng thường xuyên:
Collection
Chức năng
ArrayList
Dynamic Array tự động lớn lên khi elements được bỏ vào.
BitArray
Array chứa trị số Boolean (True/False).
HashTable
Collection chứa những cặp key-value data, cho ta dùng làm tự điển.
Queue
Chứa một FIFO (First In, First Out) structure.Element có thể là bất cứ Object loại nào.
Stack
Chứa một LIFO (Last In, First Out) structure.
SortedList
Chứa một danh sách những cặp key-value data được sắp theo thứ tự.
Arithmetic Operators mới
VB.NET cho ta thêm cách viết Arithmetic Operator mới mà C programmers quen từ lâu nay.
X += 4 tương đương với X = X + 4
Mess &= " text" tương đương với Mess = Mess & " text"
Arithmetic Operation
Trong VB6
Cách viết tắc mới
Cộng
X = X +5
X += 5
Trừ
X = X - 10
X -= 10
Nhân
X = X * 7
X *= 7
Chia
X = X / 19
X /= 19
Chia Integer
X = X \ 13
X \= 13
Lũy thừa
X = X ^ 3
X ^= 3
Ghép Strings
X = X & "more text"
X &= "more text"
Ta vẫn có thể tiếp tục dùng cách viết trong VB6, nhưng bây giờ có thêm một cách viết gọn hơn.
Short Circuit trong IF.. THEN Statement
Trong VB6, nếu ta viết:
Dim myInt as Integer
myInt = 0
If (myInt 0) And (17 \ myInt < 5 ) Then
Thì sẽ bị Division by Zero error, vì mặc dầu phần (myInt 0) là False, nhưng VB6 vẫn tiếp tục tính phần (17 \ myInt < 5 ), và tạo ra error vì 17 chia cho một số 0.
Trong vài ngôn ngữ lập trình khác, khi (myInt 0) là False thì nó không tính thêm nữa, tức là nó nói rằng khi một phần của AND là False thì nhất định kết quả của Logical Statement trong IF phải là False. Ðặc tính nầy gọi là Short-Circuit (đi tắt).
Nếu ta dùng code nói trên trong VB.NET, nó vẫn cho Division by Zero error giống như VB6. Tuy nhiên, nếu ta muốn dùng đặc tính Short-Circuit thì ta chỉ cần thay thế chữ And bằng AndAlso như sau:
Dim myInt as Integer
myInt = 0
If (myInt 0) AndAlso (17 \ myInt < 5 ) Then
Short-Circuit cũng áp dụng cho Logical OR khi ta thay thế chữ Or bằng OrElse để nói rằng khi phần đầu của OR là True thì nhất định kết quả của Logical Statement trong IF phải là True.
Không còn Set statement cho Object
Trong VB6 ta có thể viết:
Set x = New Product
Set w = x
Trong VB.NET sẽ được viết lại như sau:
x = New Product()
w = x
Bây giờ ta không cần phải nhớ dùng chữ Set khi nói đến Object.
Thay đổi trong cách viết Property routines
Dùng một Property duy nhất
Nếu trong VB6 ta viết:
Private mdescription as String
Public Property Let Description (Value As String)
mdescription = Value
End Property
Public Property Get Description() As String
Description = mdescription
End Property
Trong VB.NET Let và Get đuợc hợp lại trong một Property routine duy nhất và ta lại dùng chữ Set thay cho chữ Let (mặc dầu chữ Set không còn dùng cho Object như mới nói ở trên) như sau:
Private mdescription As String
Public Property Description() As String
Set (ByVal Value As String)
mdescription = Value
End Set
Get
Description = mdescription
End Get
End Property
ReadOnly và WriteOnly property
Bây giờ nếu Property là ReadOnly ta sẽ viết:
Public ReadOnly Property Age() As Integer
Get
Age = 3
End Get
End Property
hay WriteOnly ta sẽ viết:
Private _data As Integer
Public WriteOnly Property Data() As Integer
Set (ByVal Value As String)
_data = Value
End Set
End Property
Default Properties
Ta dùng Default keyword để tạo ra Default Property như sau:
Default Public Property Item(ByVal Index As Integer) as String
VB.NET bắt buộc ta phải ít nhất một parameter cho Default Property.
Dùng Reserved Word làm Procedure Name
Trong VB.NET ta có thể dùng Reserved Word làm Procedure Name bằng cách để nó giữa ngoặc vuông. Giả tỉ ta muốn dùng chữ Compare làm tên một Function, ta sẽ viết như sau:
Public Function [Compare] (ByVal v1 As Integer, ByVal v2 As Integer) As Boolean
Structured Error Handling
TRY... CATCH... FINALLY
VB.NET cho ta Structure TRY... CATCH... FINALLY... END TRY để xử lý error. Thí dụ như trong bài toán chia dưới đây, nếu bị Division by 0 error thì ta sẽ cho kết quả bằng 0. Dù có error hay không, program vẫn hiển thị kết quả trong Output Window qua statement Console. WriteLine( result) trong phần Finally:
Try
result = a / b ' if this section has error jump to Catch section
Catch
' only get here if an error occurs between Try and Catch
result = 0
Finally
' This section is optional, but is always executed whether there is an error or not
Console. WriteLine( result)
End Try
Nếu ta không code gì ở phần Catch thì có nghĩa là chúng ta có Handle Error nhưng lại không làm gì hết, do đó Program sẽ không bị lỗi. Ngược lại, nếu ta không dùng Try.. Catch, thì program sẽ báo lỗi.
Nếu muốn nhảy ra khỏi Try Structure bất cứ lúc nào ta có thể dùng Exit Try,
Những cách CATCH error
Ta có thể dùng Catch giống như Select Case để có một cách xử lý cho mỗi error:
Try
' Main code goes here
Catch When Err.Number=5
' handle Error 5
Catch
' handle other errors
End Try
Ta có thể Catch Error Exception data trong một variable để dùng nó như sau:
Catch e as Exception
MessageBox.Show (e.ToString)
Hai cách code ở trên có thể được gợp lại thành:
Catch e As Exception When Err.Number = 5
Thay đổi trong cách viết Sub/Function
Dùng dấu ngoặc khi gọi Procedure
Trong VB6, nếu không dùng keyword Call ta không dùng dấu ngoặc khi gọi Sub. Trong VB.NET ta luôn luôn dùng cặp dấu ngoặc, ngay cả khi không có parameter. Thí dụ:
ProcessData()
x = New Customer()
ByVal là Default cho mọi Parameters
Trong VB6, ByRef là default cho các parameters passed vô Sub/Function. Tức là, Sub/Function có thể vô tình làm thay thổi trị số nguyên thủy của parameter variables.
Trong VB.NET, ByVal là default cho các parameters passed vô Sub/Function. Do đó, nó sẽ tránh lỗi lầm nói trên.
Optional Parameter cần có trị số Default
Trong VB6 ta có thể dùng IsMissing để biết xem Optional parameter có hiện diện không. VB.NET đã bỏ IsMissing và bắt buộc ta phải cung cấp trị số Default cho Optional parameter trong phần procedure declaration giống như sau đây:
Public Sub VerifyInput (Optional ByVal InputData as String="")
trong thí dụ nầy ta cho Default value của Optional parameter InputData là Empty string.
Return Statement
Hãy xem một thí dụ dùng Function để return một Customer Object trong VB6:
Public Function GetCustomer (ByVal CustID As Long) As Customer
Dim objCust As Customer
Set objCust = New Customer
objCust.Load CustID
Set GetCustomer = objCust
End Function
Trong VB.NET ta có thể dùng Return Statement để Return kết quả của một Function thay vì dùng chính tên của Function.
Public Function GetCustomer (ByVal CustID As Long) As Customer
Dim objCust As New Customer(CustID)
Return objCust
End Function
Những chức năng Đối Tượng mới của VB.NET
VB.NET khắc phục những giới hạn về Đối Tượng (Object-Oriented) của VB6 và mang đến cho ta một ngôn ngữ lập trình hoàn toàn Object-Oriented (OO). Gần như mọi thứ trong VB.NET đều liên hệ với Object.
Classes và Objects, nguyên tắc Abstraction
Theo phương pháp đối tượng, program được thiết kế để một phần code đại diện cho một vật tương đương ngoài đời. Nó được gọi là Class.
Khi lập trình VB6 ta đã dùng những controls từ Toolbox như Textbox, Label, Listbox.. v. v.. Textbox là Class của các Objects Text1, Text2. Cũng như Label1, Label2 là những Objects tạo ra từ Class Label. Ta hay dùng hai từ Class và Object lẫn lộn nhau. Điều đó không quan trọng, miễn là ta biết rằng Class là một ý niệm Trừu tượng (Abstraction), còn Object là một vật thực hữu. Thường thường khi ta phân tích một vấn đề để thiết kế chương trình thì các Danh từ (Nouns) là những Classes. Giả dụ ta phân tích hoạt động của một Nhà Kho (warehouse). Ta có phòng chứa, ngăn tủ, bãi nhận hàng, xe nâng hàng, nhân viên.. v. v. , mỗi thứ đều có thể là một Object nên ta sẽ thiết kế một Class cho nó.
Fields, Properties, Methods và Events, nguyên tắc Encapsulation
Class CaSĩ diễn tả CaSĩ là người như thế nào. Như SốBàiHát là một Public Variable của Class, được gọi là Field có thể được đọc/viết trực tiếp. Còn Kiểu tóc (dài, ngắn, màu đen, có sọc nâu... ), Giọng hát (cao, trầm,.. ). là những Properties. Chúng cũng giống như Field nhưng được implemented (thi hành) bằng cách dùng procedures Property Get và Property Set. Property Set có thể được coded để kiểm soát nếu "Kiểu tóc" không thích hợp thì sẽ bị loại bỏ. Ngược lại, nếu "Kiểu tóc" thích hợp và được áp dụng thì ta sẽ thấy kết quả ngay là CaSĩ lại đẹp thêm ra. Thường thường Fields và Properties là các Danh từ (Nouns).
Inheritance (Thừa Kế)
Nguyên tắc Encapsulation nói trên cho phép ta dùng nhiều Objects của một hay nhiều Classes một cách an toàn, tức là không sợ Methods của các Objects giẫm chân lên nhau.
Polymorphism (Đa dạng)
Polymorphism là khả năng dùng Class Members trùng tên của Objects thuộc về các Classes khác nhau. Polymorphism thể hiện dưới nhiều hình thức:
Dùng OO trong VB.NET
Tạo một Class mới
Để một Class mới trong VB.NET IDE bằng cách dùng Menu Command Project | Add Class.Dialog Add New Item sẽ hiện ra, chọn Class trong số hình các Icons nằm trong khung bên phải của Dialog.
Source code của Class mới nầy sẽ được chứa trong một VB source file với extension vb. Trong VB.NET tất cả mọi VB source files đều có extension.vb. System sẽ nhận diện ra loại VB file (form, class, module,. v. v.. ) nhờ đọc content của file, chớ không dựa vào file extension.
Nếu bạn muốn đặt tên cho Class mới nầy là TheClass chẳng hạn, thì bạn có thể sửa tên nó trong Dialog. Khi bạn click button Open một file mới sẽ được cho thêm vào trong Project và nó chứa hai hàng code sau:
Public Class TheClass
End Class
2.7 Tạo một Class mới
Class Keyword
Trong một.vb file ta có thể viết nhiều Classes, code của mỗi Class nằm trong một Class... End Class block. Thí dụ:
Public Class TheClass
Public Sub Greeting()
MessageBox.Show("Hello world", MsgBoxStyle.Information, "TheClass")
End Sub
End Class
MessageBox.Show và MsgBoxStyle.Information trong VB.NET thay thế MsgBox và vbInformation trong VB6.
Classes và Namespaces
Nhắc lại là.NET dùng Namespace để sắp đặt các Classes cho thứ tự theo nhóm, loại. Namespaces được declared với một Block Structure giống như sau:
Namespace Vovisoft
Public Class TheClass
Public Sub Greeting()
MessageBox.Show("Hello world", MsgBoxStyle.Information, "TheClass")
End Sub
End Class
End Namespace
Muốn nói đến bất cứ Class, Structure, hay thứ gì được declared bên trong một Namespace... End Namespace block ta phải dùng tên Namespace trước. Thí dụ:
Private myObject As Vovisoft.TheClass
Một source file có thể chứa nhiều Namespaces, và bên trong mỗi Namespace lại có thể có nhiều Classes.
Ngoài ra, Classes thuộc về cùng một Namespace có thể nằm trong nhiều files khác nhau trong một VB.NET project.
Thí dụ ta có một source file với code như sau:
Namespace Vovisoft
Public Class TheClass
' Code
End Class
End Namespace
Và một source file khác trong cùng project với code:
Namespace Vovisoft
Public Class TheOtherClass
' Code
End Class
End Namespace
Vậy thì trong Namespace Vovisoft ta có hai Classes TheClass và TheOtherClass.
Nhớ là, by default, Root Namespace của một VB.NET project là tên của project ấy. Khi ta dùng Namespace block structure là chúng ta đang thêm một tầng tên vào Root Namespace. Do đó, trong thí dụ trên nếu tên project là MyProject thì, từ bên ngoài project ấy, ta có thể declare một variable như sau:
Private myObject As MyProject.Vovisoft.TheClass
Tạo ra Methods
Methods trong VB.NET có hai thứ: Sub và Function. Function thì phải return một kết quả. By default, parameters của Method là ByVal chớ không phải ByRef. Tức là nếu muốn parameter nào ByRef thì phải nhớ khai ra rõ ràng.
Nhắc lại là khi một variable được passed vào trong một method bằng ByVal thì system cho method đó một copy (bản sao) của variable, do đó, trị số của variable không bị thay đổi bởi công tác của method. Ngược lại, nếu một variable được passed vào trong một method bằng ByRef thì method dùng chính variable đó, do đó, trị số của variable có thể bị thay đổi bởi công tác của method.
Ta có thể giới hạn việc sử dụng một method bằng cách áp đặt một Access Modifier (sửa đổi quyền truy nhập) hay còn gọi là Scoping keyword (phạm vi hoạt động):
Private - chỉ cho phép code trong cùng Class được gọi.
Friend - chỉ cho phép code trong cùng project/component được gọi.
Public - cho phép ai gọi cũng được.
Protected - cho phép code trong subclasses (classes con, cháu) được gọi.
Protected Friend - cho phép code trong cùng project/component hay code trong subclasses được gọi.
Tạo ra Properties
Trong VB.NET ta chỉ dùng một routine duy nhất cho mỗi Property, với hai chữ Get và Set như sau (không còn dùng chữ Let của VB6 nữa):
Private mdescription As String
Public Property Description() As String
Set (ByVal Value As String)
mdescription = Value
End Set
Get
Description = mdescription
End Get
End Property
ReadOnly và WriteOnly property
Bây giờ nếu Property là ReadOnly ta sẽ lấy phần Set ra và viết:
Public ReadOnly Property Age() As Integer
Get
Age = 3
End Get
End Property
hay WriteOnly ta sẽ ấy phần Get ra và viết:
Private _data As Integer
Public WriteOnly Property Data() As Integer
Set (ByVal Value As Integer)
_data = Value
End Set
End Property
Default Properties
Default Property là property của Object mà program dùng khi ta chỉ cho tên của Object và không nói rõ property nào. Thí dụ trong VB6 khi ta code:
TextBox1 = "The house of rising sun"
VB6 hiểu rằng ta muốn dùng Default Property text của Textbox1 nên code ấy tương đương với:
TextBox1.text = "The house of rising sun"
Trong VB6 khi ta dùng keyword Set với tên của Object, thí dụ như:
Dim myTextBox As Textbox
Set myTextBox = TextBox1
program sẽ hiểu là ta muốn nói đến chính Object myTextBox. Nếu không thì nó biết ta muốn nói đến Object Default Property mà làm biếng code cho rõ ra.
Trong VB.NET Default Property phải là một Property array. Một Property array là một property được Indexed (nói đến từng Item bằng con số Index) giống như một array. Lý do chính của sự bắt buộc nầy là để khỏi lẫn lộn giữa hai trường hợp ta nói đến Default property của một Object hay chính Object ấy, vì trong VB.NET ta không còn dùng Set keyword cho Object assignment nữa (ta chỉ còn dùng keyword Set trong Property mà thôi).
Bây giờ hể muốn nói đến Default Property của Object thì phải dùng Index. Thí dụ để nói đến chính Object, ta code:
myValue = myObject
để nói đến Default Property Item 3 của Object, ta code:
myValue = myObject(3)
Sự thay đổi từ VB6 nầy có nghĩa là một property array procedure phải nhận một parameter. Thí dụ:
Private theData(100) As String
Default Public Property Data(ByVal Index As Integer) As String
Get
Data = theData(Index)
End Get
Set(ByVal Value As String)
theData(Index) = Value
End Set
End Property
Ta không thể viết:
TextBox1 = "Good morning!"
như trong VB6 được nữa, mà phải viết:
TextBox1.text = "Good morning!"
Vì Property Text không còn là Default Property của TextBox.
Overloading methods
Một trong những chức năng đa diện (Polymorphism) hùng mạnh nhất của VB.NET là overload (quá tải, có rồi mà còn cho thêm) một method. Overloading có nghĩa là ta có thể dùng cùng một tên cho nhiều methods - miễn là chúng có danh sách các parameters khác nhau, hoặc là parameter dùng data type khác nhau (td: method nầy dùng Integer, method kia dùng String), hoặc là số parameters khác nhau (td: method nầy có 2 parameters, method kia có 3 parameters).
Overloading không thể được thực hiện chỉ bằng cách thay đổi data type của Return value của Function. Phải có parameter list khác nhau mới được.
Dưới đây là thí dụ ta dùng Overloading để code hai Functions tìm data, một cái cho String, một cái cho Integer:
Public Function FindData(ByVal Name As String) As ArrayList
' find data and return result
End Function
Friend Function FindData(ByVal Age As Integer) As ArrayList
' find data and return result
End Function
Để ý là ta có thể cho mỗi overloading Function một phạm vi hoạt động (Scope on implementation) khác nhau. Trong thí dụ trên ta dùng Access Modifier Public cho Function đầu và Friend cho Function sau.
Object Lifecycle
Object Lifecycle (cuộc đời của Object) được dùng để nói đến khi nào Object bắt đầu hiện hữu và khi nào nó không còn nữa. Sở dĩ ta cần biết rõ cuộc đời của một Object bắt đầu và chấm dứt lúc nào là để tránh dùng nó khi nó không hiện hữu, tức là chưa ra đời hay đã khuất bóng rồi.
New method
Trong VB6, khi một Object thành hình thì Sub Class_Initialize được executed. Tương đương như vậy, trong VB.NET ta có Sub New(), gọi là Constructor. VB.NET bảo đảm Sub New() sẽ được CLR gọi khi Object được instantiated và nó chạy trước bất cứ code nào trong Object.
Nếu Sub Class_Initialize của một Class Object trong VB6 không nhận parameter thì Sub New() trong VB.NET chẳng những có nhận parameters mà còn cho phép ta nhiều cách để gọi nó. Sự khác biệt trong Constructors của VB6 và VB.NET rất quan trọng.
Phần 2: XÂY DỰNG CHƯƠNG TRÌNH
Chương 1: Khảo sát hệ thống
Lý do phát triển
Xuất phát từ yêu cầu cấp thiết của thực tiễn , tại hầu hết các đơn vị Thư viện ở nước ta hiện nay vẫn còn quản lý theo phương thức truyền thống. Đó là cách quản lý và lưu trữ trên giấy tờ, sổ sách. Phương thức này có rất nhiều hạn chế. Để quản lý được đầy đủ, chi tiết, và chính xác, hàng năm, Thư viện phải mất một khoản chi phí khá lớn cho việc mua nguyên liệu (giấy tờ, sổ sách, tư liệu). Hơn nữa, do đặc điểm chất liệu giấy rất nhanh hỏng, phải thường xuyên thay thế, nâng cấp, mỗi lần thay đổi là một lần phải sao chép sổ sách, bảo quản tư liệu.. tốn kém cả về chi phí đầu tư, vừa mất nhiều thời gian và sức lực. Hoạt động quản lý, tra cứu theo cách trên cũng chiếm rất nhiều thời gian, công sức của cả người thủ thư lẫn bạn đọc mà hiệu quả đạt được lại không cao. Trong điều kiện trình độ khoa học công nghệ còn kém, những thành tựu của nó chưa đủ để đáp ứng cho nhu cầu ứng dụng, phương thức quản lý truyền thống xét ở phương diện nào đó cũng đã phát huy tác dụng và giữ một vai trò quan trọng.
Ngày nay , cuộc cách mạng khoa học - công nghệ và những thành tựu của nó đang góp phần làm biến đổi nhanh chóng và sâu sắc mọi mặt của đời sống xã hội, trở thành công cụ không thể thiếu trong nhiều lĩnh vực hoạt động như: ứng dụng trong công tác quản lý, nghiên cứu, hỗ trợ công tác chuyên môn và trao đổi thông tin. Đặc biệt, nó càng trở nên quan trọng đối với các ngành liên quan tới tri thức, thông tin, tư liệu... như hoạt động thư viện.
Khảo sát hiện trạng
Một thư viện cần quản lý việc đăng ký, mượn và tra sách của các bạn đọc thư viện. Sau đây là phần mô tả theo các nghiệp vự hàng ngày của thư viện:
Nhân viên trong thư viện sẽ gọi mỗi một quyển sách là một đầu sách. Chúng được phân biệt với nhau bởi ID. Các đầu sách đó sẽ được viết bằng nhiều ngôn ngữ khác nhau. Sách được sắp xếp theo thể loại sách trong thư viện. Mỗi một thể loại thì được để ở một khu khác nhau. Các quyển sách thì sẽ có tác giả và nhà xuất bản cũng như nội dung tóm tắt khi độc giả yêu cầu muốn biết về cuốn sách đó. Khi bạn đọc muốn biết về nội dung của một cuốn nào đó nhân viên sẽ xem phần tóm tắt của quyển sách đó và trả lời bạn đọc. Để trở thành độc giả của thư viện thì mỗi bạn đọc phải đăng ký và cung cấp thông tin cá nhân như là địa chỉ, số điện thoại của mình. Bạn sẽ được cấp một thẻ với mã số bạn đọc để phân biệt. Thẻ này có giá trị là 6 tháng kể từ ngày đăng ký. Một tuần trước ngày hết hạn thì nhân viên thư viện sẽ thông báo cho độc giả biết để đăng ký gia hạn thêm.
a) Đăng ký chờ mượn sách:
Nếu bạn đọc muốn mượn một cuốn sách, nhưng cuốn này bạn đọc khác đang mượn, thì người này có thể đăng ký và chờ. Khi cuốn sách đó được trả về, thì thủ thư phải thông báo đến bạn đọc đăng ký trước nhất trong danh sách những bạn đọc đang chờ mượn sách đó.
b)Mượn sách:
Một cuốn sách có thể được mượn tối đa 14 ngày mỗi một độc giả sẽ được mượn tối đa 3 quyển sách. Nếu quá hạn, thì một tuần sau kể từ ngày đến hạn trả sách (ngay_hethan) mà sách vẫn chưa được trả, thủ thư sẽ gởi thông báo nhắc nhở bạn đọc đó trả sách.
Khi mượn sách, bạn đọc đem sách đến quầy để gặp trực tiếp thủ thư. Thủ thư sử dụng máy để đọc thẻ từ và chương trình hiển thị thông tin về bạn đọc mang thẻ đó như: tên, địa chỉ, điện thoại, và ngày hết hạn thẻ. Nếu thẻ nào gần sắp hết hạn hay đã hết hạn thì chương trình cũng sẽ cảnh báo thẻ đó. Ngoài ra, chương trình còn hiển thị thông tin về việc mượn trả sách của bạn đọc bao gồm: mã sách (masach), ngày mượn (ngay_muon), ngày đến hạn phải trả sách (ngay_tra) theo thứ tự sách nào mượn lâu nhất trước. Những sách nào quá hạn mượn hay gần sắp đến hạn sẽ được đánh dấu để làm nổi bật thông tin cho thủ thư biết.
Nếu tất cả thông tin về tài khoản của bạn đọc hợp lệ, thì thủ thư sẽ cho mượn sách.
c)Trả sách:
Khi sách được trả, thủ thư kiểm tìm kiếm mã độc giả và kiểm tra xem có đúng những quyển sách đã mượn hay không? Thông tin về tác giả, mã số bạn đọc, tên và ngày đến hạn trả sách xuất hiện trên màn hình.
Sau khi độc giả trả sách thì cập nhật lại trạng thái của đầu sách và cuốn sách.
d)Phát sinh báo cáo thống kê:
Thủ thư thường muốn biết các thông tin như:
Có bao nhiêu phiếu mượn sách thư viện trong năm qua?
Những cuốn sách nào hay được mượn?
Những cuốn sách nào ít được mượn ?
(số lần mượn bao nhiêu là nhiều hay ít do thủ thư quy định.)
Danh sách những độc giả hay mượn sách?
Tỷ lệ những phiếu mượn trả sách quá hạn?
3.Mẫubiểu liên quan
a.Thẻ độc giả
BM2:
Thẻ Độc Giả
Họ và tên:
Loại độc giả:
Ngày sinh:
Địa chỉ:
Email:
Ngày lập thẻ:
Người lập:
b.Thông tin sách
BM3:
Thông Tin Sách
Tên sách:
Thể loại:
Tác giả:
Năm xuất bản:
Nhà xuất bản:
Ngày nhập:
Trị giá:
Người Tiếp Nhận:
c.Danh sách của sách
BM4:
Danh Sách Sách
STT
Mã Sách
Tên Sách
Tác Giả
Số Lượt Mượn
Tình Trạng
1
d. Phiếu mượn sách
BM5:
Phiếu Mượn Sách
Họ tên độc giả:
Ngày mượn:
Ngày trả:
Trạng thái:
STT
Mã Sách
Tên Sách
Thể Loại
Tác Giả
1
2
Chương 2- PHÂN TÍCH THIẾT KẾ HỆ THỐNG
I-NHÓM CHỨC NĂNG THEO MẠCH CÔNG VIỆC
A. Nhóm quản lý
1. Quản lý đầu sách
- Quản lý thông tin đầu sách, các thông tin liên quan đến đầu sách, nội dung mô tả chi tiết về đầu sách, loại sách, trạng thái sách, tên sách, tựa đề sách, các ký hiệu phân loại sách, tác giá sách, năm xuất bản, số lần tái bản.
- Hỗ trợ tối đa việc tra cứu đầu sách theo tất cả các thông tin liên quan đên sách, kể cả phẩn mô tả và ghi chú của đầu sách.
2.Quản lý phân loại sách
- Quản lý cả các loại thông tin của một số dạng dữ liệu khác (tạp chí, bao chí, phim tư liệu, các dạng tài liệu khác,..).
3. Quản lý nhà xuất bản
- Quản lý thông tin nhà xuất bản, lưu trữ thông tin nhà xuất bản như phần quan trọng trong việc hỗ trợ tìm kiếm các loại tài liệu và đầu sách liên quan
4. Quản lý tình trạng sách
- Quản lý trạng thái sách, sách đang trong tình trạng phục vụ hay bảo dưỡng, đầu sách trong kho còn hay hết, có thể phục vụ nhu cầu muợn của đọc giả hay không?
5. Quản lý tác giả sách
- Quản lý thông tin tác giả sách, lưu trữ các thông tin liên quan đến tác giả nhằm tạo thuận lợi cho việc tìm kiếm các thông tin đầu sách dễ dàng và nhanh chóng.
6. Quản lý độc giả
- Quản lý thông tin đọc giả thông qua mã số, lập hệ thống thẻ mượn, thẻ thẻ đọc sách, các loại thẻ khác dành cho nhiều đối tượng bạn đọc trong thư viện. Quản lý hình ảnh độc giả.
7. Quản lý nhân viên
- Quản lý nhân viên (thủ thư) của thư viên, nhân viên trực ban, nhân viên chịu trách nhiệm trong từng vị trí đặc trưng, quản lý các đối tượng liên quan khác.
- Lập thời gian biểu, phân công công tác, phân ca làm việc.
8. Quản lý quyền và phân quyền
- Chế độ phân quyền hoàn chỉnh, nhằm phục vụ cho môi trường cộng tác và đa người dùng, phần quyền phân cấp do chính ban quản trị thư viên thực hiện.
B. Nhóm thống kê, báo cáo
1.Hệ thống báo cáo
- Báo cáo nhà sách
- Báo cáo nhà xuất bản
- Báo cáo tác giả sách
- Báo cáo bạn đọc
- Báo cáo phiếu mượn sách
2. Hệ thống thống kê
- Thống kê sách
- Thống kê nhà xuất bản
- Thống kê tác giả sách
- Các thống kê khách liên quan
II- BIỂU ĐỒ LUỒNG DỮ LIỆU
1.Biểu đồ mức ngữ cảnh
Sơ đồ phân cấp chức năng của hệ thống
1.2 Biểu đồ luồng dữ liệu mức 0
1.3 Biểu đồ luồng dữ liệu mức 1.0
1.4 Biểu đồ luồng dữ liệu mức 2.0
1.5 Biểu đồ luồng dữ liệu mức 3.0
1.6 Biểu đồ luồng dữ liệu mức 4.0
1.6 Biểu đồ luồng dữ liệu mức 5.0
III- PHÂN TÍCH THIẾT KẾ CƠ SỞ DỮ LIỆU
1.Các thực thể
- Sách
- Nhà quản lý
- Nhà xuất bản
- Tác giả
- Độc giả
- Nhân viên
- Phiếu mượn
2.Chuẩn hóa dữ liệu
Docgia(maDG,tenDG, gioitinh, namsinh, diachi, soDT, ngaycapthe, ngayhethan, trangthai)
Nhanvien(maNV, tenNV,gioitinh,diachi, soDT, matkhau, pass)
Nhaxuatban(manxb,tenNXB,diachi, Dienthoai,Email)
Tacgia(maTG,tenTG,Diachi,Dienthoai,Email)
Sach(masach,tensach,noidung,ngonngu,sotrang,soluong,maTG,maNXB
, maTL)
Theloaisach(maTL,tenTL)
Phieumuon(maNV, masach,madocgia,ngaytra,ngaymuon)
3.Sơ đồ quan hệ E-R
4.Sơ đồ vật lý
Độc giả
Nhân viên
Phiếu mượn
Nhà xuất bản
Sách
Thể loại
Tác giả
5. Giao diện người dùng
5.1 Kết Nối
5.2 Độc giả
Imports System.Data.SqlClient
Public Class FrmDocgia
Private Sub FrmDocgia_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim conn As New SqlConnection(str)
conn.Open()
Dim str1 As String = "select * from Docgia"
Dim da As New SqlDataAdapter(str1, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
End Sub
Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click
If radioNam.Checked Then
gt = "Nam"
Else
gt = "Nữ"
End If
Dim sqlstr As String
sqlstr = "Insert into Docgia values ('" + txtMaDG.Text + "',N'" + txtTenDG.Text + "',N'" + gt + "','" + CDate(dtpNgaysinh.Text) + "',N'" + txtDiachi.Text + "','" + txtSoDT.Text + "','" + CDate(dtpNgaycap.Text) + "','" + CDate(dtpNgayhan.Text) + "','0')"
Dim conn As New SqlConnection(str)
conn.Open()
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmDocgia_Load(sender, e)
MsgBox("Thêm độc giả thành công")
txtMaDG.Text = ""
txtTenDG.Text = ""
txtDiachi.Text = ""
dtpNgaysinh.Text = ""
dtpNgaycap.Text = ""
dtpNgayhan.Text = ""
txtSoDT.Text = ""
radioNam.Checked = False
radioNu.Checked = False
conn.Close()
Catch ex As Exception
MsgBox("Lỗi")
End Try
End Sub
Private Sub Xoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Xoa.Click
If MsgBox("Bạn có chắc muốn xóa không? ", MsgBoxStyle.YesNo, "Xóa độc giả") = MsgBoxResult.Yes Then
Dim sqlstr As String
sqlstr = "Delete from Docgia where MaDG='" + txtMaDG.Text + "'"
Dim conn As New SqlConnection(str)
conn.Open()
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmDocgia_Load(sender, e)
txtMaDG.Text = ""
txtTenDG.Text = ""
txtDiachi.Text = ""
dtpNgaysinh.Text = ""
dtpNgaycap.Text = ""
dtpNgayhan.Text = ""
txtSoDT.Text = ""
radioNam.Checked = False
radioNu.Checked = False
conn.Close()
Catch ex As Exception
MsgBox("Lỗi")
End Try
End If
End Sub
Private Sub btnSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSua.Click
If radioNam.Checked Then
gt = "Nam"
Else
gt = "Nữ"
End If
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstr As String
sqlstr = "Update Docgia set TenDG=N'" + txtTenDG.Text + "',Gioitinh=N'" + gt + "',Namsinh='" + CDate(dtpNgaysinh.Text) + "',Ngaycapthe='" + CDate(dtpNgaycap.Text) + "',Ngayhethan='" + CDate(dtpNgayhan.Text) + "',Diachi=N'" + txtDiachi.Text + "',SoDT='" + txtSoDT.Text + "' where MaDg='" + txtMaDG.Text + "'"
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmDocgia_Load(sender, e)
MsgBox("Cập nhật thành công!")
txtMaDG.Text = ""
txtTenDG.Text = ""
txtDiachi.Text = ""
dtpNgaysinh.Text = ""
dtpNgaycap.Text = ""
dtpNgayhan.Text = ""
txtSoDT.Text = ""
radioNam.Checked = False
radioNu.Checked = False
conn.Close()
Catch ex As Exception
End Try
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Try
txtMaDG.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString
txtTenDG.Text = DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString
If DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString = "Nam" Then
radioNam.Select()
Else
radioNu.Select()
End If
dtpNgaysinh.Text = DateValue(DataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString)
txtDiachi.Text = DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString
txtSoDT.Text = DataGridView1.Rows(e.RowIndex).Cells(5).Value.ToString
dtpNgaycap.Text = DateValue(DataGridView1.Rows(e.RowIndex).Cells(6).Value.ToString)
dtpNgayhan.Text = DateValue(DataGridView1.Rows(e.RowIndex).Cells(7).Value.ToString)
If DataGridView1.Rows(e.RowIndex).Cells(8).Value.ToString = True Then
txtTrangthai.Text = "Đang mượn sách"
Else
txtTrangthai.Text = "Chưa mượn sách"
End If
Catch ex As Exception
End Try
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
Me.Close()
End Sub
End Class
5.3 Sách
Imports System.Data.SqlClient
Public Class FrmSach
Private Sub FrmSach_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim conn As New SqlConnection(str)
conn.Open()
Dim str1 As String = "Select Masach as 'Mã sách',Tensach as 'Tên sách',Noidung as 'Nội dung',Ngonngu as 'Ngôn ngữ',Sotrang as 'Số trang',Soluong as 'Số lượng',MaTG as 'Mã TG',MaNXB as 'Mã NXB',MaTL as 'Mã TL' from Sach"
Dim da As New SqlDataAdapter(str1, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
Dim dap1 As New SqlDataAdapter("select MaTG from Tacgia", conn)
Dim dt1 As New DataTable
dap1.Fill(dt1)
cmbMaTG.DataSource = dt1
cmbMaTG.DisplayMember = dt1.Columns(0).ToString
cmbMaTG.ValueMember = dt1.Columns(0).ToString
Dim dap2 As New SqlDataAdapter("select MaNXB from NXB", conn)
Dim dt2 As New DataTable
dap2.Fill(dt2)
cmbMaNXB.DataSource = dt2
cmbMaNXB.DisplayMember = dt2.Columns(0).ToString
cmbMaNXB.ValueMember = dt2.Columns(0).ToString
Dim dap3 As New SqlDataAdapter("select MaTL from Theloai", conn)
Dim dt3 As New DataTable
dap3.Fill(dt3)
cmbMaTL.DataSource = dt3
cmbMaTL.DisplayMember = dt3.Columns(0).ToString
cmbMaTL.ValueMember = dt3.Columns(0).ToString
cmbMaTG.Text = ""
cmbMaNXB.Text = ""
cmbMaTL.Text = ""
txtTacgia.Text = ""
txtNXB.Text = ""
txtTheloai.Text = ""
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
Me.Close()
FrmMenu.Show()
End Sub
Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstr As String
sqlstr = "Insert into Sach values ('" + txtMaSach.Text + "',N'" + txtTensach.Text + "',N'" + txtNoidung.Text + "',N'" + txtNgonngu.Text + "','" + txtSotrang.Text + "','" + txtSoluong.Text + "','" + cmbMaTG.Text + "','" + cmbMaNXB.Text + "','" + cmbMaTL.Text + "')"
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmSach_Load(sender, e)
MsgBox("Thêm sách thành công")
txtMaSach.Text = ""
txtTensach.Text = ""
txtNoidung.Text = ""
txtNgonngu.Text = ""
txtSotrang.Text = ""
cmbMaTG.Text = ""
cmbMaNXB.Text = ""
cmbMaTL.Text = ""
txtTacgia.Text = ""
txtNXB.Text = ""
txtTheloai.Text = ""
txtSoluong.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
End Try
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Try
txtMaSach.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString
txtTensach.Text = DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString
txtNoidung.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString
txtNgonngu.Text = DataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString
txtSotrang.Text = DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString
txtSoluong.Text = DataGridView1.Rows(e.RowIndex).Cells(5).Value.ToString
cmbMaTG.Text = DataGridView1.Rows(e.RowIndex).Cells(6).Value.ToString
cmbMaNXB.Text = DataGridView1.Rows(e.RowIndex).Cells(7).Value.ToString
cmbMaTL.Text = DataGridView1.Rows(e.RowIndex).Cells(8).Value.ToString
Catch ex As Exception
End Try
End Sub
Private Sub Xoa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Xoa.Click
If MsgBox("Bạn có chắc chắn muốn xóa? ", MsgBoxStyle.YesNo, "Xóa sách") = MsgBoxResult.Yes Then
Dim sqlstr As String
sqlstr = "Delete from Sach where Masach='" + txtMaSach.Text + "'"
Dim conn As New SqlConnection(str)
conn.Open()
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmSach_Load(sender, e)
txtMaSach.Text = ""
txtTensach.Text = ""
txtNoidung.Text = ""
txtNgonngu.Text = ""
txtSotrang.Text = ""
cmbMaTG.Text = ""
cmbMaNXB.Text = ""
cmbMaTL.Text = ""
txtTacgia.Text = ""
txtNXB.Text = ""
txtTheloai.Text = ""
txtSoluong.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi!")
End Try
End If
End Sub
Private Sub btnSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSua.Click
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstr As String
sqlstr = "Update Sach set Tensach=N'" + txtTensach.Text + "',Noidung=N'" + txtNoidung.Text + "',Ngonngu=N'" + txtNgonngu.Text + "',Sotrang='" + txtSotrang.Text + "',Soluong='" + txtSoluong.Text + "',MaTG='"
+ cmbMaTG.Text + "',MaNXB='" + cmbMaNXB.Text + "',MaTL='" + cmbMaTL.Text + "' where Masach='" + txtMaSach.Text + "'"
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmSach_Load(sender, e)
MsgBox("Cập nhật thành công!")
txtMaSach.Text = ""
txtTensach.Text = ""
txtNoidung.Text = ""
txtNgonngu.Text = ""
txtSotrang.Text = ""
txtSoluong.Text = ""
cmbMaTG.Text = ""
cmbMaNXB.Text = ""
cmbMaTL.Text = ""
txtTacgia.Text = ""
txtNXB.Text = ""
txtTheloai.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi!")
End Try
End Sub
Private Sub cmbMaNXB_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbMaNXB.SelectedValueChanged
Dim myconn As New SqlConnection(str)
myconn.Open()
Dim mysql As String = "select TenNXB from NXB where MaNXB='" + cmbMaNXB.Text + "'"
Dim mycomm As SqlCommand = New SqlCommand(mysql, myconn)
Dim mydr As SqlDataReader = mycomm.ExecuteReader
While mydr.Read()
txtNXB.Text = mydr("TenNXB")
End While
myconn.Close()
End Sub
Private Sub cmbMaTG_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbMaTG.SelectedValueChanged
Dim myconn As New SqlConnection(str)
myconn.Open()
Dim mysql As String = "select Tentacgia from Tacgia where MaTG='" + cmbMaTG.Text + "'"
Dim mycomm As SqlCommand = New SqlCommand(mysql, myconn)
Dim mydr As SqlDataReader = mycomm.ExecuteReader
While mydr.Read()
txtTacgia.Text = mydr("Tentacgia")
End While
myconn.Close()
End Sub
Private Sub cmbMaTL_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbMaTL.SelectedValueChanged
Dim myconn As New SqlConnection(str)
myconn.Open()
Dim mysql As String = "select TenTL from Theloai where MaTL='" + cmbMaTL.Text + "'"
Dim mycomm As SqlCommand = New SqlCommand(mysql, myconn)
Dim mydr As SqlDataReader = mycomm.ExecuteReader
While mydr.Read()
txtTheloai.Text = mydr("TenTL")
End While
myconn.Close()
End Sub
End Class
5.4 Phiếu mượn
Imports System.Data.SqlClient
Public Class FrmMuonsach
Private Sub FrmMuonsach_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txtMaDG.Text = MaDGmuon
txtTenDG.Text = TenDGmuon
txtMaNV.Text = MaNV
txtTenNV.Text = TenNV
txtMaDG.Enabled = False
txtTenDG.Enabled = False
txtMaNV.Enabled = False
txtTenNV.Enabled = False
Dim conn As New SqlConnection(str)
conn.Open()
Dim str1 As String = "select * from Phieumuon where MaNV='" + MaNV + "' and MaDG='" + MaDGmuon + "'"
Dim da As New SqlDataAdapter(str1, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
Dim dap1 As New SqlDataAdapter("select Masach from Sach", conn)
Dim dt1 As New DataTable
dap1.Fill(dt1)
cmbMasach.DataSource = dt1
cmbMasach.DisplayMember = dt1.Columns(0).ToString
cmbMasach.ValueMember = dt1.Columns(0).ToString
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
Me.Close()
FrmMenu.Show()
End Sub
Private Sub cmbMasach_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbMasach.SelectedValueChanged
Dim myconn As New SqlConnection(str)
myconn.Open()
Dim mysql As String = "select Tensach,Noidung,Soluong from Sach where Masach='" + cmbMasach.Text + "'"
Dim mycomm As SqlCommand = New SqlCommand(mysql, myconn)
Dim mydr As SqlDataReader = mycomm.ExecuteReader
While mydr.Read()
txtTensach.Text = mydr("Tensach")
txtNoidung.Text = mydr("Noidung")
Soluong = mydr("Soluong")
txtSoluong.Text = Soluong
End While
myconn.Close()
End Sub
Private Sub btnChonsach_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChonsach.Click
Try
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstrPM As String
sqlstrPM = "Insert into Phieumuon values ('" + txtMaNV.Text + "','" + txtMaDG.Text + "','" + cmbMasach.Text + "','" + CDate(dtpNgaymuon.Text) + "','" + CDate(dtpNgaytra.Text) + "')"
Dim mycmdPM As New SqlCommand(sqlstrPM, conn)
mycmdPM.ExecuteNonQuery()
conn.Close()
Soluong = Soluong - 1
conn.Open()
Dim sqlstr1 As String
sqlstr1 = "update Sach set Soluong='" + Soluong + "' where Masach='" + cmbMasach.Text + "'"
Dim mycmd1 As New SqlCommand(sqlstr1, conn)
mycmd1.ExecuteNonQuery()
Dim sqlstr2 As String
sqlstr2 = "update Docgia set Trangthai='1' where MaDG='" + txtMaDG.Text + "'"
Dim mycmd2 As New SqlCommand(sqlstr2, conn)
mycmd2.ExecuteNonQuery()
FrmMuonsach_Load(sender, e)
MsgBox("Thêm sách thành công")
cmbMasach.Text = ""
txtTensach.Text = ""
txtNoidung.Text = ""
txtSoluong.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, kiểm tra lại")
End Try
End Sub
Private Sub btnChonDG_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChonDG.Click
Me.Close()
FrmDocgiamuon.Show()
End Sub
End Class
5.5 Menu
Imports System.Data.SqlClient
Public Class FrmTrasach
Private Sub FrmTrasach_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
txtMaDG.Text = MaDGmuon
txtTenDG.Text = TenDGmuon
txtMaNV.Text = MaNV
txtTenNV.Text = TenNV
txtMaDG.Enabled = False
txtTenDG.Enabled = False
txtMaNV.Enabled = False
txtTenNV.Enabled = False
Dim conn As New SqlConnection(str)
conn.Open()
Dim str1 As String = "select * from Phieumuon where MaNV='" + MaNV + "' and MaDG='" + MaDGmuon + "'"
Dim da As New SqlDataAdapter(str1, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
Me.Close()
FrmMenu.Show()
End Sub
Private Sub btnTra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTra.Click
Try
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstrPM As String
sqlstrPM = "Delete Phieumuon where MaNV='" + MaNV + "' and MaDG='" + MaDGmuon + "'"
Dim mycmdPM As New SqlCommand(sqlstrPM, conn)
mycmdPM.ExecuteNonQuery()
conn.Close()
Soluong = Soluong + 1
conn.Open()
Dim sqlstr1 As String
sqlstr1 = "update Sach set Soluong='" + Soluong + "' where Masach='" + txtMasach.Text + "'"
Dim mycmd1 As New SqlCommand(sqlstr1, conn)
mycmd1.ExecuteNonQuery()
Dim sqlstr2 As String
sqlstr2 = "update Docgia set Trangthai='0' where MaDG='" + txtMaDG.Text + "'"
Dim mycmd2 As New SqlCommand(sqlstr2, conn)
mycmd2.ExecuteNonQuery()
FrmTrasach_Load(sender, e)
MsgBox("Đã trả sách!")
txtMasach.Text = ""
txtTensach.Text = ""
txtNoidung.Text = ""
txtSoluong.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, kiểm tra lại")
End Try
End Sub
Private Sub btnChonDG_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChonDG.Click
Me.Close()
FrmDocgiamuon.Show()
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Try
txtMasach.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString
Dim myconn As New SqlConnection(str)
myconn.Open()
Dim mysql As String = "select Tensach,Noidung,Soluong from Sach where Masach='" + txtMasach.Text + "'"
Dim mycomm As SqlCommand = New SqlCommand(mysql, myconn)
Dim mydr As SqlDataReader = mycomm.ExecuteReader
While mydr.Read()
txtTensach.Text = mydr("Tensach")
txtNoidung.Text = mydr("Noidung")
Soluong = mydr("Soluong")
txtSoluong.Text = Soluong
End While
myconn.Close()
Catch ex As Exception
End Try
End Sub
End Class
5.6 Gia hạn thẻ
Imports System.Data.SqlClient
Public Class FrmGiahanthe
Private Sub FrmGiahanthe_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim conn As New SqlConnection(str)
conn.Open()
Dim str1 As String = "select MaDG,TenDG,NgayCapThe,NgayHetHan,TrangThai from Docgia"
Dim da As New SqlDataAdapter(str1, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
End Sub
Private Sub btnSua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSua.Click
Dim conn As New SqlConnection(str)
conn.Open()
Dim sqlstr As String
sqlstr = "Update Docgia set Ngayhethan='" + CDate(dtpNgayHetHan.Text) + "' where MaDG='" + txtMaDG.Text + "'"
Dim mycmd As New SqlCommand(sqlstr, conn)
Try
mycmd.ExecuteNonQuery()
FrmGiahanthe_Load(sender, e)
MsgBox("Đã gia hạn thẻ!")
MaDG = txtMaDG.Text
txtMaDG.Text = ""
txtDG.Text = ""
txtTrangthai.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
End Try
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
Try
txtMaDG.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString
txtDG.Text = DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString
dtpNgayCap.Text = DateValue(DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString)
dtpNgayHetHan.Text = DateValue(DataGridView1.Rows(e.RowIndex).Cells(3).Value.ToString)
If DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString = True Then
txtTrangthai.Text = "Đang mượn sách"
Else
txtTrangthai.Text = "Chưa mượn sách"
End If
Catch ex As Exception
End Try
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
Me.Close()
End Sub
End Class
5.7 Tìm kiếm
Imports System.Data.SqlClient
Public Class FrmTimkiem
Private Sub FrmTimkiem_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnTensach_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTensach.Click
Dim sqlstr As String
sqlstr = "Select * from Sach where Tensach like '%" + txtTensach.Text + "%'"
Dim conn As New SqlConnection(str)
conn.Open()
Try
Dim da As New SqlDataAdapter(sqlstr, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView1.DataSource = tbl
FrmTimkiem_Load(sender, e)
txtTensach.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
txtTensach.Text = ""
End Try
End Sub
Private Sub btnTentacgia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTentacgia.Click
Dim sqlstr As String
sqlstr = "Select * from Tacgia where Tentacgia like '%" + txtTacgia.Text + "%'"
Dim conn As New SqlConnection(str)
conn.Open()
Try
Dim da As New SqlDataAdapter(sqlstr, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView2.DataSource = tbl
FrmTimkiem_Load(sender, e)
txtTensach.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
txtTensach.Text = ""
End Try
End Sub
Private Sub btnNhaxuatban_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNhaxuatban.Click
Dim sqlstr As String
sqlstr = "Select * from NXB where TenNXB like '%" + txtNhaxuatban.Text + "%'"
Dim conn As New SqlConnection(str)
conn.Open()
Try
Dim da As New SqlDataAdapter(sqlstr, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView3.DataSource = tbl
FrmTimkiem_Load(sender, e)
txtTensach.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
txtTensach.Text = ""
End Try
End Sub
Private Sub btnDocgia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDocgia.Click
Dim sqlstr As String
sqlstr = "Select * from Docgia where TenDG like '%" + txtDocgia.Text + "%'"
Dim conn As New SqlConnection(str)
conn.Open()
Try
Dim da As New SqlDataAdapter(sqlstr, conn)
Dim tbl As New DataTable
da.Fill(tbl)
Me.DataGridView4.DataSource = tbl
FrmTimkiem_Load(sender, e)
txtTensach.Text = ""
conn.Close()
Catch ex As Exception
MsgBox("Lỗi, thực hiện lại!")
txtTensach.Text = ""
End Try
End Sub
Private Sub btnMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMenu.Click
FrmMenu.Show()
Me.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
FrmMenu.Show()
Me.Close()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
FrmMenu.Show()
Me.Close()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
FrmMenu.Show()
Me.Close()
End Sub
End Class
5.8 Quản trị người sử dụng:
KẾT LUẬN
Chương trình Quản lý thư viện sẽ giúp cho việc tin học hóa trong thư viện cũng như công tác hành chính, cán bộ được tốt hơn, chính xác và khóa học hơn, làm tăng năng suất và hiệu quả công việc. Trên cơ sở đó giúp cho Lãnh đạo quản lý thư viện một cách tự động hóa, tránh được những sai sót, những hạn chế mà cách quản lý thủ công gây ra, đáp ứng được yêu cầu lãnh đạo, chỉ đạo của cấp trên trong mọi tình huống kịp thời nhất.
Chương trình Quản thư viện hoàn thành tương đối tốt đáp ứng được nhu cầu cập nhật, truy vấn thông tin nhanh chóng và giải quyết được việc tổ chức nhất quán CSDL trong lưu trữ thông tin. Tuy nhiên, chương trình vẫn còn nhược điểm, thiếu sót cần được hoàn thiện trong thời gian tới.
Em xin chân thành cảm ơn các thầy cô giáo trong khoa CNTT trường DHDL Phương Đông đã nhiệt tình dạy dỗ, trang bị kiến thức giúp em trong cả khóa học và hoàn thành tốt đồ án này. Đặc biệt, em xin chân thành cảm ơn thầy Trần Văn Lộc, người đã tận tình chỉ bảo, giúp đỡ em hoàn thành tốt đồ án tốt nghiệp này.
Hà Nội, ngày 22 tháng 4 năm 2009
Sinh viên
Nguyễn Hữu Thắng
TÀI LIỆU THAM KHẢO
1. Phân tích và Thiết kế hệ thống – TS Lê Văn Phùng
2. Cơ sở Dữ Liệu – TS Lê Văn Phùng
3. Bài giảng VisualBasic.Net – Nguyễn Bá Tiến
4. Hệ quản trị CSDL SQL Server - Phan Hiền
LỜI CAM ĐOAN
“Em xin cam đoan đây là công trình nghiên cứu của riêng em. Những tài liệu trong đồ án tốt nghiệp là hoàn toàn trung thực. Các kết quả nghiên cứu do chính em thực hiện dưới sự chỉ đạo của thầygiáo hướng dẫn”.
TRƯỜNG ĐẠI HỌC DÂN LẬP PHƯƠNG ĐÔNG
KHOA CÔNG NGHỆ THÔNG TIN
*******
PHIẾU ĐÁNH GIÁ ĐỒ ÁN TỐT NGHIỆP
Kính gửi:
Ban chủ nhiệm khoa Công nghệ thông tin
Đề nghị đọc, nhận xét, đánh giá đồ án với tiêu đề: “ Tìm hiểu và xây dựng chương trình quản lý thư viện” theo các nội dung cụ thể dưới đây:
Ý nghĩa lý luận, thực tiễn của đề tài.
Đặt vấn đề:
Cơ sở đặt vấn đề (0,5 điểm).
Mức độ rõ ràng trong phương pháp trình bày vấn đề (1 điểm).
Tính logic và hợp lý (0,5 điểm).
Cách giải quyết vấn đề:
Cơ sở lý luận và phương pháp luận ( 2 điểm).
Độ tin cậy, cập nhập, tính chính xác về nguồn gốc của số liệu, tài liệu (1 điểm).
Mức độ phù hợp của phương pháp xử lý thông tin ( 1 điểm).
Mức độ hoàn thành mục tiêu, nhiệm vụ ( 1 điểm).
Mức độ nắm vững kiến thức và vận dụng (1 điểm).
Kết luận và kiến nghị (1 điểm).
Bố cục, văn phòng (1 điểm).
Xếp loại (xuất sắc, giỏi, khá, trung bình khá, trung bình, kém ), cho điểm( số nguyên).
Hà Nội, ngày tháng năm 2009
Ký tên
Nguyễn Hữu Thắng
Các file đính kèm theo tài liệu này:
- 2527.doc