基于C#+SQL Server2005(WinForm)图书管理系统

图书管理系统

一、 首先把数据库脚本贴出来(数据库名为library)

USE [library]
GO
/****** Object:  Table [dbo].[books]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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]
GO
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000001', N'数据库', N'123', N'123出版社', N'2012-09', N'978-1-23465-8', N'56', N'2')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000002', N'编程珠玑', N'Jon·Bentley', N'人民邮电出版社', N'2015-01', N'978-7-115-35761-8', N'39', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000003', N'C陷阱与缺陷', N'Andrew·Koeing', N'人民邮电出版社', N'2009-09', N'978-7-115-17179-5', N'30', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000004', N'C专家编程', N'Peter Van Der Linden', N'人民邮电出版社', N'2009-09', N'978-7-115-17108-1', N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000005', N'Python网络数据采集', N'Ryan Mitchell', N'人民邮电出版社', N'2016-03', N'978-7-115-41629-2', N'59', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000006', N'Flask Web开发', N'Miguel Grinberg', N'人民邮电出版社', N'2015-01', N'978-7-115-37399-1', N'59', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000007', N'C和指针', N'Kenneth A·Reek', N'人民邮电出版社', N'2009-12', N'978-7-115-17201-3', N'65', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000008', N'汇编语言', N'王爽', N'清华大学出版社', N'2015-05', N'978-7-302-33314-2', N'36', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000009', N'Python Cookbook', N'David Beazley & Brian K.Jones', N'人民邮电出版社', N'2015-05', N'978-7-115-37959-7', N'108', N'4')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000010', N'Python基础教程', N'Magnue Lie Hetland', N'人民邮电出版社', N'2015-09', N'978-7-115-35352-8', N'79', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000011', N'程序员代码面试指南', N'左程云', N'电子工业出版社', N'2015-09', N'978-7-121-27011-6', N'79', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000012', N'CLR via C#', N'Jeffrey Richter', N'清华大学出版社', N'2015-05', N'978-7-302-38097-9', N'109', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000013', N'大国崛起', N'唐晋', N'人民出版社', N'2011-03', N'7-01-006006-1', N'56', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000014', N'自控力', N'凯利·麦格尼格尔', N'文化发展出版社', N'2012-08', N'978-7-5142-0503-9', N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000015', N'麦肯锡思维', N'Rob Koplowitz', N'企业管理出版社', N'2012-08', N'978-7-5164-1050-9', N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000016', N'哈佛谈判心理学', N'Rrica Ariel Fox', N'中国友谊出版公司', N'2014-11', N'978-7-5057-3422-7', N'49.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000017', N'领导力21法则', N'John C Maxwell', N'时代出版传媒股份有限公司', N'2016-01', N'978-7-5699-0647-9', N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000018', N'斯坦福极简经济学', N'Timothy Taylor', N'湖南人民出版社', N'2015-02', N'978-7-5561-0739-1', N'35', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000019', N'拖延心理学', N'Jane B Birka & Lenora M Yuen', N'中国人民大学出版社', N'2009-12', N'978-7-300-11390-6', N'39.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000020', N'英语魔法师之语法俱乐部', N'旋元佑', N'九州出版社', N'2001-05', N'7-80114-627-1', N'35', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000021', N'赖世雄美语音标', N'赖世雄', N'外文出版社', N'2016-05', N'978-7-119-08680-4', N'20', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000022', N'人性的弱点', N'戴尔·卡耐基', N'人民日报出版社', N'2015-05', N'978-7-5115-3089-9', N'29.8', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000023', N'重新定义公司 谷歌是如何运营的', N'Eric Schmidt & Jonethan Rosenberg & Alan Eagle', N'中信出版集团', N'2015-09', N'978-7-5086-5359-4', N'49', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000024', N'从0到1 开启商业与未来的秘密', N'Peter Thiel', N'中信出版社', N'2015-01', N'978-7-5086-4971-9', N'45', N'5')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000025', N'代码大全2', N'Steven McConnell', N'电子工业出版社', N'2015-06', N'978-7-121-02298-2', N'128', N'0')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000026', N'胡适的北大哲学课 壹古代哲学', N'胡适', N'新世界出版社', N'2014-04', N'978-7-5104-4841-6', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000027', N'胡适的北大哲学课 贰中古哲学', N'胡适', N'新世界出版社', N'2014-04', N'978-7-5104-4841-6', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000028', N'胡适的北大哲学课 叁近世哲学', N'胡适', N'新世界出版社', N'2014-04', N'978-7-5104-4841-6', N'30', N'3')
INSERT [dbo].[books] ([bNum], [bName], [bAuthor], [bPubCom], [bPubDat], [ISBN], [bPrice], [bTag]) VALUES (N'000029', N'胡适的北大哲学课 肆世界哲学', N'胡适', N'新世界出版社', N'2014-04', N'978-7-5104-4841-6', N'30', N'3')
/****** Object:  Table [dbo].[admin]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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 
([aId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'1', N'1', N'张三', N'男', N'12345678999')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'111111', N'111111', N'李四', N'女', N'12311112222')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'2', N'2', N'张三', N'男', N'12311111111')
INSERT [dbo].[admin] ([aId], [aPwd], [aName], [aGender], [aPhoNum]) VALUES (N'222222', N'222222', N'李四', N'女', N'12322221111')
/****** Object:  Table [dbo].[borrow]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
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 
([ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000001', N'2', N'C专家编程', N'000004', N'45', N'2016/06/10', N'2016/09/08', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000003', N'2', N'数据库', N'000001', N'56', N'2016/06/10', N'2016/08/09', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000005', N'2', N'数据库', N'000001', N'56', N'2016/06/10', N'2016/08/09', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000006', N'2', N'数据库', N'000001', N'56', N'2016/06/10', N'2016/08/09', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000007', N'2', N'Python网络数据采集', N'000005', N'59', N'2016/06/10', N'2016/09/08', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000008', N'2', N'C和指针', N'000007', N'65', N'2016/06/10', N'2016/09/08', N'0')
INSERT [dbo].[borrow] ([ID], [uId], [bName], [bNum], [bPrice], [borrowDate], [returnDate], [Tag]) VALUES (N'000009', N'2', N'Python Cookbook', N'000009', N'108', N'2016/06/10', N'2016/08/09', N'0')
/****** Object:  Table [dbo].[users]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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 
([uId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'1', N'1', N'张三', N'男', N'12345678999', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'111111', N'111111', N'李四', N'女', N'11122221111', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'123456', N'123456', N'李四', N'女', N'12312341234', N'1')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'2', N'2', N'王五', N'男', N'12312313123', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'333333', N'333333', N'张三', N'男', N'12311112222', N'0')
INSERT [dbo].[users] ([uId], [uPwd], [uName], [uGender], [uPhoNum], [uBan]) VALUES (N'a123456', N'a123456', N'王五', N'女', N'12312341234', N'0')
/****** Object:  StoredProcedure [dbo].[Date_Test]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[Date_Test]
as  
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
GO
/****** Object:  View [dbo].[booksWithbookindex]    Script Date: 06/12/2016 11:27:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view [dbo].[booksWithbookindex]
as
select ROW_NUMBER()over(order by bNum ) as bookindex,* from books
GO

二、 定义一个MyDictionary类 和 定义一个SqlHelper类(封装复杂的SQL操作)

namespace 图书管理系统
{// 因为要频繁使用Dictionary<string, string> // 所以用一个自定义类MyDictionary继承Dictionary<string, string> public class MyDictionary : Dictionary<string, string>{}
}
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 = false;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 = true;}}return isExists;}// 执行sql操作   返回是否存在书名public static bool IsBookExistsWithName(string bName){bool isExists = false;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 = true;}}return isExists;}// 执行sql操作   返回是否存在此书籍序列号public static bool IsBookExistsWithNum(string bNum){bool isExists = false;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 = true;}}return isExists;}// 执行 ...   返回受影响行数private static int ExecuteNonQuery(string sql, CommandType type, params SqlParameter[] ps){int rows = -1;using (SqlConnection conn = GetConn()){SqlCommand cmd = new SqlCommand(sql, conn);cmd.CommandType = type; // 存储过程 type为StoredProcedurecmd.Parameters.AddRange(ps);conn.Open();rows = cmd.ExecuteNonQuery();}return rows;}public static int ExecuteNonQuery(string sql, 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, 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 = null;using (SqlConnection conn = GetConn()){SqlCommand cmd = new SqlCommand(sql, conn);conn.Open();obj = cmd.ExecuteScalar();}return obj;}public static object ExecuteScalar(string sql, CommandType type, MyDictionary dic){object obj = null;using (SqlConnection conn = GetConn()){SqlCommand cmd = new SqlCommand(sql, conn);cmd.CommandType = type;//构造参数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();}return obj;}public static object ExecuteScalar(string sql, MyDictionary dic){return ExecuteScalar(sql, CommandType.Text, dic);}// 执行查询  返回结果集DataTable  获取列表public static DataTable GetList(string sql, MyDictionary  dic){// 构造数据表,用于存储查询的数据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);}return 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("请输入账号或密码");}else {string str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionString;// 构造sql查询语句string sql;if (rBtn1.Checked == true){sql = "select uName from users where uId='" + Id + "' and uPwd='" + Pwd + "'";}else {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();// 将账号传给主窗体MainFormmainForm.Id = Id;// 用主窗体MainForm下的_Tag标记登陆的是用户还是管理员if (rBtn1.Checked == true)                   {mainForm._Tag = "user";mainForm.Name1 = name;sql = "select uBan from users where uId='" + Id + "' and uPwd='" + Pwd + "'";cmd = new SqlCommand(sql, conn);string b = cmd.ExecuteScalar().ToString();mainForm.B = b;}else{mainForm._Tag = "admin";mainForm.Name1 = name;}// 显示主窗体mainForm.ShowDialog();                         }else {MessageBox.Show("账号或密码错误!","登录失败");}}}}}
}

2.主界面

namespace 图书管理系统
{public partial class MainForm : Form{public MainForm(){InitializeComponent();}private string _id;// 账号public string Id{get { return _id; }set { _id = value; }}private string _name;public string Name1 // 姓名{get { return _name; }set { _name = value; }}// 权限标记 值为admin为管理员 ,值为user则为普通用户private string _tag;public string _Tag{get { return _tag; }set { _tag = value; }}// 标记账户是否被锁定  1为锁定 private string _b;  public string B{get { return _b; }set { _b = value; }}// 在加载窗体时设定操作权限private void MainForm_Load(object sender, EventArgs e){if (_Tag == "user"){tSSL2.Text = "权限级别:普通用户";tSSL5.Text = "   " + Name1;// 权限为用户时 将部分功能关闭新用户注册.Enabled = false;锁定用户.Enabled = false;新书入库.Enabled = false;借书.Enabled = false;还书.Enabled = false;书籍注销.Enabled = false;用户信息查询.Enabled = false;添加用户.Enabled = false;添加书籍.Enabled = false;借书办理.Enabled = false;还书办理.Enabled = false;if (B == "1"){toolStripStatusLabel3.Text = " 状态:被锁定";MessageBox.Show("账户被锁定,请尽快联系管理员", "警告");}}else{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 = _Tag;altPF.ShowDialog();}private void 修改密码_Click(object sender, EventArgs e){APF();}private void toolStripButton8_Click(object sender, EventArgs e){APF();}#endregion#region 修改个人信息private void UIF(){UpdateIndivForm uIF = new UpdateIndivForm();uIF.Id = Id;uIF._Tag = _Tag;uIF.ShowDialog();}private void 修改信息_Click(object sender, EventArgs e){UIF();}private void toolStripButton7_Click(object sender, EventArgs e){UIF();}#endregion#region 添加用户private void NewUser(){UpdateIndivForm uIF = new UpdateIndivForm();uIF.Id = Id;uIF._Tag = _Tag;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){INB();}private void 新书入库_Click(object sender, EventArgs e){INB();}#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._Tag;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("功能暂未开放");}        #endregionprivate void 用户信息查询_Click(object sender, EventArgs e){MessageBox.Show("该功能暂未开放");}}
}

3.新用户注册、修改个人信息、注销用户界面在同一个窗体

namespace 图书管理系统
{public partial class UpdateIndivForm : Form{public UpdateIndivForm(){InitializeComponent();}private string _id;public string Id{get { return _id; }set { _id = value; }}// 权限标记 值admin为管理员 ,值为user则为普通用户private string _tag;public string _Tag{get { return _tag; }set { _tag = value; }}// P标记用来决定是否隐藏panelprivate string _p;public string P{get { return _p; }set { _p = value; }}// 加载个人信息private void UpdateIndivForm_Load(object sender, EventArgs e){if (P == "1")       // p == "1"  为注册新用户功能{注册用户panel.Visible = true;注销用户panel.Visible = false;}else if (P == "2")  // p == "2"  为注销用户功能{}else                //          为修改个人信息{注册用户panel.Visible = false;注销用户panel.Visible = false ;string str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionString;string sql;if (_Tag == "user"){sql = "select * from users where uId='" + Id + "'";}else{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()){r.Read();账号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 = "被锁定,请尽快联系管理员办理解锁";}else{label7.Text = "正常";}}else{label7.Text = "正常";}if (r.GetString(3) == "男"){男radioButton.Checked = true;}else{女radioButton.Checked = true;}}cmd.Dispose();}提交button.Visible = false;}}#region 提交修改个人信息  private void 姓名textBox_TextChanged(object sender, EventArgs e){提交button.Visible = true;}private void 账号textBox_TextChanged(object sender, EventArgs e){if (账号textBox.Text!= Id){提交button.Visible = true;}else{提交button.Visible = false;}}private voidradioButton_CheckedChanged(object sender, EventArgs e){提交button.Visible = true;}private void 电话号码textBox_TextChanged(object sender, EventArgs e){提交button.Visible = true;}private void 提交button_Click(object sender, EventArgs e){ // 判断账号是否存在if (账号textBox.Text != Id){if (SqlHelper.IsUserExists(uIdTb.Text.Trim())){MessageBox.Show("账号已存在", "操作失败");return;}}// 完成用户的修改string uName = 姓名textBox.Text.Trim();string uId = 账号textBox.Text.Trim();string uPhoNum = 电话号码textBox.Text.Trim();string uGender;if (男radioButton.Checked == true){uGender = "男";}else{uGender = "女";}// 构造sql语句string sql;if (_Tag == "user"){sql = "update users set uId =@uId,uName=@uName,uGender=@uGender,uPhoNum=@uPhoNum where uId=@ID";}else{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();}       #endregionprivate 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 < 2 || uNameTb.Text.Trim().Length > 15){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("请输入合法的手机号码或电话号码");}else{// 判断判断账号是否存在if (SqlHelper.IsUserExists(uIdTb.Text.Trim())){MessageBox.Show("账号已存在","操作失败");return;}if(注册rBtn男.Checked == true ){uGender ="男";}else {uGender ="女";}// 添加新用户string sql = "insert into users(uId,uPwd,uName,uGender,uPhoNum,uBan) values(@id,@pwd,@name,@gender,@phonum,'0')";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();}else{MessageBox.Show("操作失败,请联系管理员");}}}private void 注销Btn_Click(object sender, EventArgs e){// 判断账号是否存在if (!SqlHelper.IsUserExists(deletTB.Text.Trim())){MessageBox.Show("账号不存在", "操作失败");return;}else{DialogResult dt = MessageBox.Show("确定要注销此用户吗", "提示", MessageBoxButtons.OKCancel);if (dt != DialogResult.OK){return;}else{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 _id;public string Id{get { return _id; }set { _id = value; }}// 权限标记 值admin为管理员 ,值为user则为普通用户private string _tag;public string _Tag{get { return _tag; }set { _tag = value; }}private void APbtn_Click(object sender, EventArgs e){string sql;if (textBox1.Text.Trim() == "" || textBox2.Text.Trim() == "" || textBox3.Text.Trim() == ""){MessageBox.Show("请填写完整", "警告");}else if (textBox2.Text.Trim().Length < 6 || textBox3.Text.Trim().Length < 6){MessageBox.Show("新密码长度必须大于六位", "提示");}else if (textBox2.Text.Trim() != textBox3.Text.Trim()){MessageBox.Show("两次输入的新密码不一致","警告");}else{if (_Tag == "user"){sql = "update users set uPwd =@uPwd where uId=@uId and uPwd=@uPwdd";}else{sql = "update admin set aPwd = @uPwd where aId=@uId and aPwd=@uPwdd";}MyDictionary dic1 = new MyDictionary();dic1.Add("@uPwd", textBox2.Text.Trim());dic1.Add("@uId", Id.ToString());dic1.Add("@uPwdd", textBox1.Text.Trim());int n = SqlHelper.ExecuteNonQuery(sql, dic1);if (n > 0){MessageBox.Show("修改成功", "OK");this.Close();}else{MessageBox.Show("密码错误", "警告");}}}}
}

5.借书办理窗口

namespace 图书管理系统
{public partial class BorrowBooks : Form{public BorrowBooks(){InitializeComponent();}private void 查书btn_Click(object sender, EventArgs e){if (查寻书名tB.Text.Trim() == ""){MessageBox.Show("书名不能为空");}else {string sql = "select bNum,bName,bAuthor,bPubCom,bPrice,bTag from booksWithbookindex where bName like '%'+ @bName +'%'";MyDictionary dic = new MyDictionary();dic.Add("@bName", 查寻书名tB.Text.Trim());DataTable dt = SqlHelper.GetList(sql, dic);dataGridView1.DataSource = dt;}}private void 提交借书_Click(object sender, EventArgs e){// 是否存在该用户if (uIdTb.Text.Trim() == ""|| comboBox1.Text.ToString().Trim() == ""){MessageBox.Show("请填写用户名和借阅时间!", "警告");return;}else if (bNumTB.Text.Trim() == "" || bNameTB.Text.Trim() == "" || bPriceTB.Text.Trim() == ""){MessageBox.Show("请选择书籍!","警告");}else if (!SqlHelper.IsUserExists(uIdTb.Text.Trim())){MessageBox.Show("不存在该用户!", "警告");return;}else{// 自动获得图书序列号string sql = " select COUNT(*)+1 from borrow";string ID = SqlHelper.ExecuteScalar(sql).ToString();StringBuilder sb = new StringBuilder(ID);while (sb.Length != 6){sb.Insert(0, "0");}ID = sb.ToString();// 查询书籍库存量sql = "select bTag from books where bNum=@bNum";MyDictionary dic1 = new MyDictionary();dic1.Add("@bNum", bNumTB.Text.Trim());string n = SqlHelper.ExecuteScalar(sql, dic1).ToString();if (n == "0"){MessageBox.Show("该书籍库存量为零!","警告");return ;}// 插入数据到借书表(borrow)sql = "insert into borrow values(@ID,@uId,@bName,@bNum,@bPrice,convert(varchar(20),GETDATE() ,111),convert(varchar(20),dateadd(day," + comboBox1.Text.ToString().Substring(0, 2) + ",CONVERT(varchar(20),GETDATE() ,111)),111),@Tag)";MyDictionary dic = new MyDictionary();dic.Add("@ID", ID);dic.Add("@uId", uIdTb.Text.Trim());dic.Add("@bName", bNameTB.Text.Trim());dic.Add("@bNum", bNumTB.Text.Trim());dic.Add("@bPrice", bPriceTB.Text.Trim());dic.Add("@Tag", "0");// Tag = 0 标记该书未超归还期限 int i = SqlHelper.ExecuteNonQuery(sql, dic);if (i > 0){n = (Convert.ToInt32(n) - 1).ToString(); // 库存量-1sql = "update books set bTag=@bTag where bNum=@bNum";MyDictionary dic2 = new MyDictionary();dic2.Add("@bTag", n);dic2.Add("@bNum", bNumTB.Text.Trim());SqlHelper.ExecuteScalar(sql, dic2);MessageBox.Show("提交成功");}}}// 表格单元格鼠标MouseUp事件private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e){// 开关文本框的锁定,将表格内的数据显示到文本框内int a = dataGridView1.CurrentRow.Index;bNumTB.ReadOnly = false;bNameTB.ReadOnly = false;bPriceTB.ReadOnly = false;bNumTB.Text = dataGridView1.Rows[a].Cells["bNum"].Value.ToString();bNameTB.Text = dataGridView1.Rows[a].Cells["bbName"].Value.ToString();bPriceTB.Text = dataGridView1.Rows[a].Cells["bPrice"].Value.ToString();bNumTB.ReadOnly = true;bNameTB.ReadOnly = true;bPriceTB.ReadOnly = true;}}
}

6.还书办理窗口

namespace 图书管理系统
{public partial class ReturnBooks : Form{public ReturnBooks(){InitializeComponent();}private void Btn1_Click(object sender, EventArgs e){if (Btn1.Text.Trim() == ""){MessageBox.Show("账号不能为空");}else{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 = dt;}private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e){// 开关文本框的锁定,将表格内的数据显示到文本框内int a = dataGridView1.CurrentRow.Index;IDDTB.ReadOnly = false;bNameTB.ReadOnly = false;bPriceTB.ReadOnly = false;bNumTB.ReadOnly = false;uuIdTB.ReadOnly = false;TagTB.ReadOnly = false;borrowDateTB.ReadOnly = false;returnDateTB.ReadOnly = false;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 = true;bNameTB.ReadOnly = true;bPriceTB.ReadOnly = true;bNumTB.ReadOnly = true;uuIdTB.ReadOnly = true;TagTB.ReadOnly = true;borrowDateTB.ReadOnly = true;returnDateTB.ReadOnly = true;}#region 处理逾期未还书的用户// 窗口加载时处理借书表内逾期的记录 private void ReturnBooks_Load(object sender, EventArgs e){// 文本框锁定IDDTB.ReadOnly = true;bNameTB.ReadOnly = true;bPriceTB.ReadOnly = true;bNumTB.ReadOnly = true;uuIdTB.ReadOnly = true;TagTB.ReadOnly = true;borrowDateTB.ReadOnly = true;returnDateTB.ReadOnly = true;// Date_Test存储过程// 将逾期未还书的标记 (Tag 置为 1)// 并将其用户冻结 (uBan 置为 1)// create proc Date_Test// as // 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 #Astring sql = "Date_Test";MyDictionary dic = new MyDictionary();SqlHelper.ExecuteNonQuery(sql, CommandType.StoredProcedure, dic);}#endregionprivate 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("因逾期未还书账户被锁定,请及时解锁,并缴纳罚款");return;}else {// 办理借书手续// 删除借书记录 sql = "delete from borrow where ID=@ID";MyDictionary dic4 = new MyDictionary();dic4.Add("@ID", IDDTB.Text.Trim());SqlHelper.ExecuteNonQuery(sql, dic4);// 得到书籍库存量 并+1sql = "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 = value; }}private void 新书入库Form_Load(object sender, EventArgs e){if (P != "1"){书籍注销panel.Visible = false;}}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("请填写完整信息", "失败");}else{// 自动获得图书序列号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("书籍不存在", "操作失败");return;}else{DialogResult dt = MessageBox.Show("确定要注销此书吗", "提示", MessageBoxButtons.OKCancel);if (dt != DialogResult.OK){return;}else{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();}}}
}

8.查询书籍窗口

namespace 图书管理系统
{public partial class FindBookForm : Form{public FindBookForm(){InitializeComponent();}private string _tag;public string Tag1{get { return _tag; }set { _tag = value; }}// pageIndex 标记DGV应该显示第几页private int pageIndex;// pageIndex 标记DGV的总页数int maxIndex;#region 添加书籍private static void INB(){新书入库Form iNB = new 新书入库Form();iNB.ShowDialog();}private void 新书入库ToolStripMenuItem_Click(object sender, EventArgs e){INB();}private void 书籍入库tSBtn_Click(object sender, EventArgs e){INB();}#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("请联系管理员", "帮助");}#endregionprivate void FindBookForm_Load(object sender, EventArgs e){if (Tag1 == "user"){注销书籍ToolStripMenuItem.Enabled = false;修改ToolStripMenuItem.Enabled = false;新书入库ToolStripMenuItem.Enabled = false;书籍入库tSBtn.Enabled = false;保存修改tSBtn.Enabled = false;dgv_list.ReadOnly = true;}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"].ConnectionString;// 得到连接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 = dt;}else if (pageIndex <= 0){pageIndex = 1;}else{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 <= 0){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 = maxIndex;GetData();}private void 保存修改tSBtn_Click(object sender, EventArgs e){MessageBox.Show("功能暂未开放");/** * // 若绑定数据源则用dgv_list.DataSource as DataTable;// 未绑定则用DgvToTable()强制转换// = DgvToTable(dgv_list);DataTable dt=dgv_list.DataSource as DataTable;// 完成adapter的UpdateCommandstring str = System.Configuration.ConfigurationManager.ConnectionStrings["library"].ConnectionString;using (SqlConnection conn = new SqlConnection(str)){SqlDataAdapter adapter = new SqlDataAdapter();// 构造UpdateCommandstring update = "update books set bName=@bName, bAuthor=@bAuthor,bPubCom=@bPubCom,bPubDat=@bPubDat,ISBN=@ISBN,bPrice=@bPrice,bTag=@bTag where bNum=@bNum";SqlCommand updateCmd = new SqlCommand(update, conn);updateCmd.Parameters.Add("@bName", SqlDbType.NVarChar , 60, "bName");updateCmd.Parameters.Add("@bAuthor", SqlDbType.NVarChar, 60, "bAuthor");updateCmd.Parameters.Add("@bPubCom", SqlDbType.NVarChar, 50, "bPubCom");updateCmd.Parameters.Add("@bPubDat", SqlDbType.NVarChar, 20, "bPubDat");updateCmd.Parameters.Add("@ISBN", SqlDbType.NVarChar, 50, "ISBN");updateCmd.Parameters.Add("@bPrice", SqlDbType.NVarChar, 10, "bPrice");updateCmd.Parameters.Add("@bTag", SqlDbType.NVarChar, 10, "bTag");updateCmd.Parameters.Add("@bNum", SqlDbType.NVarChar, 10, "bNum");adapter.UpdateCommand = updateCmd;// 执行conn.Open();adapter.Update(dt);}// 刷新数据GetData();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 '%'+ @bName +'%'";MyDictionary dic = new MyDictionary();dic.Add("@bName", 书名tSTB.Text.Trim());DataTable dt = SqlHelper.GetList(sql, dic);dgv_list.DataSource = dt;}}
}

注意事项

请将源代码中的app.config配置文件中的“Data Source”改为当前使用机器的sqlserver账号和实例名称,并更改相应的“User Id=sa;Password=123”

sqlserver文件夹下是sqlserver2005版本下创建的数据库文件

数据库配置可以看app.config配置文件,因为是很早的sql-server版本,所以很可能出现不兼容或者未知的错误。各位自己研究一下,成功了的话可以反馈一下经验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145558.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Σ-Δ模数转换器(ADC)揭秘(2)

5. Maxim的Σ-Δ ADC 新型高度集成Σ-Δ ADC以最少数量的外部元件处理小信号。例如&#xff0c;MAX1402芯片包括众多功能&#xff0c;被作为片上系统(图12)。器件在工作模式下的静态电流低至250A(关断模式下为2A)&#xff0c;480sps速率时的精度为16位&#xff0c;4800sps速率…

英语六级-学习

01 英语分值比例 02听力学习 听力练习&#xff0c;基础好选择标准VOA和BBC。基础差选择VOA慢速。 听力内容包括不受政治争议的内容&#xff0c;社会生活类(奇闻趣事、日常生活)、经济类(商务、职场相关)、环保类、互联网类---------根据各类主题快速找到录音材料中心点。 研…

基于YOLOv8的RTSP视频流实时目标检测与告警系统设计与实现(超详细)

前言 在训练模型完成后&#xff0c;想把模型应用起来&#xff0c;比如模型可以部署到项目中&#xff0c;实时接收RTSP视频流进行识别检测&#xff0c;一旦达到自己所设置的置信度阈值&#xff08;例如大于0.5&#xff09;&#xff0c;系统就会实时把报警信息发送给服务端&…

让银河麒麟桌面操作系统V10(SP1)允许ping测

银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;使用的防火墙是kylin-firewall&#xff0c;默认情况下“公用网络”是禁ping的&#xff0c;如下图&#xff1a; 可以在“安全中心”->“网络保护”->“配置访问规则”->“专网规则”->找到“icmp”这条规则&…

减少代码错误的方法

最重要的是在写之前多举几个刁钻的例子来理解问题和代码的正确性 如果你给不出反例就说明你还没有理解&#xff08;有的反例会后来会被证明是错的&#xff09; 由于递归是把自己的和别人的相关的混合在一起来了&#xff0c;所以举反例的时候要从不同的角度出发。 求割点的&a…

二、电源滤波器

电源滤波器 1、电源滤波的过程分析! 波形形成过程: 2、计算: 滤波电容的容量和耐压值选择。 学习心得

【算法】最长公共子序列(C/C++)

最长公共子序列&#xff08;LCS&#xff0c;Longest Common Subsequence&#xff09;问题简称&#xff08;LCS&#xff09;&#xff0c;是动态规划里面里面的基础算法。它的所解决的问题是&#xff0c;在两个序列中找到一个序列&#xff0c;使得它既是第一个序列的子序列&#…

【计算机网络 - 基础问题】每日 3 题(十三)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

阿里史上最大规模开源发布,超GPT-4o 、Llama-3.1!

今天凌晨&#xff0c;阿里巴巴官宣了史上最大规模的开源发布&#xff0c;推出了基础模型Qwen2.5、专用于编码Qwen2.5-Coder和数学的Qwen2.5-Math。 这三大类模型一共有10多个版本&#xff0c;包括0.5B、1.5B、3B、7B、14B、32B和72B&#xff0c;适用于个人、企业以及移动端、P…

数字化转型的策略与执行路径

企业在明确数字化转型的目标并评估自身数字化能力之后&#xff0c;必须前瞻性地识别出实现这些目标所需的关键数字化能力。基于这些能力&#xff0c;企业应制定出一套数字化转型战略&#xff0c;确立短期和中长期的转型目标&#xff0c;确保数字技术投资带来价值&#xff0c;而…

vulhub搭建漏洞环境docker-compose up -d命令执行报错以及解决方法汇总

在利用vulhub靶场搭建环境进行漏洞复现时&#xff0c;我们通常要使用这一步命令&#xff1a; docker-compose up -d 但是经常报错&#xff0c;今天我们来说几个常见的报错以及解决方法&#xff1a; 1.报错提示&#xff1a; ERROR: Couldnt connect to Docker daemon at httpdoc…

MySQL_图形管理工具简介、下载及安装(超详细)

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

如何确保Java程序分发后不被篡改?使用JNI对Java程序进行安全校验

前言 众所周知&#xff0c;Java/Kotlin编译后会编译成smali&#xff0c;使用Jadx这类的反编译工具或者Hook工具就能很轻松的把我们的软件安全校验给破解了。 为了防止这种情况发生&#xff0c;我们一般会将核心代码使用C编写&#xff0c;然后使用JNI技术&#xff0c;使用Java…

对接全国点餐api接口有哪些具体步骤

与第三方餐饮服务提供商进行接口对接可以按照以下步骤进行&#xff1a; 一、前期准备 1.明确需求&#xff1a; 确定你的业务目标和对接口的具体需求。例如&#xff0c;你是希望通过接口获取餐厅信息、菜品列表、价格、库存情况&#xff0c;还是实现订单提交、支付处理、配送…

WAN广域网技术--PPP和PPPoE

广域网基础概述 广域网&#xff08;Wide Area Network&#xff0c;WAN&#xff09;是一种覆盖广泛地区的计算机网络&#xff0c;它连接不同地理位置的计算机、服务器和设备。广域网通常用于连接不同城市、州或国家之间的网络&#xff0c;它通过互联网服务提供商&#xff08;ISP…

中泰免签,准备去泰国旅游了吗?《泰语翻译通》app支持文本翻译和语音识别翻译,解放双手对着说话就能翻译。

泰国是很多中国游客的热门选择&#xff0c;现在去泰国旅游更方便了&#xff0c;因为泰国对中国免签了。如果你打算去泰国&#xff0c;那么下载一个好用的泰语翻译软件是很有必要的。 简单好用的翻译工具 《泰语翻译通》App就是为泰国旅游设计的&#xff0c;它翻译准确&#x…

pg198-jesd204-phy阅读笔记

简介 介绍 JESD204 PHY IP核实现了JESD204的物理接口&#xff0c;简化在发送和接收核心之间共享串行收发器信息通道。此内核一般不单独使用&#xff0c;只能与JESD204或JESD204C内核结合使用&#xff08;目前不太懂这句话&#xff0c;因为我只看到与TX、RX IP核结合使用&#…

声网SDK脚本运行错误

文章目录 运行步骤无法运行.bat电脑出现警告--更改执行策略若无出现-更新power shell搜索最新版本的 PowerShell安装新版本 仍无法解决-手动下载第三方库 2024-9-9运行步骤 无法运行.bat 电脑出现警告–更改执行策略 若无出现-更新power shell 搜索最新版本的 PowerShell 在…

Java面试篇基础部分-Java线程生命周期

线程的生命周期分别为 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)这五种状态。   在系统运行过程中有线程不断地被创建,而旧的线程在执行完毕之后被清理,线程通过排队的方式获取共享资源或者锁的时候被阻塞,所以运行中的线程就会在…

让医院更智慧,让决策更容易

依托数字孪生技术&#xff0c;赋能智慧医院&#xff0c;对使用者和决策者带来了众多的优势。数字孪生技术是将物理实体与数字模型相结合&#xff0c;实现实时监测、仿真预测和智能决策的一种先进技术。在智慧医院中应用数字孪生技术&#xff0c;不仅可以提升医疗服务的质量和效…