C#中实现登录功能的完整步骤

1. 准备工作

新建一个数据库StudentDB

-- 使用master 数据库
use master
go
if exists(select *from sysdatabases where name='StudentDB')
drop database StudentDB
go
create database StudentDB
go

在StudentDB中新建三张表

use StudentDB
go

-- 新建学生表
if exists (select *from sysobjects where name='Student')
drop table Student
go
create table Student
(
stuId   int primary key identity(2000,1),
stuName varchar(30) not null,
stuSex  char(2) not null,
stuAge  int not null,
stuTel  varchar(11) not null,
stuPWd  varchar(30) not null
)

-- 添加学生表的数据
insert into Student (stuName,stuSex,stuAge,stuTel,stuPWd)values('张三','男',21,'12345678543','123456')
insert into Student (stuName,stuSex,stuAge,stuTel,stuPWd)values('赵六','男',21,'12345678543','123456')
insert into Student (stuName,stuSex,stuAge,stuTel,stuPWd)values('韩菲','女',20,'12345678543','123456')

 -- 新建教师表
if exists (select *from sysobjects where name='Teacher')
drop table Teacher
go
create table Teacher
(
tId   int primary key identity(4000,1),
tName varchar(30) not null,
tSex  char(2) not null,
tAge  int not null,
tTel  varchar(11) not null,
tTitle varchar(20),
tPwd   varchar(30) not null
)
--添加教师表
insert into Teacher(tName,tSex,tAge,tTel,tTitle,tPwd)values('xx','男',32,'12345678901','副教授','123456')

 -- 新建管理员
if exists (select *from sysobjects where name='Admin')
drop table Admin
go
create table Admin
(
adminId   int primary key identity(4000,1),
adminName varchar(30) not null,
adminPWd  varchar(30) not null
)
-- 添加管理员表
insert into Admin(adminName,adminPwd) values('admin','123456')

新建一个winform 项目,修改文本框name 为,txtUserName,txtPwd;登录按钮name 为btnLogin、btnExit。

2.实现登录

功能实现分析

  1. 当用户点击登录的时候,程序首先判断用户名、密码是否为空,然后再根据单选按钮的值,去判断是哪一个角色进行登录。
  2. 上面的事情做好以后,我们要去把用户名和密码拿到数据库进行比较。先使用用户名当作查询条件,返回一个用户对象(管理员、学生、教师,根据具体情况而定,因为我们是用主键当作用户名,主键可以区分一个用户,所以使用用户名查询只返回一条数据)。判断对象是否为null,如果为null则说明用户不存在。否则就判断密码是否正确。

准备实体类

在项目中新建三个类,类名和表名一致,字段名和表里面的字段名一致。

添加类,选中项目->添加->类

管理员类

 public  class Admin
  {
        public int adminId { get; set; }
        public String adminName { get; set; }
        public String adminPwd { get; set; }
  }

学生类

public class Student
    {
        public int stuId { get; set; }
        public string stuName { get; set; }
        public string stuSex { get; set; }
        public int stuAge { get; set; }
        public string stuTel { get; set; }
        public string stuPwd { get; set; }

    }

教师类

 public class Teacher
 {
        public int tId { get; set; }
        public string tName { get; set; }
        public string tSex { get; set; }
        public int tAge { get; set; }
        public string tTel { get; set; }
        public string tTitle { get; set; }
        public string tPWd { get; set; }
 }

准备DBHelper类

public class DbHelper
    {
        /// <summary>
        /// 获取连接对象
        /// </summary>
        /// <returns></returns>
        public static SqlConnection GetConnection()
        {

            SqlConnection conn = null;
            try
            {
                //可能发生错误的代码
                if (conn == null)
                {
                    conn = new SqlConnection();
                    conn.ConnectionString = ConfigurationManager.ConnectionStrings["connString"].ToString();
                    conn.Open();
                    conn.Close();
                }
                return conn;
            }
            catch (Exception ex)
            {
                //发生异常以后要做的事情
                throw ex; // 把问题抛出,让程序员知道那里出了错误
            }
        }

        /// <summary>
        /// 执行增删改
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int GetExcuet(string sql)
        {
            // 1. 获取连接对象
            SqlConnection conn = GetConnection();
            try
            {
                // 2.打开链接
                conn.Open();
                //3.创建SqlCommand对象,sql语句,连接对象
                SqlCommand cmd = new SqlCommand(sql, conn);
                // 4.执行SQL,并返回受影响的行数
                return cmd.ExecuteNonQuery(); ;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }

        /// <summary>
        /// 返回执行查询的结果
        /// </summary>
        /// <returns></returns>
        public static DataTable GetDataSet(String sql)
        {
            try
            {
                // 1.获取链接对象
                SqlConnection conn = GetConnection();
                //2.创建适配器对象
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                //3.创建DataSet 对象
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds.Tables[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

    }

在App.config中添加 数据库连接字符串,在configuration标签下进行添加

<connectionStrings>
    <add name="connString" connectionString="Data Source=.;Initial Catalog=StudentDB;Persist Security Info=True;User ID=sa;Password=123456"/>
  </connectionStrings>

实现点击事件

当用户点击时候我们就去执行登录事件

根据我们分析,我们首先要判断用户和密码是否正确

           //获取用户名和密码
            string username = txtUserName.Text.Trim();
            string pwd = txtPwd.Text.Trim();
            //当用户名为空的时候就不往下面执行了
            if (username.Equals(""))
            {
                MessageBox.Show("用户名不能为空");
                return;
            }
            if (pwd.Equals(""))
            {
                MessageBox.Show("密码不能为空");
                return;
            }

在判断完所有的公共问题以后,接下来我们就要去判断是哪一个用户进行的登录的,我们可以通过单选按钮的checked属性,进行判断,然后分别去调用他们进行登录的方法。

           //管理员登录
            if (radAdmin.Checked)
            {
                AdminLogin(username);
            }
            //学生登录
            if (radStudent.Checked)
            {
               StudentLogin();
            }
            //教师登录
            if (radTeacher.Checked)
            {
                TeacherLogin();
            }

管理员登录方法实现,根据管理员的用户名进行查询,判断返回表的行数,如果行数小于1,那么表示改用户不存在,返回null,否则返回一个管理员对象。其他的类似

  private Admin AdminLogin(String username)
        {

            string sql = string.Format("select *from Admin where adminId={0}",username);
            DataTable table=  DbHelper.GetDataSet(sql);
            //判断表的行数,大于等于1表示有数据,用户存在,否则返回null
            if (table.Rows.Count < 1) return null;

            //新建一个admin对象
            Admin admin = new Admin();
            admin.adminId = Convert.ToInt32(table.Rows[0]["adminId"]);
            admin.adminName = table.Rows[0]["adminName"].ToString();
            admin.adminPwd = table.Rows[0]["adminPwd"].ToString();
            return admin;
        }

学生的登录方法

 private Student StudentLogin(string username)
        {
            string sql = string.Format("select *from Student where stuId={0}", username);
            DataTable table = DbHelper.GetDataSet(sql);
            //判断表的行数,大于等于1表示有数据,用户存在,否则返回null
            if (table.Rows.Count < 1) return null;

            /*新建一个student对象 ,这里只给了三个字段进行了赋值,
             * 因为我们登录的时候,只用到了id和密码,
             * 其他时候根据需求进行赋值
            */
            Student student = new Student();
            student.stuId = Convert.ToInt32(table.Rows[0]["stuId"]);
            student.stuName = table.Rows[0]["stuName"].ToString();
            student.stuPwd = table.Rows[0]["stuPwd"].ToString();
            return student;
        }

教师的登录方法

  private Teacher TeacherLogin(string username)
        {
            string sql = string.Format("select *from Teacher where tId={0}", username);
            DataTable table = DbHelper.GetDataSet(sql);
            //判断表的行数,大于等于1表示有数据,用户存在,否则返回null
            if (table.Rows.Count < 1) return null;

            /*新建一个student对象 ,这里只给了三个字段进行了赋值,
             * 因为我们登录的时候,只用到了id和密码,
             * 其他时候根据需求进行赋值
            */
            Teacher teacher = new Teacher();
            teacher.tId = Convert.ToInt32(table.Rows[0]["tId"]);
            teacher.tName = table.Rows[0]["tName"].ToString();
            teacher.tPWd = table.Rows[0]["tPWd"].ToString();
            return teacher;
        }

登录方法完成以后,我要对返回来的结果进行处理。首先判断对象是否为null,为null就说用户不存在。反之对象的密码进行比较,密码正确就弹出登录成功,密码不正确就提示密码不正确。

 private void btnLogin_Click(object sender, EventArgs e)
   {
       //获取用户名和密码
       string username = txtUserName.Text.Trim();
       string pwd = txtPwd.Text.Trim();
       if (username.Equals(""))
       {
           MessageBox.Show("用户名不能为空");
           return;
       }
       if (pwd.Equals(""))
       {
           MessageBox.Show("密码不能为空");
           return;
       }
       //管理员登录
       if (radAdmin.Checked)
       {
           /*为什么要返回来,因为以后处理逻辑可能在不同类里面,
            * 这里只是模拟进行分层操作*/
          Admin admin=  AdminLogin(username);
          if (admin == null)
          {
               MessageBox.Show("用户不存在");
               return;
           }
          if (!admin.adminPwd.Equals(pwd))
          {
               MessageBox.Show("密码错误");
               return;
          }

       }
       //学生登录
       if (radStudent.Checked)
       {
           Student  student= StudentLogin(username);
           if (student == null)
           {
               MessageBox.Show("用户不存在");
               return;
           }
           if (!student.stuPwd.Equals(pwd))
           {
               MessageBox.Show("密码错误");
               return;
           }
       }
       //教师登录
       if (radTeacher.Checked)
       {
           Teacher teacher=  TeacherLogin(username);

           if (teacher == null)
           {
               MessageBox.Show("用户不存在");
               return;
           }
           if (!teacher.tPWd.Equals(pwd))
           {
               MessageBox.Show("密码错误");
               return;
           }
       }

       MessageBox.Show("登录成功");
   }

总结

  1. 在登录中,我们首先先判断公共的条件,比如说用户名、密码为空等情况,巧用return ,让整个代码的逻辑变得简单。
  2. 在判断完公共的条件以后,在针对每一个具体的角色进行判判断。
  3. 使用使用用户名进行查询,判断返回表的行数,如果行数小于1那么,用户不存在,否则实例一个对象,并给对象赋值
  4. 判断返回对象的是否为空,如果为空则用户不存在,否则用户存在
  5. 最后对密码进行判断,如果密码正确则执行登录成功的操作,如果密码不正确则弹出密码不正确的提示。
  6. 项目下载地址:点击这里

到此这篇关于C#中实现登录功能的文章就介绍到这了,更多相关C#登录功能内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#实现的三种模拟自动登录和提交POST信息的方法

    本文实例讲述了C#实现的三种模拟自动登录和提交POST信息的方法.分享给大家供大家参考,具体如下: 网页自动登录(提交Post内容)的用途很多,如验证身份.程序升级.网络投票等,以下是用C#实现的方法. 网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三个.以下就分别用这三种方法来实现: 1.WebBrowser是个"迷你"浏览器,其特点

  • .NET C#使用微信公众号登录网站

    适用于:本文适用于有一定微信开发基础的用户 引言: 花了300大洋申请了微信公众平台后,发现不能使用微信公众号登录网站(非微信打开)获得微信帐号.仔细研究后才发现还要再花300大洋申请微信开放平台才能接入网站的登录.于是做为屌丝程序员的我想到了自己做一个登录接口. 工具和环境: 1. VS2013 .net4.0 C# MVC4.0 Razor 2.插件 A. Microsoft.AspNet.SignalR;时时获取后台数据 B.Gma.QrCodeNet.Encoding;文本生成二维码 实

  • C#实现简单的登录界面

    首先我们来看一个简单的制作过程 打开visual 2010,新建窗体,既然是登录窗口,那么就不让它出现最大化.最小化以及拖拉大小功能(上一节已经提到过怎么设置大小),如图所示,甚至窗体的Text属性值为"登录窗口",大小随意. 创建窗体之后就开始界面详细的组件布局了,主要是在左边拖拉控件,然后放到窗体中去,定义属性值.这些都比较简单. 到了代码响应阶段,双击登录按钮,进入代码视图: private void button1_Click(object sender, EventArgs

  • C#.NET实现网页自动登录的方法

    本文实例讲述了C#.NET实现网页自动登录的方法.分享给大家供大家参考.具体如下: 用C#语言编写一个Windows Form应用程序,实现自动登录一个特定的页面. 下面以自动登录:http://localhost/Web/Login.aspx 作为例子,讲解如何模拟手工输入用户名密码并点击登录,实现自动登录. 新建一个C#应用程序,给应用程序起个名字,如AutoLogin,在窗体中添加一个TextBox.Button,及WebBrowser控件,并为WebBrowser控件添加webBrows

  • C#可用于登录验证码的四位随机数生成方法

    本文实例讲述了C#可用于登录验证码的四位随机数生成方法.分享给大家供大家参考.具体实现方法如下: 这里提供了两种方法,调用其一即可: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SJ_random {     class Class_main     {        

  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法

    本文实例讲述了C#使用WebClient登录网站并抓取登录后的网页信息实现方法.分享给大家供大家参考,具体如下: C#登录网站实际上就是模拟浏览器提交表单,然后记录浏览器响应返回的会话Cookie值,再次发送请求时带着这个会话cookie值去请求就可以实现模拟登录的效果了. 如下类CookieAwareWebClient实现在发送请求时都带着cookie. public class CookieAwareWebClient : WebClient { private CookieContaine

  • C#有效防止同一账号多次登录(附三种方法)

    本文先为大家介绍如何利用缓存Cache方便地实现此功能. Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户: 而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息. 只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用

  • C#使用HttpWebRequest与HttpWebResponse模拟用户登录

    模拟艺龙旅游网登录,供大家参考,具体内容如下 想模拟登录,首先整理一下流程 1.通过360浏览器(IE,火狐等等)F12开发人员工具抓到相关数据 2.获取验证码(拿到cookie),登录时也需要使用 3.登录 F12调出开发人员工具,输入用户名,密码登录,看我们抓到了什么信息. Request URL:这个就是登录请求的url  https://secure.elong.com/passport/ajax/elongLogin 方式POST Form Data:这个是我们要POST传输的数据:

  • C#实现登录窗口(不用隐藏)

    (1).在程序入口处,打开登录窗口 复制代码 代码如下: static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Form form = new login(); form.Show(); Application.Run(); }   复制代码 代码如下: private void button1_Click(object sender

  • C# Winform中实现主窗口打开登录窗口关闭的方法

    在使用C#进行Winform编程时,我们经常需要使用一个登录框来进行登录,一旦输入的用户名密码登录成功,这时登录窗口应该关闭,而且同时打开主程序窗口.该如何来实现呢? 乍一想,很简单啊,打开主窗口就用主窗口的Show()方法,而关闭登录窗口就用登录窗口的Close()方法即可.即代码如下: Program.cs中代码: 复制代码 代码如下: Application.Run(new FormLogin()); 登录窗口(FormLogin)代码: 复制代码 代码如下: private void b

随机推荐