技术标签: c# sqlserver C#windows窗体 系统架构
在目前社会,有很大一部分的图书馆或者商店书籍更新不断,有时候很难进行高效简单的管理,甚至不进行入库登记管理,这给日后管理统计查看书籍存量和馆藏书籍目录带来了相当大的麻烦,因此图书管理显得尤为重要,图书管理系统可以很好的解决书籍检索、查看、统计问题,从而做到对馆藏图书情况的掌握。
论文针对市面上已有的图书管理存在着操作繁琐、对于使用者要求较高、不适合普通的书店使用等问题,开发设计了一种基于Windows系统的图书管理系统,利用Visual studio工具开发完成的系统。经过测试,管理者可使用系统对书籍添加、删除、查找、修改以及对书籍借出、归还库存数量进行有效管理。这样对书籍库存,书籍检索有着很直观的把握。表明了本文所设计的系统能够达到一般管理者对于图书信息的管理,达到了最初的设计要求。
关键词:Windows窗体;图书管理系统;管理系统;数据库
更多源码和原文档获取:winform之家
操作系统:Windows10
运行环境:VisualStudio
数据库环境:SQL Server
本图书信息管理系统主要为登录注册,图书信息的增加、删除、查找、修改,图书借阅和归还库存的统计等。
系统功能模块图如图3-1所示。
图3-1系统功能模块图
1)管理员登录、注册:管理员可以注册和登录使用该系统。
2)图书增加:当有新书籍引入时,管理员可以将图书信息全部录入系统。
3)图书修改:当图书有变动,如库存总量变化等管理员可修改系统数据。
4)图书查找:管理员可以对系统内的图书查找,可以通过类型、书名、图书编号分别进行不同需要的查找。
5)图书删除:对销毁或者淘汰书籍进行删除出系统。
6)图书借出:当图书被借出,对应书籍系统中库存减少
7)图书归还:当图书被归还时,对应书籍系统中库存增加
数据库设计
E-R图
5-1.1登录窗口
此窗体界面用于管理员的登录,无账号的用户可点击注册。
登录窗口实现的功能逻辑部分代码如下:
private void btnLogin_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("请输入完整信息!!!");
return;
}
string count = textBox1.Text;
string pwd = textBox2.Text;
User user = new User {
account = count, password = pwd };
bool result = ma.Login(user);
if (result)
{
this.Hide();
frmMain mainForm = new frmMain(textBox1.Text, pwd);
mainForm.StartPosition = FormStartPosition.CenterScreen;
mainForm.Show();
}
else
{
MessageBox.Show("账号或密码错误!!!");
}
}
5-1.2注册窗口
此窗体界面用于管理员注册。
注册窗口实现的功能逻辑部分代码如下:
private void btnSubmit_Click(object sender, EventArgs e)
{
string count = txt_count.Text;
string pwd = txt_pwd.Text;
string nc = txt_name.Text;
string rePwd = txt_submit.Text;
if (count == "" || pwd == "" || nc == "" || rePwd == "")
{
MessageBox.Show("请输入完整信息!!!");
return;
}
if (!ver.IsCode(txt_count.Text))//验证账号是否正确
{
MessageBox.Show("请输入4位数字账号!!!");
return;
}
if (!ver.IsChinese(txt_name.Text))//验证账号是否正确
{
MessageBox.Show("请输入中文昵称!!!");
return;
}
if (pwd == rePwd)
{
User user = new User {
account = count, password = pwd, name = nc };
bool result = ma.Register(user);
if (result)
{
MessageBox.Show("注册成功!!!");
}
else
{
MessageBox.Show("账号已存在!!!");
}
}
else
{
MessageBox.Show("两次输入不一致!!!");
}
}
5-2.1图书添加窗口
此窗体界面用于图书信息的添加,填写完整数据后可添加进入数据库。
图书添加窗口实现的功能逻辑部分代码如下:
private void btnSubmit_Click(object sender, EventArgs e)
{
if (checkNull())
{
string name = txtName.Text;
string author = txtAuthor.Text;
string press = txtPress.Text;
string bClass = cbClass.Text;
string number = txtNumber.Text;
string bfrom = txtFrom.Text;
if (!ver.IsNumber(txtNumber.Text))
{
MessageBox.Show("数量只能为数字计数!!!");
}
Book book = new Book
{
bookName = name,
bookAuthor = author,
bookPress = press,
bookClass = bClass,
bookNumber = number,
bookFrom = bfrom,
bookPhoto = bytes
};
bool result = bk.Addbook(book);
if (result)
{
MessageBox.Show("添加成功");
getAll();
ClearAll();
}
else
{
MessageBox.Show("添加失败");
}
}
else
{
MessageBox.Show("请输入完整信息");
}
}
5-2.2图书修改窗口
此窗体界面用于管理员修改图书信息
图书修改窗口实现的功能逻辑部分代码如下:
private void btnRevise_Click(object sender, EventArgs e)
{
if (checkNull())
{
int no = int.Parse(bookId);
string name = txtName.Text;
string author = txtAuthor.Text;
string press = txtPress.Text;
string bClass = cbClass.Text;
string number = txtNumber.Text;
string bfrom = txtFrom.Text;
Book book = new Book
{
bookId = no,
bookName = name,
bookAuthor = author,
bookPress = press,
bookClass = bClass,
bookNumber = number,
bookFrom = bfrom,
bookPhoto = bytes
};
bool result = bk.Updatebook(book);
if (result)
{
MessageBox.Show("修改成功");
getAll();
ClearAll();
}
else
{
MessageBox.Show("修改失败");
}
}
else
{
MessageBox.Show("请输入完整信息");
}
}
5-2.3图书查找和删除窗口
此窗体界面用于学生信息的查找和删除,查找可根据书名模糊查找,类型和编号精确查找,可根据图书编号删除书籍。
图书查找和删除窗口实现的功能逻辑部分代码如下:
private void buttonName_Click(object sender, EventArgs e)
{
if (textBox1.Text.Equals(""))
{
MessageBox.Show("请输入书名");
}
else
{
dataGridView1.DataSource = bk.SelectNameOnes(textBox1.Text);
}
}
private void buttonClass_Click(object sender, EventArgs e)
{
if (cbClass.Text.Equals(""))
{
MessageBox.Show("请选择类别");
}
else
{
dataGridView1.DataSource = bk.SelectOneBoook(cbClass.Text);
}
}
private void buttonAll_Click(object sender, EventArgs e)
{
getAll();
}
private void button4_Click(object sender, EventArgs e)
{
if (textBox2.Text.Equals(""))
{
MessageBox.Show("请输入图书编号");
}
else
{
int no = int.Parse(textBox2.Text);
Book book = new Book {
bookId = no };
bool result = bk.Deletebook(book);
if (result)
{
MessageBox.Show("删除成功");
}
else
{
MessageBox.Show("删除失败");
}
getAll();
textBox2.Text = "";
}
}
5-3图书借出归还窗口
此窗体界面用于对借出和归还图书在系统中的库存进行修改,并查询是否存在借阅书籍。
图书借出归还窗口实现的功能逻辑部分代码如下:
private void button3_Click(object sender, EventArgs e)
{
try
{
if (textBox3.Text.Equals(""))
{
MessageBox.Show("请输入图书编号");
}
else
{
label18.Text = "";
//int bID= int.Parse(textBox3.Text);
dataGridView1.DataSource = bk.SelectBookOne(textBox3.Text);
MyBook(textBox3.Text);
}
}
catch (Exception ex)
{
MessageBox.Show("未找到该编号图书!!!");
}
}
public void MyBook(string a)
{
textBox1.Text = textBox3.Text;
label19.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["书名"].ToString();
label8.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["主编"].ToString();
label9.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["出版社"].ToString();
label11.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["分类"].ToString();
label13.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["数量"].ToString();
label15.Text = bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["来源"].ToString();
if (bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["封面"].ToString() == "")
{
pictureBox1.Image = null;
label18.Text = "该图书暂无图片";
}
else
{
bytes = (byte[])bk.SelectBookOne(a).DataSet.Tables[0].Rows[0]["封面"];
pictureBox1.Image = System.Drawing.Image.FromStream(new MemoryStream(bytes));
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
num = bk.SelectBookOne(textBox3.Text).DataSet.Tables[0].Rows[0]["数量"].ToString();
label6.Text = num;
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("出库失败!!!");
}
else
{
int i = int.Parse(num);
if (i <= 0)
{
MessageBox.Show("对不起!库存不足");
}
else
{
int no = int.Parse(textBox3.Text);
i= i - 1;
num = i.ToString();
Book book = new Book {
bookId = no,bookNumber=i.ToString() };
bool result = bk.UpdateNum(book);
if (result)
{
MessageBox.Show("出库成功!!!");
label6.Text = num;
label13.Text = num;
getAll();
}
else
{
MessageBox.Show("出库失败");
}
}
}
}
5-4修改密码窗口
此窗体界面用于管理员对自己的账号密码修改。
修改密码窗口实现的功能逻辑部分代码如下:
private void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text == "" || textBox3.Text == "")
{
MessageBox.Show("请输入完整");
}
else
{
if (textBox2.Text.Equals(textBox3.Text))
{
string no = SendAccount;
string pwd = textBox2.Text;
User u = new User
{
account = no,
password = pwd
};
bool result = ma.UpdatePwd(u);
if (result)
{
MessageBox.Show("修改成功");
}
else
{
MessageBox.Show("修改失败");
}
}
else
{
MessageBox.Show("两次密码不一致");
}
}
}
文章浏览阅读1.1k次。PS新手教程哪里有?小编为大家带来Photoshop2021新手系列教程,今天我们来学习PS新功能——快速操作面板。打开图片菜单栏点击帮助-Photoshop帮助...弹出发现窗口,选择快速操作在快速操作中可以对图片进行快速操作,如移除背景模糊背景制作黑白背景等等,一键操作非常方便。你学会PS2021新功能快速操作了么?..._ps2021没有快速操作
文章浏览阅读9.6k次。如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈 HOW TO: 查找问题的异常堆栈时出现的 UnhandledExceptionFilter 调用堆栈跟踪中http://support.microsoft.com/kb/313109/zh-cn察看本文应用于的产品 本页概要 使用 Windbg.exe 打_dump 直接打开看堆栈用什么工具windbg
文章浏览阅读1.2k次。题目内容:为了促进互帮互相,决定成立学习小组。小组结伴的规则是这样的:先将学号按升序排列,排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴…依次类推,2个一组成同伴。输入格式:第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。 第二行n个整数表明n个同学的学号,学号之间有一个空格,学号是无序输入的。如果输入的学生数是奇数,则输出提示信息:“odd number”输出格式:共n/2行,每行二个整数,表明结伴同学的学号,两个学_第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。 第二行n个整数表明n个同
文章浏览阅读110次。如果没有havingValue,那么会采用prefix+name 或 prefix+value 的值,去和false比较,如果值等于false 那么失败, 如果不等于false 成功。定义:在spring框架中用于根据特定条件决定是否创建或者注册某个bean或配置的注解,他们可以根据运行时环境,配置属性,或其他条件来动态的控制bean的创建或者注册。在上述代码中,表示会去application文件中,读取前缀为:Spring.datasource下,名字为type的key的值,读取到之后,会跟。_java 不存在才创建 @conditional
文章浏览阅读3.8k次。采用交叉引用流对象有以下几点好处:1) 压缩后存储的信息更紧凑;2) 可以访问存储在对象流中的压缩对象,并允许以后加入新的参照选项类型。_php无法解析压缩的交叉引用和对象流的pdf
文章浏览阅读517次。八股文并不能很好地测试候选人水平,我们应该思考更有效的面试方法。_如果面试一直问八股
文章浏览阅读217次。本文是一篇译文,介绍 Percona 的工程师对 ScaleFlux 的性能压测报告翻译:杨奇龙原文地址:https://www.percona.com/blog/2020/08/06/how-can-scaleflux-handle-mysql-workload/最近作者有一个针对 ScaleFlux 的产品也叫做 CSD 2000 进行压测的机会. 本文中作者将介绍使用 Intel SSD 和 ScaleFlux 存储设备进行压测的对比结果。一 我们为什么需要不一样的 ScaleFlux?._scaleflux
文章浏览阅读460次。electon 打包安装_wincodesign-2.5.0
文章浏览阅读6.2k次。原标题:华为鸿蒙系统再次更新7款可适配机型!对比安卓,鸿蒙OS的优势有哪些?自从鸿蒙OS系统全面启动公测以来,不断的在更新更多适配机型,就在前不久华为鸿蒙官网又新增了不少的机型,除了之前的Mate系列和P系列外,这次更新的机型有:华为nova6、nova65G、nova75G、nova7Pro5G、nova8、nova8Pro、MatePad10.8英寸。这些机型都可以体验鸿蒙OS 2.0公测版。..._nova7最好用的系统版本
文章浏览阅读1.5w次,点赞14次,收藏87次。最近团队准备参加一个无人机比赛,大致的规则是这样的:固定翼飞机从跑道起飞,然后在空中转体360°,通过GPS粗定位飞行至一个高13米左右,宽6米左右八字形框前(距离约50米左右),这时依靠计算机视觉的方法,让飞机准确的穿过去。(之后还有其他的动作,但是第一步大体就是这样)。 初步的方案:①通过机载摄像机获取图像序列 ②选取关键帧进行处_python cv用于定位
文章浏览阅读8.4k次。cache介绍一、 Cache- 主存存储结构及其实现 为了解决存储器系统的容量、存取速度及单位成本之间的矛盾,可以采用 Cache- 主存存储结构,即在主存和 CPU 之间设置高速缓冲存储器 Cache ,把正在执行的指令代码单元附近的一部分指令代码或数据从主存装入 Cache 中,供 CPU 在一段时间内使用,由于存储器访问的局部性,在一定容量 Cache 的条件下,我_c6713的第一级程序高速缓冲和第一级数据高速缓冲容量都是8kb,第一级存储器/高速缓冲的容量为32kb。
文章浏览阅读512次,点赞12次,收藏8次。C语言资料文章目录合集