C# 三层登录结构实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39674002/article/details/82698330

前言

用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; }
    }
}

结束

上边的代码就是全部的三层结构,可以单步运行看看整个过程是怎样运行的,三层结构结束之后就开始研究七层结构了,貌似比这个要复杂,然后也可以用上前几天学习的设计模式了,设计模式是越用越熟的,单纯的学设计模式是学不好的.大家加油!!!

猜你喜欢

转载自blog.csdn.net/qq_39674002/article/details/82698330