学生管理系统-WinForm(C#)与MySQL
一、创建数据库
1 创建数据库
create database studentmanagersystem;
2 创建表login和student
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 增加数据
INSERT INTO login VALUES('admin','123');
INSERT INTO student VALUES('1','张三',20,'男',98);
INSERT INTO student VALUES('2','李艳',19,'女',85);
*4 数据操作
# 修改数据 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 创建类(与数据库对应)
目的:便于 按学生对象的方式查询
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),方便操作数据库。
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 登录功能实现
/// <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)增 操作
// 信息输入窗口 类
/// <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)删 操作
/// <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)改 操作
/// <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 查
/// <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 排序
/// <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

浙公网安备 33010602011771号