录播教室预约系统(五)-用户登陆

客户端登陆界面如下:

客户端代码:

                   Program.cs 中

                   NetworkComms.IgnoreUnknownPacketTypes = =  ConnectionInfo(, =
                    MainForm mainForm = 
                    frmLogin loginForm = 
                     (loginForm.ShowDialog() ==(loginForm.Register == =

登陆窗口中的登陆按钮相关代码

 private void btnLogin_Click(object sender, EventArgs e)
        {            // 如果通过输入验证
            if (UserInputCheck())
            {                try
                {                    // 保存登录身份是否合法验证结果
                    bool isPass = false;

                    Users theUser = new Users();

                    theUser.UserID = txtLoginName.Text.Trim();
                    theUser.Password = txtUserPwd.Text.Trim(); 
                    //发送当前登陆用户的信息给服务器,并从服务器获取返回的信息
                    LoginResult loginResult = newTcpConnection.SendReceiveObject<LoginResult>("Login", "LoginResult", 5000, theUser);                     

                    if (loginResult.Message=="登录成功")
                    {                        //记录用户名

                        netConfiguration.UserID = theUser.UserID;

                        netConfiguration.Save();                        //初始化主窗口中的属性
                        theUser.Department = loginResult.Department;
                        theUser.Name = loginResult.UserName;
                         
                        mainForm.InitiaLize(this.newTcpConnection, theUser);                       
                        // 标识验证通过
                        isPass = true;
                        Register = 5;                        this.DialogResult = DialogResult.OK;
                    }                    // 如果未通过验证
                    if (!isPass)
                    {
                        
                        MessageBox.Show(loginResult.Message);
                    }
                }                catch (Exception ex)
                {
                    ShowLoginLostToolTip(ex);
                }
            }
        }

User.cs实体类代码:

 Users实体类,支持Protobuf.net序列化

服务器端程序的处理代码:

在服务器端构造函数中声明针对登陆操作的处理器:

    //用户验证处理器
            NetworkComms.AppendGlobalIncomingPacketHandler<Users>("Login", HandleUserVerify);

 //用户登录验证
        private void HandleUserVerify(PacketHeader header, Connection connection, Users theUser)
        {
            LoginResult loginResult = new LoginResult();

            Users currentUser = DoUsers.GetUserByID(theUser.UserID);            string message;            if (currentUser != null)
            {                if (currentUser.Password == theUser.Password)
                    message = "登录成功";                else if (currentUser.Password == "msdcmsdcmsdcmsdcmsdc")
                    message = "用户未开通,请与管理员联系";                else if (currentUser.Password != theUser.Password)
                    message = "用户名密码不匹配";                else
                    message = "登录不成功,原因未知";
            }            else
            {
                message = "用户不存在";
            }

            loginResult.Message = message;
            loginResult.Department = currentUser.Department;
            loginResult.UserName = currentUser.Name;

            connection.SendObject("LoginResult", loginResult);

          

        }

 LoginResult契约类

DoUsers类中相关方法

   public static Users GetUserByID(string userID)
        {            using (IDataReader reader = DBUsers.GetOneByUserID(userID))
            {
                
                Users theUser = PopulateFromReader(reader);                return theUser;

             
            }

        }

   private static Users PopulateFromReader(IDataReader reader)
        {
            Users Users = new Users();            if (reader.Read())
            {
                Users.Id = Convert.ToInt32(reader["Id"]);
                Users.UserID = reader["UserID"].ToString();
                Users.Name = reader["Name"].ToString();
                Users.Password = reader["Password"].ToString();
                Users.Declaring = reader["Declaring"].ToString();
                Users.Status = Convert.ToInt32(reader["Status"]);
                Users.IsMale = Convert.ToBoolean(reader["IsMale"]);
                Users.UserLevel = Convert.ToInt32(reader["UserLevel"]);
                Users.Enabled = Convert.ToBoolean(reader["Enabled"]);
                Users.RegisterTime = Convert.ToDateTime(reader["RegisterTime"]);
                Users.LastLoginTime = Convert.ToDateTime(reader["LastLoginTime"]);
                Users.DepID = Convert.ToInt32(reader["DepID"]);
                Users.Department = reader["Department"].ToString();

            }            return Users;
        }

DBUsers类中相关方法

  //根据UserID获取记录

        public static IDataReader GetOneByUserID(string userID)
        {
            SqlParameterHelper sph = new SqlParameterHelper(GetReadConnectionString(), "Users_SelectOneByUserID", 1);
        
            sph.DefineSqlParameter("@UserID", SqlDbType.NVarChar, 200, ParameterDirection.Input, userID);            return sph.ExecuteReader();

        }

数据库中相关的存储过程

CREATE PROCEDURE [dbo].Users_SelectOneByUserID
 

@UserID  nvarchar(100)

AS

SELECT
        [Id],
        [UserID],
        [Name],
        [Password],
        [Declaring],
        [Status],
        [IsMale],
        [UserLevel],
        [Enabled],
        [RegisterTime],
        [LastLoginTime],
        [DepID],
        [Department]
        
FROM
        [dbo].[Users]
        
WHERE
        [email protected]

时间: 2024-07-31 14:35:20

录播教室预约系统(五)-用户登陆的相关文章

录播教室预约系统序言

大概一年多年前吧,朋友让我帮他做一个预约系统,当时刚好在学习networkcomms.net的2.3.1版本(本人当时已购买商业版),正好想测试一下networkcomms.net通讯框架的稳定性,于是便开发了此预约系统,基于networkcomms2.3.1 .部署后,系统非常的稳定,平时的cpu占有率非常的低,很少有达到5%以上的情况,当然用户数也并不多,并发数最多大概100左右,没有出现过宕机等情况. 下面将会写一系列文章,来介绍录播教室预约系统的开发,诸位朋友可以了解如何基于networ

录播教室预约系统(八)-客户端部门管理员增加教室

录播教室预约系统(八)-客户端部门管理员增加教室 管理员增加完成后,其他用户就可以看到多个教室了,如图: 我们看一下客户端增加教室的代码: 添加教室:             //声明一个教室实体类             ClassRoom classRoom = == = tcpConnection.SendReceiveObject<ResMessage>(, ,  (resMessage.Message == =  + 我们看一下服务器端的处理程序 构造函数中声明: //学校管理员添加

录播教室预约系统(十)-客户端部门管理员重置本单位其他人员密码

录播教室预约系统(十)-客户端部门管理员重置本单位其他人员密码 客户端代码:  //发出的数据类型为int类型  ItemID为用户对应的ID             ResMessage resMessage = tcpConnnection.SendReceiveObject<ResMessage>("ReqResetPsw", "ResResetPsw", 5000, itemID);            if (resMessage.Messa

录播教室预约系统(九)-客户端部门管理员设定教室的预约规则

录播教室预约系统(九)-客户端部门管理员设定教室的预约规则 设置预约规则的客户端代码:              int stopHourInt = (int)stopHour.Value;            int stopMinuteInt = (int)stopMinute.Value;            //截止的时间             int stopTimeInt = stopHourInt * 100 + stopMinuteInt;            //提前的

录播教室预约系统(六)-注册新用户

预约系统中,新用户可以自己注册,然后管理员开通. 注册界面如下: 客户端新用户注册代码:       button1_Click((txtUserID.Text.Trim ()==|| txtUserName.Text.Trim ()=== ==== = newTcpConnection.SendReceiveObject<ResMessage>(, ,  (resMessage.Message ==  + 服务器端的相关处理代码: 构造函数中声明:   //注册新用户            

录播教室预约系统(十一)-客户端获取本单位的所有教室

客户端用户登陆后,在主界面中可以看到本单位的所有教室,我们来看一下是如何获取的: 客户端代码:    //根据用户获取功能教室列表         private void GetRooms(Users user)         {              //把当前用户信息发送个服务器端,并获取到本用户相关的教室列表              RoomList roomList = newTcpConnection.SendReceiveObject<RoomList>("Ge

录播教室预约系统(四)-ClassRoom表[带有外键的表]

ClassRoom是与教室信息相关的表,包含教室的名称 这个表比前面介绍的DepTable表稍微复杂点,他有一列DepID 这列是与DepTable表中的ID相对应的的. 有了DepID这一列,我们就可以根据DepID 获取某单位的所有教室. 我们暂时把DepID这一列叫做外键列吧.对于拥有外键列的表,仍然可以用我们的codesmith模板生成相关的存储过程和类.有的时候我们希望能够以外键为参数查找相关的数据, 所以在对应的codesmith模板中增加了以外键为参数查找和以外键为参数自动分页查找

录播教室预约系统(七)-客户端更改密码

界面如下: 客户端代码:  //用这2个属性映射新密码和旧密码             //原密码            this.currentUser.Password = textBox1.Text.Trim();             //新密码            this.currentUser.NewPassword = textBox2.Text.Trim();             //把带有密码信息的契约类 currentUser发送到服务器端,并获取返回结果     

录播教室预约系统(一)-数据库表

数据库用的是mssql2005. 数据库表如下: USE [RoomSchedule] GO /****** 对象: Table [dbo].[ClassRoom] 脚本日期: 02/07/2015 22:41:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[ClassRoom]( [Id] [int] IDENTITY(1000,1) NOT NULL, [RoomName] [nv