跳至主要內容

学长敲代码原创大约 6 分钟教程C#学生信息管理系统

数据库创建

数据库字段设计如下,如果需要其他字段可自行扩充字段。这里使用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/149132022open in new window

主窗体点击事件

在主窗体中创建一个菜单栏,点击菜单后可以触发事件。添加菜单按钮:新增学生、学生数据、退出登录

把主窗体设置成父窗体,点击菜单后弹出的子窗体可以在父窗体中(主窗体的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));

学生登录

创建一个窗体:学生个人中心

然后设置主窗体,如果是管理员登录则默认弹出学生列表,否则弹出学生个人信息,并且设置权限。

学生注册功能

添加注册窗体