技术标签: 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("两次密码不一致");
}
}
}
文章浏览阅读4.3k次。MQTT是一个由IBM主导开发的物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。应项目要求使用MQTT协议实现客户端与服务端通信。_mqttandroidclient
文章浏览阅读1.2k次。1.本来电脑安装的是anaconda3 5.3.1,但安装的python版本是3.7,后来卸载了安装anaconda3 4.4.0,这个版本是3.62.打开Anaconda Promptconda --version //检查Anaconda是否成功安装(如果成功会显示版本号)conda update conda //更新conda版本conda create -n tensorflow p..._anaconda3+对应python3.6
文章浏览阅读1.1w次,点赞18次,收藏124次。第十一届蓝桥杯单片机省赛题目解析这次题目照样还是LED、数码管、按键三大模块,还有模拟电压输入(ADC)、AT24C02(EEPROM),都是常见的外设,且之前题目出现过的,所以不难,考的都是基本功。1 数码管显示数码管主要显示获取的电压、计数和参数设置三个界面,不过要注意上电之后就要显示电压数据界面。2 LED当电压小于设置的参数时5s后L1亮,这个还是很好做的。当计数为奇数时L2亮,计数的话,我是先判断电压是..._蓝桥杯单片机考什么
文章浏览阅读484次。DescriptionGiven n differentobjects, you want to take k of them. How many ways to can do it? For example, saythere are 4 items; you want to take 2 of them. So, you can do it 6 ways. Take 1, _快速幂求逆元 在线oj
文章浏览阅读6.6k次,点赞10次,收藏23次。现在开头:Fairseq是一个正在快速迭代的产品,而且是开源的!这不是表扬,这意味着三件事情:1.他没有文档!所有框架代码都没有任何注释,包括函数docstring都没有2.他没有经过有效测试,估计是抢时间吧!即使是官网Readme里的例子也是无法跑起来的!3.他是一个框架,而且是一个非常不Pythonic的框架,充斥着inline/包装器/莫名其妙的语法。虽然这三点决定他真的对不住Facebook的金字招牌,但是作为一个学习者,总要把他运行起来,那么开始这场针对 FaceBOOK派“全_final_lr_scale
文章浏览阅读5.1k次。目录摘要:基本操作与命令介绍:进入top后交互一点点新的操作Author: Keivn.Xu [email protected]摘要: 玩过Linux一定使用过busybox top命令,但下面的操作方法,你不一定有见过。基本操作与命令介绍:console:/ $ busybox top -help top: invalid optio..._busybox top
文章浏览阅读982次。全部已在本机验证,可能根据用户安装的系统功能不同而有些命令无效。设备管理器 hdwwiz.cpl 或devmgmt.msc添加或删除程序 appwiz.cpl管理工具 control admintoolsBluetooth文件传送向导 fsquirt计算器 calc证书管理控制台 certmgr.msc字符映..._window bat call 环境
文章浏览阅读1.1w次,点赞8次,收藏82次。相机标定_相机标定
文章浏览阅读1.1k次。const date = new Date()const year = date.getFullYear()const month = date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : `0${date.getMonth() + 1}`const day = date.getDate() >= 10 ? date.getDate() : `0${date.getDate()}`const hours = date.getHours() ._js 时分秒 时间格式
文章浏览阅读2.2k次。摘要:简述重建索引的情况及重建索引_oracle 重建索引
文章浏览阅读2.7k次。以stm32f105rct6为例子,keil迁移到cubeIDE_cubeide生成代码 keil打开
文章浏览阅读781次。以对数域常用的dBFS刻度为例,支持主流音频信号位深:整型16/24/32位和浮点32位,编写Python实现对数域和采样值单位互换功能_dbfs 频域