目录

S1 radioButton

S2 ”登录“Button

①确定ID/PWD不为空

②登录函数(login)

综上,用户登录代码:

管理员:

login函数收尾

S3 user1,admin 窗口

①弄窗口前的准备

②添加user1(admin )窗口

1.建立窗体

2.用户函数修改(窗体跳转)

3.管理员函数修改(窗体跳转)

4.改小小bug

S4 向Data.cs传入user

PS:本系列文章基于B站UP主“面朝星海我心澎湃”的视频,时空门:   P2 登录功能实现
区别在①up主用的SQLserver,但是本文章是MySQL
           ②本文章的数据库表比up主复杂一点,以及表里的内容不一样(本文章无论用户表还是管                   理员表都是海贼王滴,没办法,海米一枚~)

S1 radioButton

左边的”用户“ radioButton 
右侧->属性->设计->Name->"radioButtonUser"(其实就是后面 删去1,加了一个User)
同理,右边的 radioButton Name改为"radioButtonAdmin"

S2 ”登录“Button

①确定ID/PWD不为空

双击”登录“Button->判断是否为空的if..else

private void button1_Click(object sender, EventArgs e){//登录  首先判断是否为空if(textBoxID.Text!=""&&textBoxPassWord.Text!=""){}else{MessageBox.Show("鼠鼠我呀,不喜欢空的呢");//此处的弹出框可以弄的很炫,图标啥 的,通过输入参数实现}}

②登录函数(login)

继续->把登录验证做成一个方法

一个返回类型为bool的login函数,里面包括登陆者类型(读者,管理员....)

 弄一个弹窗,看自己login写对没有

  //登录方法,验证是否允许登录,允许返回真public Boolean login(){//用户if(radioButtonUser.Checked==true){Dao dao = new Dao();string sql = "SELECT * FROM ks_reader WHERE rdID='"+textBoxID.Text+"' AND rdPwd='"+textBoxPassWord.Text+"';";//验证是否允许登录,PT:这里的sql语句是从navicat(sql编译器)上copy下来的MessageBox.Show(sql);//判断是否出错,弄一个弹窗,看自己login写对没有}//管理员if(radioButtonAdmin.Checked==true){}return true;}

扩展:关于sql的语句,有以下三种等价形式,其作用一样,可以选择喜欢的用

 //sql 写法1string sql = "SELECT * FROM ks_reader WHERE rdID='"+textBoxID.Text+"' AND rdPwd='"+textBoxPassWord.Text+"';";//验证是否允许登录,PT:这里的sql语句是从navicat(sql编译器)上copy下来的//sql 写法2                                                                                                             //sql 写法2string sql2 = string.Format("SELECT * FROM ks_reader WHERE rdID='{0}' AND rdPwd='{1}';",textBoxID.Text,textBoxPassWord.Text);//sql 写法3string sql3 = $"SELECT * FROM ks_reader WHERE rdID='{textBoxID.Text}' AND rdPwd='{textBoxPassWord.Text}';" ;

->读取数据
通过输入的ID和密码,形成sql查询语句,来查询

//登录方法,验证是否允许登录,允许返回真public Boolean login(){//用户if(radioButtonUser.Checked==true){Dao dao = new Dao();//sql 写法1//string sql = "SELECT * FROM ks_reader WHERE rdID='"+textBoxID.Text+"' AND rdPwd='"+textBoxPassWord.Text+"';";//验证是否允许登录,PT:这里的sql语句是从navicat(sql编译器)上copy下来的//sql 写法2                                                                                                             //sql 写法2//string sql2 = string.Format("SELECT * FROM ks_reader WHERE rdID='{0}' AND rdPwd='{1}';",textBoxID.Text,textBoxPassWord.Text);//sql 写法3string sql = $"SELECT * FROM ks_reader WHERE rdID='{textBoxID.Text}' AND rdPwd='{textBoxPassWord.Text}';" ;//MessageBox.Show(sql);//判断是否出错,弄一个弹窗,看自己login写对没有IDataReader dc = dao.read(sql);//将输入的ID,密码 所形成的sql 语句输入,以此进行查询dc.Read();//读取一行数据MessageBox.Show(dc[0].ToString(),dc["rdName"].ToString());//①将读取的第0行数据显示(从第0行开始计数)  ②如果只有这一行代码,那么查询结果为空时会报错}//管理员if(radioButtonAdmin.Checked==true){}return true;}

由于会因为查询为空值而报错,以下为改进:

//登录方法,验证是否允许登录,允许返回真public Boolean login(){//用户if(radioButtonUser.Checked==true){Dao dao = new Dao();//sql 写法3string sql = $"SELECT * FROM ks_reader WHERE rdID='{textBoxID.Text}' AND rdPwd='{textBoxPassWord.Text}';" ;//MessageBox.Show(sql);//判断是否出错,弄一个弹窗,看自己login写对没有IDataReader dc = dao.read(sql);//将输入的ID,密码 所形成的sql 语句输入,以此进行查询/* dc.Read();//读取一行数据MessageBox.Show(dc[0].ToString(),dc["rdName"].ToString());*///①将读取的第0行数据显示(从第0行开始计数)  ②如果只有这一行代码,那么查询结果为空时会报错if(dc.Read()){MessageBox.Show(dc[0].ToString(), dc["rdName"].ToString());}else{string id_or_pwd_wrong = "鼠鼠我呀,觉得你应该是输入错误呢";MessageBox.Show(id_or_pwd_wrong);}}//管理员if(radioButtonAdmin.Checked==true){}return true;}

运行效果:
ID和密码正确时:

ID和密码错误时:

改进欢迎语:使人名和ID出现在一起(虽然你也可以不改进,因为也不怎么影响)
把MessageBox.Show(dc[0].ToString(), dc["rdName"].ToString());里的逗号改成加号
MessageBox.Show(dc[0].ToString()+ dc["rdName"].ToString());
然后再加一点人性化的欢迎语
string login_wel = "吹灭读书灯,一身都是月\n欢迎:";
MessageBox.Show(login_wel+dc[0].ToString()+dc["rdName"].ToString());
改进后效果:

综上,用户登录代码:

 //用户if(radioButtonUser.Checked==true){Dao dao = new Dao();//sql 写法1//string sql = "SELECT * FROM ks_reader WHERE rdID='"+textBoxID.Text+"' AND rdPwd='"+textBoxPassWord.Text+"';";//验证是否允许登录,PT:这里的sql语句是从navicat(sql编译器)上copy下来的//sql 写法2                                                                                                             //sql 写法2//string sql2 = string.Format("SELECT * FROM ks_reader WHERE rdID='{0}' AND rdPwd='{1}';",textBoxID.Text,textBoxPassWord.Text);//sql 写法3string sql = $"SELECT * FROM ks_reader WHERE rdID='{textBoxID.Text}' AND rdPwd='{textBoxPassWord.Text}';" ;//MessageBox.Show(sql);//判断是否出错,弄一个弹窗,看自己login写对没有IDataReader dc = dao.read(sql);//将输入的ID,密码 所形成的sql 语句输入,以此进行查询/* dc.Read();//读取一行数据MessageBox.Show(dc[0].ToString(),dc["rdName"].ToString());*///①将读取的第0行数据显示(从第0行开始计数)  ②如果只有这一行代码,那么查询结果为空时会报错if(dc.Read())//考虑到会因为查询结果(返回值)为空而出的改进,使当查询结果为空时出现可爱的报错{string login_wel = "吹灭读书灯,一身都是月\n欢迎:";MessageBox.Show(login_wel+dc[0].ToString()+dc["rdName"].ToString());return true;}else{string id_or_pwd_wrong = "鼠鼠我呀,觉得你应该是输入错误呢";MessageBox.Show(id_or_pwd_wrong);return false;}}

ps:由于在分类讨论(用户还是管理员..)身份时,已经在子函数里返回了true/false,所以总函数的return true可删除(注释)了

管理员:

//管理员if(radioButtonAdmin.Checked==true){Dao dao = new Dao();string sql = $"SELECT * FROM ks_admin WHERE adID='{textBoxID.Text}' AND adPwd='{textBoxPassWord.Text}';";IDataReader dc = dao.read(sql);//将输入的ID,密码 所形成的sql 语句输入,以此进行查询if (dc.Read())//考虑到会因为查询结果(返回值)为空而出的改进,使当查询结果为空时出现可爱的报错{string login_wel = "书卷多情似故人,晨昏忧乐每相亲\n欢迎:";MessageBox.Show(login_wel + dc[0].ToString() + dc["adName"].ToString());return true;}else{string id_or_pwd_wrong = "鼠鼠我呀,觉得你应该是输入错误呢";MessageBox.Show(id_or_pwd_wrong);return false;}}

 

login函数收尾

 //return true;MessageBox.Show("鼠鼠我呀,觉得单选框没选呢");//两个radioButton(用户,管理员)都失败了,即单选框失效 其实这两行不会生效,因为我前面已经默认选了user的radioButton为true了return false;//两个radioButton(用户,管理员)都失败了,即单选框失效

S3 user1,admin 窗口

①弄窗口前的准备

把login()函数浅浅的改一下:
① 函数返回值改成void
②由于返回值改成void,所以把原先所有的返回值(True,False)都注释(删除)掉
③在用户和管理员代码最后先之前忘记写的  关闭数据库连接代码

②添加user1(admin )窗口

1.建立窗体

两次添加窗体,分别命名为user1和admin1

修改之前一直弄的窗体(form1)名为login,右击->重命名
修改完后,可发现login.cs里原本的login()函数报错,这是因为login.cs函数不能和这个窗体重名,则将login.cs里原本的login()函数名字修改为Login()

2.用户函数修改(窗体跳转)

小补充: user.ShowDialog();//这里如果是user.show()的话,虽然也会弹出窗体,但是对于由这种形式弹出的窗体,会使在user窗体出现后仍然能够对login窗体操作,这样会使一个login窗体同时登录多个用户,不好。同时使用showdialog()也可以避免很多奇奇怪怪的bug

3.管理员函数修改(窗体跳转)

用户:
//窗体跳转user1 user = new user1();//用户登录后,弹出用户登录的窗口this.Hide();//隐藏原来的login窗体,this 指登录(login)窗体user.ShowDialog();//这里如果是user.show()的话,虽然也会弹出窗体,但是对于由这种形式弹出的窗体,会使在user窗体出现后仍然能够对login窗体操作,这样会使一个login窗体同时登录多个用户,不好。同时使用showdialog()也可以避免很多奇奇怪怪的bugthis.Show();//当对话框窗体关掉后,就显示登录(login)窗体管理员:
//窗体跳转admin1 ad = new admin1();//用户登录后,弹出用户登录的窗口this.Hide();//隐藏原来的login窗体,this 指登录(login)窗体ad.ShowDialog();this.Show();//当对话框窗体关掉后,就显示登录(login)窗体

4.改小小bug

当以上窗口调整 正常 完成后 会发现,最后会弹出”没选单选框“的窗口,这是因为之前弄的bool函数,会在这个函数①执行前返回,而现在修改成了void函数,程序会顺序执行,因此会有这个窗口弹出,修改办法:直接将该函数注释(删除)即可

S4 向Data.cs传入user

弄一个这个后,后面的借书,还书会比较简单

/* Data.UID = dc["id"].ToString();
                     Data.UName = dc["name"].ToString();*/
                    Data.UID = dc["rdID"].ToString();//这里的idID是你自己数据库给读者ID的命名
                    Data.UName = dc["rdName"].ToString();

vs2019,C#,MySQL创建图书管理系统2(登录功能实现)相关推荐

  1. 用vs2019使用C#连接MySQL创建图书管理系统(1-7)源码集,未优化,未美化

    目录 已经实现的功能 DAO.cs Data.cs Program.cs login.cs admin.cs ①admin1.cs[管理员主页面] ②admin2.cs[图书管理页面]​编辑 1.添加 ...

  2. Java + Swing + MySQL实现图书管理系统

    项目:图书管理系统开发 图书管理系统会因为图书的数量.种类.提供的操作等不同而具有不同的复杂度.基本信息的维护.图书借阅.归还及查询等操作通常是图书管理系统的基本功能.在规模较大.业务较多的图书馆还需 ...

  3. [mysql+qt] 图书管理系统

    关于乱码问题:         后来亲测加上qstringliteral有效,而官方给出的tr函数,似乎对中文没啥用 出现编码错误,如字符常量这些,是qt自身的问题,用记事本存为utf-8应该就好了. ...

  4. Java Swing Mysql实现图书管理系统源码附带高清视频指导运行教程

    Java swing实现的图书管理系统 实现的功能有管理员登录管理图书类别.信息.用户管理.新订书籍等等. 基础开发环境 开发工具:Eclipse(MyEclipse.idea.sts) 我这里用的是 ...

  5. MYSQL JDBC图书管理系统

    两万字,博主辛辛苦苦给大家写的,在这里求个三连~~. JDBC编程 一.JDBC简介 二.准备工作 三.JDBC五毒神掌 3.1导入驱动包,创建DataBase实例 四.加入SQL版的数据库 4.1系 ...

  6. 图书管理系统之登录跳转对应页面(三)

    图书管理系统之登录跳转对应页面(三) 相关源码下载连接:https://download.csdn.net/download/baidu_39378193/85033291 前言:在上面篇设计数据库中 ...

  7. 基于Springboot+mybatis+mysql+html图书管理系统2

    基于Springboot+mybatis+mysql+html图书管理系统2 一.系统介绍 二.功能展示 1.用户登陆 2.用户主页 3.图书查询 4.还书 5.个人信息修改 6.图书管理(管理员) ...

  8. 基于Springboot+mybatis+mysql+html图书管理系统

    基于Springboot+mybatis+mysql+html图书管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.用户主页 3.图书查询 4.还书 5.个人信息修改 6.图书管理(管理员) 7 ...

  9. java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计Vue和mysql智能图书管理系统源码+mysql数据库+系统+lw文档+部 ...

  10. java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调 ...

最新文章

  1. Single Shot Multibox Detection (SSD)实战(下)
  2. Attention is All You Need?LSTM提出者:我看未必
  3. Request header field token is not allowed by Access-Control-Allow-Headers in
  4. 网络传播侵权认定启用“服务器标准”
  5. GIt代码托管、Github Desktop和 Pycharm中代码的管理
  6. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone
  7. 【Vue.js】vue2组件间通信方式总结
  8. 我的编程成长之路——python初体验
  9. native固定吸顶 react_React Native固定底部TextInput,解决键盘遮挡、列表滚动问题
  10. Visual Studio 2013运行的结果一闪而过
  11. mysql主从表结构差异_mysqldiff对比主从表结构是否一致
  12. JAVA 内存泄露的理解
  13. 汽车常识全面介绍 - 刹车系统
  14. maya嵌入python_#113 如何给Maya添加一个Python Command Shell ? | 一半君的总结纸
  15. java集合源码分析_java集合源码分析(二):List与AbstractList
  16. 此系统上未启用启动项_解决系统死机的7种方法,维修电脑必备技巧,你知道几条...
  17. 计算机中官方文档阅读方法,中国知网-帮助中心
  18. 2021-11-19 工作记录--apiCloud-YDUI下拉框
  19. python制作时间,如何利用python制作时间戳转换工具详解
  20. 闲聊注册中心——ZK、Eureka、Sofa-Registry

热门文章

  1. 前端开发_5.Electron和Nw.js学习总结
  2. codeforces 676A Nicholas and Permutation
  3. 将Flutter添加到现有应用——过程中遇到的问题
  4. jquery—addClass方法和removeClass方法
  5. NYOJ - [第十一届河南省程序设计大赛]治安管理(区间判断)
  6. error: C++ requires a type specifier for all declarations
  7. 计算机管理器鼠标不见了怎么办,电脑的鼠标光标消失了
  8. 网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改...
  9. 什么是公司Offer里的RSU?
  10. 【历史上的今天】4 月 3 日:亚马逊卖出第一本书;世界上第一通手机电话;IBM 计算机先驱出生