目录
三:进入“图书查看和借阅”、“当前借阅和归还界面”后,返回上一层
四:进入“图书查看和借阅”、“当前借阅和归还界面”后,隐藏上一层,并且对上一层无法进行操作
一:要做的
①显示/修改个人信息:读者号、姓名、性别、所在单位、电话、邮箱地址、办证日期、照片、已借书数量、密码(修改完后重新登录)、读者类别号【相关资料可在最下面看】
②退出登录,进入登录界面
③进入“图书查看和借阅”、“当前借阅和归还界面”后,没办法返回上一层
④修改个人所有信息
⑤系统下面的“联系管理员”
⑥密码修改(修改完后重新登录,有弹窗提示十分确认修改)【升级的 ×】
二:退出登录,进入登录界面
之前已经实现了,在系统里,现在把它挪到主界面,并且增加判断:
①新增加
双击user1.cs【设计】“退出”的button,进入user1.cs的 private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码->运行
private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e)//用户主页面退出
{
DialogResult dr = MessageBox.Show("确认退出咩?", "消息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
this.Close();
}
}
②删除旧的
鼠标移到“系统”->移到“系统-”下的 “退出” ->右击->删除
三:进入“图书查看和借阅”、“当前借阅和归还界面”后,返回上一层
①在user2.cs【设计】里将已经有的“借出图书”C V,修改text=退出,name=button_user2_exit
②双击user2.cs【设计】“退出”的button,进入user2.cs的 private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码->运行
(PS:user3.cs 的方法一样,只不过button的name=button_reBK_exit)
private void button_user2_exit_Click(object sender, EventArgs e)//user2 图书查看和借阅 退出
{
DialogResult dr = MessageBox.Show("确认退出咩?", "消息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
this.Close();
}
}
四:进入“图书查看和借阅”、“当前借阅和归还界面”后,隐藏上一层,并且对上一层无法进行操作
双击user1.cs【设计】的“图书查看和借阅窗口”,进入user1.cs的 private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码->运行
(PS1:“当前借阅和归还界面”方法一样,代码如下)
(PS2:把之前的show()全改成了u3.ShowDialog();,这样可以避免一些奇奇怪怪的错误)
图书查看和借阅:
private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e)//user2 图书查看和借阅窗口跳转
{
user2 u2 = new user2();
this.Hide();//隐藏user1 窗体
//u2.Show();
u2.ShowDialog();
this.Show();
}
图书归还:
private void 当前借阅和归还情况ToolStripMenuItem_Click(object sender, EventArgs e)
{
user3 u3 = new user3();
this.Hide();
//u3.Show();
u3.ShowDialog();
this.Show();
}
五:显示/修改个人信息
读者号、姓名、性别、所在单位、电话、邮箱地址、办证日期、照片、已借书数量、密码(修改完后重新登录)、读者类别号【相关资料可在最下面看】
参照admin22.cs【修改图书】
①构造添加的页面
添加新的窗口->命名为user1_4(即user1下的一个子窗体)
②修改界面名称
选中窗体,修改属性的Font->Text为”显示/修改个人信息“
③页面布局
1.DataGridView
法一:把admin2.cs【设计】的C,V到user1_4
法二:按照之前文章的【MySQL创建图书管理系统3】“S2 图书管理页面->③页面布局->1.DataGridView”步骤做一遍,这里不再赘述,传送门:页面布局
控件安装完毕后,把DataGridView里的值按照顺序修改为以下sql里的属性
SELECT rdID,rdName,rdSex,rdPwd,rdPhone FROM ks_reader;
1.2 . DataGridView ---显示读者信息
即执行 SELECT rdID,rdName,rdSex,rdPwd,rdPhone FROM ks_reader;这个MySQL语句(PS:这个MySQL语句是直接从navicat里copy过来的)
双击user1_4.cs【设计】页面头-->进入user1_4.cs的private void user1_4_Load(object sender, EventArgs e)函数,进入之后-->在该函数外面写一个用于“从数据库读取数据显示在表格控件中”的名为Table的函数-->编辑Table函数-->在private void user1_4_Load(object sender, EventArgs e)函数中调用Lable函数.
最后附带一个整体效果和运行截图,以及全部的代码,还有Table()的另外一种写法(比较清晰但是麻烦,现在这个粗暴但是简单)
//从数据库读取数据显示在表格控件中
public void Table()
{
dataGridView1.Rows.Clear();//将控件中已经有的旧数据全部清空
Dao dao = new Dao();
string sql = "SELECT rdID,rdName,rdSex,rdPwd,rdPhone FROM ks_reader;";//要执行的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[4].ToString());
}
dc.Close();
dao.DaoClose();
}
private void user1_4_Load(object sender, EventArgs e)//uesr1_4 窗体构造完了就会运行这个函数
{
Table();
}
2.修改界面布局
法一:把admin22的全选C,V到user1_4
法二:按照之前文章的“S4 图书添加->③页面布局”步骤做一遍,这里不再赘述,传送门:页面布局
控件安装完毕后,把label里的值按照顺序修改为以下sql里的属性
INSERT INTO ks_reader(rdID,rdName,rdSex,rdPwd,rdPhone)VALUES
(11,'test','女','123','15171118787');
3 .修改、确认、退出button
“添加图书”button的Text->“修改”,name改为:button_alter_reader
“清空”button的Text->“确认”,name改为:confirm
再C V一个button,该button的Text->“退出”,name改为:exit
3.1 修改button
双击“修改”的button,进入user1_4.cs的private void button_alter_reader_Click(object sender, EventArgs e)函数编辑页面-->在该函数外创建一个名为ID的string变量,赋值为空,再在该private void button_alter_reader_Click(object sender, EventArgs e)里如下代码->
//全局变量 ID
string ID = "";//学生ID是主键,用于修改学生的相关信息
private void button_alter_reader_Click(object sender, EventArgs e)//修改读者个人信息的button
{
try//双击tab 可直接补全
{
//获取控件上的信息
//rdID,rdName,rdSex,rdPwd,rdPhone
string id1 = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
string name1 = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
string sex1 = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
string pwd1 = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
string phone1 = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
//传值:将控件上的值传到 修改的 textbox里
//label1_Click(id1, name2, sex3, pwd4, phone5);
/* admin22 a2 = new admin22(id, name, author, press, ISBN, catalog, price, status);//连接admin2【图书管理页面】和admin22【修改图书信息】,实现界面跳转
a2.ShowDialog();*/
ID = textBox1.Text = id1;//id实际上是int
textBox2.Text = name1;
textBox3.Text = sex1;
textBox4.Text = pwd1;
textBox5.Text = phone1;
}
catch (Exception)
{
MessageBox.Show("鼠鼠我呀,觉得你应该是修改button的赋值错了\n可能是sql语句\n\t哈哈哈~~");
}
}
3.2 确认button
双击“确认”的button,进入user1_4.cs的private void confirm_Click(object sender, EventArgs e)函数编辑页面-->在该函数里填入如下代码->
private void confirm_Click(object sender, EventArgs e)//确认修改的按钮
{
// 进行修改
//pt:下面的sql语句是直接从编译器navicat上C V的
string sql = $"UPDATE ks_reader SET rdID='{textBox1.Text}',rdName='{textBox2.Text}',rdSex='{textBox3.Text}',rdPwd='{textBox4.Text}',rdPhone='{textBox5.Text}' WHERE rdID='{ID}';";
Dao dao = new Dao();
if (dao.Execute(sql) > 0)
{
MessageBox.Show("Alter successfully");
//this.Close();
}
Table();//刷新数据
}
3.3 退出button
双击“退出”的button,进入user1_4.cs的 private void reader_show_exit_Click(object sender, EventArgs e)函数编辑页面-->在该函数里填入如下代码->
private void reader_show_exit_Click(object sender, EventArgs e)//退出用户修改信息界面 含退出提示
{
//this.Close();
DialogResult dr = MessageBox.Show("确认退出咩?", "消息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
this.Close();
}
}
④ 跳转界面
连接user1【用户主界面】和user1_4【显示和修改用户信息】,实现界面跳转
双击user1.cs【设计】的“显示和修改用户信息”的,进入user1.cs的 private void 显示和修改个人信息ToolStripMenuItem_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码
private void 显示和修改个人信息ToolStripMenuItem_Click(object sender, EventArgs e)//界面调整,连接用户主页面【user1】和显示及修改用户个人信息界面【user1_4】
{
user1_4 u1_4 = new user1_4();
this.Hide();
u1_4.ShowDialog();
this.Show();
}
ps:传入变量扩展
在修改时有以下4种方法【看得懂就看,看不懂下次来看我可能因为心血来潮就把方法写正规了】,其中注意数据库里的ID是int,但是VS里我弄的都是string【虽然结果没有影响】
法一:这个【显示和修改】界面改一下,按照admin2和admin22的来改,user1_4【用于显示,把那个控件拉在释放,小一点就行啦】对应andin2,再建一个对应user1_41【用于修改】对应admin22,
法二:在user1_4 上面拉一个 那个显示一排的控件,里面显示读者相关消息,然后把控件里的内容传到现在几个textbox里
法三:跳过那个大格子控件 直接sql与user14的lebelbox连
法四:user1-04与admin2对接,user1-4与admin22对接
六:系统下面的“联系管理员”
双击user1.cs【设计】“系统’,进入user1.cs的 private void 联系管理员ToolStripMenuItem_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码->运行
private void 联系管理员ToolStripMenuItem_Click(object sender, EventArgs e)
{
//先随便弹个窗意思意思
MessageBox.Show("V鼠鼠50,鼠鼠帮你联系管理员");
}
七:数据库
CREATE TABLE KS_Reader
(
rdID int PRIMARY KEY,
rdName VARCHAR(20),
rdSex CHAR(1),
rdType SMALLINT REFERENCES KS_ReaderType(rdType),
rdDept VARCHAR(20),
rdPhone VARCHAR(25), -- 1
rdEmail VARCHAR(25), -- 1
-- rdDateReg datetime DEFAULT getdate(),
-- rdPhoto image,
rdStatus CHAR(2) DEFAULT'有效', -- 1
rdBorrowQty int DEFAULT 0, -- 1
rdPwd VARCHAR(20),
rdAdminRoles SMALLINT DEFAULT 0
)
show TABLES; -- 查看所有表
DESC KS_Reader; -- 查看数据表的结构
INSERT INTO ks_reader(rdID,rdName,rdPwd,rdType,rdDept,rdAdminRoles)VALUES
(1,'路飞','123',10,'图书馆',8), -- 系统管理员
(2,'索隆','123',10,'图书馆',1), -- 读者(借书证)管理员
(3,'乔巴','123',10,'图书馆',2), -- 图书管理员
(4,'娜美','123',10,'图书馆',4), -- 接还书管理员
(5,'乌索普','123',10,'图书馆',6), -- 图书、接还书管理员
(6,'香吉士','123',10,'图书馆',7), -- 读者、图书、接还书管理员
(7,'骷髅','123',10,'图书馆',15); -- 读者、图书、接还书、系统管理员
SELECT * FROM ks_reader;
-- INSERT INTO ks_reader(rdID,rdName,rdPwd,rdSex,rdType,rdDept)VALUES
-- (100,'白胡子','123','男',10,'计科院'), -- 读者,教师
-- (101,'红发','123','男',20,'计科11001班'), -- 读者,本科生
-- (102,'凯多','123','男',30,'硕计11201班'), -- 读者,硕士研究生
-- (103,'夏洛特.玲玲','123','女',20,'计科11001班'); -- 读者,本科生
-- 读者表测试
INSERT INTO ks_reader(rdID,rdName,rdSex,rdPwd,rdPhone)VALUES
(11,'test','女','123','15171118787');
SELECT rdID,rdName,rdSex,rdPwd,rdPhone FROM ks_reader;
UPDATE ks_book SET bkCode='1008',bkName='VStest',bkAuthor='龙',bkPress='革命军',bkISBN='',bkCatalog='',bkPrice=99,bkStatus='在馆' WHERE bkCode='1007';
UPDATE ks_reader SET rdID='1',rdName='路飞',rdSex='男',rdPwd='123',rdPhone='9756' WHERE rdID='1';