作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服

1.系统概述

本次是做一个学生管理系统,在学了数据库之后,希望通过这个系统把所学知识应用与实际项目中去。加强自己的熟练程度。 开发背景:具备数据库,C#的相关知识储备,掌握基本的html知识。
用途:仅作练习用。通过一门语言,将数据库展现出来。

2.功能需求分析

系统概念层设计:功能用例图如下

 

1. 登录功能:用于身份认证

2. 数据操作:信息查询,数据的增删改。
a) 数据操作里,管理员具备所有的操作权限。学生具有选课和查看的功能。以及可以修改自己的个人信息。
3. UI设计

3.数据库设计 

E-R图 1


首先,学生表(tb_student)设计如下

列名

数据类型

是否为空(默认未是)

主键(默认为否)

Student_name

Nvarchar (15)



Student_num

int

Student_password

Nvarchar(30)



Student_sex

Nvarchar(5)



Student_age

smallint



Student_dept

Nvarchar(20)



 

tb_course

列名

数据类型

是否为空

主键

Course_num

int

Course_name

Nvarchar(30)



Course_credit

smallint



Course_semester

smallint



tb_student_course

列名

数据类型

是否为空

主键

Sc_id

int

Student_num

int


外键

Course_num

int


外键

grade

smallint



tb_admin

列名

数据类型

是否为空

主键

Admin_id

smallint

admin_name

Nvarchar(20)



Admin_password

Nvarchar(40)



remark

Nvarcahr(10)



一.配置数据库连接

首先,第一步配置好数据库连接:

1.在app.config文件里添加连接字符串,如下代码:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>


  <connectionStrings>   
    <add name="sql_homework_end.Properties.Settings.sql_homework_endConnectionString"
      connectionString="Data Source=.;Initial Catalog=sql_homework_end;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>


    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

2.建立数据库公共类:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace sql_homework_end
{
    class sqlhelper
    {
        private static string connStr = ConfigurationManager.ConnectionStrings["sql_homework_end.Properties.Settings.sql_homework_endConnectionString"].ConnectionString;
        /// <summary>
        /// 返回受影响的数据行数
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int ExecuteNoQuery(string sql)
        {
            using (SqlConnection conn=new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd=conn.CreateCommand())
                {
                  cmd.CommandText = sql;
                  return cmd.ExecuteNonQuery();
                  
                }
            }
        }
        /// <summary>
        /// 返回一个数据集
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static DataSet ExecuteDataSet(string sql)
        {
            using (SqlConnection xonn=new SqlConnection(connStr))
            {
                xonn.Open();
                using (SqlCommand cmd = xonn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    DataSet dataset = new DataSet();
                    adapter.Fill(dataset);
                    return dataset;
                }
            }
        }
        public static object ExecuteScalar(string sql)
        {
            using (SqlConnection conn=new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd=conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    return cmd.ExecuteScalar();
                }
            }
        }
        /// <summary>
        /// md5加密
        /// </summary>
        /// <param name="strPwd"></param>
        /// <returns></returns>
        public static string GetMD5(string strPwd)
        {
            string pwd = "";
            //实例化一个md5对象
            MD5 md5 = MD5.Create();
            // 加密后是一个字节类型的数组
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd));
            //翻转生成的MD5码        
            s.Reverse();
            //通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            //只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位
            for (int i = 3; i < s.Length - 1; i++)
            {
                //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
                //进一步对生成的MD5码做一些改造
                pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString("X");
            }
            return pwd;
        }
    
    
    }
}

二.功能设计

1.登录功能

界面预览:

image.png

功能有:身份验证,退出。公共变量传值。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sql_homework_end
{
    public partial class login : Form
    {
        public login()
        {
            InitializeComponent();
        }

        //界面传值
        public static string GlobelValue; // 注意,必须申明为static变量
        //登录按钮事件
        private void btn_login_Click(object sender, EventArgs e)
        {
            if (cmb_identity.Text.ToString()=="管理员")
            {
                verify_identidy("tb_admin","admin_name");
                main a = new main();
                a.Show();
            }
            else if (cmb_identity.Text.ToString()=="学生")
            {
                verify_identidy("tb_student","student_name");
                studnet s = new studnet();
                s.Show();
            }
            
        }
        //身份验证的函数
        private void verify_identidy(string table,string name)
        {            
            DataSet ds = new DataSet();
            ds = sqlhelper.ExecuteDataSet("select * from "+table+" where "+name+" = '" + tbx_loginname.Text + "'");
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            if (dt.Rows.Count != 0)
            {
                GlobelValue = tbx_loginname.Text;                
                this.Visible = false;   //隐藏当前窗体                                                      
            }
            else
            {
                MessageBox.Show("用户名不存在,请重新输入");
            }
        }
        //退出按钮
        private void btn_close_Click(object sender, EventArgs e)
        {
            this.Close();
        }
       
        
        
    }
}

2.主界面-管理员

预览:

管理员信息:

image.png

学生信息:

image.png

主要使用控件:datagridview

相关代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sql_homework_end
{
    public partial class main : Form
    {
        public main()
        {
            InitializeComponent();
            
        }
        //绑定并显示相关信息
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        private void 学生信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ds = sqlhelper.ExecuteDataSet("select * from tb_student");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
        }

        private void 课程信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ds = sqlhelper.ExecuteDataSet("select * from tb_course");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
        }

        private void 选课信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ds = sqlhelper.ExecuteDataSet("select * from tb_student_course");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            dataGridView1.Columns["sc_id"].DisplayIndex = 0;
        }        
        private void 管理员信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ds = sqlhelper.ExecuteDataSet("select * from tb_admin");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
        }
        //添加按钮事件
        private void btn_insert_Click(object sender, EventArgs e)
        {
            if (dataGridView1.Columns[0].HeaderText=="student_num")
            {
                string sql = @"insert tb_student (student_num,student_name,student_password,student_sex
                        ,student_age,student_dept)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" +
                        dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value
                        + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[4].Value
                        + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[5].Value + "')";
                sqlhelper.ExecuteNoQuery(sql);
                
            }
            else if (dataGridView1.Columns[0].HeaderText=="course_num")
            {
                string sql = @"insert tb_course (course_num,course_name,course_credit,course_semester)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')";
                sqlhelper.ExecuteNoQuery(sql);
            }
            else if (dataGridView1.Columns[0].HeaderText=="sc_id")
            {
                try
                {
                    string sql = @"insert tb_student_course (sc_id,student_num,course_num,grade)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')";
                    sqlhelper.ExecuteNoQuery(sql);
                }
                catch (Exception)
                {
                    MessageBox.Show("学号或姓名不存在,请重新添加。");                    
                }
                
            }
            else if (dataGridView1.Columns[0].HeaderText == "admin_id")
            {
                string sql = @"insert tb_admin (admin_id,admin_name,admin_password,remark)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')";
                sqlhelper.ExecuteNoQuery(sql);
            }
            MessageBox.Show("添加成功");
        }
        //更新按钮事件
        private void btn_update_Click(object sender, EventArgs e)
        {
            if (dataGridView1.Columns[0].HeaderText == "student_num")
            {
                update("tb_student","student_num");
            }
            else if (dataGridView1.Columns[0].HeaderText == "course_num")
            {
                update("tb_course","course_num");
            }
            else if (dataGridView1.Columns[0].HeaderText == "admin_id")
            {
                update("tb_admin","admin_id");
            }
            else if (dataGridView1.Columns[0].HeaderText == "sc_id")
            {
                try
                {
                    update("tb_studnet_course","sc_id");
                }
                catch (Exception)
                {
                    MessageBox.Show("学号或课程号不存在,请重新输入");
                    throw;
                }                
            }                       
        }
        //更新方法
        private void update(string table,string head_id) 
        {
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                int id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value);
                for (int j = 1; j < dataGridView1.ColumnCount; j++)
                {
                    if (dataGridView1.Columns[j].Visible == true)
                    {
                        string columnName = dataGridView1.Columns[j].Name.ToString();
                        string sql = "update " + table + " set " + columnName + "='" + dataGridView1.Rows[i].Cells[j].Value + "' where " + head_id + "='" + id + "'";
                        sqlhelper.ExecuteNoQuery(sql);
                    }
                }
            }
            MessageBox.Show("更新成功");
        }

        //删除事件
        private void btn_delete_Click(object sender, EventArgs e)
        {
            if (dataGridView1.Columns[0].HeaderText == "student_num")
            {
                string sql = "delete from tb_student where student_num='" + dataGridView1.SelectedCells[0].Value + "'";
                sqlhelper.ExecuteNoQuery(sql);                
            }
            else if (dataGridView1.Columns[0].HeaderText == "course_num")
            {
                string sql = "delete from tb_course where course_num='" + dataGridView1.SelectedCells[0].Value + "'";
                sqlhelper.ExecuteNoQuery(sql);
            }
            else if (dataGridView1.Columns[0].HeaderText == "sc_id")
            {
                string sql = "delete from tb_student_course where sc_id='" + dataGridView1.SelectedCells[0].Value + "'";
                sqlhelper.ExecuteNoQuery(sql);
            }
            else if (dataGridView1.Columns[0].HeaderText == "admin_id")
            {
                string sql = "delete from tb_admin where admin_id='" + dataGridView1.SelectedCells[0].Value + "'";
                sqlhelper.ExecuteNoQuery(sql);
            }
            MessageBox.Show("删除成功");
        }
        
        //界面载入显示身份和登录时间
        private void main_Load(object sender, EventArgs e)
        {
            lbl_username.Text = "Welcome," + login.GlobelValue + "";
            lbl_logintime.Text ="登录时间:" +DateTime.Now.ToString()+"";
        }
    }
}

3.学生界面

界面预览:

个人信息显示:在这个界面,学生能看到自己的信息,并进行修改操作。

image.png

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sql_homework_end
{
    public partial class studnet : Form
    {
        public studnet()
        {
            InitializeComponent();
        }

        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        private void studnet_Load(object sender, EventArgs e)
        {
            lbl_username.Text = "Welcome," + login.GlobelValue + "";
            lbl_logintime.Text = "登录时间:" + DateTime.Now.ToString() + "";
           
            
        }
        //相关信息显示
        private void 个人信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ds = sqlhelper.ExecuteDataSet("select * from tb_student where student_name='" + login.GlobelValue + "'");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            btn_update.Visible = true;
            btn_insert.Visible = false;
            btn_delete.Visible = false;
        }

        private void 课程信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ds = sqlhelper.ExecuteDataSet("select * from tb_course");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            btn_update.Visible = false;
            btn_insert.Visible = false;
            btn_delete.Visible = false;
        }

        private void 选课管理ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ds = sqlhelper.ExecuteDataSet(@"select sc.sc_id,s.student_num,c.course_num,c.course_name,grade
from tb_student_course sc join tb_student s on sc.student_num=s.student_num
join tb_course c on sc.course_num=c.course_num 
where s.student_name = '" + login.GlobelValue + "'");
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            dataGridView1.Columns["sc_id"].DisplayIndex = 0;
            btn_update.Visible = false;
            btn_insert.Visible = true;
            btn_delete.Visible = true;
        }       
        //学生选课功能
        private void btn_insert_Click_1(object sender, EventArgs e)
        {
            if (Convert.ToInt32(dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[4].Value) > 0)
            {
                MessageBox.Show("不准填写成绩");
            }
            else
            {
                string sql = @"insert tb_student_course (sc_id,student_num,course_num)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "')";
                sqlhelper.ExecuteNoQuery(sql);
                MessageBox.Show("选课成功");
            }            
        }
        //删除选的课程
        private void btn_delete_Click(object sender, EventArgs e)
        {
            string sql = "delete from tb_student_course where sc_id='" + dataGridView1.SelectedCells[0].Value + "'";
            sqlhelper.ExecuteNoQuery(sql);
            MessageBox.Show("删除成功,请重新选课。");
        }
        //更新个人信息
        private void btn_update_Click(object sender, EventArgs e)
        {
            update("tb_student", "student_num");
        }
        private void update(string table, string head_id)
        {
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                int id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value);
                for (int j = 1; j < dataGridView1.ColumnCount; j++)
                {
                    if (dataGridView1.Columns[j].Visible == true)
                    {
                        string columnName = dataGridView1.Columns[j].Name.ToString();
                        string sql = "update " + table + " set " + columnName + "='" + dataGridView1.Rows[i].Cells[j].Value + "' where " + head_id + "='" + id + "'";
                        sqlhelper.ExecuteNoQuery(sql);
                    }
                }
            }
            MessageBox.Show("更新成功");
        }
       
    }
}


Home