前言
用C#写了一个登录的结构,之前写的现在给贴出来供大家参考学习.上一篇博客写了一下三层结构的主要思想.
直接上图和代码吧!
数据库
我新建了一个名字是Login 的数据库,里边有两张表一张表是Score这个是为了添加数据,第二个是User表,登录时候用的账户密码都在里边.
下边是表里的数据设计
数据库就是这个样子的,然后就是C#的代码部分了
代码截图
主要的结构
UI层的用户界面
这个界面是不是很精巧,哈哈哈哈
主要控件的命名:
用户名输入:txtUserName
密码输入:txtPassword
登录按钮:btnLogin
UI层的代码
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 LoginUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void btnLogin_Click(object sender, EventArgs e)
{
try
{
//获取用户账号和密码,赋值给username,password
string userName = txtUserName.Text.Trim();
string password = txtPassword.Text;
//实例化B层LoginManager
Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
//mgr调用userlogin方法,将获得用户名和密码封装,准备传数据,跳转到B层
Login.Model.UserInfo user = mgr.UserLogin(userName, password);
MessageBox.Show("登录用户:" + user.UserName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
}
}
BLL层代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.BLL
{
public class LoginManager
{
public Login.Model.UserInfo UserLogin(string useName,string password)
{
//实例化D层
Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
Login.Model.UserInfo user=uDao.SelectUser(useName, password);
//如果user不为空值
if (user != null)//登录成功
{
Login.DAL.ScoreSAO sDao = new Login.DAL.ScoreSAO();//实例化D层
sDao.UpdateScore(useName, 10);//更新积分
return user;//返回user到U层
}
else
{
throw new Exception("登录失败.");//登录失败时的信息内容
}
}
}
}
DAL层代码
DbUtil连接数据库语句代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.DAL
{
class DbUtil
{
public static string ConnString = @"Server=Hao;Database=Login;User ID=sa;Password=123456";
//连接数据库语句
}
}
ScoreSAO数据库添加数据
(应该是ScoreDAO我给写错了,大家就这么看吧)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace Login.DAL
{
public class ScoreSAO
{
//updatescore方法需要传入username和value两个参数
public void UpdateScore(string userName,int value)
{
//实例化数据库连接conn
using (SqlConnection conn =new SqlConnection(DbUtil.ConnString))
{
//利用现有连接conn创建一个command,用于执行sql指令
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"insert into score(ID,UserName,Score)values(@ID,@UserName,@Score)";
//数据库中增加新的数据
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
cmd.Parameters.Add(new SqlParameter("@ID", "11"));
//打开数据库链接
conn.Open();
//执行sql指令
cmd.ExecuteNonQuery();
}
}
}
}
UserDAO数据库登录
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace Login.DAL
{
public class UserDAO
{
//设定两个参数,返回值类型为login.model.UserInfo,不要设置为bool
public Login.Model.UserInfo SelectUser(string userName,string password)
{
//using 作用为:可以自动关闭数据库
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
//建立一个查询,利用一个现有链接conn创建一个command,用于执行SQL指令
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"select ID,UserName,Password,Email from users where UserName=@UserName and Password=@Password";
//将sql语句赋值给cmd.commandtext
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Password", password));
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();//逐条的读取数据 使用executereader方法返回一个对象用reader接收
Login.Model.UserInfo user = null;//定义user为null
//设置循环把值传给user
while (reader.Read())
{
if (user==null)
{
user = new Login.Model.UserInfo();
}
user.ID = reader.GetInt32(0);
user.UserName = reader.GetString(1);
user.Password = reader.GetString(2);
if (!reader.IsDBNull(3))
{
user.Email = reader.GetString(3);
}
}
return user;
}
}
}
}
LoginModel层其实就是一个中间连接的作用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Login.Model
{
public class UserInfo
{
public int ID { get; set; }
public String UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
结束
上边的代码就是全部的三层结构,可以单步运行看看整个过程是怎样运行的,三层结构结束之后就开始研究七层结构了,貌似比这个要复杂,然后也可以用上前几天学习的设计模式了,设计模式是越用越熟的,单纯的学设计模式是学不好的.大家加油!!!