用C#做了一个简单的图书管理系统.
一 数据准备(1)创建数据库
利用SQL Sever2008创建一个MBOOK的数据库(2)创建了四张基础表:TReader(读者信息表),TBook(图书信息表),TLend(借阅表),TUser(用户数据表)
(3)借书的存储过程
CREATE PROCEDURE Book_Borrow @in_ReaderID char(8), @in_ISBN char(18), @in_BookID char(10),
@out_str char(30) OUTPUT
AS
BEGIN
IF NOT EXISTS(SELECT * FROM TReader WHERE ReaderID=@in_ReaderID)
BEGIN
SET @out_str= ‘该读者不存在’
RETURN 0
END
IF NOT EXISTS(SELECT * FROM TBook WHERE ISBN=@in_ISBN)
BEGIN
SET @out_str= ‘该图书不存在’
RETURN 0
END
IF (SELECT Num FROM TReader WHERE ReaderID=@in_ReaderID)=5
BEGIN
SET @out_str= ‘读者借书量不能大于5’
RETURN 0
END
IF (SELECT SNum FROM TBook WHERE ISBN=@in_ISBN)=0
BEGIN
SET @out_str= ‘图书库存量为0’
RETURN 0
END
IF @in_ISBN IN (SELECT ISBN FROM TLend WHERE ReaderID=@in_ReaderID)
BEGIN
SET @out_str= ‘读者已经借过该书’
RETURN 0
END
IF EXISTS(SELECT * FROM TLend WHERE BookID=@in_BookID AND ReaderID=@in_ReaderID)
BEGIN
SET @out_str= ‘该图书ID已存在’
RETURN 0
END
BEGIN TRAN /开始一个事务/
INSERT INTO TLend VALUES(@in_BookID, @in_ReaderID, @in_ISBN, GETDATE())
IF @@ERROR>0 /如果前面一条SQL语句出错则回滚事务并返回/
BEGIN
ROLLBACK TRAN
SET @out_str= ‘执行过程中遇到错误’
RETURN 0
END
UPDATE TReader SET Num=Num+1 WHERE ReaderID=@in_ReaderID
IF @@ERROR>0 /如果前面一条SQL语句出错则回滚事务并返回/
BEGIN
ROLLBACK TRAN
SET @out_str= ‘执行过程中遇到错误’
RETURN 0
END
UPDATE TBook SET SNum=SNum1 WHERE ISBN=@in_ISBN
IF @@ERROR=0 /如果所有语句都不出错则结束事务并返回/
BEGIN
COMMIT TRAN
SET @out_str= ‘借书成功’
RETURN 1
END
ELSE /如果执行出错则回滚所有操作并返回/
BEGIN
ROLLBACK TRAN
SET @out_str= ‘执行过程中遇到错误’
RETURN 0
END
END(4)还书的时候的触发器
USE MBOOK
GO
CREATE TRIGGER TLend_delete ON TLend
AFTER DELETE
AS
BEGIN
UPDATE TReader SET Num=Num-1 WHERE ReaderID=(SELECT ReaderID FROM deleted)
UPDATE TBook SET SNum=SNum+1 WHERE ISBN=(SELECT ISBN FROM deleted)
END
(5)还书时候的存储过程
USE [MBook]
GO
/****** Object: StoredProcedure [dbo].[Book_Return] Script Date: 06/03/2020 16:59:15 *****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[Book_Return](@in_ReaderID nchar(10),@in_BookID nchar(10),@out_str char(30) OUTPUT)
AS
BEGIN
IF NOT EXISTS(SELECT * FROM TReader WHERE ReaderID=@in_ReaderID)
BEGIN
SET @out_str= ‘该读者不存在’
RETURN 0
END
IF NOT EXISTS(SELECTFROM TLend WHERE ReaderID=@in_ReaderID AND BookID=@in_BookID)
BEGIN
SET @out_str=‘该读者并未借过此书’
RETURN 0
END
BEGIN TRAN
DELETE FROM TLend WHERE ReaderID=@in_ReaderID AND BookID=@in_BookID
登录窗体
注意事项:匹配用户账号,用户密码,用于实现登录,忘记密码的时候可以进行找回密码,可以修改密码
主界面窗体
1.菜单栏以及工具栏的使用,作为父窗体,,IsMdiContainer属性值设置为“True”,Text属性值设置为“图书管理系统”,Icon属性选择准备好的图标。BackgroundImage属性选择准备好的图片。
2.分别双击“借书‘,“还书”、“读者管理”和 “图书管理”为其添加事件
主界面的各控件属性设置:
借书窗体
1.点击查询按钮,利用借书证号进行匹配数据库,查询借阅表,并将借阅信息展现在下方DataGridView控件中
2.利用借书证号,图书ID,ISBN,利用ADO.NET技术操作数据库MBOOK,调用存储过程borrow_book,点击借书按钮,完成借书过程,并将更新后的借阅信息表更新在下方DataGridView控件中
还书窗体
注意事项:
1.点击查询按钮,利用借书证号进行匹配数据库,查询借阅表,并将借阅信息展现在下方DataGridView控件中
2.点击还书按钮,利用借书证号,图书ID,利用ADO.NET技术操作数据库MBOOK,利用触发器实现功能:当用户“归还”图书时,即删除借阅表(TLend)中的一条借书记录 时,读者信息表(TReader)该读者的借书量减“1”;图书信息表(TBook)该图书 记录的库存量加“1”。通过创建借阅表(TLend)的DELETE触发器实现。
读者信息窗体
注意事项:
1.查询,点击查询按钮,利用借书证号进行匹配数据库,查询读者信息表,并将借阅信息展现在下方DataGridView控件中,注意利用SqlDataReader读取数据库数据,在读的过程中,我们得先判定照片框中是否预先有照片,如果有进行销毁,SQL数据库中的图片是以二进制信息进行保存的,我么要利用字节数组,以字节的形式输出,并且将字节流转换成内存流,最后利用Image.FromStream(),生成图片;
2.添加读者,利用控件输入框填写信息,点击保存按钮进行保存,记得注意的是我们得判断是否选择了照片,如果要,点击选择照片按钮,利用openFileDialog1.FileName获得文件路径,利用FileStream读取,用字节数组写入数据库中
3.修改读者信息,将要修改的信息填写在输入框中,要注意的是得判断输入框是不是为空,不为空代表这个字段要修改,书写SQL语句的时候得加上这个字段。
4.删除读者,利用借书证号直接删除
5.帮助按钮,点击打开一个对话框,里面书写着使用手册
图书信息窗体
注意事项:
1.查询,点击查询按钮,利用图书ID进行匹配数据库,查询图书信息表,并将借阅信息展现在下方DataGridView控件中,注意利用SqlDataReader读取数据库数据
2.修改,将要修改的信息填写在输入框中
3.添加,将要添加的信息填写在输入框中
4.帮助按钮,点击打开一个对话框,里面书写着使用手册
END
●C#会不会成为移动开发最便捷语言?
●C# 委托、泛型委托与Lambda表达式
● .Net平台下的B/S开发框架
●C#多线程读写同一文件处理
●C#使用 MQTTnet 快速实现 MQTT 通信
●socket网口通信通用实例