学生管理系统-WinForm(C#)与MySQL
一、创建数据库#
1 创建数据库#
1 | create database studentmanagersystem; |
2 创建表login和student#
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE TABLE login( name VARCHAR (50) PRIMARY KEY , passwd VARCHAR (50) NOT NULL ) CREATE TABLE student( sNo VARCHAR (50) PRIMARY KEY , sName VARCHAR (50) NOT NULL , age INT NOT NULL , sex VARCHAR (50) NOT NULL , score INT NOT NULL ) |
3 增加数据#
1 2 3 4 | INSERT INTO login VALUES ( 'admin' , '123' ); INSERT INTO student VALUES ( '1' , '张三' ,20, '男' ,98); INSERT INTO student VALUES ( '2' , '李艳' ,19, '女' ,85); |
*4 数据操作#
1 2 3 4 5 6 | # 修改数据 UPDATE student SET sName= '李燕' WHERE sNo=2; # 删除数据 DELETE FROM student WHERE sNo=2; # 查询 SELECT sNo,sName,age,sex,score FROM student; |
二、创建WinForm项目#
1 设计界面#
1.1 登录界面#
使用控件:2个label控件,2个textbox控件(分别取名:tbName和tbPasswd),1个button控件(btnLogin)
1.2 管理界面#
使用控件:1个DataGridView(dgvShow),1个TextBox(tbByName),
5个button(btnAdd、btnDeleted、btnUpdate、btnSort与btnQuery)
1.3 信息输入界面#
使用控件:5个Label、5个TextBox(tbSno、tbSname、tbSex、tbAge、tbScore),1个button(btnSave)
2 创建类(与数据库对应)#
目的:便于 按学生对象的方式查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | internal class StudentInfo { public string sNo { get ; set ; } public string sName { get ; set ; } public string sex { get ; set ; } public int age { get ; set ; } public int score { get ; set ; } public StudentInfo( string sNo, string sName, string sex, int age, int score) { this .sNo = sNo ?? throw new ArgumentNullException(nameof(sNo)); this .sName = sName ?? throw new ArgumentNullException(nameof(sName)); this .sex = sex ?? throw new ArgumentNullException(nameof(sex)); this .age = age; this .score = score; } public override string ToString() { return $ "学生信息:学号:{this.sNo},姓名:{this.sName}," + $ "性别:{this.sex},年龄:{this.age},得分:{this.score}" ; } } |
3 连接MySQL数据库#
具体操作:
(1)下载 MySql.Data.dll
一般在MySQL安装器内,有.NET相关的。
(2)引用 MySql.Data.dll
在Visual Studio的“解决方案资源管理器”里 ,选择“引用”,右键“添加引用”,添加对应版本的MySql.Data.dll动态库文件。
那么如何找到?:找到对应.NET版本(选择项目,右键属性,查看目标框架)文件路径的 MySql.Data.dll动态库。
例如:本人项目的版本是 .net framework 4.8 对应路径:C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.8\MySql.Data.dll
(3)连接MySQL数据库
创建连接字符串——>MySqlConnection对象——>MySQLCommand对象
为了代码组织更方便,这里我也创建了一个数据库操作类(MySqlOpHelper),方便操作数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | internal class MySqlOpHelper { private string conStr = null ; private MySqlConnection msc = null ; private MySqlCommand msco = null ; private MySqlDataReader msdr= null ; // 用于系统登录 存储用户名和密码 public Dictionary< string , string > dics = null ; // 用于数据库查询后的数据对象List<StudentInfo> public List<StudentInfo> stus = null ; public MySqlOpHelper( string conStr) { this .conStr = conStr ?? throw new ArgumentNullException(nameof(conStr)); } /// <summary> /// 系统 登录 /// </summary> /// <param name="opStr"></param> public void OpLoginMySql( string queryStr) { try { msc = new MySqlConnection(conStr); msc.Open(); msco = new MySqlCommand(queryStr, this .msc); msdr = msco.ExecuteReader(); dics = new Dictionary< string , string >(); while (msdr.Read()) { dics.Add(msdr[0].ToString(), msdr[1].ToString()); } } catch { MessageBox.Show( "登录失败!" , "用户登录" , MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { msco.Dispose(); msc.Close(); } } /// <summary> /// 数据库操作 增删改 /// </summary> /// <param name="opStr"></param> public void OpAddDeleUpdateMySql( string opStr) { try { msc = new MySqlConnection(conStr); msco = new MySqlCommand(opStr, this .msc); msc.Open(); msco.ExecuteNonQuery(); MessageBox.Show( "操作成功!" , "数据库操作" , MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { MessageBox.Show( "操作失败!" , "数据库操作" , MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { msco.Dispose(); msc.Close(); } } /// <summary> /// 数据库操作 查询 /// </summary> /// <param name="queryStr"></param> public void OpQueryMySql( string queryStr) { try { msc = new MySqlConnection(conStr); msco = new MySqlCommand(queryStr, this .msc); msc.Open(); msdr = msco.ExecuteReader(); stus = new List<StudentInfo>(); while (msdr.Read()) { stus.Add( new StudentInfo(msdr[0].ToString(), msdr[1].ToString(), msdr[2].ToString(), int .Parse(msdr[3].ToString()), int .Parse(msdr[4].ToString()))); } //foreach(var i in stus) { // MessageBox.Show(i.ToString()); //} } catch { MessageBox.Show( "查询失败!" , "数据库查询" , MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { msco.Dispose(); msc.Close(); } } } |
4 登录功能实现#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /// <summary> /// 数据库连接字符串 /// </summary> private string connectStr = "server=127.0.0.1;port=3306;user=root;password=1234;database=studentmanagersystem" ; /// <summary> /// 数据库login表查询语句,用户登录 /// </summary> private string operatorStr = "select name,passwd from login;" ; /// <summary> /// 登录 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLogin_Click( object sender, EventArgs e) { LoginSystem(); } /// <summary> /// 登录方法 /// </summary> private void LoginSystem() { MySqlOpHelper msoph = new MySqlOpHelper(connectStr); msoph.OpLoginMySql(operatorStr); bool flag = false ; foreach ( var i in msoph.dics) { if (tbName.Text == i.Key && tbPasswd.Text == i.Value) { flag = true ; new stumanager().Show(); this .Hide(); } } if (flag == false ) { MessageBox.Show( "登录失败!" , "用户登录" , MessageBoxButtons.OK, MessageBoxIcon.Warning); } } |
5 学生管理功能实现#
5.1 增、删、改#
(1)增 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | // 信息输入窗口 类 /// <summary> /// 数据库连接字符串 /// </summary> private string connectStr = "server=127.0.0.1;port=3306;user=root;password=1234;database=studentmanagersystem" ; /// <summary> /// 信息保存 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click( object sender, EventArgs e) { string addStr = $ "insert into student(sNo,sName,sex,age,score) values('{tbSno.Text}','{tbSname.Text}'," + $ "'{tbSex.Text}',{int.Parse(tbAge.Text)},{int.Parse(tbScore.Text)});" ; MySqlOpHelper msop= new MySqlOpHelper(connectStr); msop.OpAddDeleUpdateMySql(addStr); tbSno.Text = "" ; tbSname.Text = "" ; tbSex.Text = "" ; tbAge.Text = "" ; tbScore.Text = "" ; } // 管理界面——事件 /// <summary> /// 增 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAdd_Click( object sender, EventArgs e) { new studentinput().Show(); } |
(2)删 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /// <summary> /// 删 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDeleted_Click( object sender, EventArgs e) { DeleteData(); } /// <summary> /// 删除方法 /// </summary> private void DeleteData() { // 获取选中的学生 StudentInfo currentStu = msop.stus[dgvShow.CurrentRow.Index]; //MessageBox.Show(currentStu.sNo); string deleteStr = $ "delete from student where sNo='{currentStu.sNo}';" ; msop = new MySqlOpHelper(connectStr); msop.OpAddDeleUpdateMySql(deleteStr); } |
(3)改 操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /// <summary> /// 修改 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdate_Click( object sender, EventArgs e) { UpdateData(); } /// <summary> /// 修改方法 /// </summary> private void UpdateData() { StudentInfo selectedStu = msop.stus[dgvShow.CurrentRow.Index]; string updateStr = $ "update student set sName='{dgvShow[" sName ", dgvShow.CurrentRow.Index].Value}'," + $ "sex='{dgvShow[" sex ", dgvShow.CurrentRow.Index].Value}'," + $ "age={dgvShow[" age ", dgvShow.CurrentRow.Index].Value}," + $ "score={dgvShow[" score ", dgvShow.CurrentRow.Index].Value} where sNo='{selectedStu.sNo}'" ; msop = new MySqlOpHelper(connectStr); msop.OpAddDeleUpdateMySql(updateStr); } |
5.2 查#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /// <summary> /// 数据库连接字符串 /// </summary> private string connectStr = "server=127.0.0.1;port=3306;user=root;password=1234;database=studentmanagersystem" ; /// <summary> /// 数据库student表查询语句 /// </summary> private string operatorStr = "select sNo,sName,sex,age,score from student;" ; /// <summary> /// 用于各种数据操作 自定义类 /// </summary> MySqlOpHelper msop = null ; /// <summary> /// 显示数据 /// </summary> private void ShowStudentInfo() { msop = new MySqlOpHelper(connectStr); // 获得msop.stus 这个对象集合 List<StudentInfo> msop.OpQueryMySql(operatorStr); // 数据源绑定 dgvShow.DataSource = msop.stus; } /// <summary> /// 查询 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnQuery_Click( object sender, EventArgs e) { // 直接查询 if (tbByName.Text == "" ) { ShowStudentInfo(); } else { // 通过姓名查找 operatorStr = $ "select sNo,sName,sex,age,score from student where sName='{tbByName.Text}';" ; ShowStudentInfo(); operatorStr = "select sNo,sName,sex,age,score from student" ; } } |
5.3 排序#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /// <summary> /// 按成绩排序 事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSort_Click( object sender, EventArgs e) { if (msop != null ) { msop.OpQueryMySql(operatorStr); msop.stus.Sort( delegate (StudentInfo stu1, StudentInfo stu2) { return stu2.score.CompareTo(stu1.score); }); dgvShow.DataSource = msop.stus; // 排序后,数据源重写绑定 } else { MessageBox.Show( "排序失败!" , "数据排序" , MessageBoxButtons.OK, MessageBoxIcon.Error); } } |
源代码下载地址:https://github.com/WANN-A/StudentManagerSystem.git
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本