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

来源:互联网 发布:php工程师简历 编辑:程序博客网 时间:2024/04/29 09:46

客户端登陆界面如下:

客户端代码:

复制代码
                   Program.cs 中                   //在全局处理函数中忽略相关消息 不添加日志                   NetworkComms.IgnoreUnknownPacketTypes = true;                    ConnectionInfo connInfo = new ConnectionInfo("127.0.0.1", 2539);                                               Connection newTcpConnection = TCPConnection.GetConnection(connInfo);                    //连接服务器完成******************************************                    //初始化主窗口                    MainForm mainForm = new MainForm();                    //显示登录窗口                    frmLogin loginForm = new frmLogin(applicationName, mainForm, newTcpConnection);                                       //根据登陆窗口返回的信息,打开主窗口,或者是注册窗口                    if (loginForm.ShowDialog() == DialogResult.OK)                    {                        if(loginForm.Register == 5)                        {                         Application.Run(mainForm);                        }                        else                        {                          Register newRegister = new Register();                          newRegister.Initialize(newTcpConnection);                          Application.Run(newRegister);                        }                     }
复制代码

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

复制代码
 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实体类代码:

 [ProtoContract]    public class Users    {        #region Constructors        public Users()        { }        #endregion        #region Private Properties        private int id = -1;        private string userID = string.Empty;        private string name = string.Empty;        private string password = string.Empty;        private string declaring = string.Empty;        private int status = -1;        private bool isMale = false;        private int userLevel = -1;        private bool enabled = false;        private DateTime registerTime = DateTime.UtcNow;        private DateTime lastLoginTime = DateTime.UtcNow;        private int depID = -1;        private string department = string.Empty;        #endregion        #region Public Properties        [ProtoMember(1)]        public int Id        {            get { return id; }            set { id = value; }        }        [ProtoMember(2)]        public string UserID        {            get { return userID; }            set { userID = value; }        }        [ProtoMember(3)]        public string Name        {            get { return name; }            set { name = value; }        }        [ProtoMember(4)]        public string Password        {            get { return password; }            set { password = value; }        }        [ProtoMember(5)]        public string Declaring        {            get { return declaring; }            set { declaring = value; }        }        [ProtoMember(6)]        public int Status        {            get { return status; }            set { status = value; }        }        [ProtoMember(7)]        public bool IsMale        {            get { return isMale; }            set { isMale = value; }        }        [ProtoMember(8)]        public int UserLevel        {            get { return userLevel; }            set { userLevel = value; }        }        [ProtoMember(9)]        public bool Enabled        {            get { return enabled; }            set { enabled = value; }        }        [ProtoMember(10)]        public DateTime RegisterTime        {            get { return registerTime; }            set { registerTime = value; }        }        [ProtoMember(11)]        public DateTime LastLoginTime        {            get { return lastLoginTime; }            set { lastLoginTime = value; }        }        [ProtoMember(12)]        public int DepID        {            get { return depID; }            set { depID = value; }        }        [ProtoMember(13)]        public string Department        {            get { return department; }            set { department = value; }        }        #endregion    }
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);                  }
复制代码
 [ProtoContract]    public class LoginResult    {        [ProtoMember(1)]        public string Message { get; set; }        [ProtoMember(2)]        public string Department { get; set; }        [ProtoMember(3)]        public string UserName { get; set; }        public LoginResult() { }        public LoginResult(string message)        {            this.Message = message;        }        public LoginResult(string message,string department)        {            this.Message = message;            this.Department = department;        }        public LoginResult(string message, string department,string userName)        {            this.Message = message;            this.Department = department;            this.UserName = userName;        }    }
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)ASSELECT        [Id],        [UserID],        [Name],        [Password],        [Declaring],        [Status],        [IsMale],        [UserLevel],        [Enabled],        [RegisterTime],        [LastLoginTime],        [DepID],        [Department]        FROM        [dbo].[Users]        WHERE        UserID=@UserID
复制代码

 

0 0
原创粉丝点击