原创大约 6 分钟
数据库创建
数据库字段设计如下,如果需要其他字段可自行扩充字段。这里使用mysql和sqlserver都可以,你们自行选择一种数据库进行开发
区别仅仅在于数据库创建代码不同、C#中仅仅是Sql.cs代码不一样,mysql需要引入一个资源文件
sqlserver语句
create database student_manage;
go
use student_manage;
go
-- 创建表:管理员
create table tb_admin (
username varchar(20) primary key , -- 用户名
password varchar(20) -- 密码
)
go
insert into tb_admin (username,password) values('1','1');
go
create table tb_student(
sno varchar(20) primary key,
password varchar(20), -- 密码
name varchar(20),
tele varchar(11), -- 电话
enterdate date, -- 入学时间
age int, -- 年龄
gender varchar(1), -- m 男 w 女 下拉框
address varchar(100), -- 户籍地址 多行输入框
clazzno varchar(100), -- 班级
)
go
insert into tb_student values('2024001','123','吕布','15555555555','2024-09-13',19,'m','广东深圳xxx','计算2313');
insert into tb_student values('2024002','123','张飞','15555555555','2024-09-13',20,'m','北京xxx','计算2313');
insert into tb_student values('2024003','123','貂蝉','15666555555','2024-09-13',19,'w','福建福州xxx','计算2314');
mysql语句
Create Database student_manage Character Set UTF8;
use student_manage;
create table tb_admin (
username varchar(20),
password varchar(20),
PRIMARY KEY (`username`)
);
insert into tb_admin (username,password) values('1','1');
create table tb_student (
sno varchar(20), -- 学号
password varchar(20), -- 密码
name varchar(20), -- 姓名
tele char(11), -- 电话
enterdate date, -- 入学时间
age int, -- 年龄
gender char(1), -- m 男 w 女
address varchar(100), -- 详细地址
clazzno varchar(100), -- 班级
PRIMARY KEY (`sno`)
);
insert into tb_student values('2024001','123','吕布','15555555555','2024-09-10',19,'m','广东深圳xxx','计算2313');
insert into tb_student values('2024002','123','张飞','15555555555','2024-09-13',20,'m','北京xxx','计算2313');
insert into tb_student values('2024003','123','貂蝉','15666555555','2024-09-15',19,'w','福建福州xxx','计算2314');
登录页面实现
登录功能
画出登录的界面
Sql.cs
using System;
using System.Data;
using System.Data.SqlClient;
namespace StudentWinformApp
{
class Sql
{
private static string urlSql = "Data Source=localhost;Initial Catalog=student_manage;Integrated Security=True";
private static SqlConnection con;
private static SqlCommand cmd;
//构造函数
static Sql()
{
con = new SqlConnection(urlSql);
cmd = con.CreateCommand();//数据库查询
}
//执行没有返回数据的语句
public static int Exec(string sqlText)
{
Console.WriteLine(sqlText);
int res = 0;
try
{
con.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
res = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return res;
}
//执行有返回数据的语句
public static DataTable ExecRt(string sqlText)
{
Console.WriteLine(sqlText);
DataTable myTable = null;
try
{
DataSet dt = new DataSet();
con.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);//填充数据
//如果dt中表数目不为空
if (dt.Tables.Count != 0)
{
myTable = dt.Tables[0];//返回第一个表格数据
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return myTable;
}
}
}
MySql.cs
使用mysql需要下载mysql的驱动,下载MySql.Data.dll
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace StudentWinformApp
{
class Sql
{
//改3个地方,第一:ip地址是localhost,账号是root密码改成自己设的, mysql版本不高于8.0.31或者寻找更高版本的mysql驱动
private static string urlMySql = "Data Source=localhost;port=3306;User ID=root;Password=123456;DataBase=student_manage;Charset=utf8;";
private static MySqlConnection con;
private static MySqlCommand cmd;
//构造函数
static Sql()
{
con = new MySqlConnection(urlMySql);
cmd = new MySqlCommand("", con); //数据库查询
}
//执行没有返回数据的语句
public static int Exec(string sqlText)
{
Console.WriteLine(sqlText);
int res = 0;
try
{
con.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
res = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return res;
}
//执行有返回数据的语句
public static DataTable ExecRt(string sqlText)
{
Console.WriteLine(sqlText);
DataTable myTable = null;
try
{
DataSet dt = new DataSet();
con.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
adapter.Fill(dt);//填充数据
//如果dt中表数目不为空
if (dt.Tables.Count != 0)
{
myTable = dt.Tables[0];//返回第一个表格数据
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return myTable;
}
}
}
登录事件
用户点击登录后,应该显示主窗体页面,我们需要先创建主窗体
private void button1_Click(object sender, EventArgs e)
{
//获取用户登录信息
string username = this.textBox1.Text;
string password = this.textBox2.Text;
//判断空
if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))
{
MessageBox.Show("用户名密码不能为空!");
return;
}
//管理员登录
if (radioButton1.Checked)
{
//访问数据库
string sql = string.Format("select * from tb_admin where username = '{0}' and password = '{1}'", username,password);
DataTable dt = Sql.ExecRt(sql);
if (dt.Rows.Count > 0)//表示查到了用户信息,提示登陆成功
{
loginUser = dt.Rows[0];
usertype = 0;
MainForm mainForm = new MainForm();
mainForm.Show();
this.Visible = false;
return;
}
}
else
{
//学生登录
//访问数据库
string sql = string.Format("select * from tb_student where sno = '{0}' and password = '{1}'", username, password);
DataTable dt = Sql.ExecRt(sql);
if (dt.Rows.Count > 0)//表示查到了用户信息,提示登陆成功
{
loginUser = dt.Rows[0];
usertype = 1;
MainForm mainForm = new MainForm();
mainForm.Show();
this.Visible = false;
return;
}
}
MessageBox.Show("账号密码错误!请重新输入");
}
验证码
验证码工具类代码:
https://blog.csdn.net/KnockingCode/article/details/149132022
主窗体点击事件
在主窗体中创建一个菜单栏,点击菜单后可以触发事件。添加菜单按钮:新增学生、学生数据、退出登录
把主窗体设置成父窗体,点击菜单后弹出的子窗体可以在父窗体中(主窗体的IsMdiContainer属性值设置为 true)
private void 新增学生ToolStripMenuItem_Click(object sender, EventArgs e)
{
StudentAdd studentAdd = new StudentAdd();
studentAdd.MdiParent = this;
studentAdd.Show();
}
private void 学生信息ToolStripMenuItem_Click(object sender, EventArgs e)
{
StudentData studentAdd = new StudentData();
studentAdd.MdiParent = this;
studentAdd.Show();
}
private void 退出登录ToolStripMenuItem_Click(object sender, EventArgs e)
{
//返回到登陆窗口
Login login = new Login();
login.Show();
this.Close();
}
完成学生信息查询
- 在StudentData页面,创建DataGridView ,绑定数据源,实现查看学生信息。
/*加载数据*/
public void loadData()
{
DataTable dt = Sql.ExecRt("select sno as 学号,password as 密码,name as 姓名,tele as 电话 ,enterdate as 入学时间 ,age as 年龄, gender as 性别, address as 详细地址, clazzno as 班级 " +
"from tb_student");
dataGridView1.DataSource = dt;
}
- 为了安全性,我们可以隐藏密码列
dataGridView1.Columns["密码"].Visible = false;
- 实现查询功能,可以根据姓名学号查询
修改学生
- dataGridView 行点击事件 CellClick
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
int rowindex = e.RowIndex;
if (rowindex >= 0)
{
tbSno.Text = dataGridView1.Rows[rowindex].Cells["学号"].Value.ToString();
tbPassword.Text = dataGridView1.Rows[rowindex].Cells["密码"].Value.ToString();
tbName.Text = dataGridView1.Rows[rowindex].Cells["姓名"].Value.ToString();
tbTele.Text = dataGridView1.Rows[rowindex].Cells["电话"].Value.ToString();
tbTime.Text = dataGridView1.Rows[rowindex].Cells["入学时间"].Value.ToString();
tbAge.Text = dataGridView1.Rows[rowindex].Cells["年龄"].Value.ToString();
tbAddress.Text = dataGridView1.Rows[rowindex].Cells["详细地址"].Value.ToString();
tbClazzno.Text = dataGridView1.Rows[rowindex].Cells["班级"].Value.ToString();
string gender = dataGridView1.Rows[rowindex].Cells["性别"].Value.ToString();
if(!String.IsNullOrEmpty(gender))
{
if(gender == "男")
{
radioButton1.Checked = true;
}
else
{
radioButton2.Checked = true;
}
}
}
}
按钮点击后,可以进行修改学生操作。注意年龄是int字段,不可为空!
Sql.Exec(String.Format("update tb_student set Password = '{1}' , Name='{2}',Tele='{3}', enterdate='{4}',age='{5}',address='{6}',clazzno ='{7}',gender='{8}' where sno = '{0}'"
, Sno, Password,Name,Tele,Time,Age,Address,Clazzno,gender));
DateTimePicker 控件的格式设置 CustomFormat属性设置yyyy-MM-dd,Format属性设为Custom
删除学生
添加删除按钮和删除事件
添加学生
直接从修改那儿复制过来就行了。
int res = Sql.Exec(String.Format("insert into tb_student(sno,password,name,tele,enterdate,age,address,clazzno,gender) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')"
, Sno, Password, Name, Tele, Time, Age, Address, Clazzno, gender));
学生登录
创建一个窗体:学生个人中心
然后设置主窗体,如果是管理员登录则默认弹出学生列表,否则弹出学生个人信息,并且设置权限。
学生注册功能
添加注册窗体