图书案例sql.docx
《图书案例sql.docx》由会员分享,可在线阅读,更多相关《图书案例sql.docx(29页珍藏版)》请在冰豆网上搜索。
图书案例sql
图书管理系统
一.系统设计目的和内容:
图书管理系统主要目的是对图书馆种类繁多的书籍进行管理,并且合理管理好用户的借还信息。
提高图书馆的工作效率,降低管理成本。
其开发主要包括后台数据库的建立和维护,以及前端应用程序的开发。
前者要求建立起数据一致性各完整性强、数据安全性好的数据库。
而后者则要求应用程序具有功能完备、易用等特点。
因此本系统结合开放式图书馆的要求,采用.NET技术各SQLSERVER2000数据库进行系统的开发。
二.系统需求分析:
1.书目查询管理:
根据一定的条件对图书进行查询,并可以查看图书的详细信息,查询范围出版社、书名、作者等查询项目进行任意条件的组合查询。
2.权限维护管理:
系统管理员可以在此模块中,对已有的图书信息进行修改,
并对用户信息进行管理。
3、用户信息管理:
用户登录该系统后,可以进行图书的借阅和归还操作,还可
修改密码、查询借阅信息等。
三.系统总体设计
四.数据库设计
4.1数据库的需求分析:
本系统使用SQLSERVER2000作为应用程序的数据库。
考虑到系统的实际需求,系统至少需要四张数据库表,具体如下:
1.图书信息数据表(BOOKINFO):
用于图书馆的所有已录入的书目信息,这是本系统最为关键的数据部分,包括图书号、图书名、图书作者、出版时间、索取号、价格和图书条码。
2.
名字:
密码
别名:
描述:
用户和管理员进入管理系统的条件.
定义:
1{数字或字符}8.
位置:
管理员信息
用户信息
名字:
管理员号
别名:
描述:
管理员在图书馆中的惟一的标识.
定义:
1{数字}5.
位置:
管理员信息
名字:
借阅号
别名:
描述:
用户在图书馆中借还书的惟一的标识.
定义:
1{数字}8.
位置:
借阅信息
名字:
用户号
别名:
描述:
此用户在图书馆中的惟一的标识.
定义:
1{数字}8.
位置:
用户信息
借阅信息
名字:
图书号
别名:
描述:
此书在图书馆中的惟一的标识.
定义:
1{数字}8.
位置:
图书信息
借阅信息
用户信息表(USER):
用户ID、用户名、密码、地址、E-MAIL、电话。
3.借阅信息表(LENDINFO):
ID、用户ID、图书ID、借阅时间、归还时间、归还与否。
4.管理员信息表(MANGER):
管理员ID、密码。
数字字典
4.4物理设计
对数据库建立索引,索引语句在SQL语句中。
Createuniqueindexbook_idONbookinfo(bookid)
Createuniqueindexuser_idONuser(userid)
Createuniqueindexlend_idONlendinfo(lendid)
4.5SQL语句的实现
创建数据库名为library
CREATEDATABASELIBRARY
创建员工基本信息
CREATETABLEBookInfo
(bookidint(4)NOTNULLUNIQUE,
booknamevarchar(100),
pubnamevarchar(100),
bookauthorvarchar(50),
seriesvarchar(50),
ISBNvarchar(50),
SearchNOvarchar(50),
PubDatesmalldatetime(4),
Pricefloat(8),
Barcodevarchar(50)
);
CREATETABLELendInfo
(
LendIDint(4)NOTNULLUNIQUE,
BookIDint(4)NOTNULLUNIQUE,
UserIDvarchar(50)NOTNULLUNIQUE,
LendDatesmalldatetime(4),
ReturnDatesmalldatetime(4),
IsBackint(4)
);
CREATETABLEmanage
(
manageidint(4)NOTNULLUNIQUE,
Passchar(10)
);
CREATETABLEusers
(
useridint(4)NOTNULLUNIQUE,
usernamechar(10),
passchar(10),
emailchar(50),
phonechar(10),
addressvarchar(50),
BookNumint(4)
);
4.6创建视图
创建关于书名的视图,因为查询时需要绑定。
Createviewbook_name
As
Selectbookid,pubname,bookauthor,bookname,searchNO
FROMBOOKINFO
WHEREbookname=’ASP程序设计’;
创建关于用户名的视图,因为查询时需要绑定。
Createviewuser_name
As
Selectuserid,username,phone,address,email
FROMusers
WHEREusername=’1’;
4.7创建存储过程
创建建表的存储过程
USELIBRARY
GO
CREATEPROCEDUREcreatetables
AS
CREATETABLEBookInfo
(bookidint(4)NOTNULLUNIQUE,
booknamevarchar(100),
pubnamevarchar(100),
bookauthorvarchar(50),
seriesvarchar(50),
ISBNvarchar(50),
SearchNOvarchar(50),
PubDatesmalldatetime(4),
Pricefloat(8),
Barcodevarchar(50)
);
CREATETABLELendInfo
(
LendIDint(4)NOTNULLUNIQUE,
BookIDint(4)NOTNULLUNIQUE,
UserIDvarchar(50)NOTNULLUNIQUE,
LendDatesmalldatetime(4),
ReturnDatesmalldatetime(4),
IsBackint(4)
);
CREATETABLEmanage
(
manageidint(4)NOTNULLUNIQUE,
Passchar(10)
);
CREATETABLEusers
(
useridint(4)NOTNULLUNIQUE,
usernamechar(10),
passchar(10),
emailchar(50),
phonechar(10),
addressvarchar(50),
BookNumint(4)
);
GO
4.8创建触发器
创建关于书号和用户号的触发器,分别在BOOKINFO.USERS中修改bookid和userid时,在LENDINFO中也会有相应的修改。
CREATETRIGGERBookidChange
ONBOOKINFO
AFTERUPDATE
AS
IFUPDATE(bookid)
BEGIN
DECLARE@book_idasint
DECLARE@old_book_idasint
SELECT@book_id=bookidinserted
SELECT@old_book_id=bookiddeleted
UpdateLENDINFO
SETLENDINFO.bookid=@book_id
WHERELENDINFO.bookid=@old_book_id
END
CREATETRIGGERUserIdChanges
ONUSERS
AFTERUPDATE
AS
IFUPDATE(userid)
BEGIN
DECLARE@user_idasint
DECLARE@old_user_idasint
SELECT@user_id=useridinserted
SELECT@old_user_id=useriddeleted
UpdateLENDINFO
SETLENDINFO.userid=@user_id
WHERELENDINFO.userid=@old_user_id
END
五、使用ER/STUDIO完成数据库设计
六、代码实现
6.1“图书管理系统”的功能模块图
系统主界面:
ImportsSystem.Data.SqlClient
ImportsSystem.IO
PublicClasssearchN
InheritsSystem.Web.UI.Page
PrivateconnectingstringAsString
PrivatemyConnAsSqlConnection
PrivatedsAsDataSet
PrivatemyAdapterAsSqlDataAdapter
ProtectedWithEventsHyperLink1AsSystem.Web.UI.WebControls.HyperLink
ProtectedWithEventsradiobutton1AsSystem.Web.UI.WebControls.RadioButton
ProtectedWithEventsdropdownlist1AsSystem.Web.UI.WebControls.DropDownList
ProtectedWithEventsbutton1AsSystem.Web.UI.WebControls.Button
PrivatemyCmdAsSqlCommand
PublicSubOpen()
myConn.Open()
EndSub
PublicSubClose()
myConn.Close()
EndSub
PublicSubFill(ByValsqlstrAsString)
myAdapter=NewSqlDataAdapter(sqlstr,myConn)
ds=NewDataSet
myAdapter.Fill(ds)
EndSub
PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'在此处放置初始化页的用户代码
connectingstring="datasource=(local);Database=library;uid=sa;pwd=123456;"
myConn=NewSqlConnection(connectingstring)
IfNotIsPostBackThen
IfNotSession("UserID")IsNothingThen
IfAllowBooking(Session("UserID"))=TrueThen
EndIf
EndIf
EndIf
EndSub
'privatebind
PublicFunctionGetRowsNum(ByValsqlstrAsString)AsInteger
IfmyConn.State=ConnectionState.ClosedThen
myConn.Open()
EndIf
Fill(sqlstr)
Close()
Returnds.Tables(0).Rows.Count
EndFunction
PublicFunctionAllowBooking(ByValUserIDAsString)AsBoolean
DimsqlstrAsString="select*fromUserInfo,RoleInfowhereUserInfo.RoleID=RoleInfo.RoleIDandAllowBooking=1andUserID='"+UserID+"'"
IfGetRowsNum(sqlstr)=0Then
ReturnFalse
Else
ReturnTrue
EndIf
EndFunction
PublicSubBindDBGrd(ByValsqlstrAsString,ByValmyDBGrdAsDataGrid)
IfmyConn.State=ConnectionState.ClosedThen
myConn.Open()
EndIf
Fill(sqlstr)
myDBGrd.DataSource=ds.Tables(0).DefaultView
myDBGrd.DataBind()
EndSub
PublicSubBindDBGrd(ByValsqlstrAsString,ByValmyDBGrdAsDataGrid,ByValSortExpAsObject)
IfmyConn.State=ConnectionState.ClosedThen
myConn.Open()
EndIf
Fill(sqlstr)
DimdvAsDataView=ds.Tables(0).DefaultView
dv.Sort=SortExp
myDBGrd.DataSource=dv
myDBGrd.DataBind()
EndSub
PrivateSubBindGrid()
IfNotSession("sqlstr")IsNothingThen
DimsqlstrAsString=CType(Session("sqlstr"),String)
BindDBGrd(sqlstr,ResultGrid)
Session("sqlstr")=sqlstr
EndIf
EndSub
PrivateSubbutton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesbutton1.Click
DimsignAsString=""
IfAnyChoice.Checked=TrueThen
sign="%"
EndIf
DimsqlstrAsString="select*fromBookInfowhere1=1"
sqlstr+="and"+dropdownlist1.SelectedValue+"like'"+sign+txtContent.Text.ToString.Trim+sign+"'"
Session("sqlstr")=sqlstr
BindGrid()
EndSub
PrivateSubResultGrid_PageIndexChanged(ByValsourceAsObject,ByValeAsSystem.Web.UI.WebControls.DataGridPageChangedEventArgs)HandlesResultGrid.PageIndexChanged
ResultGrid.CurrentPageIndex=e.NewPageIndex
BindGrid()
EndSub
PrivateSubResultGrid_SortCommand(ByValsourceAsObject,ByValeAsSystem.Web.UI.WebControls.DataGridSortCommandEventArgs)HandlesResultGrid.SortCommand
DimsqlstrAsString
Ifviewstate("sortexp")IsNothingThen
viewstate("sortexp")=e.SortExpression.ToString
ElseIfviewstate("sortexp")=e.SortExpression.ToStringThen
viewstate("sortexp")+="desc"
Else
viewstate("sortexp")=e.SortExpression.ToString
EndIf
IfNotSession("sqlstr")IsNothingThen
sqlstr=CType(Session("sqlstr"),String)
BindDBGrd(sqlstr,ResultGrid,Viewstate("sortexp"))
EndIf
EndSub
PublicSubExecNonSql(ByValsqlstrAsString)
IfmyConn.State=ConnectionState.ClosedThen
myConn.Open()
EndIf
myCmd=NewSqlCommand(sqlstr,myConn)
myCmd.ExecuteNonQuery()
myCmd.Dispose()
Close()
EndSub
EndClass
可以根据书名,内容进行查询,我们选取任意匹配:
如上图所示最上方为自定义用户控件:
bar
点击权限维护:
ImportsSystem.Data.SqlClient
PublicClassuser
InheritsSystem.Web.UI.Page
PrivateconnectingstringAsString
PrivatemyConnAsSqlConnection
PrivatedsAsDataSet
PrivatemyAdapterAsSqlDataAdapter
ProtectedWithEventsButton2AsSystem.Web.UI.WebControls.Button
ProtectedWithEventsLabel1AsSystem.Web.UI.WebControls.Label
ProtectedWithEventsLabel2AsSystem.Web.UI.WebControls.Label
ProtectedWithEventsTextBox1AsSystem.Web.UI.WebControls.TextBox
ProtectedWithEventsLabel3AsSystem.Web.UI.WebControls.Label
ProtectedWithEventsTextBox2AsSystem.Web.UI.WebControls.TextBox
ProtectedWithEventsLogin_trnameAsSystem.Web.UI.HtmlControls.HtmlTableRow
ProtectedWithEventsLogin_trpasswordAsSystem.Web.UI.HtmlControls.HtmlTableRow
PrivatemyCmdAsSqlCommand
PrivateSubPage_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
'在此处放置初始化页的用户代码
connectingstring="datasource=(local);Database=library;uid=sa;pwd=123456;"
myConn=NewSqlConnection(connectingstring)
EndSub
PublicFunctionCheckUserberInfo(ByValUserstrAsString,ByValPwdstrAsString)AsInteger
IfmyConn.State=ConnectionState.ClosedThen
myConn.Open()
EndIf
DimsqlstrAsString
IfPwdstr=""Then
sqlstr="select*frommanagewheremanageid='"+Userstr.Trim+"'andPassisnull"
Else
sqlstr="select*frommanagewheremanageid='"+Userstr.Trim+"'andPass='"+Pwdstr+"'"
EndIf
Fill(sqlstr)
Ifds.Tables(0).Rows.Count=0Then
Close()
Return-1
EndIf
ds.Clear()
Close()
Return1
EndFunction
PublicSubOpen()
myConn.Open()
EndSub
PublicSubClose()
myConn.Close()
EndSub
PublicSubFill(ByValsqlstrAsString)
myAdapter=NewSqlDataAdapter(sqlstr,myConn)
ds=NewDataSet
myAdapter.Fill(ds)
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
IfCheckUserberInfo(TextBox1.Text,TextBox2.Text)=1Then
Session("UserID")=TextBox1.Text.ToString
Response.Redirect("delete.aspx")
Else
Response.Write