目录

利用SQL Sever和 VS C#实现

一、程序流程图

二、具体实现:利用SQL Sever和 VS实现,使用C#连接数据库

1、新建一个名为MySchool的数据库​​​​​​​

2、C#连接数据库,并实现对MySchool数据库的增、删、改、查操作

(1)主界面

(2)学生登录页面

(3)个人主页

(4)注册页面

(5)管理员登录页面

(6)管理员主页

(7)登录日志页面

(8)学生信息页面

(9)课程信息页面

(10)学生成绩信息页面

(11)成绩统计页面

(12)在主界面点击右上角的“×”即退出系统。


利用SQL Sever和 VS C#实现

一、程序流程图

图1:程序流程图

二、具体实现:利用SQL Sever和 VS实现,使用C#连接数据库

1、新建一个名为MySchool的数据库

(1)首先,连接数据库,一定一定要选择“SQL Sever身份验证”方式建立连接,不懂怎么用这种方式连接的可以自行搜索一下,很简单。

图2:数据库连接

(2)新建一个名为“MySchool”的数据库,其中含有的表如下:

图3:MySchool数据库

对应的SQL语句如下:

USE MySchool;DROP TABLE IF EXISTS SC       /*成绩*/DROP TABLE IF EXISTS Student  /*学生信息*/DROP TABLE IF EXISTS Course   /*课程*/DROP TABLE IF EXISTS StudentUser  /*学生用户信息*/DROP TABLE IF EXISTS Administrator  /*管理员用户信息*/DROP TABLE IF EXISTS SysLog   /*注册日志*/DROP TABLE IF EXISTS SysLog1   /*登陆日志*/DROP TABLE IF EXISTS AVG1   /*登陆日志*/CREATE TABLE StudentUser           ( ID NCHAR(20) PRIMARY KEY,               /*学号*/   PassWord NCHAR(32) ,/*密码*/ Sex CHAR(2) ,/*性别*/ Birthday datetime,/*生日*/ UserMobile NCHAR(11),/*电话号码*/ );  CREATE TABLE Administrator           ( ID NCHAR(20) PRIMARY KEY,               /*工号*/   PassWord NCHAR(32) ,             /*密码*/ Sex CHAR(2),/*性别*/ Birthday datetime,/*生日*/ UserMobile NCHAR(11),/*电话号码*/ ); CREATE TABLE SysLog           ([UserMobile] UserID NCHAR(20) ,  /*id*/ dentity CHAR(20),  /*学生或管理员*/ DateAndTime datetime,  /*注册时间*/ UserOperation NCHAR(200)  /*操作方式*/ ); CREATE TABLE SysLog1           ( UserID NCHAR(20) ,  /*id*/ dentity CHAR(20),  /*学生或管理员*/ DateAndTime datetime,  /*登陆时间*/ UserOperation NCHAR(200)  /*登陆操作方式*/ );CREATE TABLE Student           ( Sno CHAR(9) PRIMARY KEY,        /* 列级完整性约束条件,Sno是主码*/                   Sname CHAR(20) UNIQUE,             /* Sname取唯一值*/ Ssex CHAR(2),/*性别*/ Sage SMALLINT,/*年龄*/ Sdept CHAR(20)/*专业*/ ); CREATE TABLE  Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(40),             Cpno CHAR(4),                                      Ccredit SMALLINT,  ); CREATE TABLE  SC ( Sno CHAR(9),  Cno CHAR(4),   Grade SMALLINT, PRIMARY KEY (Sno,Cno),                     /* 主码由两个属性构成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFERENCES Student(Sno),  /* 表级完整性约束条件,Sno是外码,被参照表是Student */ FOREIGN KEY (Cno)REFERENCES Course(Cno)     /* 表级完整性约束条件, Cno是外码,被参照表是Course*/ ); INSERT  INTO  StudentUser VALUES ('20181101111','123456','女',1999-1-1,'13812345678',NULL);INSERT  INTO  Administrator VALUES ('2018110',substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32),'女',1989-1-1,'13812345687',NULL);INSERT  INTO  Administrator VALUES ('2018111',substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32),'女',1989-2-1,'13812655687',NULL);INSERT  INTO  Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215121','李勇','男','CS',20);INSERT  INTO  Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215122','刘晨','女','CS',19);INSERT  INTO  Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215123','王敏','女','MA',18);INSERT  INTO  Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215125','张立','男','IS',19);INSERT  INTO  Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215128','陈冬','男','IS',20);SELECT * FROM StudentINSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('1','数据库',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('2','数学',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('3','信息系统',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('4','操作系统',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('5','数据结构',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('6','数据处理',NULL,4);INSERT  INTO Course(Cno,Cname,Cpno,Ccredit)VALUES ('7','Pascal语言',NULL,4);UPDATE Course SET Cpno = '5' WHERE Cno = '1' UPDATE Course SET Cpno = '1' WHERE Cno = '3' UPDATE Course SET Cpno = '6' WHERE Cno = '4' UPDATE Course SET Cpno = '7' WHERE Cno = '5' UPDATE Course SET Cpno = '6' WHERE Cno = '7' SELECT * FROM CourseINSERT  INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','1',92);INSERT  INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','2',85);INSERT  INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','3',88);INSERT  INTO SC(Sno,Cno,Grade) VALUES ('201215122 ','2',90);INSERT  INTO SC(Sno,Cno,Grade) VALUES ('201215122 ','3',80);SELECT * FROM SC--当学生用户信息更新,触发器启动,将更新的内容存至注册日志IF(OBJECT_ID('regist_recorder1') is not null)        -- 判断名为 regist_recorder 的触发器是否存在DROP TRIGGER regist_recorder1        -- 删除触发器GOCREATE TRIGGER regist_recorder1ON StudentUser           AFTERINSERTAS declare @UserName    nchar(20)declare @DateTime    datetimedeclare @UserOperation nchar(200)declare @dentity CHAR(20)select @UserName = ID FROM StudentUserselect @DateTime = CONVERT(datetime,GETDATE(),120) select @dentity ='StudentUser'declare @op varchar(10)select @op=case when exists(select 1 from inserted) and exists(select 1 from deleted)                   then 'Update'                   when exists(select 1 from inserted) and not exists(select 1 from deleted)                   then 'Insert'                   when not exists(select 1 from inserted) and exists(select 1 from deleted)                   then 'Delete' end                   select @UserOperation = @opINSERT INTO SysLog(UserID,dentity,DateAndTime,UserOperation)VALUES (@UserName,@dentity,@DateTime,@UserOperation)--当管理员信息更新,触发器启动,将更新的内容存至注册日志IF(OBJECT_ID('regist_recorder2') is not null)        -- 判断名为 regist_recorder 的触发器是否存在DROP TRIGGER regist_recorder2        -- 删除触发器GOCREATE TRIGGER regist_recorder2ON Administrator          AFTERINSERTAS declare @UserName    nchar(20)declare @DateTime    datetimedeclare @UserOperation nchar(200)declare @dentity CHAR(20)select @UserName = ID FROM Administratorselect @DateTime = CONVERT(datetime,GETDATE(),120) select @dentity ='Administrator'declare @op varchar(10)select @op=case when exists(select 1 from inserted) and exists(select 1 from deleted)                   then 'Update'                   when exists(select 1 from inserted) and not exists(select 1 from deleted)                   then 'Insert'                   when not exists(select 1 from inserted) and exists(select 1 from deleted)                   then 'Delete' end                   select @UserOperation = @opINSERT INTO SysLog(UserID,dentity,DateAndTime,UserOperation)VALUES (@UserName,@dentity,@DateTime,@UserOperation)--建一个表存储各科平均分--建一个表存储各科平均分CREATE TABLE AVG1(Cname CHAR(10),   /* 科目*/avg1 INT);INSERT  INTO AVG1(Cname,avg1)VALUES ('数据库',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('数学',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('信息系统',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('操作系统',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('数据结构',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('数据处理',NULL);INSERT  INTO AVG1(Cname,avg1)VALUES ('Pascal语言',NULL);--将成绩信息通过下列存储过程算出各科平均分并存储至AVG表IF (exists (select * from sys.objects where name = 'COURSE_AVG1'))DROP PROCEDURE COURSE_AVG1GOCREATE  PROCEDURE COURSE_AVG1ASBEGIN TRANSACTION TRANS  DECLARE     @SX INT,    /* 数学总分 */    @XXXT INT,    /* 信息系统总分 */    @CZXT INT,    /* 操作系统总分 */@SJJG INT,    /* 数据结构总分 */@SJK_C INT,   /* 数据库总分 */@SJCL INT,   /*数据处理总分*/@P INT       /*Pascal语言*/SELECT @SX=AVG(Grade) FROM SCWHERE  Cno='2 'SELECT @XXXT=AVG(Grade) FROM SCWHERE  Cno='3'SELECT @CZXT=AVG(Grade) FROM SCWHERE  Cno='4'SELECT @SJJG=AVG(Grade) FROM SCWHERE  Cno='5'SELECT @SJK_C=AVG(Grade) FROM SCWHERE  Cno='1'SELECT @SJCL=AVG(Grade) FROM SCWHERE  Cno='6'SELECT @P=AVG(Grade) FROM SCWHERE  Cno='7'BEGIN UPDATE AVG1 SET avg1=@SJK_C WHERE Cname='数据库'UPDATE AVG1 SET avg1=@SX WHERE Cname='数学'UPDATE AVG1 SET avg1=@XXXT WHERE Cname='信息系统'UPDATE AVG1 SET avg1=@CZXT WHERE Cname='操作系统'UPDATE AVG1 SET avg1=@SJJG WHERE Cname='数据结构'UPDATE AVG1 SET avg1=@SJCL WHERE Cname='数据处理'UPDATE AVG1 SET avg1=@P WHERE Cname='Pascal语言'COMMIT TRANSACTION TRANS; END

2、C#连接数据库,并实现对MySchool数据库的增、删、改、查操作

(1)主界面:主界面包含欢迎文本和两个可选项,如下图3所示分别为“学生登录”和“管理员登录”,选择不同的选项则分别进入不同的页面。

图4:主界面

对应C#实现如下:

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 SchoolManage{    public partial class FormLogin : Form    {        public FormLogin()        {            InitializeComponent();        }        private void buttonStuLogin_Click(object sender, EventArgs e)        {            FormStuLogin FormStuLogin = new FormStuLogin(); //学生登录窗体            FormStuLogin.Show();//跳转至学生登录窗体            this.Hide();  //隐藏原窗体        }        private void buttonManagerLogin_Click(object sender, EventArgs e)        {            FormManagerLogin FormManagerLogin = new FormManagerLogin(); //管理员登录窗体            FormManagerLogin.Show();//跳转至管理员登录窗体            this.Hide();        }        private void FormLogin_FormClosing_1(object sender, FormClosingEventArgs e)        {                    }        private void FormLogin_FormClosed(object sender, FormClosedEventArgs e)        {            while (MessageBox.Show("即将退出系统,您确认退出吗?", "提示!", MessageBoxButtons.YesNo)== DialogResult.Yes)            {                System.Environment.Exit(System.Environment.ExitCode);            }                    }    }}

(2)学生登录页面:在主界面选择学生登录按钮则进入学生登录页面,页面功能如下图所示。若用户有该系统的账号,则可选择直接登录:先输入用户名,密码以及验证码,三者均正确才能登陆成功。

图5:学生登录页面

图6:学生登录成功

若其中一项不正确则会弹窗提示你重新输入,如下图所示:

图7:学生登录失败

对应C#实现如下(连接数据库的代码实现部分大家根据自身情况自行修改,下同):

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class FormStuLogin : Form    {        public FormStuLogin()        {            InitializeComponent();        }                        public string code;        private string EncryptWithMD5(string source)//MD5加密        {            byte[] sor = Encoding.UTF8.GetBytes(source);            MD5 md5 = MD5.Create();            byte[] result = md5.ComputeHash(sor);            StringBuilder strbul = new StringBuilder(40);            for (int i = 0; i < result.Length; i++)            {                strbul.Append(result[i].ToString("x2"));//加密结果"x2"结果为32位,"x3"结果为48位,"x4"结果为64位            }            return strbul.ToString();        }        private void buttonLogin_Click(object sender, EventArgs e)        {            string username = tBUserName.Text.Trim();  //取出账号            string password = EncryptWithMD5(tBPassword.Text.Trim());  //取出密码并加密            string myConnString = "Data Source=.;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=yourpassword";            SqlConnection sqlConnection = new SqlConnection(myConnString);  //实例化连接对象            sqlConnection.Open();            string sql = "select ID,PassWord from StudentUser where ID = '" + username + "' and PassWord = '" + password + "'";                                            //编写SQL命令            SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();//读取数据            if (sqlDataReader.HasRows && tBVerifyCode.Text == code)//验证是否有该用户及密码且验证码正确            {                MessageBox.Show("欢迎使用!");             //登录成功                StuMain stuMain = new StuMain();                stuMain.GetId(username);                stuMain.Show();//显示下一界面                this.Hide();            }            else if (sqlDataReader.HasRows && tBVerifyCode.Text != code)            {                MessageBox.Show("验证码错误,登录失败!");                return;            }            else            {                MessageBox.Show("账号密码有误,登录失败!");                return;            }            sqlDataReader.Close();            sql = "insert into SysLog1 values ( '" + username + "' , 'Student','" + DateTime.Now + "' , '" + "Login" + "')";                                            //编写SQL命令,把登陆信息存入登录日志            SqlCommand sqlCommand1 = new SqlCommand(sql, sqlConnection);            sqlCommand1.ExecuteNonQuery();            sqlConnection.Close();        }                private void buttonReg_Click(object sender, EventArgs e)        {            this.Hide();            RegisterForm registerForm = new RegisterForm();            registerForm.Show();        }        private void FormStuLogin_Load_1(object sender, EventArgs e)        {            //随机实例化             Random ran = new Random();            int number;            char code1;            //取五个数             for (int i = 0; i < 5; i++)            {                number = ran.Next();                if (number % 2 == 0)                    code1 = (char)('0' + (char)(number % 10));                else                    code1 = (char)('A' + (char)(number % 26)); //转化为字符                 this.code += code1.ToString();            }            lbVerifyCode.Text = code;        }        private void lbVerifyCode_Click(object sender, EventArgs e)        {        }        private void buttonCancel_Click_1(object sender, EventArgs e)        {            this.Close();        }        private void FormStuLogin_FormClosing_1(object sender, FormClosingEventArgs e)        {            FormLogin m2 = new FormLogin();            m2.Show();        }        private void lbPassword_Click(object sender, EventArgs e)        {        }    }}

(3)个人主页:学生用户若成功登录则进入个人主页,个人主页共包含“个人基本信息”和“成绩单”两个分页,所展示的信息如下图所示,学生能够看到自己的个人信息和个人成绩,以及各门课程的详细信息。

图8:个人主页——个人信息页

图9:个人主页——成绩单页

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class StuMain : Form    {        public StuMain()        {            InitializeComponent();        }        private void buttonExit_Click(object sender, EventArgs e)        {            this.Close();        }        string Id;        public void GetId(string id)//上个窗体调用此函数,将id值传过来        {            lbStuId.Text = id;            lbStuId.Refresh();            Id = id;        }        private void StuMain_Load_1(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet.Course”中。您可以根据需要移动或移除它。            this.courseTableAdapter.Fill(this.mySchoolDataSet.Course);                        string name, sex, dept, tel;            int age;            string connString = "Data Source=.;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=yourpassword";//数据库连接字符串            SqlConnection conn = new SqlConnection(connString);//创建connection对象            conn.Open();//打开数据库              //创建数据库命令              SqlCommand cmd = conn.CreateCommand();            //创建查询语句              cmd.CommandText = "select * from Student where Sno = '" + Id + "';select * from StudentUser where ID = '" + Id + "'";            //从数据库中读取数据流存入reader中              SqlDataReader reader = cmd.ExecuteReader();            //从reader中读取下一行数据,如果没有数据,reader.Read()返回flase              while (reader.Read())            {                name = reader.GetString(reader.GetOrdinal("Sname"));                sex = reader.GetString(reader.GetOrdinal("Ssex"));                age = reader.GetInt16(reader.GetOrdinal("Sage"));                dept = reader.GetString(reader.GetOrdinal("Sdept"));                lbStuName.Text = name;                lbStuName.Refresh();                lbStuSex.Text = sex;                lbStuAge.Text = age.ToString();                lbStuDept.Text = dept;                break;            }            reader.NextResult();//执行下一句操作            //从reader中读取下一行数据,如果没有数据,reader.Read()返回flase              while (reader.Read())            {                tel = reader.GetString(reader.GetOrdinal("UserMobile"));                lbPhone.Text = tel;                break;            }            reader.Close();            SqlDataAdapter dap = new SqlDataAdapter("select * from SC where Sno='" + Id + "'", conn);//查询            DataSet ds = new DataSet();//创建DataSet对象            dap.Fill(ds);//填充DataSet数据集            dataGridView1.DataSource = ds.Tables[0].DefaultView;//显示查询后的数据            conn.Close();            int i = 0;            int x = 0, h = 0;            int a;            for (; i  59)                    h++;            }            if (i == 0) a = 0;            else a = x / i;            lbPassnum.Text = h.ToString();            lbAvgSco.Text = a.ToString();        }        private void StuMain_FormClosing_1(object sender, FormClosingEventArgs e)        {            FormLogin m2 = new FormLogin();            m2.Show();        }        private void StuMain_FormClosed(object sender, FormClosedEventArgs e)        {                    }            }}

(4)注册页面:若学生用户没有登陆账号,则需在学生登录界面选择注册按钮,进入注册界面输入相应信息进行注册。成功注册的前提是你为该校的学生且各信息已填写完整。

图10:注册页面

图11:注册成功

图12:注册失败

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.IO;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class RegisterForm : Form    {        public RegisterForm()        {            InitializeComponent();        }        private void buttonRegister_Click(object sender, EventArgs e)        {            if (tBStuId.Text.Trim() != "" && tBPassword.Text.Trim() != "" && cBSex.Text.Trim() != "" && tBPhoneNum.Text.Trim() != "")            {//确认一些信息输入非空                try                {                    string connString = "Data Source=.;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=yourpassword";//数据库连接字符串                    SqlConnection connection = new SqlConnection(connString);//创建connection对象                    string username = tBStuId.Text.Trim();  //取出账号                    string sex = cBSex.Text.Trim();  //取出性别                    connection.Open();                    string sql1 = "select Sno,Ssex from Student where Sno = '" + username + "' and Ssex = '" + sex + "'";                                            //编写SQL命令,查找学生信息中是否有该用户                    SqlCommand sqlCommand1 = new SqlCommand(sql1, connection);//确认是否有该学员                    SqlDataReader sqlDataReader1 = sqlCommand1.ExecuteReader();                    bool a = sqlDataReader1.HasRows;                    sqlDataReader1.Close();                    if (a)                    {                        string sql2 = "select ID from StudentUser where ID = '" + username + "'";                                            //编写SQL命令                        SqlCommand sqlCommand2 = new SqlCommand(sql2, connection);//确认是否已经注册过                        SqlDataReader sqlDataReader2 = sqlCommand2.ExecuteReader();                        if (!sqlDataReader2.HasRows)                        {                            string sql3 = "insert into StudentUser (ID,   PassWord ,Sex, UserMobile, Birthday) " +                                                            "values (@userid, @userpassword,@sex,@usermobile,@Birthday)";                            SqlCommand command = new SqlCommand(sql3, connection);                            SqlParameter sqlParameter = new SqlParameter("@userid", tBStuId.Text);                            command.Parameters.Add(sqlParameter);                            sqlParameter = new SqlParameter("@userpassword", EncryptWithMD5(tBPassword.Text));                            command.Parameters.Add(sqlParameter);                            sqlParameter = new SqlParameter("@sex", cBSex.Text);                            command.Parameters.Add(sqlParameter);                            sqlParameter = new SqlParameter("@usermobile", tBPhoneNum.Text);                            command.Parameters.Add(sqlParameter);                            sqlParameter = new SqlParameter("@Birthday", dateTimePicker1.Value);                            command.Parameters.Add(sqlParameter);                            sqlDataReader2.Close();                            //打开数据库连接                            command.ExecuteNonQuery();                            connection.Close();                            MessageBox.Show("注册成功");                        }                        else                        {                            MessageBox.Show("该用户已注册。");                        }                    }                    else                    {                        MessageBox.Show("我校无该学员");                    }                }                catch (Exception ex)                {                    MessageBox.Show(ex.Message);                }                this.Close();            }            else            {                MessageBox.Show("请将信息填写完整!");            }        }        public Byte[] mybyte = new byte[0];        public static string EncryptWithMD5(string source)        {            byte[] sor = Encoding.UTF8.GetBytes(source);            MD5 md5 = MD5.Create();            byte[] result = md5.ComputeHash(sor);            StringBuilder strbul = new StringBuilder(40);            for (int i = 0; i (5)管理员登录页面:若您的身份为管理员,则可在主界面选择“管理员登录”选项,进入管理员登录界面。与学生登录相似,管理员登录成功的前提是正确输入各类信息。但管理员登录不提供“注册”选项,因为管理员身份必须由系统授予——即在数据库中填入相应信息才可成为管理员。 

图13:管理员登录页面

图14:管理员登录成功

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class FormManagerLogin : Form    {        public FormManagerLogin()        {            InitializeComponent();        }        public string code;        private void buttonLogin_Click(object sender, EventArgs e)        {            string username = tBWorknum.Text.Trim();  //取出账号            string password = EncryptWithMD5(tBPassword.Text.Trim());  //取出密码并加密            string myConnString = "Data Source=.;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=yourpassword";            SqlConnection sqlConnection = new SqlConnection(myConnString);  //实例化连接对象            sqlConnection.Open();            string sql = "select ID,PassWord from Administrator where ID = '" + username + "' and PassWord = '" + password + "'";                                            //编写SQL命令            SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();            if (sqlDataReader.HasRows && tBVerifyCode.Text == code)            {                MessageBox.Show("欢迎使用!");             //登录成功                ManagerMain managerMain = new ManagerMain();                managerMain.Show();                this.Hide();            }            else if (sqlDataReader.HasRows && tBVerifyCode.Text != code)            {                MessageBox.Show("验证码错误,登录失败!");                return;            }            else            {                MessageBox.Show("账号密码有误,登录失败!");                return;            }            sqlDataReader.Close();            sql = "insert into SysLog1 values ( '" + username + "' , 'Administrator','" + DateTime.Now + "' , '" + "Login" + "')";                                            //编写SQL命令            SqlCommand sqlCommand1 = new SqlCommand(sql, sqlConnection);            sqlCommand1.ExecuteNonQuery();            sqlConnection.Close();        }        private string EncryptWithMD5(string source)        {            byte[] sor = Encoding.UTF8.GetBytes(source);            MD5 md5 = MD5.Create();            byte[] result = md5.ComputeHash(sor);            StringBuilder strbul = new StringBuilder(40);            for (int i = 0; i < result.Length; i++)            {                strbul.Append(result[i].ToString("x2"));//加密结果"x2"结果为32位,"x3"结果为48位,"x4"结果为64位            }            return strbul.ToString();        }        private void FormManagerLogin_Load_1(object sender, EventArgs e)        {            //随机实例化             Random ran = new Random();            int number;            char code1;            //取五个数             for (int i = 0; i < 5; i++)            {                number = ran.Next();                if (number % 2 == 0)                    code1 = (char)('0' + (char)(number % 10));                else                    code1 = (char)('A' + (char)(number % 26)); //转化为字符                 this.code += code1.ToString();            }            lbVerifyCode.Text = code;        }        private void FormManagerLogin_FormClosing_1(object sender, FormClosingEventArgs e)        {            FormLogin m2 = new FormLogin();            m2.Show();        }        private void buttonCancel_Click_1(object sender, EventArgs e)        {            this.Close();        }    }}

(6)管理员主页:管理员主页一共包含五个可选项,如下图所示。其中,对于“学生信息”,“课程信息”,“学生成绩”,管理员可按需进行增、删、改、查操作。

图15:管理员主页

对应C#实现如下:

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 SchoolManage{    public partial class ManagerMain : Form    {        public ManagerMain()        {            InitializeComponent();        }                private void buttonLog_Click(object sender, EventArgs e)        {            this.Hide();            LogMain m = new LogMain();            m.Show();        }        private void buttonStu_Click(object sender, EventArgs e)        {            this.Hide();            StuMessageMain m = new StuMessageMain();            m.Show();        }        private void buttonCourse_Click(object sender, EventArgs e)        {            this.Hide();            CourseMessageMain m = new CourseMessageMain();            m.Show();        }        private void buttonGrade_Click(object sender, EventArgs e)        {            this.Hide();            StuGradeMain m = new StuGradeMain();            m.Show();        }        private void buttonExit_Click(object sender, EventArgs e)        {            this.Close();        }        private void ManagerMain_FormClosed(object sender, FormClosedEventArgs e)        {            //Application.Exit();        }        private void ManagerMain_FormClosing(object sender, FormClosingEventArgs e)        {            FormLogin m2 = new FormLogin();            m2.Show();        }               private void ManagerMain_Load(object sender, EventArgs e)        {        }    }}

(7)登录日志页面:登录日志为管理员提供该系统所有用户的登录记录

图16:登录日志页面

对应C#实现如下:

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 SchoolManage{    public partial class LogMain : Form    {        public LogMain()        {            InitializeComponent();        }        private void LogMain_Load(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet1.SysLog1”中。您可以根据需要移动或移除它。            this.sysLog1TableAdapter.Fill(this.mySchoolDataSet1.SysLog1);        }        private void buttonReturn_Click(object sender, EventArgs e)        {            this.Close();        }        private void LogMain_FormClosing(object sender, FormClosingEventArgs e)        {            ManagerMain m2 = new ManagerMain();            m2.Show();        }    }}

(8)学生信息页面:为管理员提供学生信息,且管理员可按需进行增、删、改、查操作。

图17:学生信息页面

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class StuMessageMain : Form    {        public StuMessageMain()        {            InitializeComponent();        }        private void StuMessageMain_Load(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet2.Student”中。您可以根据需要移动或移除它。            this.studentTableAdapter.Fill(this.mySchoolDataSet2.Student);        }        private void buttonReturn_Click(object sender, EventArgs e)        {            this.Close();        }        private void buttonAdd_Click(object sender, EventArgs e)        {            String StuID = tBStuId.Text.Trim();//读取文本框的值            String StuName = tBStuName.Text.Trim();            String StuSex = tBStuSex.Text.Trim();            String StuSdept = tBStuDept.Text.Trim();            int StuAge = int.Parse(tBStuAge.Text.Trim());            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string insertStr = "INSERT INTO  Student (Sno,Sname,Ssex,Sdept,Sage)    " +                    "VALUES ('" + StuID + "','" + StuName + "','" + StuSex + "','" + StuSdept + "'," + StuAge + ")";                SqlCommand cmd = new SqlCommand(insertStr, con);//通过sql语句对表添加数值                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("输入数据违反要求!");            }            finally            {                con.Dispose();                tBStuId.Text = "";                tBStuName.Text = "";                tBStuSex.Text = "";                tBStuAge.Text = "";                tBStuDept.Text = "";            }            this.studentTableAdapter.Fill(this.mySchoolDataSet2.Student);//刷新表        }        private void buttonDelete_Click(object sender, EventArgs e)        {            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string select_id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//选择的当前行第一列的值,也就是ID                string delete_by_id = "delete from Student where Sno=" + select_id;//sql删除语句                SqlCommand cmd = new SqlCommand(delete_by_id, con);                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("请正确选择行!");            }            finally            {                con.Dispose();            }            this.studentTableAdapter.Fill(this.mySchoolDataSet2.Student);        }        private void buttonEdit_Click(object sender, EventArgs e)        {            String StuID = tBStuId.Text.Trim();            String StuName = tBStuName.Text.Trim();            String StuSex = tBStuSex.Text.Trim();            String StuSdept = tBStuDept.Text.Trim();            int StuAge = 0;            if (tBStuAge.Text != "")             {                StuAge = int.Parse(tBStuAge.Text.Trim());            }            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                if(StuName != "")                 {                    string insertStr = "UPDATE Student SET Sname = '" + StuName + "' WHERE Sno = '" + StuID + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if (StuSex != "")                {                    string insertStr = "UPDATE Student SET Ssex = '" + StuSex + "' WHERE Sno = '" + StuID + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if (StuSdept != "")                {                    string insertStr = "UPDATE Student SET Sdept = '" + StuSdept + "' WHERE Sno = '" + StuID + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if (tBStuAge.Text != "")                {                    string insertStr = "UPDATE Student SET Sage = '" + StuAge + "' WHERE Sno = '" + StuID + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }            }            catch            {                MessageBox.Show("输入数据违反要求!");            }            finally            {                con.Dispose();                tBStuId.Text = "";                tBStuName.Text = "";                tBStuSex.Text = "";                tBStuAge.Text = "";                tBStuDept.Text = "";            }            this.studentTableAdapter.Fill(this.mySchoolDataSet2.Student);        }        private void buttonSearch_Click(object sender, EventArgs e)        {            String StuID = tBStuId.Text.Trim();            String conn = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword";            SqlConnection sqlConnection = new SqlConnection(conn);  //实例化连接对象            try            {                sqlConnection.Open();                String select_by_id = "select * from Student where Sno='" + StuID + "'";                SqlCommand sqlCommand = new SqlCommand(select_by_id, sqlConnection);                SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                BindingSource bindingSource = new BindingSource();                bindingSource.DataSource = sqlDataReader;                dataGridView1.DataSource = bindingSource;            }            catch            {                MessageBox.Show("查询语句有误,请认真检查SQL语句!");            }            finally            {                sqlConnection.Close();                tBStuId.Text = "";            }        }        private void StuMessageMain_FormClosing(object sender, FormClosingEventArgs e)        {            ManagerMain m2 = new ManagerMain();            m2.Show();        }    }}

(9)课程信息页面:为管理员提供课程信息,且管理员可按需进行增、删、改、查操作。

图18:课程信息页面

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class CourseMessageMain : Form    {        public CourseMessageMain()        {            InitializeComponent();        }        private void CourseMessageMain_Load(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet3.Course”中。您可以根据需要移动或移除它。            this.courseTableAdapter.Fill(this.mySchoolDataSet3.Course);        }        private void buttonAdd_Click(object sender, EventArgs e)        {            String cno = tBCno.Text.Trim();            String cn = tBCname.Text.Trim();            String cpo = tBCpno.Text.Trim();            int cd = 0;            if(tBCcredit.Text != "")            {                cd = int.Parse(tBCcredit.Text.Trim());            }            if (cpo == "")             {                cpo = "NULL";            }            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                if(cno == "" || cn =="" || cd == 0)                {                    MessageBox.Show("输入数据违反要求!");                }                else                {                    con.Open();                    string insertStr = "INSERT INTO  Course (Cno,Cname,Cpno,Ccredit)    " +                        "VALUES ('" + cno + "','" + cn + "','" + cpo + "','" + cd + "')";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                            }            catch            {                            }            finally            {                con.Dispose();                tBCno.Text = "";                tBCname.Text = "";                tBCpno.Text = "";                tBCcredit.Text = "";            }            this.courseTableAdapter.Fill(this.mySchoolDataSet3.Course);        }        private void buttonDelete_Click(object sender, EventArgs e)        {            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string select_id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//选择的当前行第一列的值,也就是ID                string delete_by_id = "delete from Course where Cno=" + select_id;//sql删除语句                SqlCommand cmd = new SqlCommand(delete_by_id, con);                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("请正确选择行!");            }            finally            {                con.Dispose();            }            this.courseTableAdapter.Fill(this.mySchoolDataSet3.Course);        }        private void buttonEdit_Click(object sender, EventArgs e)        {            String cno = tBCno.Text.Trim();            String cn = tBCname.Text.Trim();            String cpo = tBCpno.Text.Trim();            int cd = 0;            if(tBCcredit.Text != "")            {                cd = int.Parse(tBCcredit.Text.Trim());            }                        if (cpo == "")            {                cpo = "NULL";            }            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");                con.Open();                if(cn != "")                {                    string insertStr = "UPDATE Course SET Cname = '" + cn + "' WHERE Cno = '" + cno + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if (cpo != "")                {                    string insertStr = "UPDATE Course SET Cpno = '" + cpo + "' WHERE Cno = '" + cno + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if (tBCcredit.Text != "")                {                    string insertStr = "UPDATE Course SET Ccredit = '" + cd + "' WHERE Cno = '" + cno + "'";                    SqlCommand cmd = new SqlCommand(insertStr, con);                    cmd.ExecuteNonQuery();                }                if(cno == "")                {                    MessageBox.Show("输入数据违反要求!");                }                            con.Dispose();                tBCno.Text = "";                tBCname.Text = "";                tBCpno.Text = "";                tBCcredit.Text = "";                        this.courseTableAdapter.Fill(this.mySchoolDataSet3.Course);        }        private void buttonSearch_Click(object sender, EventArgs e)        {            String cno = tBCno.Text.Trim();            String conn = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword";            SqlConnection sqlConnection = new SqlConnection(conn);  //实例化连接对象            try            {                sqlConnection.Open();                String select_by_id = "select * from Course where Cno='" + cno + "'";                SqlCommand sqlCommand = new SqlCommand(select_by_id, sqlConnection);                SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                BindingSource bindingSource = new BindingSource();                bindingSource.DataSource = sqlDataReader;                dataGridView1.DataSource = bindingSource;            }            catch            {                MessageBox.Show("查询语句有误,请认真检查SQL语句!");            }            finally            {                sqlConnection.Close();                tBCno.Text = "";            }        }        private void buttonReturn_Click(object sender, EventArgs e)        {            this.Close();        }        private void CourseMessageMain_FormClosing(object sender, FormClosingEventArgs e)        {            ManagerMain m2 = new ManagerMain();            m2.Show();        }    }}

(10)学生成绩信息页面:为管理员提供学生成绩信息,且管理员可按需进行增、删、改、查操作。

图19:学生成绩信息页面

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class StuGradeMain : Form    {        public StuGradeMain()        {            InitializeComponent();        }        private void StuGradeMain_Load(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet4.SC”中。您可以根据需要移动或移除它。            this.sCTableAdapter.Fill(this.mySchoolDataSet4.SC);                    }        private void buttonAdd_Click(object sender, EventArgs e)        {            String sno = tBSId.Text.Trim();            String cno = tBCno.Text.Trim();            int gra = int.Parse(tBGrade.Text.Trim());            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string insertStr = "INSERT INTO  SC (Sno,Cno,Grade)    " +                    "VALUES ('" + sno + "','" + cno + "','" + gra + "')";                SqlCommand cmd = new SqlCommand(insertStr, con);                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("输入数据违反要求!");            }            finally            {                con.Dispose();                tBSId.Text = "";                tBCno.Text = "";                tBGrade.Text = "";            }            this.sCTableAdapter.Fill(this.mySchoolDataSet4.SC);        }        private void buttonDelete_Click(object sender, EventArgs e)        {                        SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string select_id = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//选择的当前行第一列的值,也就是ID                string select_cid = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();//选择的当前行第二列的值,也就是CID                string deletesql = "delete from SC where Sno='" + select_id + "' AND Cno='" + select_cid + "'";//sql删除语句                SqlCommand cmd = new SqlCommand(deletesql, con);                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("请正确选择行!");            }            finally            {                con.Dispose();            }            this.sCTableAdapter.Fill(this.mySchoolDataSet4.SC);        }        private void buttonEdit_Click(object sender, EventArgs e)        {            String sno = tBSId.Text.Trim();            String cno = tBCno.Text.Trim();            int gra = int.Parse(tBGrade.Text.Trim());            SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword");            try            {                con.Open();                string insertStr = "UPDATE SC SET Grade='" + gra + "' WHERE Sno = '" + sno + "' AND Cno = '" + cno + "'";                SqlCommand cmd = new SqlCommand(insertStr, con);                cmd.ExecuteNonQuery();            }            catch            {                MessageBox.Show("输入数据违反要求!");            }            finally            {                con.Dispose();                tBSId.Text = "";                tBCno.Text = "";                tBGrade.Text = "";            }            this.sCTableAdapter.Fill(this.mySchoolDataSet4.SC);        }        private void buttonSearch_Click(object sender, EventArgs e)        {            String sno = tBSId.Text.Trim();            String cno = tBCno.Text.Trim();            String conn = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=yourpassword";            SqlConnection sqlConnection = new SqlConnection(conn);  //实例化连接对象            try            {                String selectsql = "select * from SC where Sno='" + sno + "'";                sqlConnection.Open();                if(sno != "" && cno == "")                {                    selectsql = "select * from SC where Sno='" + sno + "'";                }                if (sno != "" && cno != "")                {                    selectsql = "select * from SC where Sno='" + sno + "' AND Cno='" + cno + "'";                }                                SqlCommand sqlCommand = new SqlCommand(selectsql, sqlConnection);                SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                BindingSource bindingSource = new BindingSource();                bindingSource.DataSource = sqlDataReader;                dataGridView1.DataSource = bindingSource;            }            catch            {                MessageBox.Show("查询语句有误,请认真检查SQL语句!");            }            finally            {                sqlConnection.Close();                tBSId.Text = "";                tBCno.Text = "";            }        }        private void buttonMes_Click(object sender, EventArgs e)        {            string connString = "Data Source=.;Initial Catalog=MySchool;Persist Security Info=True;User ID=sa;Password=yourpassword";//数据库连接字符串            SqlConnection connection = new SqlConnection(connString);//创建connection对象            string sql1 = "EXEC COURSE_AVG1";//编写SQL命令            SqlCommand sqlCommand1 = new SqlCommand(sql1, connection);            connection.Open();            sqlCommand1.ExecuteNonQuery();            connection.Close();            this.Hide();            StatisiticMain m2 = new StatisiticMain();            m2.Show();        }        private void buttonReturn_Click(object sender, EventArgs e)        {            this.Close();        }        private void StuGradeMain_FormClosing(object sender, FormClosingEventArgs e)        {            ManagerMain m2 = new ManagerMain();            m2.Show();        }    }}

(11)成绩统计页面:为管理员提供统计信息。

图20:成绩统计页面

对应C#实现如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace SchoolManage{    public partial class StatisiticMain : Form    {        public StatisiticMain()        {            InitializeComponent();        }        private void StatisiticMain_Load(object sender, EventArgs e)        {            // TODO: 这行代码将数据加载到表“mySchoolDataSet6.AVG1”中。您可以根据需要移动或移除它。            this.aVG1TableAdapter.Fill(this.mySchoolDataSet6.AVG1);        }        private void buttonReturn_Click(object sender, EventArgs e)        {            this.Close();                    }        private void StatisiticMain_FormClosing(object sender, FormClosingEventArgs e)        {            StuGradeMain m2 = new StuGradeMain();            m2.Show();        }    }}

(12)在主界面点击右上角的“×”即退出系统。

(注:以上页面中的“返回”、“退出”、“取消”、“×”选项均使得页面从当前界面返回到上一界面或上一级界面,并不使程序退出,仅主界面的“×”号可退出系统。)

图21:退出系统

以上就是本次数据库课程设计的全部内容啦,欢迎小伙伴们交流心得,批评指正。

转载请注明出处,未经同意禁止转载!