怎样设计开发一个简单的图书馆管理系统设计

数字图书管理系统的设计开发与研究
作者:&&来源:&&发布时间: 10:36:00
  摘 要:随着信息技术和计算机技术的不断发展,人类的信息资源可以达到高度共享,改变了人类信息交流的方式。图书馆作为高校,市区传播知识和信息的重要精神场所,其工作水平和建设水平与提高人们素质有着重要的联系。随着读者,藏书的增多,图书馆信息量也大大增加,为了为读者提供高效快捷的信息搜索服务,合理分配资源,必须要设计出合理有效的数字图书管理系统。本文先对图书管理系统的相关关键技术进行了介绍,然后给出了系统开发架构,运行,系统数据库,系统安全设计等。希望有一定的借鉴意义。&
  关键词:数字图书馆 系统 设计开发&
  随着网络技术的飞速发展,基于web技术的企业级应用变得非常广泛,信息化管理建设在图书馆也获得了极大的发展。数字图书馆管理系统以其吞吐量大,信息蕴藏丰富,且连接科研,技术部门,为信息的处理,集中,创新提供了良好的平台。实现图书资源网络化和科学化管理,对图书的编目,借还,查阅,典藏等信息进行集中管理,已经成为图书馆管理系统设计开发的大势所趋。下面就数字图书馆系统的设计和开发进行一定探讨。&
  一、相关系统知识和技术&
  1.NET框架&
  NET框架一套有着独立应用程序的开发框架,其特点在于简化了程序开发的复杂性,提供一致的开发模型,图书管理系统开发人员可以选择任何支持NET编程语言的应用程序进行开发,如J#,C#等,可以轻松的设计出强大的应用程序。Net Framework是微软开发的可用于规模级企业Web的开发应用程序,简化了程序开发的复杂度,包含了操作系统的所有层面。Net框架主要由Net Framework类库,公共语言运行库,Net语言构成。&
  ASP.NET是基于NET框架的编译环境,可以用使用和Net兼容的任何语言创建应用程序,Net框架可以用于任何ASP.NET应用程序,其优点在于有世界级的工具支持,执行效率高,适应性强,可高效管理,简单易学等。&
  2.AJAX技术&
  Ajax是异步JavaScript和XML的简写,是JavaScript,综合异步通信等多种网络技术新的编程方式,从实际效果角度看,也可以称其为无页面刷新。Ajax Web应用上不需要任何插件,也不用在Web服务器中装程序,Ajax风格的Web应用程序的优点在于不对整页页面进行刷新,减轻服务器的负担,不需要插件,数据与呈现分离。&
  3.短信猫技术&
  短信猫是一种支持GSM的无线通讯调制解调器,只要在它上面插上移动运营商的SIM卡后就可以接入GSM网络,实现短信,数据,通话等功能。短信猫相当于一个没有键盘,不带软件,没有屏幕的手机,在使用它的时候一般都要加入驱动软件,结合电脑一起使用。图书管理系统中超短期信息提醒就需要使用短信猫,它提供了SDK开发包,有相应的函数可以调动。&
  二、系统状态图和系统非功能需求&
  1.系统状态图&
  数字图书管理系统涉及到的转换状态主要有两个,分别是图书和读者。图书涉及的三个方面的状态,一,是否已被借,有未被借和已被借两种状态。二,是否通过审核,有待审核与已经通过审核状态。三,是否通过典藏检验,有未通过典藏验收和通过典藏验收两个状态。读者的有效性状态一共有三个,即挂失,冻结和有效。这些状态在特定的条件下可以互相转换。&
  2.系统非功能需求&
  首先要确保图书管理系统的安全性需求,只有经过授权的用户才能使用和访问提供的各种服务,其次要确保授权用户只可在自己的权限范围能使用应用数据,还要对数据库信息进行备份,保证数据信息的安全。为此,图书管理系统管理员必须要凭借有效的账号和密码才能进入该系统,仅限对应用权限的操作,在登陆的时候还应该防止SQL的攻击和恶意机器注册,使用验证码技术。&
  同时,还要满足系统响应时间的需求,根据业务管理模式,有关的应用程序和数据库应该集中放置在一台专门的服务器上,用户可通过上网来操作这个系统。为此,系统对于用户操作响应时间受到网速的影响,该系统在性能方面可以以用户可接受响应时间为准。此外还应满足可靠性需求和易学性的需求。&
  三、图书管理系统设计&
  1.系统功能构架设计&
  图书管理系统主要的功能由读者管理,图书管理,系统设置,系统查询,超期短信,图书借还等组成。不同的图书管理员用户组应该具有不同的作用,根据其不同的权限可以访问不同的版块。读者管理主要包括读者档案管理和读者类型管理,系统设置主要是删除,添加,修改管理员,设置不同管理员的权限。图书管理主要包括新增图书类型,图书类型管理,图书审批管理等。系统查询主要包括图书借阅查询,热门图书排行版,热心读者排行等。超期短信主要包括短信触发和短信设置。&
  2.系统开发架构&
  数字图书管理系统中的三层架构主要是利用了简单工厂设计模式抽象出来的模块接口,摆脱了对具体数据库的以来,有利于数据库的扩充和迁移,实现了多数据库支持。Model层包括所有实体类,主要映射数据库的视图或数据表,用来表示数据存储中客官存在,持久的对象。实体层贯穿于业务逻辑层,表示层和数据访问层,在这三层之间进行信息传递和调用。&
  3.系统安全设计&
  数字图书馆的安全系统采用B/S架构,为了加强其安全性,就需要从多个方面进行防范。主要有防止SQL注入攻击,登陆追加验证码,防止跨站脚本攻击XSS,数据加密,权限管理等。&
  本文介绍的数字图书管理系统采用了简单的工厂模式中的三层架构,不仅让系统维护升级变得简单,而且使得系统中的各个功能有明确的分工。在结合C#的反射机制后,可以将数据库的变动引入到配置文件中进行简单的修改,简化了需求变动带来的影响。这样的数字图书管理系统总体上可以胜任图书馆的日常工作,但在细节上还有待继续加强和完善。&
  参考文献&
  [1]张晶;图书管理系统的设计与实现[M]西南交通大学硕士论文2011(19)&
  [2]李广建;国外图书馆自动化系统的现状与趋势[J]现代图书情报技术2003(3)&
  [3]崔巍,王晓敏;数据库系统开发教程[M].北京:清华大学出版社2010(6)&
  [4]胡静,韩英杰;ASP.NET动态网站开发教程[M]北京:清华大学出版社2009(10)&
  [5]陶宏才;数据库原理及设计[M].北京:清华大学出版社.2004
本文TAGS:
上一个文章:
下一个文章:
本站专注于、、及各类服务,联系QQ:(企业版多工号),全国统一客服热线:400-0808380(多线路)
联系地址: 四川大学望江校区 成都市一环路南一段24号 邮编: 610065
&&网站合法性备案号:苏ICP备号
Copyright &
All Rights Reserved. 星论文网 版权所有 &&&&简单图书管理系统_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
简单图书管理系统
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩39页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢用C#实现一个简单的图书管理系统(课程设计)
用C#(sharp)实现一个简单的管理(课程设计)
学校的课程结束了,要求完成一个课程设计,于是我用C#实现了一个简单的图书管理系统(ADO.NET)
一、 首先把数据库脚本贴出来(数据库名为library)
USE [library]
/****** Object:
Table [dbo].[books]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[books](
[bNum] [nvarchar](10) NOT NULL,
[bName] [nvarchar](60) NOT NULL,
[bAuthor] [nvarchar](60) NOT NULL,
[bPubCom] [nvarchar](50) NOT NULL,
[bPubDat] [nvarchar](20) NOT NULL,
[ISBN] [nvarchar](50) NOT NULL,
[bPrice] [nvarchar](10) NOT NULL,
[bTag] [nvarchar](10) NOT NULL,
CONSTRAINT [PK_books] PRIMARY KEY CLUSTERED
[bNum] ASC
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'数据库', N'123', N'123出版社', N';, N'978-1-;, N'56', N'2')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'珠玑', N'Jon·Bentley', N'人民邮电出版社', N';, N'978-7-115-;, N'39', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'C陷阱与缺陷', N'Andrew·Koeing', N'人民邮电出版社', N';, N'978-7-115-;, N'30', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'C专家编程', N'Peter Van Der Linden', N'人民邮电出版社', N';, N'978-7-115-;, N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'网络数据采集', N'Ryan Mitchell', N'人民邮电出版社', N';, N'978-7-115-;, N'59', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'Flask Web开发', N'Miguel Grinberg', N'人民邮电出版社', N';, N'978-7-115-;, N'59', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'C和指针', N'Kenneth A·Reek', N'人民邮电出版社', N';, N'978-7-115-;, N'65', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'汇编语言', N'王爽', N'清华大学出版社', N';, N'978-7-302-;, N'36', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'Python Cookbook', N'David Beazley & Brian K.Jones', N'人民邮电出版社', N';, N'978-7-115-;, N'108', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'Python基础教程', N'Magnue Lie Hetland', N'人民邮电出版社', N';, N'978-7-115-;, N'79', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'程序员代码面试指南', N'左程云', N'电子工业出版社', N';, N'978-7-121-;, N'79', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'CLR via C#', N'Jeffrey Richter', N'清华大学出版社', N';, N'978-7-302-;, N'109', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'大国崛起', N'唐晋', N'人民出版社', N';, N'7-01-', N'56', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'自控力', N'凯利·麦格尼格尔', N'文化发展出版社', N';, N'978-7-', N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'麦肯锡思维', N'Rob Koplowitz', N'企业管理出版社', N';, N'978-7-', N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'哈佛谈判心理学', N'Rrica Ariel Fox', N'中国友谊出版公司', N';, N'978-7-', N'49.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'领导力21法则', N'John C Maxwell', N'时代出版传媒股份有限公司', N';, N'978-7-', N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'斯坦福极简经济学', N'Timothy Taylor', N'湖南人民出版社', N';, N'978-7-', N'35', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'拖延心理学', N'Jane B Birka & Lenora M Yuen', N'中国人民大学出版社', N';, N'978-7-300-;, N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'英语魔法师之语法俱乐部', N'旋元佑', N'九州出版社', N';, N'7-', N'35', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'赖世雄美语音标', N'赖世雄', N'外文出版社', N';, N'978-7-119-;, N'20', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'人性的弱点', N'戴尔·卡耐基', N'人民日报出版社', N';, N'978-7-', N'29.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'重新定义公司 谷歌是如何运营的', N'Eric Schmidt & Jonethan Rosenberg & Alan Eagle', N'中信出版集团', N';, N'978-7-', N'49', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'从0到1 开启商业与未来的秘密', N'Peter Thiel', N'中信出版社', N';, N'978-7-', N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'代码大全2', N'Steven McConnell', N'电子工业出版社', N';, N'978-7-121-;, N'128', N'0')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'胡适的北大哲学课 壹古代哲学', N'胡适', N'新世界出版社', N';, N'978-7-', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'胡适的北大哲学课 贰中古哲学', N'胡适', N'新世界出版社', N';, N'978-7-', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'胡适的北大哲学课 叁近世哲学', N'胡适', N'新世界出版社', N';, N'978-7-', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N';, N'胡适的北大哲学课 肆世界哲学', N'胡适', N'新世界出版社', N';, N'978-7-', N'30', N'3')
/****** Object:
Table [dbo].[admin]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[admin](
[aId] [nvarchar](20) NOT NULL,
[aPwd] [nvarchar](20) NOT NULL,
[aName] [nvarchar](20) NOT NULL,
[aGender] [nvarchar](20) NOT NULL,
[aPhoNum] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_admin] PRIMARY KEY CLUSTERED
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'1', N'1', N'张三', N'男', N'')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N';, N';, N'李四', N'女', N'')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'2', N'2', N'张三', N'男', N'')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N';, N';, N'李四', N'女', N'')
/****** Object:
Table [dbo].[borrow]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[borrow](
[ID] [nvarchar](50) NOT NULL,
[uId] [nvarchar](20) NOT NULL,
[bName] [nvarchar](60) NOT NULL,
[bNum] [nvarchar](10) NOT NULL,
[bPrice] [nvarchar](10) NOT NULL,
[borrowDate] [varchar](20) NOT NULL,
[returnDate] [varchar](20) NOT NULL,
[Tag] [nvarchar](10) NOT NULL,
CONSTRAINT [PK_borrow] PRIMARY KEY CLUSTERED
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'C专家编程', N';, N'45', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'数据库', N';, N'56', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'数据库', N';, N'56', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'数据库', N';, N'56', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'Python网络数据采集', N';, N'59', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'C和指针', N';, N'65', N'', N'', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N';, N'2', N'Python Cookbook', N';, N'108', N'', N'', N'0')
/****** Object:
Table [dbo].[users]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[users](
[uId] [nvarchar](20) NOT NULL,
[uPwd] [nvarchar](20) NOT NULL,
[uName] [nvarchar](20) NOT NULL,
[uGender] [nvarchar](20) NOT NULL,
[uPhoNum] [nvarchar](20) NOT NULL,
[uBan] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
)WITH (PAD_INDEX
= OFF, STATISTICS_NORECOMPUTE
= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS
= ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'1', N'1', N'张三', N'男', N'', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N';, N';, N'李四', N'女', N'', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N';, N';, N'李四', N'女', N'', N'1')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'2', N'2', N'王五', N'男', N'', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N';, N';, N'张三', N'男', N'', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'a;, N'a;, N'王五', N'女', N'', N'0')
/****** Object:
StoredProcedure [dbo].[Date_Test]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
create proc [dbo].[Date_Test]
select uId into #A from borrow where convert(varchar(20),GETDATE(),111)>= returnDate group by uId
update borrow set Tag='1' where convert(varchar(20),GETDATE(),111)>= returnDate
update users set uBan='1' where uId in(select uId from #A)
drop table #A
/****** Object:
View [dbo].[booksWithbookindex]
Script Date: 06/12/:12 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
create view [dbo].[booksWithbookindex]
select ROW_NUMBER()over(order by bNum ) as bookindex,* from books
二、定义一个MyDictionary类
和定义一个SqlHelper类(封装复杂的SQL操作)
namespace 图书管理系统
// 因为要频繁使用Dictionary
// 所以用一个自定义类MyDictionary继承Dictionary
public class MyDictionary : Dictionary
namespace 图书管理系统
public static class SqlHelper
// 获取数据库连接
返回连接对象
private static SqlConnection GetConn()
return new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionString);
// 执行sql操作
返回是否存在用户
public static bool IsUserExists(string uId)
bool isExists =
using (SqlConnection conn = GetConn())
string sql = "select count(*) from users where uId =@uId";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@uId", uId));
conn.Open();
int obj = Convert.ToInt32(cmd.ExecuteScalar());// 返回受影响的行数
if (obj > 0)
isExists =
return isE
// 执行sql操作
返回是否存在书名
public static bool IsBookExistsWithName(string bName)
bool isExists =
using (SqlConnection conn = GetConn())
string sql = "select count(*) from books where bName =@bName";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@bName", bName));
conn.Open();
int obj = Convert.ToInt32(cmd.ExecuteScalar());// 返回受影响的行数
if (obj > 0)
isExists =
return isE
// 执行sql操作
返回是否存在此书籍序列号
public static bool IsBookExistsWithNum(string bNum)
bool isExists =
using (SqlConnection conn = GetConn())
string sql = "select count(*) from books where bNum =@bNum";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@bNum", bNum));
conn.Open();
int obj = Convert.ToInt32(cmd.ExecuteScalar());// 返回受影响的行数
if (obj > 0)
isExists =
return isE
// 执行 ...
返回受影响行数
private static int ExecuteNonQuery(string sql, CommandType type, params SqlParameter[] ps)
int rows = -1;
using (SqlConnection conn = GetConn())
SqlCommand cmd = new SqlCommand(sql, conn);
mandType = // 存储过程 type为StoredProcedure
cmd.Parameters.AddRange(ps);
conn.Open();
rows = cmd.ExecuteNonQuery();
public static int ExecuteNonQuery(string sql, MyDictionary
SqlParameter[] ps = new SqlParameter[dic.Count];
int index = 0;
foreach (var item in dic)
ps[index++] = new SqlParameter(item.Key, item.Value);
return ExecuteNonQuery(sql, CommandType.Text, ps);
public static int ExecuteNonQuery(string sql, CommandType type, MyDictionary dic)
SqlParameter[] ps = new SqlParameter[dic.Count];
int index = 0;
foreach (var item in dic)
ps[index++] = new SqlParameter(item.Key, item.Value);
return ExecuteNonQuery(sql, type, ps);
// 执行sql语句
返回首行首列
public static object ExecuteScalar(string sql)
object obj =
using (SqlConnection conn = GetConn())
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
obj = cmd.ExecuteScalar();
public static object ExecuteScalar(string sql, CommandType type, MyDictionary dic)
object obj =
using (SqlConnection conn = GetConn())
SqlCommand cmd = new SqlCommand(sql, conn);
mandType =
//构造参数
SqlParameter[] ps = new SqlParameter[dic.Count];
int index = 0;
foreach (var item in dic)
ps[index++] = new SqlParameter(item.Key, item.Value);
cmd.Parameters.AddRange(ps);
//执行命令
conn.Open();
obj = cmd.ExecuteScalar();
public static object ExecuteScalar(string sql, MyDictionary dic)
return ExecuteScalar(sql, CommandType.Text, dic);
// 执行查询
返回结果集DataTable
public static DataTable GetList(string sql, MyDictionary
// 构造数据表,用于存储查询的数据
DataTable dt = new DataTable();
// 创建连接对象
using (SqlConnection conn = GetConn())
// 执行命令
SqlCommand cmd = new SqlCommand(sql, conn);
// 构造参数
SqlParameter[] ps = new SqlParameter[dic.Count];
int index = 0;
foreach (var item in dic)
ps[index++] = new SqlParameter(item.Key, item.Value);
cmd.Parameters.AddRange(ps);
// 执行命令
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
三、 各个窗体及实现
1.登陆界面
namespace 图书管理系统
public partial class LoginForm : Form
public LoginForm()
InitializeComponent();
private void button1_Click(object sender, EventArgs e)
// 获取账号
string Id = txtId.Text.Trim();
// 获取密码
string Pwd = txtPwd.Text.Trim();
if (Id == "" || Pwd == "")
MessageBox.Show("请输入账号或密码");
string str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionS
// 构造sql查询语句
if (rBtn1.Checked == true)
sql = "select uName from users where uId='" + Id + "' and uPwd='" + Pwd + "'";
sql = "select aName from admin where aId='" + Id + "' and aPwd='" + Pwd + "'";
// 构造连接对象
using (SqlConnection conn = new SqlConnection(str))
SqlCommand cmd = new SqlCommand(sql, conn);
// 打开数据库连接
conn.Open();
// 执行查询语句,返回结果集第一行第一列
string name = cmd.ExecuteScalar().ToString ();
if (name != "")
// 登录窗体隐藏
this.Hide();
// 创建主窗体
MainForm mainForm = new MainForm();
// 将账号传给主窗体MainForm
mainForm.Id = Id;
// 用主窗体MainForm下的_Tag标记登陆的是用户还是管理员
if (rBtn1.Checked == true)
mainForm._Tag = "user";
mainForm.Name1 =
sql = "select uBan from users where uId='" + Id + "' and uPwd='" + Pwd + "'";
cmd = new SqlCommand(sql, conn);
string b = cmd.ExecuteScalar().ToString();
mainForm.B =
mainForm._Tag = "admin";
mainForm.Name1 =
// 显示主窗体
mainForm.ShowDialog();
MessageBox.Show("账号或密码错误!","登录失败");
namespace 图书管理系统
public partial class MainForm : Form
public MainForm()
InitializeComponent();
private string _// 账号
public string Id
get { return _ }
set { _id = }
private string _
public string Name1 // 姓名
get { return _ }
set { _name = }
// 权限标记 值为admin为管理员 ,值为user则为普通用户
private string _
public string _Tag
get { return _ }
set { _tag = }
// 标记账户是否被锁定
private string _b;
public string B
get { return _b; }
set { _b = }
// 在加载窗体时设定操作权限
private void MainForm_Load(object sender, EventArgs e)
if (_Tag == "user")
tSSL2.Text = "权限级别:普通用户";
tSSL5.Text = "
" + Name1;
// 权限为用户时 将部分功能关闭
新用户注册.Enabled =
锁定用户.Enabled =
新书入库.Enabled =
借书.Enabled =
还书.Enabled =
书籍注销.Enabled =
用户信息查询.Enabled =
添加用户.Enabled =
添加书籍.Enabled =
借书办理.Enabled =
还书办理.Enabled =
if (B == "1")
toolStripStatusLabel3.Text = " 状态:被锁定";
MessageBox.Show("账户被锁定,请尽快联系管理员", "警告");
tSSL2.Text = "权限级别:管理员";
tSSL5.Text = "
" + Name1;
#region 关于、帮助
private void 关于软件ToolStripMenuItem_Click(object sender, EventArgs e)
MessageBox.Show("请联系管理员", "关于");
private void toolStripButton6_Click(object sender, EventArgs e)
MessageBox.Show("请联系管理员", "注意");
#endregion
private void timer1_Tick(object sender, EventArgs e)
xxx.Text = DateTime.Now.ToString();
// 退出时关闭所有窗口(login)
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
Application.Exit();
#region 修改密码
private void APF()
AlterPwdForm altPF = new AlterPwdForm();
altPF.Id = Id;
altPF._Tag = _T
altPF.ShowDialog();
private void 修改密码_Click(object sender, EventArgs e)
private void toolStripButton8_Click(object sender, EventArgs e)
#endregion
#region 修改个人信息
private void UIF()
UpdateIndivForm uIF = new UpdateIndivForm();
uIF.Id = Id;
uIF._Tag = _T
uIF.ShowDialog();
private void 修改信息_Click(object sender, EventArgs e)
private void toolStripButton7_Click(object sender, EventArgs e)
#endregion
#region 添加用户
private void NewUser()
UpdateIndivForm uIF = new UpdateIndivForm();
uIF.Id = Id;
uIF._Tag = _T
uIF.P = "1";
uIF.Text = "新用户注册";
uIF.ShowDialog();
private void 添加用户_Click(object sender, EventArgs e)
NewUser();
private void 新用户注册_Click(object sender, EventArgs e)
NewUser();
#endregion
#region 注销用户
private void 注销用户_Click(object sender, EventArgs e)
UpdateIndivForm deleteForm = new UpdateIndivForm();
deleteForm.Text = "注销用户";
deleteForm.P = "2";
deleteForm.ShowDialog();
#endregion
#region 添加书籍
private static void INB()
新书入库Form iNB = new 新书入库Form();
iNB.ShowDialog();
private void 添加书籍_Click(object sender, EventArgs e)
private void 新书入库_Click(object sender, EventArgs e)
#endregion
#region 书籍注销
private void 书籍注销_Click(object sender, EventArgs e)
新书入库Form iNB = new 新书入库Form();
iNB.P = "1";
iNB.Text = "注销书籍";
iNB.ShowDialog();
#endregion
#region 书籍查询
private void 图书查询_Click(object sender, EventArgs e)
FindBookForm fbf = new FindBookForm();
fbf.ShowDialog();
private void 查找书籍_Click(object sender, EventArgs e)
FindBookForm fbf = new FindBookForm();
fbf.Tag1 = this._T
fbf.ShowDialog();
#endregion
#region 借书办理
private void 借书办理_Click(object sender, EventArgs e)
BorrowBooks bb = new BorrowBooks();
bb.ShowDialog();
private void 借书_Click(object sender, EventArgs e)
BorrowBooks bb = new BorrowBooks();
bb.ShowDialog();
#endregion
#region 还书办理
private void 还书办理_Click(object sender, EventArgs e)
ReturnBooks rb = new ReturnBooks();
rb.ShowDialog();
private void 还书_Click(object sender, EventArgs e)
ReturnBooks rb = new ReturnBooks();
rb.ShowDialog();
#endregion
#region 借书单查询
private void 借书单查询_Click(object sender, EventArgs e)
MessageBox.Show("功能暂未开放");
private void 查询借书记录_Click(object sender, EventArgs e)
MessageBox.Show("功能暂未开放");
#endregion
private void 用户信息查询_Click(object sender, EventArgs e)
MessageBox.Show("该功能暂未开放");
3.新用户注册、修改个人信息、注销用户界面在同一个窗体(图片略)
namespace 图书管理系统
public partial class UpdateIndivForm : Form
public UpdateIndivForm()
InitializeComponent();
private string _
public string Id
get { return _ }
set { _id = }
// 权限标记 值admin为管理员 ,值为user则为普通用户
private string _
public string _Tag
get { return _ }
set { _tag = }
// P标记用来决定是否隐藏panel
private string _p;
public string P
get { return _p; }
set { _p = }
// 加载个人信息
private void UpdateIndivForm_Load(object sender, EventArgs e)
if (P == "1")
// p == "1"
为注册新用户功能
注册用户panel.Visible =
注销用户panel.Visible =
else if (P == "2")
// p == "2"
为注销用户功能
为修改个人信息
注册用户panel.Visible =
注销用户panel.Visible =
string str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionS
if (_Tag == "user")
sql = "select * from users where uId='" + Id + "'";
sql = "select * from admin where aId='" + Id + "'";
using (SqlConnection conn = new SqlConnection(str))
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
// ExecuteReader()返回一个Datareader对象,内容是与命令匹配的所有行
using (SqlDataReader r = cmd.ExecuteReader())
账号textBox.Text = r.GetString(0);
姓名textBox.Text = r.GetString(2);
电话号码textBox.Text = r.GetString(4);
if (_Tag == "user")
if (r.GetString(5) == "1")
label7.Text = "被锁定,请尽快联系管理员办理解锁";
label7.Text = "正常";
label7.Text = "正常";
if (r.GetString(3) == "男")
男radioButton.Checked =
女radioButton.Checked =
cmd.Dispose();
提交button.Visible =
#region 提交修改个人信息
private void 姓名textBox_TextChanged(object sender, EventArgs e)
提交button.Visible =
private void 账号textBox_TextChanged(object sender, EventArgs e)
if (账号textBox.Text!= Id)
提交button.Visible =
提交button.Visible =
private void 男radioButton_CheckedChanged(object sender, EventArgs e)
提交button.Visible =
private void 电话号码textBox_TextChanged(object sender, EventArgs e)
提交button.Visible =
private void 提交button_Click(object sender, EventArgs e)
// 判断账号是否存在
if (账号textBox.Text != Id)
if (SqlHelper.IsUserExists(uIdTb.Text.Trim()))
MessageBox.Show("账号已存在", "操作失败");
// 完成用户的修改
string uName = 姓名textBox.Text.Trim();
string uId = 账号textBox.Text.Trim();
string uPhoNum = 电话号码textBox.Text.Trim();
if (男radioButton.Checked == true)
uGender = "男";
uGender = "女";
// 构造sql语句
if (_Tag == "user")
sql = "update users set uId =@uId,uName=@uName,uGender=@uGender,uPhoNum=@uPhoNum where uId=@ID";
sql = "update admin set aId =@uId,aName=@uName,aGender=@uGender,aPhoNum=@uPhoNum where aId=@ID";
MyDictionary dic = new MyDictionary();
dic.Add("@uId", uId);
dic.Add("@uName", uName);
dic.Add("@uGender", uGender);
dic.Add("@uPhoNum", uPhoNum);
dic.Add("@ID", Id);
// 执行并返回
int i = SqlHelper.ExecuteNonQuery(sql, dic);
if (i == 1)
MessageBox.Show("提交完成");
this.Close();
#endregion
private void 注册完成button_Click(object sender, EventArgs e)
string uGender = "";
if (uIdTb.Text.Trim().Length < 6)
MessageBox.Show("账号长度应该大于6");
else if (uPwdTb.Text.Trim().Length < 6)
MessageBox.Show("密码长度应该大于6");
else if (uNameTb.Text.Trim().Length
MessageBox.Show("姓名长度应该大于1并且小于等于15");
else if (注册rBtn男.Checked == false && 注册rBtn女.Checked == false)
MessageBox.Show("请选择性别");
else if (Regex.IsMatch(uPhoNumTb.Text.Trim(), @"^1\d{10}$") != true && Regex.IsMatch(uPhoNumTb.Text.Trim(), @"^(\d{3,4}-)?\d{6,8}$") != true)
MessageBox.Show("请输入合法的手机号码或电话号码");
// 判断判断账号是否存在
if (SqlHelper.IsUserExists(uIdTb.Text.Trim()))
MessageBox.Show("账号已存在","操作失败");
if(注册rBtn男.Checked == true )
uGender ="男";
uGender ="女";
// 添加新用户
string sql = "insert into users(uId,uPwd,uName,uGender,uPhoNum,uBan) values(@id,@pwd,@name,@gender,@phonum,&#39;0&#39;)";
MyDictionary
dic = new MyDictionary ();
dic.Add("@id", uIdTb.Text.Trim());
dic.Add("@pwd", uPwdTb.Text.Trim());
dic.Add("@name", uNameTb.Text.Trim());
dic.Add("@gender", uGender);
dic.Add("@phonum", uPhoNumTb.Text.Trim());
int i = SqlHelper.ExecuteNonQuery(sql, dic);
if (i == 1)
MessageBox.Show("成功注册新用户");
this.Close();
MessageBox.Show("操作失败,请联系管理员");
private void 注销Btn_Click(object sender, EventArgs e)
// 判断账号是否存在
if (!SqlHelper.IsUserExists(deletTB.Text.Trim()))
MessageBox.Show("账号不存在", "操作失败");
DialogResult dt = MessageBox.Show("确定要注销此用户吗", "提示", MessageBoxButtons.OKCancel);
if (dt != DialogResult.OK)
string sql = "delete from users where uId=@id";
MyDictionary dic = new MyDictionary();
dic.Add("@id", deletTB.Text.Trim());
int i = SqlHelper.ExecuteNonQuery(sql, dic);
if (i == 1)
MessageBox.Show("注销成功");
this.Close();
4.修改密码界面(图片略)
namespace 图书管理系统
public partial class AlterPwdForm : Form
public AlterPwdForm()
InitializeComponent();
private string _
public string Id
get { return _ }
set { _id = }
// 权限标记 值admin为管理员 ,值为user则为普通用户
private string _
public string _Tag
get { return _ }
set { _tag = }
private void APbtn_Click(object sender, EventArgs e)
if (textBox1.Text.Trim() == "" || textBox2.Text.Trim() == "" || textBox3.Text.Trim() == "")
MessageBox.Show("请填写完整", "警告");
else if (textBox2.Text.Trim().Length < 6 || textBox3.Text.Trim().Length
MessageBox.Show("修改成功", "OK");
this.Close();
MessageBox.Show("密码错误", "警告");
5.查询书籍窗口
namespace 图书管理系统
public partial class FindBookForm : Form
public FindBookForm()
InitializeComponent();
private string _
public string Tag1
get { return _ }
set { _tag = }
// pageIndex 标记DGV应该显示第几页
private int pageI
// pageIndex 标记DGV的总页数
#region 添加书籍
private static void INB()
新书入库Form iNB = new 新书入库Form();
iNB.ShowDialog();
private void 新书入库ToolStripMenuItem_Click(object sender, EventArgs e)
private void 书籍入库tSBtn_Click(object sender, EventArgs e)
#endregion
#region 注销书籍
private void 注销书籍ToolStripMenuItem_Click(object sender, EventArgs e)
新书入库Form iNB = new 新书入库Form();
iNB.P = "1";
iNB.Text = "注销书籍";
iNB.ShowDialog();
#endregion
#region 查看帮助
private void 查看帮助ToolStripMenuItem_Click(object sender, EventArgs e)
MessageBox.Show("请联系管理员", "帮助");
private void 查看帮助tSBtn_Click(object sender, EventArgs e)
MessageBox.Show("请联系管理员", "帮助");
#endregion
private void FindBookForm_Load(object sender, EventArgs e)
if (Tag1 == "user")
注销书籍ToolStripMenuItem.Enabled =
修改ToolStripMenuItem.Enabled =
新书入库ToolStripMenuItem.Enabled =
书籍入库tSBtn.Enabled =
保存修改tSBtn.Enabled =
dgv_list.ReadOnly =
pageIndex = 1;
GetData();
private void GetData()
// 获取页大小
int pageSize = 14;
// 计算最多有多少页--Math.Ceiling--向上取整
// Convert.ToInt32(SqlHelper.ExecuteScalar("select count(*) from books"))得到数据记录总数
maxIndex = (int)Math.Ceiling((Convert.ToInt32(SqlHelper.ExecuteScalar("select count(*) from books")) * 1.0 / pageSize));
// 获取连接字符串
string str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionS
// 得到连接
using (SqlConnection conn = new SqlConnection(str))
// 判断是否有数据
// Convert.ToInt32(SqlHelper.ExecuteScalar("select count(*) from books"))得到数据记录总数
if (Convert .ToInt32 (SqlHelper.ExecuteScalar("select count(*) from books")) > 0 && pageIndex > 0)
// 确定有数据才进行查询
// 创建表格,用来存储数据
DataTable dt = new DataTable();
// 构造带分页功能的 sql 语句
string sql = "select bNum,bName,bAuthor,bPubCom,bPubDat,ISBN,bPrice,bTag from booksWithbookindex where bookindex between @sIndex and @eIndex";
// 构造适配器对象
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
// 传递参数
// 本页第一条数据
adapter.SelectCommand.Parameters.AddWithValue("@sIndex", ((pageIndex - 1) * pageSize + 1));
// 本页最后一条数据
adapter.SelectCommand.Parameters.AddWithValue("@eIndex", pageIndex * pageSize);
// 执行查询
conn.Open();
adapter.Fill(dt);
dgv_list.DataSource =
else if (pageIndex <= 0)
pageIndex = 1;
MessageBox.Show("没有获取到数据","警告");
private void 刷新书库tSBtn_Click(object sender, EventArgs e)
if (pageIndex <= 0)
pageIndex = 1;
GetData();
private void 刷新ToolStripMenuItem_Click(object sender, EventArgs e)
if (pageIndex <= 0)
pageIndex = 1;
GetData();
private void 跳转至首页tSBtn_Click(object sender, EventArgs e)
pageIndex = 1;
GetData();
private void 跳转至上一页tSBtn_Click(object sender, EventArgs e)
pageIndex--;
if (pageIndex
maxIndex )
pageIndex--;
MessageBox.Show("哎呀,到底啦 !","提示");
GetData();
private void 跳转至最后一页tSBtn_Click(object sender, EventArgs e)
pageIndex = maxI
GetData();
private void 保存修改tSBtn_Click(object sender, EventArgs e)
MessageBox.Show("功能暂未开放");
private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
MessageBox.Show("功能暂未开放");
private void 按书名查找tSBtn_Click(object sender, EventArgs e)
string sql = "select bNum,bName,bAuthor,bPubCom,bPubDat,ISBN,bPrice,bTag from booksWithbookindex where bName like &#39;%&#39;+ @bName +&#39;%&#39;";
MyDictionary dic = new MyDictionary();
dic.Add("@bName", 书名tSTB.Text.Trim());
DataTable dt = SqlHelper.GetList(sql, dic);
dgv_list.DataSource =
6.还书办理窗口
namespace 图书管理系统
public partial class ReturnBooks : Form
public ReturnBooks()
InitializeComponent();
private void Btn1_Click(object sender, EventArgs e)
if (Btn1.Text.Trim() == "")
MessageBox.Show("账号不能为空");
ShowBorrowList();
private void ShowBorrowList()
string sql = "select ID,uId,bName,bNum,bPrice,borrowDate,returnDate,Tag from borrow where uId =@uId";
MyDictionary dic = new MyDictionary();
dic.Add("@uId", uIdTB.Text.Trim());
DataTable dt = SqlHelper.GetList(sql, dic);
dataGridView1.DataSource =
private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
// 开关文本框的锁定,将表格内的数据显示到文本框内
int a = dataGridView1.CurrentRow.I
IDDTB.ReadOnly =
bNameTB.ReadOnly =
bPriceTB.ReadOnly =
bNumTB.ReadOnly =
uuIdTB.ReadOnly =
TagTB.ReadOnly =
borrowDateTB.ReadOnly =
returnDateTB.ReadOnly =
IDDTB.Text = dataGridView1.Rows[a].Cells["ID"].Value.ToString();
bNameTB.Text = dataGridView1.Rows[a].Cells["bName"].Value.ToString();
bPriceTB.Text = dataGridView1.Rows[a].Cells["bPrice"].Value.ToString();
bNumTB.Text = dataGridView1.Rows[a].Cells["bNum"].Value.ToString();
uuIdTB.Text = dataGridView1.Rows[a].Cells["uId"].Value.ToString();
TagTB.Text = (dataGridView1.Rows[a].Cells["Tag"].Value.ToString() == "1") ? "是" : "否";
borrowDateTB.Text = dataGridView1.Rows[a].Cells["borrowDate"].Value.ToString();
returnDateTB.Text = dataGridView1.Rows[a].Cells["returnDate"].Value.ToString();
IDDTB.ReadOnly =
bNameTB.ReadOnly =
bPriceTB.ReadOnly =
bNumTB.ReadOnly =
uuIdTB.ReadOnly =
TagTB.ReadOnly =
borrowDateTB.ReadOnly =
returnDateTB.ReadOnly =
#region 处理逾期未还书的用户
// 窗口加载时处理借书表内逾期的记录
private void ReturnBooks_Load(object sender, EventArgs e)
// 文本框锁定
IDDTB.ReadOnly =
bNameTB.ReadOnly =
bPriceTB.ReadOnly =
bNumTB.ReadOnly =
uuIdTB.ReadOnly =
TagTB.ReadOnly =
borrowDateTB.ReadOnly =
returnDateTB.ReadOnly =
// Date_Test存储过程
// 将逾期未还书的标记 (Tag 置为 1)
// 并将其用户冻结 (uBan 置为 1)
// create proc Date_Test
// select uId into #A from borrow where convert(varchar(20),GETDATE(),111)>= returnDate group by uId
// update borrow set Tag=&#39;1&#39; where convert(varchar(20),GETDATE(),111)>= returnDate
// update users set uBan=&#39;1&#39; where uId in(select uId from #A)
// drop table #A
string sql = "Date_Test";
MyDictionary dic = new MyDictionary();
SqlHelper.ExecuteNonQuery(sql, CommandType.StoredProcedure, dic);
#endregion
private void button1_Click(object sender, EventArgs e)
string sql="select uBan from users where uId=@uID";
MyDictionary dic3 = new MyDictionary();
dic3.Add("@uID", uuIdTB.Text.Trim());
if (SqlHelper.ExecuteScalar(sql, dic3).ToString() == "1")
MessageBox.Show("因逾期未还书账户被锁定,请及时解锁,并缴纳罚款");
// 办理借书手续
// 删除借书记录
sql = "delete from borrow where ID=@ID";
MyDictionary dic4 = new MyDictionary();
dic4.Add("@ID", IDDTB.Text.Trim());
SqlHelper.ExecuteNonQuery(sql, dic4);
// 得到书籍库存量 并+1
sql = "select bTag from books where bNum=@bNum";
MyDictionary dic5 = new MyDictionary();
dic5.Add("@bNum", bNumTB.Text.Trim());
int n = Convert.ToInt32(SqlHelper.ExecuteScalar(sql, dic5)) + 1;
sql = "update books set bTag=@bTag where bNum=@bNum";
MyDictionary dic6 = new MyDictionary();
dic6.Add("@bTag", n.ToString());
dic6.Add("@bNum", bNumTB.Text.Trim());
SqlHelper.ExecuteNonQuery(sql, dic6);
MessageBox.Show("还书提交完成");
// 刷新借书单
ShowBorrowList();
7.新书入库和注销书籍窗口
这个窗口用了panel实现了:新书入库、注销书籍两个功能(图片略)
namespace 图书管理系统
public partial class 新书入库Form : Form
public 新书入库Form()
InitializeComponent();
private string _p;
// p=="1"时为书籍注销操作
public string P
get { return _p; }
set { _p = }
private void 新书入库Form_Load(object sender, EventArgs e)
if (P != "1")
书籍注销panel.Visible =
private void 新书入库Btn_Click(object sender, EventArgs e)
if (bNameTB.Text.Trim() == "" || bAuthorTB.Text.Trim() == "" || bPubComTB.Text.Trim() == "" || ISBN.Text.Trim() == "" || bTagTB.Text.Trim() == "" || bPriceTB.Text.Trim() == "" || bPubDatTB.Text.Trim() == "")
MessageBox.Show("请填写完整信息", "失败");
// 自动获得图书序列号
string sql = " select COUNT(*)+1 from books";
string bNum = SqlHelper.ExecuteScalar(sql).ToString();
StringBuilder sb = new StringBuilder(bNum);
while (sb.Length != 6)
sb.Insert(0, "0");
bNum = sb.ToString();
// 添加操作
sql = "insert into books values(@bNum,@bName,@bAuthor,@bPubCom,@bPubDat,@ISBN,@bPrice,@bTag)";
MyDictionary dic = new MyDictionary();
dic.Add("@bNum", bNum);
dic.Add("@bName", bNameTB.Text.Trim());
dic.Add("@bAuthor", bAuthorTB.Text.Trim());
dic.Add("@bPubCom", bPubComTB.Text.Trim());
dic.Add("@bPubDat", bPubDatTB.Text.Trim());
dic.Add("@ISBN", ISBN.Text.Trim());
dic.Add("@bPrice", bPriceTB.Text.Trim());
dic.Add("@bTag", bTagTB.Text.Trim());
int i = SqlHelper.ExecuteNonQuery(sql, dic);
if (i == 1)
MessageBox.Show("添加成功,图书序列号为" + bNum);
private void 注销书籍Btn_Click(object sender, EventArgs e)
// 判断账号是否存在
if (!SqlHelper.IsBookExistsWithNum(注销书籍TB.Text.Trim()))
MessageBox.Show("书籍不存在", "操作失败");
DialogResult dt = MessageBox.Show("确定要注销此书吗", "提示", MessageBoxButtons.OKCancel);
if (dt != DialogResult.OK)
string sql = "delete from books where bNum=@bNum";
MyDictionary dic = new MyDictionary();
dic.Add("@bNum", 注销书籍TB.Text.Trim());
int i = SqlHelper.ExecuteNonQuery(sql, dic);
if (i == 1)
MessageBox.Show("注销成功");
this.Close();
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 简单图书馆管理系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信