目录
前言
这个毕业论文提交系统是我参照网上的慢慢写出来的,第一次写博客可能写的不怎么样,望见谅。
本系统是基于C#语言的windows窗体程序,使用Visual Studio 2019编译器编写。数据库使用SQL Sever。
bilibili演示视频:https://www.bilibili.com/video/bv1Yh411e7vh
全部项目百度云链接:https://pan.baidu.com/s/1a6DBNSJzZ8w4OuVV-JBo5A
提取码:18iv
以下是本篇文章正文内容。
一、数据及项目的存储
1-1 数据库(SQL server)
数据库用户的密码采用MD5密文存储
1-2 项目目录
二、数据库的连接
通过在app.config文件中构造连接字符串(方便后面调用)
conn为后续调用该连接字符串的名称,localhost为数据库服务器名称,uid为SQL身份验证的id,pwd为密码,DataBase为数据库名称
<connectionStrings>
<add name ="conn" connectionString="Server =localhost; uid = sa; pwd = 123456; DataBase = mimaxue"/>
</connectionStrings>
三、登录界面的实现
3-1 验证码功能的实现
定义CreatRandomCode方法,通过对list中预先存储好的 字符,根据需要的验证码长度(比如4位)伪随机选取4个字符放到code中组成验证码。将验证码显示到lable标签中,点击lable可以刷新
public static string CreateRandomCode(int length) //生成由数字和大小写字母组成的验证码
{
string list = "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
//list中存放着验证码的元素
Random random = new Random();
string code = ""; //验证码
for (int i = 0; i < length; i++) //循环4次得到一个伪随机的4位数验证码
{
code += list[random.Next(0, list.Length - 1)];
}
return code;
}
private void label5_Click(object sender, EventArgs e)
{
label5.Text = CreateRandomCode(4); //生成一个4位的验证码,并显示在标签lable上。
}
3-2 用户登录(含SQL注入测试)
读取用户输入的用户名和密码以及验证码,首先检验验证码输入是否正确,如果错误刷新验证码重新输入,如果正确进行下面步骤。将用户输入的密码进行MD5加密同数据库存储的密码进行核对,判断密码是否正确。通过SqlConnection方法来对数据库建立连接,这里使用Sq1Parameter方法来声明变量,这样构造的SQL语句中会插入@,可以防止SQL注入。成功登录后系统将用户身份及名称显示在MessageBox中。
private void button2_Click(object sender, EventArgs e)
{
string username = this.username.Text;
string password = this.password.Text;
string yzm = this.yanzhengma.Text;
if (yanzhengma.Text.ToLower() != label5.Text.ToLower()) //验证码输入错误
{
MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
label5_Click(sender, e); //刷新一遍验证码
yanzhengma.Text = ""; //清空验证码输入框
return;
}
//创建MD5加密对象
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
//把加密的数据转化为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(password);
//对字节数组进行加密
bytes = md5.ComputeHash(bytes);
string pwd = BitConverter.ToString(bytes).Replace("-", "");
//第一 读取APP.config文件中的连接字符串
string conStr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
//第二 创建连接对象并指定连接
SqlConnection conn = new SqlConnection(conStr);
//第三 打开连接
conn.Open();
//通过其他的ADO对象,实现数据库的相关操作
//第四 进行用户登录操作
//1)构造SQL查询字符串(含参)
string sql = string.Format("select * from users where username = @username and password = @pwd");
//2)创建SqlParameter对象,并设置参数值
SqlParameter param1 = new SqlParameter("username", username);
SqlParameter param2 = new SqlParameter("pwd", pwd);
//3)创建命令对象SqlCommand并添加参数
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
SqlDataReader reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
MessageBox.Show("用户名或密码错误!请重试", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
this.username.Text = "";
this.password.Text = "";
this.yanzhengma.Text = "";
label5.Text = CreateRandomCode(4); //生成一个4位的验证码,并显示在标签lable上。
return;
}
while (reader.Read())
{
string status = reader["status"].ToString();
string sname = reader["username"].ToString();
string str = string.Format("你好{0}:{1}! 欢迎使用本系统 ", status, sname);
MessageBox.Show(str);
}
reader.Close();
//第五 关闭连接
conn.Close();
//跳转到主界面
this.Hide();
user main = new user();
main.Show();
}
3-3 管理员登录
管理员登录和用户登录基本相似,构造sql查询语句时添加了status检验,用来检验登录账户是否为管理员。
private void button3_Click(object sender, EventArgs e)
{
string username = this.username.Text;
string password = this.password.Text;
string yzm = this.yanzhengma.Text;
if (yanzhengma.Text.ToLower() != label5.Text.ToLower()) //验证码输入错误
{
MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
label5_Click(sender, e); //刷新一遍验证码
yanzhengma.Text = ""; //清空验证码输入框
return;
}
//创建MD5加密对象
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
//把加密的数据转化为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(password);
//对字节数组进行加密
bytes = md5.ComputeHash(bytes);
string pwd = BitConverter.ToString(bytes).Replace("-", "");
//读取APP.config文件中的连接字符串
string conStr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
//创建连接对象并指定连接
SqlConnection conn = new SqlConnection(conStr);
//打开连接
conn.Open();
//查找管理员
string sql = string.Format("select * from users where username = @username and password = @pwd and status = '管理员'");
//创建SqlParameter对象,并设置参数值
SqlParameter param1 = new SqlParameter("username", username);
SqlParameter param2 = new SqlParameter("pwd", pwd);
//创建命令对象SqlCommand并添加参数
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add