目录
本系列文章基于B站UP主“面朝星海我心澎湃”的视频P4,P5,时空门:P9 用户借/还书
区别在:
①up主用的SQLserver,但是本文章是MySQL
②本文章的数据库表比up主复杂一点,以及表里的内容不一样(本文章无论用户表还是管 理员表都是海贼王滴,没办法,海米一枚~)
PT:
①表跟UP主不一样,所以MySQL查询语句不同
②借书:借时,通过ks_book表判断该书是否在馆,在则:往borrow表插入数据,修改ks_book表,使借的该书不在馆 关于以下几个属性要注意一下
借出的日期:用函数获取电脑当前时间 current()函数
预计归还日期:【这个可先不弄,先把基础功能实现】电脑当前时间+他能借的时间(在readerType里有说),直接加就行啦。如果闲天数不同而sql语句写的麻烦可将所有人的借书天数都设置为30天UPDATE ks_readertype SET CanLendDay =30;
实际归还日期、延时、罚钱数这边建议全部删除,避免麻烦。同时,我这边把borrow更新了一下。同时也把user3.cs更新了
③还书:往borrow表删除数据,修改ks_book表,使借的该书在馆
S1:借书user2.cs
①“借出图书”的button
双击user2.cs【设计】“借出图书”的button,进入user2.cs的private void button_lend_bk_Click(object sender, EventArgs e)函数编辑页面-->在其中填入如下代码->
private void button_lend_bk_Click(object sender, EventArgs e)
{
string id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//获取书号
string bkName = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();//获取书号
string ku_chun= dataGridView1.SelectedRows[0].Cells[7].Value.ToString();//获取库存,即是否在馆
if(ku_chun=="在馆")
{
string sql = $"INSERT INTO ks_borrow VALUES({Data.UID},{id},'{bkName}',CURDATE());UPDATE ks_book SET bkStatus='不在' WHERE bkCode='{id}';";//更新borrow、book.status表
Dao dao = new Dao();
if (dao.Execute(sql) > 1)
{
MessageBox.Show($"Congratulations {Data.UName}:\nhas borrowed {bkName}!");
Table();
}
else
{
MessageBox.Show("鼠鼠我呀\n觉得你的sql语句可能错了呢\n所以借书失败了哦");
}
}
else
{
MessageBox.Show("鼠鼠我呀,没有书了呢\n这边建议您联系管理员哈\n虽然可能联系不到\n因为他应该在某一个小角落看书呢");
}
}
②修改指定从哪个窗体启动
Program.cs【可从右侧“解决方案资源管理器】找
③窗体跳转
将user1.cs【设计】的“图书查看和借阅” 和 user2.cs【设计】连接,实现界面跳转。
双击user1.cs【设计】的“图书查看和借阅”的 字体 ,进入user1.cs的 private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码
private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e)
{
user2 u2 = new user2();
u2.Show();
}
④执行
执行程序,窗体可能不怎么好看,具体美化等基础功能全部实现后开始逐一美化.运行效果:
S2:还书user3.cs
①“归还图书”的button
双击user3.cs【设计】“归还图书”的button,进入user3.cs的private void button1_Click(object sender, EventArgs e)函数编辑页面--->
1.修改Table的sql语句
由于显示的是登陆的的借书信息,因此需要在显示的是borrow中ID=登录者ID的相关信息eg:如果只是1号(路飞)登录,就只显示他的相关借阅信息
MySQL语句:SELECT * FROM KS_Borrow WHERE rdID='1';【MYSQL编译器C V】
因此,Table()函数修改以下2个地方:
//从数据库读取数据显示在表格控件中
public void Table()
{
dataGridView1.Rows.Clear();//将控件中已经有的旧数据全部清空
Dao dao = new Dao();
string sql = $"SELECT * FROM KS_Borrow WHERE rdID='{Data.UID}';";//要执行的sql语句,建议从编译器上copy该语句再黏贴到此处
IDataReader dc = dao.read(sql);
while (dc.Read())//当查询结果到达末尾后跳出while循环
{
//将读到的数据添加到dataGridView控件中
//这里几个dc[]取决于你在页面的那里设置了几个属性
dataGridView1.Rows.Add(dc[0].ToString(), dc[1].ToString(), dc[2].ToString(), dc[3].ToString());
}
dc.Close();
dao.DaoClose();
}
2.归还图书函数
双击user3.cs【设计】“归还图书”的button,进入user3.cs的private void button1_Click(object sender, EventArgs e)函数编辑页面--->填入如下代码
private void button1_Click(object sender, EventArgs e)//还书Button
{
string id = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();//获取书号
string bkName = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();//获取书号
//还书时间:
string sql = $"DELETE FROM ks_borrow WHERE bkID= '{id}';UPDATE ks_book SET bkStatus='在馆' WHERE bkCode='{id}';";//用图书ID 更新borrow、book.status表
Dao dao = new Dao();
if (dao.Execute(sql) > 1)
{
MessageBox.Show($"Congratulations {Data.UName}:\nhas return {bkName}!");
Table();
}
else
{
MessageBox.Show("鼠鼠我呀\n觉得你的sql语句可能错了呢\n所以还书失败了哦");
}
}
②窗体跳转
将user1.cs【设计】的“当前借阅和归还情况” 和 user3.cs【设计】连接,实现界面跳转。
双击user1.cs【设计】的“当前借阅和归还情况”的 字体 ,进入user1.cs的 private void 当前借阅和归还情况ToolStripMenuItem_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码
user3 u3 = new user3();
u3.Show();
S3:扩,User1.cs完善1
①帮助
双击user1.cs【设计】“帮助”,进入user1.cs的private void button1_Click(object sender, EventArgs e)函数编辑页面--->填入如下代码
private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e)
{
//先随便弹个窗意思意思
MessageBox.Show("V鼠鼠50,鼠鼠帮你解决障碍");
}
②退出
双击user1.cs【设计】“退出”,进入user1.cs的private void button1_Click(object sender, EventArgs e)函数编辑页面--->填入如下代码